diff --git a/dist/game/data/scripts.cfg b/dist/game/data/scripts.cfg
index 82dc4c9b95035d071f39e83498cdb4279e56b887..08a553beb803c0311dca7d353e0a0aaa20e1c15a 100644
--- a/dist/game/data/scripts.cfg
+++ b/dist/game/data/scripts.cfg
@@ -199,7 +199,6 @@ hellbound/HellboundLoader.java
 # Quests Section
 quests/QuestMasterHandler.java
 quests/TerritoryWarScripts/TerritoryWarSuperClass.java
-quests/335_TheSongOfTheHunter/__init__.py
 
 # Features
 features/SkillTransfer/SkillTransfer.java
diff --git a/dist/game/data/scripts/cron/example.py b/dist/game/data/scripts/cron/example.py
deleted file mode 100644
index 119dc6ddecdc4a1354d5d9c92ff0c32206e61c38..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/cron/example.py
+++ /dev/null
@@ -1,5 +0,0 @@
-##############################################
-### Author: Layane (andrashe@gmail.com)
-##############################################
-
-print "Hi world!"
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-01.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-01.htm
deleted file mode 100644
index 1ed613e47185a4c9dce73443466923f1d58d8523..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-01.htm
+++ /dev/null
@@ -1,3 +0,0 @@
-<html><body>Guild Member Grey:<br>
-Many aspire to join our guild. Many such as you only see the glamorous side of our profession.<br>Becoming a hunter is not an easy task. Only the very best and brightest are selected for membership in the Hunters Guild. A hunting license is only given to those who pass a very severe test.<br>Many give up before a week has passed. Does that sound like you?<br>
-(This quest is only for characters level 35 and above.)</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-02.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-02.htm
deleted file mode 100644
index 52115df67f49b9d965772698bfc217af94cdba1c..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-02.htm
+++ /dev/null
@@ -1,3 +0,0 @@
-<html><body>Guild Member Grey:<br>
-Many aspire to join our guild. Many such as you only see the glamorous side of our profession.<br>Becoming a hunter is not an easy task. Only the very best and brightest are selected for membership in the Hunters Guild.  A hunting license is only given to those who pass a very severe test.<br>Many give up before a week has passed. Does that sound like you?<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-03.htm">"I wish to take the test for the hunting license."</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-03.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-03.htm
deleted file mode 100644
index 5f482935cb511cd3912cf50b9b2a244490d90b72..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-03.htm
+++ /dev/null
@@ -1,3 +0,0 @@
-<html><body>Guild Member Grey:<br>
-Did I hurt your feelings? Do you actually intend to try for the hunting license? If so, you must listen carefully to my words... <br>There are two types of hunters. Most hunters are 1-circle, but very skillful ones can obtain the 2-circle license by passing another test. Of course you must take the <font color="LEVEL">1-circle license test</font> first.<br>To pass this test, you must bring back at least three of the items on this list.<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-04.htm">View the list</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-04.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-04.htm
deleted file mode 100644
index 9b69be047c7adeed61673c4ca970a191d6abfbf6..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-04.htm
+++ /dev/null
@@ -1,8 +0,0 @@
-<html><body>Guild Member Grey:<br>
-Next is the 1-circle hunter license test list. To pass the test, you have to bring at least three items from the list. Keep in mind that this is not just a simple treasure hunt but is a test to find out whether you have the nature and disposition of a hunter!<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-05.htm">40 scales of guardian basilisk</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-06.htm">20 Karut Weeds</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-07.htm">3 heads of raiders with the lord's bounty on their heads</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-08.htm">Skin of Windsus Aleph</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-09.htm">20 light-blue runestones</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-10.htm">30 sea of spores seeds</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-05.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-05.htm
deleted file mode 100644
index 64cdac433068d40d9170d1ac4a06d75ccc62f206..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-05.htm
+++ /dev/null
@@ -1,3 +0,0 @@
-<html><body>Guild Member Grey:<br>
-You must gather <font color="LEVEL">40 scales of guardian basilisk</font>. They live in the <font color="LEVEL">Death Pass</font>.<br>I really shouldn't tell you  this... Gathering information about the items is a part of the test. Count yourself lucky to have received this valuable one-time hint!<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-04.htm">Go back</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-06.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-06.htm
deleted file mode 100644
index fea1d197cf96a036589d68fc26febe0d6811643b..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-06.htm
+++ /dev/null
@@ -1,3 +0,0 @@
-<html><body>Guild Member Grey:<br>
-You must gather <font color="LEVEL">20 Karut Weeds</font>, used in the research of mages. The leto Lizardman mediums carry them. You may find the leto lizardmen in the southern part of Oren.<br>Gathering information about the items is a part of the test. Count yourself lucky to have received this valuable one-time hint!<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-04.htm">Go back</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-07.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-07.htm
deleted file mode 100644
index 652bfbf78b7ac515c76a2cb5a0d60635a2c4aeb8..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-07.htm
+++ /dev/null
@@ -1,3 +0,0 @@
-<html><body>Guild Member Grey:<br>
-You must kill the three evil outlaw Haka brothers and bring back their heads. They are named <font color="LEVEL">Haka, Jakja and Marka</font>.  They are prefects of the Breka orc tribe. They wantonly attack merchants' carriages, massacre citizens and set fire to their homes. There has been a bounty placed by on their heads by the Lord of Giran, therefore they have been laying low. But with the <font color="LEVEL">Breka Orc Warriors</font> destroyed, they are bound to appear seeking revenge.<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-04.htm">Go back</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-09.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-09.htm
deleted file mode 100644
index 3aa96972d06ab002ada50473601fb12313b8e44e..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-09.htm
+++ /dev/null
@@ -1,3 +0,0 @@
-<html><body>Guild Member Grey:<br>
-You must gather <font color="LEVEL">20 light-blue runestones</font>. These runestones are obtained by destroying <font color="LEVEL">manashen gargoyles or enchanted stone golems</font> in the area near the Ivory Tower.  To protect their precious tower from interlopers, the mages apparently have inplanted runestones in the creatures of that area and are controlling them.<br>This is all I will say on this matter. If you are a true hunter, you must gather the information and find the items yourself. Don't expect any more hints!<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-04.htm">Go back</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-10.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-10.htm
deleted file mode 100644
index f645923ec265370ed8abdf45187b6737531645a8..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-10.htm
+++ /dev/null
@@ -1,3 +0,0 @@
-<html><body>Guild Member Grey:<br>
-You must gather <font color="LEVEL">30 Sea of Spores seeds</font>. These can be obtained by going to the Sea of Spores and killing the <font color="LEVEL">giant fungus</font>.<br>Of course, I should let you discover this for yourself, but I'm just an old softie... No more hints!<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-04.htm">Go back</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-12.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-12.htm
deleted file mode 100644
index 381360dc279cc36bb1c171ae04d2a81eeb74ce8e..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-12.htm
+++ /dev/null
@@ -1,2 +0,0 @@
-<html><body>Guild Member Grey:<br>
-You have obtained the items from the list! I must admit that I doubted you at first, but I stand corrected! Well, you certainly qualify as a hunter. I hereby bestow on you the 1-circle hunting license.  Welcome to the guild, new hunting brother!<br>Now you are qualified to perform the various tasks that come to our Hunters Guild. Please go and ask <font color="LEVEL">Guild Member Tor</font> over there for details.<br>Sometimes you will be assigned jobs by the guild, other times you'll be hired by individuals. Recently <font color="LEVEL">Cybellin</font> asked me to introduce him to a trustworthy hunter; would you like to meet him?</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-13.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-13.htm
deleted file mode 100644
index 3a6e29117c9e51665cfb55c5e45a5f84d0ec2869..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-13.htm
+++ /dev/null
@@ -1,5 +0,0 @@
-<html><body>Guild Member Grey:<br>
-Welcome, my hunter brother. What can I do for you?<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-14.htm">"Is there any work?"</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-15.htm">"I wish to test for the 2-circle hunter license."</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-31.htm">"I wish to leave the Hunters Guild."</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-14.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-14.htm
deleted file mode 100644
index 81dd57a23fcca6e4c02c7be0efce91f0ff9dcae7..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-14.htm
+++ /dev/null
@@ -1,3 +0,0 @@
-<html><body>Guild Member Grey:<br>
-We get dozens of hunting requests every day. You should speak to <font color="LEVEL">Guild Member Tor</font> to find out what requests have currently come in. If there is a job that you like, you can accept it.<br>There is also the possibility of being hired by individuals. Recently <font color="LEVEL">Cybellin</font> asked me to introduce him to a trustworthy hunter.  Would you care to meet him?<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-13.htm">"Go back"</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-15.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-15.htm
deleted file mode 100644
index 2f1ae8ea7fb94c56bc6421b7939129537b46b040..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-15.htm
+++ /dev/null
@@ -1,3 +0,0 @@
-<html><body>Guild Member Grey:<br>
-You are already applying for the 2-circle hunting license? Nice to see that you don't lack ambition!  But look. You're not ready. You do have some skills but you still need more important practical experience. For the time being, you should develop your talents while carrying out hunting requests.<br>
-(You can apply for the 2-circle license test after reaching level 45.)</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-16.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-16.htm
deleted file mode 100644
index 9b737a44f6f766bb68ab423b8687dbc9ece77a7a..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-16.htm
+++ /dev/null
@@ -1,5 +0,0 @@
-<html><body>Guild Member Grey:<br>
-Welcome, my hunter brother. What can I do for you?<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-17.htm">"Are there any jobs?"</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-19.htm">"I wish to test for the 2-circle hunting license."</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-31.htm">Leave the Hunters Guild</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-17.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-17.htm
deleted file mode 100644
index f5cef4026c6edfd76df4593ac5fdd11d73a06d48..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-17.htm
+++ /dev/null
@@ -1,3 +0,0 @@
-<html><body>Guild Member Grey:<br>
-We get dozens of hunting requests every day. You should see <font color="LEVEL">Guild Member Tor</font>, he will know  what requests have come in.  If there is a job that you like, you can accept it.<br>Hunters are also hired by individuals, not just through the guild. Recently <font color="LEVEL">Cybellin</font> asked me to introduce him to a trustworthy hunter.  Would you care to meet him?<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-16.htm">Go back</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-18.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-18.htm
deleted file mode 100644
index acb115c0fd6beab4ae417943d341a36ac207eb0e..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-18.htm
+++ /dev/null
@@ -1,3 +0,0 @@
-<html><body>Guild Member Grey:<br>
-So, you wish to take the 2-circle hunting license test? Well I suppose you're up to giving it a try.  As before, in the 2-circle test you must bring back at least three items written on the list. Of course, these items will be harder to obtain than those of the 1-circle test. Maybe you should look at the list first...<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-20.htm">View list</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-20.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-20.htm
deleted file mode 100644
index 49f972a0d6bdcd9886310fc32460d44fda9f13b6..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-20.htm
+++ /dev/null
@@ -1,8 +0,0 @@
-<html><body>Guild Member Grey:<br>
-Here is the 2-circle hunting license test list. You must bring <br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-21.htm">20 Timak Orc Totems</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-22.htm">20 skeins of trisalim cobweb</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-23.htm">30 Ambrosius Fruits</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-24.htm">20 Balefire Crystals</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-25.htm">20 Imperial Arrowheads</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-26.htm">The heads of 5 outlaw raiders</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-21.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-21.htm
deleted file mode 100644
index 8baad891ae0059299ef33f7d1ad21b95a92efa7f..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-21.htm
+++ /dev/null
@@ -1,3 +0,0 @@
-<html><body>Guild Member Grey:<br>
-You must gather <br><font color="LEVEL">20 Timak Orc Totems</font>. To obtain them you must kill Timak Orc Warriors. You should have no trouble with this. Now go!<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-20.htm">Go back</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-22.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-22.htm
deleted file mode 100644
index 4733488079c6b0ebf621424078b209c3de7c9bb1..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-22.htm
+++ /dev/null
@@ -1,3 +0,0 @@
-<html><body>Guild Member Grey:<br>
-You must gather<font color="LEVEL">20 trisalim cobwebs</font>. This should be no problem for you. Quickly now!  Get them and come back to me!<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-20.htm">Go back</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-23.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-23.htm
deleted file mode 100644
index 94398ac9f8abcbeaf9fa05b42aa5d01d35e1982c..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-23.htm
+++ /dev/null
@@ -1,3 +0,0 @@
-<html><body>Guild Member Grey:<br>
-You must gather <font color="LEVEL">30 Ambrosius Fruits</font>. You are familiar with ambrosius, aren't you?  It's a fruit somewhat like an apple that grows on valley treants in Enchanted Valley. This should be easy for you!<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-20.htm">Go back</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-25.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-25.htm
deleted file mode 100644
index 33a46d62cb0687412d5e1376cd5d98c828b1e48e..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-25.htm
+++ /dev/null
@@ -1,3 +0,0 @@
-<html><body>Guild Member Grey:<br>
-You must gather <font color="LEVEL">20 Imperial Arrowheads</font>. This should be easy for you.  If you go to the <font color="LEVEL">National Cemetery</font> and kill the undead archers, you can obtain arrowheads made during the Elmoreden era. Are you up for it?<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-20.htm">Go back</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-26.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-26.htm
deleted file mode 100644
index e64d74cb69ef0f66c7bedf26bac8c130caeba40d..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-26.htm
+++ /dev/null
@@ -1,3 +0,0 @@
-<html><body>Guild Member Grey:<br>
-You must kill five tarlk bugbear raiders and bring back their heads. Their names are Athu, Triska, Motura and Lanka, and they are led by one called Kalath. These <font color="LEVEL">tarlk bugbear warriors</font> have been attacking and pillaging merchant carriages. I'm sure you would deal with these outlaws even if it weren't a requirement of the test, wouldn't you?<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-20.htm">Go back</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-28.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-28.htm
deleted file mode 100644
index 2d5ce962ae20b86630bdc80f07fa66a7fc84727b..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-28.htm
+++ /dev/null
@@ -1,4 +0,0 @@
-<html>
-
-<body>
-Guild Member Grey:<br>Good work! I knew that you would complete the test without much trouble. Now you are a respectable 2-circle hunter. Congratulations!<br>Now you are qualified for more dangerous hunts. Go see Guild Member Tor.<br>Or perhaps you should visit Cybellin. He is still looking for a good hunter...</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-29.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-29.htm
deleted file mode 100644
index 49bc4c0d1f6ba823453c893b8555d09a99cc7df1..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-29.htm
+++ /dev/null
@@ -1,4 +0,0 @@
-<html><body>Guild Member Grey:<br>
-Hello, hunter brother. What can I do for you?<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-30.htm">"Are there any jobs?"</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-31.htm">"I wish to leave the Hunters Guild."</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-30.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-30.htm
deleted file mode 100644
index be68311117d2223a34055159379fa6471b8ac24b..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-30.htm
+++ /dev/null
@@ -1,3 +0,0 @@
-<html><body>Guild Member Grey:<br>
-We get dozens of hunting requests every day. You should go to <font color="LEVEL">Guild Member Tor</font> to find out what requests have currently come in. If there is an assignment that appeals to you, you can accept it.<br>There are also individuals who wish to hire hunters. Recently <font color="LEVEL">Cybellin</font> asked me if I knew of a trustworthy hunter. Would you like to meet her?<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-29.htm">Go back</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-31.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-31.htm
deleted file mode 100644
index 221dab72c5be283211fc2fcb13600cb81e11936f..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-31.htm
+++ /dev/null
@@ -1,4 +0,0 @@
-<html><body>Guild Member Grey:<br>
-You wish to leave the guild?  Certainly you know that is impossible.  Once you join this brotherhood you are in for life... Didn't you know that?... You should reconsider your decision...<br>... The fear in your eyes makes it impossible for me to keep a straight face! I'm joking, you idiot! Of course you can leave if that is what you really want... You must have a good reason... <br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-32.htm">Leave</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-34.htm">Cancel</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-06.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-06.htm
deleted file mode 100644
index c6e252fc1ad4f16f979a0394afb04d9285ec054c..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-06.htm
+++ /dev/null
@@ -1,3 +0,0 @@
-<html><body>Guild Member Tor:<br>
-Pleased to meet you, brother! Is there anything I can help you with?<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30745-07.htm">"I would like to take on a request."</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-07.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-07.htm
deleted file mode 100644
index 3477e020f366ec38533ce09ba6f98186d2533c52..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-07.htm
+++ /dev/null
@@ -1,3 +0,0 @@
-<html><body>Guild Member Tor:<br>
-Examine the list and choose a request you would like to work on. The requests are divided into 3 classes according to their degree of difficulty and amount  of reward. Class C is the most common, of moderate difficulty and reward. Class B is more difficult but with a better reward. We rarely receive Class A requests. They are the most difficult and offer the greatest rewards.<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter Tor_list_2">Examine the request list</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-08.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-08.htm
deleted file mode 100644
index 0e72f7315f9f9b3a71db9bd2dede40383dcbe59b..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-08.htm
+++ /dev/null
@@ -1,4 +0,0 @@
-<html><body>Guild Member Tor:<br>
-Nice to meet you, brother! Is there anything I can help you with?<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30745-09.htm">Discontinue mission</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30745-11.htm">Continue mission</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-10.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-10.htm
deleted file mode 100644
index f2c6d978ad115ff438596e50a43916d36196982c..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-10.htm
+++ /dev/null
@@ -1,2 +0,0 @@
-<html><body>
-Guild Member Tor:<br>Well, it seems you have your mind made up, I won't try to change it. I will confiscate all of your Laurel Leaf Pins. I hope in the future you will learn to fulfill your obligations.</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-12.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-12.htm
deleted file mode 100644
index 31534e6c157caa5410b50d7e0d768b7644ea62ba..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-12.htm
+++ /dev/null
@@ -1,4 +0,0 @@
-<html><body>Guild Member Tor:<br>
-Good work! Here is your reward. Also, please accept this Laurel Leaf Pin that recognizes the successful fulfillment of a request. The more pins you possess, the better chance you will receive class A and B requests.<br>Do you wish to undertake a new request?<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30745-03.htm">"I would like to receive a new request."</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30745-14.htm">"I need a break."</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-13.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-13.htm
deleted file mode 100644
index b56e8fbc34a59d64060114ec26dc25372a2756be..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-13.htm
+++ /dev/null
@@ -1,4 +0,0 @@
-<html><body>Guild Member Tor:<br>
-Good work! Here is your reward. Also, please accept this Laurel Leaf Pin that recognizes the successful fulfillment of a request. The more pins you possess, the better the chance you will receive class A and B  requests.<br>Do you wish to undertake a new request?<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30745-07.htm">"I would like to receive a new request."</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30745-14.htm">"I need a break."</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-15.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-15.htm
deleted file mode 100644
index 3c010eb8cbdbfda2cedf5820bd2c3dbee13665ea..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-15.htm
+++ /dev/null
@@ -1,2 +0,0 @@
-<html><body>Guild Member Tor:<br>
-Details of the Request: Obtain 40 charms of Kadesh. The charm bears the image of Kadesh, the evil spirit worshiped by leto lizardmen.  It is known that leto Lizardman archers and soldiers carry the charm as an amulet to invoke magical power.<br>Request Class: C</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-24.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-24.htm
deleted file mode 100644
index fcd74f33f0a4a7d1eba11c25d8094bb2751dca65..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-24.htm
+++ /dev/null
@@ -1,2 +0,0 @@
-<html><body>Guild Member Tor:<br>
-Details of the Request: Collect and bring back 50 Taik Obsidian Amulets.  You must defeat an archer or warrior of the Taik orc tribe to obtain this amulet.<br>Request Class: C</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-26.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-26.htm
deleted file mode 100644
index f0910b672a1c12663ad9681610e0016da622ea4f..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-26.htm
+++ /dev/null
@@ -1,2 +0,0 @@
-<html><body>Guild Member Tor:<br>
-Details of the Request: Collect 40 Tamlin Ivory Charms.  This charm is obtained by killing a tamlin orc.<br>Request Class: C</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-27.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-27.htm
deleted file mode 100644
index 45a4f718aac5c17705c9171d0400908fd1f7acd3..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-27.htm
+++ /dev/null
@@ -1,2 +0,0 @@
-<html><body>Guild Member Tor:<br>
-Details of the Request: Bring me the head of Elder Narak of the leto lizardmen. The overlords of that vile tribe will lead you to him.  <br>Request Class: B</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-31.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-31.htm
deleted file mode 100644
index 776891b3f3d846fd8f0ecd6f65ea5d02c3001d57..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-31.htm
+++ /dev/null
@@ -1,2 +0,0 @@
-<html><body>Guild Member Tor:<br>
-Details of the Request: Bring me the head of Kaikee, captain of the Timak orc raiders. Start killing Timak Orc Warriors and eventually Kaikee will make his appearance.<br>Request Class: B</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-38.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-38.htm
deleted file mode 100644
index fc9fee291ebb9290274dea97907c06a59bc68548..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-38.htm
+++ /dev/null
@@ -1,2 +0,0 @@
-<html><body>Guild Member Tor:<br>
-Details of the Request: Collect and bring back 50 Taik Orc Totems. This totem can be obtained by slaying Taik orc shamans or captains. <br>Request Class: C</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-41.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-41.htm
deleted file mode 100644
index c559b3602e7fe53f215e93afcfa2cffe1460ad0c..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-41.htm
+++ /dev/null
@@ -1,2 +0,0 @@
-<html><body>Guild Member Tor:<br>
-Details of the Request: Kill 30 farcrans and bring back their skins. It is a monstrous beast that inhabits the area near the Plains of Fierce Battle.<br>Request Class: C</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-46.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-46.htm
deleted file mode 100644
index 621ae4abc23de92b57fbc844f4d483fcd782f21c..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-46.htm
+++ /dev/null
@@ -1,2 +0,0 @@
-<html><body>Guild Member Tor:<br>
-Details of the Request: Collect and bring back 30 Shillien Manes. To obtain them you must kill grunts, scouts or warriors of the vanor silenos tribe that have been running amok in the north of Aden.<br>Request Class: C</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-48.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-48.htm
deleted file mode 100644
index 16e209396965b13c5fa4938f930818ee940a49fc..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-48.htm
+++ /dev/null
@@ -1,2 +0,0 @@
-<html><body>Guild Member Tor:<br>
-Details of the Request: Bring me the head of Okun, the timak orc overlord. He is notorious for being an abominably cruel marauder. If you kill timak orc overlords one by one, Okun will show up to take his revenge.<br>Request Class: B</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-49.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-49.htm
deleted file mode 100644
index 24c4c196d93406aaa5ec889063036ecfc98936f2..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-49.htm
+++ /dev/null
@@ -1,2 +0,0 @@
-<html><body>Guild Member Tor:<br>
-Details of the Request: Bring me the head of Kakran, taik orc overlord. If you start killing taik orc captains one by one, Kakran will show up crying out for revenge.<br>Request Class: B</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-51.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-51.htm
deleted file mode 100644
index 5e94d5f386875d4b33fd3b008d7fb3d86b8f0d7c..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-51.htm
+++ /dev/null
@@ -1,2 +0,0 @@
-<html><body>Guild Member Tor:<br>
-Details of the Request: Collect and bring back 20 Deprive Eyes. These evil spirits are hovering around the Plains of Fierce Battle.<br>Request Class: B</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-52.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-52.htm
deleted file mode 100644
index ad9a91dfd88b5f7dabc2b10cfcad865880a14998..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-52.htm
+++ /dev/null
@@ -1,2 +0,0 @@
-<html><body>Guild Member Tor:<br>
-Details of the Request: Collect and bring back 20 horns of unicorn. They are found in the Enchanted Valley.<br>Request Class: B</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-57.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-57.htm
deleted file mode 100644
index d2ecb911360ac8821fc1d5a484c6af3124514216..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-57.htm
+++ /dev/null
@@ -1 +0,0 @@
-<html><body>Guild Member Tor:<br><?reply1?><?reply2?><?reply3?><?reply4?><?reply5?></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-03.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-03.htm
deleted file mode 100644
index f66e5770c4d3315caffb59b504c96a80ec8b29f4..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-03.htm
+++ /dev/null
@@ -1,2 +0,0 @@
-<html><body>Cybellin:<br>
-Excellent! Take this <font color="LEVEL">Blood Crystal</font> and dagger. Use the dagger to kill the evil <font color="LEVEL">leto lizardmen</font> and <font color="LEVEL">harit lizardmen</font> and the crystal to absorb their blood.  This will raise the purity of the crystal above its current level of 1. Although this may seem quite simple, the process is not without risks. In addition to the danger posed by the lizardmen, there is a chance each time that the crystal will shatter, that is, the crystal will either increase in purity or be destroyed.<br>If you successfully raise the purity of the crystal and bring it to me, you shall receive a reward.  The higher the level of purity, the greater your reward will be. <br>There are different theories as to why the crystal reacts like this to the blood of the lizardmen, possibly it is because these evil lizards are descended from dragons!  You will find that certain grades of blood are very effective and others have no effect at all. This can only be determined by trial and error...<br> I have written down this task for you.</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-04.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-04.htm
deleted file mode 100644
index 7c7cf897b08e7c138904d80455aff2795668372c..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-04.htm
+++ /dev/null
@@ -1,2 +0,0 @@
-<html><body>Cybellin:<br>
-After you kill the <font color="LEVEL">leto lizardmen</font> and <font color="LEVEL">harit lizardmen</font> with that dagger, you must use the Blood Crystal to absorb their blood.  <br>When you raise the purity of the crystal and return it to me, I shall give you a reward. The higher the level of purity, the greater your reward will be.  There is an element of risk, however, as each time it is possible that the crystal will be destroyed.<br>You will find that certain grades of blood are useful and some grades have no effect at all on the Blood Crystal. This can only be determined by trial and error...</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-05.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-05.htm
deleted file mode 100644
index b9b0b1599501c93d32b79f995fa1635e52376117..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-05.htm
+++ /dev/null
@@ -1,5 +0,0 @@
-<html><body>Cybellin:<br>
-The purity of the crystal is still at level 1! Have you decided not to carry out my request?<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30746-04.htm">"How can I raise the purity of the crystal?"</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30746-03.htm">Continue</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30746-12.htm">Quit</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-07.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-07.htm
deleted file mode 100644
index 32c0c6e3a6491b2e63c96af3704282a0128034f1..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-07.htm
+++ /dev/null
@@ -1,4 +0,0 @@
-<html><body>Cybellin:<br>
-You have successfully created a Blood Crystal of level 10 purity! Oh my Shilen! That's awesome! As I promised, I will pay you the reward money. Thank you so very much!<br>Well, may I ask you to do me another favor?<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30746-03.htm">Tell her that you will take up the task.</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30746-12.htm">Quit.</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-08.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-08.htm
deleted file mode 100644
index 5e8c2b7700494992d438c36e42ab55651bcf1e7a..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-08.htm
+++ /dev/null
@@ -1,4 +0,0 @@
-<html><body>Cybellin:<br>
-Excellent!  You shall receive your reward based on the level of purity of the Blood Crystal.  Good job! Could I ask you another favor?<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30746-03.htm">"I will do another favor for you."</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30746-12.htm">"No, just give me the reward and I'll be on my way."</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-09.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-09.htm
deleted file mode 100644
index 70584a919e8a7ae655e46bed165cbe5fba6e4d03..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-09.htm
+++ /dev/null
@@ -1,2 +0,0 @@
-<html><body>Cybellin:<br>
-Fine, I will explain my request. You must increase the purity of a Blood Crystal and bring it to me. This is accomplished by dipping the crystal in the blood of <font color="LEVEL">leto lizardmen</font> and <font color="LEVEL">harit lizardmen</font> after you kill them with the dagger I gave you.  If you are able to increase the crystal's purity to a level of 10 without destroying it, I will use my entire fortune to procure your reward!</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-10.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-10.htm
deleted file mode 100644
index eac68bc75508fc0cb82ee18a9ca7e2b5df966237..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-10.htm
+++ /dev/null
@@ -1,4 +0,0 @@
-<html><body>Cybellin:<br>
-Hunter, will you continue to help me?<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30746-03.htm">"Yes."</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30746-12.htm">"No."</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-11.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-11.htm
deleted file mode 100644
index 0728d34b6923bad41502d59ee3efe05909b6ff83..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-11.htm
+++ /dev/null
@@ -1,4 +0,0 @@
-<html><body>Cybellin:<br>
-Ah, yes... Shattered...  The crystal's structure was unstable and it failed. Don't be discouraged. Here is another crystal, will you please try again?<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30746-03.htm">"Yes."</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30746-12.htm">"No."</a></body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-12.htm b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-12.htm
deleted file mode 100644
index 0804e99113df54ae4b971ccbe09987e5e6ec8e82..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-12.htm
+++ /dev/null
@@ -1,2 +0,0 @@
-<html><body>Cybellin:<br>
-Thank you for your help. May Shilen protect you...</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/__init__.py b/dist/game/data/scripts/quests/335_TheSongOfTheHunter/__init__.py
deleted file mode 100644
index c7643fbf99d62b819dfd6a9e54eaa9fd8535f3b5..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/__init__.py
+++ /dev/null
@@ -1,631 +0,0 @@
-#Made by Emperorc
-import sys
-from com.l2jserver.gameserver.enums.audio import Sound
-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.util import Rnd
-from com.l2jserver.gameserver.network.serverpackets import NpcSay
-
-qn = "335_TheSongOfTheHunter"
-
-#NPCS
-Grey = 30744
-Tor = 30745
-Cybellin = 30746
-
-#Items
-Cyb_Dagger = 3471
-License_1 = 3692
-License_2 = 3693
-Leaf_Pin = 3694
-Test_Instructions_1 = 3695
-Test_Instructions_2 = 3696
-Cyb_Req = 3697
-
-#Mobs
-Breka_Orc_Warrior = 20271
-Windsus = 20553
-Tarlk_Bugbear_Warrior = 20571
-Gremlin_Filcher = 27149
-Mobs = [Breka_Orc_Warrior, Windsus, Tarlk_Bugbear_Warrior, Gremlin_Filcher]
-Lizardmen = [20578,20579,20581,20582,20641,20642,20643]
-
-#Droplist Format- npcId:[itemId,itemAmount,chance]
-Level_1 = {
-    20550 : [3709,40,75], #Gaurdian Basilisk
-    20581 : [3710,20,50], #Leto Lizardman Shaman
-    27140 : [3711,1,100], #Breka Overlord Haka
-    27141 : [3712,1,100], #Breka Overlord Jaka
-    27142 : [3713,1,100], #Breka Overlord Marka
-    27143 : [3714,1,100], #Windsus Aleph
-    20563 : [3715,20,50], #Manashen Gargoyle
-    20565 : [3715,20,50], #Enchanted Stone Golemn
-    20555 : [3716,30,70], #Giant Fungus
-    }
-Level_2 = {
-    20586 : [3717,20,50],   #Timak Orc Warrior
-    20560 : [3718,20,50],   #Trisalim Spider
-    20561 : [3718,20,50],   #Trisalim Tarantula
-    20591 : [3719,30,100],  #Valley Treant
-    20597 : [3719,30,100],  #Valley Treant Elder
-    20675 : [3720,20,50],   #Tairim
-    20660 : [3721,20,50],   #Archer of Greed
-    27144 : [3722,1,100],   #Tarlk Raider Athu
-    27145 : [3723,1,100],   #Tarlk Raider Lanka
-    27146 : [3724,1,100],   #Tarlk Raider Triska
-    27147 : [3725,1,100],   #Tarlk Raider Motura
-    27148 : [3726,1,100],   #Tarlk Raider Kalath
-    }
-
-Grey_Advance = [
-    #level 1
-    [[3709],40],
-    [[3710],20],
-    [[3711,3712,3713],1],
-    [[3714],1],
-    [[3715],20],
-    [[3716],30],
-    #level 2
-    [[3717],20],
-    [[3718],20],
-    [[3719],30],
-    [[3720],20],
-    [[3721],20],
-    [[3722,3723,3724,3725,3726],1]
-    ]
-
-#Droplist Format- npcId : [itemRequired,itemGive,itemToGiveAmount,itemAmount,chance]
-Tor_requests_1 = {
-    20578 : [3727,3769,'1',40,80],  #Leto Lizardman Archer
-    20579 : [3727,3769,'1',40,83],  #Leto Lizardman Soldier
-    20586 : [3728,3770,'1',50,89],  #Timak Orc Warrior
-    20588 : [3728,3770,'1',50,100], #Timak Orc Overlord
-    20565 : [3729,3771,'1',50,100], #Enchanted Stone Golem
-    20556 : [3730,3772,'1',30,50],  #Giant Monster Eye
-    20557 : [3731,3773,'1',40,80],  #Dire Wyrm
-    20550 : [3732,3774,'Rnd.get(2) + 1',100,100], #Guardian Basilisk
-    20552 : [3733,3775,'1',50,100], #Fettered Soul
-    20553 : [3734,3776,'1',30,50],  #Windsus
-    20554 : [3735,3777,'2',100,100],#Grandis
-    20631 : [3736,3778,'1',50,100], #Taik Orc Archer
-    20632 : [3736,3778,'1',50,93],  #Taik Orc Warrior
-    20600 : [3737,3779,'1',30,50],  #Karul Bugbear
-    20601 : [3738,3780,'1',40,62],  #Tamlin Orc
-    20602 : [3738,3780,'1',40,80],  #Tamlin Orc Archer
-    27157 : [3739,3781,'1',1,100],  #Leto Chief Narak
-    20567 : [3740,3782,'1',50,50],  #Enchanted Gargoyle
-    20269 : [3741,3783,'1',50,93],  #Breka Orc Shaman
-    20271 : [3741,3783,'1',50,100], #Breka Orc Warrior
-    27156 : [3742,3784,'1',1,100],  #Leto Shaman Ketz
-    27158 : [3743,3785,'1',1,100],  #Timak Raider Kaikee
-    20603 : [3744,3786,'1',30,50],  #Kronbe Spider
-    27160 : [3746,3788,'1',1,100],  #Gok Magok
-    27164 : [3747,3789,'1',1,100]   #Karul Chief Orooto
-    }
-
-#Droplist Format- npcId : [itemRequired,itemGive,itemAmount,chance]
-Tor_requests_2 = {
-    20560 : [3749,3791,40,66],  #Trisalim Spider
-    20561 : [3749,3791,40,75],  #Trisalim Tarantula
-    20633 : [3750,3792,50,53],  #Taik Orc Shaman
-    20634 : [3750,3792,50,99],  #Taik Orc Captain
-    20641 : [3751,3793,40,88],  #Harit Lizardman Grunt
-    20642 : [3751,3793,40,88],  #Harit Lizardman Archer
-    20643 : [3751,3793,40,91],  #Harit Lizardman Warrior
-    20661 : [3752,3794,20,50],  #Hatar Ratman Thief
-    20662 : [3752,3794,20,52],  #Hatar Ratman Boss
-    20667 : [3753,3795,30,90],  #Farcran
-    20589 : [3754,3796,40,49],  #Fline
-    20590 : [3755,3797,40,51],  #Liele
-    20592 : [3756,3798,40,80],  #Satyr
-    20598 : [3756,3798,40,100], #Satyr Elder
-    20682 : [3758,3800,30,70],  #Vanor Silenos Grunt
-    20683 : [3758,3800,30,85],  #Vanor Silenos Scout
-    20684 : [3758,3800,30,90],  #Vanor Silenos Warrior
-    20571 : [3759,3801,30,63],  #Tarlk Bugbear Warrior
-    27159 : [3760,3802,1,100],  #Timak Overlord Okun
-    27161 : [3761,3803,1,100],  #Taik Overlord Kakran
-    20639 : [3762,3804,40,86],  #Mirror
-    20664 : [3763,3805,20,77],  #Deprive
-    20593 : [3764,3806,20,68],  #Unicorn
-    20599 : [3764,3806,20,86],  #Unicorn Elder
-    27163 : [3765,3807,1,100],  #Vanor Elder Kerunos
-    20659 : [3766,3808,20,73],  #Grave Wanderer
-    27162 : [3767,3809,1,100],  #Hatar Chieftain Kubel
-    20676 : [3768,3810,10,64]   #Judge of Marsh
-    }
-#FilcherDropList Format- reqId : [item,amount,bonus]
-Filcher = {
-    3752 : [3794,20,3],
-    3754 : [3796,40,5],
-    3755 : [3797,40,5],
-    3762 : [3804,40,5]
-    }
-
-#SpawnList Format- npcId : [item1,item2,npcToSpawn]
-Tor_requests_tospawn = {
-    20582 : [3739,3781,27157],  #Leto Lizardman Overlord
-    20581 : [3742,3784,27156],  #Leto Lizardman Shaman
-    20586 : [3743,3785,27158],  #Timak Orc Warrior
-    20554 : [3746,3788,27160],  #Grandis
-#level 2
-    20588 : [3760,3802,27159],   #Timak Orc Overlord
-    20634 : [3761,3803,27161],   #Tiak Orc Captain
-    20686 : [3765,3807,27163],   #Vanor Silenos Chieftan
-    20662 : [3767,3809,27162]    #Hatar Ratman Boss
-    }
-
-#RewardsList Format- requestId : [item,quantity,rewardAmount]
-Tor_Rewards_1 = {
-    3727 : [3769,40,2090],
-    3728 : [3770,50,6340],
-    3729 : [3771,50,9480],
-    3730 : [3772,30,9110],
-    3731 : [3773,40,8690],
-    3732 : [3774,100,9480],
-    3733 : [3775,50,11280],
-    3734 : [3776,30,9640],
-    3735 : [3777,100,9180],
-    3736 : [3778,50,5160],
-    3737 : [3779,30,3140],
-    3738 : [3780,40,3160],
-    3739 : [3781,1,6370],
-    3740 : [3782,50,19080],
-    3741 : [3783,50,17730],
-    3742 : [3784,1,5790],
-    3743 : [3785,1,8560],
-    3744 : [3786,30,8320],
-    3746 : [3788,1,27540],
-    3747 : [3789,1,20560],
-    }
-
-Tor_Rewards_2 = {
-    3749 : [3791,40,7250],
-    3750 : [3792,50,7160],
-    3751 : [3793,40,6580],
-    3752 : [3794,20,10100],
-    3753 : [3795,30,13000],
-    3754 : [3796,40,7660],
-    3755 : [3797,40,7660],
-    3756 : [3798,40,11260],
-    3758 : [3800,30,8810],
-    3759 : [3801,30,7350],
-    3760 : [3802,1,8760],
-    3761 : [3803,1,9380],
-    3762 : [3804,40,17820],
-    3763 : [3805,20,17540],
-    3764 : [3806,20,14160],
-    3765 : [3807,1,15960],
-    3766 : [3808,20,39100],
-    3767 : [3809,1,39550],
-    3768 : [3810,10,41200]
-    }
-
-#Format item : adenaAmount
-Cyb_Rewards = {
-    3699 : 3400,
-    3700 : 6800,
-    3701 : 13600,
-    3702 : 27200,
-    3703 : 54400,
-    3704 : 108800,
-    3705 : 217600,
-    3706 : 435200,
-    3707 : 870400
-    }
-
-Tor_menu = [
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3727\">C: Obtain 40 charms of Kadesh</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3728\">C: Collect 50 Timak Jade Necklaces</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3729\">C: Gather 50 Enchanted Golem Shards</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3730\">C: Collect and bring back 30 pieces of Giant Monster Eye Meat</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3731\">C: Collect and bring back 40 Dire Wyrm Eggs</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3732\">C: Collect and bring back 100 guardian basilisk talons</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3733\">C: Collect and bring back 50 revenants chains</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3734\">C: Collect and bring back 30 Windsus Tusks</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3735\">C: Collect and bring back 100 Grandis Skulls</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3736\">C: Collect and bring back 50 Taik Obsidian Amulets</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3737\">C: Bring me 30 heads of karul bugbears</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3738\">C: Collect 40 Tamlin Ivory Charms</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3739\">B: Bring me the head of Elder Narak of the leto lizardmen</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3740\">B: Collect and bring back 50 Enchanted Gargoyle Horns</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3741\">B: Collect and bring back 50 Coiled Serpent Totems</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3742\">B: Bring me the totem of the Serpent Demon Kadesh</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3743\">B: Bring me the head of Kaikis</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3744\">B: Collect and bring back 30 Kronbe Venom Sacs</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3746\">A: Recover the precious stone tablet that was stolen from a Dwarven cargo wagon by grandis</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3747\">A: Recover the precious Book of Shunaiman</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3749\">C: Collect and bring back 40 Trisalim Venom Sacs</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3750\">C: Collect and bring back 50 Taik Orc Totems</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3751\">C: Collect and bring back 40 Harit Lizardman barbed necklaces</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3752\">C: Collect and bring back 20 coins of the old empire</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3753\">C: Kill 30 farcrans and bring back their skins</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3754\">C: Collect and bring back 40 Tempest Shards</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3755\">C: Collect and bring back 40 Tsunami Shards</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3756\">C: Collect and bring back 40 Satyr Manes</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3758\">C: Collect and bring back 30 Shillien Manes</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3759\">C: Collect and bring back 30 tarlk bugbear totems</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3760\">B: Bring me the head of Okun</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3761\">B: Bring me the head of Kakran</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3762\">B: Collect and bring back 40 narcissus soulstones</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3763\">B: Collect and bring back 20 Deprive Eyes</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3764\">B: Collect and bring back 20 horns of summon unicorn</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3765\">B: Bring me the golden mane of Kerunos</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3766\">A: Bring back 20 skulls of undead executed criminals</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3767\">A: Recover the stolen bust of the late King Travis</a><br>",
-    "<a action=\"bypass -h Quest 335_TheSongOfTheHunter 3768\">A: Recover 10 swords of Cadmus</a><br>"
-    ]
-
-
-def HasItems(st,check) :
-    count = 0
-    for list in Grey_Advance :
-        count2 = 0
-        for item in list[0] :
-            if not st.getQuestItemsCount(item) >= list[1] :
-                break
-            count2 += 1
-        if count2 == len(list[0]) :
-            count += 1
-    if count >= check :
-        return 1
-    return 0
-
-def AutoChat(npc,text) :
-    chars = npc.getKnownList().getKnownPlayers().values().toArray()
-    if chars != None:
-       for pc in chars :
-          sm = NpcSay(npc.getObjectId(), 0, npc.getId(), text)
-          pc.sendPacket(sm)
-
-def HasRequestCompleted(st,level) :
-    rewards = Tor_Rewards_1
-    if level == 2 :
-        rewards = Tor_Rewards_2
-    for req in rewards.keys() :
-        if st.getQuestItemsCount(req) :
-            if st.getQuestItemsCount(rewards[req][0]) >= rewards[req][1] :
-                return req
-    return 0    
-
-class Quest (JQuest) :
-
-    def __init__(self,id,name,descr):
-        JQuest.__init__(self,id,name,descr)
-        self.questItemIds = range(3692,3811) + [3471]
-
-    def onAdvEvent (self,event,npc,player):
-        st = self.getQuestState(player, False)
-        if not st: return
-        htmltext = event
-        if event == "30744-03.htm" :
-            st.setState(State.STARTED)
-            st.playSound(Sound.ITEMSOUND_QUEST_ACCEPT)
-            st.giveItems(Test_Instructions_1,1)
-            st.set("cond","1")
-            #set Memo = 0
-        elif event == "30744-32.htm" :
-            st.playSound(Sound.ITEMSOUND_QUEST_FINISH)
-            if st.getQuestItemsCount(Leaf_Pin) >= 20 :
-                htmltext = "30744-33.htm"
-                st.giveItems(57,20000)
-            st.exitQuest(1)
-        elif event == "30744-19.htm" :
-            if not HasItems(st,1) :
-                st.giveItems(Test_Instructions_2,1)
-                htmltext = "30744-18.htm"
-        elif event == "30745-03.htm" :
-            if st.getQuestItemsCount(Test_Instructions_2) :
-                htmltext = "30745-04.htm"
-        elif event == "Tor_list_1" :
-            if not st.getInt("hasTask") :
-                htmltext = "<html><body>Guild Member Tor:<br>"
-                pins = st.getQuestItemsCount(Leaf_Pin)
-                reply_0 = Rnd.get(12)
-                reply_1 = Rnd.get(12)
-                reply_2 = Rnd.get(12)
-                reply_3 = Rnd.get(12)
-                reply_4 = Rnd.get(12)
-                if Rnd.get(100) < 20 :
-                    if pins < 4 and pins :
-                        reply_0 = Rnd.get(6) + 12
-                        reply_2 = Rnd.get(6)
-                        reply_3 = Rnd.get(6) + 6
-                    elif pins >= 4 :
-                        reply_0 = Rnd.get(6) + 6
-                        if not Rnd.get(20) :
-                            reply_1 = Rnd.get(2) + 18
-                        reply_2 = Rnd.get(6)
-                        reply_3 = Rnd.get(6) + 6
-                elif pins >= 4 :
-                    if not Rnd.get(20) :
-                        reply_1 = Rnd.get(2) + 18
-                    reply_2 = Rnd.get(6)
-                    reply_3 = Rnd.get(6) + 6
-                htmltext += Tor_menu[reply_0] + Tor_menu[reply_1] + Tor_menu[reply_2] + Tor_menu[reply_3] + Tor_menu[reply_4]
-                htmltext += "</body></html>"
-        elif event == "Tor_list_2" :
-            if not st.getInt("hasTask") :
-                htmltext = "<html><body>Guild Member Tor:<br>"
-                pins = st.getQuestItemsCount(Leaf_Pin)
-                reply_0 = Rnd.get(10)
-                reply_1 = Rnd.get(10)
-                reply_2 = Rnd.get(5)
-                reply_3 = Rnd.get(5) + 5
-                reply_4 = Rnd.get(10)
-                if Rnd.get(100) < 20 :
-                    if pins < 4 and pins:
-                        reply_0 = Rnd.get(6) + 10
-                    elif pins >= 4 :
-                        reply_0 = Rnd.get(6) + 10
-                        if not Rnd.get(20):
-                            reply_1 = Rnd.get(3) + 16
-                elif pins >= 4 :
-                    if not Rnd.get(20) :
-                        reply_1 = Rnd.get(3) + 16
-                htmltext += Tor_menu[reply_0 + 20] + Tor_menu[reply_1 + 20] + Tor_menu[reply_2 + 20] + Tor_menu[reply_3 + 20] + Tor_menu[reply_4 + 20]
-                htmltext += "</body></html>"
-        elif event == "30745-10.htm" :
-            st.takeItems(Leaf_Pin,1)
-            for item in range(3727,3811) :
-                st.takeItems(item,-1)
-            st.set("hasTask","0")
-        elif event == "30746-03.htm" :
-            if not st.getQuestItemsCount(Cyb_Req) :
-                st.giveItems(Cyb_Req,1)
-            if not st.getQuestItemsCount(3471) :
-                st.giveItems(3471,1)
-            if not st.getQuestItemsCount(3698) :
-                st.giveItems(3698,1)
-            st.takeItems(6708,-1)
-        elif event == "30746-08.htm" :
-            for item in Cyb_Rewards.keys() :
-                if st.getQuestItemsCount(item) :
-                    st.takeItems(item,-1)
-                    st.giveItems(57,Cyb_Rewards[item])
-                    break
-        elif event == "30746-12.htm" :
-            st.takeItems(3698,-1)
-            st.takeItems(3697,-1)
-            st.takeItems(3471,-1)
-        elif event.isdigit() :
-            event = int(event)
-            st.giveItems(event,1)
-            st.set("hasTask","1")
-            event = event - 3712
-            htmltext = "30745-" + str(event) + ".htm"
-        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()
-        level = player.getLevel()
-        bracelet_1 = st.getQuestItemsCount(License_1)
-        bracelet_2 = st.getQuestItemsCount(License_2)
-        if npcId == Grey :
-            if id == State.CREATED :
-                if level >= 35 :
-                    htmltext = "02"
-                else :
-                    htmltext = "01"
-            elif cond == 1 :
-                if HasItems(st,3) :
-                    htmltext = "12"
-                    st.set("cond","2")
-                    for item in range(3709,3717) :
-                        st.takeItems(item,-1)
-                    st.takeItems(Test_Instructions_1,-1)
-                    st.giveItems(License_1,1)
-                else :
-                    htmltext = "11"
-            elif cond == 2 :
-                instructions = st.getQuestItemsCount(Test_Instructions_2)
-                if level < 45 and bracelet_1 :
-                    htmltext = "13"
-                elif level >= 45 and bracelet_1 and not instructions :
-                    htmltext = "16"
-                elif instructions :
-                    if HasItems(st,3) :
-                        htmltext = "28"
-                        st.set("cond","3")
-                        for item in range(3718,3727) :
-                            st.takeItems(item,-1)
-                        st.takeItems(Test_Instructions_2,-1)
-                        st.takeItems(License_1,-1)
-                        st.giveItems(License_2,1)
-                    else :
-                        htmltext = "27"
-            elif cond == 3 :
-                htmltext = "29"
-        elif npcId == Tor :
-            if not bracelet_1 and not bracelet_2 :
-                htmltext = "01"
-            elif bracelet_1 :
-                req = HasRequestCompleted(st,1)
-                if not st.getInt("hasTask") :
-                    if level >= 45 :
-                        if st.getQuestItemsCount(Test_Instructions_2) :
-                            htmltext = "04"
-                        else :
-                            htmltext = "05"
-                    else :
-                        htmltext = "02"
-                elif req :
-                    htmltext = "12"
-                    item,quantity,reward = Tor_Rewards_1[req]
-                    st.giveItems(Leaf_Pin,1)
-                    st.giveItems(57,reward)
-                    st.playSound(Sound.ITEMSOUND_QUEST_MIDDLE)
-                    st.set("hasTask","0")
-                    st.takeItems(req,-1)
-                    st.takeItems(item,-1)
-                else :
-                    htmltext = "08"
-            elif bracelet_2 :
-                req = HasRequestCompleted(st,2)
-                if not st.getInt("hasTask") :
-                    htmltext = "06"
-                elif req :
-                    htmltext = "13"
-                    item,quantity,reward = Tor_Rewards_2[req]
-                    st.giveItems(Leaf_Pin,1)
-                    st.giveItems(57,reward)
-                    st.playSound(Sound.ITEMSOUND_QUEST_MIDDLE)
-                    st.set("hasTask","0")
-                    st.takeItems(req,-1)
-                    st.takeItems(item,-1)
-                else :
-                    htmltext = "08"
-        elif npcId == Cybellin :
-            if not bracelet_1 and not bracelet_2 :
-                htmltext = "01"
-            elif bracelet_1 or bracelet_2 :
-                if not st.getQuestItemsCount(Cyb_Req) :
-                    htmltext = "02"
-                elif st.getQuestItemsCount(3698) :
-                    htmltext = "05"
-                elif st.getQuestItemsCount(3707) :
-                    htmltext = "07"
-                    st.takeItems(3707,-1)
-                    st.giveItems(57,Cyb_Rewards[3707])
-                elif st.getQuestItemsCount(3708) :
-                    htmltext = "11"
-                    st.takeItems(3708,-1)
-                elif st.getQuestItemsCount(3699) or st.getQuestItemsCount(3700) or st.getQuestItemsCount(3701) or st.getQuestItemsCount(3702) or \
-                     st.getQuestItemsCount(3703) or st.getQuestItemsCount(3704) or st.getQuestItemsCount(3705) or st.getQuestItemsCount(3706) :
-                    htmltext = "06"
-                else :
-                    htmltext = "10"
-        if htmltext.isdigit() :
-            htmltext = str(npcId) + "-" + htmltext + ".htm"
-        return htmltext
-
-    def onKill(self,npc,player,isPet):
-        st = self.getQuestState(player, False)
-        if not st : return
-        npcId = npc.getId()
-        cond = st.getInt("cond")
-        rand = Rnd.get(100)
-        instructions_1 = st.getQuestItemsCount(Test_Instructions_1)
-        instructions_2 = st.getQuestItemsCount(Test_Instructions_2)
-        if cond == 1 and instructions_1 :
-            if npcId in Level_1.keys() :
-                item,amount,chance = Level_1[npcId]
-                if rand < chance and st.getQuestItemsCount(item) < amount :
-                    st.giveItems(item,1)
-                    if st.getQuestItemsCount(item) >= amount :
-                        st.playSound(Sound.ITEMSOUND_QUEST_MIDDLE)
-                    else :
-                        st.playSound(Sound.ITEMSOUND_QUEST_ITEMGET)
-            elif npcId == Breka_Orc_Warrior and rand < 10 :
-                if st.getQuestItemsCount(3711) == 0 :
-                    st.addSpawn(27140,300000)
-                elif st.getQuestItemsCount(3712) == 0 :
-                    st.addSpawn(27141,300000)
-                elif st.getQuestItemsCount(3713) == 0 :
-                    st.addSpawn(27142,300000)
-            elif npcId == Windsus and not st.getQuestItemsCount(3714) and rand < 10 :
-                st.addSpawn(27143,300000)
-        elif cond == 2 :
-            if instructions_2 :
-                if npcId in Level_2.keys() :
-                    item,amount,chance = Level_2[npcId]
-                    if rand < chance and st.getQuestItemsCount(item) < amount :
-                        st.giveItems(item,1)
-                        if st.getQuestItemsCount(item) >= amount :
-                            st.playSound(Sound.ITEMSOUND_QUEST_MIDDLE)
-                        else :
-                            st.playSound(Sound.ITEMSOUND_QUEST_ITEMGET)
-                elif npcId == Tarlk_Bugbear_Warrior and rand < 10 :
-                    if st.getQuestItemsCount(3722) == 0 :
-                        st.addSpawn(27144,300000)
-                    elif st.getQuestItemsCount(3723) == 0 :
-                        st.addSpawn(27145,300000)
-                    elif st.getQuestItemsCount(3724) == 0 :
-                        st.addSpawn(27146,300000)
-                    elif st.getQuestItemsCount(3725) == 0 :
-                        st.addSpawn(27147,300000)
-                    elif st.getQuestItemsCount(3726) == 0 :
-                        st.addSpawn(27148,300000)
-            elif npcId in Tor_requests_1.keys() :
-                req,give,giveAmount,amount,chance = Tor_requests_1[npcId]
-                if rand < chance and st.getQuestItemsCount(req) and st.getQuestItemsCount(give) < amount :
-                    st.giveItems(give,eval(giveAmount))
-                    if st.getQuestItemsCount(give) >= amount :
-                        st.playSound(Sound.ITEMSOUND_QUEST_MIDDLE)
-                    else :
-                        st.playSound(Sound.ITEMSOUND_QUEST_ITEMGET)
-                    if npcId in [27160,27164] and Rnd.get(2) :
-                        st.addSpawn(27150,300000)
-                        st.addSpawn(27150,300000)
-                        AutoChat(npc,"We will destroy the legacy of the ancient empire!")
-        elif cond == 3 :
-            if npcId in Tor_requests_2.keys() :
-                req,give,amount,chance = Tor_requests_2[npcId]
-                if st.getQuestItemsCount(req) and st.getQuestItemsCount(give) < amount :
-                    if rand < chance :
-                        st.giveItems(give,1)
-                        if st.getQuestItemsCount(give) >= amount :
-                            st.playSound(Sound.ITEMSOUND_QUEST_MIDDLE)
-                        else :
-                            st.playSound(Sound.ITEMSOUND_QUEST_ITEMGET)
-                        if npcId == 27162 and Rnd.get(2) :
-                            st.addSpawn(27150,300000)
-                            st.addSpawn(27150,300000)
-                            AutoChat(npc,"We will destroy the legacy of the ancient empire!")
-                    if npcId in [20661,20662,20589,20590,20639] and not Rnd.get(20) :
-                        st.addSpawn(Gremlin_Filcher,300000)
-                        AutoChat(npc,"Get out! The jewels are mine!")
-            elif npcId == Gremlin_Filcher :
-                req = 0
-                for item in Filcher.keys() :
-                    if st.getQuestItemsCount(item) :
-                        req = item
-                        break
-                if req :
-                    item,amount,bonus = Filcher[req]
-                    if st.getQuestItemsCount(item) < amount :
-                        st.giveItems(item,bonus)
-                        if st.getQuestItemsCount(item) >= amount :
-                            st.playSound(Sound.ITEMSOUND_QUEST_MIDDLE)
-                        else :
-                            st.playSound(Sound.ITEMSOUND_QUEST_ITEMGET)
-                        AutoChat(npc,"What!")
-        if npcId in Tor_requests_tospawn.keys() and rand < 10:
-            it1,it2,id = Tor_requests_tospawn[npcId]
-            if st.getQuestItemsCount(it1) and not st.getQuestItemsCount(it2) :
-                st.addSpawn(id,300000)
-        if npcId in Lizardmen and player.getActiveWeaponItem() and player.getActiveWeaponItem().getId() == Cyb_Dagger and st.getQuestItemsCount(Cyb_Req) and not st.getQuestItemsCount(3708):
-            if Rnd.get(2) :
-                if cond == 2 or cond == 3 :
-                    for item in range(3698,3707) :
-                        if st.getQuestItemsCount(item) :
-                            st.giveItems(item+1,1)
-                            st.takeItems(item,-1)
-                            if item >= 3703 :
-                                st.playSound(Sound.ITEMSOUND_QUEST_JACKPOT)
-                            break
-            else :
-                for item in range(3698,3707) :
-                    st.takeItems(item,-1)
-                st.giveItems(3708,1)
-        return
-
-QUEST = Quest(335,qn,"The Song of the Hunter")
-
-QUEST.addStartNpc(Grey)
-QUEST.addTalkId(Grey)
-QUEST.addTalkId(Tor)
-QUEST.addTalkId(Cybellin)
-
-npcs = []
-for npc in Level_1.keys() + Level_2.keys() + Tor_requests_1.keys() + Tor_requests_2.keys() + Tor_requests_tospawn.keys() + Mobs :
-    if npc not in npcs :
-        QUEST.addKillId(npc)
-        npcs.append(npc)
-del npcs
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-01.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-01.htm
new file mode 100644
index 0000000000000000000000000000000000000000..651644caac019723c9360673d57f1dbe9c187705
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-01.htm
@@ -0,0 +1,6 @@
+<html><body>Guild Member Grey:<br>
+Many aspire to join our guild. Many such as you only see the glamorous side of our profession.<br>
+Becoming a hunter is not an easy task. Only the very best and brightest are selected for membership in the Hunters Guild. A hunting license is only given to those who pass a very severe test.<br>
+Many give up before a week has passed. Does that sound like you?<br>
+(This quest is only for characters level 35 and above.)
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-02.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-02.htm
new file mode 100644
index 0000000000000000000000000000000000000000..d35084fe428b4fded57517c2cca836d9fcedd7b9
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-02.htm
@@ -0,0 +1,6 @@
+<html><body>Guild Member Grey:<br>
+Many aspire to join our guild. Many such as you only see the glamorous side of our profession.<br>
+Becoming a hunter is not an easy task. Only the very best and brightest are selected for membership in the Hunters Guild. A hunting license is only given to those who pass a very severe test.<br>
+Many give up before a week has passed. Does that sound like you?<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-03.htm">"I wish to take the test for the hunting license."</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-03.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-03.htm
new file mode 100644
index 0000000000000000000000000000000000000000..1e4caa9e638d798591ca7286839075bb941167e1
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-03.htm
@@ -0,0 +1,6 @@
+<html><body>Guild Member Grey:<br>
+Did I hurt your feelings? Do you actually intend to try for the hunting license? If so, you must listen carefully to my words...<br>
+There are two types of hunters. Most hunters are 1-circle, but very skillful ones can obtain the 2-circle license by passing another test. Of course you must take the <font color="LEVEL">1-circle license test</font> first.<br>
+To pass this test, you must bring back at least three of the items on this list.<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-04.html">View the list</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-04.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-04.html
new file mode 100644
index 0000000000000000000000000000000000000000..01ee7889d3110f951e57887fef8a9ca44e6c2bd3
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-04.html
@@ -0,0 +1,9 @@
+<html><body>Hunters Guild Member Grey:<br>
+Next is the 1-circle hunter license test list. To pass the test, you have to bring at least three items from the list. Keep in mind that this is not just a simple treasure hunt but is a test to find out whether you have the nature and disposition of a hunter!<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-04a.html">40 scales of guardian basilisk</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-04b.html">20 Karut Weeds</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-04c.html">3 heads of raiders with the lord's bounty on their heads</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-04d.html">Skin of Windsus Aleph</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-04e.html">20 light-blue Spirit Ore</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-04f.html">30 sea of spores seeds</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-04a.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-04a.html
new file mode 100644
index 0000000000000000000000000000000000000000..80f65382448f457106babc121c000085f01a7380
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-04a.html
@@ -0,0 +1,5 @@
+<html><body>Guild Member Grey:<br>
+You must gather <font color="LEVEL">40 scales of guardian basilisk</font>. They live in the <font color="LEVEL">Death Pass</font>.<br>
+I really shouldn't tell you this... Gathering information about the items is a part of the test. Count yourself lucky to have received this valuable one-time hint!<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-04.html">Go back</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-04b.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-04b.html
new file mode 100644
index 0000000000000000000000000000000000000000..4d864723a3744c58791cd7e1ad9d9b4df921ee70
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-04b.html
@@ -0,0 +1,5 @@
+<html><body>Guild Member Grey:<br>
+You must gather <font color="LEVEL">20 Karut Weeds</font>, used in the research of mages. The leto Lizardman mediums carry them. You may find the Leto Lizardmen in the southern part of Oren.<br>
+Gathering information about the items is a part of the test. Count yourself lucky to have received this valuable one-time hint!<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-04.html">Go back</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-04c.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-04c.html
new file mode 100644
index 0000000000000000000000000000000000000000..2587bf0cc271deb6151fc016589d24fece33dcce
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-04c.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Grey:<br>
+You must kill the three evil outlaw Haka brothers and bring back their heads. They are named <font color="LEVEL">Haka, Jakja and Marka</font>. They are prefects of the Breka Orc tribe. They wantonly attack merchants' carriages, massacre citizens and set fire to their homes. There has been a bounty placed by on their heads by the Lord of Giran, therefore they have been laying low. But with the <font color="LEVEL">Breka Orc Warriors</font> destroyed, they are bound to appear seeking revenge.<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-04.html">Go back</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-08.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-04d.html
similarity index 79%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-08.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-04d.html
index 0cb779479e32937fa8d10e0e3bbc360c472b9606..2bf585da4ead9871af6d3d279b74c1d5fce0a713 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-08.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-04d.html
@@ -1,3 +1,4 @@
 <html><body>Guild Member Grey:<br>
 You must bring the skin of the <font color="LEVEL">Windsus Aleph</font>. It is a particularly strong and vicious black boar, native to the Giran region. To find him you must go to the <font color="LEVEL">Death Pass</font> and hunt windsuses, eventually you will come across the Windsus Aleph. Your arrow must fly the moment you see its face!<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-04.htm">Go back</a></body></html>
