Эх сурвалжийг харах

BETA: Quests in Java:
* Q00261_CollectorsDream
* Q00264_KeenClaws
* Q00275_DarkWingedSpies
* Q00276_TotemOfTheHestui
* Q00280_TheFoodChain

* Reviewed by: jurchiks

xban1x 11 жил өмнө
parent
commit
d52611c551
56 өөрчлөгдсөн 988 нэмэгдсэн , 551 устгасан
  1. 5 5
      L2J_DataPack_BETA/dist/game/data/scripts.cfg
  2. 0 3
      L2J_DataPack_BETA/dist/game/data/scripts/quests/261_DreamOfMoneylender1/30222-04.htm
  3. 0 79
      L2J_DataPack_BETA/dist/game/data/scripts/quests/261_DreamOfMoneylender1/__init__.py
  4. 0 6
      L2J_DataPack_BETA/dist/game/data/scripts/quests/264_KeenClaws/30136-02.htm
  5. 0 5
      L2J_DataPack_BETA/dist/game/data/scripts/quests/264_KeenClaws/30136-03.htm
  6. 0 4
      L2J_DataPack_BETA/dist/game/data/scripts/quests/264_KeenClaws/30136-04.htm
  7. 0 91
      L2J_DataPack_BETA/dist/game/data/scripts/quests/264_KeenClaws/__init__.py
  8. 0 5
      L2J_DataPack_BETA/dist/game/data/scripts/quests/275_BlackWingedSpies/30567-02.htm
  9. 0 94
      L2J_DataPack_BETA/dist/game/data/scripts/quests/275_BlackWingedSpies/__init__.py
  10. 0 4
      L2J_DataPack_BETA/dist/game/data/scripts/quests/276_HestuiTotem/30571-00.htm
  11. 0 3
      L2J_DataPack_BETA/dist/game/data/scripts/quests/276_HestuiTotem/30571-04.htm
  12. 0 95
      L2J_DataPack_BETA/dist/game/data/scripts/quests/276_HestuiTotem/__init__.py
  13. 0 3
      L2J_DataPack_BETA/dist/game/data/scripts/quests/280_TheFoodChain/32175-04.htm
  14. 0 5
      L2J_DataPack_BETA/dist/game/data/scripts/quests/280_TheFoodChain/32175-05.htm
  15. 0 6
      L2J_DataPack_BETA/dist/game/data/scripts/quests/280_TheFoodChain/32175-06.htm
  16. 0 4
      L2J_DataPack_BETA/dist/game/data/scripts/quests/280_TheFoodChain/32175-07.htm
  17. 0 109
      L2J_DataPack_BETA/dist/game/data/scripts/quests/280_TheFoodChain/__init__.py
  18. 2 1
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00261_CollectorsDream/30222-01.htm
  19. 3 3
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00261_CollectorsDream/30222-02.htm
  20. 1 1
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00261_CollectorsDream/30222-03.htm
  21. 3 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00261_CollectorsDream/30222-04.html
  22. 0 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00261_CollectorsDream/30222-05.html
  23. 153 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00261_CollectorsDream/Q00261_CollectorsDream.java
  24. 2 2
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00264_KeenClaws/30136-01.htm
  25. 6 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00264_KeenClaws/30136-02.htm
  26. 5 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00264_KeenClaws/30136-03.htm
  27. 4 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00264_KeenClaws/30136-04.html
  28. 2 2
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00264_KeenClaws/30136-05.html
  29. 169 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00264_KeenClaws/Q00264_KeenClaws.java
  30. 0 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00275_DarkWingedSpies/30567-00.htm
  31. 2 2
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00275_DarkWingedSpies/30567-01.htm
  32. 5 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00275_DarkWingedSpies/30567-02.htm
  33. 2 2
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00275_DarkWingedSpies/30567-03.htm
  34. 0 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00275_DarkWingedSpies/30567-04.html
  35. 1 1
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00275_DarkWingedSpies/30567-05.html
  36. 175 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00275_DarkWingedSpies/Q00275_DarkWingedSpies.java
  37. 4 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00276_TotemOfTheHestui/30571-00.htm
  38. 3 3
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00276_TotemOfTheHestui/30571-01.htm
  39. 4 4
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00276_TotemOfTheHestui/30571-02.htm
  40. 2 2
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00276_TotemOfTheHestui/30571-03.htm
  41. 3 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00276_TotemOfTheHestui/30571-04.html
  42. 1 1
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00276_TotemOfTheHestui/30571-05.html
  43. 182 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00276_TotemOfTheHestui/Q00276_TotemOfTheHestui.java
  44. 3 3
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-01.htm
  45. 2 2
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-02.htm
  46. 1 1
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-03.htm
  47. 3 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-04.html
  48. 5 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-05.html
  49. 6 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-06.html
  50. 4 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-07.html
  51. 4 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-08.html
  52. 0 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-09.html
  53. 0 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-10.html
  54. 6 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-11.html
  55. 210 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/Q00280_TheFoodChain.java
  56. 5 0
      L2J_DataPack_BETA/dist/sql/game/updates/20130804update.sql

+ 5 - 5
L2J_DataPack_BETA/dist/game/data/scripts.cfg

@@ -403,10 +403,10 @@ quests/Q00257_TheGuardIsBusy/Q00257_TheGuardIsBusy.java
 quests/Q00258_BringWolfPelts/Q00258_BringWolfPelts.java
 quests/Q00259_RequestFromTheFarmOwner/Q00259_RequestFromTheFarmOwner.java
 quests/Q00260_OrcHunting/Q00260_OrcHunting.java
-quests/261_DreamOfMoneylender1/__init__.py
+quests/Q00261_CollectorsDream/Q00261_CollectorsDream.java
 quests/Q00262_TradeWithTheIvoryTower/Q00262_TradeWithTheIvoryTower.java
 quests/263_KillAllSylphs1/__init__.py
-quests/264_KeenClaws/__init__.py
+quests/Q00264_KeenClaws/Q00264_KeenClaws.java
 quests/Q00265_BondsOfSlavery/Q00265_BondsOfSlavery.java
 quests/Q00266_PleasOfPixies/Q00266_PleasOfPixies.java
 quests/Q00267_WrathOfVerdure/Q00267_WrathOfVerdure.java
@@ -417,12 +417,12 @@ quests/Q00271_ProofOfValor/Q00271_ProofOfValor.java
 quests/Q00272_WrathOfAncestors/Q00272_WrathOfAncestors.java
 quests/Q00273_InvadersOfTheHolyLand/Q00273_InvadersOfTheHolyLand.java
 quests/Q00274_SkirmishWithTheWerewolves/Q00274_SkirmishWithTheWerewolves.java
-quests/275_BlackWingedSpies/__init__.py
-quests/276_HestuiTotem/__init__.py
+quests/Q00275_DarkWingedSpies/Q00275_DarkWingedSpies.java
+quests/Q00276_TotemOfTheHestui/Q00276_TotemOfTheHestui.java
 quests/Q00277_GatekeepersOffering/Q00277_GatekeepersOffering.java
 quests/Q00278_HomeSecurity/Q00278_HomeSecurity.java
 quests/Q00279_TargetOfOpportunity/Q00279_TargetOfOpportunity.java
-quests/280_TheFoodChain/__init__.py
+quests/Q00280_TheFoodChain/Q00280_TheFoodChain.java
 quests/Q00281_HeadForTheHills/Q00281_HeadForTheHills.java
 quests/283_TheFewTheProudTheBrave/__init__.py
 quests/284_MuertosFeather/__init__.py

+ 0 - 3
L2J_DataPack_BETA/dist/game/data/scripts/quests/261_DreamOfMoneylender1/30222-04.htm

@@ -1,3 +0,0 @@
-<html><body>Alshupes:<br>
-Didn't I ask you to fetch<font color="LEVEL"> eight Giant Spider legs</font> for me? I don't care if it is a crimson spider, hook spider, or a pincer spider. Bring me all eight and I will pay you generously, as promised. The giants spiders are mostly found<font color="LEVEL">  past the first three-way junction to the west of the village</font>.
-</body></html>

+ 0 - 79
L2J_DataPack_BETA/dist/game/data/scripts/quests/261_DreamOfMoneylender1/__init__.py

@@ -1,79 +0,0 @@
-# Made by Mr. - Version 0.3 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
-
-qn = "261_DreamOfMoneylender1"
-
-GIANT_SPIDER_LEG = 1087
-ADENA = 57
-
-class Quest (JQuest) :
-
- def __init__(self,id,name,descr):
-     JQuest.__init__(self,id,name,descr)
-     self.questItemIds = [GIANT_SPIDER_LEG]
-
- def onAdvEvent (self,event,npc, player) :
-    htmltext = event
-    st = player.getQuestState(qn)
-    if not st : return
-    if event == "30222-03.htm" :
-      st.set("cond","1")
-      st.setState(State.STARTED)
-      st.playSound("ItemSound.quest_accept")
-    return htmltext
-
- def onTalk (self,npc,player):
-   htmltext = Quest.getNoQuestMsg(player)
-   st = player.getQuestState(qn)
-   if not st : return htmltext
-
-   npcId = npc.getNpcId()
-   id = st.getState()
-
-   if id == State.CREATED :
-     st.set("cond","0")
-   if st.getInt("cond")==0 :
-     if player.getLevel() >= 15 :
-       htmltext = "30222-02.htm"
-     else:
-       htmltext = "30222-01.htm"
-       st.exitQuest(1)
-   else :
-     if st.getQuestItemsCount(GIANT_SPIDER_LEG) >= 8 :
-       st.giveItems(ADENA,1000)
-       st.takeItems(GIANT_SPIDER_LEG,-1)
-       st.addExpAndSp(2000,0)
-       htmltext = "30222-05.htm"
-       st.exitQuest(1)
-       st.playSound("ItemSound.quest_finish")
-     else:
-       htmltext = "30222-04.htm"
-   return htmltext
-
- def onKill(self,npc,player,isPet):
-   st = player.getQuestState(qn)
-   if not st : return 
-   if st.getState() != State.STARTED : return 
-   
-   count = st.getQuestItemsCount(GIANT_SPIDER_LEG)
-   if count < 8 :
-     st.giveItems(GIANT_SPIDER_LEG,1)
-     if count == 7 :
-       st.playSound("ItemSound.quest_middle")
-       st.set("cond","2")
-     else:
-       st.playSound("ItemSound.quest_itemget")
-   return
-
-QUEST       = Quest(261,qn,"Collector's Dream")
-
-QUEST.addStartNpc(30222)
-
-QUEST.addTalkId(30222)
-
-QUEST.addKillId(20308)
-QUEST.addKillId(20460)
-QUEST.addKillId(20466)

+ 0 - 6
L2J_DataPack_BETA/dist/game/data/scripts/quests/264_KeenClaws/30136-02.htm

