Ver Fonte

Retail-like quest Shrieks of Ghosts (371).

Adry_85 há 10 anos atrás
pai
commit
9c43f3e224
28 ficheiros alterados com 305 adições e 169 exclusões
  1. 0 1
      L2J_DataPack/dist/game/data/scripts.cfg
  2. 0 7
      L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30867-05.htm
  3. 0 4
      L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30929-01.htm
  4. 0 2
      L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30929-02.htm
  5. 0 3
      L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30929-04.htm
  6. 0 3
      L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30929-06.htm
  7. 0 126
      L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/__init__.py
  8. 5 3
      L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30867-01.htm
  9. 2 1
      L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30867-02.htm
  10. 3 2
      L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30867-03.html
  11. 7 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30867-04.html
  12. 2 1
      L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30867-05.html
  13. 3 2
      L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30867-06.html
  14. 4 3
      L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30867-07.html
  15. 2 1
      L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30867-08.html
  16. 2 1
      L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30867-09.html
  17. 4 3
      L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30867-10.html
  18. 5 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30929-01.html
  19. 3 3
      L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30929-02.html
  20. 3 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30929-03.html
  21. 2 1
      L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30929-04.html
  22. 6 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30929-05.html
  23. 2 1
      L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30929-06.html
  24. 6 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30929-07.html
  25. 2 1
      L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30929-08.html
  26. 239 0
      L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/Q00371_ShrieksOfGhosts.java
  27. 2 0
      L2J_DataPack/dist/game/data/scripts/quests/QuestMasterHandler.java
  28. 1 0
      L2J_DataPack/dist/sql/game/updates/20141112update.sql

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

@@ -247,7 +247,6 @@ quests/343_UnderTheShadowOfTheIvoryTower/__init__.py
 quests/345_MethodToRaiseTheDead/__init__.py
 quests/348_ArrogantSearch/__init__.py
 quests/351_BlackSwan/__init__.py
-quests/371_ShriekOfGhosts/__init__.py
 quests/372_LegacyOfInsolence/__init__.py
 quests/373_SupplierOfReagents/__init__.py
 quests/379_FantasyWine/__init__.py

+ 0 - 7
L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30867-05.htm

@@ -1,7 +0,0 @@
-<html><body>Seer Reva:<br>
-Congratulations on your safe return, young soldier! Word has come that the tower has become a chaotic entanglement of angels and demons. I trust that you have recovered many of the <font color="LEVEL">Ancient Ash Urns</font> from Hallate's warriors, knights and commanders!<br>
-The <font color="LEVEL">Ancient Porcelain</font> you brought doesn't contain any remains. It was only used for decoration! It's no good to me, you can keep it for yourself! Either sell it at a store or take it to <font color="LEVEL">antique dealer Patrin</font>! He is at the general store in Oren Castle Town.<br>
-<a action="bypass -h Quest 371_ShriekOfGhosts TRADE">Hand over the Ancient Ash Urns.</a><br>
-<a action="bypass -h Quest 371_ShriekOfGhosts 30867-09.htm">Settle the account later.</a><br>
-<a action="bypass -h Quest 371_ShriekOfGhosts 30867-10.htm">"I want to quit."</a>
-</body></html>

+ 0 - 4
L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30929-01.htm

@@ -1,4 +0,0 @@
-<html><body>Antique Dealer Patrin:<br>
-It has come to my attention that the Orc seer Reva of Aden Castle Town is collecting Ancient Ash Urns. I asked him to give them to me so that I could sell them for a handsome price to antique collectors. He refused my offer, insisting that he needed them for a ritual! He promised me that if he finds an urn that does not contain any remains he would send it to me. Have you brought me such an item?<br>
-<a action="bypass -h Quest 371_ShriekOfGhosts 30929-01a.htm">"Tell me about the appraisal."</a><br>
-<a action="bypass -h Quest 371_ShriekOfGhosts APPR">"Please appraise the urn."</a></body></html>

+ 0 - 2
L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30929-02.htm

@@ -1,2 +0,0 @@
-<html><body>Antique Dealder Patrin:<br>
-What's the big idea, coming to me empty-handed for an appraisal? Are you crazy or is this some kind of a joke?</body></html>

+ 0 - 3
L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30929-04.htm

@@ -1,3 +0,0 @@
-<html><body>Antique Dealer Patrin:<br>
-Just a moment... Let me get my glasses...<br>What have we here, hmm? Hmm...<br>
-Oh my! Indeed!<br>You've found a <font color="LEVEL">high grade</font> porcelain. It has been glazed to make it shiny. Most likely it decorated the home of an Elmoreden aristocrat... It will fetch a good price at any store.</body></html>

+ 0 - 3
L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30929-06.htm

@@ -1,3 +0,0 @@
-<html><body>Antique Dealer Patrin:<br>
-Just a moment... Let me get my glasses...<br>Now, what have we here, hmm...<br>
-Oh my!<br>This is the <font color="LEVEL">lowest grade</font> porcelain I've ever seen! Look at the large crack on the side. Do you see it? The texture is very crude, made from coarse clay... Sorry to disappoint you, but it is practically worthless...</body></html>

+ 0 - 126
L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/__init__.py

@@ -1,126 +0,0 @@
-# Contributed by t0rm3nt0r to the Official L2J Datapack Project.
-
-import sys
-from com.l2jserver.gameserver.model.quest import State
-from com.l2jserver.gameserver.model.quest import QuestState
-from com.l2jserver.gameserver.model.quest import Quest as JQuest
-
-qn = "371_ShriekOfGhosts"
-
-#NPC
-PATRIN = 30929
-REVA = 30867
-#Quest items
-URN = 5903
-PORCELAIN = 6002
-# item : [chance, html]
-PORC = {
-    6003 : [ 2 , "30929-03.htm"],
-    6004 : [ 32, "30929-04.htm"],
-    6005 : [ 62, "30929-05.htm"],
-    6006 : [ 77, "30929-06.htm"]
-    }
-# mobid : [urn chance, porcelain chance]
-MOBS = {
-    20818 : [38, 43],
-    20820 : [48, 56],
-    20824 : [50, 58]
-    }
-
-class Quest (JQuest) :
-
- def __init__(self,id,name,descr):
-     JQuest.__init__(self,id,name,descr)
-     self.questItemIds = PORC.keys()
- 
- def onEvent (self,event,st) :
-     htmltext = event
-     urn = st.getQuestItemsCount(URN)
-     porcelain = st.getQuestItemsCount(PORCELAIN)
-     if event == "30867-03.htm" :
-       st.set("cond","1")
-       st.setState(State.STARTED)
-       st.playSound("ItemSound.quest_accept")
-     elif event == "TRADE" :
-       if urn == 0 :
-         htmltext = "30867-06.htm"
-       elif urn <= 100 :
-         st.takeItems(URN,-1)
-         st.giveItems(57,7000+urn*1000)
-         htmltext = "30867-07.htm"
-       elif urn > 100 :
-         st.takeItems(URN,-1)
-         st.giveItems(57,13000+urn*1000)
-         htmltext = "30867-08.htm"
-     elif event == "30867-10.htm" :
-       htmltext = "30867-10.htm"
-       if urn > 0:
-           st.giveItems(57,urn*1000)
-           st.takeItems(URN,urn)
-       st.exitQuest(1)
-     elif event == "APPR" :
-       if not porcelain :
-         htmltext = "30929-02.htm"
-       else :
-           test = self.getRandom(100)
-           st.takeItems(PORCELAIN,1)
-           htmltext = "30929-07.htm"
-           for item in PORC.keys():
-               chance, html = PORC[item]
-               if test < chance :
-                   st.giveItems(item,1)
-                   htmltext = html
-                   break
-     return htmltext
-
- def onTalk (self,npc,player):
-     npcId = npc.getId()
-     htmltext = Quest.getNoQuestMsg(player)
-     st = player.getQuestState(qn)
-     if not st : return htmltext
-     id = st.getState()
-     cond = st.getInt("cond")
-     urn = st.getQuestItemsCount(URN)
-     porcelain = st.getQuestItemsCount(PORCELAIN)
-     if id == State.CREATED and npcId == REVA :
-       if player.getLevel() < 59 :
-         htmltext = "30867-01.htm"
-         st.exitQuest(1)
-       else :
-         htmltext = "30867-02.htm"
-     elif id == State.STARTED :
-       if npcId == REVA :
-         if not porcelain :
-           htmltext = "30867-04.htm"
-         else :
-           htmltext = "30867-05.htm"
-       elif npcId == PATRIN :
-           htmltext = "30929-01.htm"
-     return htmltext
-    
- def onKill(self,npc,player,isPet) :
-     partyMember = self.getRandomPartyMemberState(player, State.STARTED)
-     if not partyMember: return
-     st = partyMember.getQuestState(qn)
-     if not st : return
-     npcId = npc.getId()
-     chance = self.getRandom(100)
-     if npcId in MOBS.keys() :
-         urnchance, porcchance = MOBS[npcId]
-         if chance < urnchance :
-             st.giveItems(URN,1)
-             st.playSound("ItemSound.quest_itemget")
-         elif chance < porcchance :
-             st.giveItems(PORCELAIN,1)
-             st.playSound("ItemSound.quest_itemget")
-     return
-
-QUEST       = Quest(371, qn, "Shriek Of Ghosts")
-
-QUEST.addStartNpc(REVA)
-
-QUEST.addTalkId(REVA)
-QUEST.addTalkId(PATRIN)
-
-for mob in MOBS.keys() :
-    QUEST.addKillId(mob)

+ 5 - 3
L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30867-02.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30867-01.htm

@@ -1,5 +1,7 @@
 <html><body>Seer Reva:<br>
 Behold... countless ghosts encircle the Tower of Insolence! Just listen to their horrible screams! Do you feel their incredible rage?<br>
-The sword of a devil shall pierce the heart of an angel, and the bright red blood of the last emperor will run through the streets! Dawn and dusk will become as one, and the heavens and earth will tremble! This is how Paagrio describes the beginning of endless winter...<br>
-The arrogant humans are hastening their grisly fate! Unless the wrathful souls of the dead can be appeased, a terrible apocalypse will surely destroy this land forever!<br>I beg of you! Will you take the risk of the tower and help us?
-<br><a action="bypass -h Quest 371_ShriekOfGhosts 30867-03.htm">"I will brave the tower."</a></body></html>
+The sword of a devil shall pierce the heart of an angel, and the bright red blood of the last emperor will run through the streets! Dawn and dusk will become as one, and the heavens and earth will tremble! This is how Pa'agrio describes the beginning of endless winter...<br>
+The arrogant humans are hastening their grisly fate! Unless the wrathful souls of the dead can be appeased, a terrible apocalypse will surely destroy this land forever!<br>
+I beg of you! Will you take the risk of the tower and help us?<br>
+<a action="bypass -h Quest Q00371_ShrieksOfGhosts 30867-02.htm">"I will brave the tower."</a>
+</body></html>

+ 2 - 1
L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30867-03.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30867-02.htm

@@ -1,3 +1,4 @@
 <html><body>Seer Reva:<br>
 Humans so easily ignore the fact that the Tower of Insolence is like a gigantic tomb, erected at the expense of countless lives! To conceal the secret of the tower, the despot Baium executed thousands of slaves and buried them there. Their vengeful spirits haunt the tower to this day.<br>
-Hurry to the <font color="LEVEL">Tower of Insolence</font>. There you will find the undead warriors who serve the Devil's Overlord. You must kill <font color="LEVEL">Hallate's warriors, Hallate's knights and Hallate's commanders</font>. Don't give an inch! Recover the <font color="LEVEL">Ancient Ash Urns</font>! Bring back the ashes and I will perform the ritual of fire that will put the undead warriors to rest. If your work is deemed worthy in my eyes, I will bestow upon you a prize. Bring me 100 or more ash urns at once and you will receive an even greater prize!</body></html>
+Hurry to the <font color="LEVEL">Tower of Insolence</font>. There you will find the undead warriors who serve the Devil's Overlord. You must kill <font color="LEVEL">Hallate's warriors, Hallate's knights and Hallate's commanders</font>. Don't give an inch! Recover the <font color="LEVEL">Ancient Ash Urns</font>! Bring back the ashes and I will perform the ritual of fire that will put the undead warriors to rest. If your work is deemed worthy in my eyes, I will bestow upon you a prize. Bring me 100 or more ash urns at once and you will receive an even greater prize!
+</body></html>