\ No newline at end of file
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-04.html">Go back</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-04e.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-04e.html
new file mode 100644
index 0000000000000000000000000000000000000000..5b19bcb94e3631062858430905ba4e0dcf197654
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-04e.html
@@ -0,0 +1,5 @@
+<html><body>Guild Member Grey:<br>
+You must gather <font color="LEVEL">20 light-blue Spirit Ore</font>. These Spirit Ore are obtained by destroying <font color="LEVEL">manashen gargoyles or enchanted stone golems</font> in the area near the Ivory Tower. To protect their precious tower from interlopers, the mages apparently have inplanted Spirit Ore in the creatures of that area and are controlling them.<br>
+This is all I will say on this matter. If you are a true hunter, you must gather the information and find the items yourself. Don't expect any more hints!<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-04.html">Go back</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-04f.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-04f.html
new file mode 100644
index 0000000000000000000000000000000000000000..cf9373e455f69037580592e6f7d22fca684a8716
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-04f.html
@@ -0,0 +1,5 @@
+<html><body>Guild Member Grey:<br>
+You must gather <font color="LEVEL">30 Sea of Spores seeds</font>. These can be obtained by going to the Sea of Spores and killing the <font color="LEVEL">giant fungus</font>.<br>
+Of course, I should let you discover this for yourself, but I'm just an old softie... No more hints!<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-04.html">Go back</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-11.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-05.html
similarity index 72%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-11.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-05.html
index 87c05df562a82790d38486f8be5e91899b622285..5a963ae6c8be021632d763fd684d04a19000535b 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-11.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-05.html
@@ -1,3 +1,4 @@
 <html><body>Guild Member Grey:<br>
 You must obtain at least three items from the list in order to obtain the 1-circle hunting license. Keep in mind that this is not merely a treasure hunt but is a test to find out if you have what it takes to be a hunter!<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-04.htm">View list</a></body></html>
