Авторизация

Войдите, используя свой логин и пароль:

  • Страница 1 из 1
  • 1
Модератор форума: BlesseNtumble  
Форум » Lineage 2 "Java" » Мануалы » Учимся писать квесты на python часть 3
Учимся писать квесты на python часть 3
Отправлено 14.12.2009 - 16:071
Пользователи
100 сообщений
Мужчина
Статус: Offline
Code
return "Chat4.htm"

можно поставить:
Code
return "<html><body>Return to your trainer to complete the quest</body></html>"

Так же если строка заканчивается без .htm или в начале нет <html>, то текст будет выведен, как системное сообщение в окне чата. В нашем случае мы сделаем так, что бы при каждом убийстве keltik выводилось системное сообщение: «Собрано N из 4-х клыков».

Наш код для onKill имеет один недостаток. Он будет постоянно показывать Chat0.htm, Chat1.htm и Chat4.htm, нам же необходимо, что бы Chat0.htm и Chat1.htm показывались только один раз. Как нам это сделать? С помощью переменных.

В каждом квесте строки могут храниться с помощью переменных. Эти переменные сохраняются в Вашей БД. В каждом методе мы можем назначить, прочитать и удалить переменные. Давайте изменим метод onKill, так что бы каждый диалог вызывался только один раз.

Code
def onKill (self,npcId,st):
     if npcId == KELTIR_NPC_ID:
       n = getCount(st)
       if   n == 0:
         if st.get('chat0') == None :
           st.set("chat0", "true")
           return "Chat0.htm"
       elif n == 1:
         if st.get('chat1') == None :
           st.set("chat1", "true")
           return "Chat1.htm"
       elif n >= 4:
           return "Chat4.htm"
       return "Collected "+str(n)+" of 4 fangs"
     return

Если у игрока нет клыков (n=0), то мы получаем занчение переменной 'chat0'. Когда метод onKill вызван в первый раз, то пока ни каких переменных не имеется и python возвращает значение None. В этом случае объявляется переменная и показывается диалог Chat0.htm. Когда мы убиваем keltir, но не получаем с него клык, функция st.get('chat0') возвращает строку true, а не None. И во второй раз окно с Chat0.htm не появится, но в окне чата появится строчка «Collected 0 of 4 fangs». По тому же принципу сделано и с Chat1.htm.
Вот конечный рабочий вариант квеста:
Code
import sys
from net.sf.l2j.gameserver.model.quest import State
from net.sf.l2j.gameserver.model.quest import QuestState
from net.sf.l2j.gameserver.model.quest.jython import QuestJython as JQuest

KELTIR_NPC_ID = 12082
FANGS_ITEM_ID = 1859
DROP_RATE     = 500000

WORLD_MAP_ITEM_ID = 1665

def getCount(st) :
   return st.getQuestItemsCount(FANGS_ITEM_ID)
   
def completed(st) :
   st.setState(COMPLETED)
   st.clearQuestDrops()
   st.takeItems(FANGS_ITEM_ID,-1)
   st.giveItems(WORLD_MAP_ITEM_ID,1)
   st.exitQuest(False)
   return

def check(st) :
   if getCount(st) >= 4 :
     completed(st)
   return

class Quest (JQuest):

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

   def onEvent (self,event,st):
     id = st.getState()
     if   id == CREATED  : st.setState(STARTED)
     elif id == COMPLETED: pass
     elif id == STARTED  : check(st)
     return

   def onKill (self,npcId,st):
     if npcId == KELTIR_NPC_ID:
       n = getCount(st)
       if   n == 0:
         if st.get('chat0') == None :
           st.set("chat0", "true")
           return "Chat0.htm"
       elif n == 1:
         if st.get('chat1') == None :
           st.set("chat1", "true")
           return "Chat1.htm"
       elif n >= 4:
           return "Chat4.htm"
       return "Collect "+str(n)+" of 4 fangs"
     return

QUEST     = Quest(201, "Tutorial", "Tutorial quest")
CREATED   = State('Start',     QUEST)
STARTED   = State('Started',   QUEST)
COMPLETED = State('Completed', QUEST)

QUEST.setInitialState(CREATED)
QUEST.addStartNpc(7056)
QUEST.addStartNpc(7012)
QUEST.addStartNpc(7009)
QUEST.addStartNpc(7011)  

STARTED.addQuestDrop(KELTIR_NPC_ID,FANGS_ITEM_ID,DROP_RATE)
STARTED.addKillId(KELTIR_NPC_ID)
STARTED.addTalkId(7056)
STARTED.addTalkI d(7012)
STARTED.addTalkId(7009)
STARTED.addTalkId(7011)

автор (с) Inna-Hot

#----------------------------------------#
#L2jFrost Server Developer Team. #
#L2jFrost WebDesign #
#--------------------------------------#
Профиль Личное сообщение Дом. страница icq
17
Отправлено 26.12.2011 - 22:152
Пользователи
1 сообщений
Мужчина
Статус: Offline
MsKira, помоги с квестом Задача:
Когда Камаэль идет получать 2 и 3 профу, у него при смене, должен изыматся 1 предмет с ID=138. Причем, если у Камаэля в инвентаре нет этого предмета, то смена класса не должна осуществляться.
вот квест http://rghost.ru/35616323
Профиль Личное сообщение Дом. страница icq
0
Отправлено 27.12.2011 - 20:103
Пользователи
528 сообщений
Мужчина
Статус: Offline
давно не актуально. Java only.
Нужна помощь? Обращайся!
http://flash-dev.in.ua
Профиль Личное сообщение Дом. страница icq
49
Форум » Lineage 2 "Java" » Мануалы » Учимся писать квесты на python часть 3
  • Страница 1 из 1
  • 1
Поиск: