__init__.py 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630
  1. #Made by Emperorc
  2. import sys
  3. from com.l2jserver.gameserver.model.quest import State
  4. from com.l2jserver.gameserver.model.quest import QuestState
  5. from com.l2jserver.gameserver.model.quest import Quest as JQuest
  6. from com.l2jserver.util import Rnd
  7. from com.l2jserver.gameserver.network.serverpackets import NpcSay
  8. qn = "335_TheSongOfTheHunter"
  9. #NPCS
  10. Grey = 30744
  11. Tor = 30745
  12. Cybellin = 30746
  13. #Items
  14. Cyb_Dagger = 3471
  15. License_1 = 3692
  16. License_2 = 3693
  17. Leaf_Pin = 3694
  18. Test_Instructions_1 = 3695
  19. Test_Instructions_2 = 3696
  20. Cyb_Req = 3697
  21. #Mobs
  22. Breka_Orc_Warrior = 20271
  23. Windsus = 20553
  24. Tarlk_Bugbear_Warrior = 20571
  25. Gremlin_Filcher = 27149
  26. Mobs = [Breka_Orc_Warrior, Windsus, Tarlk_Bugbear_Warrior, Gremlin_Filcher]
  27. Lizardmen = [20578,20579,20581,20582,20641,20642,20643]
  28. #Droplist Format- npcId:[itemId,itemAmount,chance]
  29. Level_1 = {
  30. 20550 : [3709,40,75], #Gaurdian Basilisk
  31. 20581 : [3710,20,50], #Leto Lizardman Shaman
  32. 27140 : [3711,1,100], #Breka Overlord Haka
  33. 27141 : [3712,1,100], #Breka Overlord Jaka
  34. 27142 : [3713,1,100], #Breka Overlord Marka
  35. 27143 : [3714,1,100], #Windsus Aleph
  36. 20563 : [3715,20,50], #Manashen Gargoyle
  37. 20565 : [3715,20,50], #Enchanted Stone Golemn
  38. 20555 : [3716,30,70], #Giant Fungus
  39. }
  40. Level_2 = {
  41. 20586 : [3717,20,50], #Timak Orc Warrior
  42. 20560 : [3718,20,50], #Trisalim Spider
  43. 20561 : [3718,20,50], #Trisalim Tarantula
  44. 20591 : [3719,30,100], #Valley Treant
  45. 20597 : [3719,30,100], #Valley Treant Elder
  46. 20675 : [3720,20,50], #Tairim
  47. 20660 : [3721,20,50], #Archer of Greed
  48. 27144 : [3722,1,100], #Tarlk Raider Athu
  49. 27145 : [3723,1,100], #Tarlk Raider Lanka
  50. 27146 : [3724,1,100], #Tarlk Raider Triska
  51. 27147 : [3725,1,100], #Tarlk Raider Motura
  52. 27148 : [3726,1,100], #Tarlk Raider Kalath
  53. }
  54. Grey_Advance = [
  55. #level 1
  56. [[3709],40],
  57. [[3710],20],
  58. [[3711,3712,3713],1],
  59. [[3714],1],
  60. [[3715],20],
  61. [[3716],30],
  62. #level 2
  63. [[3717],20],
  64. [[3718],20],
  65. [[3719],30],
  66. [[3720],20],
  67. [[3721],20],
  68. [[3722,3723,3724,3725,3726],1]
  69. ]
  70. #Droplist Format- npcId : [itemRequired,itemGive,itemToGiveAmount,itemAmount,chance]
  71. Tor_requests_1 = {
  72. 20578 : [3727,3769,'1',40,80], #Leto Lizardman Archer
  73. 20579 : [3727,3769,'1',40,83], #Leto Lizardman Soldier
  74. 20586 : [3728,3770,'1',50,89], #Timak Orc Warrior
  75. 20588 : [3728,3770,'1',50,100], #Timak Orc Overlord
  76. 20565 : [3729,3771,'1',50,100], #Enchanted Stone Golem
  77. 20556 : [3730,3772,'1',30,50], #Giant Monster Eye
  78. 20557 : [3731,3773,'1',40,80], #Dire Wyrm
  79. 20550 : [3732,3774,'Rnd.get(2) + 1',100,100], #Guardian Basilisk
  80. 20552 : [3733,3775,'1',50,100], #Fettered Soul
  81. 20553 : [3734,3776,'1',30,50], #Windsus
  82. 20554 : [3735,3777,'2',100,100],#Grandis
  83. 20631 : [3736,3778,'1',50,100], #Taik Orc Archer
  84. 20632 : [3736,3778,'1',50,93], #Taik Orc Warrior
  85. 20600 : [3737,3779,'1',30,50], #Karul Bugbear
  86. 20601 : [3738,3780,'1',40,62], #Tamlin Orc
  87. 20602 : [3738,3780,'1',40,80], #Tamlin Orc Archer
  88. 27157 : [3739,3781,'1',1,100], #Leto Chief Narak
  89. 20567 : [3740,3782,'1',50,50], #Enchanted Gargoyle
  90. 20269 : [3741,3783,'1',50,93], #Breka Orc Shaman
  91. 20271 : [3741,3783,'1',50,100], #Breka Orc Warrior
  92. 27156 : [3742,3784,'1',1,100], #Leto Shaman Ketz
  93. 27158 : [3743,3785,'1',1,100], #Timak Raider Kaikee
  94. 20603 : [3744,3786,'1',30,50], #Kronbe Spider
  95. 27160 : [3746,3788,'1',1,100], #Gok Magok
  96. 27164 : [3747,3789,'1',1,100] #Karul Chief Orooto
  97. }
  98. #Droplist Format- npcId : [itemRequired,itemGive,itemAmount,chance]
  99. Tor_requests_2 = {
  100. 20560 : [3749,3791,40,66], #Trisalim Spider
  101. 20561 : [3749,3791,40,75], #Trisalim Tarantula
  102. 20633 : [3750,3792,50,53], #Taik Orc Shaman
  103. 20634 : [3750,3792,50,99], #Taik Orc Captain
  104. 20641 : [3751,3793,40,88], #Harit Lizardman Grunt
  105. 20642 : [3751,3793,40,88], #Harit Lizardman Archer
  106. 20643 : [3751,3793,40,91], #Harit Lizardman Warrior
  107. 20661 : [3752,3794,20,50], #Hatar Ratman Thief
  108. 20662 : [3752,3794,20,52], #Hatar Ratman Boss
  109. 20667 : [3753,3795,30,90], #Farcran
  110. 20589 : [3754,3796,40,49], #Fline
  111. 20590 : [3755,3797,40,51], #Liele
  112. 20592 : [3756,3798,40,80], #Satyr
  113. 20598 : [3756,3798,40,100], #Satyr Elder
  114. 20682 : [3758,3800,30,70], #Vanor Silenos Grunt
  115. 20683 : [3758,3800,30,85], #Vanor Silenos Scout
  116. 20684 : [3758,3800,30,90], #Vanor Silenos Warrior
  117. 20571 : [3759,3801,30,63], #Tarlk Bugbear Warrior
  118. 27159 : [3760,3802,1,100], #Timak Overlord Okun
  119. 27161 : [3761,3803,1,100], #Taik Overlord Kakran
  120. 20639 : [3762,3804,40,86], #Mirror
  121. 20664 : [3763,3805,20,77], #Deprive
  122. 20593 : [3764,3806,20,68], #Unicorn
  123. 20599 : [3764,3806,20,86], #Unicorn Elder
  124. 27163 : [3765,3807,1,100], #Vanor Elder Kerunos
  125. 20659 : [3766,3808,20,73], #Grave Wanderer
  126. 27162 : [3767,3809,1,100], #Hatar Chieftain Kubel
  127. 20676 : [3768,3810,10,64] #Judge of Marsh
  128. }
  129. #FilcherDropList Format- reqId : [item,amount,bonus]
  130. Filcher = {
  131. 3752 : [3794,20,3],
  132. 3754 : [3796,40,5],
  133. 3755 : [3797,40,5],
  134. 3762 : [3804,40,5]
  135. }
  136. #SpawnList Format- npcId : [item1,item2,npcToSpawn]
  137. Tor_requests_tospawn = {
  138. 20582 : [3739,3781,27157], #Leto Lizardman Overlord
  139. 20581 : [3742,3784,27156], #Leto Lizardman Shaman
  140. 20586 : [3743,3785,27158], #Timak Orc Warrior
  141. 20554 : [3746,3788,27160], #Grandis
  142. #level 2
  143. 20588 : [3760,3802,27159], #Timak Orc Overlord
  144. 20634 : [3761,3803,27161], #Tiak Orc Captain
  145. 20686 : [3765,3807,27163], #Vanor Silenos Chieftan
  146. 20662 : [3767,3809,27162] #Hatar Ratman Boss
  147. }
  148. #RewardsList Format- requestId : [item,quantity,rewardAmount]
  149. Tor_Rewards_1 = {
  150. 3727 : [3769,40,2090],
  151. 3728 : [3770,50,6340],
  152. 3729 : [3771,50,9480],
  153. 3730 : [3772,30,9110],
  154. 3731 : [3773,40,8690],
  155. 3732 : [3774,100,9480],
  156. 3733 : [3775,50,11280],
  157. 3734 : [3776,30,9640],
  158. 3735 : [3777,100,9180],
  159. 3736 : [3778,50,5160],
  160. 3737 : [3779,30,3140],
  161. 3738 : [3780,40,3160],
  162. 3739 : [3781,1,6370],
  163. 3740 : [3782,50,19080],
  164. 3741 : [3783,50,17730],
  165. 3742 : [3784,1,5790],
  166. 3743 : [3785,1,8560],
  167. 3744 : [3786,30,8320],
  168. 3746 : [3788,1,27540],
  169. 3747 : [3789,1,20560],
  170. }
  171. Tor_Rewards_2 = {
  172. 3749 : [3791,40,7250],
  173. 3750 : [3792,50,7160],
  174. 3751 : [3793,40,6580],
  175. 3752 : [3794,20,10100],
  176. 3753 : [3795,30,13000],
  177. 3754 : [3796,40,7660],
  178. 3755 : [3797,40,7660],
  179. 3756 : [3798,40,11260],
  180. 3758 : [3800,30,8810],
  181. 3759 : [3801,30,7350],
  182. 3760 : [3802,1,8760],
  183. 3761 : [3803,1,9380],
  184. 3762 : [3804,40,17820],
  185. 3763 : [3805,20,17540],
  186. 3764 : [3806,20,14160],
  187. 3765 : [3807,1,15960],
  188. 3766 : [3808,20,39100],
  189. 3767 : [3809,1,39550],
  190. 3768 : [3810,10,41200]
  191. }
  192. #Format item : adenaAmount
  193. Cyb_Rewards = {
  194. 3699 : 3400,
  195. 3700 : 6800,
  196. 3701 : 13600,
  197. 3702 : 27200,
  198. 3703 : 54400,
  199. 3704 : 108800,
  200. 3705 : 217600,
  201. 3706 : 435200,
  202. 3707 : 870400
  203. }
  204. Tor_menu = [
  205. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3727\">C: Obtain 40 charms of Kadesh</a><br>",
  206. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3728\">C: Collect 50 Timak Jade Necklaces</a><br>",
  207. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3729\">C: Gather 50 Enchanted Golem Shards</a><br>",
  208. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3730\">C: Collect and bring back 30 pieces of Giant Monster Eye Meat</a><br>",
  209. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3731\">C: Collect and bring back 40 Dire Wyrm Eggs</a><br>",
  210. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3732\">C: Collect and bring back 100 guardian basilisk talons</a><br>",
  211. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3733\">C: Collect and bring back 50 revenants chains</a><br>",
  212. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3734\">C: Collect and bring back 30 Windsus Tusks</a><br>",
  213. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3735\">C: Collect and bring back 100 Grandis Skulls</a><br>",
  214. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3736\">C: Collect and bring back 50 Taik Obsidian Amulets</a><br>",
  215. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3737\">C: Bring me 30 heads of karul bugbears</a><br>",
  216. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3738\">C: Collect 40 Tamlin Ivory Charms</a><br>",
  217. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3739\">B: Bring me the head of Elder Narak of the leto lizardmen</a><br>",
  218. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3740\">B: Collect and bring back 50 Enchanted Gargoyle Horns</a><br>",
  219. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3741\">B: Collect and bring back 50 Coiled Serpent Totems</a><br>",
  220. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3742\">B: Bring me the totem of the Serpent Demon Kadesh</a><br>",
  221. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3743\">B: Bring me the head of Kaikis</a><br>",
  222. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3744\">B: Collect and bring back 30 Kronbe Venom Sacs</a><br>",
  223. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3746\">A: Recover the precious stone tablet that was stolen from a Dwarven cargo wagon by grandis</a><br>",
  224. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3747\">A: Recover the precious Book of Shunaiman</a><br>",
  225. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3749\">C: Collect and bring back 40 Trisalim Venom Sacs</a><br>",
  226. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3750\">C: Collect and bring back 50 Taik Orc Totems</a><br>",
  227. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3751\">C: Collect and bring back 40 Harit Lizardman barbed necklaces</a><br>",
  228. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3752\">C: Collect and bring back 20 coins of the old empire</a><br>",
  229. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3753\">C: Kill 30 farcrans and bring back their skins</a><br>",
  230. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3754\">C: Collect and bring back 40 Tempest Shards</a><br>",
  231. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3755\">C: Collect and bring back 40 Tsunami Shards</a><br>",
  232. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3756\">C: Collect and bring back 40 Satyr Manes</a><br>",
  233. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3758\">C: Collect and bring back 30 Shillien Manes</a><br>",
  234. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3759\">C: Collect and bring back 30 tarlk bugbear totems</a><br>",
  235. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3760\">B: Bring me the head of Okun</a><br>",
  236. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3761\">B: Bring me the head of Kakran</a><br>",
  237. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3762\">B: Collect and bring back 40 narcissus soulstones</a><br>",
  238. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3763\">B: Collect and bring back 20 Deprive Eyes</a><br>",
  239. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3764\">B: Collect and bring back 20 horns of summon unicorn</a><br>",
  240. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3765\">B: Bring me the golden mane of Kerunos</a><br>",
  241. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3766\">A: Bring back 20 skulls of undead executed criminals</a><br>",
  242. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3767\">A: Recover the stolen bust of the late King Travis</a><br>",
  243. "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3768\">A: Recover 10 swords of Cadmus</a><br>"
  244. ]
  245. def HasItems(st,check) :
  246. count = 0
  247. for list in Grey_Advance :
  248. count2 = 0
  249. for item in list[0] :
  250. if not st.getQuestItemsCount(item) >= list[1] :
  251. break
  252. count2 += 1
  253. if count2 == len(list[0]) :
  254. count += 1
  255. if count >= check :
  256. return 1
  257. return 0
  258. def AutoChat(npc,text) :
  259. chars = npc.getKnownList().getKnownPlayers().values().toArray()
  260. if chars != None:
  261. for pc in chars :
  262. sm = NpcSay(npc.getObjectId(), 0, npc.getId(), text)
  263. pc.sendPacket(sm)
  264. def HasRequestCompleted(st,level) :
  265. rewards = Tor_Rewards_1
  266. if level == 2 :
  267. rewards = Tor_Rewards_2
  268. for req in rewards.keys() :
  269. if st.getQuestItemsCount(req) :
  270. if st.getQuestItemsCount(rewards[req][0]) >= rewards[req][1] :
  271. return req
  272. return 0
  273. class Quest (JQuest) :
  274. def __init__(self,id,name,descr):
  275. JQuest.__init__(self,id,name,descr)
  276. self.questItemIds = range(3692,3811) + [3471]
  277. def onAdvEvent (self,event,npc,player):
  278. st = self.getQuestState(player, False)
  279. if not st: return
  280. htmltext = event
  281. if event == "30744-03.htm" :
  282. st.setState(State.STARTED)
  283. st.playSound("ItemSound.quest_accept")
  284. st.giveItems(Test_Instructions_1,1)
  285. st.set("cond","1")
  286. #set Memo = 0
  287. elif event == "30744-32.htm" :
  288. st.playSound("ItemSound.quest_finish")
  289. if st.getQuestItemsCount(Leaf_Pin) >= 20 :
  290. htmltext = "30744-33.htm"
  291. st.giveItems(57,20000)
  292. st.exitQuest(1)
  293. elif event == "30744-19.htm" :
  294. if not HasItems(st,1) :
  295. st.giveItems(Test_Instructions_2,1)
  296. htmltext = "30744-18.htm"
  297. elif event == "30745-03.htm" :
  298. if st.getQuestItemsCount(Test_Instructions_2) :
  299. htmltext = "30745-04.htm"
  300. elif event == "Tor_list_1" :
  301. if not st.getInt("hasTask") :
  302. htmltext = "<html><body>Guild Member Tor:<br>"
  303. pins = st.getQuestItemsCount(Leaf_Pin)
  304. reply_0 = Rnd.get(12)
  305. reply_1 = Rnd.get(12)
  306. reply_2 = Rnd.get(12)
  307. reply_3 = Rnd.get(12)
  308. reply_4 = Rnd.get(12)
  309. if Rnd.get(100) < 20 :
  310. if pins < 4 and pins :
  311. reply_0 = Rnd.get(6) + 12
  312. reply_2 = Rnd.get(6)
  313. reply_3 = Rnd.get(6) + 6
  314. elif pins >= 4 :
  315. reply_0 = Rnd.get(6) + 6
  316. if not Rnd.get(20) :
  317. reply_1 = Rnd.get(2) + 18
  318. reply_2 = Rnd.get(6)
  319. reply_3 = Rnd.get(6) + 6
  320. elif pins >= 4 :
  321. if not Rnd.get(20) :
  322. reply_1 = Rnd.get(2) + 18
  323. reply_2 = Rnd.get(6)
  324. reply_3 = Rnd.get(6) + 6
  325. htmltext += Tor_menu[reply_0] + Tor_menu[reply_1] + Tor_menu[reply_2] + Tor_menu[reply_3] + Tor_menu[reply_4]
  326. htmltext += "</body></html>"
  327. elif event == "Tor_list_2" :
  328. if not st.getInt("hasTask") :
  329. htmltext = "<html><body>Guild Member Tor:<br>"
  330. pins = st.getQuestItemsCount(Leaf_Pin)
  331. reply_0 = Rnd.get(10)
  332. reply_1 = Rnd.get(10)
  333. reply_2 = Rnd.get(5)
  334. reply_3 = Rnd.get(5) + 5
  335. reply_4 = Rnd.get(10)
  336. if Rnd.get(100) < 20 :
  337. if pins < 4 and pins:
  338. reply_0 = Rnd.get(6) + 10
  339. elif pins >= 4 :
  340. reply_0 = Rnd.get(6) + 10
  341. if not Rnd.get(20):
  342. reply_1 = Rnd.get(3) + 16
  343. elif pins >= 4 :
  344. if not Rnd.get(20) :
  345. reply_1 = Rnd.get(3) + 16
  346. htmltext += Tor_menu[reply_0 + 20] + Tor_menu[reply_1 + 20] + Tor_menu[reply_2 + 20] + Tor_menu[reply_3 + 20] + Tor_menu[reply_4 + 20]
  347. htmltext += "</body></html>"
  348. elif event == "30745-10.htm" :
  349. st.takeItems(Leaf_Pin,1)
  350. for item in range(3727,3811) :
  351. st.takeItems(item,-1)
  352. st.set("hasTask","0")
  353. elif event == "30746-03.htm" :
  354. if not st.getQuestItemsCount(Cyb_Req) :
  355. st.giveItems(Cyb_Req,1)
  356. if not st.getQuestItemsCount(3471) :
  357. st.giveItems(3471,1)
  358. if not st.getQuestItemsCount(3698) :
  359. st.giveItems(3698,1)
  360. st.takeItems(6708,-1)
  361. elif event == "30746-08.htm" :
  362. for item in Cyb_Rewards.keys() :
  363. if st.getQuestItemsCount(item) :
  364. st.takeItems(item,-1)
  365. st.giveItems(57,Cyb_Rewards[item])
  366. break
  367. elif event == "30746-12.htm" :
  368. st.takeItems(3698,-1)
  369. st.takeItems(3697,-1)
  370. st.takeItems(3471,-1)
  371. elif event.isdigit() :
  372. event = int(event)
  373. st.giveItems(event,1)
  374. st.set("hasTask","1")
  375. event = event - 3712
  376. htmltext = "30745-" + str(event) + ".htm"
  377. return htmltext
  378. def onTalk (self,npc,player):
  379. htmltext = Quest.getNoQuestMsg(player)
  380. st = self.getQuestState(player, True)
  381. if not st : return htmltext
  382. npcId = npc.getId()
  383. cond = st.getInt("cond")
  384. id = st.getState()
  385. level = player.getLevel()
  386. bracelet_1 = st.getQuestItemsCount(License_1)
  387. bracelet_2 = st.getQuestItemsCount(License_2)
  388. if npcId == Grey :
  389. if id == State.CREATED :
  390. if level >= 35 :
  391. htmltext = "02"
  392. else :
  393. htmltext = "01"
  394. elif cond == 1 :
  395. if HasItems(st,3) :
  396. htmltext = "12"
  397. st.set("cond","2")
  398. for item in range(3709,3717) :
  399. st.takeItems(item,-1)
  400. st.takeItems(Test_Instructions_1,-1)
  401. st.giveItems(License_1,1)
  402. else :
  403. htmltext = "11"
  404. elif cond == 2 :
  405. instructions = st.getQuestItemsCount(Test_Instructions_2)
  406. if level < 45 and bracelet_1 :
  407. htmltext = "13"
  408. elif level >= 45 and bracelet_1 and not instructions :
  409. htmltext = "16"
  410. elif instructions :
  411. if HasItems(st,3) :
  412. htmltext = "28"
  413. st.set("cond","3")
  414. for item in range(3718,3727) :
  415. st.takeItems(item,-1)
  416. st.takeItems(Test_Instructions_2,-1)
  417. st.takeItems(License_1,-1)
  418. st.giveItems(License_2,1)
  419. else :
  420. htmltext = "27"
  421. elif cond == 3 :
  422. htmltext = "29"
  423. elif npcId == Tor :
  424. if not bracelet_1 and not bracelet_2 :
  425. htmltext = "01"
  426. elif bracelet_1 :
  427. req = HasRequestCompleted(st,1)
  428. if not st.getInt("hasTask") :
  429. if level >= 45 :
  430. if st.getQuestItemsCount(Test_Instructions_2) :
  431. htmltext = "04"
  432. else :
  433. htmltext = "05"
  434. else :
  435. htmltext = "02"
  436. elif req :
  437. htmltext = "12"
  438. item,quantity,reward = Tor_Rewards_1[req]
  439. st.giveItems(Leaf_Pin,1)
  440. st.giveItems(57,reward)
  441. st.playSound("ItemSound.quest_middle")
  442. st.set("hasTask","0")
  443. st.takeItems(req,-1)
  444. st.takeItems(item,-1)
  445. else :
  446. htmltext = "08"
  447. elif bracelet_2 :
  448. req = HasRequestCompleted(st,2)
  449. if not st.getInt("hasTask") :
  450. htmltext = "06"
  451. elif req :
  452. htmltext = "13"
  453. item,quantity,reward = Tor_Rewards_2[req]
  454. st.giveItems(Leaf_Pin,1)
  455. st.giveItems(57,reward)
  456. st.playSound("ItemSound.quest_middle")
  457. st.set("hasTask","0")
  458. st.takeItems(req,-1)
  459. st.takeItems(item,-1)
  460. else :
  461. htmltext = "08"
  462. elif npcId == Cybellin :
  463. if not bracelet_1 and not bracelet_2 :
  464. htmltext = "01"
  465. elif bracelet_1 or bracelet_2 :
  466. if not st.getQuestItemsCount(Cyb_Req) :
  467. htmltext = "02"
  468. elif st.getQuestItemsCount(3698) :
  469. htmltext = "05"
  470. elif st.getQuestItemsCount(3707) :
  471. htmltext = "07"
  472. st.takeItems(3707,-1)
  473. st.giveItems(57,Cyb_Rewards[3707])
  474. elif st.getQuestItemsCount(3708) :
  475. htmltext = "11"
  476. st.takeItems(3708,-1)
  477. elif st.getQuestItemsCount(3699) or st.getQuestItemsCount(3700) or st.getQuestItemsCount(3701) or st.getQuestItemsCount(3702) or \
  478. st.getQuestItemsCount(3703) or st.getQuestItemsCount(3704) or st.getQuestItemsCount(3705) or st.getQuestItemsCount(3706) :
  479. htmltext = "06"
  480. else :
  481. htmltext = "10"
  482. if htmltext.isdigit() :
  483. htmltext = str(npcId) + "-" + htmltext + ".htm"
  484. return htmltext
  485. def onKill(self,npc,player,isPet):
  486. st = self.getQuestState(player, False)
  487. if not st : return
  488. npcId = npc.getId()
  489. cond = st.getInt("cond")
  490. rand = Rnd.get(100)
  491. instructions_1 = st.getQuestItemsCount(Test_Instructions_1)
  492. instructions_2 = st.getQuestItemsCount(Test_Instructions_2)
  493. if cond == 1 and instructions_1 :
  494. if npcId in Level_1.keys() :
  495. item,amount,chance = Level_1[npcId]
  496. if rand < chance and st.getQuestItemsCount(item) < amount :
  497. st.giveItems(item,1)
  498. if st.getQuestItemsCount(item) >= amount :
  499. st.playSound("ItemSound.quest_middle")
  500. else :
  501. st.playSound("ItemSound.quest_itemget")
  502. elif npcId == Breka_Orc_Warrior and rand < 10 :
  503. if st.getQuestItemsCount(3711) == 0 :
  504. st.addSpawn(27140,300000)
  505. elif st.getQuestItemsCount(3712) == 0 :
  506. st.addSpawn(27141,300000)
  507. elif st.getQuestItemsCount(3713) == 0 :
  508. st.addSpawn(27142,300000)
  509. elif npcId == Windsus and not st.getQuestItemsCount(3714) and rand < 10 :
  510. st.addSpawn(27143,300000)
  511. elif cond == 2 :
  512. if instructions_2 :
  513. if npcId in Level_2.keys() :
  514. item,amount,chance = Level_2[npcId]
  515. if rand < chance and st.getQuestItemsCount(item) < amount :
  516. st.giveItems(item,1)
  517. if st.getQuestItemsCount(item) >= amount :
  518. st.playSound("ItemSound.quest_middle")
  519. else :
  520. st.playSound("ItemSound.quest_itemget")
  521. elif npcId == Tarlk_Bugbear_Warrior and rand < 10 :
  522. if st.getQuestItemsCount(3722) == 0 :
  523. st.addSpawn(27144,300000)
  524. elif st.getQuestItemsCount(3723) == 0 :
  525. st.addSpawn(27145,300000)
  526. elif st.getQuestItemsCount(3724) == 0 :
  527. st.addSpawn(27146,300000)
  528. elif st.getQuestItemsCount(3725) == 0 :
  529. st.addSpawn(27147,300000)
  530. elif st.getQuestItemsCount(3726) == 0 :
  531. st.addSpawn(27148,300000)
  532. elif npcId in Tor_requests_1.keys() :
  533. req,give,giveAmount,amount,chance = Tor_requests_1[npcId]
  534. if rand < chance and st.getQuestItemsCount(req) and st.getQuestItemsCount(give) < amount :
  535. st.giveItems(give,eval(giveAmount))
  536. if st.getQuestItemsCount(give) >= amount :
  537. st.playSound("ItemSound.quest_middle")
  538. else :
  539. st.playSound("ItemSound.quest_itemget")
  540. if npcId in [27160,27164] and Rnd.get(2) :
  541. st.addSpawn(27150,300000)
  542. st.addSpawn(27150,300000)
  543. AutoChat(npc,"We will destroy the legacy of the ancient empire!")
  544. elif cond == 3 :
  545. if npcId in Tor_requests_2.keys() :
  546. req,give,amount,chance = Tor_requests_2[npcId]
  547. if st.getQuestItemsCount(req) and st.getQuestItemsCount(give) < amount :
  548. if rand < chance :
  549. st.giveItems(give,1)
  550. if st.getQuestItemsCount(give) >= amount :
  551. st.playSound("ItemSound.quest_middle")
  552. else :
  553. st.playSound("ItemSound.quest_itemget")
  554. if npcId == 27162 and Rnd.get(2) :
  555. st.addSpawn(27150,300000)
  556. st.addSpawn(27150,300000)
  557. AutoChat(npc,"We will destroy the legacy of the ancient empire!")
  558. if npcId in [20661,20662,20589,20590,20639] and not Rnd.get(20) :
  559. st.addSpawn(Gremlin_Filcher,300000)
  560. AutoChat(npc,"Get out! The jewels are mine!")
  561. elif npcId == Gremlin_Filcher :
  562. req = 0
  563. for item in Filcher.keys() :
  564. if st.getQuestItemsCount(item) :
  565. req = item
  566. break
  567. if req :
  568. item,amount,bonus = Filcher[req]
  569. if st.getQuestItemsCount(item) < amount :
  570. st.giveItems(item,bonus)
  571. if st.getQuestItemsCount(item) >= amount :
  572. st.playSound("ItemSound.quest_middle")
  573. else :
  574. st.playSound("ItemSound.quest_itemget")
  575. AutoChat(npc,"What!")
  576. if npcId in Tor_requests_tospawn.keys() and rand < 10:
  577. it1,it2,id = Tor_requests_tospawn[npcId]
  578. if st.getQuestItemsCount(it1) and not st.getQuestItemsCount(it2) :
  579. st.addSpawn(id,300000)
  580. if npcId in Lizardmen and player.getActiveWeaponItem() and player.getActiveWeaponItem().getId() == Cyb_Dagger and st.getQuestItemsCount(Cyb_Req) and not st.getQuestItemsCount(3708):
  581. if Rnd.get(2) :
  582. if cond == 2 or cond == 3 :
  583. for item in range(3698,3707) :
  584. if st.getQuestItemsCount(item) :
  585. st.giveItems(item+1,1)
  586. st.takeItems(item,-1)
  587. if item >= 3703 :
  588. st.playSound("ItemSound.quest_jackpot")
  589. break
  590. else :
  591. for item in range(3698,3707) :
  592. st.takeItems(item,-1)
  593. st.giveItems(3708,1)
  594. return
  595. QUEST = Quest(335,qn,"The Song of the Hunter")
  596. QUEST.addStartNpc(Grey)
  597. QUEST.addTalkId(Grey)
  598. QUEST.addTalkId(Tor)
  599. QUEST.addTalkId(Cybellin)
  600. npcs = []
  601. for npc in Level_1.keys() + Level_2.keys() + Tor_requests_1.keys() + Tor_requests_2.keys() + Tor_requests_tospawn.keys() + Mobs :
  602. if npc not in npcs :
  603. QUEST.addKillId(npc)
  604. npcs.append(npc)
  605. del npcs