123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360 |
- #
- # Created by DraX on 2005.09.08
- # C4 Update by DrLecter
- #
- import sys
- from com.l2jserver.gameserver.model.quest import State
- from com.l2jserver.gameserver.model.quest import QuestState
- from com.l2jserver.gameserver.model.quest import Quest as JQuest
- from com.l2jserver.gameserver.network.serverpackets import NpcSay
- qn = "334_TheWishingPotion"
- # General Rewards
- ADENA = 57
- NECKLACE_OF_GRACE = 931
- HEART_OF_PAAGRIO = 3943
- R1=[3081,3076,3075,3074,4917,3077,3080,3079,3078,4928,4931,4932,5013,3067,3064,3061,3062,3058,4206,3065,3060,3063,4208,3057,3059,3066,4911,4918,3092,3039,4922,3091,3093,3431]
- R2=[3430,3429,3073,3941,3071,3069,3072,4200,3068,3070,4912,3100,3101,3098,3094,3102,4913,3095,3096,3097,3099,3085,3086,3082,4907,3088,4207,3087,3084,3083,4929,4933,4919,3045]
- R3=[4923,4201,4914,3942,3090,4909,3089,4930,4934,4920,3041,4924,3114,3105,3110,3104,3113,3103,4204,3108,4926,3112,3107,4205,3109,3111,3106,4925,3117,3115,3118,3116,4927]
- R4=[1979,1980,2952,2953]
- #Quest ingredients and rewards
- WISH_POTION,ANCIENT_CROWN,CERTIFICATE_OF_ROYALTY = range(3467,3470)
- ALCHEMY_TEXT,SECRET_BOOK,POTION_RECIPE_1,POTION_RECIPE_2,MATILDS_ORB,FORBIDDEN_LOVE_SCROLL = range(3678,3684)
- AMBER_SCALE,WIND_SOULSTONE,GLASS_EYE,HORROR_ECTOPLASM,SILENOS_HORN,ANT_SOLDIER_APHID,TYRANTS_CHITIN,BUGBEAR_BLOOD = range(3684,3692)
- #NPCs
- GRIMA = 27135
- SUCCUBUS_OF_SEDUCTION = 27136
- GREAT_DEMON_KING = 27138
- SECRET_KEEPER_TREE = 27139
- SANCHES = 27153
- BONAPARTERIUS = 27154
- RAMSEBALIUS = 27155
- TORAI = 30557
- ALCHEMIST_MATILD = 30738
- RUPINA = 30742
- WISDOM_CHEST = 30743
- #MOBs
- WHISPERING_WIND = 20078
- ANT_RECRUIT = 20087
- ANT_WARRIOR_CAPTAIN = 20088
- SILENOS = 20168
- TYRANT = 20192
- TYRANT_KINGPIN = 20193
- AMBER_BASILISK = 20199
- HORROR_MIST_RIPPER = 20227
- TURAK_BUGBEAR = 20248
- TURAK_BUGBEAR_WARRIOR = 20249
- GLASS_JAGUAR = 20250
- #DROPLIST
- DROPLIST={AMBER_BASILISK:[AMBER_SCALE,15],WHISPERING_WIND:[WIND_SOULSTONE,20],GLASS_JAGUAR:[GLASS_EYE,35],HORROR_MIST_RIPPER:[HORROR_ECTOPLASM,15],
- SILENOS:[SILENOS_HORN,30],ANT_RECRUIT:[ANT_SOLDIER_APHID,40],ANT_WARRIOR_CAPTAIN:[ANT_SOLDIER_APHID,40],TYRANT:[TYRANTS_CHITIN,50],
- TYRANT_KINGPIN:[TYRANTS_CHITIN,50],TURAK_BUGBEAR:[BUGBEAR_BLOOD,25],TURAK_BUGBEAR_WARRIOR:[BUGBEAR_BLOOD,25]}
- # set of random messages
- MESSAGES={SUCCUBUS_OF_SEDUCTION:["Do you wanna be loved?","Do you need love?","Let me love you...","Want to know what love is?","Are you in need of love?","Me love you long time"],
- GRIMA:["hey hum hum!","boom! boom!","...","Ki ab kya karein hum"],
- }
- def check_ingredients(st,required) :
- if st.getQuestItemsCount(AMBER_SCALE) != required : return 0
- if st.getQuestItemsCount(WIND_SOULSTONE) != required : return 0
- if st.getQuestItemsCount(GLASS_EYE) != required : return 0
- if st.getQuestItemsCount(HORROR_ECTOPLASM) != required : return 0
- if st.getQuestItemsCount(SILENOS_HORN) != required : return 0
- if st.getQuestItemsCount(ANT_SOLDIER_APHID) != required : return 0
- if st.getQuestItemsCount(TYRANTS_CHITIN) != required : return 0
- if st.getQuestItemsCount(BUGBEAR_BLOOD) != required : return 0
- return 1
- def autochat(npc,text) :
- if npc: npc.broadcastPacket(NpcSay(npc.getObjectId(),0,npc.getId(),text))
- return
- class Quest (JQuest) :
- def __init__(self,id,name,descr):
- JQuest.__init__(self,id,name,descr)
- self.questItemIds = range(3678,3683)+range(3684,3692)
- def onAdvEvent (self,event,npc,player):
- st = self.getQuestState(player, False)
- if not st: return
- htmltext = event
- player=st.getPlayer()
- if event == "30738-03.htm":
- st.set("cond","1")
- st.setState(State.STARTED)
- st.playSound("ItemSound.quest_accept")
- if st.getQuestItemsCount(ALCHEMY_TEXT) >= 2: st.takeItems(ALCHEMY_TEXT,-1)
- if st.getQuestItemsCount(ALCHEMY_TEXT) == 0: st.giveItems(ALCHEMY_TEXT,1)
- htmltext = "30738-03.htm"
- if event == "30738-06.htm":
- if st.getQuestItemsCount(WISH_POTION) :
- htmltext = "30738-13.htm"
- else :
- st.playSound("ItemSound.quest_accept")
- st.set("cond","3")
- if st.getQuestItemsCount(ALCHEMY_TEXT) >= 1: st.takeItems(ALCHEMY_TEXT,-1)
- if st.getQuestItemsCount(SECRET_BOOK) >= 1: st.takeItems(SECRET_BOOK,-1)
- if st.getQuestItemsCount(POTION_RECIPE_1) >= 2: st.takeItems(POTION_RECIPE_1,-1)
- if st.getQuestItemsCount(POTION_RECIPE_1) == 0: st.giveItems(POTION_RECIPE_1,1)
- if st.getQuestItemsCount(POTION_RECIPE_2) >= 2: st.takeItems(POTION_RECIPE_2,-1)
- if st.getQuestItemsCount(POTION_RECIPE_2) == 0: st.giveItems(POTION_RECIPE_2,1)
- if st.getQuestItemsCount(MATILDS_ORB) : htmltext = "30738-12.htm"
- if event == "30738-10.htm":
- if check_ingredients(st,1) :
- st.playSound("ItemSound.quest_finish")
- st.takeItems(ALCHEMY_TEXT,-1)
- st.takeItems(SECRET_BOOK,-1)
- st.takeItems(POTION_RECIPE_1,-1)
- st.takeItems(POTION_RECIPE_2,-1)
- st.takeItems(AMBER_SCALE,-1)
- st.takeItems(WIND_SOULSTONE,-1)
- st.takeItems(GLASS_EYE,-1)
- st.takeItems(HORROR_ECTOPLASM,-1)
- st.takeItems(SILENOS_HORN,-1)
- st.takeItems(ANT_SOLDIER_APHID,-1)
- st.takeItems(TYRANTS_CHITIN,-1)
- st.takeItems(BUGBEAR_BLOOD,-1)
- if not st.getQuestItemsCount(MATILDS_ORB) : st.giveItems(MATILDS_ORB,1)
- st.giveItems(WISH_POTION,1)
- st.set("cond","5")
- else :
- htmltext="You don't have required items"
- elif event == "30738-14.htm":
- # if you dropped or destroyed your wish potion, you are not able to see the wish list
- if st.getQuestItemsCount(WISH_POTION) :
- htmltext = "30738-15.htm"
- #### WISH I : Please make me into a loving person.
- elif event == "30738-16.htm":
- if st.getQuestItemsCount(WISH_POTION) :
- st.set("wish","1")
- st.startQuestTimer("matild_timer1",3000,npc)
- st.takeItems(WISH_POTION,1)
- npc.setBusy(True)
- else:
- htmltext = "30738-14.htm"
- #### WISH II : I want to become an extremely rich person. How about 100 million adena?!
- elif event == "30738-17.htm":
- if st.getQuestItemsCount(WISH_POTION) :
- st.set("wish","2")
- st.startQuestTimer("matild_timer1",3000,npc)
- st.takeItems(WISH_POTION,1)
- npc.setBusy(True)
- else:
- htmltext = "30738-14.htm"
- #### WISH III : I want to be a king in this world.
- elif event == "30738-18.htm":
- if st.getQuestItemsCount(WISH_POTION) :
- st.set("wish","3")
- st.startQuestTimer("matild_timer1",3000,npc)
- st.takeItems(WISH_POTION,1)
- npc.setBusy(True)
- else:
- htmltext = "30738-14.htm"
- #### WISH IV : I'd like to become the wisest person in the world.
- elif event == "30738-19.htm":
- if st.getQuestItemsCount(WISH_POTION) >= 1:
- st.set("wish","4")
- st.startQuestTimer("matild_timer1",3000,npc)
- st.takeItems(WISH_POTION,1)
- npc.setBusy(True)
- else:
- htmltext = "30738-14.htm"
- elif event == "matild_timer1":
- autochat(npc,"OK, everybody pray fervently!")
- st.startQuestTimer("matild_timer2",4000,npc)
- return
- elif event == "matild_timer2":
- autochat(npc,"Both hands to heaven, everybody yell together!")
- st.startQuestTimer("matild_timer3",4000,npc)
- return
- elif event == "matild_timer3":
- autochat(npc,"One! Two! May your dreams come true!")
- wish = st.getInt("wish")
- WISH_CHANCE = self.getRandom(100)
- if wish == 1 :
- if WISH_CHANCE <= 50:
- autochat(st.addSpawn(SUCCUBUS_OF_SEDUCTION,200000),MESSAGES[SUCCUBUS_OF_SEDUCTION][self.getRandom(len(MESSAGES))])
- autochat(st.addSpawn(SUCCUBUS_OF_SEDUCTION,200000),MESSAGES[SUCCUBUS_OF_SEDUCTION][self.getRandom(len(MESSAGES))])
- autochat(st.addSpawn(SUCCUBUS_OF_SEDUCTION,200000),MESSAGES[SUCCUBUS_OF_SEDUCTION][self.getRandom(len(MESSAGES))])
- else:
- autochat(st.addSpawn(RUPINA,120000),"Your love... love!")
- elif wish == 2 :
- if WISH_CHANCE <= 33 :
- autochat(st.addSpawn(GRIMA,200000),MESSAGES[GRIMA][self.getRandom(len(MESSAGES))])
- autochat(st.addSpawn(GRIMA,200000),MESSAGES[GRIMA][self.getRandom(len(MESSAGES))])
- autochat(st.addSpawn(GRIMA,200000),MESSAGES[GRIMA][self.getRandom(len(MESSAGES))])
- else :
- st.giveItems(ADENA,10000)
- elif wish == 3 :
- if WISH_CHANCE <= 33 :
- st.giveItems(CERTIFICATE_OF_ROYALTY,1)
- elif WISH_CHANCE >= 66 :
- st.giveItems(ANCIENT_CROWN,1)
- else:
- spawnedNpc=st.addSpawn(SANCHES,player,True,0)
- autochat(spawnedNpc,"Who dares to call the dark Monarch?!")
- st.startQuestTimer("sanches_timer1",200000,spawnedNpc)
- elif wish == 4 :
- if WISH_CHANCE <= 33:
- st.giveItems(R1[self.getRandom(len(R1))],1)
- st.giveItems(R2[self.getRandom(len(R2))],1)
- st.giveItems(R3[self.getRandom(len(R3))],1)
- if not self.getRandom(3):
- st.giveItems(HEART_OF_PAAGRIO,1)
- else:
- autochat(st.addSpawn(WISDOM_CHEST,120000),"I contain the wisdom, I am the wisdom box!")
- npc.setBusy(False)
- return
- elif event == "sanches_timer1" :
- autochat(npc,"Hehehe, i'm just wasting my time here!")
- npc.deleteMe()
- return
- elif event == "bonaparterius_timer1" :
- autochat(npc,"A worth opponent would be a good thing")
- npc.deleteMe()
- elif event == "ramsebalius_timer1" :
- autochat(npc,"Your time is up!")
- npc.deleteMe()
- return
- elif event == "greatdemon_timer1" :
- autochat(npc,"Do not interrupt my eternal rest again!")
- npc.deleteMe()
- return
- return htmltext
- def onTalk (self,npc,player):
- htmltext = Quest.getNoQuestMsg(player)
- st = self.getQuestState(player, True)
- if not st : return htmltext
- npcId = npc.getId()
- cond = st.getInt("cond")
- id = st.getState()
- if npcId != ALCHEMIST_MATILD and id == State.CREATED : return htmltext
- if npcId == TORAI and st.getQuestItemsCount(FORBIDDEN_LOVE_SCROLL) :
- st.takeItems(FORBIDDEN_LOVE_SCROLL,1)
- st.giveItems(ADENA,500000)
- htmltext = "30557-01.htm"
- elif npcId == WISDOM_CHEST :
- st.giveItems(R1[self.getRandom(len(R1))],1)
- st.giveItems(R2[self.getRandom(len(R2))],1)
- st.giveItems(R3[self.getRandom(len(R3))],1)
- if not self.getRandom(3):
- st.giveItems(HEART_OF_PAAGRIO,1)
- st.giveItems(4409,1)
- st.giveItems(4408,1)
- htmltext = "30743-0"+str(self.getRandom(6)+1)+".htm"
- npc.deleteMe()
- elif npcId == RUPINA:
- if self.getRandom(100) <= 4:
- st.giveItems(NECKLACE_OF_GRACE,1)
- htmltext = "30742-01.htm"
- else:
- st.giveItems(R4[self.getRandom(len(R4))],1)
- htmltext = "30742-02.htm"
- npc.decayMe()
- elif npcId == ALCHEMIST_MATILD:
- if npc.isBusy() :
- htmltext = "30738-20.htm"
- elif player.getLevel() <= 29 :
- htmltext = "30738-21.htm"
- st.exitQuest(1)
- elif cond == 5 and st.getQuestItemsCount(MATILDS_ORB) :
- htmltext = "30738-11.htm"
- elif cond == 4 and check_ingredients(st,1):
- htmltext = "30738-08.htm"
- elif cond == 3 and not check_ingredients(st,1):
- htmltext = "30738-07.htm"
- elif cond == 2 or (st.getQuestItemsCount(ALCHEMY_TEXT) and st.getQuestItemsCount(SECRET_BOOK)) :
- htmltext = "30738-05.htm"
- elif cond == 1 or (st.getQuestItemsCount(ALCHEMY_TEXT) and not st.getQuestItemsCount(SECRET_BOOK)) :
- htmltext = "30738-04.htm"
- else:
- htmltext = "30738-01.htm"
- return htmltext
- def onKill(self,npc,player,isPet):
- st = self.getQuestState(player, False)
- if not st : return
- id = st.getState()
- if id == State.CREATED: return
- if id != State.STARTED: st.setState(State.STARTED)
- npcId = npc.getId()
- cond = st.getInt("cond")
- if npcId == SECRET_KEEPER_TREE and cond == 1 and not st.getQuestItemsCount(SECRET_BOOK):
- st.set("cond","2")
- st.giveItems(SECRET_BOOK,1)
- st.playSound("ItemSound.quest_itemget")
- elif npcId in DROPLIST.keys() and cond == 3 :
- item,chance=DROPLIST[npcId]
- if self.getRandom(100) <= chance and not st.getQuestItemsCount(item) :
- st.giveItems(item,1)
- if check_ingredients(st,1):
- st.playSound("ItemSound.quest_middle")
- st.set("cond","4")
- else: st.playSound("ItemSound.quest_itemget")
- else:
- if npcId == SUCCUBUS_OF_SEDUCTION:
- if self.getRandom(100) <= 3 :
- st.playSound("ItemSound.quest_itemget")
- st.giveItems(FORBIDDEN_LOVE_SCROLL,1)
- elif npcId == GRIMA:
- if self.getRandom(100) < 4 :
- st.playSound("ItemSound.quest_itemget")
- if self.getRandom(1000) == 0 :
- st.giveItems(ADENA,100000000)
- else:
- st.giveItems(ADENA,900000)
- elif npcId == SANCHES :
- try :
- if st.getQuestTimer("sanches_timer1") :
- st.getQuestTimer("sanches_timer1").cancel()
- if self.getRandom(100) <= 50 :
- autochat(npc,"It's time to come out my Remless... Bonaparterius!")
- spawnedNpc=st.addSpawn(BONAPARTERIUS,npc,True,0)
- autochat(spawnedNpc,"I am the Great Emperor's son!")
- st.startQuestTimer("bonaparterius_timer1",600000,spawnedNpc)
- else :
- st.giveItems(R4[self.getRandom(len(R4))],1)
- except : pass
- elif npcId == BONAPARTERIUS:
- try :
- if st.getQuestTimer("bonaparterius_timer1") :
- st.getQuestTimer("bonaparterius_timer1").cancel()
- autochat(npc,"Only Ramsebalius would be able to avenge me!")
- if self.getRandom(100) <= 50 :
- spawnedNpc=st.addSpawn(RAMSEBALIUS,npc,True,0)
- autochat(spawnedNpc,"Meet the absolute ruler!")
- st.startQuestTimer("ramsebalius_timer1",600000,spawnedNpc)
- else :
- st.giveItems(R4[self.getRandom(len(R4))],1)
- except : pass
- elif npcId == RAMSEBALIUS:
- try :
- if st.getQuestTimer("ramsebalius_timer1") :
- st.getQuestTimer("ramsebalius_timer1").cancel()
- autochat(npc,"You evil piece of...")
- if self.getRandom(100) <= 50 :
- spawnedNpc=st.addSpawn(GREAT_DEMON_KING,npc,True,0)
- autochat(spawnedNpc,"Who dares to kill my fiendly minion?!")
- st.startQuestTimer("greatdemon_timer1",600000,spawnedNpc)
- else :
- st.giveItems(R4[self.getRandom(len(R4))],1)
- except: pass
- elif npcId == GREAT_DEMON_KING:
- try :
- if st.getQuestTimer("greatdemon_timer1") :
- st.getQuestTimer("greatdemon_timer1").cancel()
- st.giveItems(ADENA,1412965)
- st.playSound("ItemSound.quest_itemget")
- except: pass
- return
- QUEST = Quest(334, qn, "The Wishing Potion")
- QUEST.addStartNpc(ALCHEMIST_MATILD)
- QUEST.addTalkId([ALCHEMIST_MATILD, TORAI, RUPINA, WISDOM_CHEST])
- QUEST.addKillId(DROPLIST.keys())
- QUEST.addKillId([SECRET_KEEPER_TREE, SUCCUBUS_OF_SEDUCTION, GRIMA, SANCHES, RAMSEBALIUS, BONAPARTERIUS, GREAT_DEMON_KING])
|