Перейти к содержанию
Авторизация  
KFan

Пишем Квест На Питоне (1 Из 5 Частей)

Рекомендуемые сообщения

Будем учиться писать квесты на Python.

Мануал авторский, не откуда не скопирован.

Мануал долгий и нудный расчитан на полное разжевывание каждой запятой,

у кого нет терпения можете не читать

 

Для начала определяем, что это будет, простой нпц который выполнит какую то операцию и все,

или же квест со сценарием который нужно вывести в окне квестов в игре.

 

1. Если простой нпц или вывод в окно квестов не нужен то можно поставить квест в папку data/scripts/custom/

2. Если все таки квест требует вывода то он должен распологаться здесь data/scripts/quest/

 

Cоздаем главный файл __init__.py

 

Первые строки которые там должны быть в любом скрипте:

import sys
from com.l2jfrozen.gameserver.model.quest import State
from com.l2jfrozen.gameserver.model.quest import QuestState
from com.l2jfrozen.gameserver.model.quest.jython import QuestJython as JQuest

Далее введем несколько переменных (Для простоты, и чтобы в случае чего не пришлось лезть в глубь скрипта)

к примеру:

NPC_ID = [40001] - Какие нпц будут задействованы, лично я рекомендую создавать здесь массив, то есть все в квадратных скобках и через запятую
qn = "9990_testquest" - название нашего квеста (так он будет записан в базе)

QuestId = -1 - если квест не требует вызова квест окна значит можно смело ставить -1 ну а если все таки нужно значит ставим любое не занятое число другими квестами
QuestDesc = "custom" - в идеале это не так важно, но я все таки так пишу

print qn + " Loading...." - это нужно чтобы знать грузиться ли наш квест вообще...

теперь перейдем в самый конец скрипта, вот что там должно быть:

 

QUEST = Quest(QuestId, qn, QuestDesc) - Здесь идет обьявление квеста, по выше указанным переменным
CREATED	 = State('Start', QUEST) - Это статус квеста можно вводить другие виды...
STARTED	 = State('Started', QUEST) - Это статус квеста можно вводить другие виды...
COMPLETED   = State('Completed', QUEST) - Это статус квеста можно вводить другие виды...
QUEST.setInitialState(CREATED) - Это какой статус будет присваиваться квесту в самом начале разговора с нпц, то есть автоматически

for i in NPC:
QUEST.addStartNpc(i)
QUEST.addTalkId(i)

 

Теперь поясню для чего мы использовали массив для указания нпц, т.к. бывают случаи что нужно использовать более 1 нпц, делают цикл, нежели указывать 4 значения вместо двух,

именно по этому чтобы облегчить задачу мы указали массив в данном случае там одно число, значит цикл пройдет 1 раз и задействован будет 1 раз, то есть фактически разницы нет,

разница в том что если будет 10 нпц, придеться вводить 20 строк, а в этом случае всего 3 строки при любом их количестве.

Так же если в квесте нужно будет убивать монстров то нужно добавить строки

MOB_ID = [40001]
for i in MOB_ID :
QUEST.addKillId(i)

 

Теперь немного о питоне, синтаксис питона немного отличается от явы, все разделения зависят от "пробелов" пример:

if 1 > 2:							  if 1 > 2:
stat = "yes"						   stat = "yes"
print stat								 print stat

 

Это 2 разных кода, в 1 принт выведеться в любом случае, а во втором только при верно условии...

 

перейдем к телу скрипта

Этот код расположен обычно между print в начале и перед обьявлением переменной квест QUEST в конце

Обьяснить первые строки я не смогу))) так я сам не изучал основ питона))))

 

class Quest (JQuest) :

def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)

def onTalk (self, npc, player): - это то что будет видеть игрок при начале разговора...
htmltext = "1.htm"
st = player.getQuestState(qn)
if not st : return htmltext
npcId = npc.getNpcId()
return htmltext

def onEvent(self, event, st): - Этот метод используется после начала разговора
htmltext = event
return htmltext

 

есть еще много методов onKill к примеру, он используется когда моб внесенный в список был убит, или onAttack он используется каждый раз когда моб был атакован

 

теперь давайте сделаем так чтобы при разговоре игроку в системное сообщение писало "Hello! Quest start!"

Начнем... Я думаю вы разберетесь куда это вставить...

 

 def onTalk (self, npc, player):
htmltext = "Error" - в данном случае это не нужно, но я оставлю...
st = player.getQuestState(qn) - получаем информацию о статусе квеста
if not st : return htmltext - если квест не начался шлем ошибку
htmltext = "Hello! Quest start!"
npcId = npc.getNpcId() - это нужно только если вы используется более 1 нпц...
return htmltext - есть пара моментов, если в переменной htmltext будет html код то выведеться окно, а если нет то будет вывод просто в окно системных сообщений игрока

 

Это так)) нубо квест))

Теперь сделаем кое что посложнее, попробуйте прочитав код определить что будет происходить а потом проверьте правильно ли вы его поняли :pardon:

 

 def onTalk (self, npc, player):
htmltext = "Error"
st = player.getQuestState(qn)
if not st : return htmltext
if st.getQuestItemsCount(57) >= 5000000 :
	htmltext = "<html><body>Yes! Go location! :)</body></html>"
	st.takeItems(57, 5000000)
	teleToLocation(x, y, z)
else :
	htmltext = "<html><body>Hey! Fuck! Dead!"
	st.getPlayer().reduceCurrentHp(st.getPlayer().getMaxHp() + st.getPlayer().getMaxCp() + 1, st.getPlayer())
return htmltext

 

В данном случае проверяется, если у игрока есть адена в количестве 5000000 или больше, то ее забирают и телепортируют куда то,

а если нет то он труп :)

 

Так же есть такая особенность что в папку со скриптом можно положить файлы к примеру 1.htm, 2.htm и в различных ситуациях их показывать, в питоне нельзя писать русские символы а в html файлах можно

просто вместо htmltext = "..." нужно писать htmltext = "1.htm" ну или тому подобное

 

На сегодня все, в следующий раз напишу что то более стоящее :) Я думаю то что здесь есть разжеванно так что даже младенец спокойной проглотит)))

 

Извиняйте за орфорграфические ошибки))

 

Это 1 часть

 

следующая часть появиться как только будет время

 

Кому нужно вот txt файл этого гайда Скачать

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мммм спасибо, жду продолжения, интересная информация, может быть напишу свой первый квест)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я думаю ссылку на сам квест у нпц люди смогут сделать))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...