+ 3 - 2
L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30867-01.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30867-03.html

@@ -1,6 +1,7 @@
 <html><body>Seer Reva:<br>
 Behold... countless ghosts encircle the Tower of Insolence! Just listen to their horrible screams! Do you feel their incredible rage?<br>
-The sword of a devil shall pierce the heart of an angel, and the bright red blood of the last emperor will run through the streets! Dawn and dusk will become as one, and the heavens and earth will tremble! This is how Paagrio describes the beginning of endless winter...<br>
+The sword of a devil shall pierce the heart of an angel, and the bright red blood of the last emperor will run through the streets! Dawn and dusk will become as one, and the heavens and earth will tremble! This is how Pa'agrio describes the beginning of endless winter...<br>
 The arrogant humans are hastening their grisly fate! Unless the wrathful souls of the dead can be appeased, a terrible apocalypse will surely destroy this land forever!<br>
 Take heed, young warrior! When you've developed your skills to the point that you can brave the tower, come and see me.<br>
-(This quest may only be undertaken by a character of level 59 or above.)</body></html>
+(This quest may only be undertaken by a character of level 59 or above.)
+</body></html>

+ 7 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30867-04.html

@@ -0,0 +1,7 @@
+<html><body>Seer Reva:<br>
+Congratulations on your safe return, young soldier! Word has come that the tower has become a chaotic entanglement of angels and demons.  I trust that you have recovered many of the <font color="LEVEL">Ancient Ash Urns</font> from Hallate's warriors, knights and commanders!<br>
+The <font color="LEVEL">Ancient Porcelain</font> you brought doesn't contain any remains. It was only used for decoration! It's no good to me, you can keep it for yourself! Either sell it at a store or take it to <font color="LEVEL">antique dealer Patrin</font>! He is at the general store in the Town of Oren.<br>
+<a action="bypass -h Quest Q00371_ShrieksOfGhosts 30867-05.html">Hand over the Ancient Ash Urns.</a><br>
+<a action="bypass -h Quest Q00371_ShrieksOfGhosts 30867-08.html">Settle the account later.</a><br>
+<a action="bypass -h Quest Q00371_ShrieksOfGhosts 30867-09.html">"I want to quit."</a>
+</body></html>

+ 2 - 1
L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30867-06.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30867-05.html

@@ -1,2 +1,3 @@
 <html><body>Seer Reva:<br>
-How rude! You come here empty-handed and have the gall to demand a prize? Hurry to the Tower of Insolence and find the Ancient Ash Urns! The souls of the undead warriors cry out for rest! Don't waste any more time!</body></html>
+How rude! You come here empty-handed and have the gall to demand a prize? Hurry to the Tower of Insolence and find the Ancient Ash Urns! The souls of the undead warriors cry out for rest! Don't waste any more time!
+</body></html>

+ 3 - 2
L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30867-07.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30867-06.html

@@ -1,5 +1,6 @@
 <html><body>Seer Reva:<br>
 These are remains of the dead, trampled by a despot... I can feel their bitterness, even after one thousand years!<br>
 Listen to me, young soldier! I, Reva, will grant you a prize for your hard work! Take it!<br>
-<a action="bypass -h Quest 371_ShriekOfGhosts 30867-09.htm">Continue the mission.</a><br>
-<a action="bypass -h Quest 371_ShriekOfGhosts 30867-10.htm">Quit the mission.</a></body></html>
+<a action="bypass -h Quest Q00371_ShrieksOfGhosts 30867-08.html">Continue the mission.</a><br>
+<a action="bypass -h Quest Q00371_ShrieksOfGhosts 30867-09.html">Quit the mission.</a>
+</body></html>

+ 4 - 3
L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30867-08.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30867-07.html

@@ -1,5 +1,6 @@
 <html><body>Seer Reva:<br>
 These are remains of the dead, trampled by a despot... I can feel their bitterness, even after one thousand years!<br>
