Browse Source

Retail-like quest Good Work's Reward (60).
Reviewed by: @Zoey76

ivantotov 10 years ago
parent
commit
2cd82f3f17
94 changed files with 1648 additions and 291 deletions
  1. 0 1
      L2J_DataPack/dist/game/data/scripts.cfg
  2. 0 4
      L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/30081-01.htm
  3. 0 3
      L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31092-07.htm
  4. 0 5
      L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31435-01.htm
  5. 0 4
      L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31435-04.htm
  6. 0 7
      L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31435-05.htm
  7. 0 4
      L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31435-07.htm
  8. 0 4
      L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/32487-01.htm
  9. 0 4
      L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/32487-05.htm
  10. 0 238
      L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/__init__.py
  11. 4 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/30081-01.html
  12. 1 1
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/30081-02.html
  13. 0 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/30081-03.html
  14. 2 2
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/30081-04.html
  15. 0 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/30081-05.html
  16. 0 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/30081-06.html
  17. 0 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/30081-07.html
  18. 1 1
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/30081-08.html
  19. 3 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/30081-09.html
  20. 0 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/30081-10.html
  21. 2 2
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-01.html
  22. 3 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-01a.html
  23. 1 1
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-02.html
  24. 4 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-03.html
  25. 2 2
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-03a.html
  26. 1 1
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-03b.html
  27. 3 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-04a.html
  28. 4 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-04b.html
  29. 6 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-05.html
  30. 5 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-05a.html
  31. 6 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-06.html
  32. 5 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-06a.html
  33. 6 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-07.html
  34. 5 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-07a.html
  35. 7 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-08.html
  36. 6 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-08a.html
  37. 6 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-09.html
  38. 5 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-09a.html
  39. 6 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-10.html
  40. 5 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-10a.html
  41. 6 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-11.html
  42. 5 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-11a.html
  43. 6 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-12.html
  44. 5 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-12a.html
  45. 5 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-13.html
  46. 4 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-13a.html
  47. 6 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-14.html
  48. 5 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-14a.html
  49. 6 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-15.html
  50. 5 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-15a.html
  51. 6 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-16.html
  52. 5 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-16a.html
  53. 5 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-17.html
  54. 4 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-17a.html
  55. 5 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-18.html
  56. 4 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-18a.html
  57. 5 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-19.html
  58. 4 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-19a.html
  59. 6 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-20.html
  60. 5 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-20a.html
  61. 5 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-21.html
  62. 4 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-21a.html
  63. 5 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-22.html
  64. 4 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-22a.html
  65. 3 3
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-23.html
  66. 3 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-24.html
  67. 2 2
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-25.html
  68. 5 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-01.htm
  69. 1 1
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-02.htm
  70. 0 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-03.htm
  71. 5 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-04.htm
  72. 4 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-06.htm
  73. 0 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-07.htm
  74. 3 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-08.html
  75. 4 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-09.html
  76. 4 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-10.html
  77. 0 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-11.html
  78. 3 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-12.html
  79. 4 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-13.html
  80. 1 1
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-14.html
  81. 0 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-15.html
  82. 0 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-16.html
  83. 4 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/32487-01.html
  84. 4 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/32487-02.html
  85. 3 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/32487-03.html
  86. 0 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/32487-04.html
  87. 4 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/32487-05.html
  88. 0 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/32487-06.html
  89. 0 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/32487-07.html
  90. 4 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/32487-09.html
  91. 0 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/32487-10.html
  92. 1365 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/Q00060_GoodWorksReward.java
  93. 2 0
      L2J_DataPack/dist/game/data/scripts/quests/QuestMasterHandler.java
  94. 1 0
      L2J_DataPack/dist/sql/game/updates/20150120update.sql

+ 0 - 1
L2J_DataPack/dist/game/data/scripts.cfg

@@ -210,7 +210,6 @@ quests/QuestMasterHandler.java
 quests/TerritoryWarScripts/TerritoryWarSuperClass.java
 quests/22_TragedyInVonHellmannForest/__init__.py
 quests/25_HidingBehindTheTruth/__init__.py
-quests/60_GoodWorkReward/__init__.py
 quests/118_ToLeadAndBeLed/__init__.py
 quests/123_TheLeaderAndTheFollower/__init__.py
 quests/227_TestOfReformer/__init__.py

+ 0 - 4
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/30081-01.htm

@@ -1,4 +0,0 @@
-<html><body>Helvetia:<br>
-What brought you here? <br>
-<a action="bypass -h Quest 60_GoodWorkReward 30081-02.htm">"I heard that you have a wide selection of antidotes."</a>
-</body></html>

+ 0 - 3
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31092-07.htm

@@ -1,3 +0,0 @@
-<html><body>Black Marketeer of Mammon:<br>
-Here it is, my friend. thank for your help. If you must one day take another test, come and see me. I will be able to help you.
-</body></html>

+ 0 - 5
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31435-01.htm

@@ -1,5 +0,0 @@
-<html><body>Blueprint Seller Daeger:<br>
-You there, adventurer!<br>
-If you're not too busy, can you help me?<br>
-<a action="bypass -h Quest 60_GoodWorkReward 31435-02.htm">"Why did you call me? Unless it's an emergency, I have other things to attend to."</a>
-</body></html>

+ 0 - 4
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31435-04.htm

@@ -1,4 +0,0 @@
-<html><body>Blueprint Seller Daeger:<br>
-Didn't I just ask you for a favor? Did you find Mark?<br>
-<a action="bypass -h Quest 60_GoodWorkReward 31435-05.htm">"Your friend has collapsed. It looks like he has been poisoned..."</a>
-</body></html>

+ 0 - 7
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31435-05.htm

@@ -1,7 +0,0 @@
-<html><body>Blueprint Seller Daeger:<br>
-Poisoned?!<br>
-Why would anyone poison him?<br>
-...<br>
-Oh, there's no time to waste.<br>
-But I'm in no condition to go -- you will have to help him, adventurer. If it's poison, you should be able to get an antidote from <font color="LEVEL">Grocer Helvetia</font>. Please seek her out. Hurry!
-</body></html>

+ 0 - 4
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31435-07.htm

@@ -1,4 +0,0 @@
-<html><body>Blueprint Seller Daeger:<br>
-What has happened to Mark?<br>
-<a action="bypass -h Quest 60_GoodWorkReward 31435-08.htm">"Your friend is safe. He told me to ask you to wait here."</a>
-</body></html>

+ 0 - 4
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/32487-01.htm

@@ -1,4 +0,0 @@
-<html><body>Mark:<br>
-You are...<br>
-<a action="bypass -h Quest 60_GoodWorkReward 32487-02.htm">"Who are you? Why are you lying here?"</a>
-</body></html>

+ 0 - 4
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/32487-05.htm

@@ -1,4 +0,0 @@
-<html><body>Mark:<br>
-Uhh... Fortunately, the others haven't come for me yet. Give me the antidote! I am so weak I can't even move... <br>
-<a action="bypass -h Quest 60_GoodWorkReward 32487-06.htm">Give him the antidote.</a>
-</body></html>

+ 0 - 238
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/__init__.py