@@ -1,6 +0,0 @@
-<html><body>Trader Payne:<br>
-The arrows sold in this store are specially crafted by my hands. As you know, the shaft is made from ash and the tips are made from steel or adamantium.<br>
-But sometimes I get orders for custom-made arrows. Just a few days ago, Assassin Kiel Knighthawk placed an order for claw-shaped arrows made from<font color="LEVEL"> wolf claws.</font> Hooked arrows made from claws are difficult to pull out once they are lodged in the body, and create great internal wounds.<br>
-Kiel said that he had to leave for a castle siege soon and to complete the arrows within a week. However, time is too short and I must ask your assistance. Could you help me gather the wolf claws?<br>
-<a action="bypass -h Quest 264_KeenClaws 30136-03.htm">Say you will help</a>
-</body></html>

+ 0 - 5
L2J_DataPack_BETA/dist/game/data/scripts/quests/264_KeenClaws/30136-03.htm

@@ -1,5 +0,0 @@
-<html><body>Trader Payne:<br>
-Thank you. Your task is fairly simple. Collect<font color="LEVEL"> fifty wolf claws</font> and bring them to me. You can acquire the claws by hunting the<font color="LEVEL"> ashen wolves</font> or<font color="LEVEL"> goblins</font> outside of the village. The lowest goblins have crude talismans made by stringing wolf claws.<br>
-As a reward for helping me, I will give you one of the defense items from my store. I swear on the eye of Shilen which observes everything, that I will faithfully fulfill the terms of our contract.<br>
-Wonderful! I thank you in advance. There is not much time, so please hurry.
-</body></html>

+ 0 - 4
L2J_DataPack_BETA/dist/game/data/scripts/quests/264_KeenClaws/30136-04.htm

@@ -1,4 +0,0 @@
-<html><body>Trader Payne:<br>
-According to the contract we have entered into, you must gather<font color="LEVEL"> fifty wolf claws</font> and bring them to me. You can acquire the claws by hunting the<font color="LEVEL"> ashen wolves</font> or<font color="LEVEL"> goblins</font> outside of the village. The lowest goblins have crude talismans made by stringing wolf claws.<br>
-Now hurry! There is not much time left.
-</body></html>

+ 0 - 91
L2J_DataPack_BETA/dist/game/data/scripts/quests/264_KeenClaws/__init__.py

@@ -1,91 +0,0 @@
-# Made by Mr. Have fun! - Version 0.3 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
-
-qn = "264_KeenClaws"
-
-WOLF_CLAW = 1367
-
-DROP={20003:[[5,10,8],[0,5,2]],20456:[[16,20,2],[0,16,1]]}
-
-class Quest (JQuest) :
-
- def __init__(self,id,name,descr):
-     JQuest.__init__(self,id,name,descr)
-     self.questItemIds = [WOLF_CLAW]
-
- def onAdvEvent (self,event,npc, player) :
-    htmltext = event
-    st = player.getQuestState(qn)
-    if not st : return
-    if event == "30136-03.htm" :
-      st.set("cond","1")
-      st.setState(State.STARTED)
-      st.playSound("ItemSound.quest_accept")
-    return htmltext
-
- def onTalk (self,npc,player):
-   htmltext = Quest.getNoQuestMsg(player)
-   st = player.getQuestState(qn)
-   if not st : return htmltext
-
-   npcId = npc.getNpcId()
-   id = st.getState()
-
-   if id == State.CREATED :
-     st.set("cond","0")
-   if st.getInt("cond")==0 :
-     if player.getLevel() >= 3 :
-       htmltext = "30136-02.htm"
-     else:
-       htmltext = "30136-01.htm"
-       st.exitQuest(1)
-   else:
-     count=st.getQuestItemsCount(WOLF_CLAW)
-     if count<50 :
-       htmltext = "30136-04.htm"
-     else :
-       st.takeItems(WOLF_CLAW,-1)
-       if self.getRandom(17) < 6 :
-          st.giveItems(5140,1)
-       else :
-          st.giveItems(734,1)
-       htmltext = "30136-05.htm"
-       st.exitQuest(1)
-       st.playSound("ItemSound.quest_finish")
-   return htmltext
-
- def onKill(self,npc,player,isPet):
-   st = player.getQuestState(qn)
-   if not st : return 
-   if st.getState() != State.STARTED : return 
-   
-   if st.getInt("cond") == 1:
-      npcId = npc.getNpcId()
-      count=st.getQuestItemsCount(WOLF_CLAW)
-      chance = self.getRandom(20)
-      qty=0
-      for i in DROP[npcId]:
-         if i[0]<=chance<i[1]:
-            qty=i[2]
-      if qty :
-        if count+qty>50 :
-          qty=50-count
-        if count+qty==50:
-          st.playSound("ItemSound.quest_middle")
-          st.set("cond","2")
-        else :
-          st.playSound("ItemSound.quest_itemget")
-        st.giveItems(WOLF_CLAW,qty)
-   return
-
-QUEST       = Quest(264,qn,"Keen Claws")
-
-QUEST.addStartNpc(30136)
-
-QUEST.addTalkId(30136)
-
-QUEST.addKillId(20003)
-QUEST.addKillId(20456)

+ 0 - 5
L2J_DataPack_BETA/dist/game/data/scripts/quests/275_BlackWingedSpies/30567-02.htm

@@ -1,5 +0,0 @@
-<html><body>Neruga Chief Tantus:<br>
-The identity of the one who instigated goblins and werewolves, and controlled rakeclaw imps from behind the scenes has been unmasked. He is called<font color="LEVEL"> Varangka</font>, a disgraced mage banished from the Kingdom a few years ago. He decided to seek revenge upon us to wipe away his shame and humiliation by conspiring with the evil spirits and gaining the power of the darkness. Somewhere on the Immortal Plateau, he is plotting to destroy the Kingdom of the Orcs.<br>
-Many expeditions have been dispatched to kill him, but every time, Varangka already knew of the attack and had escaped. Now we know that he had servants in the air that acted as his eyes and ears. The<font color="LEVEL"> darkwing bats</font> are being controlled by Varangka, so Varangka will see all our movements. The seers say they need the<font color="LEVEL"> fangs of the bats</font> to complete the protection system that will keep the darkwing bats from approaching.<br>
-<a action="bypass -h Quest 275_BlackWingedSpies 30567-03.htm">Say you will collect the fangs</a>
-</body></html>

+ 0 - 94
L2J_DataPack_BETA/dist/game/data/scripts/quests/275_BlackWingedSpies/__init__.py

@@ -1,94 +0,0 @@
-# Made by Mr - Version 0.3 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
-
-qn = "275_BlackWingedSpies"
-
-DARKWING_BAT_FANG = 1478
-VARANGKAS_PARASITE = 1479
-ADENA = 57
-
-class Quest (JQuest) :
-
- def __init__(self,id,name,descr):
-     JQuest.__init__(self,id,name,descr)
-     self.questItemIds = [DARKWING_BAT_FANG, VARANGKAS_PARASITE]
-
- def onAdvEvent (self,event,npc, player) :
-    htmltext = event
-    st = player.getQuestState(qn)
-    if not st : return
-    if event == "30567-03.htm" :
-      st.set("cond","1")
-      st.setState(State.STARTED)
-      st.playSound("ItemSound.quest_accept")
-    return htmltext
-
- def onTalk (self,npc,player):
-   htmltext = Quest.getNoQuestMsg(player)
-   st = player.getQuestState(qn)
-   if not st : return htmltext
-
-   npcId = npc.getNpcId()
-   id = st.getState()
-   if id == State.CREATED :
-     st.set("cond","0")
-   if st.getInt("cond")==0 :
-     if player.getRace().ordinal() != 3 :
-       htmltext = "30567-00.htm"
-       st.exitQuest(1)
-     elif player.getLevel() < 11 :
-       htmltext = "30567-01.htm"
-       st.exitQuest(1)
-     else :
-       htmltext = "30567-02.htm"
-   else :
-     if st.getQuestItemsCount(DARKWING_BAT_FANG) < 70 :
-       htmltext = "30567-04.htm"
-     else:
-       htmltext = "30567-05.htm"
-       st.exitQuest(1)
-       st.playSound("ItemSound.quest_finish")
-       st.giveItems(ADENA,4550)
-       st.takeItems(DARKWING_BAT_FANG,-1)
-       st.takeItems(VARANGKAS_PARASITE,-1)
-   return htmltext
-
- def onKill(self,npc,player,isPet):
-   st = player.getQuestState(qn)
-   if not st : return 
-   if st.getState() != State.STARTED : return 
-   
-   npcId = npc.getNpcId()
-   if npcId == 20316 :
-     if st.getQuestItemsCount(DARKWING_BAT_FANG) < 70 :
-        if st.getQuestItemsCount(DARKWING_BAT_FANG) < 69 :
-          st.playSound("ItemSound.quest_itemget")
-        else:
-          st.playSound("ItemSound.quest_middle")
-          st.set("cond","2")
-        st.giveItems(DARKWING_BAT_FANG,1)
-        if 66>st.getQuestItemsCount(DARKWING_BAT_FANG)>10 and self.getRandom(100) < 10 :
-          st.addSpawn(27043)
-          st.giveItems(VARANGKAS_PARASITE,1)
-   else :
-      if st.getQuestItemsCount(DARKWING_BAT_FANG) < 66 and st.getQuestItemsCount(VARANGKAS_PARASITE) :
-        if st.getQuestItemsCount(DARKWING_BAT_FANG) < 65 :
-          st.playSound("ItemSound.quest_itemget")
-        else:
-          st.playSound("ItemSound.quest_middle")
-          st.set("cond","2")
-        st.giveItems(DARKWING_BAT_FANG,5)
-        st.takeItems(VARANGKAS_PARASITE,-1)
-   return
-
-QUEST       = Quest(275,qn,"Black Winged Spies")
-
-QUEST.addStartNpc(30567)
-
-QUEST.addTalkId(30567)
-
-QUEST.addKillId(20316)
-QUEST.addKillId(27043)

+ 0 - 4
L2J_DataPack_BETA/dist/game/data/scripts/quests/276_HestuiTotem/30571-00.htm

@@ -1,4 +0,0 @@
-<html><body>Seer Tanapi:<br>
-It is difficult for a foreign race such as yourself to understand the teachings of the flame that Paagrio gives us Orcs. One that cannot realize the truth within flame can be of no assistance to me!<br>
-(Quest for Orc characters.)
-</body></html>

+ 0 - 3
L2J_DataPack_BETA/dist/game/data/scripts/quests/276_HestuiTotem/30571-04.htm

@@ -1,3 +0,0 @@
-<html><body>Seer Tanapi:<br>
-Do not forget. When you kill the kasha bears, their bodies will become purified when the kasha parasites come out. If there are more parasites, their energy becomes stronger and the<font color="LEVEL"> kasha totem spirit</font> appears. When it appears, defeat it and obtain the crystal of the kasha totem spirit.
-</body></html>

+ 0 - 95
L2J_DataPack_BETA/dist/game/data/scripts/quests/276_HestuiTotem/__init__.py

@@ -1,95 +0,0 @@
-# Made by Mr. Have fun! - Version 0.3 by kmarty
-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
-
-qn = "276_HestuiTotem"
-
-KASHA_PARASITE_ID = 1480
-KASHA_CRYSTAL_ID = 1481
-HESTUIS_TOTEM_ID = 1500
-LEATHER_PANTS_ID = 29
-
-class Quest (JQuest) :
-
- def __init__(self,id,name,descr):
-     JQuest.__init__(self,id,name,descr)
-     self.questItemIds = [KASHA_CRYSTAL_ID, KASHA_PARASITE_ID]
-
- def onAdvEvent (self,event,npc, player) :
-    htmltext = event
-    st = player.getQuestState(qn)
-    if not st : return
-    if event == "1" :
-      st.set("cond","1")
-      st.setState(State.STARTED)
-      st.playSound("ItemSound.quest_accept")
-      htmltext = "30571-03.htm"
-    return htmltext
-
- def onTalk (self,npc,player):
-   htmltext = Quest.getNoQuestMsg(player)
-   st = player.getQuestState(qn)
-   if not st : return htmltext
-
-   npcId = npc.getNpcId()
-   id = st.getState()
-   if id == State.CREATED :
-     st.set("cond","0")
-   if npcId == 30571 and st.getInt("cond")==0 :
-      if player.getRace().ordinal() != 3 :
-        htmltext = "30571-00.htm"
-        st.exitQuest(1)
-      elif player.getLevel() < 15 :
-        htmltext = "30571-01.htm"
-        st.exitQuest(1)
-      else:
-         htmltext = "30571-02.htm"
-   elif npcId == 30571 and st.getInt("cond") :
-      if st.getQuestItemsCount(KASHA_CRYSTAL_ID) == 0 :
-        htmltext = "30571-04.htm"
-      else:
-        htmltext = "30571-05.htm"
-        st.exitQuest(1)
-        st.playSound("ItemSound.quest_finish")
-        st.takeItems(KASHA_CRYSTAL_ID,-1)
-        st.takeItems(KASHA_PARASITE_ID,-1)
-        st.giveItems(HESTUIS_TOTEM_ID,1)
-        st.giveItems(LEATHER_PANTS_ID,1)
-   return htmltext
-
- def onKill(self,npc,player,isPet):
-   st = player.getQuestState(qn)
-   if not st : return 
-   if st.getState() != State.STARTED : return 
-   
-   npcId = npc.getNpcId()
-   if npcId == 20479 :
-      if st.getInt("cond")==1 and st.getQuestItemsCount(KASHA_CRYSTAL_ID) == 0 :
-        count = st.getQuestItemsCount(KASHA_PARASITE_ID)
-        random = self.getRandom(100)
-        if (count >= 70 and random < 90) or \
-           (count >= 65 and random < 75) or \
-           (count >= 60 and random < 60) or \
-           (count >= 52 and random < 45) or \
-           (count >  50 and random < 30) :
-                st.addSpawn(27044)
-                st.takeItems(KASHA_PARASITE_ID,count)
-        else :
-                st.giveItems(KASHA_PARASITE_ID,1)
-                st.playSound("ItemSound.quest_itemget")
-   elif npcId == 27044 :
-      if st.getInt("cond")==1 and st.getQuestItemsCount(KASHA_CRYSTAL_ID) == 0 :
-        st.giveItems(KASHA_CRYSTAL_ID,1)
-        st.playSound("ItemSound.quest_middle")
-        st.set("cond","2")
-   return
-
-QUEST       = Quest(276,qn,"Totem of the Hestui")
-
-QUEST.addStartNpc(30571)
-QUEST.addTalkId(30571)
-
-QUEST.addKillId(20479)
-QUEST.addKillId(27044)

+ 0 - 3
L2J_DataPack_BETA/dist/game/data/scripts/quests/280_TheFoodChain/32175-04.htm

@@ -1,3 +0,0 @@
-<html><body>Marksman Bixon:<br>
-Go to the village entrance and hunt <font color="LEVEL">Young Grey Keltir, Grey Keltir and the Dominant Grey Keltir</font> and bring me the <font color="LEVEL">Grey Keltir's teeth</font>... Also, hunt the <font color="LEVEL">Black Wolves and the Dominant Black Wolf</font>, and bring me <font color="LEVEL">the Teeth of the Black Wolves</font> as well.
-</body></html>

+ 0 - 5
L2J_DataPack_BETA/dist/game/data/scripts/quests/280_TheFoodChain/32175-05.htm

@@ -1,5 +0,0 @@
-<html><body>Marksman Bixon:<br>
-Ah, you've returned... so, how was your hunting? Productive, I hope!<br>
-<a action="bypass -h Quest 280_TheFoodChain ADENA">Exchahge teeth for Adena.</a><br>
-<a action="bypass -h Quest 280_TheFoodChain ITEM">Exchahge 25 teeth for an item.</a>
-</body></html>

+ 0 - 6
L2J_DataPack_BETA/dist/game/data/scripts/quests/280_TheFoodChain/32175-06.htm

@@ -1,6 +0,0 @@
-<html><body>Marksman Bixon:<br>
-Thank you for helping my cause... Here, take this. It's not much, but it's what I promised you.<br>
-Would you care to continue helping me?<br>
-<a action="bypass -h Quest 280_TheFoodChain 32175-07.htm">Say that you will continue.</a><br>
-<a action="bypass -h Quest 280_TheFoodChain 32175-08.htm">Say that you wish to quit.</a>
-</body></html>

+ 0 - 4
L2J_DataPack_BETA/dist/game/data/scripts/quests/280_TheFoodChain/32175-07.htm

@@ -1,4 +0,0 @@
-<html><body>Marksman Bixon:<br>
-Thank you for your continued help...<br>
-Go to the village entrance and hunt <font color="LEVEL">Young Grey Keltir, Grey Keltir and the Dominant Grey Keltir</font> and bring me the <font color="LEVEL">Grey Keltir's teeth</font>... Also, hunt the <font color="LEVEL">Black Wolves and the Dominant Black Wolf</font>, and bring me <font color="LEVEL">the Teeth of the Black Wolves</font> as well.
-</body></html>

+ 0 - 109
L2J_DataPack_BETA/dist/game/data/scripts/quests/280_TheFoodChain/__init__.py

@@ -1,109 +0,0 @@
-# Contributed by t0rm3nt0r (tormentor2000@mail.ru) to the Official L2J Datapack Project.
-# Visit http://www.l2jdp.com/forum/ for more details.
-
-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
-
-#Complete - 95%. Need add other reward's from retail
-qn = "280_TheFoodChain"
-
-#NPC'S
-VIZON = 32175
-
-#ITEM'S
-KELTIR_TOOTH = 9809
-WOLF_TOOTH = 9810
-REWARD = [28,35,116] #Pants, Cloth Shoes, Magic Ring
-
-#MOB'S
-MOBS_KELTIR = range(22229,22232)
-MOBS_WOLF = range(22232,22234)
-
-class Quest (JQuest) :
-
- def __init__(self,id,name,descr):
-     JQuest.__init__(self,id,name,descr)
-  
- def onAdvEvent (self,event,npc, player) :
-     htmltext = event
-     st = player.getQuestState(qn)
-     if not st : return
-     keltir_tooth = st.getQuestItemsCount(KELTIR_TOOTH)
-     wolf_tooth = st.getQuestItemsCount(WOLF_TOOTH)
-     summ = keltir_tooth + wolf_tooth
-     if event == "32175-03.htm" :
-       st.set("cond","1")
-       st.setState(State.STARTED)
-       st.playSound("ItemSound.quest_accept")
-     elif event == "ADENA" :
-       htmltext = "32175-06.htm"
-       st.giveItems(57,summ*2)
-       st.takeItems(KELTIR_TOOTH,-1)
-       st.takeItems(WOLF_TOOTH,-1)
-     elif event == "ITEM" :
-       if summ < 25 :
-         htmltext = "32175-09.htm"
-       else:
-         htmltext = "32175-06.htm"
-         if keltir_tooth > 25 :
-           st.giveItems(REWARD[self.getRandom(len(REWARD))],1)
-           st.takeItems(KELTIR_TOOTH,25)
-         else :
-           st.giveItems(REWARD[self.getRandom(len(REWARD))],1)
-           st.takeItems(KELTIR_TOOTH,keltir_tooth)
-           st.takeItems(WOLF_TOOTH,25 - keltir_tooth)
-     elif event == "32175-08.htm" :
-       st.takeItems(KELTIR_TOOTH,-1)
-       st.takeItems(WOLF_TOOTH,-1)
-       st.exitQuest(1)
-     return htmltext
-
- def onTalk (self,npc,player):
-     npcId = npc.getNpcId()
-     htmltext = Quest.getNoQuestMsg(player)
-     st = player.getQuestState(qn)
-     if not st : return htmltext
-     id = st.getState()
-     cond = st.getInt("cond")
-     keltir_tooth = st.getQuestItemsCount(KELTIR_TOOTH)
-     wolf_tooth = st.getQuestItemsCount(WOLF_TOOTH)
-     summ = keltir_tooth + wolf_tooth
-     if id == State.CREATED and npcId == VIZON :
-       if player.getLevel() < 3 :
-         htmltext = "32175-02.htm"
-         st.exitQuest(1)
-       else :
-         htmltext = "32175-01.htm"
-     elif id == State.STARTED and npcId == VIZON :
-       if not summ :
-         htmltext = "32175-04.htm"
-       else :
-         htmltext = "32175-05.htm"
-     return htmltext
-    
- def onKill(self,npc,player,isPet) :
-     st = player.getQuestState(qn)
-     if not st: return
-     if st.getState() == State.STARTED :
-       npcId = npc.getNpcId()
-       chance = self.getRandom(100)
-       if (npcId in MOBS_KELTIR) and (chance < 95) : #Retail statistic info. 36 mob's - 34 tooth
-         st.giveItems(KELTIR_TOOTH,1)
-         st.playSound("ItemSound.quest_itemget")
-       elif (npcId in MOBS_WOLF) and (chance < 75) : #Retail statistic info. 30 mob's - 22*3 tooth
-         st.giveItems(WOLF_TOOTH,3)
-         st.playSound("ItemSound.quest_itemget")
-     return
-
-QUEST       = Quest(280, qn, "The Food Chain")
-
-QUEST.addStartNpc(VIZON)
-
-QUEST.addTalkId(VIZON)
-
-for mob in MOBS_KELTIR :
-    QUEST.addKillId(mob)
-for mob in MOBS_WOLF :
-    QUEST.addKillId(mob)

+ 2 - 1
L2J_DataPack_BETA/dist/game/data/scripts/quests/261_DreamOfMoneylender1/30222-01.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00261_CollectorsDream/30222-01.htm

@@ -1,4 +1,5 @@
 <html><body>Alshupes:<br>
 Lately I've put aside the money lending business and have taken up the hobby of collecting the skins or claws of rare animals. There are many that criticize my hobby, saying that only Humans would gather the bodies of dead animals as trophies, but these are the same people that turn around and come to see or borrow them for a few days, saying that they need them for magic research -- of course, asking me to keep it a secret from everyone else.<br>
 One day, when you become skilled enough to hunt rare animals, stop by and see me. I will give you a rewarding task to complete. Right now, though, I think it would be far too difficult for you.<br>
-(Quest for characters level 15 and above.)</body></html>
+(Quest for characters level 15 and above.)
+</body></html>

+ 3 - 3
L2J_DataPack_BETA/dist/game/data/scripts/quests/261_DreamOfMoneylender1/30222-02.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00261_CollectorsDream/30222-02.htm

@@ -1,4 +1,4 @@
 <html><body>Alshupes:<br>
-Lately I've put aside the money lending business and have taken up the hobby of collecting the skins or claws of rare animals. There are many that criticize my hobby, saying that only Humans would gather the bodies of dead animals as trophies, but these are the same people that turn around and come to see or borrow them for a few days, saying that they need them for magic research -- of course, asking me to keep it a secret from everyone else.<br>
-So how about it, will you take on a job for me? It involves searching the fields and hunting rare animals for trophies. I can't say it's an easy task, but I will compensate you generously for your labor. What do you say, would you like to give it a try?<br>
-<a action="bypass -h Quest 261_DreamOfMoneylender1 30222-03.htm">Say you will take the task</a></body></html>
+Lately I've put aside the money lending business and have taken up the hobby of collecting the skins or claws of rare animals. There are many that criticize my hobby, saying that only Humans would gather the bodies of dead animals as trophies, but these are the same people that turn around and come to see or borrow them for a few days, saying that they need them for magic research -- of course, asking me to keep it a secret from everyone else.<br>So how about it, will you take on a job for me? It involves searching the fields and hunting rare animals for trophies. I can't say it's an easy task, but I will compensate you generously for your labor. What do you say, would you like to give it a try?<br>
+<a action="bypass -h Quest Q00261_CollectorsDream 30222-03.htm">Say you will take the task</a>
+</body></html>

+ 1 - 1
L2J_DataPack_BETA/dist/game/data/scripts/quests/261_DreamOfMoneylender1/30222-03.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00261_CollectorsDream/30222-03.htm

@@ -1,4 +1,4 @@
 <html><body>Alshupes:<br>
 Currently, my main interest is in the large insects that I saw while traveling in the Human land of Gludio. As you would know if you studied history, when the Mystics of the Ivory Tower battled the Dark Sorcerer Beleth, also called a devil by the Humans of old, the strong magical energy which arose from their combat caused southern Gludio to become a barren plain and produced abnormalities such as ants the size of houses and spiders the size of Buffalos.<br>
-In the last ten years, those great spiders have spread even to these Elven Woods. The tame creatures that have become accustomed to the care of the spirits and fairies of our woods are the perfect prey for those gigantic predators. Isn't that interesting? There are three kinds of giant spiders: crimson spiders, hook spiders, and pincer spiders. I don't have a preference, but I want to put into my hands a<font color="LEVEL"> giant spider trophy</font>. What you must do for me is to hunt the great spiders in the forest, cut off<font color="LEVEL"> eight legs</font>, and bring them back to me. It is a bit dangerous, but I will reward you generously for your efforts. Giant spiders are often found<font color="LEVEL"> past the first three-way junction to the west of the village</font>.
+In the last ten years, those great spiders have spread even to these Elven Woods. The tame creatures that have become accustomed to the care of the spirits and fairies of our woods are the perfect prey for those gigantic predators. Isn't that interesting? There are three kinds of giant spiders: crimson spiders, hook spiders, and pincer spiders. I don't have a preference, but I want to put into my hands a <font color="LEVEL">giant spider trophy</font>. What you must do for me is to hunt the great spiders in the forest, cut off <font color="LEVEL">eight legs</font>, and bring them back to me. It is a bit dangerous, but I will reward you generously for your efforts. Giant spiders are often found <font color="LEVEL">past the first three-way junction to the west of the village</font>.
 </body></html>

+ 3 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00261_CollectorsDream/30222-04.html

@@ -0,0 +1,3 @@
+<html><body>Alshupes:<br>
+Didn't I ask you to fetch <font color="LEVEL">eight Giant Spider Legs</font> for me? I don't care if it is a crimson spider, hook spider, or a pincer spider. Bring me all eight and I will pay you generously, as promised. The giant spiders are mostly found <font color="LEVEL">past the first three-way junction to the west of the village</font>.
+</body></html>

+ 0 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/261_DreamOfMoneylender1/30222-05.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00261_CollectorsDream/30222-05.html


+ 153 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00261_CollectorsDream/Q00261_CollectorsDream.java

@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2004-2013 L2J DataPack
+ * 
+ * This file is part of L2J DataPack.
+ * 
+ * L2J DataPack is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * L2J DataPack is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package quests.Q00261_CollectorsDream;
+
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.quest.Quest;
+import com.l2jserver.gameserver.model.quest.QuestState;
+import com.l2jserver.gameserver.model.quest.State;
+import com.l2jserver.gameserver.model.variables.PlayerVariables;
+import com.l2jserver.gameserver.network.NpcStringId;
+import com.l2jserver.gameserver.network.serverpackets.ExShowScreenMessage;
+import com.l2jserver.gameserver.util.Util;
+
+/**
+ * Collector's Dream (261)
+ * @author xban1x
+ */
+public final class Q00261_CollectorsDream extends Quest
+{
+	// Npc
+	private static final int ALSHUPES = 30222;
+	// Monsters
+	private static final int[] MONSTERS = new int[]
+	{
+		20308, // Hook Spider
+		20460, // Crimson Spider
+		20466, // Pincer Spider
+	};
+	// Item
+	private static final int SPIDER_LEG = 1087;
+	// Misc
+	private static final int MIN_LVL = 15;
+	private static final int MAX_LEG_COUNT = 8;
+	// Message
+	private static final ExShowScreenMessage MESSAGE = new ExShowScreenMessage(NpcStringId.LAST_DUTY_COMPLETE_N_GO_FIND_THE_NEWBIE_GUIDE, 2, 5000);
+	
+	private Q00261_CollectorsDream()
+	{
+		super(261, Q00261_CollectorsDream.class.getSimpleName(), "Collector's Dream");
+		addStartNpc(ALSHUPES);
+		addTalkId(ALSHUPES);
+		addKillId(MONSTERS);
+		registerQuestItems(SPIDER_LEG);
+	}
+	
+	@Override
+	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+	{
+		final QuestState st = player.getQuestState(getName());
+		if ((st != null) && event.equals("30222-03.htm"))
+		{
+			st.startQuest();
+			return event;
+		}
+		return null;
+	}
+	
+	@Override
+	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
+	{
+		final QuestState st = killer.getQuestState(getName());
+		if ((st != null) && st.isCond(1) && Util.checkIfInRange(1500, npc, killer, true))
+		{
+			if (st.giveItemRandomly(SPIDER_LEG, 1, MAX_LEG_COUNT, 1, true))
+			{
+				st.setCond(2);
+			}
+		}
+		return super.onKill(npc, killer, isSummon);
+	}
+	
+	@Override
+	public String onTalk(L2Npc npc, L2PcInstance player)
+	{
+		final QuestState st = player.getQuestState(getName());
+		String htmltext = getNoQuestMsg(player);
+		if (st == null)
+		{
+			return htmltext;
+		}
+		
+		switch (st.getState())
+		{
+			case State.CREATED:
+			{
+				htmltext = (player.getLevel() >= MIN_LVL) ? "30222-02.htm" : "30222-01.htm";
+				break;
+			}
+			case State.STARTED:
+			{
+				switch (st.getCond())
+				{
+					case 1:
+					{
+						htmltext = "30222-04.html";
+						break;
+					}
+					case 2:
+					{
+						if (st.getQuestItemsCount(SPIDER_LEG) >= MAX_LEG_COUNT)
+						{
+							giveNewbieReward(player);
+							st.giveAdena(1000, true);
+							st.addExpAndSp(2000, 0);
+							st.exitQuest(true, true);
+							htmltext = "30222-05.html";
+						}
+						break;
+					}
+				}
+				break;
+			}
+		}
+		return htmltext;
+	}
+	
+	public static void giveNewbieReward(L2PcInstance player)
+	{
+		final PlayerVariables vars = player.getVariables();
+		if (vars.getString("GUIDE_MISSION", null) == null)
+		{
+			vars.set("GUIDE_MISSION", 100000);
+			player.sendPacket(MESSAGE);
+		}
+		else if (((vars.getInteger("GUIDE_MISSION") % 100000000) / 10000000) != 1)
+		{
+			vars.set("GUIDE_MISSION", vars.getInteger("GUIDE_MISSION") + 10000000);
+			player.sendPacket(MESSAGE);
+		}
+	}
+	
+	public static void main(String[] args)
+	{
+		new Q00261_CollectorsDream();
+	}
+}

+ 2 - 2
L2J_DataPack_BETA/dist/game/data/scripts/quests/264_KeenClaws/30136-01.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00264_KeenClaws/30136-01.htm

@@ -1,5 +1,5 @@
 <html><body>Trader Payne:<br>
-The arrows sold in this store are specially crafted by my hands. As you know, the shaft is made from ash and the tips are made from steel or adamantium.<br>
-But sometimes I get orders for custom-made arrows. For example, the Assassin Kiel Nighthawk has ordered a claw-shaped arrowhead made of wolf claws. He is away at the siege battle in Giran right now, but I am sure he will order arrowheads again when he returns. I'd like you to help me gather the wolf claws when that time comes.<br>
+The arrows sold in this store are specially crafted by my hands. As you know, the shaft is made from ash and the tips are made from Steel or adamantium.<br>
+But sometimes I get orders for custom-made arrows. For example, the Assassin Kiel Nighthawk has ordered a claw-shaped arrowhead made of Wolf Claws. He is away at the siege battle in Giran right now, but I am sure he will order arrowheads again when he returns. I'd like you to help me gather the Wolf Claws when that time comes.<br>
 (Quest for characters level 3 and above.)
 </body></html>

+ 6 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00264_KeenClaws/30136-02.htm

@@ -0,0 +1,6 @@
+<html><body>Trader Payne:<br>
+The arrows sold in this store are specially crafted by my hands. As you know, the shaft is made from ash and the tips are made from Steel or adamantium.<br>
+But sometimes I get orders for custom-made arrows. Just a few days ago, Assassin Kiel Nighthawk placed an order for claw-shaped arrows made from <font color="LEVEL">Wolf Claws.</font> Hooked arrows made from claws are difficult to pull out once they are lodged in the body, and create great internal wounds.<br>
+Kiel said that he had to leave for a castle siege soon and to complete the arrows within a week. However, time is too short and I must ask your assistance. Could you help me gather the Wolf Claws?<br>
+<a action="bypass -h Quest Q00264_KeenClaws 30136-03.htm">Say you will help.</a>
+</body></html>

+ 5 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00264_KeenClaws/30136-03.htm

@@ -0,0 +1,5 @@
+<html><body>Trader Payne:<br>
+Thank you.  Your task is fairly simple. Collect <font color="LEVEL">fifty Wolf Claws</font> and bring them to me. You can acquire the claws by hunting the <font color="LEVEL">ashen wolves</font> or <font color="LEVEL">goblins</font> outside of the village. The lowest goblins have crude talismans made by stringing Wolf Claws.<br>
+As a reward for helping me, I will give you a good one among the things that I possess. I swear on the eye of Shilen which observes everything, that I will faithfully fulfill the terms of our Contract.<br>
+Now, Wonderful! I thank you in advance. There is not much time, so please hurry.
+</body></html>

+ 4 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00264_KeenClaws/30136-04.html

@@ -0,0 +1,4 @@
+<html><body>Trader Payne:<br>
+According to the Contract we have entered into, you must gather <font color="LEVEL">fifty Wolf Claws</font> and bring them to me. You can acquire the claws by hunting the <font color="LEVEL">ashen wolves</font> or <font color="LEVEL">goblins</font> outside of the village. The lowest goblins have crude talismans made by stringing Wolf Claws.<br>
+Now hurry! There is not much time left.
+</body></html>

+ 2 - 2
L2J_DataPack_BETA/dist/game/data/scripts/quests/264_KeenClaws/30136-05.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00264_KeenClaws/30136-05.html

@@ -1,4 +1,4 @@
 <html><body>Trader Payne:<br>
-Thank you. I see you have brought me fifty wolf claws. Now I can start on the special arrows that Kiel has ordered. I hope I can finish them in time, before he leaves for Pabel.<br>
-According to our contract, I will give you this. It may not be flashy, but it is light and very strong, and will surely be useful one day. Now, shall we go our separate ways? May the shelter of the abyss envelope you until we meet again.
+Thank you. I see you have brought me fifty Wolf Claws. Now I can start on the special arrows that Kiel has ordered. I hope I can finish them in time, before he leaves for Pabel.<br>
+According to our Contract, I will give you this. It may not be flashy, but it is light and very strong, and will surely be useful one day. Now, shall we go our separate ways? May the shelter of the abyss envelope you until we meet again.
 </body></html>

+ 169 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00264_KeenClaws/Q00264_KeenClaws.java

@@ -0,0 +1,169 @@
+/*
+ * Copyright (C) 2004-2013 L2J DataPack
+ * 
+ * This file is part of L2J DataPack.
+ * 
+ * L2J DataPack is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * L2J DataPack is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package quests.Q00264_KeenClaws;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.holders.ItemHolder;
+import com.l2jserver.gameserver.model.quest.Quest;
+import com.l2jserver.gameserver.model.quest.QuestState;
+import com.l2jserver.gameserver.model.quest.State;
+
+/**
+ * Keen Claws (264)
+ * @author xban1x
+ */
+public final class Q00264_KeenClaws extends Quest
+{
+	// Npc
+	private static final int PAINT = 30136;
+	// Item
+	private static final int WOLF_CLAW = 1367;
+	// Monsters
+	private static final Map<Integer, List<ItemHolder>> MONSTER_CHANCES = new HashMap<>();
+	// Rewards
+	private static final Map<Integer, List<ItemHolder>> REWARDS = new HashMap<>();
+	// Misc
+	private static final int MIN_LVL = 3;
+	private static final int WOLF_CLAW_COUNT = 50;
+	static
+	{
+		MONSTER_CHANCES.put(20003, Arrays.asList(new ItemHolder(2, 25), new ItemHolder(8, 50)));
+		MONSTER_CHANCES.put(20456, Arrays.asList(new ItemHolder(1, 80), new ItemHolder(2, 100)));
+		
+		REWARDS.put(1, Arrays.asList(new ItemHolder(4633, 1)));
+		REWARDS.put(2, Arrays.asList(new ItemHolder(57, 2000)));
+		REWARDS.put(5, Arrays.asList(new ItemHolder(5140, 1)));
+		REWARDS.put(8, Arrays.asList(new ItemHolder(735, 1), new ItemHolder(57, 50)));
+		REWARDS.put(11, Arrays.asList(new ItemHolder(737, 1)));
+		REWARDS.put(14, Arrays.asList(new ItemHolder(734, 1)));
+		REWARDS.put(17, Arrays.asList(new ItemHolder(35, 1), new ItemHolder(57, 50)));
+	}
+	
+	private Q00264_KeenClaws()
+	{
+		super(264, Q00264_KeenClaws.class.getSimpleName(), "Keen Claws");
+		addStartNpc(PAINT);
+		addTalkId(PAINT);
+		addKillId(MONSTER_CHANCES.keySet());
+		registerQuestItems(WOLF_CLAW);
+	}
+	
+	@Override
+	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+	{
+		final QuestState st = player.getQuestState(getName());
+		if ((st != null) && event.equals("30136-03.htm"))
+		{
+			st.startQuest();
+			return event;
+		}
+		return null;
+	}
+	
+	@Override
+	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
+	{
+		final QuestState st = killer.getQuestState(getName());
+		if ((st != null) && st.isCond(1))
+		{
+			final int random = getRandom(100);
+			for (ItemHolder drop : MONSTER_CHANCES.get(npc.getNpcId()))
+			{
+				if (random < drop.getCount())
+				{
+					if (st.giveItemRandomly(WOLF_CLAW, drop.getId(), WOLF_CLAW_COUNT, 1, true))
+					{
+						st.setCond(2);
+					}
+					break;
+				}
+			}
+		}
+		return super.onKill(npc, killer, isSummon);
+	}
+	
+	@Override
+	public String onTalk(L2Npc npc, L2PcInstance player)
+	{
+		final QuestState st = player.getQuestState(getName());
+		String htmltext = getNoQuestMsg(player);
+		if (st == null)
+		{
+			return htmltext;
+		}
+		
+		switch (st.getState())
+		{
+			case State.CREATED:
+			{
+				htmltext = (player.getLevel() >= MIN_LVL) ? "30136-02.htm" : "30136-01.htm";
+				break;
+			}
+			case State.STARTED:
+			{
+				switch (st.getCond())
+				{
+					case 1:
+					{
+						htmltext = "30136-04.html";
+						break;
+					}
+					case 2:
+					{
+						if (st.getQuestItemsCount(WOLF_CLAW) >= WOLF_CLAW_COUNT)
+						{
+							final int chance = getRandom(17);
+							for (Map.Entry<Integer, List<ItemHolder>> reward : REWARDS.entrySet())
+							{
+								if (chance < reward.getKey())
+								{
+									for (ItemHolder item : reward.getValue())
+									{
+										st.rewardItems(item);
+									}
+									if (chance == 0)
+									{
+										st.playSound(QuestSound.ITEMSOUND_QUEST_JACKPOT);
+									}
+									break;
+								}
+							}
+							st.exitQuest(true, true);
+							htmltext = "30136-05.html";
+						}
+						break;
+					}
+				}
+				break;
+			}
+		}
+		return htmltext;
+	}
+	
+	public static void main(String[] args)
+	{
+		new Q00264_KeenClaws();
+	}
+}

+ 0 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/275_BlackWingedSpies/30567-00.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00275_DarkWingedSpies/30567-00.htm


+ 2 - 2
L2J_DataPack_BETA/dist/game/data/scripts/quests/275_BlackWingedSpies/30567-01.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00275_DarkWingedSpies/30567-01.htm

@@ -1,5 +1,5 @@
 <html><body>Neruga Chief Tantus:<br>
-The identity of the one stirring up goblins and werewolves, and controlling rakeclaw imps has been unmasked. He is called<font color="LEVEL"> Varangka</font>, a disgraced mage banished from the Kingdom a few years ago. He decided to seek revenge upon us to wipe away his shame and humiliation by conspiring with the evil spirits and gaining the power of the darkness. Somewhere on the Immortal Plateau, he is plotting to destroy the Kingdom of the Orcs.<br>
-Many expeditions have been dispatched to kill him, but every time Varangka already knew of the attack and had escaped. We found out that he has servants that act as his eyes and ears. The<font color="LEVEL"> darkwing bat</font> is controlled by Varangka, who uses it to look at our movements. Seer Tanapi is developing a protective shield that will keep darkwing bats from approaching. I will ask you later to collect objects that are required to complete the magic, so be prepared.<br>
+The identity of the one stirring up goblins and werewolves, and controlling Rakeclaw Imps has been unmasked. He is called <font color="LEVEL">Varangka</font>, a disgraced mage banished from the Kingdom a few years ago. He decided to seek revenge upon us to wipe away his shame and humiliation by conspiring with the evil spirits and gaining the power of the darkness. Somewhere on the Immortal Plateau, he is plotting to destroy the Kingdom of the Orcs.<br>
+Many expeditions have been dispatched to kill him, but every time Varangka already knew of the attack and had escaped. We found out that he has servants that act as his eyes and ears. The <font color="LEVEL">darkwing bats</font> are controlled by Varangka, who uses them to monitor our movements. Seer Tanapi is developing a protective shield that will keep darkwing bats from approaching. I will ask you later to collect objects that are required to complete the magic, so be prepared.<br>
 (Quest for Orc characters level 11 and above.)
 </body></html>

+ 5 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00275_DarkWingedSpies/30567-02.htm

@@ -0,0 +1,5 @@
+<html><body>Neruga Chief Tantus:<br>
+The identity of the one stirring up goblins and werewolves, and controlling Rakeclaw Imps has been unmasked. He is called <font color="LEVEL">Varangka</font>, a disgraced mage banished from the Kingdom a few years ago. He decided to seek revenge upon us to wipe away his shame and humiliation by conspiring with the evil spirits and gaining the power of the darkness. Somewhere on the Immortal Plateau, he is plotting to destroy the Kingdom of the Orcs.<br>
+Many expeditions have been dispatched to kill him, but every time, Varangka already knew of the attack and had escaped. Now we know that he had servants in the air that acted as his eyes and ears. The <font color="LEVEL">darkwing bats</font> are being controlled by Varangka, who uses them to monitor our movements. The seers say they need the <font color="LEVEL">fangs of the bats</font> to complete the protection system that will keep the darkwing bats from approaching.<br>
+<a action="bypass -h Quest Q00275_DarkWingedSpies 30567-03.htm">Say you will collect the fangs.</a>
+</body></html>

+ 2 - 2
L2J_DataPack_BETA/dist/game/data/scripts/quests/275_BlackWingedSpies/30567-03.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00275_DarkWingedSpies/30567-03.htm

@@ -1,4 +1,4 @@
 <html><body>Neruga Chief Tantus:<br>
-<font color="LEVEL">Kill the darkwing bats and bring their fangs.</font> Fangs should not be broken or scratched! Bring only the intact ones; a total of<font color="LEVEL"> seventy</font> fangs are required.<br>
-As long as the darkwing bats act as the eyes and ears of Varangka, he can see every move we make. We should make him go blind by sending an expedition to defeat him. You must be careful when hunting darkwing bats. Varangka's trackers may attack you. Make sure you are always on your guard. Good luck!
+<font color="LEVEL">Kill the darkwing bats and bring their fangs.</font> Fangs should not be broken or scratched! Bring only the intact ones; a total of <font color="LEVEL">seventy</font> fangs are required.<br>
+As long as the darkwing bats act as the eyes and ears of Varangka, he can see every move we make. We should make him go blind by sending an expedition to defeat him. You must be careful when hunting darkwing bats. Varangka's Trackers may attack you. Make sure you are always on your guard. Good luck!
 </body></html>

+ 0 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/275_BlackWingedSpies/30567-04.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00275_DarkWingedSpies/30567-04.html


+ 1 - 1
L2J_DataPack_BETA/dist/game/data/scripts/quests/275_BlackWingedSpies/30567-05.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00275_DarkWingedSpies/30567-05.html

@@ -1,4 +1,4 @@
 <html><body>Neruga Chief Tantus:<br>
-Well done! With this, we can cast a shield around the king's hall and surrounding buildings for the time being, to prevent the secret agents of Varangka from peeking in. Before we can dispatch an expedition team to deal with Varangka, they must first receive the protection of the shield. We need more bat fangs in the future.<br>
+Well done! With this, we can cast a shield around the king's hall and surrounding buildings for the time being, to prevent the secret agents of Varangka from peeking in. Before we can dispatch an expedition team to deal with Varangka, they must first receive the protection of the shield. We need more Bat Fangs in the future.<br>
 For now, receive this money, help yourself to our excellent food and drink, and have a good rest. Come back when you are ready to fight once more for our race.
 </body></html>

+ 175 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00275_DarkWingedSpies/Q00275_DarkWingedSpies.java

@@ -0,0 +1,175 @@
+/*
+ * Copyright (C) 2004-2013 L2J DataPack
+ * 
+ * This file is part of L2J DataPack.
+ * 
+ * L2J DataPack is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * L2J DataPack is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package quests.Q00275_DarkWingedSpies;
+
+import com.l2jserver.gameserver.ai.CtrlIntention;
+import com.l2jserver.gameserver.model.actor.L2Attackable;
+import com.l2jserver.gameserver.model.actor.L2Character;
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.base.Race;
+import com.l2jserver.gameserver.model.quest.Quest;
+import com.l2jserver.gameserver.model.quest.QuestState;
+import com.l2jserver.gameserver.model.quest.State;
+import com.l2jserver.gameserver.util.Util;
+
+/**
+ * Dark Winged Spies (275)
+ * @author xban1x
+ */
+public final class Q00275_DarkWingedSpies extends Quest
+{
+	// Npc
+	private static final int NERUGA_CHIEF_TANTUS = 30567;
+	// Items
+	private static final int DARKWING_BAT_FANG = 1478;
+	private static final int VARANGKAS_PARASITE = 1479;
+	// Monsters
+	private static final int DARKWING_BAT = 20316;
+	private static final int VARANGKAS_TRACKER = 27043;
+	// Misc
+	private static final int MIN_LVL = 11;
+	private static final int FANG_PRICE = 60;
+	private static final int MAX_BAT_FANG_COUNT = 70;
+	
+	private Q00275_DarkWingedSpies()
+	{
+		super(275, Q00275_DarkWingedSpies.class.getSimpleName(), "Dark Winged Spies");
+		addStartNpc(NERUGA_CHIEF_TANTUS);
+		addTalkId(NERUGA_CHIEF_TANTUS);
+		addKillId(DARKWING_BAT, VARANGKAS_TRACKER);
+		addSeeCreatureId(VARANGKAS_TRACKER);
+		registerQuestItems(DARKWING_BAT_FANG, VARANGKAS_PARASITE);
+	}
+	
+	@Override
+	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+	{
+		final QuestState st = player.getQuestState(getName());
+		if ((st != null) && event.equals("30567-03.htm"))
+		{
+			st.startQuest();
+			return event;
+		}
+		return null;
+	}
+	
+	@Override
+	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
+	{
+		final QuestState st = killer.getQuestState(getName());
+		
+		if ((st != null) && st.isCond(1) && Util.checkIfInRange(1500, npc, killer, true))
+		{
+			final long count = st.getQuestItemsCount(DARKWING_BAT_FANG);
+			
+			switch (npc.getNpcId())
+			{
+				case DARKWING_BAT:
+				{
+					if (st.giveItemRandomly(DARKWING_BAT_FANG, 1, MAX_BAT_FANG_COUNT, 1, true))
+					{
+						st.setCond(2);
+					}
+					else if ((count > 10) && (count < 66) && (getRandom(100) < 10))
+					{
+						st.addSpawn(VARANGKAS_TRACKER);
+						st.giveItems(VARANGKAS_PARASITE, 1);
+					}
+					break;
+				}
+				case VARANGKAS_TRACKER:
+				{
+					if ((count < 66) && st.hasQuestItems(VARANGKAS_PARASITE))
+					{
+						if (st.giveItemRandomly(DARKWING_BAT_FANG, 5, MAX_BAT_FANG_COUNT, 1, true))
+						{
+							st.setCond(2);
+						}
+						st.takeItems(VARANGKAS_PARASITE, -1);
+					}
+					break;
+				}
+			}
+		}
+		
+		return super.onKill(npc, killer, isSummon);
+	}
+	
+	@Override
+	public String onSeeCreature(L2Npc npc, L2Character creature, boolean isSummon)
+	{
+		if (creature.isPlayer())
+		{
+			npc.setRunning();
+			((L2Attackable) npc).addDamageHate(creature, 0, 1);
+			npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, creature);
+		}
+		return super.onSeeCreature(npc, creature, isSummon);
+	}
+	
+	@Override
+	public String onTalk(L2Npc npc, L2PcInstance talker)
+	{
+		final QuestState st = talker.getQuestState(getName());
+		String htmltext = getNoQuestMsg(talker);
+		if (st == null)
+		{
+			return htmltext;
+		}
+		
+		switch (st.getState())
+		{
+			case State.CREATED:
+			{
+				htmltext = (talker.getRace() == Race.Orc) ? (talker.getLevel() >= MIN_LVL) ? "30567-02.htm" : "30567-01.htm" : "30567-00.htm";
+				break;
+			}
+			case State.STARTED:
+			{
+				switch (st.getCond())
+				{
+					case 1:
+					{
+						htmltext = "30567-05.html";
+						break;
+					}
+					case 2:
+					{
+						final long count = st.getQuestItemsCount(DARKWING_BAT_FANG);
+						if (count >= MAX_BAT_FANG_COUNT)
+						{
+							st.giveAdena(count * FANG_PRICE, true);
+							st.exitQuest(true, true);
+							htmltext = "30567-05.html";
+						}
+						break;
+					}
+				}
+				break;
+			}
+		}
+		return htmltext;
+	}
+	
+	public static void main(String[] args)
+	{
+		new Q00275_DarkWingedSpies();
+	}
+}

+ 4 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00276_TotemOfTheHestui/30571-00.htm

@@ -0,0 +1,4 @@
+<html><body>Seer Tanapi:<br>
+It is difficult for a foreign race such as yourself to understand the teachings of the flame that Pa'agrio gives us Orcs. One that cannot realize the truth within flame can be of no assistance to me!<br>
+(Quest for Orc characters.)
+</body></html>

+ 3 - 3
L2J_DataPack_BETA/dist/game/data/scripts/quests/276_HestuiTotem/30571-01.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00276_TotemOfTheHestui/30571-01.htm

@@ -1,6 +1,6 @@
 <html><body>Seer Tanapi:<br>
-Young Orc, have you seen an animal called the<font color="LEVEL"> Kasha Bear</font>? It is a poor animal polluted by<font color="LEVEL"> Kasha</font>, the evil spirit of death and decomposition. Animals polluted by evil spirits die slowly because of the curse. However, that is not the only problem. The curse is terrible because it can be spread to other animals.<br>
-The gray bears are the greatest guardian totems of the Hestui tribe. Our tribe has been consecrating the gray bears since ancient times. However, as gray bears recently became contaminated by the evil spirit Kasha, the status of our tribe has been trampled to the ground, and not one day passes when we can sleep in peace.<br>
-We are working on purifying Kasha Bears, but I don't think you can take charge of this task yet.<br>
+Young Orc, have you seen an animal called the <font color="LEVEL">kasha bear</font>? It is a poor animal polluted by <font color="LEVEL">kasha</font>, the evil spirit of death and decomposition. Animals polluted by evil spirits die slowly because of the curse. However, that is not the only problem. The curse is terrible because it can be spread to other animals.<br>
+The gray bears are the greatest guardian totems of the Hestui tribe. Our tribe has been consecrating the gray bears since ancient times. However, as gray bears recently became contaminated by the evil spirit kasha, the status of our tribe has been trampled to the ground, and not one day passes when we can sleep in peace.<br>
+We are working on purifying kasha bears, but I don't think you can take charge of this task yet.<br>
 (Quest for Orc characters level 15 and above.)
 </body></html>

+ 4 - 4
L2J_DataPack_BETA/dist/game/data/scripts/quests/276_HestuiTotem/30571-02.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00276_TotemOfTheHestui/30571-02.htm

@@ -1,6 +1,6 @@
 <html><body>Seer Tanapi:<br>
-Young Orc, have you seen an animal called the<font color="LEVEL"> Kasha Bear</font>? It is a poor animal polluted by<font color="LEVEL"> Kasha</font>, the evil spirit of death and decomposition. The animals contaminated by evil spirits die slowly because of the curse. However, that is not the only problem. The curse is terrible because it can be spread to other animals nearby.<br>
-I am the Chief of the Hestui. We Hestuis have consecrated the gray bears and served them since ancient times. However, as gray bears recently became contaminated by the evil spirit Kasha, the status of our tribe has been trampled to the ground, and not one day passes when we can sleep in peace.<br>
-There is only one way to purify the gray bears polluted by the evil spirit Kasha. That is to kill them. It is a difficult quest, but it is also worth undertaking. What do you think?<br>
-<a action="bypass -h Quest 276_HestuiTotem 1">Say you will take the challenge</a>
+Young Orc, have you seen an animal called the <font color="LEVEL">kasha bear</font>? It is a poor animal polluted by <font color="LEVEL">kasha</font>, the evil spirit of death and decomposition. The animals contaminated by evil spirits die slowly because of the curse. However, that is not the only problem. The curse is terrible because it can be spread to other animals nearby.<br>
+I am the Chief of the Hestui. We Hestuis have consecrated the gray bears and served them since ancient times. However, as gray bears recently became contaminated by the evil spirit kasha, the status of our tribe has been trampled to the ground, and not one day passes when we can sleep in peace.<br>
+There is only one way to purify the gray bears polluted by the evil spirit kasha. That is to kill them. It is a difficult quest, but it is also worth undertaking. What do you think?<br>
+<a action="bypass -h Quest Q00276_TotemOfTheHestui 30571-03.htm">Say you will take the challenge</a>
 </body></html>

+ 2 - 2
L2J_DataPack_BETA/dist/game/data/scripts/quests/276_HestuiTotem/30571-03.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00276_TotemOfTheHestui/30571-03.htm

@@ -1,5 +1,5 @@
 <html><body>Seer Tanapi:<br>
-If you kill a Kasha Bear, you must cut open its abdomen and take out the<font color="LEVEL"> Kasha Parasite</font>. The evil spirit Kasha contaminates the gray bears through the parasites.<br>
-But the true enemy to defeat is the<font color="LEVEL"> Kasha totem spirit</font>. They say that the evil kasha spirit takes the form of the gray bear. Based on my studies,<font color="LEVEL"> if there are enough parasites, they will call forth the kasha totem spirit.</font> I don't know how many are needed though.<br>
+If you kill a kasha bear, you must cut open its abdomen and take out the <font color="LEVEL">Kasha Parasite</font>. The evil spirit kasha contaminates the gray bears through the parasites.<br>
+But the true enemy to defeat is the <font color="LEVEL">kasha totem spirit</font>. They say that the evil kasha spirit takes the form of the gray bear. Based on my studies, <font color="LEVEL">if there are enough parasites, they will call forth the kasha totem spirit.</font> I don't know how many are needed though.<br>
 If you kill the kasha totem spirit, the<font color="LEVEL"> crystal of the kasha totem spirit</font> will appear. Bring it to me. It is something I desperately need for my studies. If you bring it to me, I will reward you in the name of the Hestui. Good luck.
 </body></html>

+ 3 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00276_TotemOfTheHestui/30571-04.html

@@ -0,0 +1,3 @@
+<html><body>Seer Tanapi:<br>
+Do not forget. When you kill the kasha bears, their bodies will become purified when the Kasha Parasites come out. If there are more parasites, their energy becomes stronger and the <font color="LEVEL">kasha totem spirit</font> appears. When it appears, defeat it and obtain the crystal of the kasha totem spirit.
+</body></html>

+ 1 - 1
L2J_DataPack_BETA/dist/game/data/scripts/quests/276_HestuiTotem/30571-05.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00276_TotemOfTheHestui/30571-05.html

@@ -1,5 +1,5 @@
 <html><body>Seer Tanapi:<br>
 You finally brought the crystal of the kasha totem spirit! Thank you.<br>
 So I was right when I said the parasites were the key to calling forth the kasha totem spirit. Now I must study this crystal. I will make sure that we Hestuis do not forget your help. Here -- this is my small token of gratitude. Please accept it. It is a totem of our tribe.<br>
-One day, when I discover kasha, the true source of evil, I will trust your courage and ask you another favor. Till then, my young Orc, may the protection of Paagrio be with you always.
+One day, when I discover kasha, the true source of evil, I will trust your courage and ask you another favor. Till then, my young Orc, may the protection of Pa'agrio be with you always.
 </body></html>

+ 182 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00276_TotemOfTheHestui/Q00276_TotemOfTheHestui.java

@@ -0,0 +1,182 @@
+/*
+ * Copyright (C) 2004-2013 L2J DataPack
+ * 
+ * This file is part of L2J DataPack.
+ * 
+ * L2J DataPack is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * L2J DataPack is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package quests.Q00276_TotemOfTheHestui;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import quests.Q00261_CollectorsDream.Q00261_CollectorsDream;
+
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.base.Race;
+import com.l2jserver.gameserver.model.holders.ItemHolder;
+import com.l2jserver.gameserver.model.quest.Quest;
+import com.l2jserver.gameserver.model.quest.QuestState;
+import com.l2jserver.gameserver.model.quest.State;
+import com.l2jserver.gameserver.util.Util;
+
+/**
+ * Totem of the Hestui (276)
+ * @author xban1x
+ */
+public final class Q00276_TotemOfTheHestui extends Quest
+{
+	// Npc
+	private static final int TANAPI = 30571;
+	// Items
+	private static final int KASHA_PARASITE = 1480;
+	private static final int KASHA_CRYSTAL = 1481;
+	// Monsters
+	private static final int KASHA_BEAR = 20479;
+	private static final int KASHA_BEAR_TOTEM = 27044;
+	// Rewards
+	private static final int[] REWARDS = new int[]
+	{
+		29,
+		1500,
+	};
+	// Misc
+	private static final List<ItemHolder> SPAWN_CHANCES = new ArrayList<>();
+	private static final int MIN_LVL = 15;
+	
+	static
+	{
+		SPAWN_CHANCES.add(new ItemHolder(79, 100));
+		SPAWN_CHANCES.add(new ItemHolder(69, 20));
+		SPAWN_CHANCES.add(new ItemHolder(59, 15));
+		SPAWN_CHANCES.add(new ItemHolder(49, 10));
+		SPAWN_CHANCES.add(new ItemHolder(39, 2));
+	}
+	
+	private Q00276_TotemOfTheHestui()
+	{
+		super(276, Q00276_TotemOfTheHestui.class.getSimpleName(), "Totem of the Hestui");
+		addStartNpc(TANAPI);
+		addTalkId(TANAPI);
+		addKillId(KASHA_BEAR, KASHA_BEAR_TOTEM);
+		registerQuestItems(KASHA_PARASITE, KASHA_CRYSTAL);
+	}
+	
+	@Override
+	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+	{
+		final QuestState st = player.getQuestState(getName());
+		if ((st != null) && event.equals("30571-03.htm"))
+		{
+			st.startQuest();
+			return event;
+		}
+		return null;
+	}
+	
+	@Override
+	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
+	{
+		final QuestState st = killer.getQuestState(getName());
+		if ((st != null) && st.isCond(1) && Util.checkIfInRange(1500, killer, npc, true))
+		{
+			switch (npc.getNpcId())
+			{
+				case KASHA_BEAR:
+				{
+					final long chance1 = st.getQuestItemsCount(KASHA_PARASITE);
+					final int chance2 = getRandom(100);
+					boolean chance3 = true;
+					for (ItemHolder spawnChance : SPAWN_CHANCES)
+					{
+						if ((chance1 >= spawnChance.getId()) && (chance2 <= spawnChance.getCount()))
+						{
+							st.addSpawn(KASHA_BEAR_TOTEM);
+							st.takeItems(KASHA_PARASITE, -1);
+							chance3 = false;
+							break;
+						}
+					}
+					if (chance3)
+					{
+						st.giveItemRandomly(KASHA_PARASITE, 1, 0, 1, true);
+					}
+					break;
+				}
+				case KASHA_BEAR_TOTEM:
+				{
+					if (st.giveItemRandomly(KASHA_CRYSTAL, 1, 1, 1, true))
+					{
+						st.setCond(2);
+					}
+					break;
+				}
+			}
+		}
+		return super.onKill(npc, killer, isSummon);
+	}
+	
+	@Override
+	public String onTalk(L2Npc npc, L2PcInstance player)
+	{
+		final QuestState st = player.getQuestState(getName());
+		String htmltext = getNoQuestMsg(player);
+		if (st == null)
+		{
+			return htmltext;
+		}
+		
+		switch (st.getState())
+		{
+			case State.CREATED:
+			{
+				htmltext = (player.getRace() == Race.Orc) ? (player.getLevel() >= MIN_LVL) ? "30571-02.htm" : "30571-01.htm" : "30571-00.htm";
+				break;
+			}
+			case State.STARTED:
+			{
+				switch (st.getCond())
+				{
+					case 1:
+					{
+						htmltext = "30571-04.html";
+						break;
+					}
+					case 2:
+					{
+						if (st.hasQuestItems(KASHA_CRYSTAL))
+						{
+							Q00261_CollectorsDream.giveNewbieReward(player);
+							for (int reward : REWARDS)
+							{
+								st.rewardItems(reward, 1);
+							}
+							st.exitQuest(true, true);
+							htmltext = "30571-05.html";
+						}
+						break;
+					}
+				}
+				break;
+			}
+		}
+		return htmltext;
+	}
+	
+	public static void main(String[] args)
+	{
+		new Q00276_TotemOfTheHestui();
+	}
+}

+ 3 - 3
L2J_DataPack_BETA/dist/game/data/scripts/quests/280_TheFoodChain/32175-01.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-01.htm

@@ -1,6 +1,6 @@
 <html><body>Marksman Bixon:<br>
-For some reason, we have recently noticed an increase in numbers of Grey Keltir and black wolves near the village entrance...<br>
-By themselves, they are hardly a threat, but we are concerned that more dangerous predators will be drawn to the area as well. That is why we must hunt the Grey Keltir and black wolves now. Unfortunately, my time is taken up with other important tasks...<br>
+For some reason, we have recently noticed an increase in numbers of grey keltir and black wolves near the village entrance...<br>
+By themselves, they are hardly a threat, but we are concerned that more dangerous predators will be drawn to the area as well. That is why we must hunt the grey keltir and black wolves now. Unfortunately, my time is taken up with other important tasks...<br>
 I hesitate to ask, but would you be willing to help me?<br>
-<a action="bypass -h Quest 280_TheFoodChain 32175-03.htm">Agree to help.</a>
+<a action="bypass -h Quest Q00280_TheFoodChain 32175-03.htm">Agree to help.</a>
 </body></html>

+ 2 - 2
L2J_DataPack_BETA/dist/game/data/scripts/quests/280_TheFoodChain/32175-02.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-02.htm

@@ -1,7 +1,7 @@
 <html><body>Marksman Bixon:<br>
 I admire your willingness to help but...<br>
-Well, frankly your skills are not yet developed sufficiently to safely hunt the Keltir or the wolves.<br>
+Well, frankly your skills are not yet developed sufficiently to safely hunt the keltir or the wolves.<br>
 I have no wish to send you out only to fail.<br>
-Perhaps you can come back after you have acquired a little more experience<br>
+Perhaps you can come back after you have acquired a little more experience.<br>
 (This quest may only be undertaken by characters level 3 or higher.)
 </body></html>

+ 1 - 1
L2J_DataPack_BETA/dist/game/data/scripts/quests/280_TheFoodChain/32175-03.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-03.htm

@@ -1,4 +1,4 @@
 <html><body>Marksman Bixon:<br>
 My thanks for your help! Go near the village entrance and hunt <font color="LEVEL">Young Grey Keltir, Grey Keltir and the Dominant Grey Keltir</font> and bring me the <font color="LEVEL">Grey Keltir's teeth</font>... Also, hunt the <font color="LEVEL">Black Wolves and the Dominant Black Wolf</font>, and bring me <font color="LEVEL">the Teeth of the Black Wolves</font> as well...<br>