-You have brought over 100 ash urns at once! What a magnificent accomplishment! As I promised, I will grant you a special <font color="LEVEL">prize</font>! Take it!<br>
-<a action="bypass -h Quest 371_ShriekOfGhosts 30867-09.htm">Continue the mission.</a><br>
-<a action="bypass -h Quest 371_ShriekOfGhosts 30867-10.htm">Quit the mission.</a></body></html>
+You have brought over 100 ash urns at once! What a magnificent accomplishment! As I promised, I will grant you a special <font color="LEVEL"> prize</font>! Take it!<br>
+<a action="bypass -h Quest Q00371_ShrieksOfGhosts 30867-08.html">Continue the mission.</a><br>
+<a action="bypass -h Quest Q00371_ShrieksOfGhosts 30867-09.html">Quit the mission.</a>
+</body></html>

+ 2 - 1
L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30867-09.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30867-08.html

@@ -1,2 +1,3 @@
 <html><body>Seer Reva:<br>
-Failure in this mission would prove catastrophic to us! Don't underestimate its importance! This is your duty! Do it!</body></html>
+Failure in this mission would prove catastrophic to us! Don't underestimate its importance! This is your duty! Do it!
+</body></html>

+ 2 - 1
L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30867-10.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30867-09.html

@@ -1,2 +1,3 @@
 <html><body>Seer Reva:<br>
-Would you ignore the desperate cries of the dead? If you are so callous, I won't stop you! You must be aware that the failure of this mission will bring a terrible and irreversible disaster upon us. But if you've made up your mind, so be it! Your help is appreciated. Tejakar Oroka!</body></html>
+Would you ignore the desperate cries of the dead? If you are so callous, I won't stop you! You must be aware that the failure of this mission will bring a terrible and irreversible disaster upon us. But if you've made up your mind, so be it! Your help is appreciated. Tejakar Oroka!
+</body></html>

+ 4 - 3
L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30867-04.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30867-10.html

@@ -1,5 +1,6 @@
 <html><body>Seer Reva:<br>
 Congratulations on your safe return, young soldier! Word has come that the tower has become a chaotic entanglement of angels and demons. Have you vanquished Hallate's warriors, Hallate's knights and Hallate's commanders and recovered the <font color="LEVEL">Ancient Ash Urns</font>?<br>
-<a action="bypass -h Quest 371_ShriekOfGhosts TRADE">Hand over the Ancient Ash Urns.</a><br>
-<a action="bypass -h Quest 371_ShriekOfGhosts 30867-09.htm">Settle the account later.</a><br>
-<a action="bypass -h Quest 371_ShriekOfGhosts 30867-10.htm">"I quit."</a></body></html>
+<a action="bypass -h Quest Q00371_ShrieksOfGhosts 30867-05.html">Hand over the Ancient Ash Urns.</a><br>
+<a action="bypass -h Quest Q00371_ShrieksOfGhosts 30867-08.html">Settle the account later.</a><br>
+<a action="bypass -h Quest Q00371_ShrieksOfGhosts 30867-09.html">"I quit."</a>
+</body></html>

+ 5 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30929-01.html

@@ -0,0 +1,5 @@
+<html><body>Antique Dealer Patrin:<br>
+It has come to my attention that the Orc seer Reva of the Town of Aden is collecting Ancient Ash Urns. I asked him to give them to me so that I could sell them for a handsome price to antique collectors. He refused my offer, insisting that he needed them for a ritual! He promised me that if he finds an urn that does not contain any remains he would send it to me. Have you brought me such an item?<br>
+<a action="bypass -h Quest Q00371_ShrieksOfGhosts 30929-02.html">"Tell me about the appraisal."</a><br>
+<a action="bypass -h Quest Q00371_ShrieksOfGhosts 30929-03.html">"Please appraise the urn."</a>
+</body></html>

+ 3 - 3
L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30929-01a.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30929-02.html

@@ -1,5 +1,5 @@
 <html><body>Antique Dealer Patrin:<br>
