浏览代码

BETA: Quests in Java:
* Newbie guide update for:
* Sword of Solidarity (101)
* Spirit of Mirrors (104)
* Patch by: janiko
* Reviewed by: Zoey76
* Skimirish with Orcs (105)
* Patch by: janiko
* Reviewed by: xban1x, jurchiks, Zoey76
* Tested by: Zoey76
* Collect Arrowheads (303)
* Patch by: ivantotov
* Reviewed by: xban1x, Zoey76, jurchiks, lion
* Tested by: ivantotov, Zoey76
* Crystal Of Fireice (306)
* Patch by: ivantotov
* Reviewed by: xban1x, jurchiks, BiggBoss, UnAfraid, Zoey76
* Tested by: ivantotov, Zoey76
* Collect Spores (313)
* Patch by: ivantotov
* Reviewed by: jurchiks, Zoey76
* Tested by: ivantotov, Zoey76

Zoey76 11 年之前
父节点
当前提交
ae5b26fe84
共有 52 个文件被更改,包括 789 次插入581 次删除
  1. 4 4
      L2J_DataPack_BETA/dist/game/data/scripts.cfg
  2. 0 5
      L2J_DataPack_BETA/dist/game/data/scripts/quests/105_SkirmishWithOrcs/30218-05.htm
  3. 0 229
      L2J_DataPack_BETA/dist/game/data/scripts/quests/105_SkirmishWithOrcs/__init__.py
  4. 0 4
      L2J_DataPack_BETA/dist/game/data/scripts/quests/303_CollectArrowheads/30029-04.htm
  5. 0 4
      L2J_DataPack_BETA/dist/game/data/scripts/quests/303_CollectArrowheads/30029-05.htm
  6. 0 3
      L2J_DataPack_BETA/dist/game/data/scripts/quests/303_CollectArrowheads/30029-06.htm
  7. 0 76
      L2J_DataPack_BETA/dist/game/data/scripts/quests/303_CollectArrowheads/__init__.py
  8. 0 5
      L2J_DataPack_BETA/dist/game/data/scripts/quests/306_CrystalOfFireice/30004-03.htm
  9. 0 6
      L2J_DataPack_BETA/dist/game/data/scripts/quests/306_CrystalOfFireice/30004-04.htm
  10. 0 5
      L2J_DataPack_BETA/dist/game/data/scripts/quests/306_CrystalOfFireice/30004-05.htm
  11. 0 92
      L2J_DataPack_BETA/dist/game/data/scripts/quests/306_CrystalOfFireice/__init__.py
  12. 0 5
      L2J_DataPack_BETA/dist/game/data/scripts/quests/313_CollectSpores/30150-02.htm
  13. 0 5
      L2J_DataPack_BETA/dist/game/data/scripts/quests/313_CollectSpores/30150-03.htm
  14. 0 6
      L2J_DataPack_BETA/dist/game/data/scripts/quests/313_CollectSpores/30150-04.htm
  15. 0 3
      L2J_DataPack_BETA/dist/game/data/scripts/quests/313_CollectSpores/30150-05.htm
  16. 0 3
      L2J_DataPack_BETA/dist/game/data/scripts/quests/313_CollectSpores/30150-06.htm
  17. 0 3
      L2J_DataPack_BETA/dist/game/data/scripts/quests/313_CollectSpores/30150-07.htm
  18. 0 70
      L2J_DataPack_BETA/dist/game/data/scripts/quests/313_CollectSpores/__init__.py
  19. 3 10
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00101_SwordOfSolidarity/Q00101_SwordOfSolidarity.java
  20. 3 19
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00104_SpiritOfMirrors/Q00104_SpiritOfMirrors.java
  21. 2 2
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00105_SkirmishWithOrcs/30218-01.htm
  22. 3 4
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00105_SkirmishWithOrcs/30218-02.htm
  23. 2 2
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00105_SkirmishWithOrcs/30218-03.htm
  24. 1 1
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00105_SkirmishWithOrcs/30218-04.html
  25. 1 1
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00105_SkirmishWithOrcs/30218-05.html
  26. 5 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00105_SkirmishWithOrcs/30218-06.html
  27. 2 2
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00105_SkirmishWithOrcs/30218-07.html
  28. 1 1
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00105_SkirmishWithOrcs/30218-08.html
  29. 3 3
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00105_SkirmishWithOrcs/30218-09.html
  30. 227 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00105_SkirmishWithOrcs/Q00105_SkirmishWithOrcs.java
  31. 1 1
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00303_CollectArrowheads/30029-02.htm
  32. 3 3
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00303_CollectArrowheads/30029-03.htm
  33. 4 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00303_CollectArrowheads/30029-04.htm
  34. 4 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00303_CollectArrowheads/30029-05.html
  35. 3 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00303_CollectArrowheads/30029-06.html
  36. 130 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00303_CollectArrowheads/Q00303_CollectArrowheads.java
  37. 1 1
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00306_CrystalOfFireAndIce/30004-02.htm
  38. 5 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00306_CrystalOfFireAndIce/30004-03.htm
  39. 6 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00306_CrystalOfFireAndIce/30004-04.htm
  40. 5 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00306_CrystalOfFireAndIce/30004-05.html
  41. 3 3
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00306_CrystalOfFireAndIce/30004-07.html
  42. 0 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00306_CrystalOfFireAndIce/30004-08.html
  43. 0 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00306_CrystalOfFireAndIce/30004-09.html
  44. 191 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00306_CrystalOfFireAndIce/Q00306_CrystalOfFireAndIce.java
  45. 5 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00313_CollectSpores/30150-02.htm
  46. 5 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00313_CollectSpores/30150-03.htm
  47. 6 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00313_CollectSpores/30150-04.htm
  48. 3 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00313_CollectSpores/30150-05.htm
  49. 3 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00313_CollectSpores/30150-06.html
  50. 4 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00313_CollectSpores/30150-07.html
  51. 146 0
      L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00313_CollectSpores/Q00313_CollectSpores.java
  52. 4 0
      L2J_DataPack_BETA/dist/sql/game/updates/20130810update.sql

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

@@ -275,7 +275,7 @@ quests/Q00101_SwordOfSolidarity/Q00101_SwordOfSolidarity.java
 quests/Q00102_SeaOfSporesFever/Q00102_SeaOfSporesFever.java
 quests/103_SpiritOfCraftsman/__init__.py
 quests/Q00104_SpiritOfMirrors/Q00104_SpiritOfMirrors.java
-quests/105_SkirmishWithOrcs/__init__.py
+quests/Q00105_SkirmishWithOrcs/Q00105_SkirmishWithOrcs.java
 quests/106_ForgottenTruth/__init__.py
 quests/107_MercilessPunishment/__init__.py
 quests/108_JumbleTumbleDiamondFuss/__init__.py
@@ -441,15 +441,15 @@ quests/Q00297_GatekeepersFavor/Q00297_GatekeepersFavor.java
 quests/298_LizardmensConspiracy/__init__.py
 quests/299_GatherIngredientsForPie/__init__.py
 quests/300_HuntingLetoLizardman/__init__.py
-quests/303_CollectArrowheads/__init__.py
-quests/306_CrystalOfFireice/__init__.py
+quests/Q00303_CollectArrowheads/Q00303_CollectArrowheads.java
+quests/Q00306_CrystalOfFireAndIce/Q00306_CrystalOfFireAndIce.java
 quests/Q00307_ControlDeviceOfTheGiants/Q00307_ControlDeviceOfTheGiants.java
 quests/Q00308_ReedFieldMaintenance/Q00308_ReedFieldMaintenance.java
 quests/Q00309_ForAGoodCause/Q00309_ForAGoodCause.java
 quests/Q00310_OnlyWhatRemains/Q00310_OnlyWhatRemains.java
 quests/311_ExpulsionOfEvilSpirits/__init__.py
 quests/Q00312_TakeAdvantageOfTheCrisis/Q00312_TakeAdvantageOfTheCrisis.java
-quests/313_CollectSpores/__init__.py
+quests/Q00313_CollectSpores/Q00313_CollectSpores.java
 quests/316_DestroyPlaguebringers/__init__.py
 quests/317_CatchTheWind/__init__.py
 quests/Q00319_ScentOfDeath/Q00319_ScentOfDeath.java

+ 0 - 5
L2J_DataPack_BETA/dist/game/data/scripts/quests/105_SkirmishWithOrcs/30218-05.htm

@@ -1,5 +0,0 @@
-<html><body>Sentinel Kendell:<br>
-Young friend, why have you not left yet? We must spare no time in defeating the kaboo orcs that invade our beautiful woods!<br>
-The orders I have given you list which orc leaders you must slay and where their locations are. Slay the targets and bring back<font color="LEVEL"> proof</font> of their deaths. As your opponent is an orc leader, take extra caution.<br>
-Well, go on now. May the blessings of Eva be with you.
-</body></html>

+ 0 - 229
L2J_DataPack_BETA/dist/game/data/scripts/quests/105_SkirmishWithOrcs/__init__.py