@@ -1,238 +0,0 @@
-# Made by Kerberos v1.0 on 2008/07/31
-# this script is part of the Official L2J Datapack Project.
-# Visit http://www.l2jdp.com/forum/ for more details.
-
-import sys
-from com.l2jserver.gameserver.ai import CtrlIntention
-from com.l2jserver.gameserver.model.quest import State
-from com.l2jserver.gameserver.model.quest import QuestState
-from com.l2jserver.gameserver.model.quest import Quest as JQuest
-from com.l2jserver.gameserver.network.serverpackets import NpcSay
-
-qn = "60_GoodWorkReward"
-
-BYPASS = {
-1:"<a action=\"bypass -h Quest 60_GoodWorkReward WL\">Warlord.</a><br><a action=\"bypass -h Quest 60_GoodWorkReward GL\">Gladiator.</a>",
-4:"<a action=\"bypass -h Quest 60_GoodWorkReward PA\">Paladin.</a><br><a action=\"bypass -h Quest 60_GoodWorkReward DA\">Dark Avenger.</a>",
-7:"<a action=\"bypass -h Quest 60_GoodWorkReward TH\">Treasure Hunter.</a><br><a action=\"bypass -h Quest 60_GoodWorkReward HK\">Hawkeye.</a>",
-11:"<a action=\"bypass -h Quest 60_GoodWorkReward SC\">Sorcerer.</a><br><a action=\"bypass -h Quest 60_GoodWorkReward NM\">Necromancer.</a><br><a action=\"bypass -h Quest 60_GoodWorkReward WA\">Warlock.</a>",
-15:"<a action=\"bypass -h Quest 60_GoodWorkReward BS\">Bishop.</a><br><a action=\"bypass -h Quest 60_GoodWorkReward PP\">Prophet.</a>",
-19:"<a action=\"bypass -h Quest 60_GoodWorkReward TK\">Temple Knight.</a><br><a action=\"bypass -h Quest 60_GoodWorkReward SS\">Swordsinger.</a>",
-22:"<a action=\"bypass -h Quest 60_GoodWorkReward PW\">Plainswalker.</a><br><a action=\"bypass -h Quest 60_GoodWorkReward SR\">Silver Ranger.</a>",
-26:"<a action=\"bypass -h Quest 60_GoodWorkReward SP\">Spellsinger.</a><br><a action=\"bypass -h Quest 60_GoodWorkReward ES\">Elemental Summoner.</a>",
-29:"<a action=\"bypass -h Quest 60_GoodWorkReward EE\">Elven Elder.</a>",
-32:"<a action=\"bypass -h Quest 60_GoodWorkReward SK\">Shillien Knight.</a><br><a action=\"bypass -h Quest 60_GoodWorkReward BD\">Blade Dancer.</a>",
-35:"<a action=\"bypass -h Quest 60_GoodWorkReward AW\">Abyss Walker.</a><br><a action=\"bypass -h Quest 60_GoodWorkReward PR\">Phantom Ranger.</a>",
-39:"<a action=\"bypass -h Quest 60_GoodWorkReward SH\">Spellhowler.</a><br><a action=\"bypass -h Quest 60_GoodWorkReward PS\">Phantom Summoner.</a>",
-42:"<a action=\"bypass -h Quest 60_GoodWorkReward SE\">Shillien Elder.</a>",
-45:"<a action=\"bypass -h Quest 60_GoodWorkReward DT\">Destroyer.</a>",
-47:"<a action=\"bypass -h Quest 60_GoodWorkReward TR\">Tyrant.</a>",
-50:"<a action=\"bypass -h Quest 60_GoodWorkReward OL\">Overlord.</a><br><a action=\"bypass -h Quest 60_GoodWorkReward WC\">Warcryer.</a>",
-54:"<a action=\"bypass -h Quest 60_GoodWorkReward BH\">Bounty Hunter.</a>",
-56:"<a action=\"bypass -h Quest 60_GoodWorkReward WS\">Warsmith.</a>"
-}
-
-CLASSES = {
-"AW":[36,[2673,3172,2809]],
-"BD":[34,[2627,3172,2762]],
-"BH":[55,[2809,3119,3238]],
-"BS":[16,[2721,2734,2820]],
-"DA":[6,[2633,2734,3307]],
-"DT":[46,[2627,3203,3276]],
-"EE":[30,[2721,3140,2820]],
-"ES":[28,[2674,3140,3336]],
-"GL":[2,[2627,2734,2762]],
-"HK":[9,[2673,2734,3293]],
-"NM":[13,[2674,2734,3307]],
-"OL":[51,[2721,3203,3390]],
-"PA":[5,[2633,2734,2820]],
-"PP":[17,[2721,2734,2821]],
-"PR":[37,[2673,3172,3293]],
-"PS":[41,[2674,3172,3336]],
-"PW":[23,[2673,3140,2809]],
-"SC":[12,[2674,2734,2840]],
-"SE":[43,[2721,3172,2821]],
-"SH":[40,[2674,3172,2840]],
-"SK":[33,[2633,3172,3307]],
-"SP":[27,[2674,3140,2840]],
-"SR":[24,[2673,3140,3293]],
-"SS":[21,[2627,3140,2762]],
-"TH":[8,[2673,2734,2809]],
-"TK":[20,[2633,3140,2820]],
-"TR":[48,[2627,3203,2762]],
-"WA":[14,[2674,2734,3336]],
-"WC":[52,[2721,3203,2879]],
-"WL":[3,[2627,2734,3276]],
-"WS":[57,[2867,3119,3238]]
-}
-
-class Quest (JQuest) :
-
- def __init__(self,id,name,descr):
-     JQuest.__init__(self,id,name,descr)
-     self.questItemIds = [10867,10868]
-     self.isNpcSpawned = 0
-
- def onAdvEvent (self,event,npc,player) :
-    if event == "npc_cleanup" :
-      self.isNpcSpawned = 0
-      return
-    st = self.getQuestState(player, False)
-    if not st: return
-    htmltext = event
-    if event == "31435-03.htm" :
-      st.set("cond","1")
-      st.setState(State.STARTED)
-      st.playSound("ItemSound.quest_accept")
-    elif event == "31435-05.htm" :
-      st.set("cond","4")
-      st.playSound("ItemSound.quest_middle")
-    elif event == "31435-08.htm" :
-      st.set("cond","9")
-      st.playSound("ItemSound.quest_middle")
-    elif event == "32487-02.htm" and self.isNpcSpawned == 0:
-      npc = st.addSpawn(27340,72590,148100,-3312,1800000)
-      npc.broadcastPacket(NpcSay(npc.getObjectId(),0,npc.getId(),player.getName()+"! I must kill you. Blame your own curiosity."))
-      npc.setRunning()
-      npc.addDamageHate(st.getPlayer(),0,999)
-      npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, st.getPlayer())
-      self.isNpcSpawned = 1
-      self.startQuestTimer("npc_cleanup",1800000,None, None)
-    elif event == "32487-06.htm" :
-      st.set("cond","8")
-      st.playSound("ItemSound.quest_middle")
-      st.takeItems(10868,-1)
-    elif event == "30081-03.htm" :
-      st.set("cond","5")
-      st.playSound("ItemSound.quest_middle")
-      st.takeItems(10867,-1)
-    elif event == "30081-05.htm" :
-      st.set("cond","6")
-      st.playSound("ItemSound.quest_middle")
-    elif event == "30081-08.htm" :
-      if st.getQuestItemsCount(57) >= 3000000 :
-         st.takeItems(57,3000000)
-         st.giveItems(10868,1)
-         st.set("cond","7")
-         st.playSound("ItemSound.quest_middle")
-      else :
-         htmltext = "30081-07.htm"
-    elif event == "31092-05.htm" :
-      st.exitQuest(False)
-      st.playSound("ItemSound.quest_finish")
-      if player.getClassId().level() == 1 :
-         text = BYPASS[player.getClassId().getId()]
-         htmltext = "<html><body>Black Marketeer of Mammon:<br>Forget about the money!<br>I will help you complete the class transfer, which is far more valuable! Which class would you like to be? Choose one.<br>"+text+"</body></html>"
-      else :
-         htmltext = "31092-06.htm"
-    elif event == "31092-06.htm" :
-      text = BYPASS[player.getClassId().getId()]
-      htmltext = "<html><body>Black Marketeer of Mammon:<br>If you are finished thinking, select one. Which class would you like to be?<br>"+text+"</body></html>"
-    elif event == "31092-07.htm" :
-      st.giveAdena(3000000,True)
-      st.set("onlyone","1")
-    elif event in CLASSES.keys():
-         newclass,req_item=CLASSES[event]
-         adena = 0
-         for i in req_item :
-            if not st.getQuestItemsCount(i):
-               st.giveItems(i,1)
-            else :
-               adena = adena + 1
-         if adena == 3 :
-            return "31092-06.htm"
-         if adena > 0 :
-            st.giveAdena(adena*1000000,True)
-         htmltext = "31092-05.htm"
-         st.set("onlyone","1")
-    return htmltext
-
- def onTalk (self,npc,player):
-   htmltext = Quest.getNoQuestMsg(player)
-   st = self.getQuestState(player, True)
-   if not st : return htmltext
-
-   npcId = npc.getId()
-   cond = st.getInt("cond")
-   id = st.getState()
-   if id == State.COMPLETED :
-     if npcId == 31435 :
-        htmltext = Quest.getAlreadyCompletedMsg(player)
-     elif npcId == 31092 :
-        if player.getClassId().level() == 1 and not st.getInt("onlyone"):
-           htmltext = "31092-04.htm"
-   if id == State.CREATED and npcId == 31435 :
-     if player.getLevel() < 39 or player.getClassId().level() != 1 or player.getRace().ordinal() == 5:
-       htmltext = "31435-00.htm"
-       st.exitQuest(1)
-     else :
-       htmltext = "31435-01.htm"
-   elif npcId == 31435 :
-     if cond in [1,2]:
-       htmltext = "31435-03.htm"
-     elif cond == 3:
-       htmltext = "31435-04.htm"
-     elif cond in [4,5,6,7]:
-       htmltext = "31435-06.htm"
-     elif cond == 8:
-       htmltext = "31435-07.htm"
-     elif cond == 9:
-       htmltext = "31435-09.htm"
-       st.set("cond","10")
-       st.playSound("ItemSound.quest_middle")
-     elif cond == 10:
-       htmltext = "31435-10.htm"
-   elif npcId == 32487 :
-     if cond == 1:
-       htmltext = "32487-01.htm"
-     elif cond == 2:
-       htmltext = "32487-03.htm"
-       st.set("cond","3")
-       st.playSound("ItemSound.quest_middle")
-     elif cond == 3:
-       htmltext = "32487-04.htm"
-     elif cond == 7:
-       htmltext = "32487-05.htm"
-     elif cond == 8:
-       htmltext = "32487-06.htm"
-   elif npcId == 30081 :
-     if cond == 4:
-       htmltext = "30081-01.htm"
-     elif cond == 5:
-       htmltext = "30081-04.htm"
-     elif cond == 6:
-       htmltext = "30081-06.htm"
-     elif cond == 7:
-       htmltext = "30081-09.htm"
-   elif npcId == 31092 and cond == 10 :
-       htmltext = "31092-01.htm"
-   return htmltext
-
- def onKill(self,npc,player,isPet):
-   self.cancelQuestTimer("npc_cleanup", None, None)
-   self.isNpcSpawned = 0
-   st = self.getQuestState(player, False)
-   if not st : return
-   if st.getState() != State.STARTED : return
-   npcId = npc.getId()
-   cond = st.getInt("cond")
-   if npcId == 27340 and cond == 1:
-     string = "You are strong. This was a mistake."
-     if self.getRandom(1):
-       string = "You have good luck. I shall return."
-     npc.broadcastPacket(NpcSay(npc.getObjectId(),0,npc.getId(),string))
-     st.giveItems(10867,1)
-     st.set("cond","2")
-     st.playSound("ItemSound.quest_middle")
-   return
-
-QUEST       = Quest(60,qn,"Good Work's Reward")
-
-QUEST.addStartNpc(31092)
-QUEST.addStartNpc(31435)
-QUEST.addTalkId(30081)
-QUEST.addTalkId(31092)
-QUEST.addTalkId(31435)
-QUEST.addTalkId(32487)
-
-QUEST.addKillId(27340)

+ 4 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/30081-01.html

@@ -0,0 +1,4 @@
+<html><body>Helvetia:<br>
+What brought you here?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward 30081-02.html">"I heard that you have a wide selection of antidotes." </a>
+</body></html>

+ 1 - 1
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/30081-02.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/30081-02.html

@@ -1,4 +1,4 @@
 <html><body>Helvetia:<br>
 Please describe the symptoms. There are many antidotes to choose from, and we must select the right one.<br>
-<a action="bypass -h Quest 60_GoodWorkReward 30081-03.htm">Hand over the bloody cloth.</a>
+<a action="bypass -h Quest Q00060_GoodWorksReward 30081-03.html">Hand over the bloody cloth.</a>
 </body></html>

+ 0 - 0
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/30081-03.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/30081-03.html


+ 2 - 2
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/30081-04.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/30081-04.html

@@ -1,5 +1,5 @@
 <html><body>Helvetia:<br>
 I analyzed the blood you gave me. I was able to identify the poison, but I'm afraid that I can't give you the antidote for free. It's very rare, so I have to charge you. You understand, don't you? I'm sure the person you save will be happy to reimburse you. The charge is approximately <font color="LEVEL">3 million Adena</font>... You don't want to pay? No skin off my nose. Just remember that even if you have a letter of recommendation from Daeger, I can't simply give this to you for free.<br>
-<a action="bypass -h Quest 60_GoodWorkReward 30081-08.htm">Hand over the money.</a><br>
-<a action="bypass -h Quest 60_GoodWorkReward 30081-05.htm">Ask for a credit.</a>
+<a action="bypass -h Quest Q00060_GoodWorksReward 30081-05.html">Hand over the money.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward 30081-07.html">Ask for a credit.</a>
 </body></html>

+ 0 - 0
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/30081-08.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/30081-05.html


+ 0 - 0
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/30081-07.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/30081-06.html


+ 0 - 0
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/30081-05.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/30081-07.html


+ 1 - 1
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/30081-06.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/30081-08.html

@@ -1,4 +1,4 @@
 <html><body>Helvetia:<br>
 Did you come here looking for the antidote? If you pay me what it's worth, I'll give it to you.<br>
-<a action="bypass -h Quest 60_GoodWorkReward 30081-08.htm">Hand over the money.</a>
+<a action="bypass -h Quest Q00060_GoodWorksReward 30081-05.html">Hand over the money.</a>
 </body></html>

+ 3 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/30081-09.html

@@ -0,0 +1,3 @@
+<html><body>Helvetia:<br>
+You are so careless! You lost the antidote?!  Well, since you already paid me, I suppose I'll give it to you again -- just this once, you understand.
+</body></html>

+ 0 - 0
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/30081-09.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/30081-10.html


+ 2 - 2
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31092-01.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-01.html

@@ -1,4 +1,4 @@
 <html><body>Black Marketeer of Mammon:<br>
-Ah! So you saved Mark? Thanks to you, I am still in business. But it isn't safe for him to venture into public anymore, so he won't be able to meet you personally. It's for both your sakes, you understand. Don't worry about the details! In any case, he asked me to give you what you needed. Seems like you have some money. How about this? <br>
-<a action="bypass -h Quest 60_GoodWorkReward 31092-02.htm">Listen carefully.</a>
+Ah! So you saved Mark? Thanks to you, I am still in business. But it isn't safe for him to venture into public anymore, so he won't be able to meet you personally. It's for both your sakes, you understand. Don't worry about the details! In any case, he asked me to give you what you needed. Seems like you have some money. How about this?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_1">Listen carefully.</a>
 </body></html>

+ 3 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-01a.html

@@ -0,0 +1,3 @@
+<html><body>Black Marketeer of Mammon:<br>
+Ah! So you saved Mark? Thanks to you, I am still in business. But it isn't safe for him to venture into public anymore, so he won't be able to meet you personally. It's for both your sakes, you understand. Don't worry about the details! In any case, he asked me to give you what you needed. Ah, but it seems that you don't need what I prepared. Then I will give you the money you spent to save Mark. If you need anything else, look me up.
+</body></html>

+ 1 - 1
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31092-02.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-02.html

@@ -1,4 +1,4 @@
 <html><body>Black Marketeer of Mammon:<br>
 You haven't chosen your class yet. Allow me to help you select one. Would this be a sufficient reward for your trouble? Forget the details. Do you like it?<br>
-<a action="bypass -h Quest 60_GoodWorkReward 31092-03.htm">"What about my money?"</a>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_2">"What about my money?"</a>
 </body></html>

+ 4 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-03.html

@@ -0,0 +1,4 @@
+<html><body>Black Marketeer of Mammon:<br>
+Hmmm... You are already taking a test. Would you care to accept part of the money you spent? In lieu of the remainder, I'll give you what you want.<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_3">"Why are you giving me only part of the money?"</a>
+</body></html>

+ 2 - 2
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31092-03.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-03a.html

@@ -1,4 +1,4 @@
 <html><body>Black Marketeer of Mammon:<br>
-You haven't completed any of the tests yet. I can help you so that you won't have to complete a test at all. Interested? <br>
-<a action="bypass -h Quest 60_GoodWorkReward 31092-05.htm">"But...what about the money I spent?"</a>
+You haven't completed any of the tests yet. I can help you so that you won't have to complete a test at all. Interested?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_4">"But...what about the money I spent?"</a>
 </body></html>

+ 1 - 1
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31092-06.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-03b.html

@@ -1,4 +1,4 @@
 <html><body>Black Marketeer of Mammon:<br>
 It appears that you have completed all the tests. I will reimburse you the money you spent on the antidote. How much was it again?<br>
-<a action="bypass -h Quest 60_GoodWorkReward 31092-07.htm">It was 300 million Adena. Give me the money now!"</a>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_3">"It was 300 million Adena. Give me the money now!"</a>
 </body></html>

+ 3 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-04a.html

@@ -0,0 +1,3 @@
+<html><body>Black Marketeer of Mammon:<br>
+Here it is, my friend. Thank you for your help. If you must one day take another test, come and see me. I will be able to help you.
+</body></html>

+ 4 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-04b.html

@@ -0,0 +1,4 @@
+<html><body>Black Marketeer of Mammon:<br>
+Ahhh, I don't actually have the money. But if you're nice to me, I'll be nice to you. Take this money now and I will help you complete your test more quickly. How about it? Hurry up and decide!<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_5">Say that you have made your decision.</a>
+</body></html>

+ 6 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-05.html

@@ -0,0 +1,6 @@
+<html><body>Black Marketeer of Mammon:<br>
+Forget about the money!<br>
+I will help you complete the class transfer, which is far more valuable! What class would you like to be? Choose one.<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_6">Gladiator.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_7">Warlord.</a>
+</body></html>

+ 5 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-05a.html

@@ -0,0 +1,5 @@
+<html><body>Black Marketeer of Mammon:<br>
+If you are finished thinking, select one. Which class would you like to be?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_6">Gladiator.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_7">Warlord.</a>
+</body></html>

+ 6 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-06.html

@@ -0,0 +1,6 @@
+<html><body>Black Marketeer of Mammon:<br>
+Forget about the money!<br>
+I will help you complete the class transfer, which is far more valuable! Which class would you like to be? Choose one.<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_8">Paladin.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_9">Dark Avenger.</a>
+</body></html>

+ 5 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-06a.html

@@ -0,0 +1,5 @@
+<html><body>Black Marketeer of Mammon:<br>
+If you are finished thinking, select one. Which class would you like to be?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_8">Paladin.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_9">Dark Avenger.</a>
+</body></html>

+ 6 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-07.html

@@ -0,0 +1,6 @@
+<html><body>Black Marketeer of Mammon:<br>
+Forget about the money!<br>
+I will help you complete the class transfer, which is far more valuable! Which class would you like to be? Choose one.<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_10">Treasure Hunter.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_11">Hawkeye.</a>
+</body></html>

+ 5 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-07a.html

@@ -0,0 +1,5 @@
+<html><body>Black Marketeer of Mammon:<br>
+If you are finished thinking, select one. Which class would you like to be?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_10">Treasure Hunter.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_11">Hawkeye.</a>
+</body></html>

+ 7 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-08.html

@@ -0,0 +1,7 @@
+<html><body>Black Marketeer of Mammon:<br>
+Forget about the money!<br>
+I will help you complete the class transfer, which is far more valuable! Which class would you like to be? Choose one.<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_12">Sorcerer.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_13">Necromancer.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_14">Warlock.</a>
+</body></html>

+ 6 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-08a.html

@@ -0,0 +1,6 @@
+<html><body>Black Marketeer of Mammon:<br>
+If you are finished thinking, select one. Which class would you like to be?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_12">Sorcerer.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_13">Necromancer.</a>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_14">Warlock.</a>
+</body></html>

+ 6 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-09.html

@@ -0,0 +1,6 @@
+<html><body>Black Marketeer of Mammon:<br>
+Forget about the money!<br>
+I will help you complete the class transfer, which is far more valuable! Which class would you like to be? Choose one.<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_15">Bishop.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_16">Prophet.</a>
+</body></html>

+ 5 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-09a.html

@@ -0,0 +1,5 @@
+<html><body>Black Marketeer of Mammon:<br>
+If you are finished thinking, select one. Which class would you like to be?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_15">Bishop.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_16">Prophet.</a>
+</body></html>

+ 6 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-10.html

@@ -0,0 +1,6 @@
+<html><body>Black Marketeer of Mammon:<br>
+Forget about the money!<br>
+I will help you complete the class transfer, which is far more valuable! Which class would you like to be? Choose one.<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_17">Temple Knight.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_18">Sword Singer.</a>
+</body></html>

+ 5 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-10a.html

@@ -0,0 +1,5 @@
+<html><body>Black Marketeer of Mammon:<br>
+If you are finished thinking, select one. Which class would you like to be?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_17">Temple Knight.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_18">Sword Singer.</a>
+</body></html>

+ 6 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-11.html

@@ -0,0 +1,6 @@
+<html><body>Black Marketeer of Mammon:<br>
+Forget about the money!<br>
+I will help you complete the class transfer, which is far more valuable! Which class would you like to be? Choose one.<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_19">Plains Walker.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_20">Silver Ranger.</a>
+</body></html>

+ 5 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-11a.html

@@ -0,0 +1,5 @@
+<html><body>Black Marketeer of Mammon:<br>
+If you are finished thinking, select one. Which class would you like to be?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_19">Plains Walker.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_20">Silver Ranger.</a>
+</body></html>

+ 6 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-12.html

@@ -0,0 +1,6 @@
+<html><body>Black Marketeer of Mammon:<br>
+Forget about the money!<br>
+I will help you complete the class transfer, which is far more valuable! Which class would you like to be? Choose one.<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_21">Spellsinger.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_22">Elemental Summoner.</a>
+</body></html>

+ 5 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-12a.html

@@ -0,0 +1,5 @@
+<html><body>Black Marketeer of Mammon:<br>
+If you are finished thinking, select one. Which class would you like to be?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_21">Spellsinger.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_22">Elemental Summoner.</a>
+</body></html>

+ 5 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-13.html

@@ -0,0 +1,5 @@
+<html><body>Black Marketeer of Mammon:<br>
+Forget about the money!<br>
+I will help you complete the class transfer, which is far more valuable! Which class would you like to be? Choose one.<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_23">Elder.</a>
+</body></html>

+ 4 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-13a.html

@@ -0,0 +1,4 @@
+<html><body>Black Marketeer of Mammon:<br>
+If you are finished thinking, select one. Which class would you like to be?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_23">Elder.</a>
+</body></html>

+ 6 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-14.html

@@ -0,0 +1,6 @@
+<html><body>Black Marketeer of Mammon:<br>
+Forget about the money!<br>
+I will help you complete the class transfer, which is far more valuable! Which class would you like to be? Choose one.<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_24">Shillien Knight.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_25">Bladedancer.</a>
+</body></html>

+ 5 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-14a.html

@@ -0,0 +1,5 @@
+<html><body>Black Marketeer of Mammon:<br>
+If you are finished thinking, select one. Which class would you like to be?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_24">Shillien Knight.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_25">Bladedancer.</a>
+</body></html>

+ 6 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-15.html

@@ -0,0 +1,6 @@
+<html><body>Black Marketeer of Mammon:<br>
+Forget about the money!<br>
+I will help you complete the class transfer, which is far more valuable! Which class would you like to be? Choose one.<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_26">Abyss Walker.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_27">Phantom Ranger.</a>
+</body></html>

+ 5 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-15a.html

@@ -0,0 +1,5 @@
+<html><body>Black Marketeer of Mammon:<br>
+If you are finished thinking, select one. Which class would you like to be?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_26">Abyss Walker.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_27">Phantom Ranger.</a>
+</body></html>

+ 6 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-16.html

@@ -0,0 +1,6 @@
+<html><body>Black Marketeer of Mammon:<br>
+Forget about the money!<br>
+I will help you complete the class transfer, which is far more valuable! Which class would you like to be? Choose one.<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_28">Spellhowler.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_29">Phantom Summoner.</a>
+</body></html>

+ 5 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-16a.html

@@ -0,0 +1,5 @@
+<html><body>Black Marketeer of Mammon:<br>
+If you are finished thinking, select one. Which class would you like to be?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_28">Spellhowler.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_29">Phantom Summoner.</a>
+</body></html>

+ 5 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-17.html

@@ -0,0 +1,5 @@
+<html><body>Black Marketeer of Mammon:<br>
+Forget about the money!<br>
+I will help you complete the class transfer, which is far more valuable! Which class would you like to be? Choose one.<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_30">Shillien Elder.</a>
+</body></html>

+ 4 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-17a.html

@@ -0,0 +1,4 @@
+<html><body>Black Marketeer of Mammon:<br>
+If you are finished thinking, select one. Which class would you like to be?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_30">Shillien Elder.</a>
+</body></html>

+ 5 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-18.html

@@ -0,0 +1,5 @@
+<html><body>Black Marketeer of Mammon:<br>
+Forget about the money!<br>
+I will help you complete the class transfer, which is far more valuable! Which class would you like to be? Choose one.<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_31">Destroyer.</a>
+</body></html>

+ 4 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-18a.html

@@ -0,0 +1,4 @@
+<html><body>Black Marketeer of Mammon:<br>
+If you are finished thinking, select one. Which class would you like to be?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_31">Destroyer.</a>
+</body></html>

+ 5 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-19.html

@@ -0,0 +1,5 @@
+<html><body>Black Marketeer of Mammon:<br>
+Forget about the money!<br>
+I will help you complete the class transfer, which is far more valuable! Which class would you like to be? Choose one.<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_32">Tyrant.</a>
+</body></html>

+ 4 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-19a.html

@@ -0,0 +1,4 @@
+<html><body>Black Marketeer of Mammon:<br>
+If you are finished thinking, select one. Which class would you like to be?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_32">Tyrant.</a>
+</body></html>

+ 6 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-20.html

@@ -0,0 +1,6 @@
+<html><body>Black Marketeer of Mammon:<br>
+Forget about the money!<br>
+I will help you complete the class transfer, which is far more valuable! Which class would you like to be? Choose one.<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_33">Overlord.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_34">Warcryer.</a>
+</body></html>

+ 5 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-20a.html

@@ -0,0 +1,5 @@
+<html><body>Black Marketeer of Mammon:<br>
+If you are finished thinking, select one. Which class would you like to be?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_33">Overlord.</a><br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_34">Warcryer.</a>
+</body></html>

+ 5 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-21.html

@@ -0,0 +1,5 @@
+<html><body>Black Marketeer of Mammon:<br>
+Forget about the money!<br>
+I will help you complete the class transfer, which is far more valuable! Which class would you like to be? Choose one.<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_35">Bounty Hunter.</a>
+</body></html>

+ 4 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-21a.html

@@ -0,0 +1,4 @@
+<html><body>Black Marketeer of Mammon:<br>
+If you are finished thinking, select one. Which class would you like to be?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_35">Bounty Hunter.</a>
+</body></html>

+ 5 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-22.html

@@ -0,0 +1,5 @@
+<html><body>Black Marketeer of Mammon:<br>
+Forget about the money!<br>
+I will help you complete the class transfer, which is far more valuable! Which class would you like to be? Choose one.<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_36">Warsmith.</a>
+</body></html>

+ 4 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-22a.html

@@ -0,0 +1,4 @@
+<html><body>Black Marketeer of Mammon:<br>
+If you are finished thinking, select one. Which class would you like to be?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_36">Warsmith.</a>
+</body></html>

+ 3 - 3
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31092-04.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-23.html

@@ -1,4 +1,4 @@
-<html><body>Black Marketeer of Mammon:<br>
-Why are you being so indecisive? Stop deliberating and choose one already!<br>
-<a action="bypass -h Quest 60_GoodWorkReward 31092-06.htm">"I am finished thinking."</a>
+<html><body>Black Marketeer of Mammon:<br>
+Why are you being so indecisive? Stop deliberating and choose one already!<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward REPLY_5">"I am finished thinking." </a>
 </body></html>

+ 3 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-24.html

@@ -0,0 +1,3 @@
+<html><body>Black Marketeer of Mammon:<br>
+I thank you for what you did for me. If I can be of any service to you, please come and see me.
+</body></html>

+ 2 - 2
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31092-05.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31092-25.html

@@ -1,3 +1,3 @@
-<html><body>Black Marketeer of Mammon:<br>
-Here it is. Go live your life the way you want to. If there is anything else I can do for you, come see me. You won't regret it, I promise.
+<html><body>Black Marketeer of Mammon:<br>
+Here it is. Go live your life the way you want to. If there is anything else I can do for you, come see me. You won't regret it, I promise.
 </body></html>

+ 5 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-01.htm

@@ -0,0 +1,5 @@
+<html><body>Blueprint Seller Daeger:<br>
+You there, adventurer!<br>
+If you're not too busy, can you help me?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward 31435-02.htm">"Why did you call me? Unless it's an emergency, I have other things to attend to."</a>
+</body></html>

+ 1 - 1
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31435-02.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-02.htm

@@ -1,4 +1,4 @@
 <html><body>Blueprint Seller Daeger:<br>
 My friend promised to meet me here today, but he hasn't arrived yet. I know that he would have let me know if something had prevented him from coming. I'm worried that something has happened to him. If you happen to be going near Giran's western gate, may I ask you for a favor?<br>
-<a action="bypass -h Quest 60_GoodWorkReward 31435-03.htm">"Where were you supposed to meet him?"</a>
+<a action="bypass -h Quest Q00060_GoodWorksReward 31435-07.htm">"Where were you supposed to meet him?"</a>
 </body></html>

+ 0 - 0
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31435-00.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-03.htm


+ 5 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-04.htm

@@ -0,0 +1,5 @@
+<html><body>Blueprint Seller Daeger:<br>
+You there, adventurer!<br>
+Ah...never mind. You seem very busy. I'm sorry to have bothered you.<br>
+(Only non-Kamael characters who are level 39 or above and who have not completed the second transfer may undertake this quest.)
+</body></html>

+ 4 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-06.htm

@@ -0,0 +1,4 @@
+<html><body>Blueprint Seller Daeger:<br>
+Ah, so you are a Kamael! Very nice to meet you. I wish I had more time to talk with you, but I must go meet a friend. Perhaps we will have another chance to speak one day...<br>
+(Only non-Kamael characters who are level 39 or above and who have not completed the second transfer may undertake this quest.)
+</body></html>

+ 0 - 0
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31435-03.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-07.htm


+ 3 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-08.html

@@ -0,0 +1,3 @@
+<html><body>Blueprint Seller Daeger:<br>
+<font color="LEVEL">If you exit through the western gate, you will see a thickly wooded area near the road</font>. My friend often rests there under a tree. Perhaps he has fallen asleep. Will you check that area for me? His name is <font color="LEVEL">Mark</font>.
+</body></html>

+ 4 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-09.html

@@ -0,0 +1,4 @@
+<html><body>Blueprint Seller Daeger:<br>
+Didn't I just ask you for a favor? Did you find Mark?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward 31435-10.html">"Your friend has collapsed. It looks like he has been poisoned..."</a>
+</body></html>

+ 4 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-10.html

@@ -0,0 +1,4 @@
+<html><body>Blueprint Seller Daeger:<br>
+Did you say he was poisoned? Do you know the source of the poison?<br>
+Let's not waste time. Obviously I can't go, so you will have to help him, adventurer. If it is poison, you should be able to source an antidote from <font color="LEVEL">Grocer Helvetia</font>. See her as fast as your lungs allow, and fetch some medicine. Go!
+</body></html>

+ 0 - 0
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31435-06.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-11.html


+ 3 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-12.html

@@ -0,0 +1,3 @@
+<html><body>Blueprint Seller Daeger:<br>
+What happened to Mark? Please help him!
+</body></html>

+ 4 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-13.html

@@ -0,0 +1,4 @@
+<html><body>Blueprint Seller Daeger:<br>
+What has happened to Mark?<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward 31435-14.html">"Your friend is safe. He told me to ask you to wait here."</a>
+</body></html>

+ 1 - 1
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31435-08.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-14.html

@@ -1,4 +1,4 @@
 <html><body>Blueprint Seller Daeger:<br>
-How fortunate! I am very relieved... <br>
+How fortunate! I am very relieved...<br>
 Would you mind waiting here for a while? I will let you know when he contacts me.
 </body></html>

+ 0 - 0
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31435-09.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-15.html


+ 0 - 0
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/31435-10.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/31435-16.html


+ 4 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/32487-01.html

@@ -0,0 +1,4 @@
+<html><body>Mark:<br>
+You are...<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward 32487-04.html">"Who are you? Why are you lying here?"</a>
+</body></html>

+ 4 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/32487-02.html

@@ -0,0 +1,4 @@
+<html><body>Mark:<br>
+Hide yourself! It's dangerous here.<br>
+(Someone else has already embarked on this quest. Continue the conversation later.)
+</body></html>

+ 3 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/32487-03.html

@@ -0,0 +1,3 @@
+<html><body>Mark:<br>
+Behind you...watch out behind you!
+</body></html>

+ 0 - 0
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/32487-02.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/32487-04.html


+ 4 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/32487-05.html

@@ -0,0 +1,4 @@
+<html><body>Mark:<br>
+Uhh...<br>
+(Another is already carrying out the quest. Continue the conversation later.)
+</body></html>

+ 0 - 0
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/32487-03.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/32487-06.html


+ 0 - 0
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/32487-04.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/32487-07.html


+ 4 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/32487-09.html

@@ -0,0 +1,4 @@
+<html><body>Mark:<br>
+Uhh... Fortunately, the others haven't come for me yet. Give me the antidote! I am so weak I can't even move...<br>
+<a action="bypass -h Quest Q00060_GoodWorksReward 32487-10.html">Give him the antidote.</a>
+</body></html>

+ 0 - 0
L2J_DataPack/dist/game/data/scripts/quests/60_GoodWorkReward/32487-06.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/32487-10.html


+ 1365 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00060_GoodWorksReward/Q00060_GoodWorksReward.java

@@ -0,0 +1,1365 @@
+/*
+ * Copyright (C) 2004-2015 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.Q00060_GoodWorksReward;
+
+import quests.Q00211_TrialOfTheChallenger.Q00211_TrialOfTheChallenger;
+import quests.Q00212_TrialOfDuty.Q00212_TrialOfDuty;
+import quests.Q00213_TrialOfTheSeeker.Q00213_TrialOfTheSeeker;
+import quests.Q00214_TrialOfTheScholar.Q00214_TrialOfTheScholar;
+import quests.Q00215_TrialOfThePilgrim.Q00215_TrialOfThePilgrim;
+import quests.Q00216_TrialOfTheGuildsman.Q00216_TrialOfTheGuildsman;
+import quests.Q00217_TestimonyOfTrust.Q00217_TestimonyOfTrust;
+import quests.Q00218_TestimonyOfLife.Q00218_TestimonyOfLife;
+import quests.Q00219_TestimonyOfFate.Q00219_TestimonyOfFate;
+import quests.Q00220_TestimonyOfGlory.Q00220_TestimonyOfGlory;
+import quests.Q00221_TestimonyOfProsperity.Q00221_TestimonyOfProsperity;
+import quests.Q00222_TestOfTheDuelist.Q00222_TestOfTheDuelist;
+import quests.Q00223_TestOfTheChampion.Q00223_TestOfTheChampion;
+import quests.Q00224_TestOfSagittarius.Q00224_TestOfSagittarius;
+import quests.Q00225_TestOfTheSearcher.Q00225_TestOfTheSearcher;
+import quests.Q00226_TestOfTheHealer.Q00226_TestOfTheHealer;
+import quests.Q00228_TestOfMagus.Q00228_TestOfMagus;
+import quests.Q00229_TestOfWitchcraft.Q00229_TestOfWitchcraft;
+import quests.Q00231_TestOfTheMaestro.Q00231_TestOfTheMaestro;
+import quests.Q00232_TestOfTheLord.Q00232_TestOfTheLord;
+import quests.Q00233_TestOfTheWarSpirit.Q00233_TestOfTheWarSpirit;
+
+import com.l2jserver.gameserver.enums.CategoryType;
+import com.l2jserver.gameserver.enums.Race;
+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.itemcontainer.Inventory;
+import com.l2jserver.gameserver.model.quest.Quest;
+import com.l2jserver.gameserver.model.quest.QuestState;
+import com.l2jserver.gameserver.network.NpcStringId;
+import com.l2jserver.gameserver.network.clientpackets.Say2;
+import com.l2jserver.gameserver.network.serverpackets.NpcSay;
+import com.l2jserver.gameserver.util.Util;
+
+/**
+ * Good Work's Reward (60)
+ * @author ivantotov
+ */
+public final class Q00060_GoodWorksReward extends Quest
+{
+	// NPCs
+	private static final int GROCER_HELVERIA = 30081;
+	private static final int BLACK_MARKETEER_OF_MAMMON = 31092;
+	private static final int BLUEPRINT_SELLER_DAEGER = 31435;
+	private static final int MARK = 32487;
+	// Items
+	private static final int BLOODY_CLOTH_FRAGMENT = 10867;
+	private static final int HELVETIAS_ANTIDOTE = 10868;
+	// Reward
+	private static final int MARK_OF_CHALLENGER = 2627;
+	private static final int MARK_OF_DUTY = 2633;
+	private static final int MARK_OF_SEEKER = 2673;
+	private static final int MARK_OF_SCHOLAR = 2674;
+	private static final int MARK_OF_PILGRIM = 2721;
+	private static final int MARK_OF_TRUST = 2734;
+	private static final int MARK_OF_DUELIST = 2762;
+	private static final int MARK_OF_SEARCHER = 2809;
+	private static final int MARK_OF_HEALER = 2820;
+	private static final int MARK_OF_REFORMER = 2821;
+	private static final int MARK_OF_MAGUS = 2840;
+	private static final int MARK_OF_MAESTRO = 2867;
+	private static final int MARK_OF_WARSPIRIT = 2879;
+	private static final int MARK_OF_GUILDSMAN = 3119;
+	private static final int MARK_OF_LIFE = 3140;
+	private static final int MARK_OF_FATE = 3172;
+	private static final int MARK_OF_GLORY = 3203;
+	private static final int MARK_OF_PROSPERITY = 3238;
+	private static final int MARK_OF_CHAMPION = 3276;
+	private static final int MARK_OF_SAGITTARIUS = 3293;
+	private static final int MARK_OF_WITCHCRAFT = 3307;
+	private static final int MARK_OF_SUMMONER = 3336;
+	private static final int MARK_OF_LORD = 3390;
+	// Quest Monster
+	private static final int PURSUER = 27340;
+	// Misc
+	private static final int MIN_LEVEL = 39;
+	private static final int ONE_MILLION = 1000000;
+	private static final int TWO_MILLION = 2000000;
+	private static final int THREE_MILLION = 3000000;
+	
+	public Q00060_GoodWorksReward()
+	{
+		super(60, Q00060_GoodWorksReward.class.getSimpleName(), "Good Work's Reward");
+		addStartNpc(BLUEPRINT_SELLER_DAEGER);
+		addTalkId(BLUEPRINT_SELLER_DAEGER, GROCER_HELVERIA, BLACK_MARKETEER_OF_MAMMON, MARK);
+		addKillId(PURSUER);
+		addSpawnId(PURSUER);
+		registerQuestItems(BLOODY_CLOTH_FRAGMENT, HELVETIAS_ANTIDOTE);
+	}
+	
+	@Override
+	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+	{
+		
+		if ("DESPAWN".equals(event))
+		{
+			npc.broadcastPacket(new NpcSay(npc, Say2.NPC_ALL, NpcStringId.YOU_HAVE_GOOD_LUCK_I_SHALL_RETURN));
+			final L2Npc npc0 = npc.getVariables().getObject("npc0", L2Npc.class);
+			if (npc0 != null)
+			{
+				npc0.getVariables().set("SPAWNED", false);
+			}
+			npc.deleteMe();
+			return super.onAdvEvent(event, npc, player);
+		}
+		
+		final QuestState qs = getQuestState(player, false);
+		if (qs == null)
+		{
+			return null;
+		}
+		
+		String htmltext = null;
+		switch (event)
+		{
+			case "31435-07.htm":
+			{
+				if (qs.isCreated())
+				{
+					qs.startQuest();
+					qs.setMemoState(1);
+					htmltext = event;
+				}
+				break;
+			}
+			case "31435-02.htm":
+			{
+				htmltext = event;
+				break;
+			}
+			case "31435-10.html":
+			{
+				if (qs.isMemoState(3))
+				{
+					qs.setMemoState(4);
+					qs.setCond(4, true);
+					htmltext = event;
+				}
+				break;
+			}
+			case "31435-14.html":
+			{
+				if (qs.isMemoState(8))
+				{
+					qs.setMemoState(9);
+					qs.setCond(9, true);
+					htmltext = event;
+				}
+				break;
+			}
+			case "30081-02.html":
+			{
+				if (qs.isMemoState(4))
+				{
+					htmltext = event;
+				}
+				break;
+			}
+			case "30081-03.html":
+			{
+				if (qs.isMemoState(4))
+				{
+					takeItems(player, BLOODY_CLOTH_FRAGMENT, -1);
+					qs.setMemoState(5);
+					qs.setCond(5, true);
+					htmltext = event;
+				}
+				break;
+			}
+			case "30081-05.html":
+			{
+				final int memoState = qs.getMemoState();
+				if ((memoState >= 5) && (memoState <= 6))
+				{
+					if (getQuestItemsCount(player, Inventory.ADENA_ID) >= THREE_MILLION)
+					{
+						giveItems(player, HELVETIAS_ANTIDOTE, 1);
+						takeItems(player, Inventory.ADENA_ID, THREE_MILLION);
+						qs.setMemoState(7);
+						qs.setCond(7, true);
+						htmltext = event;
+					}
+					else
+					{
+						qs.setMemoState(6);
+						qs.setCond(6, true);
+						htmltext = "30081-06.html";
+					}
+				}
+				break;
+			}
+			case "30081-07.html":
+			{
+				if (qs.isMemoState(5))
+				{
+					qs.setMemoState(6);
+					qs.setCond(6, true);
+					htmltext = event;
+				}
+				break;
+			}
+			case "REPLY_1":
+			{
+				if (qs.isMemoState(10))
+				{
+					final QuestState q211 = player.getQuestState(Q00211_TrialOfTheChallenger.class.getSimpleName());
+					final QuestState q212 = player.getQuestState(Q00212_TrialOfDuty.class.getSimpleName());
+					final QuestState q213 = player.getQuestState(Q00213_TrialOfTheSeeker.class.getSimpleName());
+					final QuestState q214 = player.getQuestState(Q00214_TrialOfTheScholar.class.getSimpleName());
+					final QuestState q215 = player.getQuestState(Q00215_TrialOfThePilgrim.class.getSimpleName());
+					final QuestState q216 = player.getQuestState(Q00216_TrialOfTheGuildsman.class.getSimpleName());
+					final QuestState q217 = player.getQuestState(Q00217_TestimonyOfTrust.class.getSimpleName());
+					final QuestState q218 = player.getQuestState(Q00218_TestimonyOfLife.class.getSimpleName());
+					final QuestState q219 = player.getQuestState(Q00219_TestimonyOfFate.class.getSimpleName());
+					final QuestState q220 = player.getQuestState(Q00220_TestimonyOfGlory.class.getSimpleName());
+					final QuestState q221 = player.getQuestState(Q00221_TestimonyOfProsperity.class.getSimpleName());
+					final QuestState q222 = player.getQuestState(Q00222_TestOfTheDuelist.class.getSimpleName());
+					final QuestState q223 = player.getQuestState(Q00223_TestOfTheChampion.class.getSimpleName());
+					final QuestState q224 = player.getQuestState(Q00224_TestOfSagittarius.class.getSimpleName());
+					final QuestState q225 = player.getQuestState(Q00225_TestOfTheSearcher.class.getSimpleName());
+					final QuestState q226 = player.getQuestState(Q00226_TestOfTheHealer.class.getSimpleName());
+					final QuestState q227 = player.getQuestState("227_TestOfReformer");
+					final QuestState q228 = player.getQuestState(Q00228_TestOfMagus.class.getSimpleName());
+					final QuestState q229 = player.getQuestState(Q00229_TestOfWitchcraft.class.getSimpleName());
+					final QuestState q230 = player.getQuestState("230_TestOfSummoner");
+					final QuestState q231 = player.getQuestState(Q00231_TestOfTheMaestro.class.getSimpleName());
+					final QuestState q232 = player.getQuestState(Q00232_TestOfTheLord.class.getSimpleName());
+					final QuestState q233 = player.getQuestState(Q00233_TestOfTheWarSpirit.class.getSimpleName());
+					if (((q211 != null) && q211.isCompleted()) || ((q212 != null) && q212.isCompleted()) || ((q213 != null) && q213.isCompleted()) || ((q214 != null) && q214.isCompleted()) || ((q215 != null) && q215.isCompleted()) || ((q216 != null) && q216.isCompleted()))
+					{
+						if (((q217 != null) && q217.isCompleted()) || ((q218 != null) && q218.isCompleted()) || ((q219 != null) && q219.isCompleted()) || ((q220 != null) && q220.isCompleted()) || ((q221 != null) && q221.isCompleted()))
+						{
+							
+							if (((q222 != null) && q222.isCompleted()) || ((q223 != null) && q223.isCompleted()) || ((q224 != null) && q224.isCompleted()) || ((q225 != null) && q225.isCompleted()) || ((q226 != null) && q226.isCompleted()) || ((q227 != null) && q227.isCompleted()) || ((q228 != null) && q228.isCompleted()) || ((q229 != null) && q229.isCompleted()) || ((q230 != null) && q230.isCompleted()) || ((q231 != null) && q231.isCompleted()) || ((q232 != null) && q232.isCompleted()) || ((q233 != null) && q233.isCompleted()))
+							{
+								qs.setMemoStateEx(1, 3);
+							}
+							else
+							{
+								qs.setMemoStateEx(1, 2);
+							}
+						}
+						else if (((q222 != null) && q222.isCompleted()) || ((q223 != null) && q223.isCompleted()) || ((q224 != null) && q224.isCompleted()) || ((q225 != null) && q225.isCompleted()) || ((q226 != null) && q226.isCompleted()) || ((q227 != null) && q227.isCompleted()) || ((q228 != null) && q228.isCompleted()) || ((q229 != null) && q229.isCompleted()) || ((q230 != null) && q230.isCompleted()) || ((q231 != null) && q231.isCompleted()) || ((q232 != null) && q232.isCompleted()) || ((q233 != null) && q233.isCompleted()))
+						{
+							qs.setMemoStateEx(1, 2);
+						}
+						else
+						{
+							qs.setMemoStateEx(1, 1);
+						}
+					}
+					else if (((q217 != null) && q217.isCompleted()) || ((q218 != null) && q218.isCompleted()) || ((q219 != null) && q219.isCompleted()) || ((q220 != null) && q220.isCompleted()) || ((q221 != null) && q221.isCompleted()))
+					{
+						if (((q222 != null) && q222.isCompleted()) || ((q223 != null) && q223.isCompleted()) || ((q224 != null) && q224.isCompleted()) || ((q225 != null) && q225.isCompleted()) || ((q226 != null) && q226.isCompleted()) || ((q227 != null) && q227.isCompleted()) || ((q228 != null) && q228.isCompleted()) || ((q229 != null) && q229.isCompleted()) || ((q230 != null) && q230.isCompleted()) || ((q231 != null) && q231.isCompleted()) || ((q232 != null) && q232.isCompleted()) || ((q233 != null) && q233.isCompleted()))
+						{
+							qs.setMemoStateEx(1, 2);
+						}
+						else
+						{
+							qs.setMemoStateEx(1, 1);
+						}
+					}
+					else if (((q222 != null) && q222.isCompleted()) || ((q223 != null) && q223.isCompleted()) || ((q224 != null) && q224.isCompleted()) || ((q225 != null) && q225.isCompleted()) || ((q226 != null) && q226.isCompleted()) || ((q227 != null) && q227.isCompleted()) || ((q228 != null) && q228.isCompleted()) || ((q229 != null) && q229.isCompleted()) || ((q230 != null) && q230.isCompleted()) || ((q231 != null) && q231.isCompleted()) || ((q232 != null) && q232.isCompleted()) || ((q233 != null) && q233.isCompleted()))
+					{
+						qs.setMemoStateEx(1, 1);
+					}
+					htmltext = "31092-02.html";
+				}
+				break;
+			}
+			case "REPLY_2":
+			{
+				if (qs.isMemoState(10))
+				{
+					if (qs.getMemoStateEx(1) >= 3)
+					{
+						htmltext = "31092-03b.html";
+					}
+					else if (qs.getMemoStateEx(1) >= 1)
+					{
+						htmltext = "31092-03.html";
+					}
+					else
+					{
+						htmltext = "31092-03a.html";
+					}
+				}
+				break;
+			}
+			case "REPLY_3":
+			{
+				if (qs.isMemoState(10))
+				{
+					if (qs.getMemoStateEx(1) >= 3)
+					{
+						giveItems(player, Inventory.ADENA_ID, THREE_MILLION);
+						htmltext = "31092-04a.html";
+					}
+					else if (qs.getMemoStateEx(1) == 2)
+					{
+						giveItems(player, Inventory.ADENA_ID, TWO_MILLION);
+						htmltext = "31092-04b.html";
+					}
+					else if (qs.getMemoStateEx(1) == 1)
+					{
+						giveItems(player, Inventory.ADENA_ID, ONE_MILLION);
+						htmltext = "31092-04b.html";
+					}
+					qs.exitQuest(false, true);
+				}
+				break;
+			}
+			case "REPLY_4":
+			{
+				if (qs.isMemoState(10))
+				{
+					if ((player.getClassId() == ClassId.warrior))
+					{
+						htmltext = "31092-05.html";
+					}
+					else if ((player.getClassId() == ClassId.knight))
+					{
+						htmltext = "31092-06.html";
+					}
+					else if ((player.getClassId() == ClassId.rogue))
+					{
+						htmltext = "31092-07.html";
+					}
+					else if ((player.getClassId() == ClassId.wizard))
+					{
+						htmltext = "31092-08.html";
+					}
+					else if ((player.getClassId() == ClassId.cleric))
+					{
+						htmltext = "31092-09.html";
+					}
+					else if ((player.getClassId() == ClassId.elvenKnight))
+					{
+						htmltext = "31092-10.html";
+					}
+					else if ((player.getClassId() == ClassId.elvenScout))
+					{
+						htmltext = "31092-11.html";
+					}
+					else if ((player.getClassId() == ClassId.elvenWizard))
+					{
+						htmltext = "31092-12.html";
+					}
+					else if ((player.getClassId() == ClassId.oracle))
+					{
+						htmltext = "31092-13.html";
+					}
+					else if ((player.getClassId() == ClassId.palusKnight))
+					{
+						htmltext = "31092-14.html";
+					}
+					else if ((player.getClassId() == ClassId.assassin))
+					{
+						htmltext = "31092-15.html";
+					}
+					else if ((player.getClassId() == ClassId.darkWizard))
+					{
+						htmltext = "31092-16.html";
+					}
+					else if ((player.getClassId() == ClassId.shillienOracle))
+					{
+						htmltext = "31092-17.html";
+					}
+					else if ((player.getClassId() == ClassId.orcRaider))
+					{
+						htmltext = "31092-18.html";
+					}
+					else if ((player.getClassId() == ClassId.orcMonk))
+					{
+						htmltext = "31092-19.html";
+					}
+					else if ((player.getClassId() == ClassId.orcShaman))
+					{
+						htmltext = "31092-20.html";
+					}
+					else if ((player.getClassId() == ClassId.scavenger))
+					{
+						htmltext = "31092-21.html";
+					}
+					else if ((player.getClassId() == ClassId.artisan))
+					{
+						htmltext = "31092-22.html";
+					}
+					qs.exitQuest(false, true);
+				}
+			}
+			case "REPLY_5":
+			{
+				if (player.isInCategory(CategoryType.SECOND_CLASS_GROUP))
+				{
+					if ((player.getClassId() == ClassId.warrior))
+					{
+						htmltext = "31092-05a.html";
+					}
+					else if ((player.getClassId() == ClassId.knight))
+					{
+						htmltext = "31092-06a.html";
+					}
+					else if ((player.getClassId() == ClassId.rogue))
+					{
+						htmltext = "31092-07a.html";
+					}
+					else if ((player.getClassId() == ClassId.wizard))
+					{
+						htmltext = "31092-08a.html";
+					}
+					else if ((player.getClassId() == ClassId.cleric))
+					{
+						htmltext = "31092-09a.html";
+					}
+					else if ((player.getClassId() == ClassId.elvenKnight))
+					{
+						htmltext = "31092-10a.html";
+					}
+					else if ((player.getClassId() == ClassId.elvenScout))
+					{
+						htmltext = "31092-11a.html";
+					}
+					else if ((player.getClassId() == ClassId.elvenWizard))
+					{
+						htmltext = "31092-12a.html";
+					}
+					else if ((player.getClassId() == ClassId.oracle))
+					{
+						htmltext = "31092-13a.html";
+					}
+					else if ((player.getClassId() == ClassId.palusKnight))
+					{
+						htmltext = "31092-14a.html";
+					}
+					else if ((player.getClassId() == ClassId.assassin))
+					{
+						htmltext = "31092-15a.html";
+					}
+					else if ((player.getClassId() == ClassId.darkWizard))
+					{
+						htmltext = "31092-16a.html";
+					}
+					else if ((player.getClassId() == ClassId.shillienOracle))
+					{
+						htmltext = "31092-17a.html";
+					}
+					else if ((player.getClassId() == ClassId.orcRaider))
+					{
+						htmltext = "31092-18a.html";
+					}
+					else if ((player.getClassId() == ClassId.orcMonk))
+					{
+						htmltext = "31092-19a.html";
+					}
+					else if ((player.getClassId() == ClassId.orcShaman))
+					{
+						htmltext = "31092-20a.html";
+					}
+					else if ((player.getClassId() == ClassId.scavenger))
+					{
+						htmltext = "31092-21a.html";
+					}
+					else if ((player.getClassId() == ClassId.artisan))
+					{
+						htmltext = "31092-22a.html";
+					}
+				}
+			}
+			case "REPLY_6":
+			{
+				if ((player.getClassId() == ClassId.warrior))
+				{
+					if (!hasQuestItems(player, MARK_OF_CHALLENGER))
+					{
+						giveItems(player, MARK_OF_CHALLENGER, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_TRUST))
+					{
+						giveItems(player, MARK_OF_TRUST, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_DUELIST))
+					{
+						giveItems(player, MARK_OF_DUELIST, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_7":
+			{
+				if ((player.getClassId() == ClassId.warrior))
+				{
+					if (!hasQuestItems(player, MARK_OF_CHALLENGER))
+					{
+						giveItems(player, MARK_OF_CHALLENGER, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_TRUST))
+					{
+						giveItems(player, MARK_OF_TRUST, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_CHAMPION))
+					{
+						giveItems(player, MARK_OF_CHAMPION, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_8":
+			{
+				if ((player.getClassId() == ClassId.knight))
+				{
+					if (!hasQuestItems(player, MARK_OF_DUTY))
+					{
+						giveItems(player, MARK_OF_DUTY, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_TRUST))
+					{
+						giveItems(player, MARK_OF_TRUST, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_HEALER))
+					{
+						giveItems(player, MARK_OF_HEALER, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_9":
+			{
+				if ((player.getClassId() == ClassId.knight))
+				{
+					if (!hasQuestItems(player, MARK_OF_DUTY))
+					{
+						giveItems(player, MARK_OF_DUTY, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_TRUST))
+					{
+						giveItems(player, MARK_OF_TRUST, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_WITCHCRAFT))
+					{
+						giveItems(player, MARK_OF_WITCHCRAFT, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_10":
+			{
+				if ((player.getClassId() == ClassId.rogue))
+				{
+					if (!hasQuestItems(player, MARK_OF_SEEKER))
+					{
+						giveItems(player, MARK_OF_SEEKER, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_TRUST))
+					{
+						giveItems(player, MARK_OF_TRUST, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_SEARCHER))
+					{
+						giveItems(player, MARK_OF_SEARCHER, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_11":
+			{
+				if ((player.getClassId() == ClassId.rogue))
+				{
+					if (!hasQuestItems(player, MARK_OF_SEEKER))
+					{
+						giveItems(player, MARK_OF_SEEKER, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_TRUST))
+					{
+						giveItems(player, MARK_OF_TRUST, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_SAGITTARIUS))
+					{
+						giveItems(player, MARK_OF_SAGITTARIUS, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_12":
+			{
+				if ((player.getClassId() == ClassId.wizard))
+				{
+					if (!hasQuestItems(player, MARK_OF_SCHOLAR))
+					{
+						giveItems(player, MARK_OF_SCHOLAR, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_TRUST))
+					{
+						giveItems(player, MARK_OF_TRUST, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_MAGUS))
+					{
+						giveItems(player, MARK_OF_MAGUS, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_13":
+			{
+				if ((player.getClassId() == ClassId.wizard))
+				{
+					if (!hasQuestItems(player, MARK_OF_SCHOLAR))
+					{
+						giveItems(player, MARK_OF_SCHOLAR, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_TRUST))
+					{
+						giveItems(player, MARK_OF_TRUST, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_WITCHCRAFT))
+					{
+						giveItems(player, MARK_OF_WITCHCRAFT, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_14":
+			{
+				if ((player.getClassId() == ClassId.wizard))
+				{
+					if (!hasQuestItems(player, MARK_OF_SCHOLAR))
+					{
+						giveItems(player, MARK_OF_SCHOLAR, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_TRUST))
+					{
+						giveItems(player, MARK_OF_TRUST, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_SUMMONER))
+					{
+						giveItems(player, MARK_OF_SUMMONER, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_15":
+			{
+				if ((player.getClassId() == ClassId.cleric))
+				{
+					if (!hasQuestItems(player, MARK_OF_PILGRIM))
+					{
+						giveItems(player, MARK_OF_PILGRIM, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_TRUST))
+					{
+						giveItems(player, MARK_OF_TRUST, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_HEALER))
+					{
+						giveItems(player, MARK_OF_HEALER, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_16":
+			{
+				if ((player.getClassId() == ClassId.cleric))
+				{
+					if (!hasQuestItems(player, MARK_OF_PILGRIM))
+					{
+						giveItems(player, MARK_OF_PILGRIM, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_TRUST))
+					{
+						giveItems(player, MARK_OF_TRUST, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_REFORMER))
+					{
+						giveItems(player, MARK_OF_REFORMER, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_17":
+			{
+				if ((player.getClassId() == ClassId.elvenKnight))
+				{
+					if (!hasQuestItems(player, MARK_OF_DUTY))
+					{
+						giveItems(player, MARK_OF_DUTY, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_LIFE))
+					{
+						giveItems(player, MARK_OF_LIFE, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_HEALER))
+					{
+						giveItems(player, MARK_OF_HEALER, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_18":
+			{
+				if ((player.getClassId() == ClassId.elvenKnight))
+				{
+					if (!hasQuestItems(player, MARK_OF_CHALLENGER))
+					{
+						giveItems(player, MARK_OF_CHALLENGER, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_LIFE))
+					{
+						giveItems(player, MARK_OF_LIFE, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_DUELIST))
+					{
+						giveItems(player, MARK_OF_DUELIST, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_19":
+			{
+				if ((player.getClassId() == ClassId.elvenScout))
+				{
+					if (!hasQuestItems(player, MARK_OF_SEEKER))
+					{
+						giveItems(player, MARK_OF_SEEKER, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_LIFE))
+					{
+						giveItems(player, MARK_OF_LIFE, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_SEARCHER))
+					{
+						giveItems(player, MARK_OF_SEARCHER, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_20":
+			{
+				if ((player.getClassId() == ClassId.elvenScout))
+				{
+					if (!hasQuestItems(player, MARK_OF_SEEKER))
+					{
+						giveItems(player, MARK_OF_SEEKER, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_LIFE))
+					{
+						giveItems(player, MARK_OF_LIFE, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_SAGITTARIUS))
+					{
+						giveItems(player, MARK_OF_SAGITTARIUS, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_21":
+			{
+				if ((player.getClassId() == ClassId.elvenWizard))
+				{
+					if (!hasQuestItems(player, MARK_OF_SCHOLAR))
+					{
+						giveItems(player, MARK_OF_SCHOLAR, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_LIFE))
+					{
+						giveItems(player, MARK_OF_LIFE, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_MAGUS))
+					{
+						giveItems(player, MARK_OF_MAGUS, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_22":
+			{
+				if ((player.getClassId() == ClassId.elvenWizard))
+				{
+					if (!hasQuestItems(player, MARK_OF_SCHOLAR))
+					{
+						giveItems(player, MARK_OF_SCHOLAR, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_LIFE))
+					{
+						giveItems(player, MARK_OF_LIFE, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_SUMMONER))
+					{
+						giveItems(player, MARK_OF_SUMMONER, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_23":
+			{
+				if ((player.getClassId() == ClassId.oracle))
+				{
+					if (!hasQuestItems(player, MARK_OF_PILGRIM))
+					{
+						giveItems(player, MARK_OF_PILGRIM, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_LIFE))
+					{
+						giveItems(player, MARK_OF_LIFE, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_HEALER))
+					{
+						giveItems(player, MARK_OF_HEALER, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_24":
+			{
+				if ((player.getClassId() == ClassId.palusKnight))
+				{
+					if (!hasQuestItems(player, MARK_OF_DUTY))
+					{
+						giveItems(player, MARK_OF_DUTY, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_FATE))
+					{
+						giveItems(player, MARK_OF_FATE, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_WITCHCRAFT))
+					{
+						giveItems(player, MARK_OF_WITCHCRAFT, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_25":
+			{
+				if ((player.getClassId() == ClassId.palusKnight))
+				{
+					if (!hasQuestItems(player, MARK_OF_CHALLENGER))
+					{
+						giveItems(player, MARK_OF_CHALLENGER, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_FATE))
+					{
+						giveItems(player, MARK_OF_FATE, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_DUELIST))
+					{
+						giveItems(player, MARK_OF_DUELIST, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_26":
+			{
+				if ((player.getClassId() == ClassId.assassin))
+				{
+					if (!hasQuestItems(player, MARK_OF_SEEKER))
+					{
+						giveItems(player, MARK_OF_SEEKER, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_FATE))
+					{
+						giveItems(player, MARK_OF_FATE, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_SEARCHER))
+					{
+						giveItems(player, MARK_OF_SEARCHER, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_27":
+			{
+				if ((player.getClassId() == ClassId.assassin))
+				{
+					if (!hasQuestItems(player, MARK_OF_SEEKER))
+					{
+						giveItems(player, MARK_OF_SEEKER, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_FATE))
+					{
+						giveItems(player, MARK_OF_FATE, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_SAGITTARIUS))
+					{
+						giveItems(player, MARK_OF_SAGITTARIUS, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_28":
+			{
+				if ((player.getClassId() == ClassId.darkWizard))
+				{
+					if (!hasQuestItems(player, MARK_OF_SCHOLAR))
+					{
+						giveItems(player, MARK_OF_SCHOLAR, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_FATE))
+					{
+						giveItems(player, MARK_OF_FATE, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_MAGUS))
+					{
+						giveItems(player, MARK_OF_MAGUS, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_29":
+			{
+				if ((player.getClassId() == ClassId.darkWizard))
+				{
+					if (!hasQuestItems(player, MARK_OF_SCHOLAR))
+					{
+						giveItems(player, MARK_OF_SCHOLAR, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_FATE))
+					{
+						giveItems(player, MARK_OF_FATE, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_SUMMONER))
+					{
+						giveItems(player, MARK_OF_SUMMONER, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_30":
+			{
+				if ((player.getClassId() == ClassId.shillienOracle))
+				{
+					if (!hasQuestItems(player, MARK_OF_PILGRIM))
+					{
+						giveItems(player, MARK_OF_PILGRIM, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_FATE))
+					{
+						giveItems(player, MARK_OF_FATE, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_REFORMER))
+					{
+						giveItems(player, MARK_OF_REFORMER, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_31":
+			{
+				if ((player.getClassId() == ClassId.orcRaider))
+				{
+					if (!hasQuestItems(player, MARK_OF_CHALLENGER))
+					{
+						giveItems(player, MARK_OF_CHALLENGER, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_GLORY))
+					{
+						giveItems(player, MARK_OF_GLORY, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_CHAMPION))
+					{
+						giveItems(player, MARK_OF_CHAMPION, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_32":
+			{
+				if ((player.getClassId() == ClassId.orcMonk))
+				{
+					if (!hasQuestItems(player, MARK_OF_CHALLENGER))
+					{
+						giveItems(player, MARK_OF_CHALLENGER, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_GLORY))
+					{
+						giveItems(player, MARK_OF_GLORY, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_DUELIST))
+					{
+						giveItems(player, MARK_OF_DUELIST, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_33":
+			{
+				if ((player.getClassId() == ClassId.orcShaman))
+				{
+					if (!hasQuestItems(player, MARK_OF_PILGRIM))
+					{
+						giveItems(player, MARK_OF_PILGRIM, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_GLORY))
+					{
+						giveItems(player, MARK_OF_GLORY, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_LORD))
+					{
+						giveItems(player, MARK_OF_LORD, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_34":
+			{
+				if ((player.getClassId() == ClassId.orcShaman))
+				{
+					if (!hasQuestItems(player, MARK_OF_PILGRIM))
+					{
+						giveItems(player, MARK_OF_PILGRIM, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_GLORY))
+					{
+						giveItems(player, MARK_OF_GLORY, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_WARSPIRIT))
+					{
+						giveItems(player, MARK_OF_WARSPIRIT, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_35":
+			{
+				if ((player.getClassId() == ClassId.scavenger))
+				{
+					if (!hasQuestItems(player, MARK_OF_GUILDSMAN))
+					{
+						giveItems(player, MARK_OF_GUILDSMAN, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_PROSPERITY))
+					{
+						giveItems(player, MARK_OF_PROSPERITY, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_SEARCHER))
+					{
+						giveItems(player, MARK_OF_SEARCHER, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "REPLY_36":
+			{
+				if ((player.getClassId() == ClassId.artisan))
+				{
+					if (!hasQuestItems(player, MARK_OF_GUILDSMAN))
+					{
+						giveItems(player, MARK_OF_GUILDSMAN, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_PROSPERITY))
+					{
+						giveItems(player, MARK_OF_PROSPERITY, 1);
+					}
+					if (!hasQuestItems(player, MARK_OF_MAESTRO))
+					{
+						giveItems(player, MARK_OF_MAESTRO, 1);
+					}
+					htmltext = "31092-25.html";
+				}
+				break;
+			}
+			case "32487-04.html":
+			{
+				if (qs.isMemoState(1))
+				{
+					if (!npc.getVariables().getBoolean("SPAWNED", false))
+					{
+						npc.getVariables().set("SPAWNED", true);
+						npc.getVariables().set("PLAYER_ID", player.getObjectId());
+						final L2Npc pursuer = addSpawn(PURSUER, player.getX() + 20, player.getY() + 20, player.getZ(), 0, false, 0);
+						pursuer.getVariables().set("PLAYER_ID", player.getObjectId());
+						pursuer.getVariables().set("npc0", npc);
+						pursuer.getVariables().set("player0", player);
+						addAttackPlayerDesire(pursuer, player);
+						htmltext = event;
+					}
+					else
+					{
+						htmltext = "32487-05.html";
+					}
+				}
+				break;
+			}
+			case "32487-10.html":
+			{
+				if (qs.isMemoState(7))
+				{
+					takeItems(player, HELVETIAS_ANTIDOTE, 1);
+					qs.setMemoState(8);
+					qs.setCond(8, true);
+					if (npc.getVariables().getBoolean("SPAWNED", true))
+					{
+						npc.getVariables().set("SPAWNED", false);
+					}
+					htmltext = event;
+				}
+				break;
+			}
+		}
+		return htmltext;
+	}
+	
+	@Override
+	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
+	{
+		final QuestState qs = getQuestState(killer, false);
+		if ((qs != null) && qs.isStarted() && Util.checkIfInRange(1500, npc, killer, true))
+		{
+			if (qs.isMemoState(1))
+			{
+				if (killer.isPlayer())
+				{
+					if (killer.getObjectId() == npc.getVariables().getInt("PLAYER_ID", 0))
+					{
+						qs.setMemoState(2);
+						qs.setCond(2, true);
+						npc.broadcastPacket(new NpcSay(npc, Say2.NPC_ALL, NpcStringId.YOU_ARE_STRONG_THIS_WAS_A_MISTAKE));
+					}
+					else
+					{
+						npc.broadcastPacket(new NpcSay(npc, Say2.NPC_ALL, NpcStringId.WHO_ARE_YOU_TO_JOIN_IN_THE_BATTLE_HOW_UPSETTING));
+					}
+				}
+			}
+			final L2Npc npc0 = npc.getVariables().getObject("npc0", L2Npc.class);
+			if (npc0 != null)
+			{
+				npc0.getVariables().set("SPAWNED", false);
+			}
+		}
+		return super.onKill(npc, killer, isSummon);
+	}
+	
+	@Override
+	public String onTalk(L2Npc npc, L2PcInstance player)
+	{
+		final QuestState qs = getQuestState(player, true);
+		final int memoState = qs.getMemoState();
+		String htmltext = getNoQuestMsg(player);
+		if (qs.isCreated())
+		{
+			if (npc.getId() == BLUEPRINT_SELLER_DAEGER)
+			{
+				if (player.getRace() != Race.KAMAEL)
+				{
+					if (player.isInCategory(CategoryType.SECOND_CLASS_GROUP))
+					{
+						htmltext = (player.getLevel() >= MIN_LEVEL) ? "31435-01.htm" : "31435-03.htm";
+					}
+					else
+					{
+						htmltext = "31435-04.htm";
+					}
+				}
+				else
+				{
+					htmltext = "31435-06.htm";
+				}
+			}
+		}
+		else if (qs.isStarted())
+		{
+			switch (npc.getId())
+			{
+				case BLUEPRINT_SELLER_DAEGER:
+				{
+					if (memoState <= 2)
+					{
+						htmltext = "31435-08.html";
+					}
+					else if (memoState == 3)
+					{
+						htmltext = "31435-09.html";
+					}
+					else if (memoState == 4)
+					{
+						htmltext = "31435-11.html";
+					}
+					else if ((memoState > 4) && (memoState < 8))
+					{
+						htmltext = "31435-12.html";
+					}
+					else if (memoState == 8)
+					{
+						htmltext = "31435-13.html";
+					}
+					else if (memoState == 9)
+					{
+						qs.setMemoState(10);
+						qs.setCond(10, true);
+						htmltext = "31435-15.html";
+					}
+					else if (memoState == 10)
+					{
+						htmltext = "31435-16.html";
+					}
+					break;
+				}
+				case GROCER_HELVERIA:
+				{
+					if (memoState == 4)
+					{
+						htmltext = "30081-01.html";
+					}
+					else if (memoState == 5)
+					{
+						htmltext = "30081-04.html";
+					}
+					else if (memoState == 6)
+					{
+						htmltext = "30081-08.html";
+					}
+					else if (memoState == 7)
+					{
+						if (!hasQuestItems(player, HELVETIAS_ANTIDOTE))
+						{
+							giveItems(player, HELVETIAS_ANTIDOTE, 1);
+							htmltext = "30081-09.html";
+						}
+						else
+						{
+							htmltext = "30081-10.html";
+						}
+					}
+					break;
+				}
+				case BLACK_MARKETEER_OF_MAMMON:
+				{
+					if (memoState == 10)
+					{
+						if (player.isInCategory(CategoryType.SECOND_CLASS_GROUP))
+						{
+							qs.setMemoStateEx(1, 0);
+							htmltext = "31092-01.html";
+						}
+						else
+						{
+							giveItems(player, Inventory.ADENA_ID, THREE_MILLION);
+							qs.exitQuest(false, true);
+							htmltext = "31092-01a.html";
+						}
+					}
+					break;
+				}
+				case MARK:
+				{
+					if (memoState == 1)
+					{
+						if (!npc.getVariables().getBoolean("SPAWNED", false))
+						{
+							htmltext = "32487-01.html";
+						}
+						else if (npc.getVariables().getBoolean("SPAWNED", true) && (npc.getVariables().getInt("PLAYER_ID", 0) == player.getObjectId()))
+						{
+							htmltext = "32487-03.html";
+						}
+						else if (npc.getVariables().getBoolean("SPAWNED", true))
+						{
+							htmltext = "32487-02.html";
+						}
+					}
+					else if (memoState == 2)
+					{
+						giveItems(player, BLOODY_CLOTH_FRAGMENT, 1);
+						qs.setMemoState(3);
+						qs.setCond(3, true);
+						htmltext = "32487-06.html";
+					}
+					else if ((memoState >= 3) && (memoState < 7))
+					{
+						htmltext = "32487-07.html";
+					}
+					else if (memoState == 7)
+					{
+						htmltext = "32487-09.html";
+					}
+					break;
+				}
+			}
+		}
+		else if (qs.isCompleted())
+		{
+			if (npc.getId() == BLUEPRINT_SELLER_DAEGER)
+			{
+				htmltext = getAlreadyCompletedMsg(player);
+			}
+			else if (npc.getId() == BLACK_MARKETEER_OF_MAMMON)
+			{
+				if (player.isInCategory(CategoryType.SECOND_CLASS_GROUP))
+				{
+					htmltext = "31092-23.html";
+				}
+				else
+				{
+					htmltext = "31092-24.html";
+				}
+			}
+		}
+		return htmltext;
+	}
+	
+	@Override
+	public String onSpawn(L2Npc npc)
+	{
+		startQuestTimer("DESPAWN", 60000, npc, null);
+		final L2PcInstance player = npc.getVariables().getObject("player0", L2PcInstance.class);
+		if (player != null)
+		{
+			if (player.isPlayer())
+			{
+				npc.broadcastPacket(new NpcSay(npc, Say2.NPC_ALL, NpcStringId.S1_I_MUST_KILL_YOU_BLAME_YOUR_OWN_CURIOSITY).addStringParameter(player.getAppearance().getVisibleName()));
+			}
+		}
+		return super.onSpawn(npc);
+	}
+}

+ 2 - 0
L2J_DataPack/dist/game/data/scripts/quests/QuestMasterHandler.java

@@ -71,6 +71,7 @@ import quests.Q00050_LanoscosSpecialBait.Q00050_LanoscosSpecialBait;
 import quests.Q00051_OFullesSpecialBait.Q00051_OFullesSpecialBait;
 import quests.Q00052_WilliesSpecialBait.Q00052_WilliesSpecialBait;
 import quests.Q00053_LinnaeusSpecialBait.Q00053_LinnaeusSpecialBait;
+import quests.Q00060_GoodWorksReward.Q00060_GoodWorksReward;
 import quests.Q00061_LawEnforcement.Q00061_LawEnforcement;
 import quests.Q00062_PathOfTheTrooper.Q00062_PathOfTheTrooper;
 import quests.Q00063_PathOfTheWarder.Q00063_PathOfTheWarder;
@@ -536,6 +537,7 @@ public class QuestMasterHandler
 		Q00051_OFullesSpecialBait.class,
 		Q00052_WilliesSpecialBait.class,
 		Q00053_LinnaeusSpecialBait.class,
+		Q00060_GoodWorksReward.class,
 		Q00061_LawEnforcement.class,
 		Q00062_PathOfTheTrooper.class,
 		Q00063_PathOfTheWarder.class,

+ 1 - 0
L2J_DataPack/dist/sql/game/updates/20150120update.sql

@@ -0,0 +1 @@
+UPDATE character_quests SET name='Q00060_GoodWorksReward' WHERE name='60_GoodWorkReward';