Jump to content

[script][npc] Advanced Tombstone v1.03


Recommended Posts


  • Group:  Members
  • Topic Count:  2
  • Topics Per Day:  0.00
  • Content Count:  13
  • Reputation:   9
  • Joined:  12/29/11
  • Last Seen:  

[script][npc] Advanced Tombstone v1.03

Зачастую игроки хотят знать, когда воскреснет MVP, да и кто такой супер-крутой его смог забить, а многим админам хотелось бы иметь удобный инструмент для работы с MVP (отключить не залезая в конфиги, убить, чтобы игроки могли спокойно бегать по локации или оживить убитого MVP для соискателей приключений).

Описание

Скрипт позволяет управлять MVP (и не только, при желание), получать информацию о состояние MVP.

Скачать

Скрипт версии 1.03: скачать (в базе монстров все mvp от 13.2, Maya Purple и один тестовый квестовый моб)

(Используя скрипт вы обязуетесь следовать лицензионному соглашению указанному в скрипте)

Вот список возможностей:

  • После смерти Монстра создаётся Tombstone с информацией о монстре, кто его убил и времени его воскрешения;
  • Имеется несколько режимов состояние монстра (Живой, мёртвый и ждёт воскрешения, отлючен);
  • Запоминание режима даже после перезагрузки (координаты Tombstone так же запоминаются);
  • При отключение выставляется в стандартно установленное место (Координаты прописываются в таблицу скрипта);
  • Координаты respawn'а выставляются как и в map monster (а не как в areamonster, кому интересна разница читайте doc'и);
  • Время respawn'а указывается как в map monster (а не как в оригинальном Tombstone);
  • Можно указывать имя моба, а не брать стандартное из mobdb;
  • Специальный NPC с помощью которого GM'ы могут управлять режимом монстров (Убить монстра, оживить немедленно, отключить) и получить некоторые сведения о состояние монстра;
  • После смерти монстра создаётся NPC Tombstone с окном чата сообщающим когда монстр оживёт, что он отключен или был убит и квест завершён;
  • При разговоре с NPC Tombstone сообщается имя убившего (отключившего) его персонажа, для GM'ов есть функция мгновенного оживления монстра;
  • Создание монстра можно вызывать из любого скрипта (методом вызова глобальной функции), что позволяет делать квесты.

Недостатки и ошибки

Я могу назвать только одну ошибку — при использование GM команды @killmonster скрипт работает некорректно.

Так же не работает зеркало (будет говорить, что MVP на карте необнаружены, imho, не критично, т.к. Tombstone показывает нужную информацию и без того).

Если что-то найдёте — отписывайтесь.

Скриншоты

atombstone_1_thumb.jpg atombstone_2_thumb.jpg atombstone_3_thumb.jpg atombstone_4_thumb.jpg

Примечание

Базы монстров скрипта настроены на обычный сервер, не Renewal, если вам нужно для Renewal, то боюсь придётся немного потрудиться :) базы сильно отличаются.

Вы так же должны очистить(закомментировать) все записи о расположение текущих монстров в скриптах NPC.

Для доступа к MVP Master и функции оживления монстра из Tomb'а нужен GM уровень не ниже 50ого, иначе NPC вас будут просто троллить :)

Таблица монстров скрипта

Массивы данных:

		setarray .mvpbmid[0],0; // Mob ID
	setarray .mvpbdl1[0],0; // Respawn Delay1 (in seconds, if is 0 - then mob consider as Quest Mob and not creating on first OnInit)
	setarray .mvpbdl2[0],0; // Respawn Delay2 (in seconds, if is 0 - then not create Tomb and Chat Room)

	// Default Tombstone coordinates X,Y
	setarray .mvpbcdx[0],0;
	setarray .mvpbcdy[0],0;

	// Area coordinates to spawn X,Y,X1,Y1 (if X and Y = 0 - get random area)
	setarray .mvpbcx[0],0;
	setarray .mvpbcy[0],0;
	setarray .mvpbcx1[0],0;
	setarray .mvpbcy1[0],0;

	setarray .mvpbaname$[0],""; // Name for Admins NPC (if empty then get from MobDB)
	setarray .mvpbmname$[0],""; // Mob name
	setarray .mvpbevent$[0],""; // Do Event on Kill Monster (empty to nothing todo)