@@ -1,229 +0,0 @@
-# Made by Mr. Have fun! Version 0.3 updated by Sh1ning for www.l2jdp.com 
-import sys
-from com.l2jserver import Config
-from com.l2jserver.gameserver.model.quest import State 
-from com.l2jserver.gameserver.model.quest import QuestState 
-from com.l2jserver.gameserver.model.quest import Quest as JQuest 
-from com.l2jserver.gameserver.network.serverpackets      import SocialAction
-
-qn = "105_SkirmishWithOrcs" 
-
-KENDNELLS_ORDER1 = 1836 
-KENDNELLS_ORDER2 = 1837 
-KENDNELLS_ORDER3 = 1838 
-KENDNELLS_ORDER4 = 1839 
-KENDNELLS_ORDER5 = 1840 
-KENDNELLS_ORDER6 = 1841 
-KENDNELLS_ORDER7 = 1842 
-KENDNELLS_ORDER8 = 1843 
-KABOO_CHIEF_TORC1 = 1844 
-KABOO_CHIEF_TORC2 = 1845 
-RED_SUNSET_SWORD = 981 
-RED_SUNSET_STAFF = 754
-
-#Newbie/one time rewards section
-#Any quest should rely on a unique bit, but
-#it could be shared among quest that were mutually
-#exclusive or race restricted.
-#Bit #1 isn't used for backwards compatibility.
-NEWBIE_REWARD = 2
-SPIRITSHOT_NO_GRADE_FOR_BEGINNERS = 5790 
-SPIRITSHOT_NO_GRADE = 2509 
-SOULSHOT_NO_GRADE_FOR_BEGINNERS = 5789
-SOULSHOT_NO_GRADE = 1835
-
-
-
-class Quest (JQuest) : 
-
- def __init__(self,id,name,descr):
-     JQuest.__init__(self,id,name,descr)
-     self.questItemIds = [KENDNELLS_ORDER1, KENDNELLS_ORDER2, KENDNELLS_ORDER3, KENDNELLS_ORDER4, KENDNELLS_ORDER5, KENDNELLS_ORDER6, KENDNELLS_ORDER7, KENDNELLS_ORDER8]
-
- def onAdvEvent (self,event,npc, player) :
-    htmltext = event
-    st = player.getQuestState(qn)
-    if not st : return
-    if event == "1" : 
-      st.set("id","0") 
-      st.set("cond","1") 
-      st.setState(State.STARTED) 
-      st.playSound("ItemSound.quest_accept") 
-      htmltext = "30218-03.htm" 
-      if st.getQuestItemsCount(KENDNELLS_ORDER1)+st.getQuestItemsCount(KENDNELLS_ORDER2)+st.getQuestItemsCount(KENDNELLS_ORDER3)+st.getQuestItemsCount(KENDNELLS_ORDER4) == 0 : 
-        n = self.getRandom(100) 
-        if n < 25 : 
-          st.giveItems(KENDNELLS_ORDER1,1) 
-        elif n < 50 : 
-          st.giveItems(KENDNELLS_ORDER2,1) 
-        elif n < 75 : 
-          st.giveItems(KENDNELLS_ORDER3,1) 
-        else: 
-          st.giveItems(KENDNELLS_ORDER4,1) 
-    return htmltext 
-
-
- def onTalk (self,npc,player): 
-
-   npcId = npc.getId() 
-   htmltext = Quest.getNoQuestMsg(player) 
-   st = player.getQuestState(qn) 
-   if not st : return htmltext 
-    
-   id = st.getState() 
-   if id == State.COMPLETED :
-      htmltext = Quest.getAlreadyCompletedMsg(player)
-   elif npcId == 30218 and id == State.CREATED : 
-      if player.getLevel() >= 10 and player.getRace().ordinal() == 1 : 
-        htmltext = "30218-02.htm" 
-        return htmltext 
-      elif player.getRace().ordinal() != 1 : 
-        htmltext = "30218-00.htm" 
-        st.exitQuest(1) 
-      else: 
-        htmltext = "30218-10.htm" 
-        st.exitQuest(1) 
-   elif npcId == 30218 and st.getInt("cond") : 
-      if st.getQuestItemsCount(KABOO_CHIEF_TORC1) : 
-        htmltext = "30218-06.htm" 
-        if st.getQuestItemsCount(KENDNELLS_ORDER1) : 
-          st.takeItems(KENDNELLS_ORDER1,1) 
-        if st.getQuestItemsCount(KENDNELLS_ORDER2) : 
-          st.takeItems(KENDNELLS_ORDER2,1) 
-        if st.getQuestItemsCount(KENDNELLS_ORDER3) : 
-          st.takeItems(KENDNELLS_ORDER3,1) 
-        if st.getQuestItemsCount(KENDNELLS_ORDER4) : 
-          st.takeItems(KENDNELLS_ORDER4,1) 
-        st.takeItems(KABOO_CHIEF_TORC1,1) 
-        n = self.getRandom(100) 
-        if n < 25 : 
-          st.giveItems(KENDNELLS_ORDER5,1) 
-        elif n < 50 : 
-          st.giveItems(KENDNELLS_ORDER6,1) 
-        elif n < 75 : 
-          st.giveItems(KENDNELLS_ORDER7,1) 
-        else: 
-          st.giveItems(KENDNELLS_ORDER8,1) 
-        st.set("cond","3") 
-      elif st.getQuestItemsCount(KENDNELLS_ORDER1) or st.getQuestItemsCount(KENDNELLS_ORDER2) or st.getQuestItemsCount(KENDNELLS_ORDER3) or st.getQuestItemsCount(KENDNELLS_ORDER4) : 
-        htmltext = "30218-05.htm" 
-      elif st.getQuestItemsCount(KABOO_CHIEF_TORC2) : 
-        if st.getInt("id") != 105 :
-            st.set("id","105") 
-            htmltext = "30218-08.htm" 
-            if st.getQuestItemsCount(KENDNELLS_ORDER5) :
-                st.takeItems(KENDNELLS_ORDER5,1)
-            if st.getQuestItemsCount(KENDNELLS_ORDER6) : 
-                st.takeItems(KENDNELLS_ORDER6,1) 
-            if st.getQuestItemsCount(KENDNELLS_ORDER7) : 
-                st.takeItems(KENDNELLS_ORDER7,1) 
-            if st.getQuestItemsCount(KENDNELLS_ORDER8) : 
-                st.takeItems(KENDNELLS_ORDER8,1) 
-            st.takeItems(KABOO_CHIEF_TORC2,1)
-            newbie = player.getNewbie()
-            mage = player.getClassId().isMage()
-            st.giveItems(57,17599)
-            if mage :
-               st.giveItems(RED_SUNSET_STAFF,1)
-               st.giveItems(SPIRITSHOT_NO_GRADE,500)
-            else : 
-               st.giveItems(RED_SUNSET_SWORD,1)
-               st.giveItems(SOULSHOT_NO_GRADE,1000)
-            if newbie | NEWBIE_REWARD != newbie :
-               player.setNewbie(newbie|NEWBIE_REWARD)
-               if mage :
-                  st.playTutorialVoice("tutorial_voice_027")
-                  st.giveItems(SPIRITSHOT_NO_GRADE_FOR_BEGINNERS,3000)
-               else :
-                  st.playTutorialVoice("tutorial_voice_026")
-                  st.giveItems(SOULSHOT_NO_GRADE_FOR_BEGINNERS,7000)
-               st.playSound("ItemSound.quest_tutorial")
-            st.rewardItems(1060,100)     # Lesser Healing Potions 
-            for item in range(4412,4417) : 
-                st.rewardItems(item,10)   # Echo crystals 
-            st.addExpAndSp(41478,3555)
-            player.sendPacket(SocialAction(player.getObjectId(),3))
-            st.exitQuest(False) 
-            st.playSound("ItemSound.quest_finish") 
-            st.unset("cond") 
-      elif st.getQuestItemsCount(KENDNELLS_ORDER5) or st.getQuestItemsCount(KENDNELLS_ORDER6) or st.getQuestItemsCount(KENDNELLS_ORDER7) or st.getQuestItemsCount(KENDNELLS_ORDER8) : 
-        htmltext = "30218-07.htm" 
-   return htmltext 
-
- def onKill(self,npc,player,isPet): 
-   st = player.getQuestState(qn) 
-   if not st : return 
-   if st.getState() != State.STARTED : return 
-   npcId = npc.getId() 
-   if npcId == 27059 : 
-    st.set("id","0") 
-    if st.getInt("cond") == 1 : 
-     if st.getQuestItemsCount(KENDNELLS_ORDER1) and st.getQuestItemsCount(KABOO_CHIEF_TORC1) == 0 : 
-      st.giveItems(KABOO_CHIEF_TORC1,1) 
-      st.playSound("ItemSound.quest_middle") 
-      st.set("cond","2") 
-   elif npcId == 27060 : 
-    st.set("id","0") 
-    if st.getInt("cond") == 1 : 
-     if st.getQuestItemsCount(KENDNELLS_ORDER2) and st.getQuestItemsCount(KABOO_CHIEF_TORC1) == 0 : 
-      st.giveItems(KABOO_CHIEF_TORC1,1) 
-      st.playSound("ItemSound.quest_middle") 
-      st.set("cond","2") 
-   elif npcId == 27061 : 
-    st.set("id","0") 
-    if st.getInt("cond") == 1 : 
-     if st.getQuestItemsCount(KENDNELLS_ORDER3) and st.getQuestItemsCount(KABOO_CHIEF_TORC1) == 0 : 
-      st.giveItems(KABOO_CHIEF_TORC1,1) 
-      st.playSound("ItemSound.quest_middle") 
-      st.set("cond","2") 
-   elif npcId == 27062 : 
-    st.set("id","0") 
-    if st.getInt("cond") == 1 : 
-     if st.getQuestItemsCount(KENDNELLS_ORDER4) and st.getQuestItemsCount(KABOO_CHIEF_TORC1) == 0 : 
-      st.giveItems(KABOO_CHIEF_TORC1,1) 
-      st.playSound("ItemSound.quest_middle") 
-      st.set("cond","2") 
-   elif npcId == 27064 : 
-    st.set("id","0") 
-    if st.getInt("cond") == 3 : 
-     if st.getQuestItemsCount(KENDNELLS_ORDER5) and st.getQuestItemsCount(KABOO_CHIEF_TORC2) == 0 : 
-      st.giveItems(KABOO_CHIEF_TORC2,1) 
-      st.playSound("ItemSound.quest_middle") 
-      st.set("cond","4") 
-   elif npcId == 27065 : 
-    st.set("id","0") 
-    if st.getInt("cond") == 3 : 
-     if st.getQuestItemsCount(KENDNELLS_ORDER6) and st.getQuestItemsCount(KABOO_CHIEF_TORC2) == 0 : 
-      st.giveItems(KABOO_CHIEF_TORC2,1) 
-      st.playSound("ItemSound.quest_middle") 
-      st.set("cond","4") 
-   elif npcId == 27067 : 
-    st.set("id","0") 
-    if st.getInt("cond") == 3 : 
-     if st.getQuestItemsCount(KENDNELLS_ORDER7) and st.getQuestItemsCount(KABOO_CHIEF_TORC2) == 0 : 
-      st.giveItems(KABOO_CHIEF_TORC2,1) 
-      st.playSound("ItemSound.quest_middle") 
-      st.set("cond","4") 
-   elif npcId == 27068 : 
-    st.set("id","0") 
-    if st.getInt("cond") == 3 : 
-     if st.getQuestItemsCount(KENDNELLS_ORDER8) and st.getQuestItemsCount(KABOO_CHIEF_TORC2) == 0 : 
-      st.giveItems(KABOO_CHIEF_TORC2,1) 
-      st.playSound("ItemSound.quest_middle") 
-      st.set("cond","4") 
-   return 
-
-QUEST       = Quest(105,qn,"Skirmish with the Orcs") 
-
-QUEST.addStartNpc(30218) 
-
-QUEST.addTalkId(30218) 
-
-QUEST.addKillId(27059) 
-QUEST.addKillId(27060) 
-QUEST.addKillId(27061) 
-QUEST.addKillId(27062) 
-QUEST.addKillId(27064) 
-QUEST.addKillId(27065) 
-QUEST.addKillId(27067) 
-QUEST.addKillId(27068) 