\ No newline at end of file
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-04.html">View list</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-06.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-06.html
new file mode 100644
index 0000000000000000000000000000000000000000..ab4ccd2bd29f81200550be69c931ccd9c2fd656a
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-06.html
@@ -0,0 +1,5 @@
+<html><body>Guild Member Grey:<br>
+You have obtained the items from the list! I must admit that I doubted you at first, but I stand corrected! Well, you certainly qualify as a hunter. I hereby bestow on you the 1-circle hunting license. Welcome to the guild, new hunting brother!<br>
+Now you are qualified to perform the various tasks that come to our Hunters Guild. Please go and ask <font color="LEVEL">Guild Member Tor</font> over there for details.<br>
+Sometimes you will be assigned jobs by the guild, other times you'll be hired by individuals. Recently <font color="LEVEL">Cybellin</font> asked me to introduce him to a trustworthy hunter; would you like to meet him?
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-07.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-07.html
new file mode 100644
index 0000000000000000000000000000000000000000..1053d597c202cf29754ece1e8bcbb3dfdf293e80
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-07.html
@@ -0,0 +1,6 @@
+<html><body>Guild Member Grey:<br>
+Welcome, my hunter brother. What can I do for you?<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-07a.html">"Is there any work?"</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-07b.html">"I wish to test for the 2-circle hunter license."</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-15.html">"I wish to leave the Hunters Guild."</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-07a.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-07a.html
new file mode 100644
index 0000000000000000000000000000000000000000..9501fa12ee7911f8984d93b1852f1d2dd473fb09
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-07a.html
@@ -0,0 +1,5 @@
+<html><body>Guild Member Grey:<br>
+We get dozens of hunting requests every day. You should speak to <font color="LEVEL">Guild Member Tor</font> to find out what requests have currently come in. If there is a job that you like, you can accept it.<br>
+There is also the possibility of being hired by individuals. Recently <font color="LEVEL">Cybellin</font> asked me to introduce him to a trustworthy hunter. Would you care to meet him?<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-07.html">"Go back"</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-07b.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-07b.html
new file mode 100644
index 0000000000000000000000000000000000000000..a43eef63062a9316e8ab1c2e6746168535822c53
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-07b.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Grey:<br>
+You are already applying for the 2-circle hunting license? Nice to see that you don't lack ambition! But look. You're not ready. You do have some skills but you still need more important practical experience. For the time being, you should develop your talents while carrying out hunting requests.<br>
+(You can apply for the 2-circle license test after reaching level 45.)
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-08.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-08.html
new file mode 100644
index 0000000000000000000000000000000000000000..03bd97b5cd172bab30671d3a7ab41e924c3b8684
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-08.html
@@ -0,0 +1,6 @@
+<html><body>Guild Member Grey:<br>
+Welcome, my hunter brother. What can I do for you?<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-08a.html">"Are there any jobs?"</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-09.html">"I wish to test for the 2-circle hunting license."</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-15.html">Leave the Hunters Guild</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-08a.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-08a.html
new file mode 100644
index 0000000000000000000000000000000000000000..2148411975990e93028a49e323d38a627fdc5692
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-08a.html
@@ -0,0 +1,5 @@
+<html><body>Guild Member Grey:<br>
+We get dozens of hunting requests every day. You should see <font color="LEVEL">Guild Member Tor</font>, he will know what requests have come in. If there is a job that you like, you can accept it.<br>
+Hunters are also hired by individuals, not just through the guild. Recently <font color="LEVEL">Cybellin</font> asked me to introduce him to a trustworthy hunter. Would you care to meet him?<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-08.html">Go back</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-09.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-09.html
new file mode 100644
index 0000000000000000000000000000000000000000..54188b36c4083f0dea623dd822d3c26153f1dab3
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-09.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Grey:<br>
+So, you wish to take the 2-circle hunting license test? Well I suppose you're up to giving it a try. As before, in the 2-circle test you must bring back at least three items written on the list. Of course, these items will be harder to obtain than those of the 1-circle test. Maybe you should look at the list first...<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-10.html">View list</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-19.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-09a.html
similarity index 81%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-19.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-09a.html
index b67614d9b5a1553f25c629422fd2d2f60be67b6c..e90cac646eb15848be29951286b83af7ac365026 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-19.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-09a.html
@@ -1,2 +1,3 @@
 <html><body>Guild Member Grey:<br>
-Still taking the test, are you? Come and see me when you've finished.</body></html>
\ No newline at end of file
+Still taking the test, are you? Come and see me when you've finished.
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-10.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-10.html
new file mode 100644
index 0000000000000000000000000000000000000000..9206745bea8f26dc933d2fbfa3128e64b008d1a9
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-10.html
@@ -0,0 +1,9 @@
+<html><body>Guild Member Grey:<br>
+Here is the 2-circle hunting license test list. You must bring<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-10a.html">20 Timak Orc Totems</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-10b.html">20 skeins of trisalim cobweb</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-10c.html">30 Ambrosius Fruits</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-10d.html">20 Balefire Crystals</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-10e.html">20 Imperial Arrowheads</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-10f.html">The heads of 5 outlaw raiders</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-10a.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-10a.html
new file mode 100644
index 0000000000000000000000000000000000000000..954311dc3561d105f509762a3cc428d629c7d08a
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-10a.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Grey:<br>
+You must gather <font color="LEVEL">20 Timak Orc Totems</font>. To obtain them you must kill Timak Orc Warriors. You should have no trouble with this. Now go!<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-10.html">Go back</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-10b.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-10b.html
new file mode 100644
index 0000000000000000000000000000000000000000..188bdd23b53e5676c172e55b1d1e0f19ce8c9d1c
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-10b.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Grey:<br>
+You must gather <font color="LEVEL">20 trisalim cobwebs</font>. This should be no problem for you. Quickly now! Get them and come back to me!<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-10.html">Go back</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-10c.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-10c.html
new file mode 100644
index 0000000000000000000000000000000000000000..70107889c2b2289d63cafc87c00a8923db8dcdfa
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-10c.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Grey:<br>
+You must gather <font color="LEVEL">30 Ambrosius Fruits</font>. You are familiar with ambrosius, aren't you? It's a fruit somewhat like an apple that grows on valley treants in Enchanted Valley. This should be easy for you!<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-10.html">Go back</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-24.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-10d.html
similarity index 77%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-24.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-10d.html
index cb0f2a03dedce4c4c3b0c379a3514e264ed53427..a20213b3d3aa8d423d73623041df1c8a53d6c87f 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-24.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-10d.html
@@ -1,3 +1,4 @@
 <html><body>Guild Member Grey:<br>
 You must gather <font color="LEVEL">twenty Balefire Crystals</font>. Actually, I didn't know what this was so I asked the sorcerers about it. They said it could be obtained if you kill a <font color="LEVEL">tairim</font> in the Cemetery. This hint should be of great value to you.<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-20.htm">Go back</a></body></html>
\ No newline at end of file
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-10.html">Back</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-10e.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-10e.html
new file mode 100644
index 0000000000000000000000000000000000000000..9d6ae2da2f984e330015d96638154d0416c3b597
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-10e.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Grey:<br>
+You must gather <font color="LEVEL">20 Imperial Arrowheads</font>. This should be easy for you. If you go to the <font color="LEVEL">National Cemetery</font> and kill the undead archers, you can obtain arrowheads made during the Elmoreden era. Are you up for it?<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-10.html">Go back</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-10f.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-10f.html
new file mode 100644
index 0000000000000000000000000000000000000000..ddc1bf14632371ab5b510bfc940ab205973807bc
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-10f.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Grey:<br>
+You must kill five talk bugbear raiders and bring back their heads. Their names are Athu, Triska, Motura and Lanka, and they are led by one called Kalath. These <font color="LEVEL">talk bugbear warriors</font> have been attacking and pillaging merchant carriages. I'm sure you would deal with these outlaws even if it weren't a requirement of the test, wouldn't you?<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-10.html">Go back</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-27.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-11.html
similarity index 64%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-27.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-11.html
index 0e57c79584b5dff2bfa0bbfd03526aba8bb69bf9..2ecf6f40c5550da23b6dc82c61fc2d0293022265 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-27.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-11.html
@@ -1,3 +1,4 @@
 <html><body>Guild Member Grey:<br>
 How is the hunt going? Once again, you must bring at least three items from the list. This should be well within your abilities. Good luck!<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30744-20.htm">View list</a></body></html>
\ No newline at end of file
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-10.html">View list</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-12.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-12.html
new file mode 100644
index 0000000000000000000000000000000000000000..855af0330925f8460cceb1efb58bc18b77af8914
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-12.html
@@ -0,0 +1,5 @@
+<html><body>Guild Member Grey:<br>
+Good work! I knew that you would complete the test without much trouble. Now you are a respectable 2-circle hunter. Congratulations!<br>
+Now you are qualified for more dangerous hunts. Go see Guild Member Tor.<br>
+Or perhaps you should visit Cybellin. He is still looking for a good hunter...
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-14.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-14.html
new file mode 100644
index 0000000000000000000000000000000000000000..a82026be8186cf09f77f420249e5bd91bc8123ed
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-14.html
@@ -0,0 +1,5 @@
+<html><body>Guild Member Grey:<br>
+Hello, hunter brother. What can I do for you?<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-14a.html">"Are there any jobs?"</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-15.html">"I wish to leave the Hunters Guild."</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-14a.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-14a.html
new file mode 100644
index 0000000000000000000000000000000000000000..d241205bc6f394217cc766e4d1a29734c25082d8
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-14a.html
@@ -0,0 +1,5 @@
+<html><body>Guild Member Grey:<br>
+We get dozens of hunting requests every day. You should go to <font color="LEVEL">Guild Member Tor</font> to find out what requests have currently come in. If there is an assignment that appeals to you, you can accept it.<br>
+There are also individuals who wish to hire hunters. Recently <font color="LEVEL">Cybellin</font> asked me if I knew of a trustworthy hunter. Would you like to meet her?<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-14.html">Go back</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-15.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-15.html
new file mode 100644
index 0000000000000000000000000000000000000000..1b2e93896fa445973cced74eef054e7eff26b135
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-15.html
@@ -0,0 +1,6 @@
+<html><body>Guild Member Grey:<br>
+You wish to leave the guild? Certainly you know that is impossible. Once you join this brotherhood you are in for life... Didn't you know that?... You should reconsider your decision...<br>
+... The fear in your eyes makes it impossible for me to keep a straight face! I'm joking, you idiot! Of course you can leave if that is what you really want... You must have a good reason...<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-16.html">Leave</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30744-18.html">Cancel</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-32.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-16.html
similarity index 80%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-32.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-16.html
index 2cedbadee34cf1d8309892d4835ca8c9f3927e4b..fb7fd60b6d6c615529098d69daa03c2dcc700be8 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-32.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-16.html
@@ -1,2 +1,3 @@
 <html><body>Guild Member Grey:<br>
-Oh, too bad. There are not enough youngsters like you around these days... But if you have your heart set on leaving, then I won't stop you... May all of your wishes come true... May the divine protection of the gods be with you...</body></html>
\ No newline at end of file
+Oh, too bad. There are not enough youngsters like you around these days... But if you have your heart set on leaving, then I won't stop you... May all of your wishes come true... May the divine protection of the gods be with you...
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-33.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-17.html
similarity index 92%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-33.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-17.html
index 39f215f6007079d470d1b1cea8643f5bbf1dd019..9e67dffed02825b68c3048b44bf0f904de628ed0 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-33.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-17.html
@@ -1,2 +1,3 @@
 <html><body>Guild Member Grey:<br>
-Oh, too bad. There aren't enough youngsters like you around these days... But if you have your mind made up, then I won't stop you... May all your wishes come true... Here is a small bonus for your work for the guild. You can use it for travel expenses. OK, well, this is goodbye. May the divine protection of the gods be with you...</body></html>
\ No newline at end of file
+Oh, too bad. There aren't enough youngsters like you around these days... But if you have your mind made up, then I won't stop you... May all your wishes come true... Here is a small bonus for your work for the guild. You can use it for travel expenses. OK, well, this is goodbye. May the divine protection of the gods be with you...
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-34.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-18.html
similarity index 73%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-34.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-18.html
index 08802d42b0c0734da7933ed5ddd36343f44a247b..7560c84e9ce5580b06ce8779de953702ece101b2 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30744-34.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30744-18.html
@@ -1,2 +1,3 @@
 <html><body>Guild Member Grey:<br>
-Ah, an excellent decision! The life of a hunter is full of romance and adventure each day... There is truly nothing like it in the kingdom! Please keep up the good work!</body></html>
\ No newline at end of file
+Ah, an excellent decision! The life of a hunter is full of romance and adventure each day... There is truly nothing like it in the kingdom! Please keep up the good work!
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-01.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-01a.html
similarity index 69%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-01.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-01a.html
index 775b3e8ea877cbab05bed354b17923fc9f457716..8fcc14157b089c512337ced030b171b4f6d68d5c 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-01.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-01a.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Everyday our guild receives dozens of requests from people of all walks of life. From a village matron seeking to recover her dearly departed grandmother's brooch, to aristocrats seeking to plunder  the treasure of ancient empires, they all come to us.<br>If you wish to accept a request, you must first obtain a hunting license. Guild member Grey can tell you more!</body></html>
\ No newline at end of file
+Everyday our guild receives dozens of requests from people of all walks of life. From a village matron seeking to recover her dearly departed grandmother's brooch, to aristocrats seeking to plunder the treasure of ancient empires, they all come to us.<br>
+If you wish to accept a request, you must first obtain a hunting license. Guild member Grey can tell you more!
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-02.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-01b.html
similarity index 58%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-02.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-01b.html
index 5d64cae155d9ecdec6bd636cd47227a25621ec54..82c01e2ce5783d5a111fc528c407cec5b8a417d1 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-02.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-01b.html
@@ -1,3 +1,5 @@
 <html><body>Guild Member Tor:<br>
-Everyday our guild receives dozens of requests from people of all walks of life. From a village matron seeking to recover her dearly departed grandmother's brooch, to aristocrats seeking to plunder  the treasure of ancient empires, they all come to us.<br>Would you consider taking a request?<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30745-03.htm">"I would like to take on a request."</a></body></html>
\ No newline at end of file
+Everyday our guild receives dozens of requests from people of all walks of life. From a village matron seeking to recover her dearly departed grandmother's brooch, to aristocrats seeking to plunder the treasure of ancient empires, they all come to us.<br>
+Would you consider taking a request?<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30745-02.html">"I would like to take on a request."</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-03.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-02.html
similarity index 79%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-03.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-02.html
index 20f5aa53c64af9a2b2d030d93d92f9733aa13202..fd8c9a58ad4d5c0c4658976d751290c1f7509d91 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-03.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-02.html
@@ -1,3 +1,4 @@
 <html><body>Guild Member Tor:<br>
 Examine the list and choose a request you would like to work on. The requests are divided into 3 classes according to their degree of difficulty and amount of reward. Class C is the most common, of moderate difficulty and reward. Class B is more difficult but with a better reward. We rarely receive Class A requests. They are the most difficult and offer the greatest rewards.<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter Tor_list_1">Examine the request list</a></body></html>
\ No newline at end of file
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter LIST_1">Examine the request list</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-04.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-03.html
similarity index 80%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-04.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-03.html
index c291de84dea33b4537d278830f936cb982fafc34..ac5abc90ae9a953a2d50170b0430cdde09a7a362 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-04.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-03.html
@@ -1,3 +1,4 @@
 <html><body>Guild Member Tor:<br>
 Oh I see that you are taking the test to obtain a hunting license. I'm sure you will make an excellent circle 2 hunter!<br>
-<font color="LEVEL">Our policy states that those who are currently taking the hunting license test cannot accept a request</font>. Good luck on the test! Come back when you pass it.</body></html>
\ No newline at end of file
+<font color="LEVEL">Our policy states that those who are currently taking the hunting license test cannot accept a request</font>. Good luck on the test! Come back when you pass it.
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-05.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-03a.html
similarity index 67%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-05.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-03a.html
index 73f8079726d26deb9c59be9411511dd713d8eeca..887b3681159b20a43f83915e6eb573a7ebf91972 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-05.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-03a.html
@@ -1,3 +1,4 @@
 <html><body>Guild Member Tor:<br>
 Are you aware of the separate request list just for circle 2 hunters? Considering your skills and experience, I recommend that you take the test to obtain the circle 2 hunting license. You should visit Guild Member Gray.<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30745-03.htm">"I would like to take on a request."</a></body></html>
\ No newline at end of file
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30745-02.html">"I would like to take on a request."</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-03b.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-03b.html
new file mode 100644
index 0000000000000000000000000000000000000000..5fe65b0a807f78f15228d09b6cd9809ffb40ef20
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-03b.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Tor:<br>
+Pleased to meet you, brother! Is there anything I can help you with?<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30745-04.html">"I would like to take on a request."</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-04.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-04.html
new file mode 100644
index 0000000000000000000000000000000000000000..959a70a355227e2ced99911bf9f7b48da2b6aace
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-04.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Tor:<br>
+Examine the list and choose a request you would like to work on. The requests are divided into 3 classes according to their degree of difficulty and amount of reward. Class C is the most common, of moderate difficulty and reward. Class B is more difficult but with a better reward. We rarely receive Class A requests. They are the most difficult and offer the greatest rewards.<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter LIST_2">Examine the request list</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-05.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-05.html
new file mode 100644
index 0000000000000000000000000000000000000000..2bdc2e2253b11a9bbae344c7c259570ce65a306b
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-05.html
@@ -0,0 +1,5 @@
+<html><body>Guild Member Tor:<br>
+Nice to meet you, brother! Is there anything I can help you with?<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30745-05a.html">Discontinue mission</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30745-05c.html">Continue mission</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-09.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-05a.html
similarity index 52%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-09.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-05a.html
index 9eb5b52eaaeeed7d131bbb2c54230dddad39b340..d5a5e824bac93ab9b6da067f6c82045dcda6e044 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-09.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-05a.html
@@ -1,4 +1,5 @@
 <html><body>Guild Member Tor:<br>
 Canceling an assigned request before completion incurs a penalty of all your Laurel Leaf Pins. A small price for violating the trust of the guild, wouldn't you say? Do you still wish to give up on your assigned request?<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30745-10.htm">Give up assigned request</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30745-11.htm">Continue working on assigned request</a></body></html>
\ No newline at end of file
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30745-05b.html">Give up assigned request</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30745-05c.html">Continue working on assigned request</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-05b.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-05b.html
new file mode 100644
index 0000000000000000000000000000000000000000..5a6c80b3bae86930f3121fcf5c40317aee6ae760
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-05b.html
@@ -0,0 +1,3 @@
+<html><body>Guild Member Tor:<br>
+Well, it seems you have your mind made up, I won't try to change it. I will confiscate all of your Laurel Leaf Pins. I hope in the future you will learn to fulfill your obligations.
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-11.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-05c.html
similarity index 90%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-11.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-05c.html
index 890dce60081586b9973ec20d0808aeac06f9998b..e2596581a401ad8e497709d3a51277ea9e8d3136 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-11.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-05c.html
@@ -1,2 +1,3 @@
 <html><body>Guild Member Tor:<br>
-Do you know the importance of fulfilling your obligations? Do you know the meanings of integrity, diligence and reliability? Those are the cornerstones of our guild! Well, good luck with your hunting!</body></html>
\ No newline at end of file
+Do you know the importance of fulfilling your obligations? Do you know the meanings of integrity, diligence and reliability? Those are the cornerstones of our guild! Well, good luck with your hunting!
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-06a.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-06a.html
new file mode 100644
index 0000000000000000000000000000000000000000..4f7f808a28a56248c0bfb2a8394c5942a2e47d66
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-06a.html
@@ -0,0 +1,6 @@
+<html><body>Guild Member Tor:<br>
+Good work! Here is your reward. Also, please accept this Laurel Leaf Pin that recognizes the successful fulfillment of a request. The more pins you possess, the better chance you will receive class A and B requests.<br>
+Do you wish to undertake a new request?<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30745-02.html">"I would like to receive a new request."</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30745-09.html">"I need a break."</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-06b.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-06b.html
new file mode 100644
index 0000000000000000000000000000000000000000..4fe1858f2f949973fca740632e8d71ceac97cf66
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-06b.html
@@ -0,0 +1,6 @@
+<html><body>Guild Member Tor:<br>
+Good work! Here is your reward. Also, please accept this Laurel Leaf Pin that recognizes the successful fulfillment of a request. The more pins you possess, the better the chance you will receive class A and B requests.<br>
+Do you wish to undertake a new request?<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30745-04.html">"I would like to receive a new request."</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30745-09.html">"I need a break."</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-14.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-09.html
similarity index 71%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-14.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-09.html
index 736907f985aa89f217856a1cd6f649e016af7824..3be113d606bca1daaa9d38042c37673d82e4cf13 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-14.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-09.html
@@ -1,2 +1,3 @@
 <html><body>Guild Member Tor:<br>
-Alright then, have a good rest. Come back when you would like to choose a new request.</body></html>
\ No newline at end of file
+Alright then, have a good rest. Come back when you would like to choose a new request.
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10a.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10a.html
new file mode 100644
index 0000000000000000000000000000000000000000..96cb65ae1fe161a2450a4f7bb1a6074e42f4a3b4
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10a.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Tor:<br>
+Details of the Request: Obtain 40 charms of Kadesh. The charm bears the image of Kadesh, the evil spirit worshiped by Leto Lizardmen. It is known that leto Lizardman archers and soldiers carry the charm as an amulet to invoke magical power.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-16.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10b.html
similarity index 76%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-16.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10b.html
index 85cbca1b647438b5e142ad9c8585470a68407618..0c1199aeb16ed15f7c355a1df81af94dea3d9da9 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-16.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10b.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Collect 50 Timak Jade Necklaces. This necklace is worn by Timak Orc Warriors and overlords to invoke magical power.<br>Request Class: C</body></html>
\ No newline at end of file
+Details of the Request: Collect 50 Timak Jade Necklaces. This necklace is worn by Timak Orc Warriors and overlords to invoke magical power.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-17.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10c.html
similarity index 81%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-17.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10c.html
index b7455d7ff208fcdb844f050b4798e14411308166..18ccc4050cbddf5f04df3a24e1b59902abfa1683 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-17.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10c.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Demolish the broken enchanted stone golem, gather 50 Enchanted Golem Shards and bring them back to me.<br> Request Class: C</body></html>
\ No newline at end of file
+Details of the Request: Demolish the broken enchanted stone golem, gather 50 Enchanted Golem Shards and bring them back to me.<br>
+ Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-18.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10d.html
similarity index 62%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-18.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10d.html
index c026008272c88d0ef7dd6ae240e99b9a2866d8e0..31d894f8daca0ebac05f9d00a52d67654ef6783c 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-18.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10d.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Collect and bring back 30 pieces of Giant Monster Eye Meat.<br>Request Class: C</body></html>
\ No newline at end of file
+Details of the Request: Collect and bring back 30 pieces of Giant Monster Eye Meat.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-19.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10e.html
similarity index 72%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-19.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10e.html
index 269ff08e0fd390ced023536795112d1148b935a5..7991031631477738d0b007fad68af3e8d4255937 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-19.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10e.html
@@ -1,2 +1,4 @@
 <html><body>Hunters Guild Member Tor:<br>
