квест на медальки
При разговоре с кошкой и выборе "Я хочу обменять медали на призы" или "Я хочу повысить уровень коллекционера" выдает одну и туже фразу
Вот код квеста.
from com.equal.gameserver.model.quest import State
from com.equal.gameserver.model.quest import QuestState
from com.equal.gameserver.model.quest.jython import QuestJython as JQuest
qn = "111_HeavyMedal"
#cats
ROY = 31230
WINNIE = 31229
#item
EVENT_GLITTERING_MEDAL = 6393
#marks
RABBIT = 6399
HYENA = 6400
FOX = 6401
WOLF = 6402
CHANCE = 35
PAY = 5
class Quest (JQuest) :
def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
def onEvent (self,event,st) :
cond = st.getInt("cond")
if event == "game" :
if cond == 0 and st.getQuestItemsCount(EVENT_GLITTERING_MEDAL) >= PAY*1 :
st.playSound("ItemSound.quest_accept")
htmltext = "game.htm"
elif cond == 1 and st.getQuestItemsCount(EVENT_GLITTERING_MEDAL) >= PAY*2 :
st.playSound("ItemSound.quest_accept")
htmltext = "game.htm"
elif cond == 2 and st.getQuestItemsCount(EVENT_GLITTERING_MEDAL) >= PAY*4 :
st.playSound("ItemSound.quest_accept")
htmltext = "game.htm"
elif cond == 3 and st.getQuestItemsCount(EVENT_GLITTERING_MEDAL) >= PAY*8 :
st.playSound("ItemSound.quest_accept")
htmltext = "game.htm"
else: htmltext = "less.htm"
elif event == "play" :
if st.getRandom(100)<CHANCE :
if cond == 0 :
if st.getQuestItemsCount(EVENT_GLITTERING_MEDAL) >= PAY*1 :
st.takeItems(EVENT_GLITTERING_MEDAL,PAY*1)
st.giveItems(RABBIT,1)
st.set("cond","1")
st.playSound("ItemSound.quest_itemget")
htmltext = "win-1.htm"
else :
htmltext = "less.htm"
elif cond == 1 :
if st.getQuestItemsCount(EVENT_GLITTERING_MEDAL) >= PAY*2 :
st.takeItems(EVENT_GLITTERING_MEDAL,PAY*2)
st.takeItems(RABBIT,1)
st.giveItems(HYENA,1)
st.set("cond","2")
st.playSound("ItemSound.quest_itemget")
htmltext = "win-1.htm"
else :
htmltext = "less.htm"
elif cond == 2 :
if st.getQuestItemsCount(EVENT_GLITTERING_MEDAL) >= PAY*4 :
st.takeItems(EVENT_GLITTERING_MEDAL,PAY*4)
st.takeItems(HYENA,1)
st.giveItems(FOX,1)
st.set("cond","3")
st.playSound("ItemSound.quest_itemget")
htmltext = "win-1.htm"
else :
htmltext = "less.htm"
elif cond == 3 :
if st.getQuestItemsCount(EVENT_GLITTERING_MEDAL) >= PAY*8 :
st.takeItems(EVENT_GLITTERING_MEDAL,PAY*8)
st.takeItems(FOX,1)
st.giveItems(WOLF,1)
st.set("cond","4")
st.playSound("ItemSound.quest_finish")
htmltext = "win.htm"
else :
htmltext = "less.htm"
else:
htmltext = "lose.htm"
if cond == 0 :
st.takeItems(EVENT_GLITTERING_MEDAL,PAY*1)
elif cond == 1:
st.takeItems(EVENT_GLITTERING_MEDAL,PAY*2)
elif cond == 2 :
st.takeItems(EVENT_GLITTERING_MEDAL,PAY*4)
elif cond == 3 :
st.takeItems(EVENT_GLITTERING_MEDAL,PAY*8)
return htmltext
def onTalk (self,npc,player):
st = player.getQuestState(qn)
npcId = npc.getNpcId()
cond = st.getInt("cond")
htmltext = "<html><body>Мне нечего тебе сказать</body></html>"
if not st : return htmltext
if npcId == WINNIE :
if st.getQuestItemsCount(RABBIT) == 0 and st.getQuestItemsCount(HYENA) == 0 and st.getQuestItemsCount(FOX) == 0 and st.getQuestItemsCount(WOLF) == 0 :
htmltext = "5.htm"
st.set("cond","0")
elif cond == 1 :
htmltext = "10.htm"
elif cond == 2 :
htmltext = "20.htm"
elif cond == 3 :
htmltext = "40.htm"
elif st.getQuestItemsCount(WOLF) == 1 :
htmltext = "win.htm"
else: htmltext = "win.htm"
elif npcId == ROY :
if st.getQuestItemsCount(RABBIT) == 0 and st.getQuestItemsCount(HYENA) == 0 and st.getQuestItemsCount(FOX) == 0 and st.getQuestItemsCount(WOLF) == 0 :
htmltext = "roy.htm"
elif st.getQuestItemsCount(RABBIT) == 1 :
htmltext = "roy-1.htm"
elif st.getQuestItemsCount(HYENA) == 1 :
htmltext = "roy-2.htm"
elif st.getQuestItemsCount(FOX) == 1 :
htmltext = "roy-3.htm"
elif st.getQuestItemsCount(WOLF) == 1 :
htmltext = "roy-4.htm"
return htmltext
QUEST = Quest(111,qn,"custom")
CREATED = State('Start', QUEST)
STARTED = State('Started', QUEST)
COMPLETED = State('Completed', QUEST)
# Quest initialization
QUEST.setInitialState(CREATED)
# Quest NPC starter initialization
QUEST.addStartNpc(ROY)
QUEST.addStartNpc(WINNIE)
QUEST.addTalkId(ROY)
QUEST.addTalkId(WINNIE)
print "Loaded: "+qn
Квест лежит в папке quests и подключен в файле __init__.py
При загрузке GS ошибок что квест не загружен не выдает.
Я бы предположил что надо подправить в первой хетемельке ссылку (которая не в квесте а в папке "html" лежит), а подправить на более точную ссылку на квест (после слова "quest" через пробел дописать название эвента с медальками).
Реплика 1 кошки
<a action="bypass -h npc_%objectId%_Quest">Я хочу обменять медали на призы</a>
Реплика 2 кошки
<a action="bypass -h npc_%objectId%_Quest">Я хочу повысить уровень коллекционера</a><br1>
Что дописать, подскажи подалуйста.
хм
вообще правильнее былобы так:
Реплика 1 кошки
<a action="bypass -h npc_%objectId%_Quest 111_HeavyMedal">Я хочу обменять медали на призы</a>
Реплика 2 кошки
<a action="bypass -h npc_%objectId%_Quest 111_HeavyMedal">Я хочу повысить уровень коллекционера</a><br1>
Но тут тоже оксяк получается... надо выбор между обменять и повысить делать в самом квесте... То есть там создавать новый диалог, давать на него ссылку а в нутри прописать так:
<a action="bypass -h Quest 111_HeavyMedal change">Я хочу обменять медали на призы</a>
и после этого описать в "onEvent" новый "event" - change при котором будет происходить обмен, и тоже самое для второго сделать...
Решил не морочиться и просто убрал этот вариант, дав кошке простую мультиселку.