+ 0 - 4
L2J_DataPack_BETA/dist/game/data/scripts/quests/303_CollectArrowheads/30029-04.htm

@@ -1,4 +0,0 @@
-<html><body>Master Minia:<br>
-There are many orcs on Talking Island, but the tunath orcs are at the<font color="LEVEL"> Elven Ruins</font>. You will be able to find arrowheads of tunath orc snipers. If you don't know how to find the ruins, ask Guard Kenyos.<br>
-They are not merely for my private purposes, I plan to donate some to Cedric's Training Hall for exhibition, so please bring back ten arrowheads.
-</body></html>

+ 0 - 4
L2J_DataPack_BETA/dist/game/data/scripts/quests/303_CollectArrowheads/30029-05.htm

@@ -1,4 +0,0 @@
-<html><body>Master Minia:<br>
-Please gather ten arrowheads used by the tunath orc snipers and bring them to me. I am not collecting them simply for my private purposes, but plan to donate some to Cedric's Training Hall for exhibition.<br>
-tunath orcs are in the Elven Ruins. If you don't know how to go there, ask Guard Kenyos.
-</body></html>

+ 0 - 3
L2J_DataPack_BETA/dist/game/data/scripts/quests/303_CollectArrowheads/30029-06.htm

@@ -1,3 +0,0 @@
-<html><body>Master Minia:<br>
-Thank you very much. With this, I can now add tunath orc arrowheads to my weapons collection list. I plan to donate about five to Cedric's Training Hall for exhibition purposes. I will compensate you as promised. Please take this as a token of my thanks for your trouble.
-</body></html>

+ 0 - 76
L2J_DataPack_BETA/dist/game/data/scripts/quests/303_CollectArrowheads/__init__.py

@@ -1,76 +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 = "303_CollectArrowheads"
-
-ORCISH_ARROWHEAD = 963
-ADENA = 57
-
-class Quest (JQuest) :
-
- def __init__(self,id,name,descr):
-     JQuest.__init__(self,id,name,descr)
-     self.questItemIds = [ORCISH_ARROWHEAD]
-
- def onAdvEvent (self,event,npc, player) :
-    htmltext = event
-    st = player.getQuestState(qn)
-    if not st : return
-    if event == "30029-04.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.getId()
-   id = st.getState()
-   if id == State.CREATED :
-     st.set("cond","0")
-   if st.getInt("cond")==0 :
-     if player.getLevel() >= 10 :
-        htmltext = "30029-03.htm"
-     else:
-        htmltext = "30029-02.htm"
-        st.exitQuest(1)
-   else :
-     if st.getQuestItemsCount(ORCISH_ARROWHEAD)<10 :
-       htmltext = "30029-05.htm"
-     else :
-       st.giveItems(ADENA,1000)
-       st.takeItems(ORCISH_ARROWHEAD,-1)
-       st.playSound("ItemSound.quest_finish")
-       st.addExpAndSp(2000,0)
-       htmltext = "30029-06.htm"
-       st.exitQuest(1)
-   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(ORCISH_ARROWHEAD)
-   if count<10 and self.getRandom(100)<40 :
-     st.giveItems(ORCISH_ARROWHEAD,1)
-     if count == 9 :
-       st.set("cond","2") 
-       st.playSound("ItemSound.quest_middle")
-     else:
-       st.playSound("ItemSound.quest_itemget")
-   return
-
-QUEST       = Quest(303,qn,"Collect Arrowheads")
-
-QUEST.addStartNpc(30029)
-
-QUEST.addTalkId(30029)
-
-QUEST.addKillId(20361)

+ 0 - 5
L2J_DataPack_BETA/dist/game/data/scripts/quests/306_CrystalOfFireice/30004-03.htm

@@ -1,5 +0,0 @@
-<html><body>Trader Katerina:<br>
-I am working as a trader now, but actually my expertise is collecting and trading jewels. I find rare jewels by asking favors of travelers like you and sell them at Giran or Aden. Recently, I found some very interesting information while leafing through old records at the school of magic. It said that the<font color="LEVEL"> elemental stone of fire and ice</font> used by the Elven Mystics a long time ago is on this very island. The place is the<font color="LEVEL"> Elven Ruins,</font>, which were abandoned a long time ago. Isn't that interesting?<br>
-The Elven Ruins are too dangerous for someone like me, but someone like you will probably have no problem. If you find the jewels I am looking for in the ruins, I will give you a generous reward. What do you think?<br>
-<a action="bypass -h Quest 306_CrystalOfFireice 30004-04.htm">Say you will do it</a>
-</body></html>

+ 0 - 6
L2J_DataPack_BETA/dist/game/data/scripts/quests/306_CrystalOfFireice/30004-04.htm

@@ -1,6 +0,0 @@
-<html><body>Trader Katerina:<br>
-Thank you so much for granting my request. Now please listen carefully to my account.<br>
-The<font color="LEVEL"> Elven Ruins</font> here on Talking Island used to be a place where the Elves taught the Humans magic a long time ago. They say that underground, there used to be a temple where the Elves performed sacrificial rites to the spirit kings of fire and water. When the Elves left the island, they broke the<font color="LEVEL"> elemental stone of fire</font> and<font color="LEVEL"> elemental stone of ice</font>, which were in the underground temple before they left.<br>
-But as the stones were shattered, the magic that was emitted from the shards summoned water spirit undines and flame spirit salamanders. Therefore, underneath the Elven Ruins there are still many salamanders and undines that have<font color="LEVEL"> flame shards</font>, fragments of the elemental stone of fire, and<font color="LEVEL"> ice shards</font>, fragments of the elemental stone of water, in their bodies.<br>
-What you must do is go to the Elven Ruins and bring the fragments of elemental stones that are inside the bodies of the<font color="LEVEL"> salamanders</font> and<font color="LEVEL"> undines</font>. I will compensate you according to the number of jewels that you bring back.
-</body></html>

+ 0 - 5
L2J_DataPack_BETA/dist/game/data/scripts/quests/306_CrystalOfFireice/30004-05.htm

@@ -1,5 +0,0 @@
-<html><body>Trader Katerina:<br>
-You have not brought any fragments of elemental stone. As I already told you, you must go to the<font color="LEVEL"> underground Elven Ruins</font> to find the fragments of elemental stone. Inside the fire spirit<font color="LEVEL"> salamanders</font> and water spirit<font color="LEVEL"> undines</font>, you will be able to find the<font color="LEVEL"> flame shard</font> and<font color="LEVEL"> ice shard</font>, respectively, fragments of the elemental stones of fire and water.<br>
-<a action="bypass -h Quest 306_CrystalOfFireice 30004-09.htm">Say you will bring the jewel</a><br>
-<a action="bypass -h Quest 306_CrystalOfFireice 30004-08.htm">Say you will end the contract</a>
-</body></html>

+ 0 - 92
L2J_DataPack_BETA/dist/game/data/scripts/quests/306_CrystalOfFireice/__init__.py

@@ -1,92 +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 = "306_CrystalOfFireice"
-
-FLAME_SHARD = 1020
-ICE_SHARD = 1021
-ADENA = 57
-
-DROPLIST={
-20109:[30,FLAME_SHARD],
-20110:[30,ICE_SHARD],
-20112:[40,FLAME_SHARD],
-20113:[40,ICE_SHARD],
-20114:[50,FLAME_SHARD],
-20115:[50,ICE_SHARD]
-}
-
-class Quest (JQuest) :
-
- def __init__(self,id,name,descr):
-     JQuest.__init__(self,id,name,descr)
-     self.questItemIds = [FLAME_SHARD, ICE_SHARD]
-
- def onEvent (self,event,st) :
-    htmltext = event
-    if event == "30004-04.htm" :
-      st.set("cond","1")
-      st.setState(State.STARTED)
-      st.playSound("ItemSound.quest_accept")
-    elif event == "30004-08.htm" :
-      st.exitQuest(1)
-      st.playSound("ItemSound.quest_finish")
-    return htmltext
-
- def onTalk (self,npc,player):
-   htmltext = Quest.getNoQuestMsg(player)
-   st = player.getQuestState(qn)
-   if not st : return htmltext
-
-   npcId = npc.getId()
-   id = st.getState()
-   if id == State.CREATED :
-     st.set("cond","0")
-   if st.getInt("cond")==0 :
-     if player.getLevel() >= 17 :
-       htmltext = "30004-03.htm"
-     else:
-       htmltext = "30004-02.htm"
-       st.exitQuest(1)
-   else :
-     flame=st.getQuestItemsCount(FLAME_SHARD)
-     ice=st.getQuestItemsCount(ICE_SHARD)
-     if flame==ice==0 :
-       htmltext = "30004-05.htm"
-     else :
-       if flame+ice > 9 :
-          st.giveItems(ADENA,5000+30*(flame+ice))
-       else :
-          st.giveItems(ADENA,30*(flame+ice))
-       st.takeItems(FLAME_SHARD,-1)
-       st.takeItems(ICE_SHARD,-1)
-       htmltext = "30004-07.htm"
-   return htmltext
-
- def onKill(self,npc,player,isPet):
-   st = player.getQuestState(qn)
-   if not st : return 
-   if st.getState() != State.STARTED : return 
-   
-   npcId = npc.getId()
-   chance,item=DROPLIST[npcId]
-   if self.getRandom(100)<chance :
-     st.giveItems(item,1)
-     st.playSound("ItemSound.quest_itemget")
-   return
-
-QUEST       = Quest(306,qn,"Crystal Of Fireice")
-
-QUEST.addStartNpc(30004)
-
-QUEST.addTalkId(30004)
-
-QUEST.addKillId(20109)
-QUEST.addKillId(20110)
-QUEST.addKillId(20112)
-QUEST.addKillId(20113)
-QUEST.addKillId(20114)
-QUEST.addKillId(20115)

+ 0 - 5
L2J_DataPack_BETA/dist/game/data/scripts/quests/313_CollectSpores/30150-02.htm

@@ -1,5 +0,0 @@
-<html><body>Trader Herbiel:<br>
-A long time ago, there was a beautiful forest beyond the mountains to the east of the Elven Forest. We Elves used to live there. But the land became devastated due to the forbidden magic that was used two thousand years ago during the war between the Humans and the Elves. Now it is called the<font color="LEVEL"> Sea of Spores</font>.<br>
-Today, the problem is that the Sea of Spores is slowly expanding bit by bit. Of course, we are trying to stop its expansion with a magical defense field, but our forest has become gradually contaminated over hundreds of years, from the poisons that seep out of the Sea of Spores. We are all trying our best to solve the problem, but it is not an easy thing to do. There may be a day when I will require your assistance.<br>
-(Quest for characters level 8 and above.)
-</body></html>