mvpbmid — MobID (идентификатор монстра) соответствующий идентификатору в базе - mob_db.txt

mvpbdl1 — Время респауна (указывается в секундах!), через какое минимальное кол-во времени монстр воскреснит, если значение установлено равное 0, то монстр считается квестовым и после своей смерти он не пересоздаётся, чат комната так же имеет иное содержание, а не время до следующего респауна

mvpbdl2 — Разница во времени респауна (в большую сторону, указывается в секундах), если значение установлено равное 0, то после смерти монстра не создаётся его Tombstone

mvpbcdx, mvpbcdy — Расположение по-умолчанию Tombstone (X, Y), это место, где будет установлен Tombstone при убийстве или отключение монстра через Admin NPC

mvpbcx, mvpbcy, mvpbcx1, mvpbcy1 — X, Y - коордианты появления монстра (если координаты равны 0, то коордианты берутся случайным образом относительно всей локации), X1, Y1 - разброс в появление монстра (X, Y при этом являются центром зоны появления, а X1, Y1 - диаметром)

mvpbaname$ — Название монстра для меню Admin NPC, если оставить пустым, то возьмётся имя из базы

mvpbmname$ — Название монстра, можно указывать какое имя из базы брать ("--ja--" - корейское название, "--en--" - английское название, или указывать своё название)