-Details of the Request: Collect and bring back 40 Dire Wyrm Eggs.<br>Request Class: C</body></html>
\ No newline at end of file
+Details of the Request: Collect and bring back 40 Dire Wyrm Eggs.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-20.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10f.html
similarity index 65%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-20.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10f.html
index 45725d19f64b203971676c70d38c6e19dee592e2..cbfb22451f8ab0806f06b3594fab411c93d70787 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-20.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10f.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Collect and bring back 100 guardian basilisk talons.<br>Request Class: C</body></html>
\ No newline at end of file
+Details of the Request: Collect and bring back 100 guardian basilisk talons.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-21.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10g.html
similarity index 71%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-21.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10g.html
index ce068a58b053ca80bcda73f0f167bf4e84ae1f05..bdd14055fb179749837307f5c4d6637428bb05b5 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-21.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10g.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Collect and bring back 50 revenants chains. This Steel chain reeking of dark magic is only obtained by defeating a fettered soul.<br>Request Class: C</body></html>
\ No newline at end of file
+Details of the Request: Collect and bring back 50 revenants chains. This Steel chain reeking of dark magic is only obtained by defeating a fettered soul.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-22.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10h.html
similarity index 71%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-22.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10h.html
index 6025625a73ff8ba7dabc84dd856b32e7b2a05e9e..33c95c93342d56aec268e913f25c071bbd2d7c6f 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-22.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10h.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Collect and bring back 30 Windsus Tusks.<br>Request Class: C</body></html>
\ No newline at end of file
+Details of the Request: Collect and bring back 30 Windsus Tusks.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-23.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10i.html
similarity index 70%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-23.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10i.html
index 65bd345d499d57cb6207d5579fa5dbec3060aade..2957c0300fa3f758d17cb8cadf7af8b6e55c2bf4 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-23.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10i.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Collect and bring back 100 Grandis Skulls.<br>Request Class: C</body></html>
\ No newline at end of file
+Details of the Request: Collect and bring back 100 Grandis Skulls.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10j.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10j.html
new file mode 100644
index 0000000000000000000000000000000000000000..955b0a2e2c3e70028f8c771efa512e904828c533
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10j.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Tor:<br>
+Details of the Request: Collect and bring back 50 Taik Obsidian Amulets. You must defeat an archer or warrior of the Taik Orc tribe to obtain this amulet.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-25.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10k.html
similarity index 52%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-25.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10k.html
index a596fc8dece53824cbd6025ec2a8159c9ec071bd..047616bca9c6b56a417e74f18323b52701b2e173 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-25.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10k.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Kill the karul bugbears that are terrorizing the south of Aden and bring back their heads.<br>Request Class: C</body></html>
\ No newline at end of file
+Details of the Request: Kill the karul bugbears that are terrorizing the south of Aden and bring back their heads.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10l.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10l.html
new file mode 100644
index 0000000000000000000000000000000000000000..573fa6be10d1d44073305cb8c45c1953cfe570c1
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-10l.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Tor:<br>
+Details of the Request: Collect 40 Tamlin Ivory Charms. This charm is obtained by killing a tamlin Orc.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-11a.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-11a.html
new file mode 100644
index 0000000000000000000000000000000000000000..3e0e570173597b50228eb4de88e2eb661ba6bde7
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-11a.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Tor:<br>
+Details of the Request: Bring me the head of Elder Narak of the Leto Lizardmen. The overlords of that vile tribe will lead you to him. <br>
+Request Class: B
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-28.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-11b.html
similarity index 66%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-28.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-11b.html
index 10fba87e786c38b0e1deb5859ff8fb1fb7ec7970..c0b2e1b0e31edb303f872bcb3b4fa727fe6c8947 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-28.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-11b.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Collect and bring back 50 Enchanted Gargoyle Horns.<br>Request Class: B</body></html>
\ No newline at end of file
+Details of the Request: Collect and bring back 50 Enchanted Gargoyle Horns.<br>
+Request Class: B
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-29.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-11c.html
similarity index 66%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-29.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-11c.html
index a98b5f35d464b6f73ff23e19847a72a7933ee505..0dc8350b4df72cd0b14260c420d4c772f03442fd 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-29.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-11c.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Collect and bring back 50 Coiled Serpent Totems. This totem, sacred to the breka orcs, can be obtained by defeating a breka Orc Warrior or shaman.<br>Request Class: B</body></html>
\ No newline at end of file
+Details of the Request: Collect and bring back 50 Coiled Serpent Totems. This totem, sacred to the breka orcs, can be obtained by defeating a breka Orc Warrior or shaman.<br>
+Request Class: B
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-30.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-11d.html
similarity index 83%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-30.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-11d.html
index 418a220f790ebd1b0edb2e565f2ca85495396b96..6f9145809699e93cb87c9ee8349d661a686aef5e 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-30.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-11d.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Bring me the totem of the Serpent Demon Kadesh. It is in the possession of leto Lizardman shaman Kets. If you follow the shamans of that vile tribe they will lead you to Kets.<br>Request Class: B</body></html>
\ No newline at end of file
+Details of the Request: Bring me the totem of the Serpent Demon Kadesh. It is in the possession of leto Lizardman shaman Kets. If you follow the shamans of that vile tribe they will lead you to Kets.<br>
+Request Class: B
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-11e.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-11e.html
new file mode 100644
index 0000000000000000000000000000000000000000..dc841fe1f61765198cc0cdb6e786759433bd1132
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-11e.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Tor:<br>
+Details of the Request: Bring me the head of Kaikis, captain of the Timak Orc raiders. Start killing Timak Orc Warriors and eventually Kaiki will make his appearance.<br>
+Request Class: B
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-32.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-11f.html
similarity index 69%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-32.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-11f.html
index 57f3fa8e915e2dd5063c021bbef710b039476564..77cca046f0017010488cfd3b28daad7a70946a84 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-32.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-11f.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Collect and bring back 30 Kronbe Venom Sacs.<br>Request Class: B</body></html>
\ No newline at end of file
+Details of the Request: Collect and bring back 30 Kronbe Venom Sacs.<br>
+Request Class: B
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-12a.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-12a.html
new file mode 100644
index 0000000000000000000000000000000000000000..4cb744f674da021319b0dc7c21bb20102d6d398f
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-12a.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Tor:<br>
+Details of the Request: Collect and bring back 30 charms of Eva. These charms may be obtained by slaying spore zombies, the undead souls of Elven warriors killed in battle at the Sea of Spores.<br>
+Request Class: A
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-34.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-12b.html
similarity index 88%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-34.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-12b.html
index c5580768881c59ab2842b0cd1dbe5dff9feb3dd9..b42fdb5c5b41eaa9ca430a3c4dd471d389cd8723 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-34.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-12b.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Recover the precious stone tablet that was stolen from a Dwarven cargo wagon by grandis. It is currently in the possession of grandis brigand leader Gok Magok. If you slay the grandis one by one, eventually you will find Gok Magok.<br>Request Class: A</body></html>
\ No newline at end of file
+Details of the Request: Recover the precious stone tablet that was stolen from a Dwarven cargo wagon by grandis. It is currently in the possession of grandis brigand leader Gok Magok. If you slay the grandis one by one, eventually you will find Gok Magok.<br>
+Request Class: A
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-35.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-12c.html
similarity index 85%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-35.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-12c.html
index 487bc0d55080c424af8d4126c7dd5e250441e3b1..9c9b41fafcf0638f82393c3362077476639dd2e0 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-35.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-12c.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Recover the precious Book of Shunaiman that was stolen from pilgrims to the grand temple of Einhasad. It is in the possession of Orooto, chief of the karul bugbears. To find him you will need to kill the karul bugbears one by one, Orooto will eventually make his appearance. Kill him and recover the Book of Shunaiman.<br>Request Class: A</body></html>
\ No newline at end of file
+Details of the Request: Recover the precious Book of Shunaiman that was stolen from pilgrims to the grand temple of Einhasad. It is in the possession of Orooto, chief of the karul bugbears. To find him you will need to kill the karul bugbears one by one, Orooto will eventually make his appearance. Kill him and recover the Book of Shunaiman.<br>
+Request Class: A
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13a.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13a.html
new file mode 100644
index 0000000000000000000000000000000000000000..3345c605d5282084f80fba525ee7d35381b1101b
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13a.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Tor:<br>
+Details of the Request: Collect and bring back 40 Rotting Tree Spores from the Sea of Spores.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-37.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13b.html
similarity index 68%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-37.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13b.html
index 0e218483c92703828746caea9fa33d46d1695bfd..2424a91b7e0efad72dba958f5ac72b7c0e8a1760 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-37.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13b.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Collect and bring back 40 Trisalim Venom Sacs.<br>Request Class: C</body></html>
\ No newline at end of file
+Details of the Request: Collect and bring back 40 Trisalim Venom Sacs.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13c.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13c.html
new file mode 100644
index 0000000000000000000000000000000000000000..aaf96d2d870795442869127fb455cd664cd2910a
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13c.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Tor:<br>
+Details of the Request: Collect and bring back 50 Taik Orc Totems. This totem can be obtained by slaying Taik Orc shamans or warriors. <br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-39.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13d.html
similarity index 68%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-39.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13d.html
index 79977172795c7d129b4323d62283c171cbe76ce7..e9695d5a5f9b90f8b8b6d2b454e23596f9980a0c 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-39.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13d.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Collect and bring back 40 harit Lizardman barbed necklaces. These can be obtained by killing harit Lizardman grunts, archers or warriors.<br>Request Class: C</body></html>
\ No newline at end of file
+Details of the Request: Collect and bring back 40 harit Lizardman barbed necklaces. These can be obtained by killing harit Lizardman soldiers, archers or warriors.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-40.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13e.html
similarity index 64%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-40.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13e.html
index 0cbcfb0c10375b64d64768289a25d323c2954de9..8491446ddc4cdb38b8ecf8dcf77a3b56b470122d 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-40.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13e.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Collect and bring back 20 coins of the old empire. You may obtain these coins by killing hatar ratman bandits of the Plains of Fierce Battle and their leaders.<br>Request Class: C</body></html>
\ No newline at end of file
+Details of the Request: Collect and bring back 20 coins of the old empire. You may obtain these coins by killing hatar ratman bandits of the War-Torn Plains and their leaders.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13f.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13f.html
new file mode 100644
index 0000000000000000000000000000000000000000..6e8d9e70675723be9f67d9203ef048313d9f1fa6
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13f.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Tor:<br>
+Details of the Request: Kill 30 farcrans and bring back their skins. It is a monstrous beast that inhabits the area near the War-Torn Plains.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-42.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13g.html
similarity index 81%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-42.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13g.html
index 11f2720329c0acd366e79b52d81f79e54332824c..c58f823616eee7132c1ad645c7bf90d313c346ec 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-42.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13g.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Collect and bring back 40 Tempest Shards. To obtain these shards you must kill flines, spirits of wind.<br>Request Class: C</body></html>
\ No newline at end of file
+Details of the Request: Collect and bring back 40 Tempest Shards. To obtain these shards you must kill flines, spirits of wind.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-43.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13h.html
similarity index 71%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-43.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13h.html
index 76f3bc2e71ae34d58e42f89a45075acde94fca16..7ce7576e23f697f97c66ac73b8caf07e2abb0a35 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-43.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13h.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Collect and bring back 40 Tsunami Shards. To obtain them you must kill lieles, spirits of water, who live in the Enchanted Forest.<br>Request Class: C</body></html>
\ No newline at end of file
+Details of the Request: Collect and bring back 40 Tsunami Shards. To obtain them you must kill lieles, spirits of water, who live in the Enchanted Forest.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-44.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13i.html
similarity index 73%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-44.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13i.html
index a02aaabdcbe23cfb667a1876ab6e20c439d9c502..62d79a97d6275750f79a0bd42683f334d8c5df51 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-44.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13i.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Collect and bring back 40 Satyr Manes. To obtain them you must kill satyrs or satyr elders who live in the Enchanted Valley.<br>Request Class: C</body></html>
\ No newline at end of file
+Details of the Request: Collect and bring back 40 Satyr Manes. To obtain them you must kill satyrs or satyr elders who live in the Enchanted Valley.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13j.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13j.html
new file mode 100644
index 0000000000000000000000000000000000000000..7dd32c98291d7568a9548c933d3ccda641501c1b
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13j.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Tor:<br>
+Details of the Request: Collect and bring back 40 Hamadryad Shards. To obtain them you must kill forest runners and spirits of trees who live in the Enchanted Forest.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13k.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13k.html
new file mode 100644
index 0000000000000000000000000000000000000000..9d23584b8806a7c0caf5102658328aff0536e184
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13k.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Tor:<br>
+Details of the Request: Collect and bring back 30 Shillien Manes. To obtain them you must kill soldiers, scouts or warriors of the vanor silenos tribe that have been running amok in the north of Aden.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-47.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13l.html
similarity index 83%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-47.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13l.html
index 0df9d696841df695cbd708af904ccf55055e00df..043aa668ad30a4c64ef176be35c9087d6c8d0d26 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-47.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-13l.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Collect and bring back 30 tarlk bugbear totems. To obtain them you must kill tarlk bugbear warriors that are encamped in the den of the mountain bandits in the north of Oren.<br>Request Class: C</body></html>
\ No newline at end of file
+Details of the Request: Collect and bring back 30 tarlk bugbear totems. To obtain them you must kill tarlk bugbear warriors that are encamped in the den of the mountain bandits in the north of Oren.<br>
+Request Class: C
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-14a.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-14a.html
new file mode 100644
index 0000000000000000000000000000000000000000..e9bb904f5f95e8185584df4f8bc6ac6a0f385396
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-14a.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Tor:<br>
+Details of the Request: Bring me the head of Okun, the timak Orc overlord. He is notorious for being an abominably cruel marauder. If you kill timak Orc overlords one by one, Okun will show up to take his revenge.<br>
+Request Class: B
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-14b.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-14b.html
new file mode 100644
index 0000000000000000000000000000000000000000..b42d60bfec5a028648bcf4ef388302a00ae3df89
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-14b.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Tor:<br>
+Details of the Request: Bring me the head of Kakran, taik Orc overlord. If you start killing taik Orc captains one by one, Kakran will show up crying out for revenge.<br>
+Request Class: B
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-50.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-14c.html
similarity index 72%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-50.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-14c.html
index 1b0491a91c5eeb79aa3159457959e6a61063de1e..bcb35390d6f46c3dce968ab7023a7557505889ed 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-50.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-14c.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Collect and bring back 40 narcissus soulstones. These rare soulstones are obtained by breaking the mirrors in the Forest of Mirrors.<br>Request: B</body></html>
\ No newline at end of file
+Details of the Request: Collect and bring back 40 narcissus soulstones. These rare soulstones are obtained by breaking the mirrors in the Forest of Mirrors.<br>
+Request: B
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-14d.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-14d.html
new file mode 100644
index 0000000000000000000000000000000000000000..43eeb283ccb6d4bc1bc7bfa03f459556aa2e1063
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-14d.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Tor:<br>
+Details of the Request: Collect and bring back 20 Deprived Eyes. These evil spirits are hovering around the War-Torn Plains.<br>
+Request Class: B
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-14e.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-14e.html
new file mode 100644
index 0000000000000000000000000000000000000000..9ea02e6a2d2d45b9ef3c9a00a44a9c2d59702d0d
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-14e.html
@@ -0,0 +1,4 @@
+<html><body>Guild Member Tor:<br>
+Details of the Request: Collect and bring back 20 horns of summon unicorn. They are found in the Enchanted Valley.<br>
+Request Class: B
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-53.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-14f.html
similarity index 70%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-53.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-14f.html
index 0303208f8d8a06fb0c429e1c5a30f72e1ce05601..d258571bd9f5f727b8e729af37f81479592bbc85 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-53.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-14f.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Bring me the golden mane of Kerunos, chief of the vanor silenos tribe. If you start killing vanor silenos chiefs, Kerunos will appear.<br>Request Class: B</body></html>
\ No newline at end of file
+Details of the Request: Bring me the golden mane of Kerunos, chief of the vanor silenos tribe. If you start killing vanor silenos chiefs, Kerunos will appear.<br>
+Request Class: B
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-54.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-15a.html
similarity index 66%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-54.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-15a.html
index 1e673dce7c5fa309432466353ddaef2ee296f35f..05a9ac350fe87ca5d10e8f70e95567cee3124324 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-54.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-15a.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Bring back 20 skulls of undead executed criminals. These vagrant spirits have wandered aimlessly about the Cemetery of Kings since ancient times.<br>Request Class: A</body></html>
\ No newline at end of file
+Details of the Request: Bring back 20 skulls of undead executed criminals. These vagrant spirits have wandered aimlessly about the Cemetery of Kings since ancient times.<br>
+Request Class: A
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-55.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-15b.html
similarity index 56%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-55.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-15b.html
index 3072b41a1b7cecb2bf9ac222561a475898e26576..63f6a96f4fc5312d62dbd09dc499eb7f6578d3ed 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-55.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-15b.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Recover the stolen bust of the late King Travis. It is said to be in the possession of Chief Kuber of the hatar ratmen. If you slay hatar ratman bosses one by one, Kuber will appear.<br>Request Class: A</body></html>
\ No newline at end of file
+Details of the Request: Recover the stolen bust of the late King Travis. It is said to be in the possession of Chief Kuber of the hatar ratmen. If you slay hatar ratman Brigand Leaders one by one, Kuber will appear.<br>
+Request Class: A
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-56.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-15c.html
similarity index 75%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-56.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-15c.html
index 722cb0707bfdf3c403132487786eff217f5ce04d..55d4edbe4472de3e718ac039ebbaf991b8e4fde4 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30745-56.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-15c.html
@@ -1,2 +1,4 @@
 <html><body>Guild Member Tor:<br>
-Details of the Request: Recover 10 swords of Cadmus from the Blazing Swamp. These swords are in the possession of the undead called judges of the marsh. These creatures are the souls of heroic bodyguards who died defending their king during the Elmoreden war. You must kill them to retrieve the swords of Cadmus.<br>Request Class: A</body></html>
\ No newline at end of file
+Details of the Request: Recover 10 swords of Cadmus from the Blazing Swamp. These swords are in the possession of the undead called judges of the marsh. These creatures are the souls of heroic bodyguards who died defending their king during the Elmoreden war. You must kill them to retrieve the swords of Cadmus.<br>
+Request Class: A
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-16.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-16.html
new file mode 100644
index 0000000000000000000000000000000000000000..4f9997221cbeabfe63b603b18c27808e30a03f7b
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30745-16.html
@@ -0,0 +1,3 @@
+<html><body>Guild Member Tor:<br>
+<?reply1?><?reply2?><?reply3?><?reply4?><?reply5?>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-01.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-01.html
similarity index 60%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-01.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-01.html
index db10f5953981bd61f86f40ee2d1d70779ae8fd31..1e6a97c13f214be3840291a4de7aceb0fa997f39 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-01.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-01.html
@@ -1,2 +1,3 @@
 <html><body>Cybellin:<br>
-Are you a hunter? Oh yes, of course. Just an aspirant. That's too bad. I need a favor from a real hunter.</body></html>
\ No newline at end of file
+Are you a hunter? Oh yes, of course. Just an aspirant. That's too bad. I need a favor from a real hunter.
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-02.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-02.html
similarity index 66%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-02.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-02.html
index 35747cc4aeb69f675dc65e8d5f9ac8e546ab9abb..3fef13505c0c506adae22257f346b2e38e880b9c 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-02.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-02.html
@@ -1,3 +1,4 @@
 <html><body>Cybellin:<br>
 Ah, a hunter! Oh, how marvelous! I need to ask you a favor. It's related to some very important research I've been performing recently... How about it? Will you assist me?<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30746-03.htm">"I will help."</a></body></html>
\ No newline at end of file
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30746-03.html">"I will help."</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-03.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-03.html
new file mode 100644
index 0000000000000000000000000000000000000000..47c6981004fb22636e79856b7876474c8f4d8eb6
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-03.html
@@ -0,0 +1,6 @@
+<html><body>Cybellin:<br>
+Excellent! Take this <font color="LEVEL">Blood Crystal</font> and dagger. Use the dagger to kill the evil <font color="LEVEL">Leto Lizardmen</font> and <font color="LEVEL">Harit Lizardmen</font> and the crystal to absorb their blood. This will raise the purity of the crystal above its current level of 1. Although this may seem quite simple, the process is not without risks. In addition to the danger posed by the lizardmen, there is a chance each time that the crystal will shatter, that is, the crystal will either increase in purity or be destroyed.<br>
+If you successfully raise the purity of the crystal and bring it to me, you shall receive a reward. The higher the level of purity, the greater your reward will be.<br>
+There are different theories as to why the crystal reacts like this to the blood of the lizardmen, possibly it is because these evil lizards are descended from dragons! You will find that certain grades of blood are very effective and others have no effect at all. This can only be determined by trial and error...<br>
+I have written down this task for you.
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-03a.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-03a.html
new file mode 100644
index 0000000000000000000000000000000000000000..776e732dfecb128a570dc1464ae27b58fcf4925b
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-03a.html
@@ -0,0 +1,5 @@
+<html><body>Cybellin:<br>
+After you kill the <font color="LEVEL">Leto Lizardmen</font> and <font color="LEVEL">Harit Lizardmen</font> with that dagger, you must use the Blood Crystal to absorb their blood.<br>
+When you raise the purity of the crystal and return it to me, I shall give you a reward. The higher the level of purity, the greater your reward will be. There is an element of risk, however, as each time it is possible that the crystal will be destroyed.<br>
+You will find that certain grades of blood are useful and some grades have no effect at all on the Blood Crystal. This can only be determined by trial and error...
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-04.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-04.html
new file mode 100644
index 0000000000000000000000000000000000000000..3007d146c77f624c81aa752054b276ee19cc4653
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-04.html
@@ -0,0 +1,6 @@
+<html><body>Cybellin:<br>
+The purity of the crystal is still at level 1! Have you decided not to carry out my request?<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30746-03a.html">"How can I raise the purity of the crystal?"</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30746-03.html">Continue</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30746-10.html">Quit</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-06.htm b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-05.html
similarity index 54%
rename from dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-06.htm
rename to dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-05.html
index 4f4b86e45be87d60fc3df0a177bb7da0f44a5683..0aa5fdd6cb4586c36a9e21d219f20b3460562fd5 100644
--- a/dist/game/data/scripts/quests/335_TheSongOfTheHunter/30746-06.htm
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-05.html
@@ -1,4 +1,5 @@
 <html><body>Cybellin:<br>
 You have raised the purity of the Blood Crystal! Would you like to try increasing it some more or do you wish to give it to me at its current level? It doesn't matter to me, but you should remember that the higher level of crystal that you bring me, the greater your reward will be.<br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30746-08.htm">"Take the jewel at its current level."</a><br>