+ 0 - 5
L2J_DataPack_BETA/dist/game/data/scripts/quests/313_CollectSpores/30150-03.htm

@@ -1,5 +0,0 @@
-<html><body>Trader Herbiel:<br>
-A long time ago, there was a beautiful forest beyond the mountains to the east of the Elven Forest. We Elves used to live there. But the land became devastated due to the forbidden magic that was used two thousand years ago during the war between the Humans and the Elves. Now it is called the<font color="LEVEL"> Sea of Spores</font>.<br>
-Today, the problem is that the Sea of Spores is slowly expanding bit by bit. Of course, we are trying to stop its expansion with a magical defense field, but our forest has become gradually contaminated over hundreds of years from the poisons that seep out of the Sea of Spores. It is because of this that the spirits of the forest are becoming more aggressive, and creatures like the walking fungus are increasing in number. Recently, we have been conducting studies to find a way of purifying the Sea of Spores of its poisons, and returning it to the beautiful woods it once was.<br>
-<a action="bypass -h Quest 313_CollectSpores 30150-04.htm">Ask about the studies</a>
-</body></html>

+ 0 - 6
L2J_DataPack_BETA/dist/game/data/scripts/quests/313_CollectSpores/30150-04.htm

@@ -1,6 +0,0 @@
-<html><body>Trader Herbiel:<br>
-Currently, our Elven studies are divided into two directions. The famous Spellsinger Adria Lumingshine travels to the Sea of Spores to conduct her studies, while Hierarch Asterios is preoccupied with neutralizing the poisons that enter our forest from the Sea of Spores. I assist the hierarch's research by collecting leaves, roots and spores of various plants and refining them.<br>
-However, the hierarch has recently asked me to help his research by finding some spore pollen that was carried here by the wind from the Sea of Spores. However, these spores are so fine that it is almost impossible to find them. The only method is to extract them from the<font color="LEVEL"> spore fungus</font>, a hybrid of the spores and plants of the forest.<br>
-That is why I need your help. Please find me some<font color="LEVEL"> Spore Sacs</font> from the<font color="LEVEL"> spore fungus</font> of the forest. How about it? Will you take the job?<br>
-<a action="bypass -h Quest 313_CollectSpores 30150-05.htm">Say you will take the job</a>
-</body></html>

+ 0 - 3
L2J_DataPack_BETA/dist/game/data/scripts/quests/313_CollectSpores/30150-05.htm

@@ -1,3 +0,0 @@
-<html><body>Trader Herbiel:<br>
-Spore fungi are found here and there within the Elven Forest. Defeat the fungi and you will be able to obtain the Spore Sacs. However, the Spore Sac may tear when the fungus is killed, and obtaining them may be more difficult than you think. The Hierarch says that<font color="LEVEL"> ten spore sacs</font> are needed for his research. Good luck.
-</body></html>

+ 0 - 3
L2J_DataPack_BETA/dist/game/data/scripts/quests/313_CollectSpores/30150-06.htm

@@ -1,3 +0,0 @@
-<html><body>Trader Herbiel:<br>
-Ten spore sacs are needed for the Hierarch's studies. Please try harder.
-</body></html>

+ 0 - 3
L2J_DataPack_BETA/dist/game/data/scripts/quests/313_CollectSpores/30150-07.htm

@@ -1,3 +0,0 @@
-<html><body>Trader Herbiel:<br>
-Thank you. Now all I have to do is extract the powder from the Spore Sacs. We must take care as the poison may spread.<br>
-Again, thank you. You have performed a great deed for the brothers of the forest. Please accept this. It is not much, but it is a small token of my gratitude.</body></html>

+ 0 - 70
L2J_DataPack_BETA/dist/game/data/scripts/quests/313_CollectSpores/__init__.py

@@ -1,70 +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 = "313_CollectSpores"
-
-FUNGUS_SAC = 1118
-ADENA = 57
-
-class Quest (JQuest) :
-
- def __init__(self,id,name,descr):
-     JQuest.__init__(self,id,name,descr)
-     self.questItemIds = [FUNGUS_SAC]
-
- def onEvent (self,event,st) :
-    htmltext = event
-    if event == "30150-05.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.getId()
-   id = st.getState()
-   cond=st.getInt("cond")
-   if cond == 0 :
-     if player.getLevel() >= 8 :
-       htmltext = "30150-03.htm"
-     else:
-       htmltext = "30150-02.htm"
-       st.exitQuest(1)
-   else :
-     if st.getQuestItemsCount(FUNGUS_SAC)<10 :
-       htmltext = "30150-06.htm"
-     else :
-       st.playSound("ItemSound.quest_finish")
-       st.giveItems(ADENA,3500)
-       st.takeItems(FUNGUS_SAC,-1)
-       htmltext = "30150-07.htm"
-       st.exitQuest(1)
-   return htmltext
-
- def onKill(self,npc,player,isPet):
-   st = player.getQuestState(qn)
-   if not st : return 
-   if st.getState() != State.STARTED : return 
-   
-   if st.getQuestItemsCount(FUNGUS_SAC)<10 and self.getRandom(100) < 50 :
-     st.giveItems(FUNGUS_SAC,1)
-     if st.getQuestItemsCount(FUNGUS_SAC) == 10 :
-       st.playSound("ItemSound.quest_middle")
-     else:
-       st.playSound("ItemSound.quest_itemget")
-   return
-
-QUEST       = Quest(313,qn,"Collect Spores")
-
-QUEST.addStartNpc(30150)
-
-QUEST.addTalkId(30150)
-
-QUEST.addKillId(20509)

+ 3 - 10
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00101_SwordOfSolidarity/Q00101_SwordOfSolidarity.java

@@ -18,15 +18,15 @@
  */
 package quests.Q00101_SwordOfSolidarity;
 