-Once you bring back the teeth, I will pay you Adenas based on the number of teeth. You can also exchange <font color="LEVEL">25</font> teeth for a useful item.
+Once you bring back the teeth, I will pay you Adena based on the number of teeth. You can also exchange <font color="LEVEL">25</font> teeth for a useful item.
 </body></html>

+ 3 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-04.html

@@ -0,0 +1,3 @@
+<html><body>Marksman Bixon:<br>
+Go to the village entrance and hunt <font color="LEVEL">Young Grey Keltir, Grey Keltir and the Dominant Grey Keltir</font> and bring me <font color="LEVEL">the Grey Keltir's teeth.</font> <font color="LEVEL">Also hunt the Black Wolf and the Dominant Black Wolf</font> and bring back <font color="LEVEL">the teeth of the Black Wolf</font> as well.
+</body></html>

+ 5 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-05.html

@@ -0,0 +1,5 @@
+<html><body>Marksman Bixon:<br>
+Ah, you've returned... so, how was your hunting? Productive, I hope!<br>
+<a action="bypass -h Quest Q00280_TheFoodChain 32175-06.html">Exchange teeth for Adena.</a><br>
+<a action="bypass -h Quest Q00280_TheFoodChain 32175-11.html">Exchange 25 teeth for an item.</a>
+</body></html>

+ 6 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-06.html

@@ -0,0 +1,6 @@
+<html><body>Marksman Bixon:<br>
+Thank you for helping my cause... Here, take this. It's not much, but it's what I promised you.<br>
+Would you care to continue helping me?<br>
+<a action="bypass -h Quest Q00280_TheFoodChain 32175-08.html">Say that you will continue.</a><br>
+<a action="bypass -h Quest Q00280_TheFoodChain 32175-09.html">Say that you wish to quit.</a>
+</body></html>

+ 4 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-07.html

@@ -0,0 +1,4 @@
+<html><body>Marksman Bixon:<br>
+Uh, where are the teeth?<br>
+Quickly now, go to the village entrance and hunt <font color="LEVEL">Young Grey Keltir, Grey Keltir and the Dominant Grey Keltir</font> and bring me <font color="LEVEL">the Grey Keltir's teeth.</font> <font color="LEVEL">Also hunt the Black Wolf and the Dominant Black Wolf</font> and bring back <font color="LEVEL">the teeth of the Black Wolf</font> as well.
+</body></html>

+ 4 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-08.html

@@ -0,0 +1,4 @@
+<html><body>Marksman Bixon:<br>
+Thank you for your continued help...<br>
+Go to the village entrance and hunt <font color="LEVEL">Young Grey Keltir, Grey Keltir and the Dominant Grey Keltir</font> and bring me <font color="LEVEL">the Grey Keltir's teeth.</font> <font color="LEVEL">Also hunt the Black Wolf and the Dominant Black Wolf</font> and bring back <font color="LEVEL">the teeth of the Black Wolf</font> as well.
+</body></html>

+ 0 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/280_TheFoodChain/32175-08.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-09.html


+ 0 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/280_TheFoodChain/32175-09.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-10.html


+ 6 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/32175-11.html

@@ -0,0 +1,6 @@
+<html><body>Marksman Bixon:<br>
+Thank you for helping my cause... Here, take this. It's not much, but it's what I promised you.<br>
+Would you care to continue helping me?<br>
+<a action="bypass -h Quest Q00280_TheFoodChain 32175-08.html">Say that you will continue.</a><br>
+<a action="bypass -h Quest Q00280_TheFoodChain 32175-09.html">Say that you wish to quit.</a>
+</body></html>

+ 210 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00280_TheFoodChain/Q00280_TheFoodChain.java

@@ -0,0 +1,210 @@
+/*
+ * Copyright (C) 2004-2013 L2J DataPack
+ * 
+ * This file is part of L2J DataPack.
+ * 
+ * L2J DataPack is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ * 
+ * L2J DataPack is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ * 
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package quests.Q00280_TheFoodChain;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.holders.ItemHolder;
+import com.l2jserver.gameserver.model.quest.Quest;
+import com.l2jserver.gameserver.model.quest.QuestState;
+import com.l2jserver.gameserver.model.quest.State;
+import com.l2jserver.gameserver.util.Util;
+
+/**
+ * The Food Chain (280)
+ * @author xban1x
+ */
+public final class Q00280_TheFoodChain extends Quest
+{
+	// Npc
+	private static final int BIXON = 32175;
+	// Items
+	private static final int GREY_KELTIR_TOOTH = 9809;
+	private static final int BLACK_WOLF_TOOTH = 9810;
+	// Monsters
+	private static final Map<Integer, Integer> MONSTER_ITEM = new HashMap<>();
+	private static final Map<Integer, List<ItemHolder>> MONSTER_CHANCE = new HashMap<>();
+	static
+	{
+		MONSTER_ITEM.put(22229, GREY_KELTIR_TOOTH);
+		MONSTER_ITEM.put(22230, GREY_KELTIR_TOOTH);
+		MONSTER_ITEM.put(22231, GREY_KELTIR_TOOTH);
+		MONSTER_ITEM.put(22232, BLACK_WOLF_TOOTH);
+		MONSTER_ITEM.put(22233, BLACK_WOLF_TOOTH);
+		MONSTER_CHANCE.put(22229, Arrays.asList(new ItemHolder(1000, 1)));
+		MONSTER_CHANCE.put(22230, Arrays.asList(new ItemHolder(500, 1), new ItemHolder(1000, 2)));
+		MONSTER_CHANCE.put(22231, Arrays.asList(new ItemHolder(1000, 2)));
+		MONSTER_CHANCE.put(22232, Arrays.asList(new ItemHolder(1000, 3)));
+		MONSTER_CHANCE.put(22233, Arrays.asList(new ItemHolder(500, 3), new ItemHolder(1000, 4)));
+	}
+	// Rewards
+	private static final int[] REWARDS = new int[]
+	{
+		28,
+		35,
+		41,
+		48,
+		116,
+	};
+	// Misc
+	private static final int MIN_LVL = 3;
+	private static final int TEETH_COUNT = 25;
+	
+	private Q00280_TheFoodChain()
+	{
+		super(280, Q00280_TheFoodChain.class.getSimpleName(), "The Food Chain");
+		addStartNpc(BIXON);
+		addTalkId(BIXON);
+		addKillId(MONSTER_ITEM.keySet());
+		registerQuestItems(GREY_KELTIR_TOOTH, BLACK_WOLF_TOOTH);
+	}
+	
+	@Override
+	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+	{
+		final QuestState st = player.getQuestState(getName());
+		String htmltext = null;
+		if (st == null)
+		{
+			return htmltext;
+		}
+		
+		switch (event)
+		{
+			case "32175-03.htm":
+			{
+				st.startQuest();
+				break;
+			}
+			case "32175-06.html":
+			{
+				if (hasAtLeastOneQuestItem(player, getRegisteredItemIds()))
+				{
+					final long greyTeeth = st.getQuestItemsCount(GREY_KELTIR_TOOTH);
+					final long blackTeeth = st.getQuestItemsCount(BLACK_WOLF_TOOTH);
+					st.giveAdena(2 * (greyTeeth + blackTeeth), true);
+					takeItems(player, -1, GREY_KELTIR_TOOTH, BLACK_WOLF_TOOTH);
+					htmltext = event;
+				}
+				else
+				{
+					htmltext = "32175-07.html";
+				}
+			}
+			case "32175-08.html":
+			{
+				htmltext = event;
+				break;
+			}
+			case "32175-09.html":
+			{
+				st.exitQuest(true, true);
+				htmltext = event;
+				break;
+			}
+			case "32175-11.html":
+			{
+				final long greyTeeth = st.getQuestItemsCount(GREY_KELTIR_TOOTH);
+				final long blackTeeth = st.getQuestItemsCount(BLACK_WOLF_TOOTH);
+				if ((greyTeeth + blackTeeth) >= TEETH_COUNT)
+				{
+					if (greyTeeth >= TEETH_COUNT)
+					{
+						st.takeItems(GREY_KELTIR_TOOTH, TEETH_COUNT);
+					}
+					else
+					{
+						st.takeItems(GREY_KELTIR_TOOTH, greyTeeth);
+						st.takeItems(BLACK_WOLF_TOOTH, TEETH_COUNT - greyTeeth);
+					}
+					st.rewardItems(REWARDS[getRandom(5)], 1);
+					htmltext = event;
+				}
+				else
+				{
+					htmltext = "32175-10.html";
+				}
+				break;
+			}
+		}
+		return htmltext;
+	}
+	
+	@Override
+	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
+	{
+		final QuestState st = killer.getQuestState(getName());
+		if ((st != null) && Util.checkIfInRange(1500, npc, killer, true))
+		{
+			final int chance = getRandom(1000);
+			for (ItemHolder dropChance : MONSTER_CHANCE.get(npc.getNpcId()))
+			{
+				if (chance < dropChance.getId())
+				{
+					st.giveItemRandomly(MONSTER_ITEM.get(npc.getNpcId()), dropChance.getCount(), 0, 1, true);
+					break;
+				}
+			}
+		}
+		return super.onKill(npc, killer, isSummon);
+	}
+	
+	@Override
+	public String onTalk(L2Npc npc, L2PcInstance talker)
+	{
+		final QuestState st = talker.getQuestState(getName());
+		String htmltext = getNoQuestMsg(talker);
+		if (st == null)
+		{
+			return htmltext;
+		}
+		
+		switch (st.getState())
+		{
+			case State.CREATED:
+			{
+				htmltext = (talker.getLevel() >= MIN_LVL) ? "32175-01.htm" : "32175-02.htm";
+				break;
+			}
+			case State.STARTED:
+			{
+				if (hasAtLeastOneQuestItem(talker, getRegisteredItemIds()))
+				{
+					htmltext = "32175-05.html";
+				}
+				else
+				{
+					htmltext = "32175-04.html";
+				}
+				break;
+			}
+		}
+		return htmltext;
+	}
+	
+	public static void main(String[] args)
+	{
+		new Q00280_TheFoodChain();
+	}
+}

+ 5 - 0
L2J_DataPack_BETA/dist/sql/game/updates/20130804update.sql

@@ -0,0 +1,5 @@
+UPDATE character_quests SET name='Q00261_CollectorsDream' WHERE name='261_DreamOfMoneylender1';
+UPDATE character_quests SET name='Q00264_KeenClaws' WHERE name='264_KeenClaws';
+UPDATE character_quests SET name='Q00275_DarkWingedSpies' WHERE name='275_BlackWingedSpies';
+UPDATE character_quests SET name='Q00276_TotemOfTheHestui' WHERE name='276_HestuiTotem';
+UPDATE character_quests SET name='Q00280_TheFoodChain' WHERE name='280_TheFoodChain';