123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559 |
- # version 0.1
- # by DrLecter
- 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
- # variables section
- REQUIRED_EGGS = 20
- #Drop rates in %
- BACK_DROP = 30
- EGG_DROP = 50
- #Quest items
- FRY_STN,FRY_STN_DLX,FSN_LIST,FSN_LIST_DLX,TD_BCK_SKN,JUICE,SCALE_1,EX_EGG,\
- SCALE_2,ZW_EGG,SCALE_3,KA_EGG,SCALE_4,SU_EGG,SCALE_5,SH_EGG,FRY_DUST = range(3816,3832)+[3499]
- #NPCs
- PM_COOPER,SG_CRONOS,GD_BYRON,MC_MARIA,FR_MYMYU = 7829,7610,7711,7608,7747
- DK_EXARION,DK_ZWOV,DK_KALIBRAN,WM_SUZET,WM_SHAMHAI = range(7748,7753)
- #mobs
- TD_LORD = 231 #toad lord
- LO_LZRD_W = 580 #exarion's
- MS_SPIDER = 233 #zwov's
- RD_SCVNGR = 551 #kalibran's
- BO_OVERLD = 270 #suzet's
- DD_SEEKER = 202 #shamhai's
- #Rewards
- FOOD = 4038
- ARMOR = 3912
- # helper functions section
- def check_level(st) :
- if st.getPlayer().getLevel() < 35 :
- st.exitQuest(True)
- return "420_low_level.htm"
- return "Start.htm"
- def check_stone(st) :
- progress = int(st.get("progress"))
- if st.getQuestItemsCount(FRY_STN) == 1 :
- st.set("cond","3")
- if progress == 1 :
- st.set("progress","3")
- return "420_cronos_8.htm"
- elif progress == 8 :
- st.set("progress","10")
- return "420_cronos_14.htm"
- elif st.getQuestItemsCount(FRY_STN_DLX) == 1 :
- if progress == 2 :
- st.set("progress","4")
- return "420_cronos_8.htm"
- elif progress == 9 :
- st.set("progress","11")
- return "420_cronos_14.htm"
- else :
- return "420_cronos_7.htm"
- def check_elements(st) :
- progress = int(st.get("progress"))
- coal = st.getQuestItemsCount(1870)
- char = st.getQuestItemsCount(1871)
- gemd = st.getQuestItemsCount(2130)
- gemc = st.getQuestItemsCount(2131)
- snug = st.getQuestItemsCount(1873)
- sofp = st.getQuestItemsCount(1875)
- tdbk = st.getQuestItemsCount(TD_BCK_SKN)
- if progress in [1,8] :
- if coal >= 10 and char >= 10 and gemd >= 1 and snug >= 3 and tdbk >= 10 :
- return "420_maria_2.htm"
- else :
- return "420_maria_1.htm"
- elif progress in [2,9] :
- if coal >= 10 and char >= 10 and gemc >= 1 and snug >= 5 and sofp >= 1 and tdbk >= 20 :
- return "420_maria_4.htm"
- else :
- return "420_maria_1.htm"
- def craft_stone(st) :
- progress = int(st.get("progress"))
- if progress in [1,8]:
- st.takeItems(1870,10)
- st.takeItems(1871,10)
- st.takeItems(2130,1)
- st.takeItems(1873,3)
- st.takeItems(TD_BCK_SKN,10)
- st.takeItems(FSN_LIST,1)
- st.giveItems(FRY_STN,1)
- st.playSound("ItemSound.quest_itemget")
- return "420_maria_3.htm"
- elif progress in [2,9]:
- st.takeItems(1870,10)
- st.takeItems(1871,10)
- st.takeItems(2131,1)
- st.takeItems(1873,5)
- st.takeItems(1875,1)
- st.takeItems(TD_BCK_SKN,20)
- st.takeItems(FSN_LIST_DLX,1)
- st.giveItems(FRY_STN_DLX,1)
- st.playSound("ItemSound.quest_itemget")
- return "420_maria_5.htm"
- def check_eggs(st, npc) :
- progress = int(st.get("progress"))
- whom = int(st.get("dragon"))
- if whom == 1 : eggs = EX_EGG
- elif whom == 2 : eggs = ZW_EGG
- elif whom == 3 : eggs = KA_EGG
- elif whom == 4 : eggs = SU_EGG
- elif whom == 5 : eggs = SH_EGG
- if npc == "mymyu" :
- if progress in [19,20] and st.getQuestItemsCount(eggs) == 1 :
- return "420_"+npc+"_10.htm"
- else :
- if st.getQuestItemsCount(eggs) >= 20 :
- return "420_"+npc+"_9.htm"
- else :
- return "420_"+npc+"_8.htm"
- elif npc == "exarion" and whom == 1 :
- if st.getQuestItemsCount(eggs) < 20 :
- return "420_"+npc+"_3.htm"
- else :
- st.takeItems(eggs,20)
- st.takeItems(SCALE_1,1)
- if progress in [14,21] :
- st.set("progress","19")
- elif progress in [15,22] :
- st.set("progress","20")
- st.giveItems(eggs,1)
- st.playSound("ItemSound.quest_itemget")
- st.set("cond","7")
- return "420_"+npc+"_4.htm"
- elif npc == "zwov" and whom == 2 :
- if st.getQuestItemsCount(eggs) < 20 :
- return "420_"+npc+"_3.htm"
- else :
- st.takeItems(eggs,20)
- st.takeItems(SCALE_2,1)
- if progress in [14,21] :
- st.set("progress","19")
- elif progress in [15,22] :
- st.set("progress","20")
- st.giveItems(eggs,1)
- st.set("cond","7")
- st.playSound("ItemSound.quest_itemget")
- return "420_"+npc+"_4.htm"
- elif npc == "kalibran" and whom == 3 :
- if st.getQuestItemsCount(eggs) < 20 :
- return "420_"+npc+"_3.htm"
- else :
- st.takeItems(eggs,20)
- # st.takeItems(SCALE_3,1)
- return "420_"+npc+"_4.htm"
- elif npc == "suzet" and whom == 4 :
- if st.getQuestItemsCount(eggs) < 20 :
- return "420_"+npc+"_4.htm"
- else :
- st.takeItems(eggs,20)
- st.takeItems(SCALE_4,1)
- if progress in [14,21] :
- st.set("progress","19")
- elif progress in [15,22] :
- st.set("progress","20")
- st.giveItems(eggs,1)
- st.set("cond","7")
- st.playSound("ItemSound.quest_itemget")
- return "420_"+npc+"_5.htm"
- elif npc == "shamhai" and whom == 5 :
- if st.getQuestItemsCount(eggs) < 20 :
- return "420_"+npc+"_3.htm"
- else :
- st.takeItems(eggs,20)
- st.takeItems(SCALE_5,1)
- if progress in [14,21] :
- st.set("progress","19")
- elif progress in [15,22] :
- st.set("progress","20")
- st.giveItems(eggs,1)
- st.set("cond","7")
- st.playSound("ItemSound.quest_itemget")
- return "420_"+npc+"_4.htm"
- return "check_eggs sux"
- # Main Quest Code
- 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 : progress = int(st.get("progress"))
- if id == CREATED :
- st.set("cond","0")
- if event == "ido" :
- st.setState(STARTING)
- st.set("progress","0")
- st.set("cond","1")
- st.set("dragon","0")
- st.playSound("ItemSound.quest_accept")
- return "Starting.htm"
- elif id == STARTING :
- if event == "wait" :
- return craft_stone(st)
- elif event == "cronos_2" :
- return "420_cronos_2.htm"
- elif event == "cronos_3" :
- return "420_cronos_3.htm"
- elif event == "cronos_4" :
- return "420_cronos_4.htm"
- elif event == "fsn" :
- st.set("cond","2")
- if progress == 0:
- st.set("progress","1")
- st.giveItems(FSN_LIST,1)
- st.playSound("ItemSound.quest_itemget")
- return "420_cronos_5.htm"
- elif progress == 7:
- st.set("progress","8")
- st.giveItems(FSN_LIST,1)
- st.playSound("ItemSound.quest_itemget")
- return "420_cronos_12.htm"
- elif event == "fsn_dlx" :
- st.set("cond","2")
- if progress == 0:
- st.set("progress","2")
- st.giveItems(FSN_LIST_DLX,1)
- st.playSound("ItemSound.quest_itemget")
- return "420_cronos_6.htm"
- if progress == 7:
- st.set("progress","9")
- st.giveItems(FSN_LIST_DLX,1)
- st.playSound("ItemSound.quest_itemget")
- return "420_cronos_13.htm"
- elif event == "showfsn" :
- return "420_byron_2.htm"
- elif event == "askmore" :
- st.set("cond","4")
- if progress == 3 :
- st.set("progress","5")
- return "420_byron_3.htm"
- elif progress == 4 :
- st.set("progress","6")
- return "420_byron_4.htm"
- elif event == "give_fsn" :
- st.takeItems(FRY_STN,1)
- return "420_mymyu_2.htm"
- elif event == "give_fsn_dlx" :
- st.takeItems(FRY_STN_DLX,1)
- st.giveItems(FRY_DUST,1)
- st.playSound("ItemSound.quest_itemget")
- return "420_mymyu_4.htm"
- elif event == "fry_ask" :
- return "420_mymyu_5.htm"
- elif event == "ask_abt" :
- st.setState(STARTED)
- st.set("cond","5")
- st.giveItems(JUICE,1)
- st.playSound("ItemSound.quest_itemget")
- return "420_mymyu_6.htm"
- elif id == STARTED :
- if event == "exarion_1" :
- st.giveItems(SCALE_1,1)
- st.playSound("ItemSound.quest_itemget")
- st.set("dragon","1")
- st.set("cond","6")
- st.set("progress",str(progress+9))
- return "420_exarion_2.htm"
- elif event == "kalibran_1" :
- st.set("dragon","3")
- st.set("cond","6")
- st.giveItems(SCALE_3,1)
- st.playSound("ItemSound.quest_itemget")
- st.set("progress",str(progress+9))
- return "420_kalibran_2.htm"
- elif event == "kalibran_2" :
- if st.getQuestItemsCount(SCALE_3) :
- if progress in [14,21] :
- st.set("progress","19")
- elif progress in [15,22] :
- st.set("progress","20")
- st.takeItems(SCALE_3,1)
- st.giveItems(KA_EGG,1)
- st.set("cond","7")
- st.playSound("ItemSound.quest_itemget")
- return "420_kalibran_5.htm"
- elif event == "zwov_1" :
- st.set("dragon","2")
- st.set("cond","6")
- st.giveItems(SCALE_2,1)
- st.playSound("ItemSound.quest_itemget")
- st.set("progress",str(progress+9))
- return "420_zwov_2.htm"
- elif event == "shamhai_1" :
- st.set("dragon","5")
- st.set("cond","6")
- st.giveItems(SCALE_5,1)
- st.playSound("ItemSound.quest_itemget")
- st.set("progress",str(progress+9))
- return "420_shamhai_2.htm"
- elif event == "suzet_1" :
- return "420_suzet_2.htm"
- elif event == "suzet_2" :
- st.set("dragon","4")
- st.set("cond","6")
- st.giveItems(SCALE_4,1)
- st.playSound("ItemSound.quest_itemget")
- st.set("progress",str(progress+9))
- return "420_suzet_3.htm"
- elif event == "hatch" :
- whom = int(st.get("dragon"))
- if whom == 1 : eggs = EX_EGG
- elif whom == 2 : eggs = ZW_EGG
- elif whom == 3 : eggs = KA_EGG
- elif whom == 4 : eggs = SU_EGG
- elif whom == 5 : eggs = SH_EGG
- if st.getQuestItemsCount(eggs) and progress in [19,20] :
- st.takeItems(eggs,1)
- st.set("cond","8")
- if progress == 19 :
- st.giveItems(3500+st.getRandom(3),1)
- st.setState(COMPLETED)
- st.clearQuestDrops()
- st.exitQuest(True)
- st.playSound("ItemSound.quest_finish")
- return "420_mymyu_15.htm"
- elif progress == 20 :
- return "420_mymyu_11.htm"
- elif event == "give_dust" :
- if st.getQuestItemsCount(FRY_DUST):
- st.takeItems(FRY_DUST,1)
- luck = st.getRandom(2)
- if luck == 0 :
- extra = ARMOR
- qty = 1
- htmltext = "420_mymyu_13.htm"
- else :
- extra = FOOD
- qty = 100
- htmltext = "420_mymyu_14.htm"
- st.giveItems(3500+st.getRandom(3),1)
- st.giveItems(extra,qty)
- st.setState(COMPLETED)
- st.clearQuestDrops()
- st.exitQuest(True)
- st.playSound("ItemSound.quest_finish")
- return htmltext
- elif event == "no_dust" :
- st.giveItems(3500+st.getRandom(3),1)
- st.setState(COMPLETED)
- st.clearQuestDrops()
- st.exitQuest(True)
- st.playSound("ItemSound.quest_finish")
- return "420_mymyu_12.htm"
- def onTalk (self,npc,st):
- id = st.getState()
- npcid = npc.getNpcId()
- if id != CREATED : progress = int(st.get("progress"))
- if npcid == PM_COOPER :
- if id == CREATED :
- return check_level(st)
- elif id == STARTING and progress == 0 :
- return "Starting.htm"
- else :
- return "Started.htm"
- elif npcid == SG_CRONOS :
- if id == STARTING :
- if progress == 0 :
- return "420_cronos_1.htm"
- elif progress in [ 1,2,8,9 ] :
- return check_stone(st)
- elif progress in [ 3,4,10,11 ] :
- return "420_cronos_9.htm"
- elif progress in [5,6,12,13 ]:
- return "420_cronos_11.htm"
- elif progress == 7 :
- return "420_cronos_10.htm"
- elif npcid == MC_MARIA :
- if id == STARTING :
- if ((progress in [ 1,8 ] ) and st.getQuestItemsCount(FSN_LIST)==1) or ((progress in [ 2,9 ] ) and st.getQuestItemsCount(FSN_LIST_DLX)==1):
- return check_elements(st)
- elif progress in [ 3,4,5,6,7,10,11 ] :
- return "420_maria_6.htm"
- elif npcid == GD_BYRON :
- if id == STARTING :
- if ((progress in [ 1,8 ] ) and st.getQuestItemsCount(FSN_LIST)==1) or ((progress in [ 2,9 ] ) and st.getQuestItemsCount(FSN_LIST_DLX)==1):
- return "420_byron_10.htm"
- elif progress == 7 :
- return "420_byron_9.htm"
- elif (progress == 3 and st.getQuestItemsCount(FRY_STN)==1) or (progress == 4 and st.getQuestItemsCount(FRY_STN_DLX)==1):
- return "420_byron_1.htm"
- elif progress == 10 and st.getQuestItemsCount(FRY_STN)==1 :
- st.set("progress","12")
- return "420_byron_5.htm"
- elif progress == 11 and st.getQuestItemsCount(FRY_STN_DLX)==1 :
- st.set("progress","13")
- return "420_byron_6.htm"
- elif progress in [5,12] :
- return "420_byron_7.htm"
- elif progress in [6,13] :
- return "420_byron_8.htm"
- elif npcid == FR_MYMYU :
- if id == STARTING :
- if ( progress in [5,12] ) and st.getQuestItemsCount(FRY_STN) == 1 :
- return "420_mymyu_1.htm"
- elif ( progress in [6,13] ) and st.getQuestItemsCount(FRY_STN_DLX) == 1 :
- return "420_mymyu_3.htm"
- elif id == STARTED :
- if progress < 14 and st.getQuestItemsCount(JUICE) == 1 :
- return "420_mymyu_7.htm"
- elif progress > 13 :
- return check_eggs(st,"mymyu")
- elif npcid == DK_EXARION :
- if id == STARTED :
- if progress in [ 5,6,12,13 ] and st.getQuestItemsCount(JUICE) == 1:
- st.takeItems(JUICE,1)
- return "420_exarion_1.htm"
- elif progress > 13 and st.getQuestItemsCount(SCALE_1) == 1:
- return check_eggs(st,"exarion")
- elif progress in [ 19,20 ] and st.getQuestItemsCount(EX_EGG) == 1 :
- return "420_exarion_5.htm"
- elif npcid == DK_ZWOV :
- if id == STARTED :
- if progress in [ 5,6,12,13 ] and st.getQuestItemsCount(JUICE) == 1:
- st.takeItems(JUICE,1)
- return "420_zwov_1.htm"
- elif progress > 13 and st.getQuestItemsCount(SCALE_2) == 1:
- return check_eggs(st,"zwov")
- elif progress in [ 19,20 ] and st.getQuestItemsCount(ZW_EGG) == 1 :
- return "420_zwov_5.htm"
- elif npcid == DK_KALIBRAN :
- if id == STARTED :
- if progress in [ 5,6,12,13 ] and st.getQuestItemsCount(JUICE) == 1:
- st.takeItems(JUICE,1)
- return "420_kalibran_1.htm"
- elif progress > 13 and st.getQuestItemsCount(SCALE_3) == 1:
- return check_eggs(st,"kalibran")
- elif progress in [ 19,20 ] and st.getQuestItemsCount(KA_EGG) == 1 :
- return "420_kalibran_6.htm"
- elif npcid == WM_SUZET :
- if id == STARTED :
- if progress in [ 5,6,12,13 ] and st.getQuestItemsCount(JUICE) == 1:
- st.takeItems(JUICE,1)
- return "420_suzet_1.htm"
- elif progress > 13 and st.getQuestItemsCount(SCALE_4) == 1:
- return check_eggs(st,"suzet")
- elif progress in [ 19,20 ] and st.getQuestItemsCount(SU_EGG) == 1 :
- return "420_suzet_6.htm"
- elif npcid == WM_SHAMHAI :
- if id == STARTED :
- if progress in [ 5,6,12,13 ] and st.getQuestItemsCount(JUICE) == 1:
- st.takeItems(JUICE,1)
- return "420_shamhai_1.htm"
- elif progress > 13 and st.getQuestItemsCount(SCALE_5) == 1:
- return check_eggs(st,"shamhai")
- elif progress in [ 19,20 ] and st.getQuestItemsCount(SH_EGG) == 1 :
- return "420_shamhai_5.htm"
- return "<html><head><body>I have nothing to say to you</body></html>"
- def onKill (self,npc,st):
- id = st.getState()
- npcid = npc.getNpcId()
- #incipios drop
- if id == STARTING and (st.getQuestItemsCount(FSN_LIST) == 1 and st.getQuestItemsCount(TD_BCK_SKN) < 10) or (st.getQuestItemsCount(FSN_LIST_DLX) == 1 and st.getQuestItemsCount(TD_BCK_SKN) < 20) :
- if npcid == TD_LORD :
- if st.getRandom(100) < BACK_DROP :
- st.giveItems(TD_BCK_SKN,1)
- if (st.getQuestItemsCount(FSN_LIST) and st.getQuestItemsCount(TD_BCK_SKN) == 10) or (st.getQuestItemsCount(FSN_LIST_DLX) and st.getQuestItemsCount(TD_BCK_SKN) == 20) :
- st.playSound("ItemSound.quest_middle")
- else :
- st.playSound("ItemSound.quest_itemget")
- #dragon detection
- elif id == STARTED and (st.get("progress") in [ "14","15","21","22" ]) :
- whom = int(st.get("dragon"))
- if whom == 1 :
- eggs = EX_EGG
- scale = SCALE_1
- eggdropper = LO_LZRD_W
- elif whom == 2 :
- eggs = ZW_EGG
- scale = SCALE_2
- eggdropper = MS_SPIDER
- elif whom == 3 :
- eggs = KA_EGG
- scale = SCALE_3
- eggdropper = RD_SCVNGR
- elif whom == 4 :
- eggs = SU_EGG
- scale = SCALE_4
- eggdropper = BO_OVERLD
- elif whom == 5 :
- eggs = SH_EGG
- scale = SCALE_5
- eggdropper = DD_SEEKER
- if st.getQuestItemsCount(scale) == 1 and st.getQuestItemsCount(eggs) < REQUIRED_EGGS :
- if npcid == eggdropper :
- if st.getRandom(100) < EGG_DROP :
- st.giveItems(eggs,1)
- if st.getQuestItemsCount(eggs) < REQUIRED_EGGS :
- st.playSound("ItemSound.quest_itemget")
- else :
- st.playSound("ItemSound.quest_middle")
- #fairy stone destruction
- elif id == STARTING and st.getQuestItemsCount(FRY_STN_DLX) == 1 :
- if npcid in range(589,600)+[719]:
- st.takeItems(FRY_STN_DLX,1)
- st.set("progress","7")
- return "you lost fairy stone deluxe!"
-
- # Quest class and state definition
- QUEST = Quest(420, "420_LittleWings", "Little Wings")
- CREATED = State('Start', QUEST)
- STARTING = State('Starting', QUEST)
- STARTED = State('Started', QUEST)
- COMPLETED = State('Completed', QUEST)
- # Quest initialization
- QUEST.setInitialState(CREATED)
- # Quest NPC starter initialization
- QUEST.addStartNpc(PM_COOPER)
- # Quest Item Drop initialization
- for i in [3499]+range(3816,3832):
- STARTING.addQuestDrop(PM_COOPER,i,1)
- # Quest mob initialization
- #back skins
- STARTING.addKillId(TD_LORD)
- #fairy stone dlx destroyers
- for i in range(589,600)+[719]:
- STARTING.addKillId(i)
- #eggs
- STARTED.addKillId(LO_LZRD_W)
- STARTED.addKillId(RD_SCVNGR)
- STARTED.addKillId(MS_SPIDER)
- STARTED.addKillId(DD_SEEKER)
- STARTED.addKillId(BO_OVERLD)
- # Quest NPC initialization
- CREATED.addTalkId(PM_COOPER)
- STARTING.addTalkId(PM_COOPER)
- STARTING.addTalkId(SG_CRONOS)
- STARTING.addTalkId(GD_BYRON)
- STARTING.addTalkId(MC_MARIA)
- STARTING.addTalkId(FR_MYMYU)
- STARTED.addTalkId(FR_MYMYU)
- for i in range(7748,7753):
- STARTED.addTalkId(i)
- print "importing quests: 420: Little Wings"
|