+import quests.Q00281_HeadForTheHills.Q00281_HeadForTheHills;
+
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
-import com.l2jserver.gameserver.model.base.ClassId;
 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.network.NpcStringId;
 
 /**
  * Sword of Solidarity (101)
@@ -51,7 +51,6 @@ public class Q00101_SwordOfSolidarity extends Quest
 		20362, // Tunath Orc Warrior
 	};
 	// Rewards
-	private static final int SOULSHOT_NO_GRADE = 5789;
 	private static final ItemHolder[] REWARDS =
 	{
 		new ItemHolder(738, 1), // Sword of Solidarity
@@ -111,11 +110,7 @@ public class Q00101_SwordOfSolidarity extends Quest
 				{
 					if (st.isCond(5) && st.hasQuestItems(BROKEN_SWORD_HANDLE))
 					{
-						if ((player.getLevel() < 25) && (player.getClassId() == ClassId.fighter))
-						{
-							st.rewardItems(SOULSHOT_NO_GRADE, 7000);
-							st.playTutorialVoice("tutorial_voice_026");
-						}
+						Q00281_HeadForTheHills.giveNewbieReward(player);
 						for (ItemHolder reward : REWARDS)
 						{
 							st.giveItems(reward);
@@ -123,8 +118,6 @@ public class Q00101_SwordOfSolidarity extends Quest
 						st.addExpAndSp(25747, 2171);
 						st.giveAdena(10981, true);
 						st.exitQuest(false, true);
-						// TODO: Newbie Guide
-						showOnScreenMsg(player, NpcStringId.ACQUISITION_OF_RACE_SPECIFIC_WEAPON_COMPLETE_N_GO_FIND_THE_NEWBIE_GUIDE, 2, 5000);
 						htmltext = event;
 					}
 					break;

+ 3 - 19
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00104_SpiritOfMirrors/Q00104_SpiritOfMirrors.java

@@ -21,6 +21,8 @@ package quests.Q00104_SpiritOfMirrors;
 import java.util.HashMap;
 import java.util.Map;
 
+import quests.Q00281_HeadForTheHills.Q00281_HeadForTheHills;
+
 import com.l2jserver.gameserver.model.actor.L2Npc;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.base.Race;
@@ -29,7 +31,6 @@ import com.l2jserver.gameserver.model.itemcontainer.Inventory;
 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.network.NpcStringId;
 
 /**
  * Spirit of Mirrors (104)
@@ -56,9 +57,6 @@ public final class Q00104_SpiritOfMirrors extends Quest
 		MONSTERS.put(27005, SPIRITBOUND_WAND3); // Spirit Of Mirrors
 	}
 	// Rewards
-	private static final int SOULSHOT_NO_GRADE = 1835;
-	private static final int SPIRITSHOT_NO_GRADE = 2509;
-	private static final int SPIRITSHOT = 5790;
 	private static final ItemHolder[] REWARDS =
 	{
 		new ItemHolder(1060, 100), // Lesser Healing Potion
@@ -136,28 +134,14 @@ public final class Q00104_SpiritOfMirrors extends Quest
 						{
 							if (st.isCond(3) && st.hasQuestItems(SPIRITBOUND_WAND1, SPIRITBOUND_WAND2, SPIRITBOUND_WAND3))
 							{
-								if ((player.getLevel() < 25) && player.isMageClass())
-								{
-									st.rewardItems(SPIRITSHOT, 3000);
-									st.playTutorialVoice("tutorial_voice_027");
-								}
+								Q00281_HeadForTheHills.giveNewbieReward(player);
 								for (ItemHolder reward : REWARDS)
 								{
 									st.giveItems(reward);
 								}
-								if (player.isMageClass())
-								{
-									st.giveItems(SPIRITSHOT_NO_GRADE, 500);
-								}
-								else
-								{
-									st.giveItems(SOULSHOT_NO_GRADE, 1000);
-								}
 								st.addExpAndSp(39750, 3407);
 								st.giveAdena(16866, true);
 								st.exitQuest(false, true);
-								// TODO: Newbie Guide
-								showOnScreenMsg(player, NpcStringId.ACQUISITION_OF_RACE_SPECIFIC_WEAPON_COMPLETE_N_GO_FIND_THE_NEWBIE_GUIDE, 2, 5000);
 								htmltext = "30017-06.html";
 							}
 							else

+ 2 - 2
L2J_DataPack_BETA/dist/game/data/scripts/quests/105_SkirmishWithOrcs/30218-00.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00105_SkirmishWithOrcs/30218-01.htm

@@ -1,4 +1,4 @@
 <html><body>Sentinel Kendell:<br>
-Traveller of a foreign race, the Elves are currently engaged in war with the kaboo orc tribe. If you plan on travelling outside the village, take care not to become involved in the battle or you shall be hurt.<br>
-(Quest for Elven characters.)<br>
+Traveller of a foreign race, the Elves are currently engaged in war with the kaboo Orc tribe. If you plan on travelling outside the village, take care not to become involved in the battle or you shall be hurt.<br>
+(Quest for Elven characters.)
 </body></html>

+ 3 - 4
L2J_DataPack_BETA/dist/game/data/scripts/quests/105_SkirmishWithOrcs/30218-10.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00105_SkirmishWithOrcs/30218-02.htm

@@ -1,6 +1,5 @@
 <html><body>Sentinel Kendell:<br>
-Looking at young Elves today, I think that they are like fragile flowers growing under the shade of the Mother Tree. Granted, they learn the use of the bow or arrow from many fine masters, or magic to command the elementals from wise sorcerors, but that is purely academic, and I worry that they may not be able to perform well in actual battle. Thus, I have always advocated that young Elves need to actively go into the battlefield and receive actual training.<br>
-I'm sure you also want to see the results of your training, and also receive acknowledgement of your skills? Soon the orc tribes from the Misty Mountains and our Elven Fighters will be having a skirmish. When the time comes, I will give you the chance to participate in battle.<br>
-(Quest for Elven characters level 10 and above.)<br>
-
+Looking at young Elves today, I think that they are like fragile flowers growing under the shade of the Mother Tree. Granted, they learn the use of The Bow or arrow from many fine masters, or magic to command the elementals from wise sorcerors, but that is purely academic, and I worry that they may not be able to perform well in actual battle. Thus, I have always advocated that young Elves need to actively go into the battlefield and receive actual training.<br>
+I'm sure you also want to see the results of your training, and also receive acknowledgement of your skills? Soon the Orc tribes from the Misty Mountains and our Elven Fighters will be having a skirmish. When the time comes, I will give you the chance to participate in battle.<br>
+(Quest for Elven characters level 10 and above.)
 </body></html>

+ 2 - 2
L2J_DataPack_BETA/dist/game/data/scripts/quests/105_SkirmishWithOrcs/30218-02.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00105_SkirmishWithOrcs/30218-03.htm

@@ -1,5 +1,5 @@
 <html><body>Sentinel Kendell:<br>
-Recently the<font color="LEVEL"> orcs</font> of Fog Mountain have become bold, and have attacked our beautiful woods in large groups. Orcs have invaded our forests before, but never in such large numbers.<br>
+Recently the <font color="LEVEL">orcs</font> of Fog Mountain have become bold, and have attacked our beautiful woods in large groups. Orcs have invaded our forests before, but never in such large numbers.<br>
 We Elven fighters plan to take this opportunity to strike back at those orcs that invade our homes, so that they will never again try to take over the Elven Forest. Will you face the orcs as a member of the guardians?<br>
-<a action="bypass -h Quest 105_SkirmishWithOrcs 1">Say that you will fight the orcs</a>
+<a action="bypass -h Quest Q00105_SkirmishWithOrcs 30218-04.html">Say that you will fight the orcs</a>
 </body></html>

+ 1 - 1
L2J_DataPack_BETA/dist/game/data/scripts/quests/105_SkirmishWithOrcs/30218-03.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00105_SkirmishWithOrcs/30218-04.html

@@ -1,4 +1,4 @@
 <html><body>Sentinel Kendell:<br>
 My young friend, I advise you to take this opportunity to prove your bravery. Now I will tell you exactly what role you must play from this moment on.<br>
-<a action="bypass -h Quest 105_SkirmishWithOrcs 30218-04.htm">Listen to the explanation about the role</a>
+<a action="bypass -h Quest Q00105_SkirmishWithOrcs 30218-05.html">Listen to the explanation about the role</a>
 </body></html>

+ 1 - 1
L2J_DataPack_BETA/dist/game/data/scripts/quests/105_SkirmishWithOrcs/30218-04.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00105_SkirmishWithOrcs/30218-05.html

@@ -1,5 +1,5 @@
 <html><body>Sentinel Kendell:<br>
 As you know, the Elven fighting method is to form many squadrons and weaken the opponent's strength slowly through repeated attacks and retreats, rather than rely on a full scale clash between large armies. Bear this in mind. A retreat is not a shameful thing. If we retreat without overextending the fight, the opportunity for victory will always seek us out.<br>
-Your task is to throw the opponents into turmoil by slaying their leaders. This decree lists which Orc leaders you must slay and where their locations are. The information has been written based on the reports of scouts, and is surely valid. Slay the targets and bring back<font color="LEVEL"> proof</font> of their deaths.<br>
+Your task is to throw the opponents into turmoil by slaying their leaders. This decree lists which Orc leaders you must slay and where their locations are. The information has been written based on the reports of scouts, and is surely valid. Slay the targets and bring back <font color="LEVEL">proof</font> of their deaths.<br>
 Well, go on now. May the blessings of Eva be with you.
 </body></html>

+ 5 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00105_SkirmishWithOrcs/30218-06.html

@@ -0,0 +1,5 @@
+<html><body>Sentinel Kendell:<br>
+Young friend, why have you not left yet? We must spare no time in defeating the kaboo orcs that invade our beautiful woods!<br>
+The orders I have given you list which Orc leaders you must slay and where their locations are. Slay the targets and bring back <font color="LEVEL">proof</font> of their deaths. As your opponent is an Orc leader, take extra caution.<br>
+Well, go on now. May the blessings of Eva be with you.
+</body></html>

+ 2 - 2
L2J_DataPack_BETA/dist/game/data/scripts/quests/105_SkirmishWithOrcs/30218-06.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00105_SkirmishWithOrcs/30218-07.html

@@ -1,4 +1,4 @@
 <html><body>Sentinel Kendell:<br>
-Well done indeed, my young friend. I have received reports that the kaboo orcs, having lost their leader, have scattered. Now it is only a matter of time before we can completely drive the scattered orcs out of our woods. May the souls of our brothers slain by the orcs be comforted through this ...<br>
-But the battle is not over yet. I have received reports that the orc army is amassing near<font color="LEVEL"> Lake Iris</font>, south of the village. Your second task is to defeat one of the leaders of that army. This order contains details about the target you must face. Bear this in mind. An animal becomes violent if cornered. Be extra careful.
+Well done indeed, my young friend. I have received reports that the kaboo orcs, having lost their leader, have scattered. Now it is only a matter of time before we can completely drive the scattered orcs out of our woods. May the souls of our brothers slain by the orcs be comforted through this...<br>
+But the battle is not over yet. I have received reports that the Orc army is amassing near <font color="LEVEL">Lake Iris</font>, south of the village. Your second task is to defeat one of the leaders of that army. This order contains details about the target you must face. Bear this in mind. An animal becomes violent if cornered. Be extra careful.
 </body></html>

+ 1 - 1
L2J_DataPack_BETA/dist/game/data/scripts/quests/105_SkirmishWithOrcs/30218-07.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00105_SkirmishWithOrcs/30218-08.html

@@ -1,4 +1,4 @@
 <html><body>Sentinel Kendell:<br>
-Young friend, have you not left the village yet? The target you must slay is written on the orders I gave you. Slay him and bring back<font color="LEVEL"> proof</font> of his death.<br>
+Young friend, have you not left the village yet? The target you must slay is written on the orders I gave you. Slay him and bring back <font color="LEVEL">proof</font> of his death.<br>
 And take heed. An animal becomes violent if cornered. Be extra careful.
 </body></html>

+ 3 - 3
L2J_DataPack_BETA/dist/game/data/scripts/quests/105_SkirmishWithOrcs/30218-08.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00105_SkirmishWithOrcs/30218-09.html

@@ -1,6 +1,6 @@
 <html><body>Sentinel Kendell:<br>
 By the looks of that amulet, I see that you have delivered Bhato Bloodspear to the eternal rest of the deep lake. I'm sure Shilen has taken his bloody soul.<br>
-My comrade, you have fought well for the brothers of the woods. There is nothing more you need to do now. I have received word that the orc army has retreated back to the Misty Mountains. I'm sure their severe defeat this time will be a lesson to them, and they will not attempt to take over our woods again. There are still orcs lurking in the woods, but they are mere stragglers that have strayed from their army.<br>
-To commemorate your achievement in this battle, I will present you with this. This is a weapon used by our<font color="LEVEL"> Red Sunset Brothers</font> who fought alongside Smallberry during the battle with the Elves. That clan has been disbanded now, but the swords and staffs they used are presented even now to talented youth that fight for the glory of our race.<br>
-My young brother, until the day we meet again, may the brilliance of mithril shine on the woods, lakes, and in your soul.
+My comrade, you have fought well for the brothers of the woods. There is nothing more you need to do now. I have received word that the Orc army has retreated back to the Misty Mountains. I'm sure their severe defeat this time will be a lesson to them, and they will not attempt to take over our woods again. There are still orcs lurking in the woods, but they are mere stragglers that have strayed from their army.<br>
+To commemorate your achievement in this battle, I will present you with this. This is a weapon used by our <font color="LEVEL">Red Sunset Brothers</font> who fought alongside Alberius during the battle with the Elves. That clan has been disbanded now, but the swords and staffs they used are presented even now to talented youth that fight for the glory of our race.<br>
+My young brother, until the day we meet again, may the brilliance of Mithril shine on the woods, lakes, and in your soul.
 </body></html>

+ 227 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00105_SkirmishWithOrcs/Q00105_SkirmishWithOrcs.java

@@ -0,0 +1,227 @@
+/*
+ * 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.Q00105_SkirmishWithOrcs;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import quests.Q00281_HeadForTheHills.Q00281_HeadForTheHills;
+
+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.network.serverpackets.SocialAction;
+import com.l2jserver.gameserver.util.Util;
+
+/**
+ * Skimirish with Orcs (105)
+ * @author janiko
+ */
+public final class Q00105_SkirmishWithOrcs extends Quest
+{
+	// NPC
+	private static final int KENDNELL = 30218;
+	// Items
+	private static final int KENDNELLS_ORDER1 = 1836;
+	private static final int KENDNELLS_ORDER2 = 1837;
+	private static final int KENDNELLS_ORDER3 = 1838;
+	private static final int KENDNELLS_ORDER4 = 1839;
+	private static final int KENDNELLS_ORDER5 = 1840;
+	private static final int KENDNELLS_ORDER6 = 1841;
+	private static final int KENDNELLS_ORDER7 = 1842;
+	private static final int KENDNELLS_ORDER8 = 1843;
+	private static final int KABOO_CHIEF_TORC1 = 1844;
+	private static final int KABOO_CHIEF_TORC2 = 1845;
+	// MONSTER_DROP
+	private static final Map<Integer, Integer> MONSTER_DROP = new HashMap<>();
+	static
+	{
+		MONSTER_DROP.put(27059, KENDNELLS_ORDER1); // Uoph (Kaboo Chief)
+		MONSTER_DROP.put(27060, KENDNELLS_ORDER2); // Kracha (Kaboo Chief)
+		MONSTER_DROP.put(27061, KENDNELLS_ORDER3); // Batoh (Kaboo Chief)
+		MONSTER_DROP.put(27062, KENDNELLS_ORDER4); // Tanukia (Kaboo Chief)
+		MONSTER_DROP.put(27064, KENDNELLS_ORDER5); // Turel (Kaboo Chief)
+		MONSTER_DROP.put(27065, KENDNELLS_ORDER6); // Roko (Kaboo Chief)
+		MONSTER_DROP.put(27067, KENDNELLS_ORDER7); // Kamut (Kaboo Chief)
+		MONSTER_DROP.put(27068, KENDNELLS_ORDER8); // Murtika (Kaboo Chief)
+	}
+	// Orders
+	private static final int[] KENDNELLS_ORDERS =
+	{
+		KENDNELLS_ORDER1,
+		KENDNELLS_ORDER2,
+		KENDNELLS_ORDER3,
+		KENDNELLS_ORDER4,
+		KENDNELLS_ORDER5,
+		KENDNELLS_ORDER6,
+		KENDNELLS_ORDER7,
+		KENDNELLS_ORDER8
+	};
+	// Misc
+	private static final int MIN_LVL = 10;
+	
+	private Q00105_SkirmishWithOrcs(int questId, String name, String descr)
+	{
+		super(questId, name, descr);
+		addStartNpc(KENDNELL);
+		addTalkId(KENDNELL);
+		addKillId(MONSTER_DROP.keySet());
+		registerQuestItems(KENDNELLS_ORDERS);
+	}
+	
+	@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 "30218-04.html":
+			{
+				if (st.isCreated())
+				{
+					st.startQuest();
+					st.giveItems(KENDNELLS_ORDERS[getRandom(0, 3)], 1);
+					htmltext = event;
+				}
+				break;
+			}
+			case "30218-05.html":
+			{
+				htmltext = event;
+				break;
+			}
+		}
+		return htmltext;
+	}
+	
+	@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:
+			{
+				if (talker.getRace() == Race.Elf)
+				{
+					htmltext = (talker.getLevel() >= MIN_LVL) ? "30218-03.htm" : "30218-02.htm";
+				}
+				else
+				{
+					htmltext = "30218-01.htm";
+				}
+				break;
+			}
+			case State.STARTED:
+			{
+				if (hasAtLeastOneQuestItem(talker, KENDNELLS_ORDER1, KENDNELLS_ORDER2, KENDNELLS_ORDER3, KENDNELLS_ORDER4))
+				{
+					htmltext = "30218-06.html";
+				}
+				if (st.isCond(2) && st.hasQuestItems(KABOO_CHIEF_TORC1))
+				{
+					for (int i = 0; i < 4; i++)
+					{
+						st.takeItems(KENDNELLS_ORDERS[i], -1);
+					}
+					st.takeItems(KABOO_CHIEF_TORC1, 1);
+					st.giveItems(KENDNELLS_ORDERS[getRandom(4, 7)], 1);
+					st.setCond(3, true);
+					htmltext = "30218-07.html";
+				}
+				if (hasAtLeastOneQuestItem(talker, KENDNELLS_ORDER5, KENDNELLS_ORDER6, KENDNELLS_ORDER7, KENDNELLS_ORDER8))
+				{
+					htmltext = "30218-08.html";
+				}
+				if (st.isCond(4) && st.hasQuestItems(KABOO_CHIEF_TORC2))
+				{
+					Q00281_HeadForTheHills.giveNewbieReward(talker);
+					talker.sendPacket(new SocialAction(talker.getObjectId(), 3));
+					st.giveAdena(17599, true);
+					st.addExpAndSp(41478, 3555);
+					st.exitQuest(false, true);
+					htmltext = "30218-09.html";
+				}
+				break;
+			}
+			case State.COMPLETED:
+			{
+				htmltext = getAlreadyCompletedMsg(talker);
+				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))
+		{
+			switch (npc.getId())
+			{
+				case 27059:
+				case 27060:
+				case 27061:
+				case 27062:
+				{
+					if (st.isCond(1) && st.hasQuestItems(MONSTER_DROP.get(npc.getId())))
+					{
+						st.giveItems(KABOO_CHIEF_TORC1, 1);
+						st.setCond(2, true);
+					}
+					break;
+				}
+				case 27064:
+				case 27065:
+				case 27067:
+				case 27068:
+				{
+					if (st.isCond(3) && st.hasQuestItems(MONSTER_DROP.get(npc.getId())))
+					{
+						st.giveItems(KABOO_CHIEF_TORC2, 1);
+						st.setCond(4, true);
+					}
+					break;
+				}
+			}
+		}
+		return super.onKill(npc, killer, isSummon);
+	}
+	
+	public static void main(String[] args)
+	{
+		new Q00105_SkirmishWithOrcs(105, Q00105_SkirmishWithOrcs.class.getSimpleName(), "Skirmish with Orcs");
+	}
+}

+ 1 - 1
L2J_DataPack_BETA/dist/game/data/scripts/quests/303_CollectArrowheads/30029-02.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00303_CollectArrowheads/30029-02.htm

@@ -1,5 +1,5 @@
 <html><body>Master Minia:<br>
 When I was young, I had the opportunity to visit many places around the continent and experience different cultures. Perhaps it is because I am a Master who studies swordsmanship, but I was naturally drawn to the weapons of diverse races. That led to my hobby of collecting various rare weapons.<br>
-These days, I am interested in the weapons of the tunath orcs, who are natives of Talking Island. The orcs' weapons differ slightly according to region, but the orcs of this island were isolated for a long time from the mainland and that is probably why the shape of their weapons is very unique. For that reason, I would like to add the<font color="LEVEL"> arrowhead</font> of the tunath orcs to my collection. It would be nice if you could later assist me in collecting arrowheads.<br>
+These days, I am interested in the weapons of the Tunath orcs, who are natives of Talking Island. The orcs' weapons differ slightly according to region, but the orcs of this island were isolated for a long time from the mainland and that is probably why the shape of their weapons is very unique. For that reason, I would like to add the <font color="LEVEL">arrowhead</font> of the Tunath orcs to my collection. It would be nice if you could later assist me in collecting arrowheads.<br>
 (Quest for characters level 10 and above.)
 </body></html>

+ 3 - 3
L2J_DataPack_BETA/dist/game/data/scripts/quests/303_CollectArrowheads/30029-03.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00303_CollectArrowheads/30029-03.htm

@@ -1,6 +1,6 @@
 <html><body>Master Minia:<br>
 When I was young, I had the opportunity to visit many places around the continent and experience different cultures. Perhaps it is because I am a master who studies swordsmanship, but I was naturally drawn to the weapons of diverse races. That led to my hobby of collecting various rare weapons.<br>
-These days, I am interested in the weapons of the tunath orcs, who are natives of Talking Island. The orcs' weapons differ slightly according to region, but the orcs of this island were isolated for a long time from the mainland and that is probably why the shape of their weapons is very unique. For that reason, I would like to add the<font color="LEVEL"> arrowhead</font> of the tunath orcs to my collection.<br>
-If you have the time, could you collect orcish arrowheads for me? Of course, I will pay you for your services.<br>
-<a action="bypass -h Quest 303_CollectArrowheads 30029-04.htm">Say you will take the task</a>
+These days, I am interested in the weapons of the Tunath orcs, who are natives of Talking Island. The orcs' weapons differ slightly according to region, but the orcs of this island were isolated for a long time from the mainland and that is probably why the shape of their weapons is very unique. For that reason, I would like to add the <font color="LEVEL">arrowhead</font> of the Tunath orcs to my collection.<br>
+If you have the time, could you collect Orcish Arrowheads for me? Of course, I will pay you for your services.<br>
+<a action="bypass -h Quest Q00303_CollectArrowheads 30029-04.htm">Say you will take the task</a>
 </body></html>

+ 4 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00303_CollectArrowheads/30029-04.htm

@@ -0,0 +1,4 @@
+<html><body>Master Minia:<br>
+There are many Orcs on Talking Island, but the Tunath Orcs are at the<font color="LEVEL"> Elven Ruins</font>. There you will be able to find arrowheads used by the Tunath Orc Marksmen. If you don't know how to find the ruins, ask Guard Kenyos.<br>
+These would not be soley for my own private collection. I plan to donate some to Sedrick's Training Hall for exhibition, so please bring back ten arrowheads.
+</body></html>

+ 4 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00303_CollectArrowheads/30029-05.html

@@ -0,0 +1,4 @@
+<html><body>Master Minia:<br>
+Please gather ten arrowheads used by the Tunath Orc Marksmen and bring them to me. I am not collecting them simply for my private purposes, but plan to donate some to Sedrick's Training Hall for exhibition.<br>
+Tunath Orcs are in the Elven Ruins. If you don't know where that is, ask Guard Kenyos for directions.
+</body></html>

+ 3 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00303_CollectArrowheads/30029-06.html

@@ -0,0 +1,3 @@
+<html><body>Master Minia:<br>
+Thank you very much. With this, I can now add Tunath Orc arrowheads to my weapons collection list. I plan to donate about five to Sedrick's Training Hall for exhibition purposes. I will compensate you as promised. Please take this as a token of my thanks for your trouble.
+</body></html>

+ 130 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00303_CollectArrowheads/Q00303_CollectArrowheads.java

@@ -0,0 +1,130 @@
+/*
+ * 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.Q00303_CollectArrowheads;
+
+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;
+
+/**
+ * Collect Arrowheads (303)
+ * @author ivantotov
+ */
+public final class Q00303_CollectArrowheads extends Quest
+{
+	// NPC
+	private static final int MINIA = 30029;
+	// Item
+	private static final int ORCISH_ARROWHEAD = 963;
+	// Misc
+	private static final int MIN_LEVEL = 10;
+	private static final int REQUIRED_ITEM_COUNT = 10;
+	// Monster
+	private static final int TUNATH_ORC_MARKSMAN = 20361;
+	
+	private Q00303_CollectArrowheads(int questId, String name, String descr)
+	{
+		super(questId, name, descr);
+		addStartNpc(MINIA);
+		addTalkId(MINIA);
+		addKillId(TUNATH_ORC_MARKSMAN);
+		registerQuestItems(ORCISH_ARROWHEAD);
+	}
+	
+	@Override
+	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+	{
+		final QuestState st = player.getQuestState(getName());
+		if ((st != null) && event.equals("30029-04.htm"))
+		{
+			st.startQuest();
+			return event;
+		}
+		return null;
+	}
+	
+	@Override
+	public String onKill(L2Npc npc, L2PcInstance player, boolean isSummon)
+	{
+		final L2PcInstance partyMember = getRandomPartyMember(player, 1);
+		if (partyMember != null)
+		{
+			final QuestState st = partyMember.getQuestState(getName());
+			if (st.giveItemRandomly(npc, ORCISH_ARROWHEAD, 1, REQUIRED_ITEM_COUNT, 0.4, true))
+			{
+				st.setCond(2);
+			}
+		}
+		return super.onKill(npc, player, isSummon);
+	}
+	
+	@Override
+	public String onTalk(L2Npc npc, L2PcInstance player)
+	{
+		String htmltext = getNoQuestMsg(player);
+		final QuestState st = player.getQuestState(getName());
+		if (st == null)
+		{
+			return htmltext;
+		}
+		
+		switch (st.getState())
+		{
+			case State.CREATED:
+			{
+				htmltext = player.getLevel() >= MIN_LEVEL ? "30029-03.htm" : "30029-02.htm";
+				break;
+			}
+			case State.STARTED:
+			{
+				switch (st.getCond())
+				{
+					case 1:
+					{
+						if (st.getQuestItemsCount(ORCISH_ARROWHEAD) < REQUIRED_ITEM_COUNT)
+						{
+							htmltext = "30029-05.html";
+						}
+						break;
+					}
+					case 2:
+					{
+						if (st.getQuestItemsCount(ORCISH_ARROWHEAD) >= REQUIRED_ITEM_COUNT)
+						{
+							st.giveAdena(1000, true);
+							st.addExpAndSp(2000, 0);
+							st.exitQuest(true, true);
+							htmltext = "30029-06.html";
+						}
+						break;
+					}
+				}
+				break;
+			}
+		}
+		return htmltext;
+	}
+	
+	public static void main(String[] args)
+	{
+		new Q00303_CollectArrowheads(303, Q00303_CollectArrowheads.class.getSimpleName(), "Collect Arrowheads");
+	}
+}

+ 1 - 1
L2J_DataPack_BETA/dist/game/data/scripts/quests/306_CrystalOfFireice/30004-02.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00306_CrystalOfFireAndIce/30004-02.htm

@@ -1,5 +1,5 @@
 <html><body>Trader Katerina:<br>
-I am working as a trader now, but actually my expertise is collecting and trading jewels. I find rare jewels by asking favors of travelers like you and sell them at Giran or Aden. Not long ago, I heard that one can find precious jewels at the<font color="LEVEL"> Elven Ruins</font> of Talking Island. It is an elemental stone used by the Elven Mystics or something like that ...<br>
+I am working as a trader now, but actually my expertise is collecting and trading jewels. I find rare jewels by asking favors of travelers like you and sell them at Giran or Aden. Not long ago, I heard that one can find precious jewels at the <font color="LEVEL">Elven Ruins</font> of Talking Island. It is an elemental stone used by the Elven Mystics or something like that ...<br>
 Now that I think about it, the Elven Ruins may be too dangerous for you to go to. I was going to ask you to find me that jewel, but ... If you come across an opportunity later on to explore the Elven Ruins, please come to me. Then I will tell you in detail how to find the jewel there.<br>
 (Quest for characters level 17 and above.)
 </body></html>

+ 5 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00306_CrystalOfFireAndIce/30004-03.htm

@@ -0,0 +1,5 @@
+<html><body>Trader Katerina:<br>
+Although I work as a merchant now, my specialty used to be collecting and dealing in jewels. I would ask travelers like you to obtain rare jewels, and I would sell them at Giran or Aden. A little while ago, I found some entertaining information while looking through some ancient documents at the School of Wizardry. The <font color="LEVEL">Stones of Water and Fire</font> that were once used by the ancient Elf magicians could be found some place on this island. It was a long-abandoned place called the <font color="LEVEL">Elven Ruins.</font> Sound interesting to you?<br>
+The Elven Ruins are much too dangerous for someone like me, but I'm sure you can handle it without a problem. If you bring back the jewels that I'm looking for from the ruins, I'll pay you generously. How about it?<br>
+<a action="bypass -h Quest Q00306_CrystalOfFireAndIce 30004-04.htm">Say that you'll do it.</a>
+</body></html>

+ 6 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00306_CrystalOfFireAndIce/30004-04.htm

@@ -0,0 +1,6 @@
+<html><body>Trader Katerina:<br>
+Thank you so much for granting my request. Now please listen carefully to my account.<br>
+The <font color="LEVEL"> Elven Ruins</font> here on Talking Island used to be a place where the Elves taught the Humans magic a long time ago. They say that underground, there used to be a temple where the Elves performed sacrificial rites to the spirit kings of fire and water. When the Elves left the island, they broke the <font color="LEVEL">elemental Stone of Fire</font> and <font color="LEVEL">elemental stone of ice</font>, which were in the underground temple before they left.<br>
+But as the stones were shattered, the magic that was emitted from the shards summoned water spirit undines and flame spirit salamanders. Therefore, underneath the Elven Ruins there are still many salamanders and undines that have <font color="LEVEL">Flame Shards</font>, fragments of the elemental Stone of Fire, and <font color="LEVEL">Ice Shards</font>, fragments of the elemental Stone of Water, in their bodies.<br>
+What you must do is go to the Elven Ruins and bring the fragments of elemental stones that are inside the bodies of the <font color="LEVEL">salamanders</font> and <font color="LEVEL">undines</font>. I will compensate you according to the number of jewels that you bring back.
+</body></html>

+ 5 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00306_CrystalOfFireAndIce/30004-05.html

@@ -0,0 +1,5 @@
+<html><body>Trader Katerina:<br>
+You have not brought any fragments of elemental stone. As I already told you, you must go to the <font color="LEVEL">underground Elven Ruins</font> to find the fragments of elemental stone. Inside the fire spirit <font color="LEVEL">salamanders</font> and water spirit <font color="LEVEL">undines</font>, you will be able to find the <font color="LEVEL">Flame Shard</font> and <font color="LEVEL">Ice Shard</font>, respectively, fragments of the elemental stones of fire and water.<br>
+<a action="bypass -h Quest Q00306_CrystalOfFireAndIce 30004-09.html">Say you will bring the jewel</a><br>
+<a action="bypass -h Quest Q00306_CrystalOfFireAndIce 30004-08.html">Say you will end the Contract</a>
+</body></html>

+ 3 - 3
L2J_DataPack_BETA/dist/game/data/scripts/quests/306_CrystalOfFireice/30004-07.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00306_CrystalOfFireAndIce/30004-07.html

@@ -1,6 +1,6 @@
 <html><body>Trader Katerina:<br>
 Thank you very much. I think I can feel a warmth at the tip of my fingers because the jewel contains the power of the spirits. How fascinating.<br>
-As I promised, I will compensate you according to the number of jewels you brought me. Will you go back to the ruins to bring more jewels? Or do you want to end our contract?<br>
-<a action="bypass -h Quest 306_CrystalOfFireice 30004-09.htm">Say you will continue</a><br>
-<a action="bypass -h Quest 306_CrystalOfFireice 30004-08.htm">Say you will end the contract</a>
+As I promised, I will compensate you according to the number of jewels you brought me. Will you go back to the ruins to bring more jewels? Or do you want to end our Contract?<br>
+<a action="bypass -h Quest Q00306_CrystalOfFireAndIce 30004-09.html">Say you will continue</a><br>
+<a action="bypass -h Quest Q00306_CrystalOfFireAndIce 30004-08.html">Say you will end the Contract</a>
 </body></html>

+ 0 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/306_CrystalOfFireice/30004-08.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00306_CrystalOfFireAndIce/30004-08.html


+ 0 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/306_CrystalOfFireice/30004-09.htm → L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00306_CrystalOfFireAndIce/30004-09.html


+ 191 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00306_CrystalOfFireAndIce/Q00306_CrystalOfFireAndIce.java

@@ -0,0 +1,191 @@
+/*
+ * 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.Q00306_CrystalOfFireAndIce;
+
+import java.util.ArrayList;
+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;
+
+/**
+ * Crystals of Fire and Ice (306)
+ * @author ivantotov
+ */
+public final class Q00306_CrystalOfFireAndIce extends Quest
+{
+	// NPC
+	private static final int KATERINA = 30004;
+	// Items
+	private static final int FLAME_SHARD = 1020;
+	private static final int ICE_SHARD = 1021;
+	// Misc
+	private static final int MIN_LEVEL = 17;
+	// Monsters
+	private static final int UNDINE_NOBLE = 20115;
+	private static final Map<Integer, ItemHolder> MONSTER_DROPS = new HashMap<>();
+	static
+	{
+		MONSTER_DROPS.put(20109, new ItemHolder(FLAME_SHARD, 925)); // Salamander
+		MONSTER_DROPS.put(20110, new ItemHolder(ICE_SHARD, 900)); // Undine
+		MONSTER_DROPS.put(20112, new ItemHolder(FLAME_SHARD, 900)); // Salamander Elder
+		MONSTER_DROPS.put(20113, new ItemHolder(ICE_SHARD, 925)); // Undine Elder
+		MONSTER_DROPS.put(20114, new ItemHolder(FLAME_SHARD, 925)); // Salamander Noble
+		MONSTER_DROPS.put(UNDINE_NOBLE, new ItemHolder(ICE_SHARD, 950)); // Undine Noble
+	}
+	
+	private Q00306_CrystalOfFireAndIce(int questId, String name, String descr)
+	{
+		super(questId, name, descr);
+		addStartNpc(KATERINA);
+		addTalkId(KATERINA);
+		addKillId(MONSTER_DROPS.keySet());
+		registerQuestItems(FLAME_SHARD, ICE_SHARD);
+	}
+	
+	@Override
+	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+	{
+		final QuestState st = player.getQuestState(getName());
+		if (st == null)
+		{
+			return null;
+		}
+		String htmltext = null;
+		switch (event)
+		{
+			case "30004-04.htm":
+			{
+				if (st.isCreated())
+				{
+					st.startQuest();
+					htmltext = event;
+				}
+				break;
+			}
+			case "30004-08.html":
+			{
+				st.exitQuest(true, true);
+				htmltext = event;
+				break;
+			}
+			case "30004-09.html":
+			{
+				htmltext = event;
+				break;
+			}
+		}
+		return htmltext;
+	}
+	
+	@Override
+	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
+	{
+		QuestState qs = killer.getQuestState(getName());
+		if ((qs != null) && qs.isStarted() && ((npc.getId() == UNDINE_NOBLE) || !killer.isInParty()))
+		{
+			giveKillReward(killer, npc);
+			return super.onKill(npc, killer, isSummon);
+		}
+		
+		final List<L2PcInstance> players = new ArrayList<>();
+		if ((qs != null) && qs.isStarted())
+		{
+			players.add(killer);
+			players.add(killer);
+		}
+		
+		if (killer.isInParty())
+		{
+			for (L2PcInstance member : killer.getParty().getMembers())
+			{
+				qs = member.getQuestState(getName());
+				if ((qs != null) && qs.isStarted())
+				{
+					players.add(member);
+				}
+			}
+		}
+		
+		if (!players.isEmpty())
+		{
+			final L2PcInstance player = players.get(getRandom(players.size()));
+			giveKillReward(player, npc);
+		}
+		return super.onKill(npc, killer, isSummon);
+	}
+	
+	private static final void giveKillReward(L2PcInstance player, L2Npc npc)
+	{
+		if (Util.checkIfInRange(1500, npc, player, false))
+		{
+			final ItemHolder item = MONSTER_DROPS.get(npc.getId());
+			giveItemRandomly(player, npc, item.getId(), 1, 0, 1000.0 / item.getCount(), true);
+		}
+	}
+	
+	@Override
+	public String onTalk(L2Npc npc, L2PcInstance player)
+	{
+		String htmltext = getNoQuestMsg(player);
+		final QuestState st = player.getQuestState(getName());
+		if (st == null)
+		{
+			return htmltext;
+		}
+		
+		switch (st.getState())
+		{
+			case State.CREATED:
+			{
+				htmltext = player.getLevel() >= MIN_LEVEL ? "30004-03.htm" : "30004-02.htm";
+				break;
+			}
+			case State.STARTED:
+			{
+				if (hasAtLeastOneQuestItem(player, getRegisteredItemIds()))
+				{
+					final long flame = st.getQuestItemsCount(FLAME_SHARD);
+					final long ice = st.getQuestItemsCount(ICE_SHARD);
+					st.giveAdena(((flame * 40) + (ice * 40) + ((flame + ice) >= 10 ? 5000 : 0)), true);
+					takeItems(player, -1, getRegisteredItemIds());
+					htmltext = "30004-07.html";
+				}
+				else
+				{
+					htmltext = "30004-05.html";
+				}
+				break;
+			}
+		}
+		return htmltext;
+	}
+	
+	public static void main(String[] args)
+	{
+		new Q00306_CrystalOfFireAndIce(306, Q00306_CrystalOfFireAndIce.class.getSimpleName(), "Crystals of Fire and Ice");
+	}
+}

+ 5 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00313_CollectSpores/30150-02.htm

@@ -0,0 +1,5 @@
+<html><body>Trader Herbiel:<br>
+Long ago, we Elves dwelled in a beautiful land east of the Elven Forest, beyond the mountains. But it was scarred by powerful dark magic used during the Human-Elven War. Now it is a poisonous expanse called the <font color="LEVEL">Sea of Spores</font>.<br>
+Worse, that noxious area is slowly expanding, contaminating our forest and gradually eroding our magical defense field. Unless we can stop it, I fear it is only a matter of time before our village is destroyed. Perhaps when you are more experienced, my young friend, you will help us fight this menace.<br>
+(Only characters who are level 8 and higher may undertake this quest.)
+</body></html>

+ 5 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00313_CollectSpores/30150-03.htm

@@ -0,0 +1,5 @@
+<html><body>Trader Herbiel:<br>
+Long ago, we Elves dwelled in a beautiful land east of the Elven Forest, beyond the mountains. But it was scarred by powerful dark magic used during the Human-Elven War. Now it is a poisonous expanse called the <font color="LEVEL">Sea of Spores</font>.<br>
+Worse, that noxious area is slowly expanding, contaminating our forest and gradually eroding our magical defense field. That is why the spirits of the forest are becoming more aggressive, and creatures like the Walking Fungus are increasing in number. We have been researching a way to reverse the curse and restore the Sea of Spores to its original condition, but...<br>
+<a action="bypass -h Quest Q00313_CollectSpores 30150-04.htm">Ask about his research.</a>
+</body></html>

+ 6 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00313_CollectSpores/30150-04.htm

@@ -0,0 +1,6 @@
+<html><body>Trader Herbiel:<br>
+We are attempting to gather information on 2 fronts. The renowned Spellsinger Adria Lumingshine is currently on the shores of the Sea of Spores, while Hierarch Asterios is attempting to neutralize the poisons that have seeped into our forest. I have been assisting the Hierarch's research by collecting and refining the leaves, roots and spores of various plants.<br>
+However, he recently asked me to find a specific kind of spore pollen that is carried here by the wind from the Sea of Spores. The pollen is so fine that the only way to collect it is to extract it from <font color="LEVEL">Spore Fungus</font>.<br>
+I'm needed here to oversee the extraction process, which means I need a volunteer to go to the forest and collect <font color="LEVEL">Spore Sacs</font> from <font color="LEVEL">Spore Fungi</font>. Will you help me?<br>
+<a action="bypass -h Quest Q00313_CollectSpores 30150-05.htm">Say yes.</a>
+</body></html>

+ 3 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00313_CollectSpores/30150-05.htm

@@ -0,0 +1,3 @@
+<html><body>Trader Herbiel:<br>
+Go to the Elven Forest, slay the Spore Fungi there and return her with <font color="LEVEL">10 Spore Sacs</font>. Keep in mind that the Spore Sacs are very delicate and may tear unless you are extremely careful. May Eva's blessing go with you!
+</body></html>

+ 3 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00313_CollectSpores/30150-06.html

@@ -0,0 +1,3 @@
+<html><body>Trader Herbiel:<br>
+I need at least 10 Spore Sacs in order to extract the amount of pollen needed for the Hierarch's research. Please go and bring back more -- this is important!
+</body></html>

+ 4 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00313_CollectSpores/30150-07.html

@@ -0,0 +1,4 @@
+<html><body>Trader Herbiel:<br>
+Thank you! Now I can extract the pollen the Hierarch needs. With any luck, this will provide the key we need to defeat the Sea of Spores.<br>
+You have done a great service today for all Elvenkind. Please accept this as a token of my gratitude.
+</body></html>

+ 146 - 0
L2J_DataPack_BETA/dist/game/data/scripts/quests/Q00313_CollectSpores/Q00313_CollectSpores.java

@@ -0,0 +1,146 @@
+/*
+ * 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.Q00313_CollectSpores;
+
+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.util.Util;
+
+/**
+ * Collect Spores (313)
+ * @author ivantotov
+ */
+public final class Q00313_CollectSpores extends Quest
+{
+	// NPC
+	private static final int HERBIEL = 30150;
+	// Item
+	private static final int SPORE_SAC = 1118;
+	// Misc
+	private static final int MIN_LEVEL = 8;
+	private static final int REQUIRED_SAC_COUNT = 10;
+	// Monster
+	private static final int SPORE_FUNGUS = 20509;
+	
+	private Q00313_CollectSpores(int questId, String name, String descr)
+	{
+		super(questId, name, descr);
+		addStartNpc(HERBIEL);
+		addTalkId(HERBIEL);
+		addKillId(SPORE_FUNGUS);
+		registerQuestItems(SPORE_SAC);
+	}
+	
+	@Override
+	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+	{
+		final QuestState st = player.getQuestState(getName());
+		if (st == null)
+		{
+			return null;
+		}
+		String htmltext = null;
+		switch (event)
+		{
+			case "30150-05.htm":
+			{
+				if (st.isCreated())
+				{
+					st.startQuest();
+					htmltext = event;
+				}
+				break;
+			}
+			case "30150-04.htm":
+			{
+				htmltext = event;
+				break;
+			}
+		}
+		return htmltext;
+	}
+	
+	@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, false))
+		{
+			if (st.giveItemRandomly(npc, SPORE_SAC, 1, REQUIRED_SAC_COUNT, 0.4, true))
+			{
+				st.setCond(2);
+			}
+		}
+		return super.onKill(npc, killer, isSummon);
+	}
+	
+	@Override
+	public String onTalk(L2Npc npc, L2PcInstance player)
+	{
+		String htmltext = getNoQuestMsg(player);
+		final QuestState st = player.getQuestState(getName());
+		if (st == null)
+		{
+			return htmltext;
+		}
+		
+		switch (st.getState())
+		{
+			case State.CREATED:
+			{
+				htmltext = player.getLevel() >= MIN_LEVEL ? "30150-03.htm" : "30150-02.htm";
+				break;
+			}
+			case State.STARTED:
+			{
+				switch (st.getCond())
+				{
+					case 1:
+					{
+						if (st.getQuestItemsCount(SPORE_SAC) < REQUIRED_SAC_COUNT)
+						{
+							htmltext = "30150-06.html";
+						}
+						break;
+					}
+					case 2:
+					{
+						if (st.getQuestItemsCount(SPORE_SAC) >= REQUIRED_SAC_COUNT)
+						{
+							st.giveAdena(3500, true);
+							st.exitQuest(true, true);
+							htmltext = "30150-07.html";
+						}
+						break;
+					}
+				}
+				break;
+			}
+		}
+		return htmltext;
+	}
+	
+	public static void main(String[] args)
+	{
+		new Q00313_CollectSpores(313, Q00313_CollectSpores.class.getSimpleName(), "Collect Spores");
+	}
+}

+ 4 - 0
L2J_DataPack_BETA/dist/sql/game/updates/20130810update.sql

@@ -0,0 +1,4 @@
+UPDATE character_quests SET name='Q00105_SkirmishWithOrcs' WHERE name='105_SkirmishWithOrcs';
+UPDATE character_quests SET name='Q00303_CollectArrowheads' WHERE name='303_CollectArrowheads';
+UPDATE character_quests SET name='Q00306_CrystalOfFireAndIce' WHERE name='306_CrystalOfFireice';
+UPDATE character_quests SET name='Q00313_CollectSpores' WHERE name='313_CollectSpores';