mvpbevent$ — Обработка Event после смерти моба, чаще всего необходима для создания квестов (смотрите пример в скрипте с Yggas'Worth)

Пример для монстра Fallen Bishop:

		callsub(L_AddMobDB,1871,7200,600,238,73,236,78,21,18,"","--en--","");

Добавление монстра

Добавление монстра проходит в две стадии — первая стадия включает в себя дубликата NPC на нужную локацию с определённым именем, вторая — прописывание данных в таблицу монстров скрипта.

Итак, для начала добавляем дубликат NPC, тут ничего сложного, находим последнюю запись дубликатов, допустим, у нас всего два монстра и последняя запись, пусть будет примерно такая:

prontera,0,0,0	duplicate(tombstone_dup)	Tomb#2_mvp	565

Запоминаем, что название NPC — Tomb#2_mvp, сейчас нам очень важна скрытая часть названия «2_mvp» — здесь важная цифра, это «2», значит в таблице всего 2 монстра, добавляем нашего нового монстра, пусть это будет Beelzebub (#1873), заглядываем в npc/mobs/dungeons/abbey.txt и находим нашего монстра:

abbey03,0,0,0,0	boss_monster	Beelzebub	1873,1,43200000,600000,1

Комментируем эту строчку и добавляем после последнего найденного нами дубликата NPC в скрипте строчку, указывая в скрытом название NPC следующий номер (2_mvp был последним, значит теперь будет 3_mvp):

abbey03,0,0,0	duplicate(tombstone_dup)	Tomb#3_mvp	565

Отлично, теперь нам надо добавить информацию о монстре, добавляем в таблицу монстров скрипта строчку:

		callsub(L_AddMobDB,1873,43200,600,120,112,0,0,0,0,"","--en--","");

Монстр добавлен и при перезагрузке появится на указанной локации.

Немного о глобальной функции

Для взаимодействия самого скрипта монстров с внешними NPC было созданное небольшое API (не слишком хорошо написанное, но рабочее). Это функция tmvp_menu, она имеет входящие ключи для определения того, что именно вам нужно (getarg(0)), вот id ключей и их краткое описание:

0 - Вызывается при основном OnInit скрипта монстров, создаёт нужные переменные и устанавливает первый пункт для Admin NPC - «Nothing»

1 - Вызывается при OnInit скрипта монстров, запоминает нужные данные для последующей работы

2 - Возвращает созданное меню (список монстров со статусом, работает медленно, т.к. обращается к глобальным данным)

3 - Устанавливает режим монстра в «Суицид», входящим данным (getarg(1)) является номер пункта меню, возвращает 0 — если всё прошло успешно, 1 — монстр не может быть установлен в режим (режим уже установлен или монстр отключен)

4 - Устанавливает режим монстра в «Оживить», возвращает 0 — если монстр создан успешно, 1 — монстр уже создан и не может быть создан снова, входящим данным является номер монстра (mvpbid) в таблице монстров скрипта

5 - Возвращается текст из пункта меню (Обычно это имя монстра), входящим данным является номер пункта меню

6 - Устанавливает режим монстра в «Суицид», входящим данными является mvpbid и имя персонажа, которое будет установлено как имя убийцы монстра, возвращаемые данные такие же, как и для 3

7 - Возвращает состояние монстра (Текстовое сообщение), входящим данным является mvpbid

8 - Возвращается mvpbid, входящим данным является номер пункта меню

9 - Устанавливает режим монстра в «Убить и отключить», входяшими данными является mvpbid и имя персонажа, возвращает 0 — при успешном выполнение, 1 — если монстр уже отключён.

Формат вызова функции:

callfunc("tmvp_menu", <номер ключа>(, <входящие переменные>));

Входящие переменные:

mvpbid — это ID монстра в таблице скрипта, это не одно и то же, что и MobID.

номер пункта меню — это уникальный идентификатор пункта меню для Admin NPC, который создаётся в 0 и 1 ключах функции, вызывается такое меню ключом 2

charname — имя персонажа игрока

Пример, убить монстра №2:

callfunc("tmvp_menu", 6, 2, strcharinfo(0));

Пример, воскресить монстра №2:

callfunc("tmvp_menu", 4, 2);

Для наглядности в скрипт добавлен NPC Yggas'Worth, он создаёт Поринга с кастумным названием и ждёт пока вы его не убьёте. На самом деле это самый простой пример, но вы можете добавлять каких-либо сложных монстров и создавать на этой основе квесты.

Немного о глобальных переменных

Их несколько, но вы можете использовать их в своих скриптах для создания квестов:

$tmvp<mvpbid>_state — Признак состояния монстра (см ниже)

$tmvp<mvpbid>_nick$ — Имя персонажа убившего монстра (учтите, что при измененеие состояния эта переменная не очищается)

$tmvp<mvpbid>_x и $tmvp<mvpbid>_y — Координаты где расположен Tombstone (учтите, что при измененеие состояния эта переменная не очищается)

$tmvp<mvpbid>_time — Время (указан tick с момента начала эпохи) до начала действия признака события (используется только для подсчёта времени respawn'а монстра)

$tmvp<mvpbid>_created — Создан ли монстр (необходимо для некоторых проверок) (0 - нет, не создан, 1 - создан и бегает)

$tmvp<mvpbid>_frun — Первый или нет запуск (0 - первый запуск, 1 - запуск уже был), необходимо для квестовых мобов, чтобы они не создавались

Признаки состояния монстров:

0 — Монстр жив и где-то бегает

1 — Признак на суицид

2 — Монстр убит и ожидает времени respawn'а

3 — Признак на немедленное оживление

4 — Признак на суицид и отключение

5 — Монстр отключён и ждёт включения

6 — Для квестового монстра, состояние его смерти (убит и ожидает оживления через квест)

Вы можете использовать эти данные для написания скриптов квестов (смотрите пример в скрипте на Yggas'Worth).

Механика

Скрипт работает на режимах, это так называемые признаки событий, действия происходят не мгновенно, а только создают признак этого события. К примеру, вы выставляете монстру признак события на суицид, обработка этого события произойдёт в течени 5 секунд, когда внутренний обработчки скрипта распознает этот признак и примет решение о том, что нужно сделать. Итерация обработчика - 5 секунд (OnTimer5000), вы можете поменять это значение на другое, но на свой страх и риск, учтите, что чем меньше вы делаете время обработки, тем больше нагрузок создаётся на ваш сервер (я считаю идеальным обработку каждые 10 секунд, но выставил 5, чтобы задержка составляла минимальную серверную).

Благодарности

Своей девушке, что разрешала работать над скриптом по ночам ^_^

Sanasol — автору основного скрипта, я взял кусочек его кода (функция вывода времени, копирайт указан в скрипте, прошу прощения, было лень писать точно такую же функцию).

Heler'у — за то, что оказывал некоторую помощь.

nndsl — за подкинутую идею.

Edited by wl.illusion
  • Upvote 5
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...