-An appraisal determines the true value of an item! To the untrained eye, an antique piece like this one may seem rather ordinary. But to the experienced eye of an expert like myself, each subtle mark and worn surface tells a story. The materials and techniques used to create it become clear to me.<br>
+An appraisal determines the true value of an item!  To the untrained eye, an antique piece like this one may seem rather ordinary. But to the experienced eye of an expert like myself, each subtle mark and worn surface tells a story. The materials and techniques used to create it become clear to me.<br>
 If the porcelain you bring me turns out to be a <font color="LEVEL">famous</font> or a <font color="LEVEL">high grade</font> porcelain, it will fetch a very high price at the store.<br>If the appraisal shows that the porcelain is <font color="LEVEL">low grade</font> or <font color="LEVEL">lowest grade</font>, it becomes practically worthless! Such items are better left unappraised.<br>
-<a action="bypass -h Quest 371_ShriekOfGhosts 30929-01.htm">Back</a></body></html> 
-
+<a action="bypass -h Quest Q00371_ShrieksOfGhosts 30929-01.html">Back</a>
+</body></html>

+ 3 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30929-03.html

@@ -0,0 +1,3 @@
+<html><body>Antique Dealer Patrin:<br>
+What's the big idea, coming to me empty-handed for an appraisal? Are you crazy or is this some kind of a joke?
+</body></html>

+ 2 - 1
L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30929-03.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30929-04.html

@@ -2,4 +2,5 @@
 Just a moment... Let me get my glasses...<br>
 Now, what have we here, hmm?<br>
 Oh, my! Indeed!<br>
-This is a <font color="LEVEL">famous porcelain</font>, made by the court sculptors! It is of the highest quality. It will fetch a great price at any store!</body></html>
+This is a <font color="LEVEL">famous porcelain</font>, made by the court sculptors! It is of the highest quality. It will fetch a great price at any store!
+</body></html>

+ 6 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30929-05.html

@@ -0,0 +1,6 @@
+<html><body>Antique Dealer Patrin:<br>
+Just a moment... Let me get my glasses...<br>
+What have we here, hmm? Hmm...<br>
+Oh my! Indeed!<br>
+You've found a <font color="LEVEL">high grade</font> porcelain. It has been glazed to make it shiny. Most likely it decorated the home of an Elmoreden aristocrat... It will fetch a good price at any store.
+</body></html>

+ 2 - 1
L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30929-05.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30929-06.html

@@ -1,4 +1,5 @@
 <html><body>Antique Dealer Patrin:<br>
 Just a moment... Let me get my glasses...<br>
 Now, what have we here, hmm? Oh Oh...!<br>
-Well, there's no go way to say this... This is a <font color="LEVEL">low grade</font> porcelain. Take a look here... Do you see this scratch? And look at this chipped edge... I'm sorry. It won't fetch much at a store.</body></html>
+Well, there's no go way to say this... This is a <font color="LEVEL">low grade</font> porcelain. Take a look here... Do you see this scratch? And look at this chipped edge... I'm sorry. It won't fetch much at a store.
+</body></html>

+ 6 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30929-07.html

@@ -0,0 +1,6 @@
+<html><body>Antique Dealer Patrin:<br>
+Just a moment... Let me get my glasses...<br>
+Now, what have we here, hmm...<br>
+Oh my!<br>
+This is the <font color="LEVEL">lowest grade</font> porcelain I've ever seen! Look at the large crack on the side. Do you see it? The texture is very crude, made from coarse clay... Sorry to disappoint you, but it is practically worthless...
+</body></html>

+ 2 - 1
L2J_DataPack/dist/game/data/scripts/quests/371_ShriekOfGhosts/30929-07.htm → L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/30929-08.html

@@ -2,4 +2,5 @@
 Just a moment... Let me get my glasses...<br>
 Now, what have we here, hmm...?<br>
 Wha...?!! I just touched it once... and it shattered into  a thousand pieces! Oh, my! How embarrassing! I should've been more careful!<br>
-Ahem! I'm so sorry. Objects this old tends to be fragile and are easily broken... </body></html>
+Ahem! I'm so sorry. Objects this old tends to be fragile and are easily broken...
+</body></html>

+ 239 - 0
L2J_DataPack/dist/game/data/scripts/quests/Q00371_ShrieksOfGhosts/Q00371_ShrieksOfGhosts.java

@@ -0,0 +1,239 @@
+/*
+ * Copyright (C) 2004-2014 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.Q00371_ShrieksOfGhosts;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.quest.Quest;
+import com.l2jserver.gameserver.model.quest.QuestState;
+import com.l2jserver.gameserver.util.Util;
+
+/**
+ * Shrieks of Ghosts (371)
+ * @author Adry_85
+ */
+public final class Q00371_ShrieksOfGhosts extends Quest
+{
+	private static final class DropInfo
+	{
+		public final int _firstChance;
+		public final int _secondChance;
+		
+		public DropInfo(int firstChance, int secondChance)
+		{
+			_firstChance = firstChance;
+			_secondChance = secondChance;
+		}
+		
+		public int getFirstChance()
+		{
+			return _firstChance;
+		}
+		
+		public int getSecondChance()
+		{
+			return _secondChance;
+		}
+	}
+	
+	// NPCs
+	private static final int REVA = 30867;
+	private static final int PATRIN = 30929;
+	// Items
+	private static final int ANCIENT_ASH_URN = 5903;
+	private static final int ANCIENT_PORCELAIN = 6002;
+	private static final int ANCIENT_PORCELAIN_EXCELLENT = 6003;
+	private static final int ANCIENT_PORCELAIN_HIGH_QUALITY = 6004;
+	private static final int ANCIENT_PORCELAIN_LOW_QUALITY = 6005;
+	private static final int ANCIENT_PORCELAIN_LOWEST_QUALITY = 6006;
+	// Misc
+	private static final int MIN_LEVEL = 59;
+	
+	private static final Map<Integer, DropInfo> MOBS = new HashMap<>();
+	static
+	{
+		MOBS.put(20818, new DropInfo(350, 400)); // hallates_warrior
+		MOBS.put(20820, new DropInfo(583, 673)); // hallates_knight
+		MOBS.put(20820, new DropInfo(458, 538)); // hallates_commander
+	}
+	
+	public Q00371_ShrieksOfGhosts()
+	{
+		super(371, Q00371_ShrieksOfGhosts.class.getSimpleName(), "Shrieks of Ghosts");
+		addStartNpc(REVA);
+		addTalkId(REVA, PATRIN);
+		addKillId(MOBS.keySet());
+		registerQuestItems(ANCIENT_ASH_URN);
+	}
+	
+	@Override
+	public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
+	{
+		final QuestState qs = getQuestState(player, false);
+		if (qs == null)
+		{
+			return null;
+		}
+		
+		String htmltext = null;
+		switch (event)
+		{
+			case "30867-02.htm":
+			{
+				qs.startQuest();
+				htmltext = event;
+				break;
+			}
+			case "30867-05.html":
+			{
+				final long ancientAshUrnCount = getQuestItemsCount(player, ANCIENT_ASH_URN);
+				
+				if (ancientAshUrnCount < 1)
+				{
+					htmltext = event;
+				}
+				else if ((ancientAshUrnCount >= 1) && (ancientAshUrnCount < 100))
+				{
+					giveAdena(player, (ancientAshUrnCount * 1000) + 15000, true);
+					takeItems(player, ANCIENT_ASH_URN, -1);
+					htmltext = "30867-06.html";
+				}
+				else
+				{
+					giveAdena(player, (ancientAshUrnCount * 1000) + 37700, true);
+					takeItems(player, ANCIENT_ASH_URN, -1);
+					htmltext = "30867-07.html";
+				}
+				break;
+			}
+			case "30867-08.html":
+			case "30929-01.html":
+			case "30929-02.html":
+			{
+				htmltext = event;
+				break;
+			}
+			case "30867-09.html":
+			{
+				final long ancientAshUrnCount = getQuestItemsCount(player, ANCIENT_ASH_URN);
+				
+				if (ancientAshUrnCount > 0)
+				{
+					giveAdena(player, ancientAshUrnCount * 1000, true);
+					
+				}
+				
+				qs.exitQuest(true, true);
+				htmltext = "30867-09.html";
+				break;
+			}
+			case "30929-03.html":
+			{
+				if (!hasQuestItems(player, ANCIENT_PORCELAIN))
+				{
+					htmltext = event;
+				}
+				else
+				{
+					final int random = getRandom(100);
+					
+					if (random < 2)
+					{
+						giveItems(player, ANCIENT_PORCELAIN_EXCELLENT, 1);
+						htmltext = "30929-04.html";
+						
+					}
+					else if (random < 32)
+					{
+						giveItems(player, ANCIENT_PORCELAIN_HIGH_QUALITY, 1);
+						htmltext = "30929-05.html";
+					}
+					else if (random < 62)
+					{
+						giveItems(player, ANCIENT_PORCELAIN_LOW_QUALITY, 1);
+						htmltext = "30929-06.html";
+					}
+					else if (random < 77)
+					{
+						giveItems(player, ANCIENT_PORCELAIN_LOWEST_QUALITY, 1);
+						htmltext = "30929-07.html";
+					}
+					else
+					{
+						htmltext = "30929-08.html";
+					}
+					
+					takeItems(player, ANCIENT_PORCELAIN, 1);
+				}
+				break;
+			}
+		}
+		return htmltext;
+	}
+	
+	@Override
+	public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
+	{
+		final QuestState qs = getQuestState(killer, false);
+		
+		if ((qs == null) || !Util.checkIfInRange(1500, npc, killer, true))
+		{
+			return null;
+		}
+		
+		final DropInfo info = MOBS.get(npc.getId());
+		final int random = getRandom(1000);
+		
+		if (random < info.getFirstChance())
+		{
+			qs.giveItemRandomly(npc, ANCIENT_ASH_URN, 1, 0, 1.0, true);
+		}
+		else if (random < info.getSecondChance())
+		{
+			qs.giveItemRandomly(npc, ANCIENT_PORCELAIN, 1, 0, 1.0, true);
+		}
+		return super.onKill(npc, killer, isSummon);
+	}
+	
+	@Override
+	public String onTalk(L2Npc npc, L2PcInstance player)
+	{
+		QuestState qs = getQuestState(player, true);
+		String htmltext = getNoQuestMsg(player);
+		if (qs.isCreated())
+		{
+			htmltext = (player.getLevel() >= MIN_LEVEL) ? "30867-01.htm" : "30867-03.htm";
+		}
+		else if (qs.isStarted())
+		{
+			if (npc.getId() == REVA)
+			{
+				htmltext = (hasQuestItems(player, ANCIENT_PORCELAIN)) ? "30867-04.html" : "30867-10.html";
+			}
+			else
+			{
+				htmltext = "30929-01.html";
+			}
+		}
+		return htmltext;
+	}
+}

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

@@ -296,6 +296,7 @@ import quests.Q00367_ElectrifyingRecharge.Q00367_ElectrifyingRecharge;
 import quests.Q00368_TrespassingIntoTheHolyGround.Q00368_TrespassingIntoTheHolyGround;
 import quests.Q00369_CollectorOfJewels.Q00369_CollectorOfJewels;
 import quests.Q00370_AnElderSowsSeeds.Q00370_AnElderSowsSeeds;
+import quests.Q00371_ShrieksOfGhosts.Q00371_ShrieksOfGhosts;
 import quests.Q00376_ExplorationOfTheGiantsCavePart1.Q00376_ExplorationOfTheGiantsCavePart1;
 import quests.Q00377_ExplorationOfTheGiantsCavePart2.Q00377_ExplorationOfTheGiantsCavePart2;
 import quests.Q00378_GrandFeast.Q00378_GrandFeast;
@@ -732,6 +733,7 @@ public class QuestMasterHandler
 		Q00368_TrespassingIntoTheHolyGround.class,
 		Q00369_CollectorOfJewels.class,
 		Q00370_AnElderSowsSeeds.class,
+		Q00371_ShrieksOfGhosts.class,
 		Q00376_ExplorationOfTheGiantsCavePart1.class,
 		Q00377_ExplorationOfTheGiantsCavePart2.class,
 		Q00378_GrandFeast.class,

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

@@ -0,0 +1 @@
+UPDATE character_quests SET name='Q00371_ShrieksOfGhosts' WHERE name='371_ShriekOfGhosts';