-<a action="bypass -h Quest 335_TheSongOfTheHunter 30746-09.htm">"I will attempt to raise the level of the crystal."</a></body></html>
\ No newline at end of file
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30746-06.html">"Take the jewel at its current level."</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30746-07.html">"I will attempt to raise the level of the crystal."</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-05a.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-05a.html
new file mode 100644
index 0000000000000000000000000000000000000000..7da7cea3446a504f9711236d4d4f81ac813e9c1d
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-05a.html
@@ -0,0 +1,6 @@
+<html><body>Cybellin:<br>
+You have successfully created a Blood Crystal of level 10 purity! Oh my Shilen! That's awesome! As I promised, I will pay you the reward money. Thank you so very much!<br>
+Well, may I ask you to do me another favor?<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30746-03.html">Tell her that you will take up the task.</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30746-10.html">Quit.</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-06.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-06.html
new file mode 100644
index 0000000000000000000000000000000000000000..6345ff9cae2cf0cd8917696b126375cac3c40c30
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-06.html
@@ -0,0 +1,5 @@
+<html><body>Cybellin:<br>
+Excellent! You shall receive your reward based on the level of purity of the Blood Crystal. Good job! Could I ask you another favor?<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30746-03.html">"I will do another favor for you."</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30746-10.html">"No, just give me the reward and I'll be on my way."</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-07.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-07.html
new file mode 100644
index 0000000000000000000000000000000000000000..253f2c8331996374227ef9f2f6095f3232a58283
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-07.html
@@ -0,0 +1,3 @@
+<html><body>Cybellin:<br>
+Fine, I will explain my request. You must increase the purity of a Blood Crystal and bring it to me. This is accomplished by dipping the crystal in the blood of <font color="LEVEL">Leto Lizardmen</font> and <font color="LEVEL">Harit Lizardmen</font> after you kill them with the dagger I gave you. If you are able to increase the crystal's purity to a level of 10 without destroying it, I will use my entire fortune to procure your reward!
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-08.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-08.html
new file mode 100644
index 0000000000000000000000000000000000000000..51822d92915cbdb98eefced9ff2b3faa632d3136
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-08.html
@@ -0,0 +1,5 @@
+<html><body>Cybellin:<br>
+Hunter, will you continue to help me?<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30746-03.html">"Yes."</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30746-10.html">"No."</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-09.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-09.html
new file mode 100644
index 0000000000000000000000000000000000000000..469d3de9eab3249e0d455731536f3b2b5518a364
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-09.html
@@ -0,0 +1,5 @@
+<html><body>Cybellin:<br>
+Ah, yes... Shattered... The crystal's structure was unstable and it failed. Don't be discouraged. Here is another crystal, will you please try again?<br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30746-03.html">"Yes."</a><br>
+<a action="bypass -h Quest Q00335_TheSongOfTheHunter 30746-10.html">"No."</a>
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-10.html b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-10.html
new file mode 100644
index 0000000000000000000000000000000000000000..0c3e599dfb605bea16bc021a32073beb55dc12c1
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/30746-10.html
@@ -0,0 +1,3 @@
+<html><body>Cybellin:<br>
+Thank you for your help. May Shilen protect you...
+</body></html>
\ No newline at end of file
diff --git a/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/Q00335_TheSongOfTheHunter.java b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/Q00335_TheSongOfTheHunter.java
new file mode 100644
index 0000000000000000000000000000000000000000..486e025be441c60da7bc99c57ecd9f4359c602c3
--- /dev/null
+++ b/dist/game/data/scripts/quests/Q00335_TheSongOfTheHunter/Q00335_TheSongOfTheHunter.java
@@ -0,0 +1,1665 @@
+/*
+ * Copyright (C) 2004-2017 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.Q00335_TheSongOfTheHunter;
+
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+
+import com.l2jserver.gameserver.enums.audio.Sound;
+import com.l2jserver.gameserver.model.actor.L2Npc;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.items.L2Weapon;
+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.CreatureSay;
+
+/**
+ * The Song of the Hunter (335)
+ * @author Zoey76
+ * @since 2.6.0.0
+ */
+public class Q00335_TheSongOfTheHunter extends Quest
+{
+	// NPCs
+	private static final int GREY = 30744;
+	private static final int TOR = 30745;
+	private static final int CYBELLIN = 30746;
+	// Monsters
+	private static final int BREKA_ORC_SHAMAN = 20269;
+	private static final int BREKA_ORC_WARRIOR = 20271;
+	private static final int GUARDIAN_BASILISK = 20550;
+	private static final int FETTERED_SOUL = 20552;
+	private static final int WINDSUS = 20553;
+	private static final int GRANDIS = 20554;
+	private static final int GIANT_FUNGUS = 20555;
+	private static final int GIANT_MONSTEREYE = 20556;
+	private static final int DIRE_WYRM = 20557;
+	private static final int ROTTING_TREE = 20558;
+	private static final int TRISALIM_SPIDER = 20560;
+	private static final int TRISALIM_TARANTULA = 20561;
+	private static final int SPORE_ZOMBIE = 20562;
+	private static final int MANASHEN_GARGOYLE = 20563;
+	private static final int ENCHANTED_STONE_GOLEM = 20565;
+	private static final int ENCHANTED_GARGOYLE = 20567;
+	private static final int TARLK_BUGBEAR_WARRIOR = 20571;
+	private static final int LETO_LIZARDMAN_ARCHER = 20578;
+	private static final int LETO_LIZARDMAN_SOLDIER = 20579;
+	private static final int LETO_LIZARDMAN_SHAMAN = 20581;
+	private static final int LETO_LIZARDMAN_OVERLORD = 20582;
+	private static final int TIMAK_ORC_WARRIOR = 20586;
+	private static final int TIMAK_ORC_OVERLORD = 20588;
+	private static final int FLINE = 20589;
+	private static final int LIELE = 20590;
+	private static final int VALLEY_TREANT = 20591;
+	private static final int SATYR = 20592;
+	private static final int UNICORN = 20593;
+	private static final int FOREST_RUNNER = 20594;
+	private static final int VALLEY_TREANT_ELDER = 20597;
+	private static final int SATYR_ELDER = 20598;
+	private static final int UNICORN_ELDER = 20599;
+	private static final int KARUL_BUGBEAR = 20600;
+	private static final int TAMLIN_ORC = 20601;
+	private static final int TAMLIN_ORC_ARCHER = 20602;
+	private static final int KRONBE_SPIDER = 20603;
+	private static final int TAIK_ORC_ARCHER = 20631;
+	private static final int TAIK_ORC_WARRIOR = 20632;
+	private static final int TAIK_ORC_SHAMAN = 20633;
+	private static final int TAIK_ORC_CAPTAIN = 20634;
+	private static final int MIRROR = 20639;
+	private static final int HARIT_LIZARDMAN_GRUNT = 20641;
+	private static final int HARIT_LIZARDMAN_ARCHER = 20642;
+	private static final int HARIT_LIZARDMAN_WARRIOR = 20643;
+	private static final int GRAVE_WANDERER = 20659;
+	private static final int ARCHER_OF_GREED = 20660;
+	private static final int HATAR_RATMAN_THIEF = 20661;
+	private static final int HATAR_RATMAN_BOSS = 20662;
+	private static final int DEPRIVE = 20664;
+	private static final int FARCRAN = 20667;
+	private static final int TAIRIM = 20675;
+	private static final int JUDGE_OF_MARSH = 20676;
+	private static final int VANOR_SILENOS_GRUNT = 20682;
+	private static final int VANOR_SILENOS_SCOUT = 20683;
+	private static final int VANOR_SILENOS_WARRIOR = 20684;
+	private static final int VANOR_SILENOS_CHIEFTAIN = 20686;
+	private static final int BREKA_OVERLORD_HAKA = 27140;
+	private static final int BREKA_OVERLORD_JAKA = 27141;
+	private static final int BREKA_OVERLORD_MARKA = 27142;
+	private static final int WINDSUS_ALEPH = 27143;
+	private static final int TARLK_RAIDER_ATHU = 27144;
+	private static final int TARLK_RAIDER_LANKA = 27145;
+	private static final int TARLK_RAIDER_TRISKA = 27146;
+	private static final int TARLK_RAIDER_MOTURA = 27147;
+	private static final int TARLK_RAIDER_KALATH = 27148;
+	private static final int GREMLIN_FILCHER = 27149;
+	private static final int BLACK_LEGION_STORMTROOPER = 27150;
+	private static final int LETO_SHAMAN_KETZ = 27156;
+	private static final int LETO_CHIEF_NARAK = 27157;
+	private static final int TIMAK_RAIDER_KAIKEE = 27158;
+	private static final int TIMAK_OVERLORD_OKUN = 27159;
+	private static final int GOK_MAGOK = 27160;
+	private static final int TAIK_OVERLORD_KAKRAN = 27161;
+	private static final int HATAR_CHIEFTAIN_KUBEL = 27162;
+	private static final int VANOR_ELDER_KERUNOS = 27163;
+	private static final int KARUL_CHIEF_OROOTO = 27164;
+	// Misc
+	private static final int MIN_LEVEL = 35;
+	private static final int MAX_LEVEL = 45;
+	private static final int CYBELLINS_DAGGER = 3471;
+	private static final int FIRST_CIRCLE_HUNTER_LICENSE = 3692;
+	private static final int SECOND_CIRCLE_HUNTER_LICENSE = 3693;
+	private static final int LAUREL_LEAF_PIN = 3694;
+	private static final int TEST_INSTRUCTIONS_1 = 3695;
+	private static final int TEST_INSTRUCTIONS_2 = 3696;
+	private static final int CYBELLINS_REQUEST = 3697;
+	private static final int BLOOD_CRYSTAL_PURITY_1 = 3698;
+	private static final int BLOOD_CRYSTAL_PURITY_2 = 3699;
+	private static final int BLOOD_CRYSTAL_PURITY_3 = 3700;
+	private static final int BLOOD_CRYSTAL_PURITY_4 = 3701;
+	private static final int BLOOD_CRYSTAL_PURITY_5 = 3702;
+	private static final int BLOOD_CRYSTAL_PURITY_6 = 3703;
+	private static final int BLOOD_CRYSTAL_PURITY_7 = 3704;
+	private static final int BLOOD_CRYSTAL_PURITY_8 = 3705;
+	private static final int BLOOD_CRYSTAL_PURITY_9 = 3706;
+	private static final int BLOOD_CRYSTAL_PURITY_10 = 3707;
+	private static final int BROKEN_BLOOD_CRYSTAL = 3708;
+	private static final int GUARDIAN_BASILISK_SCALE = 3709;
+	private static final int KARUT_WEED = 3710;
+	private static final int HAKAS_HEAD = 3711;
+	private static final int JAKAS_HEAD = 3712;
+	private static final int MARKAS_HEAD = 3713;
+	private static final int WINDSUS_ALEPH_SKIN = 3714;
+	private static final int INDIGO_SPIRIT_ORE = 3715;
+	private static final int SPORESEA_SEED = 3716;
+	private static final int TIMAK_ORC_TOTEM = 3717;
+	private static final int TRISALIM_SILK = 3718;
+	private static final int AMBROSIUS_FRUIT = 3719;
+	private static final int BALEFIRE_CRYSTAL = 3720;
+	private static final int IMPERIAL_ARROWHEAD = 3721;
+	private static final int ATHUS_HEAD = 3722;
+	private static final int LANKAS_HEAD = 3723;
+	private static final int TRISKAS_HEAD = 3724;
+	private static final int MOTURAS_HEAD = 3725;
+	private static final int KALATHS_HEAD = 3726;
+	private static final int FIRST_CIRCLE_REQUEST_1C = 3727;
+	private static final int FIRST_CIRCLE_REQUEST_2C = 3728;
+	private static final int FIRST_CIRCLE_REQUEST_3C = 3729;
+	private static final int FIRST_CIRCLE_REQUEST_4C = 3730;
+	private static final int FIRST_CIRCLE_REQUEST_5C = 3731;
+	private static final int FIRST_CIRCLE_REQUEST_6C = 3732;
+	private static final int FIRST_CIRCLE_REQUEST_7C = 3733;
+	private static final int FIRST_CIRCLE_REQUEST_8C = 3734;
+	private static final int FIRST_CIRCLE_REQUEST_9C = 3735;
+	private static final int FIRST_CIRCLE_REQUEST_10C = 3736;
+	private static final int FIRST_CIRCLE_REQUEST_11C = 3737;
+	private static final int FIRST_CIRCLE_REQUEST_12C = 3738;
+	private static final int FIRST_CIRCLE_REQUEST_1B = 3739;
+	private static final int FIRST_CIRCLE_REQUEST_2B = 3740;
+	private static final int FIRST_CIRCLE_REQUEST_3B = 3741;
+	private static final int FIRST_CIRCLE_REQUEST_4B = 3742;
+	private static final int FIRST_CIRCLE_REQUEST_5B = 3743;
+	private static final int FIRST_CIRCLE_REQUEST_6B = 3744;
+	private static final int FIRST_CIRCLE_REQUEST_1A = 3745;
+	private static final int FIRST_CIRCLE_REQUEST_2A = 3746;
+	private static final int FIRST_CIRCLE_REQUEST_3A = 3747;
+	private static final int SECOND_CIRCLE_REQUEST_1C = 3748;
+	private static final int SECOND_CIRCLE_REQUEST_2C = 3749;
+	private static final int SECOND_CIRCLE_REQUEST_3C = 3750;
+	private static final int SECOND_CIRCLE_REQUEST_4C = 3751;
+	private static final int SECOND_CIRCLE_REQUEST_5C = 3752;
+	private static final int SECOND_CIRCLE_REQUEST_6C = 3753;
+	private static final int SECOND_CIRCLE_REQUEST_7C = 3754;
+	private static final int SECOND_CIRCLE_REQUEST_8C = 3755;
+	private static final int SECOND_CIRCLE_REQUEST_9C = 3756;
+	private static final int SECOND_CIRCLE_REQUEST_10C = 3757;
+	private static final int SECOND_CIRCLE_REQUEST_11C = 3758;
+	private static final int SECOND_CIRCLE_REQUEST_12C = 3759;
+	private static final int SECOND_CIRCLE_REQUEST_1B = 3760;
+	private static final int SECOND_CIRCLE_REQUEST_2B = 3761;
+	private static final int SECOND_CIRCLE_REQUEST_3B = 3762;
+	private static final int SECOND_CIRCLE_REQUEST_4B = 3763;
+	private static final int SECOND_CIRCLE_REQUEST_5B = 3764;
+	private static final int SECOND_CIRCLE_REQUEST_6B = 3765;
+	private static final int SECOND_CIRCLE_REQUEST_1A = 3766;
+	private static final int SECOND_CIRCLE_REQUEST_2A = 3767;
+	private static final int SECOND_CIRCLE_REQUEST_3A = 3768;
+	private static final int CHARM_OF_KADESH = 3769;
+	private static final int TIMAK_JADE_NECKLACE = 3770;
+	private static final int ENCHANTED_GOLEM_SHARD = 3771;
+	private static final int GIANT_MONSTER_EYE_MEAT = 3772;
+	private static final int DIRE_WYRM_EGG = 3773;
+	private static final int GUARDIAN_BASILISK_TALON = 3774;
+	private static final int REVENANTS_CHAINS = 3775;
+	private static final int WINDSUS_TUSK = 3776;
+	private static final int GRANDISS_SKULL = 3777;
+	private static final int TAIK_OBSIDIAN_AMULET = 3778;
+	private static final int KARUL_BUGBEAR_HEAD = 3779;
+	private static final int TAMLIN_IVORY_CHARM = 3780;
+	private static final int FANG_OF_NARAK = 3781;
+	private static final int ENCHANTED_GARGOYLES_HORN = 3782;
+	private static final int COILED_SERPENT_TOTEM = 3783;
+	private static final int TOTEM_OF_KADESH = 3784;
+	private static final int KAIKIS_HEAD = 3785;
+	private static final int KRONBE_VENOM_SAC = 3786;
+	private static final int EVAS_CHARM = 3787;
+	private static final int TITANS_TABLET = 3788;
+	private static final int BOOK_OF_SHUNAIMAN = 3789;
+	private static final int ROTTING_TREE_SPORES = 3790;
+	private static final int TRISALIM_VENOM_SAC = 3791;
+	private static final int TAIK_ORC_TOTEM = 3792;
+	private static final int HARIT_BARBED_NECKLACE = 3793;
+	private static final int COIN_OF_OLD_EMPIRE = 3794;
+	private static final int SKIN_OF_FARCRAN = 3795;
+	private static final int TEMPEST_SHARD = 3796;
+	private static final int TSUNAMI_SHARD = 3797;
+	private static final int SATYR_MANE = 3798;
+	private static final int HAMADRYAD_SHARD = 3799;
+	private static final int VANOR_SILENOS_MANE = 3800;
+	private static final int TALK_BUGBEAR_TOTEM = 3801;
+	private static final int OKUNS_HEAD = 3802;
+	private static final int KAKRANS_HEAD = 3803;
+	private static final int NARCISSUSS_SOULSTONE = 3804;
+	private static final int DEPRIVE_EYE = 3805;
+	private static final int UNICORNS_HORN = 3806;
+	private static final int KERUNOSS_GOLD_MANE = 3807;
+	private static final int SKULL_OF_EXECUTED = 3808;
+	private static final int BUST_OF_TRAVIS = 3809;
+	private static final int SWORD_OF_CADMUS = 3810;
+	
+	// Rewards
+	// @formatter:off
+	private static final int[][] REWARDS = {
+		{ FIRST_CIRCLE_REQUEST_1C, CHARM_OF_KADESH, 40, 2090 },
+		{ FIRST_CIRCLE_REQUEST_3C, ENCHANTED_GOLEM_SHARD, 50, 9480 },
+		{ FIRST_CIRCLE_REQUEST_4C, GIANT_MONSTER_EYE_MEAT, 30, 9110 },
+		{ FIRST_CIRCLE_REQUEST_5C, DIRE_WYRM_EGG, 40, 8690 },
+		{ FIRST_CIRCLE_REQUEST_6C, GUARDIAN_BASILISK_TALON, 100, 9480 },
+		{ FIRST_CIRCLE_REQUEST_7C, REVENANTS_CHAINS, 50, 11280 },
+		{ FIRST_CIRCLE_REQUEST_8C, WINDSUS_TUSK, 30, 9640 },
+		{ FIRST_CIRCLE_REQUEST_9C, GRANDISS_SKULL, 100, 9180 },
+		{ FIRST_CIRCLE_REQUEST_10C, TAIK_OBSIDIAN_AMULET, 50, 5160 },
+		{ FIRST_CIRCLE_REQUEST_11C, KARUL_BUGBEAR_HEAD, 30, 3140 },
+		{ FIRST_CIRCLE_REQUEST_12C, TAMLIN_IVORY_CHARM, 40, 3160 },
+		{ FIRST_CIRCLE_REQUEST_1B, FANG_OF_NARAK, 1, 6370 },
+		{ FIRST_CIRCLE_REQUEST_2B, ENCHANTED_GARGOYLES_HORN, 50, 19080 },
+		{ FIRST_CIRCLE_REQUEST_3B, COILED_SERPENT_TOTEM, 50, 19080 },
+		{ FIRST_CIRCLE_REQUEST_4B, TOTEM_OF_KADESH, 1, 5790 },
+		{ FIRST_CIRCLE_REQUEST_5B, KAIKIS_HEAD, 1, 8560 },
+		{ FIRST_CIRCLE_REQUEST_6B, KRONBE_VENOM_SAC, 30, 8320 },
+		{ FIRST_CIRCLE_REQUEST_1A, EVAS_CHARM, 30, 30310 },
+		{ FIRST_CIRCLE_REQUEST_2A, TITANS_TABLET, 1, 27540 },
+		{ FIRST_CIRCLE_REQUEST_3A, BOOK_OF_SHUNAIMAN, 1, 20560 },
+		{ SECOND_CIRCLE_REQUEST_1C, ROTTING_TREE_SPORES, 40, 6850 },
+		{ SECOND_CIRCLE_REQUEST_2C, TRISALIM_VENOM_SAC, 40, 7250 },
+		{ SECOND_CIRCLE_REQUEST_3C, TAIK_ORC_TOTEM, 50, 7160 },
+		{ SECOND_CIRCLE_REQUEST_4C, HARIT_BARBED_NECKLACE, 40, 6580 },
+		{ SECOND_CIRCLE_REQUEST_5C, COIN_OF_OLD_EMPIRE, 20, 10100 },
+		{ SECOND_CIRCLE_REQUEST_6C, SKIN_OF_FARCRAN, 30, 13000 },
+		{ SECOND_CIRCLE_REQUEST_7C, TEMPEST_SHARD, 40, 7660 },
+		{ SECOND_CIRCLE_REQUEST_8C, TSUNAMI_SHARD, 40, 7660 },
+		{ SECOND_CIRCLE_REQUEST_9C, SATYR_MANE, 40, 11260 },
+		{ SECOND_CIRCLE_REQUEST_10C, HAMADRYAD_SHARD, 40, 7660 },
+		{ SECOND_CIRCLE_REQUEST_11C, VANOR_SILENOS_MANE, 30, 8810 },
+		{ SECOND_CIRCLE_REQUEST_12C, TALK_BUGBEAR_TOTEM, 30, 7350 },
+		{ SECOND_CIRCLE_REQUEST_1B, OKUNS_HEAD, 1, 8760 },
+		{ SECOND_CIRCLE_REQUEST_2B, KAKRANS_HEAD, 1, 9380 },
+		{ SECOND_CIRCLE_REQUEST_3B, NARCISSUSS_SOULSTONE, 40, 17820 },
+		{ SECOND_CIRCLE_REQUEST_4B, DEPRIVE_EYE, 20, 17540 },
+		{ SECOND_CIRCLE_REQUEST_5B, UNICORNS_HORN, 20, 14160 },
+		{ SECOND_CIRCLE_REQUEST_6B, KERUNOSS_GOLD_MANE, 1, 15960 },
+		{ SECOND_CIRCLE_REQUEST_1A, SKULL_OF_EXECUTED, 20, 39100 },
+		{ SECOND_CIRCLE_REQUEST_2A, BUST_OF_TRAVIS, 1, 39550 },
+		{ SECOND_CIRCLE_REQUEST_3A, SWORD_OF_CADMUS, 10, 41200 }
+	};
+	// @formatter:on
+	
+	// Monsters drop
+	// @formatter:off
+	private static final int[][] DROPLIST = {
+		{ BREKA_ORC_SHAMAN, FIRST_CIRCLE_REQUEST_3B, COILED_SERPENT_TOTEM, 1, 50, 93 },
+		{ BREKA_ORC_WARRIOR, FIRST_CIRCLE_REQUEST_3B, COILED_SERPENT_TOTEM, 1, 50, 100 },
+		{ GUARDIAN_BASILISK, TEST_INSTRUCTIONS_1, GUARDIAN_BASILISK_SCALE, 1, 40, 90 },
+		{ GUARDIAN_BASILISK, FIRST_CIRCLE_REQUEST_6C, GUARDIAN_BASILISK_TALON, (getRandom(100) < 60) ? 2 : 1, 100, 100 },
+		{ FETTERED_SOUL, FIRST_CIRCLE_REQUEST_7C, REVENANTS_CHAINS, 1, 50, 100 },
+		{ WINDSUS, FIRST_CIRCLE_REQUEST_8C, WINDSUS_TUSK, 1, 30, 63 },
+		{ GRANDIS, FIRST_CIRCLE_REQUEST_9C, GRANDISS_SKULL, 2, 100, 100 },
+		{ GIANT_FUNGUS, TEST_INSTRUCTIONS_1, SPORESEA_SEED, 1, 30, 84 },
+		{ GIANT_MONSTEREYE, FIRST_CIRCLE_REQUEST_4C, GIANT_MONSTER_EYE_MEAT, 1, 30, 60 },
+		{ DIRE_WYRM, FIRST_CIRCLE_REQUEST_5C, DIRE_WYRM_EGG, 1, 40, 90 },
+		{ ROTTING_TREE, SECOND_CIRCLE_REQUEST_1C, ROTTING_TREE_SPORES, 1, 40, 77 },
+		{ TRISALIM_SPIDER, TEST_INSTRUCTIONS_2, TRISALIM_SILK, 1, 20, 60 },
+		{ TRISALIM_SPIDER, SECOND_CIRCLE_REQUEST_2C, TRISALIM_VENOM_SAC, 1, 40, 76 },
+		{ TRISALIM_TARANTULA, TEST_INSTRUCTIONS_2, TRISALIM_SILK, 1, 20, 60 },
+		{ TRISALIM_TARANTULA, SECOND_CIRCLE_REQUEST_2C, TRISALIM_VENOM_SAC, 1, 40, 85 },
+		{ SPORE_ZOMBIE, SECOND_CIRCLE_REQUEST_2C, TRISALIM_VENOM_SAC, 1, 30, 60 },
+		{ MANASHEN_GARGOYLE, TEST_INSTRUCTIONS_1, INDIGO_SPIRIT_ORE, 1, 20, 60 },
+		{ ENCHANTED_STONE_GOLEM, FIRST_CIRCLE_REQUEST_3C, ENCHANTED_GOLEM_SHARD, 1, 50, 100 },
+		{ ENCHANTED_STONE_GOLEM, TEST_INSTRUCTIONS_1, INDIGO_SPIRIT_ORE, 1, 20, 62 },
+		{ ENCHANTED_GARGOYLE, FIRST_CIRCLE_REQUEST_2B, ENCHANTED_GARGOYLES_HORN, 1, 50, 60 },
+		{ TARLK_BUGBEAR_WARRIOR, SECOND_CIRCLE_REQUEST_12C, TALK_BUGBEAR_TOTEM, 1, 30, 73 },
+		{ LETO_LIZARDMAN_ARCHER, FIRST_CIRCLE_REQUEST_1C, CHARM_OF_KADESH, 1, 40, 90 },
+		{ LETO_LIZARDMAN_SOLDIER, FIRST_CIRCLE_REQUEST_1C, CHARM_OF_KADESH, 1, 40, 93 },
+		{ LETO_LIZARDMAN_SHAMAN, TEST_INSTRUCTIONS_1, KARUT_WEED, 1, 20, 60 },
+		{ LETO_LIZARDMAN_OVERLORD, TEST_INSTRUCTIONS_1, KARUT_WEED, 1, 20, 60 },
+		{ TIMAK_ORC_WARRIOR, FIRST_CIRCLE_REQUEST_2C, TIMAK_JADE_NECKLACE, 1, 50, 95 },
+		{ TIMAK_ORC_WARRIOR, TEST_INSTRUCTIONS_2, TIMAK_ORC_TOTEM, 1, 20, 60 },
+		{ TIMAK_ORC_OVERLORD, FIRST_CIRCLE_REQUEST_2C, TIMAK_JADE_NECKLACE, 1, 50, 100 },
+		{ FLINE, SECOND_CIRCLE_REQUEST_7C, TEMPEST_SHARD, 1, 40, 59 },
+		{ LIELE, SECOND_CIRCLE_REQUEST_8C, TSUNAMI_SHARD, 1, 40, 61 },
+		{ VALLEY_TREANT, TEST_INSTRUCTIONS_2, AMBROSIUS_FRUIT, 1, 30, 85 },
+		{ SATYR, SECOND_CIRCLE_REQUEST_9C, SATYR_MANE, 1, 40, 90 },
+		{ UNICORN, SECOND_CIRCLE_REQUEST_5B, UNICORNS_HORN, 1, 20, 78 },
+		{ FOREST_RUNNER, SECOND_CIRCLE_REQUEST_10C, HAMADRYAD_SHARD, 1, 40, 74 },
+		{ VALLEY_TREANT_ELDER, TEST_INSTRUCTIONS_2, AMBROSIUS_FRUIT, 1, 30, 85 },
+		{ SATYR_ELDER, SECOND_CIRCLE_REQUEST_9C, SATYR_MANE, 1, 40, 100 },
+		{ UNICORN_ELDER, SECOND_CIRCLE_REQUEST_5B, UNICORNS_HORN, 1, 20, 96 },
+		{ KARUL_BUGBEAR, FIRST_CIRCLE_REQUEST_11C, KARUL_BUGBEAR_HEAD, 1, 30, 60 },
+		{ TAMLIN_ORC, FIRST_CIRCLE_REQUEST_12C, TAMLIN_IVORY_CHARM, 1, 40, 72 },
+		{ TAMLIN_ORC_ARCHER, FIRST_CIRCLE_REQUEST_12C, TAMLIN_IVORY_CHARM, 1, 40, 90 },
+		{ KRONBE_SPIDER, FIRST_CIRCLE_REQUEST_6B, KRONBE_VENOM_SAC, 1, 30, 60 },
+		{ TAIK_ORC_ARCHER, FIRST_CIRCLE_REQUEST_10C, TAIK_OBSIDIAN_AMULET, 1, 50, 100 },
+		{ TAIK_ORC_WARRIOR, FIRST_CIRCLE_REQUEST_10C, TAIK_OBSIDIAN_AMULET, 1, 50, 93 },
+		{ TAIK_ORC_SHAMAN, SECOND_CIRCLE_REQUEST_3C, TAIK_ORC_TOTEM, 1, 50, 63 },
+		{ TAIK_ORC_CAPTAIN, SECOND_CIRCLE_REQUEST_3C, TAIK_ORC_TOTEM, 1, 50, 99 },
+		{ MIRROR, SECOND_CIRCLE_REQUEST_3B, NARCISSUSS_SOULSTONE, 1, 40, 96 },
+		{ HARIT_LIZARDMAN_GRUNT, SECOND_CIRCLE_REQUEST_4C, HARIT_BARBED_NECKLACE, 1, 40, 98 },
+		{ HARIT_LIZARDMAN_ARCHER, SECOND_CIRCLE_REQUEST_4C, HARIT_BARBED_NECKLACE, 1, 40, 98 },
+		{ HARIT_LIZARDMAN_WARRIOR, SECOND_CIRCLE_REQUEST_4C, HARIT_BARBED_NECKLACE, 1, 40, 100 },
+		{ GRAVE_WANDERER, SECOND_CIRCLE_REQUEST_1A, SKULL_OF_EXECUTED, 1, 20, 83 },
+		{ ARCHER_OF_GREED, TEST_INSTRUCTIONS_2, IMPERIAL_ARROWHEAD, 1, 20, 60 },
+		{ HATAR_RATMAN_THIEF, SECOND_CIRCLE_REQUEST_5C, COIN_OF_OLD_EMPIRE, 1, 20, 60 },
+		{ HATAR_RATMAN_BOSS, SECOND_CIRCLE_REQUEST_5C, COIN_OF_OLD_EMPIRE, 1, 20, 62 },
+		{ DEPRIVE, SECOND_CIRCLE_REQUEST_4B, DEPRIVE_EYE, 1, 20, 87 },
+		{ FARCRAN, SECOND_CIRCLE_REQUEST_6C, SKIN_OF_FARCRAN, 1, 30, 100 },
+		{ TAIRIM, TEST_INSTRUCTIONS_2, BALEFIRE_CRYSTAL, 1, 20, 60 },
+		{ JUDGE_OF_MARSH, SECOND_CIRCLE_REQUEST_3A, SWORD_OF_CADMUS, 1, 10, 74 },
+		{ VANOR_SILENOS_GRUNT, SECOND_CIRCLE_REQUEST_11C, VANOR_SILENOS_MANE, 1, 30, 80 },
+		{ VANOR_SILENOS_SCOUT, SECOND_CIRCLE_REQUEST_11C, VANOR_SILENOS_MANE, 1, 30, 95 },
+		{ VANOR_SILENOS_WARRIOR, SECOND_CIRCLE_REQUEST_11C, VANOR_SILENOS_MANE, 1, 30, 100 },
+		{ BREKA_OVERLORD_HAKA, TEST_INSTRUCTIONS_1, HAKAS_HEAD, 1, 1, 100 },
+		{ BREKA_OVERLORD_JAKA, TEST_INSTRUCTIONS_1, JAKAS_HEAD, 1, 1, 100 },
+		{ BREKA_OVERLORD_MARKA, TEST_INSTRUCTIONS_1, MARKAS_HEAD, 1, 1, 100 },
+		{ WINDSUS_ALEPH, TEST_INSTRUCTIONS_1, WINDSUS_ALEPH_SKIN, 1, 1, 100 },
+		{ TARLK_RAIDER_ATHU, TEST_INSTRUCTIONS_2, ATHUS_HEAD, 1, 1, 100 },
+		{ TARLK_RAIDER_LANKA, TEST_INSTRUCTIONS_2, LANKAS_HEAD, 1, 1, 100 },
+		{ TARLK_RAIDER_TRISKA, TEST_INSTRUCTIONS_2, TRISKAS_HEAD, 1, 1, 100 },
+		{ TARLK_RAIDER_MOTURA, TEST_INSTRUCTIONS_2, MOTURAS_HEAD, 1, 1, 100 },
+		{ TARLK_RAIDER_KALATH, TEST_INSTRUCTIONS_2, KALATHS_HEAD, 1, 1, 100 },
+		{ LETO_SHAMAN_KETZ, FIRST_CIRCLE_REQUEST_4B, TOTEM_OF_KADESH, 1, 1, 100 },
+		{ LETO_CHIEF_NARAK, FIRST_CIRCLE_REQUEST_1B, FANG_OF_NARAK, 1, 1, 100 },
+		{ TIMAK_RAIDER_KAIKEE, FIRST_CIRCLE_REQUEST_5B, KAIKIS_HEAD, 1, 1, 100 },
+		{ TIMAK_OVERLORD_OKUN, SECOND_CIRCLE_REQUEST_1B, OKUNS_HEAD, 1, 1, 100 },
+		{ GOK_MAGOK, FIRST_CIRCLE_REQUEST_2A, TITANS_TABLET, 1, 1, 100 },
+		{ TAIK_OVERLORD_KAKRAN, SECOND_CIRCLE_REQUEST_2B, KAKRANS_HEAD, 1, 1, 100 },
+		{ HATAR_CHIEFTAIN_KUBEL, SECOND_CIRCLE_REQUEST_2A, BUST_OF_TRAVIS, 1, 1, 100 },
+		{ VANOR_ELDER_KERUNOS, SECOND_CIRCLE_REQUEST_6B, KERUNOSS_GOLD_MANE, 1, 1, 100 },
+		{ KARUL_CHIEF_OROOTO, FIRST_CIRCLE_REQUEST_3A, BOOK_OF_SHUNAIMAN, 1, 1, 100 }
+	};
+	// @formatter:on
+	
+	// Links
+	private static final Map<Integer, String> LINKS = new HashMap<>();
+	static
+	{
+		LINKS.put(33520, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-10a.html\">C: 40 Totems of Kadesh</a><br>");
+		LINKS.put(33521, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-10b.html\">C: 50 Jade Necklaces of Timak</a><br>");
+		LINKS.put(33522, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-10c.html\">C: 50 Enchanted Golem Shards</a><br>");
+		LINKS.put(33523, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-10d.html\">C: 30 Pieces Monster Eye Meat</a><br>");
+		LINKS.put(33524, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-10e.html\">C: 40 Eggs of Dire Wyrm</a><br>");
+		LINKS.put(33525, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-10f.html\">C: 100 Claws of Guardian Basilisk</a><br>");
+		LINKS.put(33526, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-10g.html\">C: 50 Revenant Chains </a><br>");
+		LINKS.put(33527, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-10h.html\">C: 30 Windsus Tusks</a><br>");
+		LINKS.put(33528, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-10i.html\">C: 100 Skulls of Grandis</a><br>");
+		LINKS.put(33529, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-10j.html\">C: 50 Taik Obsidian Amulets</a><br>");
+		LINKS.put(33530, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-10k.html\">C: 30 Heads of Karul Bugbear</a><br>");
+		LINKS.put(33531, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-10l.html\">C: 40 Ivory Charms of Tamlin</a><br>");
+		LINKS.put(33532, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-11a.html\">B: Situation Preparation - Leto Chief</a><br>");
+		LINKS.put(33533, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-11b.html\">B: 50 Enchanted Gargoyle Horns</a><br>");
+		LINKS.put(33534, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-11c.html\">B: 50 Coiled Serpent Totems</a><br>");
+		LINKS.put(33535, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-11d.html\">B: Situation Preparation - Sorcerer Catch of Leto</a><br>");
+		LINKS.put(33536, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-11e.html\">B: Situation Preparation - Timak Raider Kaikee</a><br>");
+		LINKS.put(33537, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-11f.html\">B: 30 Kronbe Venom Sacs</a><br>");
+		LINKS.put(33538, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-12a.html\">A: 30 Charms of Eva</a><br>");
+		LINKS.put(33539, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-12b.html\">A: Titan's Tablet</a><br>");
+		LINKS.put(33540, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-12c.html\">A: Book of Shunaiman</a><br>");
+		LINKS.put(33541, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-13a.html\">C: 40 Rotted Tree Spores</a><br>");
+		LINKS.put(33542, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-13b.html\">C: 40 Trisalim Venom Sacs</a><br>");
+		LINKS.put(33543, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-13c.html\">C: 50 Totems of Taik Orc</a><br>");
+		LINKS.put(33544, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-13d.html\">C: 40 Harit Barbed Necklaces</a><br>");
+		LINKS.put(33545, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-13e.html\">C: 20 Coins of Ancient Empire</a><br>");
+		LINKS.put(33546, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-13f.html\">C: 30 Skins of Farkran</a><br>");
+		LINKS.put(33547, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-13g.html\">C: 40 Tempest Shards</a><br>");
+		LINKS.put(33548, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-13k.html\">C: 30 Vanor Silenos Manes</a><br>");
+		LINKS.put(33549, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-13i.html\">C: 40 Manes of Pan Ruem</a><br>");
+		LINKS.put(33550, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-13j.html\">C: hamadryad shards</a><br>");
+		LINKS.put(33551, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-13k.html\">C: 30 Manes of Vanor Silenos</a><br>");
+		LINKS.put(33552, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-13l.html\">C: 30 Totems of Talk Bugbears</a><br>");
+		LINKS.put(33553, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-14a.html\">B: Situation Preparation - Overlord Okun of Timak</a><br>");
+		LINKS.put(33554, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-14b.html\">B: Situation Preparation - Overlord Kakran of Taik</a><br>");
+		LINKS.put(33555, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-14c.html\">B: 40 Narcissus Soulstones</a><br>");
+		LINKS.put(33556, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-14d.html\">B: 20 Eyes of Deprived</a><br>");
+		LINKS.put(33557, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-14e.html\">B: 20 Unicorn Horns</a><br>");
+		LINKS.put(33558, "<a action=\"bypass -h Quest Q00335_TheSongOfTheHunter 30745-14f.html\">B: Kerunos's Gold Mane</a><br>");
+	}
+	
+	public Q00335_TheSongOfTheHunter()
+	{
+		super(335, Q00335_TheSongOfTheHunter.class.getSimpleName(), "The Song of the Hunter");
+		addStartNpc(GREY);
+		addTalkId(GREY, TOR, CYBELLIN);
+		addKillId(BREKA_ORC_SHAMAN, BREKA_ORC_WARRIOR, GUARDIAN_BASILISK, FETTERED_SOUL, WINDSUS, GRANDIS, GIANT_FUNGUS, GIANT_MONSTEREYE, DIRE_WYRM, ROTTING_TREE, TRISALIM_SPIDER, TRISALIM_TARANTULA, SPORE_ZOMBIE, MANASHEN_GARGOYLE, ENCHANTED_STONE_GOLEM, ENCHANTED_GARGOYLE, TARLK_BUGBEAR_WARRIOR, LETO_LIZARDMAN_ARCHER, LETO_LIZARDMAN_SOLDIER, LETO_LIZARDMAN_SHAMAN, LETO_LIZARDMAN_OVERLORD, TIMAK_ORC_WARRIOR, TIMAK_ORC_OVERLORD, FLINE, LIELE, VALLEY_TREANT, SATYR, UNICORN, FOREST_RUNNER, VALLEY_TREANT_ELDER, SATYR_ELDER, UNICORN_ELDER, KARUL_BUGBEAR, TAMLIN_ORC, TAMLIN_ORC_ARCHER, KRONBE_SPIDER, TAIK_ORC_ARCHER, TAIK_ORC_WARRIOR, TAIK_ORC_SHAMAN, TAIK_ORC_CAPTAIN, MIRROR, HARIT_LIZARDMAN_GRUNT, HARIT_LIZARDMAN_ARCHER, HARIT_LIZARDMAN_WARRIOR, GRAVE_WANDERER, ARCHER_OF_GREED, HATAR_RATMAN_THIEF, HATAR_RATMAN_BOSS, DEPRIVE, FARCRAN, TAIRIM, JUDGE_OF_MARSH, VANOR_SILENOS_GRUNT, VANOR_SILENOS_SCOUT, VANOR_SILENOS_WARRIOR, BREKA_OVERLORD_HAKA, BREKA_OVERLORD_JAKA, BREKA_OVERLORD_MARKA, WINDSUS_ALEPH, TARLK_RAIDER_ATHU, TARLK_RAIDER_LANKA, TARLK_RAIDER_TRISKA, TARLK_RAIDER_MOTURA, TARLK_RAIDER_KALATH, GREMLIN_FILCHER, LETO_SHAMAN_KETZ, LETO_CHIEF_NARAK, TIMAK_RAIDER_KAIKEE, TIMAK_OVERLORD_OKUN, GOK_MAGOK, TAIK_OVERLORD_KAKRAN, HATAR_CHIEFTAIN_KUBEL, VANOR_ELDER_KERUNOS, KARUL_CHIEF_OROOTO, VANOR_SILENOS_CHIEFTAIN);
+		registerQuestItems(CYBELLINS_DAGGER, FIRST_CIRCLE_HUNTER_LICENSE, SECOND_CIRCLE_HUNTER_LICENSE, LAUREL_LEAF_PIN, TEST_INSTRUCTIONS_1, TEST_INSTRUCTIONS_2, CYBELLINS_REQUEST, BLOOD_CRYSTAL_PURITY_1, BLOOD_CRYSTAL_PURITY_2, BLOOD_CRYSTAL_PURITY_3, BLOOD_CRYSTAL_PURITY_4, BLOOD_CRYSTAL_PURITY_5, BLOOD_CRYSTAL_PURITY_6, BLOOD_CRYSTAL_PURITY_7, BLOOD_CRYSTAL_PURITY_8, BLOOD_CRYSTAL_PURITY_9, BLOOD_CRYSTAL_PURITY_10, BROKEN_BLOOD_CRYSTAL, GUARDIAN_BASILISK_SCALE, KARUT_WEED, HAKAS_HEAD, JAKAS_HEAD, MARKAS_HEAD, WINDSUS_ALEPH_SKIN, INDIGO_SPIRIT_ORE, SPORESEA_SEED, TIMAK_ORC_TOTEM, TRISALIM_SILK, AMBROSIUS_FRUIT, BALEFIRE_CRYSTAL, IMPERIAL_ARROWHEAD, ATHUS_HEAD, LANKAS_HEAD, TRISKAS_HEAD, MOTURAS_HEAD, KALATHS_HEAD, FIRST_CIRCLE_REQUEST_1C, FIRST_CIRCLE_REQUEST_2C, FIRST_CIRCLE_REQUEST_3C, FIRST_CIRCLE_REQUEST_4C, FIRST_CIRCLE_REQUEST_5C, FIRST_CIRCLE_REQUEST_6C, FIRST_CIRCLE_REQUEST_7C, FIRST_CIRCLE_REQUEST_8C, FIRST_CIRCLE_REQUEST_9C, FIRST_CIRCLE_REQUEST_10C, FIRST_CIRCLE_REQUEST_11C, FIRST_CIRCLE_REQUEST_12C, FIRST_CIRCLE_REQUEST_1B, FIRST_CIRCLE_REQUEST_2B, FIRST_CIRCLE_REQUEST_3B, FIRST_CIRCLE_REQUEST_4B, FIRST_CIRCLE_REQUEST_5B, FIRST_CIRCLE_REQUEST_6B, FIRST_CIRCLE_REQUEST_1A, FIRST_CIRCLE_REQUEST_2A, FIRST_CIRCLE_REQUEST_3A, SECOND_CIRCLE_REQUEST_1C, SECOND_CIRCLE_REQUEST_2C, SECOND_CIRCLE_REQUEST_3C, SECOND_CIRCLE_REQUEST_4C, SECOND_CIRCLE_REQUEST_5C, SECOND_CIRCLE_REQUEST_6C, SECOND_CIRCLE_REQUEST_7C, SECOND_CIRCLE_REQUEST_8C, SECOND_CIRCLE_REQUEST_9C, SECOND_CIRCLE_REQUEST_10C, SECOND_CIRCLE_REQUEST_11C, SECOND_CIRCLE_REQUEST_12C, SECOND_CIRCLE_REQUEST_1B, SECOND_CIRCLE_REQUEST_2B, SECOND_CIRCLE_REQUEST_3B, SECOND_CIRCLE_REQUEST_4B, SECOND_CIRCLE_REQUEST_5B, SECOND_CIRCLE_REQUEST_6B, SECOND_CIRCLE_REQUEST_1A, SECOND_CIRCLE_REQUEST_2A, SECOND_CIRCLE_REQUEST_3A, CHARM_OF_KADESH, TIMAK_JADE_NECKLACE, ENCHANTED_GOLEM_SHARD, GIANT_MONSTER_EYE_MEAT, DIRE_WYRM_EGG, GUARDIAN_BASILISK_TALON, REVENANTS_CHAINS, WINDSUS_TUSK, GRANDISS_SKULL, TAIK_OBSIDIAN_AMULET, KARUL_BUGBEAR_HEAD, TAMLIN_IVORY_CHARM, FANG_OF_NARAK, ENCHANTED_GARGOYLES_HORN, COILED_SERPENT_TOTEM, TOTEM_OF_KADESH, KAIKIS_HEAD, KRONBE_VENOM_SAC, EVAS_CHARM, TITANS_TABLET, BOOK_OF_SHUNAIMAN, ROTTING_TREE_SPORES, TRISALIM_VENOM_SAC, TAIK_ORC_TOTEM, HARIT_BARBED_NECKLACE, COIN_OF_OLD_EMPIRE, SKIN_OF_FARCRAN, TEMPEST_SHARD, TSUNAMI_SHARD, SATYR_MANE, HAMADRYAD_SHARD, VANOR_SILENOS_MANE, TALK_BUGBEAR_TOTEM, OKUNS_HEAD, KAKRANS_HEAD, NARCISSUSS_SOULSTONE, DEPRIVE_EYE, UNICORNS_HORN, KERUNOSS_GOLD_MANE, SKULL_OF_EXECUTED, BUST_OF_TRAVIS, SWORD_OF_CADMUS);
+	}
+	
+	@Override
+	public String onTalk(L2Npc npc, L2PcInstance player)
+	{
+		final QuestState qs = getQuestState(player, true);
+		String htmltext = getNoQuestMsg(player);
+		if (qs.isCreated())
+		{
+			htmltext = player.getLevel() < MIN_LEVEL ? "30744-01.htm" : "30744-02.htm";
+		}
+		else if (qs.isStarted())
+		{
+			switch (npc.getId())
+			{
+				case GREY:
+				{
+					if (hasQuestItems(player, TEST_INSTRUCTIONS_1))
+					{
+						final long count = Arrays.asList(getQuestItemsCount(player, GUARDIAN_BASILISK_SCALE) >= 40, getQuestItemsCount(player, KARUT_WEED) >= 20, (getQuestItemsCount(player, HAKAS_HEAD) + getQuestItemsCount(player, JAKAS_HEAD)
+							+ getQuestItemsCount(player, MARKAS_HEAD)) >= 3, hasQuestItems(player, WINDSUS_ALEPH_SKIN), getQuestItemsCount(player, INDIGO_SPIRIT_ORE) >= 20, getQuestItemsCount(player, SPORESEA_SEED) >= 30).stream().filter(b -> b).count();
+						if (count < 3)
+						{
+							htmltext = "30744-05.html";
+						}
+						else
+						{
+							qs.setCond(2, true);
+							giveItems(player, FIRST_CIRCLE_HUNTER_LICENSE, 1);
+							takeItems(player, GUARDIAN_BASILISK_SCALE, -1);
+							takeItems(player, KARUT_WEED, -1);
+							takeItems(player, HAKAS_HEAD, -1);
+							takeItems(player, JAKAS_HEAD, -1);
+							takeItems(player, MARKAS_HEAD, -1);
+							takeItems(player, WINDSUS_ALEPH_SKIN, -1);
+							takeItems(player, INDIGO_SPIRIT_ORE, -1);
+							takeItems(player, SPORESEA_SEED, -1);
+							takeItems(player, TEST_INSTRUCTIONS_1, -1);
+							htmltext = "30744-06.html";
+						}
+					}
+					
+					if (hasQuestItems(player, FIRST_CIRCLE_HUNTER_LICENSE))
+					{
+						if (player.getLevel() < MAX_LEVEL)
+						{
+							htmltext = "30744-07.html";
+						}
+						else if (!hasQuestItems(player, TEST_INSTRUCTIONS_2))
+						{
+							htmltext = "30744-08.html";
+						}
+					}
+					
+					if (hasQuestItems(player, TEST_INSTRUCTIONS_2))
+					{
+						final long count = Arrays.asList(getQuestItemsCount(player, TIMAK_ORC_TOTEM) >= 20, getQuestItemsCount(player, TRISALIM_SILK) >= 20, getQuestItemsCount(player, AMBROSIUS_FRUIT) >= 30, getQuestItemsCount(player, BALEFIRE_CRYSTAL) >= 20, getQuestItemsCount(player, IMPERIAL_ARROWHEAD) >= 20, ((getQuestItemsCount(player, ATHUS_HEAD)
+							+ getQuestItemsCount(player, LANKAS_HEAD) + getQuestItemsCount(player, TRISKAS_HEAD) + getQuestItemsCount(player, MOTURAS_HEAD) + getQuestItemsCount(player, KALATHS_HEAD)) >= 5)).stream().filter(b -> b).count();
+						if (count < 3)
+						{
+							htmltext = "30744-11.html";
+						}
+						else
+						{
+							qs.setCond(3, true);
+							giveItems(player, SECOND_CIRCLE_HUNTER_LICENSE, 1);
+							takeItems(player, TRISALIM_SILK, -1);
+							takeItems(player, TIMAK_ORC_TOTEM, -1);
+							takeItems(player, AMBROSIUS_FRUIT, -1);
+							takeItems(player, BALEFIRE_CRYSTAL, -1);
+							takeItems(player, IMPERIAL_ARROWHEAD, -1);
+							takeItems(player, ATHUS_HEAD, -1);
+							takeItems(player, LANKAS_HEAD, -1);
+							takeItems(player, TRISKAS_HEAD, -1);
+							takeItems(player, MOTURAS_HEAD, -1);
+							takeItems(player, KALATHS_HEAD, -1);
+							takeItems(player, TEST_INSTRUCTIONS_2, -1);
+							takeItems(player, FIRST_CIRCLE_HUNTER_LICENSE, -1);
+							htmltext = "30744-12.html";
+						}
+					}
+					
+					if (hasQuestItems(player, SECOND_CIRCLE_HUNTER_LICENSE))
+					{
+						htmltext = "30744-14.html";
+					}
+					break;
+				}
+				case CYBELLIN:
+				{
+					if (!hasQuestItems(player, SECOND_CIRCLE_HUNTER_LICENSE) && !hasQuestItems(player, FIRST_CIRCLE_HUNTER_LICENSE))
+					{
+						htmltext = "30746-01.html";
+					}
+					else if (!hasQuestItems(player, CYBELLINS_REQUEST))
+					{
+						htmltext = "30746-02.html";
+					}
+					else if (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_1))
+					{
+						htmltext = "30746-04.html";
+					}
+					else if (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_2) || hasQuestItems(player, BLOOD_CRYSTAL_PURITY_3) || hasQuestItems(player, BLOOD_CRYSTAL_PURITY_4) || hasQuestItems(player, BLOOD_CRYSTAL_PURITY_5) || hasQuestItems(player, BLOOD_CRYSTAL_PURITY_6)
+						|| hasQuestItems(player, BLOOD_CRYSTAL_PURITY_7) || hasQuestItems(player, BLOOD_CRYSTAL_PURITY_8) || hasQuestItems(player, BLOOD_CRYSTAL_PURITY_9))
+					{
+						htmltext = "30746-05.html";
+					}
+					else if (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_10))
+					{
+						giveAdena(player, 870400, true);
+						takeItems(player, BLOOD_CRYSTAL_PURITY_10, -1);
+						htmltext = "30746-05a.html";
+					}
+					else if (!hasQuestItems(player, BROKEN_BLOOD_CRYSTAL))
+					{
+						htmltext = "30746-08.html";
+					}
+					else
+					{
+						takeItems(player, BROKEN_BLOOD_CRYSTAL, -1);
+						htmltext = "30746-09.html";
+					}
+					break;
+				}
+				case TOR:
+				{
+					if (!hasQuestItems(player, SECOND_CIRCLE_HUNTER_LICENSE) && !hasQuestItems(player, FIRST_CIRCLE_HUNTER_LICENSE))
+					{
+						htmltext = "30745-01a.html";
+					}
+					else
+					{
+						final long requestCount = getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_1C, FIRST_CIRCLE_REQUEST_2C, FIRST_CIRCLE_REQUEST_3C, FIRST_CIRCLE_REQUEST_4C, FIRST_CIRCLE_REQUEST_5C, FIRST_CIRCLE_REQUEST_6C, FIRST_CIRCLE_REQUEST_7C, FIRST_CIRCLE_REQUEST_8C, FIRST_CIRCLE_REQUEST_9C, FIRST_CIRCLE_REQUEST_10C, FIRST_CIRCLE_REQUEST_11C, FIRST_CIRCLE_REQUEST_12C, FIRST_CIRCLE_REQUEST_1B, FIRST_CIRCLE_REQUEST_2B, FIRST_CIRCLE_REQUEST_3B, FIRST_CIRCLE_REQUEST_4B, FIRST_CIRCLE_REQUEST_5B, FIRST_CIRCLE_REQUEST_6B, FIRST_CIRCLE_REQUEST_1A, FIRST_CIRCLE_REQUEST_2A, FIRST_CIRCLE_REQUEST_3A, SECOND_CIRCLE_REQUEST_1C, SECOND_CIRCLE_REQUEST_2C, SECOND_CIRCLE_REQUEST_3C, SECOND_CIRCLE_REQUEST_4C, SECOND_CIRCLE_REQUEST_5C, SECOND_CIRCLE_REQUEST_6C, SECOND_CIRCLE_REQUEST_7C, SECOND_CIRCLE_REQUEST_8C, SECOND_CIRCLE_REQUEST_9C, SECOND_CIRCLE_REQUEST_10C, SECOND_CIRCLE_REQUEST_11C, SECOND_CIRCLE_REQUEST_12C, SECOND_CIRCLE_REQUEST_1B, SECOND_CIRCLE_REQUEST_2B, SECOND_CIRCLE_REQUEST_3B, SECOND_CIRCLE_REQUEST_4B, SECOND_CIRCLE_REQUEST_5B, SECOND_CIRCLE_REQUEST_6B, SECOND_CIRCLE_REQUEST_1A, SECOND_CIRCLE_REQUEST_2A, SECOND_CIRCLE_REQUEST_3A);
+						if (hasQuestItems(player, FIRST_CIRCLE_HUNTER_LICENSE))
+						{
+							if (requestCount == 0)
+							{
+								if (player.getLevel() < MAX_LEVEL)
+								{
+									htmltext = "30745-01b.html";
+								}
+								else
+								{
+									if (hasQuestItems(player, SECOND_CIRCLE_HUNTER_LICENSE))
+									{
+										htmltext = "30745-03.html";
+									}
+									else
+									{
+										htmltext = "30745-03a.html";
+									}
+								}
+							}
+							else
+							{
+								htmltext = reward(player, qs, REWARDS);
+							}
+						}
+						else if (hasQuestItems(player, SECOND_CIRCLE_HUNTER_LICENSE))
+						{
+							if (requestCount == 0)
+							{
+								htmltext = "30745-03b.html";
+							}
+							else
+							{
+								htmltext = reward(player, qs, REWARDS);
+							}
+						}
+					}
+					break;
+				}
+			}
+		}
+		return htmltext;
+	}
+	
+	@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 "30744-03.htm":
+			{
+				qs.startQuest();
+				if (!hasQuestItems(player, TEST_INSTRUCTIONS_1))
+				{
+					giveItems(player, TEST_INSTRUCTIONS_1, 1);
+				}
+				qs.setMemoState(0);
+				htmltext = event;
+				break;
+			}
+			case "30744-04.html":
+			case "30744-04a.html":
+			case "30744-04b.html":
+			case "30744-04c.html":
+			case "30744-04d.html":
+			case "30744-04e.html":
+			case "30744-04f.html":
+			case "30744-07.html":
+			case "30744-07a.html":
+			case "30744-07b.html":
+			case "30744-08.html":
+			case "30744-08a.html":
+			case "30744-10.html":
+			case "30744-10a.html":
+			case "30744-10b.html":
+			case "30744-10c.html":
+			case "30744-10d.html":
+			case "30744-10e.html":
+			case "30744-10f.html":
+			case "30744-14.html":
+			case "30744-14a.html":
+			case "30744-15.html":
+			case "30744-18.html":
+			case "30745-09.html":
+			case "30746-03a.html":
+			case "30746-07.html":
+			case "30745-04.html":
+			case "30745-05a.html":
+			case "30745-05c.html":
+			{
+				htmltext = event;
+				break;
+			}
+			case "30744-09.html":
+			{
+				if ((getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_1C) + getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_2C) + getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_3C) + //
+					getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_4C) + getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_4C) + getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_6C) + //
+					getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_7C) + getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_8C) + getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_9C) + //
+					getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_10C) + getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_11C) + getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_12C) + //
+					getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_1B) + getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_2B) + getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_3B) + //
+					getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_4B) + getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_5B) + getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_6B) + //
+					getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_1A) + getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_2A) + getQuestItemsCount(player, FIRST_CIRCLE_REQUEST_3A)) == 0)
+				{
+					giveItems(player, TEST_INSTRUCTIONS_2, 1);
+					htmltext = event;
+				}
+				else
+				{
+					htmltext = "30744-09a.html";
+				}
+				break;
+			}
+			case "30744-16.html":
+			{
+				qs.exitQuest(true, true);
+				
+				takeItems(player, -1, FIRST_CIRCLE_HUNTER_LICENSE, SECOND_CIRCLE_HUNTER_LICENSE, LAUREL_LEAF_PIN, TEST_INSTRUCTIONS_1, TEST_INSTRUCTIONS_2, CYBELLINS_REQUEST, BLOOD_CRYSTAL_PURITY_1, BLOOD_CRYSTAL_PURITY_2, BLOOD_CRYSTAL_PURITY_3, BLOOD_CRYSTAL_PURITY_4, BLOOD_CRYSTAL_PURITY_5, BLOOD_CRYSTAL_PURITY_6, BLOOD_CRYSTAL_PURITY_7, BLOOD_CRYSTAL_PURITY_8, BLOOD_CRYSTAL_PURITY_9, BLOOD_CRYSTAL_PURITY_10, BROKEN_BLOOD_CRYSTAL, CYBELLINS_DAGGER, GUARDIAN_BASILISK_SCALE, KARUT_WEED, HAKAS_HEAD, JAKAS_HEAD, MARKAS_HEAD, WINDSUS_ALEPH_SKIN, INDIGO_SPIRIT_ORE, SPORESEA_SEED, TIMAK_ORC_TOTEM, TRISALIM_SILK, AMBROSIUS_FRUIT, BALEFIRE_CRYSTAL, IMPERIAL_ARROWHEAD, ATHUS_HEAD, LANKAS_HEAD, TRISKAS_HEAD, MOTURAS_HEAD, KALATHS_HEAD, FIRST_CIRCLE_REQUEST_1C, FIRST_CIRCLE_REQUEST_2C, FIRST_CIRCLE_REQUEST_3C, FIRST_CIRCLE_REQUEST_4C, FIRST_CIRCLE_REQUEST_5C, FIRST_CIRCLE_REQUEST_6C, FIRST_CIRCLE_REQUEST_7C, FIRST_CIRCLE_REQUEST_8C, FIRST_CIRCLE_REQUEST_9C, FIRST_CIRCLE_REQUEST_10C, FIRST_CIRCLE_REQUEST_11C, FIRST_CIRCLE_REQUEST_12C, FIRST_CIRCLE_REQUEST_1B, FIRST_CIRCLE_REQUEST_2B, FIRST_CIRCLE_REQUEST_3B, FIRST_CIRCLE_REQUEST_4B, FIRST_CIRCLE_REQUEST_5B, FIRST_CIRCLE_REQUEST_6B, FIRST_CIRCLE_REQUEST_1A, FIRST_CIRCLE_REQUEST_2A, FIRST_CIRCLE_REQUEST_3A, SECOND_CIRCLE_REQUEST_1C, SECOND_CIRCLE_REQUEST_2C, SECOND_CIRCLE_REQUEST_3C, SECOND_CIRCLE_REQUEST_4C, SECOND_CIRCLE_REQUEST_5C, SECOND_CIRCLE_REQUEST_6C, SECOND_CIRCLE_REQUEST_7C, SECOND_CIRCLE_REQUEST_8C, SECOND_CIRCLE_REQUEST_9C, SECOND_CIRCLE_REQUEST_10C, SECOND_CIRCLE_REQUEST_11C, SECOND_CIRCLE_REQUEST_12C, SECOND_CIRCLE_REQUEST_1B, SECOND_CIRCLE_REQUEST_2B, SECOND_CIRCLE_REQUEST_3B, SECOND_CIRCLE_REQUEST_4B, SECOND_CIRCLE_REQUEST_5B, SECOND_CIRCLE_REQUEST_6B, SECOND_CIRCLE_REQUEST_1A, SECOND_CIRCLE_REQUEST_2A, SECOND_CIRCLE_REQUEST_3A, CHARM_OF_KADESH, TIMAK_JADE_NECKLACE, ENCHANTED_GOLEM_SHARD, GIANT_MONSTER_EYE_MEAT, DIRE_WYRM_EGG, GUARDIAN_BASILISK_TALON, REVENANTS_CHAINS, WINDSUS_TUSK, GRANDISS_SKULL, TAIK_OBSIDIAN_AMULET, KARUL_BUGBEAR_HEAD, TAMLIN_IVORY_CHARM, FANG_OF_NARAK, ENCHANTED_GARGOYLES_HORN, COILED_SERPENT_TOTEM, TOTEM_OF_KADESH, KAIKIS_HEAD, KRONBE_VENOM_SAC, EVAS_CHARM, TITANS_TABLET, BOOK_OF_SHUNAIMAN, ROTTING_TREE_SPORES, TRISALIM_VENOM_SAC, TAIK_ORC_TOTEM, HARIT_BARBED_NECKLACE, COIN_OF_OLD_EMPIRE, SKIN_OF_FARCRAN, TEMPEST_SHARD, TSUNAMI_SHARD, SATYR_MANE, HAMADRYAD_SHARD, VANOR_SILENOS_MANE, TALK_BUGBEAR_TOTEM, OKUNS_HEAD, KAKRANS_HEAD, NARCISSUSS_SOULSTONE, DEPRIVE_EYE, UNICORNS_HORN, KERUNOSS_GOLD_MANE, SKULL_OF_EXECUTED, BUST_OF_TRAVIS, SWORD_OF_CADMUS);
+				
+				// TODO(Zoey76): This is dead code.
+				if (getQuestItemsCount(player, LAUREL_LEAF_PIN) < 20)
+				{
+					htmltext = event;
+				}
+				else
+				{
+					giveAdena(player, 20000, true);
+					htmltext = "30744-17.html";
+				}
+				break;
+			}
+			case "30745-02.html":
+			{
+				if (!hasQuestItems(player, TEST_INSTRUCTIONS_2))
+				{
+					htmltext = event;
+				}
+				else
+				{
+					htmltext = "30745-03.html";
+				}
+				break;
+			}
+			case "LIST_1":
+			{
+				int i0 = 0;
+				int i1 = 0;
+				int i2 = 0;
+				int i3 = 0;
+				int i4 = 0;
+				int i5 = 0;
+				
+				if (qs.isMemoState(0))
+				{
+					while ((i0 == i1) || (i1 == i2) || (i2 == i3) || (i3 == i4) || (i0 == i4) || (i0 == i2) || (i0 == i3) || (i1 == i3) || (i1 == i4) || (i2 == i4))
+					{
+						if (!hasQuestItems(player, LAUREL_LEAF_PIN))
+						{
+							i0 = getRandom(12);
+							i1 = getRandom(12);
+							i2 = getRandom(12);
+							i3 = getRandom(12);
+							i4 = getRandom(12);
+							qs.setMemoState((i0 * 32 * 32 * 32 * 32) + (i1 * 32 * 32 * 32) + (i2 * 32 * 32) + (i3 * 32 * 1) + (i4 * 1 * 1));
+						}
+						else if (getQuestItemsCount(player, LAUREL_LEAF_PIN) < 4)
+						{
+							if (getRandom(100) < 20)
+							{
+								i0 = getRandom(6) + 12;
+								i1 = getRandom(12);
+								i2 = getRandom(6);
+								i3 = getRandom(6) + 6;
+								i4 = getRandom(12);
+								qs.setMemoState((i0 * 32 * 32 * 32 * 32) + (i1 * 32 * 32 * 32) + (i2 * 32 * 32) + (i3 * 32 * 1) + (i4 * 1 * 1));
+							}
+							else
+							{
+								i0 = getRandom(12);
+								i1 = getRandom(12);
+								i2 = getRandom(12);
+								i3 = getRandom(12);
+								i4 = getRandom(12);
+								qs.setMemoState((i0 * 32 * 32 * 32 * 32) + (i1 * 32 * 32 * 32) + (i2 * 32 * 32) + (i3 * 32 * 1) + (i4 * 1 * 1));
+							}
+						}
+						else if (getRandom(100) < 20)
+						{
+							i0 = getRandom(6) + 12;
+							if (getRandom(20) == 0)
+							{
+								i1 = getRandom(2) + 18;
+							}
+							else
+							{
+								i1 = getRandom(12);
+							}
+							i2 = getRandom(6);
+							i3 = getRandom(6) + 6;
+							i4 = getRandom(12);
+							qs.setMemoState((i0 * 32 * 32 * 32 * 32) + (i1 * 32 * 32 * 32) + (i2 * 32 * 32) + (i3 * 32 * 1) + (i4 * 1 * 1));
+						}
+						else
+						{
+							i0 = getRandom(12);
+							if (getRandom(20) == 0)
+							{
+								i1 = getRandom(2) + 18;
+							}
+							else
+							{
+								i1 = getRandom(12);
+							}
+							i2 = getRandom(6);
+							i3 = getRandom(6) + 6;
+							i4 = getRandom(12);
+							qs.setMemoState((i0 * 32 * 32 * 32 * 32) + (i1 * 32 * 32 * 32) + (i2 * 32 * 32) + (i3 * 32 * 1) + (i4 * 1 * 1));
+						}
+					}
+					
+					i0 = 33520 + i0;
+					i1 = 33520 + i1;
+					i2 = 33520 + i2;
+					i3 = 33520 + i3;
+					i4 = 33520 + i4;
+					
+					htmltext = getHtml(player, "30745-16.html", i0, i1, i2, i3, i4);
+				}
+				else
+				{
+					i5 = qs.getMemoState();
+					i0 = i5 % 32;
+					i5 = i5 / 32;
+					i1 = i5 % 32;
+					i5 = i5 / 32;
+					i2 = i5 % 32;
+					i5 = i5 / 32;
+					i3 = i5 % 32;
+					i5 = i5 / 32;
+					i4 = i5 % 32;
+					i5 = i5 / 32;
+					i0 = 33520 + i0;
+					i1 = 33520 + i1;
+					i2 = 33520 + i2;
+					i3 = 33520 + i3;
+					i4 = 33520 + i4;
+					
+					htmltext = getHtml(player, "30745-16.html", i4, i3, i2, i1, i0);
+				}
+				break;
+			}
+			case "LIST_2":
+			{
+				int i0 = 0;
+				int i1 = 0;
+				int i2 = 0;
+				int i3 = 0;
+				int i4 = 0;
+				int i5 = 0;
+				
+				if (qs.isMemoState(0))
+				{
+					while ((i0 == i1) || (i1 == i2) || (i2 == i3) || (i3 == i4) || (i0 == i4) || (i0 == i2) || (i0 == i3) || (i1 == i3) || (i1 == i4) || (i2 == i4))
+					{
+						if (!hasQuestItems(player, LAUREL_LEAF_PIN))
+						{
+							i0 = getRandom(10);
+							i1 = getRandom(10);
+							i2 = getRandom(5);
+							i3 = getRandom(5) + 5;
+							i4 = getRandom(10);
+							qs.setMemoState((i0 * 32 * 32 * 32 * 32) + (i1 * 32 * 32 * 32) + (i2 * 32 * 32) + (i3 * 32 * 1) + (i4 * 1 * 1));
+						}
+						else if (getQuestItemsCount(player, LAUREL_LEAF_PIN) < 4)
+						{
+							if (getRandom(100) < 20)
+							{
+								i0 = getRandom(6) + 10;
+								i1 = getRandom(10);
+								i2 = getRandom(5);
+								i3 = getRandom(5) + 5;
+								i4 = getRandom(10);
+								qs.setMemoState((i0 * 32 * 32 * 32 * 32) + (i1 * 32 * 32 * 32) + (i2 * 32 * 32) + (i3 * 32 * 1) + (i4 * 1 * 1));
+							}
+							else
+							{
+								i0 = getRandom(10);
+								i1 = getRandom(10);
+								i2 = getRandom(5);
+								i3 = getRandom(5) + 5;
+								i4 = getRandom(10);
+								qs.setMemoState((i0 * 32 * 32 * 32 * 32) + (i1 * 32 * 32 * 32) + (i2 * 32 * 32) + (i3 * 32 * 1) + (i4 * 1 * 1));
+							}
+						}
+						else if (getRandom(100) < 20)
+						{
+							i0 = getRandom(6) + 10;
+							if (getRandom(20) == 0)
+							{
+								i1 = getRandom(3) + 16;
+							}
+							else
+							{
+								i1 = getRandom(10);
+							}
+							i2 = getRandom(5);
+							i3 = getRandom(5) + 5;
+							i4 = getRandom(10);
+							qs.setMemoState((i0 * 32 * 32 * 32 * 32) + (i1 * 32 * 32 * 32) + (i2 * 32 * 32) + (i3 * 32 * 1) + (i4 * 1 * 1));
+						}
+						else
+						{
+							i0 = getRandom(10);
+							if (getRandom(20) == 0)
+							{
+								i1 = getRandom(3) + 16;
+							}
+							else
+							{
+								i1 = getRandom(10);
+							}
+							i2 = getRandom(5);
+							i3 = getRandom(5) + 5;
+							i4 = getRandom(10);
+							qs.setMemoState((i0 * 32 * 32 * 32 * 32) + (i1 * 32 * 32 * 32) + (i2 * 32 * 32) + (i3 * 32 * 1) + (i4 * 1 * 1));
+						}
+					}
+					
+					i0 = 33520 + (i0 + 20);
+					i1 = 33520 + (i1 + 20);
+					i2 = 33520 + (i2 + 20);
+					i3 = 33520 + (i3 + 20);
+					i4 = 33520 + (i4 + 20);
+					
+					htmltext = getHtml(player, "30745-16.html", i0, i1, i2, i3, i4);
+				}
+				else
+				{
+					i5 = qs.getMemoState();
+					i0 = i5 % 32;
+					i5 = i5 / 32;
+					i1 = i5 % 32;
+					i5 = i5 / 32;
+					i2 = i5 % 32;
+					i5 = i5 / 32;
+					i3 = i5 % 32;
+					i5 = i5 / 32;
+					i4 = i5 % 32;
+					i5 = i5 / 32;
+					i0 = 33520 + (i0 + 20);
+					i1 = 33520 + (i1 + 20);
+					i2 = 33520 + (i2 + 20);
+					i3 = 33520 + (i3 + 20);
+					i4 = 33520 + (i4 + 20);
+					
+					htmltext = getHtml(player, "30745-16.html", i4, i3, i2, i1, i0);
+				}
+				break;
+			}
+			case "30746-03.html":
+			{
+				if (!hasQuestItems(player, CYBELLINS_DAGGER))
+				{
+					giveItems(player, CYBELLINS_DAGGER, 1);
+				}
+				if (getQuestItemsCount(player, CYBELLINS_REQUEST) == 0)
+				{
+					giveItems(player, CYBELLINS_REQUEST, 1);
+				}
+				giveItems(player, BLOOD_CRYSTAL_PURITY_1, 1);
+				if (hasQuestItems(player, BROKEN_BLOOD_CRYSTAL))
+				{
+					takeItems(player, BROKEN_BLOOD_CRYSTAL, -1);
+				}
+				htmltext = event;
+				break;
+			}
+			case "30746-06.html":
+			{
+				if (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_2))
+				{
+					giveAdena(player, 3400, true);
+				}
+				else if (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_3))
+				{
+					giveAdena(player, 6800, true);
+				}
+				else if (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_4))
+				{
+					giveAdena(player, 13600, true);
+				}
+				else if (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_5))
+				{
+					giveAdena(player, 27200, true);
+				}
+				else if (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_6))
+				{
+					giveAdena(player, 54400, true);
+				}
+				else if (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_7))
+				{
+					giveAdena(player, 108800, true);
+				}
+				else if (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_8))
+				{
+					giveAdena(player, 217600, true);
+				}
+				else if (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_9))
+				{
+					giveAdena(player, 435200, true);
+				}
+				else if (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_10))
+				{
+					giveAdena(player, 870400, true);
+				}
+				takeItems(player, BLOOD_CRYSTAL_PURITY_2, -1);
+				takeItems(player, BLOOD_CRYSTAL_PURITY_3, -1);
+				takeItems(player, BLOOD_CRYSTAL_PURITY_4, -1);
+				takeItems(player, BLOOD_CRYSTAL_PURITY_5, -1);
+				takeItems(player, BLOOD_CRYSTAL_PURITY_6, -1);
+				takeItems(player, BLOOD_CRYSTAL_PURITY_7, -1);
+				takeItems(player, BLOOD_CRYSTAL_PURITY_8, -1);
+				takeItems(player, BLOOD_CRYSTAL_PURITY_9, -1);
+				takeItems(player, BLOOD_CRYSTAL_PURITY_10, -1);
+				htmltext = event;
+				break;
+			}
+			case "30746-10.html":
+			{
+				takeItems(player, BLOOD_CRYSTAL_PURITY_1, -1);
+				takeItems(player, CYBELLINS_DAGGER, -1);
+				takeItems(player, CYBELLINS_REQUEST, -1);
+				htmltext = event;
+				break;
+			}
+			case "30745-05b.html":
+			{
+				htmltext = event;
+				if (hasQuestItems(player, LAUREL_LEAF_PIN))
+				{
+					takeItems(player, LAUREL_LEAF_PIN, 1);
+				}
+				
+				takeItems(player, -1, FIRST_CIRCLE_REQUEST_1C, FIRST_CIRCLE_REQUEST_2C, FIRST_CIRCLE_REQUEST_3C, FIRST_CIRCLE_REQUEST_4C, FIRST_CIRCLE_REQUEST_5C, FIRST_CIRCLE_REQUEST_6C, FIRST_CIRCLE_REQUEST_7C, FIRST_CIRCLE_REQUEST_8C, FIRST_CIRCLE_REQUEST_9C, FIRST_CIRCLE_REQUEST_10C, FIRST_CIRCLE_REQUEST_11C, FIRST_CIRCLE_REQUEST_12C);
+				takeItems(player, -1, FIRST_CIRCLE_REQUEST_1B, FIRST_CIRCLE_REQUEST_2B, FIRST_CIRCLE_REQUEST_3B, FIRST_CIRCLE_REQUEST_4B, FIRST_CIRCLE_REQUEST_5B, FIRST_CIRCLE_REQUEST_6B);
+				takeItems(player, -1, FIRST_CIRCLE_REQUEST_1A, FIRST_CIRCLE_REQUEST_2A, FIRST_CIRCLE_REQUEST_3A);
+				takeItems(player, -1, SECOND_CIRCLE_REQUEST_1C, SECOND_CIRCLE_REQUEST_2C, SECOND_CIRCLE_REQUEST_3C, SECOND_CIRCLE_REQUEST_4C, SECOND_CIRCLE_REQUEST_5C, SECOND_CIRCLE_REQUEST_6C, SECOND_CIRCLE_REQUEST_7C, SECOND_CIRCLE_REQUEST_8C, SECOND_CIRCLE_REQUEST_9C, SECOND_CIRCLE_REQUEST_10C, SECOND_CIRCLE_REQUEST_11C, SECOND_CIRCLE_REQUEST_12C);
+				takeItems(player, -1, SECOND_CIRCLE_REQUEST_1B, SECOND_CIRCLE_REQUEST_2B, SECOND_CIRCLE_REQUEST_3B, SECOND_CIRCLE_REQUEST_4B, SECOND_CIRCLE_REQUEST_5B, SECOND_CIRCLE_REQUEST_6B);
+				takeItems(player, -1, SECOND_CIRCLE_REQUEST_1A, SECOND_CIRCLE_REQUEST_2A, SECOND_CIRCLE_REQUEST_3A);
+				takeItems(player, -1, CHARM_OF_KADESH, TIMAK_JADE_NECKLACE, ENCHANTED_GOLEM_SHARD, GIANT_MONSTER_EYE_MEAT, DIRE_WYRM_EGG, GUARDIAN_BASILISK_TALON);
+				takeItems(player, -1, REVENANTS_CHAINS, WINDSUS_TUSK, GRANDISS_SKULL, TAIK_OBSIDIAN_AMULET, KARUL_BUGBEAR_HEAD, TAMLIN_IVORY_CHARM);
+				takeItems(player, -1, FANG_OF_NARAK, ENCHANTED_GARGOYLES_HORN, COILED_SERPENT_TOTEM, TOTEM_OF_KADESH, KAIKIS_HEAD, KRONBE_VENOM_SAC);
+				takeItems(player, -1, EVAS_CHARM, TITANS_TABLET, BOOK_OF_SHUNAIMAN, ROTTING_TREE_SPORES, TRISALIM_VENOM_SAC, TAIK_ORC_TOTEM);
+				takeItems(player, -1, HARIT_BARBED_NECKLACE, COIN_OF_OLD_EMPIRE, SKIN_OF_FARCRAN, TEMPEST_SHARD, TSUNAMI_SHARD, SATYR_MANE);
+				takeItems(player, -1, HAMADRYAD_SHARD, VANOR_SILENOS_MANE, TALK_BUGBEAR_TOTEM, OKUNS_HEAD, KAKRANS_HEAD, NARCISSUSS_SOULSTONE);
+				takeItems(player, -1, DEPRIVE_EYE, UNICORNS_HORN, KERUNOSS_GOLD_MANE, SKULL_OF_EXECUTED, BUST_OF_TRAVIS, SWORD_OF_CADMUS);
+				break;
+			}
+			case "30745-10a.html":
+			{
+				giveItems(player, FIRST_CIRCLE_REQUEST_1C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-10b.html":
+			{
+				giveItems(player, FIRST_CIRCLE_REQUEST_2C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-10c.html":
+			{
+				giveItems(player, FIRST_CIRCLE_REQUEST_3C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-10d.html":
+			{
+				giveItems(player, FIRST_CIRCLE_REQUEST_4C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-10e.html":
+			{
+				giveItems(player, FIRST_CIRCLE_REQUEST_5C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-10f.html":
+			{
+				giveItems(player, FIRST_CIRCLE_REQUEST_6C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-10g.html":
+			{
+				giveItems(player, FIRST_CIRCLE_REQUEST_7C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-10h.html":
+			{
+				giveItems(player, FIRST_CIRCLE_REQUEST_8C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-10i.html":
+			{
+				giveItems(player, FIRST_CIRCLE_REQUEST_9C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-10j.html":
+			{
+				giveItems(player, FIRST_CIRCLE_REQUEST_10C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-10k.html":
+			{
+				giveItems(player, FIRST_CIRCLE_REQUEST_11C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-10l.html":
+			{
+				giveItems(player, FIRST_CIRCLE_REQUEST_12C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-11a.html":
+			{
+				giveItems(player, FIRST_CIRCLE_REQUEST_1B, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-11b.html":
+			{
+				giveItems(player, FIRST_CIRCLE_REQUEST_2B, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-11c.html":
+			{
+				giveItems(player, FIRST_CIRCLE_REQUEST_3B, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-11d.html":
+			{
+				giveItems(player, FIRST_CIRCLE_REQUEST_4B, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-11e.html":
+			{
+				giveItems(player, FIRST_CIRCLE_REQUEST_5B, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-11f.html":
+			{
+				giveItems(player, FIRST_CIRCLE_REQUEST_6B, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-12a.html":
+			{
+				giveItems(player, FIRST_CIRCLE_REQUEST_1A, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-12b.html":
+			{
+				giveItems(player, FIRST_CIRCLE_REQUEST_2A, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-12c.html":
+			{
+				giveItems(player, FIRST_CIRCLE_REQUEST_3A, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-13a.html":
+			{
+				giveItems(player, SECOND_CIRCLE_REQUEST_1C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-13b.html":
+			{
+				giveItems(player, SECOND_CIRCLE_REQUEST_2C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-13c.html":
+			{
+				giveItems(player, SECOND_CIRCLE_REQUEST_3C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-13d.html":
+			{
+				giveItems(player, SECOND_CIRCLE_REQUEST_4C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-13e.html":
+			{
+				giveItems(player, SECOND_CIRCLE_REQUEST_5C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-13f.html":
+			{
+				giveItems(player, SECOND_CIRCLE_REQUEST_6C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-13g.html":
+			{
+				giveItems(player, SECOND_CIRCLE_REQUEST_7C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-13k.html":
+			{
+				giveItems(player, SECOND_CIRCLE_REQUEST_11C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-13i.html":
+			{
+				giveItems(player, SECOND_CIRCLE_REQUEST_9C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-13j.html":
+			{
+				giveItems(player, SECOND_CIRCLE_REQUEST_10C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-13l.html":
+			{
+				giveItems(player, SECOND_CIRCLE_REQUEST_12C, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-14a.html":
+			{
+				giveItems(player, SECOND_CIRCLE_REQUEST_1B, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-14b.html":
+			{
+				giveItems(player, SECOND_CIRCLE_REQUEST_2B, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-14c.html":
+			{
+				giveItems(player, SECOND_CIRCLE_REQUEST_3B, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-14d.html":
+			{
+				giveItems(player, SECOND_CIRCLE_REQUEST_4B, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-14e.html":
+			{
+				giveItems(player, SECOND_CIRCLE_REQUEST_5B, 1);
+				htmltext = event;
+				break;
+			}
+			case "30745-14f.html":
+			{
+				giveItems(player, SECOND_CIRCLE_REQUEST_6B, 1);
+				htmltext = event;
+				break;
+			}
+		}
+		return htmltext;
+	}
+	
+	@Override
+	public String onKill(L2Npc npc, L2PcInstance player, boolean isSummon)
+	{
+		final QuestState qs = getRandomPartyMemberState(player, -1, 3, npc);
+		if (qs != null)
+		{
+			for (int i = DROPLIST.length - 1; i >= 0; i--)
+			{
+				final int[] droplist = DROPLIST[i];
+				if (npc.getId() == droplist[0])
+				{
+					if (hasQuestItems(qs.getPlayer(), droplist[1]) && giveItemRandomly(qs.getPlayer(), npc, droplist[2], droplist[3], droplist[4], droplist[5] / 100d, true))
+					{
+						playSound(player, Sound.ITEMSOUND_QUEST_MIDDLE);
+					}
+				}
+			}
+			
+			switch (npc.getId())
+			{
+				case BREKA_ORC_WARRIOR:
+				{
+					if (hasQuestItems(qs.getPlayer(), TEST_INSTRUCTIONS_1) && ((getQuestItemsCount(qs.getPlayer(), HAKAS_HEAD) + getQuestItemsCount(qs.getPlayer(), JAKAS_HEAD) + getQuestItemsCount(qs.getPlayer(), MARKAS_HEAD)) < 3))
+					{
+						if (getRandom(10) < 2)
+						{
+							if (!hasQuestItems(qs.getPlayer(), HAKAS_HEAD))
+							{
+								addSpawn(BREKA_OVERLORD_HAKA, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+							}
+							else if (!hasQuestItems(qs.getPlayer(), JAKAS_HEAD))
+							{
+								addSpawn(BREKA_OVERLORD_JAKA, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+							}
+							else if (!hasQuestItems(qs.getPlayer(), MARKAS_HEAD))
+							{
+								addSpawn(BREKA_OVERLORD_MARKA, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+							}
+						}
+					}
+					break;
+				}
+				case WINDSUS:
+				{
+					if (hasQuestItems(qs.getPlayer(), TEST_INSTRUCTIONS_1) && !hasQuestItems(qs.getPlayer(), WINDSUS_ALEPH_SKIN) && (getRandom(10) < 2))
+					{
+						addSpawn(WINDSUS_ALEPH, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+					}
+					break;
+				}
+				case GRANDIS:
+				{
+					if (hasQuestItems(qs.getPlayer(), FIRST_CIRCLE_REQUEST_2A) && !hasQuestItems(qs.getPlayer(), TITANS_TABLET) && (getRandom(10) < 2))
+					{
+						addSpawn(GOK_MAGOK, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+					}
+					break;
+				}
+				case TARLK_BUGBEAR_WARRIOR:
+				{
+					if (hasQuestItems(qs.getPlayer(), TEST_INSTRUCTIONS_2)
+						&& ((getQuestItemsCount(qs.getPlayer(), ATHUS_HEAD) + getQuestItemsCount(qs.getPlayer(), LANKAS_HEAD) + getQuestItemsCount(qs.getPlayer(), TRISKAS_HEAD) + getQuestItemsCount(qs.getPlayer(), MOTURAS_HEAD) + getQuestItemsCount(qs.getPlayer(), KALATHS_HEAD)) < 5))
+					{
+						if (getRandom(10) < 2)
+						{
+							if (!hasQuestItems(qs.getPlayer(), ATHUS_HEAD))
+							{
+								addSpawn(TARLK_RAIDER_ATHU, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+							}
+							else if (!hasQuestItems(qs.getPlayer(), LANKAS_HEAD))
+							{
+								addSpawn(TARLK_RAIDER_LANKA, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+							}
+							else if (!hasQuestItems(qs.getPlayer(), TRISKAS_HEAD))
+							{
+								addSpawn(TARLK_RAIDER_TRISKA, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+							}
+							else if (!hasQuestItems(qs.getPlayer(), MOTURAS_HEAD))
+							{
+								addSpawn(TARLK_RAIDER_MOTURA, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+							}
+							else if (!hasQuestItems(qs.getPlayer(), KALATHS_HEAD))
+							{
+								addSpawn(TARLK_RAIDER_KALATH, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+							}
+						}
+					}
+					break;
+				}
+				case LETO_LIZARDMAN_SHAMAN:
+				{
+					if (hasQuestItems(qs.getPlayer(), FIRST_CIRCLE_REQUEST_4B) && !hasQuestItems(qs.getPlayer(), TOTEM_OF_KADESH) && (getRandom(10) < 2))
+					{
+						addSpawn(LETO_SHAMAN_KETZ, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+					}
+					
+					evolveBloodCrystal(qs.getPlayer());
+					break;
+				}
+				case LETO_LIZARDMAN_OVERLORD:
+				{
+					if (hasQuestItems(qs.getPlayer(), FIRST_CIRCLE_REQUEST_1B) && !hasQuestItems(qs.getPlayer(), FANG_OF_NARAK) && (getRandom(10) < 2))
+					{
+						addSpawn(LETO_CHIEF_NARAK, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+					}
+					
+					evolveBloodCrystal(qs.getPlayer());
+					break;
+				}
+				case TIMAK_ORC_WARRIOR:
+				{
+					if (hasQuestItems(qs.getPlayer(), FIRST_CIRCLE_REQUEST_5B) && !hasQuestItems(qs.getPlayer(), KAIKIS_HEAD) && (getRandom(10) < 2))
+					{
+						addSpawn(TIMAK_RAIDER_KAIKEE, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+					}
+					break;
+				}
+				case TIMAK_ORC_OVERLORD:
+				{
+					if (hasQuestItems(qs.getPlayer(), SECOND_CIRCLE_REQUEST_1B) && !hasQuestItems(qs.getPlayer(), OKUNS_HEAD) && (getRandom(10) == 0))
+					{
+						addSpawn(TIMAK_OVERLORD_OKUN, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+					}
+					break;
+				}
+				case FLINE:
+				case LIELE:
+				{
+					if (hasQuestItems(qs.getPlayer(), SECOND_CIRCLE_REQUEST_7C) && (getQuestItemsCount(qs.getPlayer(), TEMPEST_SHARD) < 40) && (getRandom(20) < 2))
+					{
+						addSpawn(GREMLIN_FILCHER, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+						npc.broadcastPacket(new CreatureSay(npc.getObjectId(), Say2.NPC_ALL, npc.getName(), NpcStringId.SHOW_ME_THE_PRETTY_SPARKLING_THINGS_THEYRE_ALL_MINE));
+					}
+					break;
+				}
+				case FOREST_RUNNER:
+				{
+					if (hasQuestItems(qs.getPlayer(), SECOND_CIRCLE_REQUEST_10C) && (getQuestItemsCount(qs.getPlayer(), HAMADRYAD_SHARD) < 40) && (getRandom(20) < 2))
+					{
+						addSpawn(GREMLIN_FILCHER, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+						npc.broadcastPacket(new CreatureSay(npc.getObjectId(), Say2.NPC_ALL, npc.getName(), NpcStringId.SHOW_ME_THE_PRETTY_SPARKLING_THINGS_THEYRE_ALL_MINE));
+					}
+					break;
+				}
+				case KARUL_BUGBEAR:
+				{
+					if (hasQuestItems(qs.getPlayer(), FIRST_CIRCLE_REQUEST_3A) && !hasQuestItems(qs.getPlayer(), BOOK_OF_SHUNAIMAN) && (getRandom(10) < 2))
+					{
+						addSpawn(KARUL_CHIEF_OROOTO, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+					}
+					break;
+				}
+				case TAIK_ORC_CAPTAIN:
+				{
+					if (hasQuestItems(qs.getPlayer(), SECOND_CIRCLE_REQUEST_2B) && !hasQuestItems(qs.getPlayer(), KAKRANS_HEAD) && (getRandom(10) < 2))
+					{
+						addSpawn(TAIK_OVERLORD_KAKRAN, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+					}
+					break;
+				}
+				case MIRROR:
+				{
+					if (hasQuestItems(qs.getPlayer(), SECOND_CIRCLE_REQUEST_3B) && (getQuestItemsCount(qs.getPlayer(), NARCISSUSS_SOULSTONE) < 40) && (getRandom(20) < 2))
+					{
+						addSpawn(GREMLIN_FILCHER, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+						npc.broadcastPacket(new CreatureSay(npc.getObjectId(), Say2.NPC_ALL, npc.getName(), NpcStringId.SHOW_ME_THE_PRETTY_SPARKLING_THINGS_THEYRE_ALL_MINE));
+					}
+					break;
+				}
+				case HATAR_RATMAN_THIEF:
+				{
+					if (hasQuestItems(qs.getPlayer(), SECOND_CIRCLE_REQUEST_5C) && (getQuestItemsCount(qs.getPlayer(), COIN_OF_OLD_EMPIRE) < 20) && (getRandom(20) < 2))
+					{
+						addSpawn(GREMLIN_FILCHER, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+						npc.broadcastPacket(new CreatureSay(npc.getObjectId(), Say2.NPC_ALL, npc.getName(), NpcStringId.SHOW_ME_THE_PRETTY_SPARKLING_THINGS_THEYRE_ALL_MINE));
+					}
+					break;
+				}
+				case HATAR_RATMAN_BOSS:
+				{
+					if (hasQuestItems(qs.getPlayer(), SECOND_CIRCLE_REQUEST_5C) && (getQuestItemsCount(qs.getPlayer(), COIN_OF_OLD_EMPIRE) < 20) && (getRandom(20) < 2))
+					{
+						addSpawn(GREMLIN_FILCHER, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+						npc.broadcastPacket(new CreatureSay(npc.getObjectId(), Say2.NPC_ALL, npc.getName(), NpcStringId.SHOW_ME_THE_PRETTY_SPARKLING_THINGS_THEYRE_ALL_MINE));
+					}
+					
+					if (hasQuestItems(qs.getPlayer(), SECOND_CIRCLE_REQUEST_2A) && !hasQuestItems(qs.getPlayer(), BUST_OF_TRAVIS) && (getRandom(10) < 2))
+					{
+						addSpawn(HATAR_CHIEFTAIN_KUBEL, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+					}
+					break;
+				}
+				case VANOR_SILENOS_CHIEFTAIN:
+				{
+					if (hasQuestItems(qs.getPlayer(), SECOND_CIRCLE_REQUEST_6B) && !hasQuestItems(qs.getPlayer(), KERUNOSS_GOLD_MANE) && (getRandom(10) < 2))
+					{
+						addSpawn(VANOR_ELDER_KERUNOS, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+					}
+					break;
+				}
+				case GREMLIN_FILCHER:
+				{
+					if (hasQuestItems(qs.getPlayer(), SECOND_CIRCLE_REQUEST_7C) && (getQuestItemsCount(qs.getPlayer(), TEMPEST_SHARD) < 40))
+					{
+						if (giveItemRandomly(qs.getPlayer(), npc, TEMPEST_SHARD, 5, 40, 1.0, true))
+						{
+							playSound(player, Sound.ITEMSOUND_QUEST_MIDDLE);
+						}
+						
+						npc.broadcastPacket(new CreatureSay(npc.getObjectId(), Say2.NPC_ALL, npc.getName(), NpcStringId.PRETTY_GOOD));
+					}
+					
+					if (hasQuestItems(qs.getPlayer(), SECOND_CIRCLE_REQUEST_8C) && (getQuestItemsCount(qs.getPlayer(), TSUNAMI_SHARD) < 40))
+					{
+						if (giveItemRandomly(qs.getPlayer(), npc, TSUNAMI_SHARD, 5, 40, 1.0, true))
+						{
+							playSound(player, Sound.ITEMSOUND_QUEST_MIDDLE);
+						}
+						
+						npc.broadcastPacket(new CreatureSay(npc.getObjectId(), Say2.NPC_ALL, npc.getName(), NpcStringId.PRETTY_GOOD));
+					}
+					
+					if (hasQuestItems(qs.getPlayer(), SECOND_CIRCLE_REQUEST_10C) && (getQuestItemsCount(qs.getPlayer(), HAMADRYAD_SHARD) < 40))
+					{
+						if (giveItemRandomly(qs.getPlayer(), npc, HAMADRYAD_SHARD, 5, 40, 1.0, true))
+						{
+							playSound(player, Sound.ITEMSOUND_QUEST_MIDDLE);
+						}
+						
+						npc.broadcastPacket(new CreatureSay(npc.getObjectId(), Say2.NPC_ALL, npc.getName(), NpcStringId.PRETTY_GOOD));
+					}
+					
+					if (hasQuestItems(qs.getPlayer(), SECOND_CIRCLE_REQUEST_3B) && (getQuestItemsCount(qs.getPlayer(), NARCISSUSS_SOULSTONE) < 40))
+					{
+						if (giveItemRandomly(qs.getPlayer(), npc, NARCISSUSS_SOULSTONE, 5, 40, 1.0, true))
+						{
+							playSound(player, Sound.ITEMSOUND_QUEST_MIDDLE);
+						}
+						
+						npc.broadcastPacket(new CreatureSay(npc.getObjectId(), Say2.NPC_ALL, npc.getName(), NpcStringId.PRETTY_GOOD));
+					}
+					
+					if (hasQuestItems(qs.getPlayer(), SECOND_CIRCLE_REQUEST_5C) && (getQuestItemsCount(qs.getPlayer(), COIN_OF_OLD_EMPIRE) < 20))
+					{
+						if (giveItemRandomly(qs.getPlayer(), npc, COIN_OF_OLD_EMPIRE, 3, 20, 1.0, true))
+						{
+							playSound(player, Sound.ITEMSOUND_QUEST_MIDDLE);
+						}
+						
+						npc.broadcastPacket(new CreatureSay(npc.getObjectId(), Say2.NPC_ALL, npc.getName(), NpcStringId.PRETTY_GOOD));
+					}
+					break;
+				}
+				case GOK_MAGOK:
+				{
+					if (hasQuestItems(qs.getPlayer(), FIRST_CIRCLE_REQUEST_2A) && !hasQuestItems(qs.getPlayer(), TITANS_TABLET) && (getRandom(2) == 0))
+					{
+						addSpawn(BLACK_LEGION_STORMTROOPER, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+						addSpawn(BLACK_LEGION_STORMTROOPER, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+						npc.broadcastPacket(new CreatureSay(npc.getObjectId(), Say2.NPC_ALL, npc.getName(), NpcStringId.WELL_TAKE_THE_PROPERTY_OF_THE_ANCIENT_EMPIRE));
+					}
+					break;
+				}
+				case HATAR_CHIEFTAIN_KUBEL:
+				{
+					if (hasQuestItems(qs.getPlayer(), SECOND_CIRCLE_REQUEST_2A) && !hasQuestItems(qs.getPlayer(), BUST_OF_TRAVIS) && (getRandom(2) == 0))
+					{
+						addSpawn(BLACK_LEGION_STORMTROOPER, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+						addSpawn(BLACK_LEGION_STORMTROOPER, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+						npc.broadcastPacket(new CreatureSay(npc.getObjectId(), Say2.NPC_ALL, npc.getName(), NpcStringId.WELL_TAKE_THE_PROPERTY_OF_THE_ANCIENT_EMPIRE));
+					}
+					break;
+				}
+				case KARUL_CHIEF_OROOTO:
+				{
+					if (hasQuestItems(qs.getPlayer(), FIRST_CIRCLE_REQUEST_3A) && !hasQuestItems(qs.getPlayer(), BOOK_OF_SHUNAIMAN) && (getRandom(2) == 0))
+					{
+						addSpawn(BLACK_LEGION_STORMTROOPER, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+						addSpawn(BLACK_LEGION_STORMTROOPER, npc.getX(), npc.getY(), npc.getZ() + 10, npc.getHeading(), false, 0, true);
+						npc.broadcastPacket(new CreatureSay(npc.getObjectId(), Say2.NPC_ALL, npc.getName(), NpcStringId.WELL_TAKE_THE_PROPERTY_OF_THE_ANCIENT_EMPIRE));
+					}
+					break;
+				}
+				case LETO_LIZARDMAN_ARCHER:
+				case LETO_LIZARDMAN_SOLDIER:
+				case HARIT_LIZARDMAN_GRUNT:
+				case HARIT_LIZARDMAN_ARCHER:
+				case HARIT_LIZARDMAN_WARRIOR:
+				{
+					evolveBloodCrystal(qs.getPlayer());
+					break;
+				}
+			}
+		}
+		return super.onKill(npc, player, isSummon);
+	}
+	
+	private String reward(L2PcInstance player, QuestState qs, int[][] rewards)
+	{
+		for (int i = rewards.length - 1; i >= 0; i--)
+		{
+			final int[] reward = rewards[i];
+			if (hasQuestItems(player, reward[0]))
+			{
+				if (getQuestItemsCount(player, reward[1]) >= reward[2])
+				{
+					giveItems(player, LAUREL_LEAF_PIN, 1);
+					giveAdena(player, reward[3], true);
+					playSound(player, Sound.ITEMSOUND_QUEST_MIDDLE);
+					qs.setMemoState(0);
+					takeItems(player, reward[0], -1);
+					if (reward[1] == GIANT_MONSTER_EYE_MEAT)
+					{
+						takeItems(player, reward[1], reward[2]);
+					}
+					else
+					{
+						takeItems(player, reward[1], -1);
+					}
+					return (hasQuestItems(player, FIRST_CIRCLE_HUNTER_LICENSE) ? "30745-06a.html" : "30745-06b.html");
+				}
+				return "30745-05.html";
+			}
+		}
+		return null;
+	}
+	
+	private String getHtml(L2PcInstance player, String htmlName, int i0, int i1, int i2, int i3, int i4)
+	{
+		String html = getHtm(player.getHtmlPrefix(), htmlName);
+		html = html.replace("<?reply1?>", LINKS.get(i0));
+		html = html.replace("<?reply2?>", LINKS.get(i1));
+		html = html.replace("<?reply3?>", LINKS.get(i2));
+		html = html.replace("<?reply4?>", LINKS.get(i3));
+		html = html.replace("<?reply5?>", LINKS.get(i4));
+		return html;
+	}
+	
+	private void evolveBloodCrystal(L2PcInstance player)
+	{
+		final L2Weapon weapon = player.getActiveWeaponItem();
+		if ((weapon != null) && (weapon.getId() == CYBELLINS_DAGGER) && (hasQuestItems(player, FIRST_CIRCLE_HUNTER_LICENSE) || hasQuestItems(player, SECOND_CIRCLE_HUNTER_LICENSE)))
+		{
+			if (getRandom(100) < 60)
+			{
+				if (hasQuestItems(player, CYBELLINS_REQUEST))
+				{
+					if (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_1))
+					{
+						giveItems(player, BLOOD_CRYSTAL_PURITY_2, 1);
+						takeItems(player, BLOOD_CRYSTAL_PURITY_1, -1);
+					}
+					else if (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_2))
+					{
+						giveItems(player, BLOOD_CRYSTAL_PURITY_3, 1);
+						takeItems(player, BLOOD_CRYSTAL_PURITY_2, -1);
+					}
+					else if (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_3))
+					{
+						giveItems(player, BLOOD_CRYSTAL_PURITY_4, 1);
+						takeItems(player, BLOOD_CRYSTAL_PURITY_3, -1);
+					}
+					else if (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_4))
+					{
+						giveItems(player, BLOOD_CRYSTAL_PURITY_5, 1);
+						takeItems(player, BLOOD_CRYSTAL_PURITY_4, -1);
+					}
+					else if (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_5))
+					{
+						giveItems(player, BLOOD_CRYSTAL_PURITY_6, 1);
+						takeItems(player, BLOOD_CRYSTAL_PURITY_5, -1);
+					}
+					else if (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_6))
+					{
+						giveItems(player, BLOOD_CRYSTAL_PURITY_7, 1);
+						playSound(player, Sound.ITEMSOUND_QUEST_JACKPOT);
+						takeItems(player, BLOOD_CRYSTAL_PURITY_6, -1);
+					}
+					else if (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_7))
+					{
+						giveItems(player, BLOOD_CRYSTAL_PURITY_8, 1);
+						playSound(player, Sound.ITEMSOUND_QUEST_JACKPOT);
+						takeItems(player, BLOOD_CRYSTAL_PURITY_7, -1);
+					}
+					else if (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_8))
+					{
+						giveItems(player, BLOOD_CRYSTAL_PURITY_9, 1);
+						playSound(player, Sound.ITEMSOUND_QUEST_JACKPOT);
+						takeItems(player, BLOOD_CRYSTAL_PURITY_8, -1);
+					}
+					else if (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_9))
+					{
+						giveItems(player, BLOOD_CRYSTAL_PURITY_10, 1);
+						playSound(player, Sound.ITEMSOUND_QUEST_JACKPOT);
+						takeItems(player, BLOOD_CRYSTAL_PURITY_9, -1);
+					}
+				}
+			}
+			else if (hasQuestItems(player, CYBELLINS_REQUEST) && (hasQuestItems(player, BLOOD_CRYSTAL_PURITY_1) || hasQuestItems(player, BLOOD_CRYSTAL_PURITY_2) || hasQuestItems(player, BLOOD_CRYSTAL_PURITY_3) || hasQuestItems(player, BLOOD_CRYSTAL_PURITY_4)
+				|| hasQuestItems(player, BLOOD_CRYSTAL_PURITY_5) || hasQuestItems(player, BLOOD_CRYSTAL_PURITY_6) || hasQuestItems(player, BLOOD_CRYSTAL_PURITY_7) || hasQuestItems(player, BLOOD_CRYSTAL_PURITY_8) || hasQuestItems(player, BLOOD_CRYSTAL_PURITY_9)))
+			{
+				takeItems(player, -1, BLOOD_CRYSTAL_PURITY_1, BLOOD_CRYSTAL_PURITY_2, BLOOD_CRYSTAL_PURITY_3, BLOOD_CRYSTAL_PURITY_4, BLOOD_CRYSTAL_PURITY_5, BLOOD_CRYSTAL_PURITY_6, BLOOD_CRYSTAL_PURITY_7, BLOOD_CRYSTAL_PURITY_8, BLOOD_CRYSTAL_PURITY_9);
+				giveItems(player, BROKEN_BLOOD_CRYSTAL, 1);
+			}
+		}
+	}
+}
diff --git a/dist/game/data/scripts/quests/QuestMasterHandler.java b/dist/game/data/scripts/quests/QuestMasterHandler.java
index c7895f18a1a8ef43f4ff0f3bfaf1ea8f19caf445..e4f06c31183e539e0177db793ae41aae758ccfe4 100644
--- a/dist/game/data/scripts/quests/QuestMasterHandler.java
+++ b/dist/game/data/scripts/quests/QuestMasterHandler.java
@@ -317,6 +317,7 @@ import quests.Q00330_AdeptOfTaste.Q00330_AdeptOfTaste;
 import quests.Q00331_ArrowOfVengeance.Q00331_ArrowOfVengeance;
 import quests.Q00333_HuntOfTheBlackLion.Q00333_HuntOfTheBlackLion;
 import quests.Q00334_TheWishingPotion.Q00334_TheWishingPotion;
+import quests.Q00335_TheSongOfTheHunter.Q00335_TheSongOfTheHunter;
 import quests.Q00336_CoinsOfMagic.Q00336_CoinsOfMagic;
 import quests.Q00337_AudienceWithTheLandDragon.Q00337_AudienceWithTheLandDragon;
 import quests.Q00338_AlligatorHunter.Q00338_AlligatorHunter;
@@ -824,6 +825,7 @@ public class QuestMasterHandler
 		Q00331_ArrowOfVengeance.class,
 		Q00333_HuntOfTheBlackLion.class,
 		Q00334_TheWishingPotion.class,
+		Q00335_TheSongOfTheHunter.class,
 		Q00336_CoinsOfMagic.class,
 		Q00337_AudienceWithTheLandDragon.class,
 		Q00338_AlligatorHunter.class,
diff --git a/dist/game/data/scripts/quests/documentation.txt b/dist/game/data/scripts/quests/documentation.txt
deleted file mode 100644
index 829b58895add9e340f6bd7d078fd967197066a8d..0000000000000000000000000000000000000000
--- a/dist/game/data/scripts/quests/documentation.txt
+++ /dev/null
@@ -1,322 +0,0 @@
-Quest scripts define the complete or near-complete flow of events that take place from the 
-start to the end of a quest.  This includes, but is not limitted to, starting and accepting 
-the quest, following complex dialogs, attacking or killing mobs, finding quest items, spawning
-quest mobs, completing a quest, and getting rewards.
-
-In order for quest scripts to function properly, at least 3 classes must be imported from Java:
-from com.l2jserver.gameserver.model.quest import State
-from com.l2jserver.gameserver.model.quest import QuestState
-from com.l2jserver.gameserver.model.quest.jython import QuestJython as JQuest
-
-In addition, the jython library "sys" is generally imported for convinience.  More classes can
-be imported as needed, in order to access other components of the core and enhance the abilities
-of the script.
-
-Jython quest scripts essentially inherit from the Java class com.l2jserver.gameserver.model.quest.Quest
-Developers who are comfortable with Java may read the source code for this class, as provided by the
-l2jserver project (www.l2jserver.com) for full details and available functions.  Alternatively, one
-may read forward in this documentation.
-
-
-AVAILABLE TRIGGER FUNCTIONS:
-There exist a set of functions that are predefined for quests and are triggered from various actions.
-These functions, their triggers, and the parameters passed into the script are defined below:
-
-1) onAdvEvent(self, event, npc, player)
-	This function is called whenever a player clicks on a link in a quest dialog and whenever 
-		a timer fires.  Also, should other functions (see below - onTalk, onKill, etc) are not 
-		implemented, this function will be called in their place.   
-	The	parameter "npc" contains a reference to the instance of NPC associated with this event.  
-		This may be the NPC registered in a timer, or the NPC with whom a player is speaking, etc.
-		This parameter may be NULL in certain circumstances.
-	The parameter "player" contains a reference to the player participating in this function.  It
-		may be the player speaking to the NPC, or the player who caused a timer to start (and owns 
-		that timer).
-		This parameter may be NULL in certain circumstances.
-	The parameter "event" contains a string identifier for the event.  Generally, this string
-		is passed directly via the link.  For example:
-		<a action="bypass -h Quest 626_ADarkTwilight 31517-1.htm">hello</a>
-		The above link sets the event variable to "31517-1.htm" for the quest 626_ADarkTwilight
-		In the case of timers, this will be the name of the timer.  This parameter serves as a 
-		sort of identifier.
-	The parameter "self" is a reference to the quest itself.  You may use self.XXXX where XXXX is
-		any function defined in the parent class of your quest.
-2) onEvent(self, event, st)
-	This function is called in place of onAdvEvent if the former is not implemented.  If a script
-		contains BOTH onAdvEvent AND onEvent, then onEvent will never be called unless the script's
-		onAdvEvent explicitely calls onEvent within.  
-	The	parameter "st" contains a reference to the QuestState of the player who used the link or 
-		started the timer.
-	The parameters "event" and "self" are same as in onAdvEvent.
-3) onAttack(self, npc, player, damage, isPet, skill)
-	This function is called whenever a player attacks an NPC that is registered for the quest
-	The parameter "npc" contains a reference to the exact instance of the NPC that got attacked
-	The parameter "player" contains a reference to the exact instance of the player who attacked.
-	The parameter "damage" is a number, representing the total damage that this attack has inflicted to the NPC.
-	The parameter "isPet" is a boolean.  When false it denotes that the attacker was indeed the player.  
-		If true it specifies that the damage was actually dealt by the player's pet.
-	The parameter "skill" is a skill that player used to attack NPC.
-	The parameter "self" works the same as in onEvent.
-4) onAttack(self, npc, player, damage, isPet)
-	This function is called in place of onAttack(with skill) if the former is not implemented.  If a script
-		contains BOTH onAttacks, then this one (without skill) will never be called unless the script's
-		onAttack(with skill) explicitely calls onAttack(without skill) within.
-4) onKill(self, npc, player, isPet)
-	This function is called whenever a player kills an NPC that is registered for the quest
-	All parameters are the same as in onAttack, lacking the damage parameter, of course.
-5) onSkillSee(self, npc, caster, skill, targets, isPet)
-	This function is called whenever a player casts a skill near a registered NPC (1000 distance)
-	The "npc" and "isPet" parameters are same as with onAttack.
-	the "caster" parameter references the actual instance of the player who cast the spell.
-	The "skill" parameter is a referece to the actual skill that was used (from which info about the id and level
-		of the skill can be obtained).
-	The "targets" parameter is an array of all objects (can be any type of object, including mobs and players) that
-		are affected by the skill.
-	NOTE: if a skill does damage, BOTH onSkillSee AND onAttack will be triggered for the damaged NPC!  However, 
-		only onSkillSee will be triggered if the skill does no damage, or if it damages an NPC who has no onAttack
-		registration while near another NPC who has an onSkillSee registration.
-6) onTalk(self,npc, player)
-	This function is called whenever a player clicks to the "Quest" link of an NPC that is registered 
-	for the quest.
-	All parameters are the same as in onAttack
-7) onFirstTalk(self,npc, player)
-	This function is called whenever a player talks to an NPC that is registered for the quest.  That is, 
-	it is triggered from the very first click on the NPC, not via another dialog.
-	NOTE 1: Each NPC can be registered to at most one quest for triggering this function.  In other words, 
-		the same one NPC cannot respond to an "onFirstTalk" request from two different quests.
-		Attempting to register an NPC in two different quests for this function will result in one of the
-		two registration being ignored.
-	NOTE 2: Since a Quest link isn't clicked in order to reach this, a quest state can be invalid within this
-		function.  The coder of the script may need to create a new quest state (if necessary), by using:
-		st = self.newQuestState(player)	
-	NOTE 3: the returned value of onFirstTalk replaces the default html that would have otherwise been loaded 
-		from a subfolder of .../gameserver/data/html/...
-		If you wish to show the default html, within onFirstTalk do npc.showChatWindow(player) and then return ""
-	All parameters are the same as in onAttack.
-8) onDeath (self, npc, character, st) 
-	This function is called whenever an exact INSTANCE of a character who was previously registered for this 
-	event dies.  The registration for onDeath events is NOT done via the quest itself, but it is instead handled
-	by the QuestState of a particular player.
-	The parameter "npc" contains a reference to the exact instance of the NPC that KILLED the character.
-	The parameter "character" contains a reference to the exact instance of the character that got killed.
-	The parameter "st" contains a reference to the QuestState of whomever was interested (waiting) for this kill
-	The parameter "self" works the same as in onEvent.
-9) onSpawn (self, npc)
-	Currently the only function that has no reference to a player.  It is triggered whenever an NPC spawns or
-	respawns and passes a reference to the newly (re)spawned NPC.  It is useful for initializations, starting
-	quest timers, displaying chat (NpcSay), and more.
-	The parameter "npc" contains a reference to the exact instance of the NPC who just (re)spawned.
-10) onFactionCall(self, npc, caller, attacker, isPet)
-	Triggered when an npc is called by another npc in the same faction.
-	The parameter "npc" contains a reference to the exact instance of the NPC who is being asked for help
-	The parameter "caller" contains a reference to the exact instance of the NPC who is asking for help
-	The parameter "attacker" contains a reference to the exact instance of the player who attacked the caller
-	The "isPet" parameters works same as with onAttack.
-11) onAggroRangeEnter(self, npc, player, isPet)
-	This is currently here only as a place-holder.  This function is NOT yet called from any part of the code.
-	The idea is it will be called whenever a player or pet come near an aggro mob (enter its aggro range).
-	The parameters "npc", "player", and "isPet" work similar to onAttack.
-	
-12) REGISTRATION FUNCTIONS:
-	The functions described below have a single purpose: To register an NPC for event triggers.  Simply put,
-	an NPC must be registered in a quest for a particular event in order for the NPC to respond to the occurence
-	of thatevent.  
-	Registration Functions are NOT called automatically.  Instead, they should be added at the bottom of your 
-	quest script.
-	Descriptions of all registration functions follow:
-	a) addStartNpc(npcId)
-		Registers an NPC for onTalk events.  These NPCs are considered start NPCs.  Therefore, the player
-		does NOT need to have started the quest in order to access the onTalk section of the quest.
-		Instead, when a player talks to NPCs registered by addStartNpc, then the players automatically get
-		a CREATED state for this quest.
-		The parameter "npcId" contains the id of the template for this NPC.
-	b) addTalkId(npcId)
-		Registers an NPC for onTalk events.  These NPCs are not considered start NPCs (unless they are also
-		registered with addStartNpc).  NPCs registered using addTalkId will only respond to the player's
-		click of a "Quest" link if and only if the player has alredy started the quest.
-		The parameter "npcId" contains the id of the template for this NPC.
-	c) addAttackId(npcId)
-		Registers an NPC for onAttack events.  The players do NOT need to be registered for the quest in order
-		to trigger a response to an attack against this NPC.  
-		The parameter "npcId" contains the id of the template for this NPC.
-	d) addKillId(npcId)
-		Registers an NPC for onKill events.  The players do NOT need to be registered for the quest in order
-		to trigger a response to this NPC getting killed.
-		The parameter "npcId" contains the id of the template for this NPC.
-	e) addFirstTalkId(npc)
-		Registers an NPC for onFirstTalk events.  
-	f) addSpawnId(npc)
-		Registers an NPC for onSpawn events.  
-	g) addSkillSeeId(npc)
-		Registers an NPC for onSkillSee events.  
-	f) addFactionCallId(npc)
-		Registers an NPC for onFactionCall events.  
-	h) addAggroRangeEnterId(npc)
-		Registers an NPC for onAggroRangeEnter events (remember, those events aren't yet supported and will not be 
-		triggered by core yet).		
-		
-13) OVERRIDABLE QUEST FUNCTIONS:
-	There exist a few functions which are automatically called by the core (and optionally manually called within
-	your script) which meant to be overriden by your quest script for special needs.   
-	a) saveGlobalData()
-		Optional function.  If a quest (or ai) needs to keep track of variables that are persistant beyond a reboot
-		but are not tied to any particular character (for example, count how many players have finished a quest in 
-		order to do some special action when the count reaches 1000), then you can override this function and add
-		code for saving your special variabls.  This function will automatically be called when the server is shutting
-		down as well as when you attempt to reload the quest using GM commands.  The actual functions used to save
-		those variables are described in section 11, below.  
-	b) init_LoadGlobalData()
-		Optional function.  If a quest has saved global data, you will also need to implement a way to load the data
-		back.  Here, you can define everything from which variables to look for and load to the structure in which
-		you wish to store the data (for example, you may want to format things as an array, or a dictionary, or some 
-		other structure).  The actual functions used to load those variables are described in section 11, below.  
-
-14) OTHER QUEST FUNCTIONS:
-	In addition to the trigger functions (which are called automatically by the core when certain actions take place)
-	there also exist a variety of functions that belong to the Quest class and can be accessed within each script.
-	To call those functions one needs to prefix the call with "self." and provide the appropriate parameters.  For
-	example, if the Quest class had a function named "foo" and it expected an integer parameter, you could call this
-	function from anywhere within the "class Quest" segment of your script, using the code
-	self.foo(5)
-
-	The full listing of available functions can be seen in the class com.l2jserver.gameserver.model.quest.Quest, which 
-	is located at com/l2jsever/gameserver/model/quest/Quest.java from the l2jserver project.  However, a few of the
-	more common functions are summarized here:
-	a) startQuestTimer(name, time, npc, player, repeating)
-		Starts a timer.  The timer will call onAdvEvent(name, npc, player) each time that it fires.
-		The parameter name is a string which serves as the name of the timer (or "event").
-			time refers to the number of milliseconds that the timer will wait before it fires.
-		npc is the actual instance of an NPC or Mob assosiated with the timer.  If this timer is not tied to 
-			any particular instance, you should pass None as the parameter.
-		player is the actual instance of a player assosiated with the timer.  If this timer is not tied to 
-			any particular instance, you should pass None as the parameter.
-		repeating is a boolean (True or False) variable.  If this is False, the timer will only fire once.  If 
-			this is True, the timer will keep firing at equal periods (equal to the "time" parameter) for ever, 
-			unless you explicitely cancel the timer, reboot the server, or reload the quest (assuming that your
-			script doesn't automatically start the timer again when it loads).
-	b) getQuestTimer(name, npc, player)
-		Allows you to grab an instance of the timer.  This is primarily used behind the scenes (from core) and
-		you would rarely really need it, but I am describing as it is somewhat important in understanding timers.
-		The parameter name refers to the name with which a timer was added.  It is the first and most important
-			key in identifying the timer.  Two timers with different name are always considered unrelated to each
-			other.  If the name is the same, the timers are further identified by the npc and player associated.
-		npc is the second key for identifying timers.  A null (None) npc acts as a wildcard!  That is, if you call 
-			this function with a null npc parameter, it will consider as matches any timers with the correct 
-			name and player, regardless of which NPC was used.  On the other hand, if you use a non-null npc, this
-			function will consider as matches any timers with the same name, npc, and player as well as timers
-			with the same name and player but null NPC.
-		player is the last key for identifying timers.  A null (None) player acts as a wildcard!  That is, if you call 
-			this function with a null player parameter, it will consider as matches any timers with the correct 
-			name and npc, regardless of which player was used.  On the other hand, if you use a non-null player, this
-			function will consider as matches any timers with the same name, npc, and player as well as timers
-			with the same name and npc but null player.   
-		Naturally, if both player and npc are null, matches are identified based solely on the name.
-	c) cancelQuestTimer(name, npc, player)
-		Cancels a timer.  See getQuestTimer for details on how this call will match and discover which timer to 
-		cancel.  If multiple timers match the parameters, only the first timer that the code discovers will be cancelled.
-	d) saveGlobalQuestVar(var, value)
-		This permanently (until explicit deletion) saves a variable that is global for this quest.  Here, global 
-		refers to the fact that it is not tied to any particular player!  It does not mean global for all quest. 
-		var is a string denoting the variable name.
-		value is a string denoting the value of the variable "var".
-		For storing complex structures, your script must provide code which properly breaks down the data into 
-		var/value pairs and saves it in a way that can be read back.
-	e) loadGlobalQuestVar(var)
-		This loads a permanently saved variable that is global for all players within this quest.  It then 
-		returns the result as a string.  It returns an empty string if the specified variable does not exist 
-		for this quest.
-		var is the name of the variable you wish to load
-	f) deleteGlobalQuestVar(var)
-		Deletes a global quest variable for this quest (same definition of "global" as in #d).
-		var is the name of the variable you wish to delete
-	g) deleteAllGlobalQuestVars()
-		Deletes ALL global quest variables for this quest (same definition of "global" as in #d).
-	h) getRandomPartyMember(player)
-		Returns a random player who is in the same party as the referenced parameter.  If the referenced
-		parameter is a player who is not in a party, it returns the player reference itself automatically.
-		If the reference is null, it returns null.
-		player is a reference to a player instance.
-	i) getRandomPartyMember(player, var, value)
-		Similar to #h but only returns a result among those players who have the specified var and value pair 
-		among their QuestState variables (see QuestState description below).  If no party member matches these 
-		conditions, a null (None) is returned.
-		The reference player may also be among the possible results if it also matches the conditions.
-		Similarly to #h, if the reference player is not in a party, then only the var/value pairs are checked.
-		In that case, if the player matches the conditions, the same player is returned, else null is returned. 
-		player: The reference player whose party will be checked
-		var: The variable name necessary for a match.  If this is null (None), then a completely random
-			party member is returned regardless of the value (same as in #h).
-		value: the required value of the "var" before a party member is considered for the random poll.  
-		Example usage:
-		self.getRandomPartyMemberState(player, "cond","5")
-		This will return a random party member among those members who have cond=5.
-	j) getRandomPartyMemberState(player, state)
-		Similar to #h but only returns a result among those players whose QuestState has a state matching the 
-		passed "state" variable (see QuestState description below).  If no party member matches the state 
-		condition a null (None) is returned.
-		If the reference player is not in a party, either the reference is return if it matches the state 
-		condition, or a null (None) is returned if the reference player doesn't match the state condition.   
-		For example, 
-		self.getRandomPartyMemberState(player, State.COMPLETED)
-		will return a random party member among those members who have completed the quest.
-
-Quest:
-After writing your script, in order to initialize your quest and register it with the game server, near the 
-bottom of your script, you must use:
-	QUEST       = Quest(id,"12345_QuestName","Description")
-For example:
-	QUEST       = Quest(626,"626_ADarkTwilight","A Dark Twilight")
-It is often useful to define the quest name in a variable at the top of the script (typically called "qn").  
-In that case, you may register your quest using:
-	QUEST       = Quest(626,qn,"A Dark Twilight")
-In addition, you can register quest items with this quest.  All registered items will be DELETED from the
-player's inventory, as soon as the quest is aborted or completed.  Many quests reward items that are not
-meant to be deleted upon quest completion, even if the items appear in the quest inventory (example: star of destiny).
-Such items should NOT be registered as questItems.  To register items with a quest, you need to modify the __init__ 
-function of the quest.  For a simple quest with no registrations, the __init__ function will look something like :
- def __init__(self,id,name,descr): JQuest.__init__(self,id,name,descr)
-For a quest with registered items, this should be:
- def __init__(self,id,name,descr): 
-    JQuest.__init__(self,id,name,descr)
-    self.questItemIds = [1234,5678] 
-In this example, the items with id 1234 and 5678 are registered.
-
-QuestState:
-A QuestState is not part of the quest definition itself, but it contains the information that tracks the 
-progress of a particular player for this quest.  Given a player instance, the quest-state of that player for 
-this quest can be found using:
-	st = player.getQuestState("12345_questname")
-If the player does NOT have a quest-state for this quest (i.e. the player is not currently doing this quest), then
-st will be null.
-In addition, the queststate of a random party member who has a particular variable and value stored for this quest,
-can be discovered using:
-	partyMember = self.getRandomPartyMember(player,"variable","value")
-	st = partyMember.getQuestState("12345_questname")
-Similarly, the queststate of a random party member who has reached a particular STATE for this quest,
-can be discovered using:
-	partyMember = self.getRandomPartyMemberState(player,STATE)
-	st = partyMember.getQuestState("12345_questname")
-For example, instead of "variable" and "value" in the first sample, one may use "cond" and "1".  Instead of STATE in 
-the second sample, one may use State.STARTED
-While a QuestState can be discovered from a player, it can also access the player instance back when needed, using
-	st.getPlayer()
-All other public methods of implementation of QuestState are accessible from jython.  Similarly, objects
-reachable from st can be further used in order to reach deeper.  For example, one may do something like:
-	st.getPlayer().getClan().getLeader().getPlayerInstance().getPet()
-	(this example may not be fully accurate or may get deprecated in the future...it is only meant as a 
-	little demonstation of how one may reach deeper into a chain of objects that are accessible.  In this
-	case, from the QuestState, we get the player whose QuestState this is, then get that player's clan,
-	the clan's leader, the leader's actual player instance, and from there, we find the leader's summonned pet!)
-	
-State:
-States are used to track segments of the quest for players.  States are not a property of any particular quest and 
-States Types cannot be added or removed dynamically.  They are a mere enumeration used universally by all quests.  
-Each QuestState carries a State value which can be compared to the available (global) state types in order to check
-the progress that the given character has with regards to the given QuestState (see QuestState info above).
-The available state types are:
-CREATED
-STARTED
-COMPLETED
-For example, given an instance of a QuestState (st) for a given player doing some quest, one can check if the
-player has completed the quest by doing the comparison:
-st.getState() == State.COMPLETED
\ No newline at end of file