мануал. Создание квестов
Первое что нужно сделать, это добавить необходимые Java классы в квест. (net.sf.l2j.gameserver.model.quest).
PHP код:
Класс State используется для того, что бы описать информацию о состоянии квеста. Класс QuestState применяется непосредственно для отслеживания состояния игрока, о ходе выполнения квеста или части квеста. Затем необходимо добавить несколько констант, что сделает квест удобочитаемым. Если этого не сделать, то могут возникнуть сложности с редактированием квеста в будущем. Константы нашего квеста – это ID NCP и итемов. PHP код:
Функция для получения количества квестовых предметов (keltir fangs) у игрока. (st должна быть в QuestState): PHP код:
PHP код:
И наконец вспомогательная функция для проверки необходимого количества клыков у игрока для завершения квеста. (st должна быть в QuestState): PHP код:
PHP код:
• self – ссылка на себя. • id – численный идентификатор квеста для клиента. • name – имя квеста, которое будет опубликовано непосредственно с самом сервере. • descr – имя описания квеста, показываемое игроку, когда берет квест у NCP, у которого можно взять, кроме этого квеста, еще и другой. Метод onEvent вызывается от Явы. Осуществляет начало квеста. Имеет параметры: • self – ссылка непосредственно на Tutorial Quest • event – строка для идентификации эвента для Явы. • st – ссылка на QuestState, для отслеживания текущего состояния игрока. В первой строке идет проверка на текущее состояние квеста непосредственно для игрока и состояние запивается в переменную ‘id’. Если квест только взят, то объявляем начало квеста (if id == CREATED : st.setState(STARTED)). Если квест уже выполнен, то ничего не делаем elif id == COMPLETED: pass) Если квест уже начат (STARTED), то вызывается функция проверки (check(), определенная выше) количества клыков у персонажа для завершения квеста. Мы не проверяем переменную ‘event’, т.к. в нашем примере (Tutorial quest) все события происходят от разговоров с NCP. Метод onEvent вызывается, если поговорить с NCP. И наконец, когда скелет квеста определен, мы создаем сам квест (и определяем его в самом сервере) и объявляем его. PHP код:
Так же мы должны определить начальное состояние квеста, когда игрок его только взял, и так же стартового NCP. PHP код:
PHP код:
PHP код:
PHP код:
Игрок подходит к начальному NCP (в данном случае 7056), нажимает на «Quest». Квест будет создан и состояние квеста перейдет к CREATED и игроку будет показана страничка Start.htm с описанием квеста. Тогда метод onEvent, поле открытия странички Start.htm переведет состояние квеста в STARTED и игроку будет показана страничка Started.htm, где будет опсание того, как найти keltirs и .т.д. При состоянии STARTED будет зарегистрирован дроп «fangs» при убийстве keltirs. Игрок может вернуться к стартовому NCP и спросить о квесте – метод onEvent будет вызван снова. Если у игрока не хватает необходимого количества предметов, то метод check() не переведет квест в следующее состояние и Started.htm будет показана снова. Но если игрок собрал необходимее количество предметов (в данном случае 4 клыка), то метод check() вызовет метод completed() который переведет квест в новое состояние COMPLETED, заберет все клыки, даст карту мира, т.к. это награда за квест, покажет Completed.htm и завершит квест. Теперь давайте сделаем наш квест более похожим на то, что он должен из себя представлять. Прежде всего у нас есть 3 метода для объявления их в Яве – onTalk, onKill и onEvent. Если методы onTalk и onKill не объявлены, то за них все будет делать метод onEvent, т.е. определять квестовых монстров и вызывать диалоги NCP. Есть примечание, методы onTalk и onKill будут вызывать только диалоги с NCP в зависимости от текущего состояния квеста. Метод onKill будет вызываться только тогда, когда мы убиваем квестового монстра. Давайте рассмотрим как вызывается метод onKill при убийстве keltir в состоянии квеста STARTED: PHP код:
PHP код:
Метод onKill (а так же метод onTalk) имеет следующие параметры: • self – квест • npcId – ID NCP, которого мы должны убивать (если это метод onTalk, то ID того NCP, с которым мы должны поговорить). • st – текущее состояние игрока. В этом методе мы проверяем и отмечаем, является ли убитый NCP keltir’ом. В основном эта проверка не нужна, т.к. у нас только KELTIR_NPC_ID. Затем проверяем количество предметов (в данном случае количество клыков), и если их вообще нет, то возвращаем строку "Chat0.htm", если только один предмет, то возвращаем строку "Chat1.htm", если же предметов 4 или больше, то "Chat4.htm". Если строка возвращена из методов onEvent, onKill или onTalk, то сервер покажет соответствующие htm. В Chat0.htm может иметь следующий текст: «Вы не имеете ни одного клыка, возвращайтесь позже, когда соберете 4 штуки и бла, бла, бла…», в Chat1.htm может быть следующий текст: «У Вас всего 1 клык, по этому соберите еще…». В Chat4.htm – «Вы собрали необходимое количество предметов, возвращайтесь к вашему тренеру, что бы завершить квест…» Примечание: если в строка return начинается с "<html>", то будет показана страничка html с текстом, который стоит далее. Так вместо: PHP код:
PHP код:
|
Так же если строка заканчивается без .htm или в начале нет <html>, то текст будет выведен, как системное сообщение в окне чата. В нашем случае мы сделаем так, что бы при каждом убийстве keltik выводилось системное сообщение: «Собрано N из 4-х клыков».
Наш код для onKill имеет один недостаток. Он будет постоянно показывать Chat0.htm, Chat1.htm и Chat4.htm, нам же необходимо, что бы Chat0.htm и Chat1.htm показывались только один раз. Как нам это сделать? С помощью переменных. В каждом квесте строки могут храниться с помощью переменных. Эти переменные сохраняются в Вашей БД. В каждом методе мы можем назначить, прочитать и удалить переменные. Давайте изменим метод onKill, так что бы каждый диалог вызывался только один раз. Код:
def onKill (self,npcId,st): Вот конечный рабочий вариант квеста: Код:
import sys |
Ответ: мануал. Создание квестов
Я где - от в инете видел прогу которая сама создает квесты по заданным параметрам. Скажите свои мысли если кто такую встречал и успел опробовать.
|
Ответ: мануал. Создание квестов
Цитата:
P.S Это только мое мнение, может кто-то и не согласится;) |
Ответ: мануал. Создание квестов
Почему не согласятся? Все согласятся! :) Программы, это хорошо, но вы же потом тот квест и поправить не сможете. Кстати, программа для написания квестов была написана для старых сборок, и как я понимаю давно не обновлялась, так как не была востребованной.
|
Re: мануал. Создание квестов
Ребят,а есть совсем чайниковский мануал ? :) ато я чет прям сначала не понял как это делать) просто с явой дел не имел..с чего начинать то хоть?
|
Re: мануал. Создание квестов
Цитата:
Подскажите: Цитата:
|
Re: мануал. Создание квестов
Вообще это не совсем файл. Т.е. по сути файл (с кодом) тут только "quest". Всё остальное - путь к нему.
В винде это выглядело бы так: net:\\sf\l2j\gameserver\model\quest Ну и соответственно искать его в исходниках по этому "пути". Но главное в том, что в этот файл тебе ничего добавлять не нужно. Ты просто ссылаешься на него и указываешь компилятору что из файла "quest" будут использоваться функции "State", "QuestState" и "QuestJython", иначе глупый компилятор не поймёт, откуда ты вызываешь эти функции и ничего не сможет собрать :) |
Re: мануал. Создание квестов
Привет всем. Вот мучаюсь с такой проблемкой:
Создал квест по мануалу, вроде все как нада, но почему то в startGameServer.bat квест не загружается. А при разговоре с начальным НПЦ после нажатия "задание" он выдаёт I have no tasks for you right now. Вот ссылка на мануал: http://forum.doom55.ru/index.php?showtopic=50282 Мой квест: Ссылка у нпц на квест тоже есть... |
Re: мануал. Создание квестов
Добавь путь к игишнику в script.grp
и добавь в аську 574055171 |
Текущее время: 10:41. Часовой пояс GMT +3. |
Powered by vBulletin® Version 3.8.6
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot