浏览代码

Lua update

Devn00b 6 月之前
父节点
当前提交
cff39dedc6
共有 100 个文件被更改,包括 2576 次插入248 次删除
  1. 11 0
      server/ItemScripts/T1Pickles.lua
  2. 11 0
      server/ItemScripts/T2Pickles.lua
  3. 11 0
      server/ItemScripts/T3Pickles.lua
  4. 11 0
      server/ItemScripts/T4Pickles.lua
  5. 11 0
      server/ItemScripts/T5Pickles.lua
  6. 11 0
      server/ItemScripts/T6Pickles.lua
  7. 11 0
      server/ItemScripts/T7Pickles.lua
  8. 11 0
      server/ItemScripts/T8Pickles.lua
  9. 51 0
      server/Quests/Antonica/Achoo!AntonicanPepper.lua.lua
  10. 84 0
      server/Quests/Baubbleshire/nylaspiethief.lua
  11. 2 2
      server/Quests/GraystoneYard/rat_man_bloodsaber_crusade.lua
  12. 73 0
      server/Quests/Oakmyst/a_citizens_request.lua
  13. 56 0
      server/Quests/Oakmyst/an_important_meeting.lua
  14. 81 0
      server/Quests/Oakmyst/an_ode_to_oakmyst.lua
  15. 69 0
      server/Quests/Oakmyst/booze_in_the_drink.lua
  16. 61 0
      server/Quests/Oakmyst/cause_for_investigation.lua
  17. 84 0
      server/Quests/Oakmyst/clean_up.lua
  18. 49 0
      server/Quests/Oakmyst/destroy_the_corruption.lua
  19. 32 0
      server/Quests/Oakmyst/druids_legacy.lua
  20. 69 0
      server/Quests/Oakmyst/far_seas_requisition_okf050.lua
  21. 69 0
      server/Quests/Oakmyst/far_seas_requisition_okf063.lua
  22. 62 0
      server/Quests/Oakmyst/feed_the_sapling.lua
  23. 53 0
      server/Quests/Oakmyst/glowmyst_juice.lua
  24. 80 0
      server/Quests/Oakmyst/if_i_had_a_hammer.lua
  25. 51 0
      server/Quests/Oakmyst/judgement_of_the_dryads.lua
  26. 81 0
      server/Quests/Oakmyst/natural_causes.lua
  27. 51 0
      server/Quests/Oakmyst/proof_of_poachers.lua
  28. 93 0
      server/Quests/Oakmyst/regrowth.lua
  29. 40 0
      server/Quests/Oakmyst/reinforcements.lua
  30. 41 0
      server/Quests/Oakmyst/runed_acorn.lua
  31. 57 0
      server/Quests/Oakmyst/that_cheating_gnome.lua
  32. 37 0
      server/Quests/Oakmyst/the_patchwork_tapestry.lua
  33. 80 0
      server/Quests/PeatBog/Ambushed (2).lua
  34. 39 0
      server/Quests/PeatBog/reinforcements (2).lua
  35. 35 0
      server/Quests/QueensColny/welcome_to_norrath.lua
  36. 75 0
      server/Quests/SerpentSewers/BackAndForth.lua
  37. 47 0
      server/Quests/SerpentSewers/CrazyIsAsCrazyDoes.lua
  38. 104 0
      server/Quests/SerpentSewers/MurkwaterUniform.lua
  39. 二进制
      server/Quests/SouthQeynos/.barbaric_chores.lua.swp
  40. 48 0
      server/Quests/Sprawl/advanced_problem_solving.lua
  41. 48 0
      server/Quests/Sprawl/problem_solving.lua
  42. 32 0
      server/Quests/SunkenCity/jezranazs_hideous_locket.lua
  43. 104 0
      server/Quests/SunkenCity/joining_the_gang.lua
  44. 32 0
      server/Quests/TheRuins/AJourneyOutsidetheCity
  45. 32 0
      server/Quests/TheRuins/IfIHadAHammer.lua
  46. 93 0
      server/Quests/ZoneName/ElementsOfARitual.lua
  47. 66 0
      server/Quests/ZoneName/HitTheWhereItHurts.lua
  48. 4 1
      server/SpawnScripts/A Meeting of the Minds/Borxx.lua
  49. 1 0
      server/SpawnScripts/Antonica/AdvisorPandrus.lua
  50. 4 3
      server/SpawnScripts/Antonica/AglaemantistheColdwindTerror.lua
  51. 3 1
      server/SpawnScripts/Antonica/AnimatorRotpaw.lua
  52. 1 0
      server/SpawnScripts/Antonica/Blackbark.lua
  53. 3 1
      server/SpawnScripts/Antonica/CaptainGaebrail.lua
  54. 3 1
      server/SpawnScripts/Antonica/ChiefKeizall.lua
  55. 27 0
      server/SpawnScripts/Antonica/Coffrey.lua
  56. 3 1
      server/SpawnScripts/Antonica/GhostofVhalen.lua
  57. 3 1
      server/SpawnScripts/Antonica/GrolvenChiptooth.lua
  58. 3 1
      server/SpawnScripts/Antonica/HollyWindstalker.lua
  59. 3 1
      server/SpawnScripts/Antonica/KingKlicnik.lua
  60. 3 1
      server/SpawnScripts/Antonica/LadyFaideth.lua
  61. 3 1
      server/SpawnScripts/Antonica/LordRison.lua
  62. 3 1
      server/SpawnScripts/Antonica/MayorWoodbridge.lua
  63. 3 1
      server/SpawnScripts/Antonica/PriestofthePlaguebringer.lua
  64. 4 64
      server/SpawnScripts/Antonica/RenuxtheUndying.lua
  65. 3 1
      server/SpawnScripts/Antonica/Rotclaw.lua
  66. 3 1
      server/SpawnScripts/Antonica/SarkinSearfang.lua
  67. 1 2
      server/SpawnScripts/Antonica/SentryActon.lua
  68. 4 64
      server/SpawnScripts/Antonica/Stoneclaw.lua
  69. 3 1
      server/SpawnScripts/Antonica/TarkSearfang.lua
  70. 3 1
      server/SpawnScripts/Antonica/TheDarkpawFanglord.lua
  71. 3 1
      server/SpawnScripts/Antonica/TheKlicnikQueen.lua
  72. 4 2
      server/SpawnScripts/Antonica/TheTwotoedRat.lua
  73. 20 0
      server/SpawnScripts/Antonica/WatchmanHaggerty.lua
  74. 20 0
      server/SpawnScripts/Antonica/WatchmanLoxley.lua
  75. 3 1
      server/SpawnScripts/Antonica/aBloodsaberCorruptor.lua
  76. 1 1
      server/SpawnScripts/Antonica/aColdwindKingCrab.lua
  77. 1 0
      server/SpawnScripts/Antonica/aColdwindLunker.lua
  78. 3 1
      server/SpawnScripts/Antonica/aDeepwaterLurker.lua
  79. 4 1
      server/SpawnScripts/Antonica/aMalevolentViper.lua
  80. 3 3
      server/SpawnScripts/Antonica/aMoatRat.lua
  81. 3 1
      server/SpawnScripts/Antonica/aSabertoothHero.lua
  82. 3 1
      server/SpawnScripts/Antonica/aSabertoothPackLord.lua
  83. 3 1
      server/SpawnScripts/Antonica/aSoddenStalker.lua
  84. 3 1
      server/SpawnScripts/Antonica/anAncientSogbone.lua
  85. 13 0
      server/SpawnScripts/Antonica/devnoobicus.lua
  86. 1 0
      server/SpawnScripts/BloodSkullValleyMaulicsStronghold/GeneralDrull.lua
  87. 1 0
      server/SpawnScripts/BloodSkullValleyMaulicsStronghold/LegioneerGorlak.lua
  88. 3 1
      server/SpawnScripts/Classic_forest/KendallCopperholdsRemains.lua
  89. 4 2
      server/SpawnScripts/Classic_forest/KinlocFlamepawsRemains.lua
  90. 4 2
      server/SpawnScripts/Classic_forest/SornCopperholdsRemains.lua
  91. 5 4
      server/SpawnScripts/Classic_forest/TheBasaltWatcher.lua
  92. 4 2
      server/SpawnScripts/Classic_forest/TinshenBrinthsRemains.lua
  93. 4 2
      server/SpawnScripts/Classic_forest/YesturaRhamreysRemains.lua
  94. 4 64
      server/SpawnScripts/Classic_forest/aRabidBadger.lua
  95. 3 2
      server/SpawnScripts/DownBelow_Classic/AFallenPrince.lua
  96. 3 1
      server/SpawnScripts/DownBelow_Classic/ARottingVermin.lua
  97. 2 1
      server/SpawnScripts/DownBelow_Classic/TheCreeper.lua
  98. 3 1
      server/SpawnScripts/DownBelow_Classic/TheCryptProtector.lua
  99. 7 1
      server/SpawnScripts/DownBelow_Classic/TheGroundsKeeper.lua
  100. 1 0
      server/SpawnScripts/DownBelow_Classic/aBloodsaberCenterPatrol.lua

+ 11 - 0
server/ItemScripts/T1Pickles.lua

@@ -0,0 +1,11 @@
+--[[
+	Script Name		:	ItemScripts/T1Pickles.lua
+	Script Purpose	:	
+	Script Author	:	Neatz09
+	Script Date		:	8.21.2019
+	Script Notes	:	
+--]]
+function cast(Item, Player)
+CastSpell(Player, 5011, 1) 
+
+end

+ 11 - 0
server/ItemScripts/T2Pickles.lua

@@ -0,0 +1,11 @@
+--[[
+	Script Name		:	ItemScripts/T2Pickles.lua
+	Script Purpose	:	
+	Script Author	:	Neatz09
+	Script Date		:	8.21.2019
+	Script Notes	:	
+--]]
+function cast(Item, Player)
+CastSpell(Player, 5011, 2) 
+
+end

+ 11 - 0
server/ItemScripts/T3Pickles.lua

@@ -0,0 +1,11 @@
+--[[
+    Script Name		:	ItemScripts/T3Pickles.lua
+	Script Purpose	:	
+	Script Author	:	Neatz09
+	Script Date		:	8.21.2019
+	Script Notes	:	
+--]]
+function cast(Item, Player)
+CastSpell(Player, 5011, 3) 
+
+end

+ 11 - 0
server/ItemScripts/T4Pickles.lua

@@ -0,0 +1,11 @@
+--[[
+	Script Name		:	ItemScripts/T4Pickles.lua
+	Script Purpose	:	
+	Script Author	:	Neatz09
+	Script Date		:	8.21.2019
+	Script Notes	:	
+--]]
+function cast(Item, Player)
+CastSpell(Player, 5011, 4) 
+
+end

+ 11 - 0
server/ItemScripts/T5Pickles.lua

@@ -0,0 +1,11 @@
+--[[
+	Script Name		:	ItemScripts/T5Pickles.lua
+	Script Purpose	:	
+	Script Author	:	Neatz09
+	Script Date		:	8.21.2019
+	Script Notes	:	
+--]]
+function cast(Item, Player)
+CastSpell(Player, 5011, 5) 
+
+end

+ 11 - 0
server/ItemScripts/T6Pickles.lua

@@ -0,0 +1,11 @@
+--[[
+	Script Name		:	ItemScripts/T6Pickles.lua
+	Script Purpose	:	
+	Script Author	:	Neatz09
+	Script Date		:	8.21.2019
+	Script Notes	:	
+--]]
+function cast(Item, Player)
+CastSpell(Player, 5011, 6) 
+
+end

+ 11 - 0
server/ItemScripts/T7Pickles.lua

@@ -0,0 +1,11 @@
+--[[
+	Script Name		:	ItemScripts/T7Pickles.lua
+	Script Purpose	:	
+	Script Author	:	Neatz09
+	Script Date		:	8.21.2019
+	Script Notes	:	
+--]]
+function cast(Item, Player)
+CastSpell(Player, 5011, 7) 
+
+end

+ 11 - 0
server/ItemScripts/T8Pickles.lua

@@ -0,0 +1,11 @@
+--[[
+	Script Name		:	ItemScripts/T8Pickles.lua
+	Script Purpose	:	
+	Script Author	:	Neatz09
+	Script Date		:	8.21.2019
+	Script Notes	:	
+--]]
+function cast(Item, Player)
+CastSpell(Player, 5011, 8) 
+
+end

+ 51 - 0
server/Quests/Antonica/Achoo!AntonicanPepper.lua.lua

@@ -0,0 +1,51 @@
+--[[
+	Script Name		:	Achoo!AntonicanPepper.lua
+	Script Purpose	:	Handles the quest, "Achoo! Antonican Pepper"
+	Script Author	:	geordie0511
+	Script Date		:	14.03.2019
+	Script Notes	:	
+
+	Zone			:	Antonica
+	Quest Giver		:	Matsy Rollingpin
+	Preceded by		:	None
+	Followed by		:	Blub Blub Something Smells Fishy
+--]]
+
+
+function Init(Quest)
+	AddQuestStepChat(Quest, 1, "I need to find Merchant Novak.", 1, "Matsy needs pepper for her chowder from Merchant Novak.", 797, 120099)
+	AddQuestStepCompleteAction(Quest, 1, "Step1Complete")
+end
+
+function Step1Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have the pepper.")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I acquired the pepper from Merchant Novak.")
+
+	AddQuestStepChat(Quest, 2, "I must return to Matsy.", 1, "I have the pepper and should now return to Matsy.", 797, 120280)
+	AddQuestStepCompleteAction(Quest, 2, "QuestComplete")
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	-- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around
+	UpdateQuestStepDescription(Quest, 2, "I have given Matsy the pepper for her chowder.")
+	UpdateQuestTaskGroupDescription(Quest, 2, "I have given the pepper to Matsy.")
+
+	UpdateQuestDescription(Quest, "I helped Matsy finish her cooking by fetching some more pepper from Merchant Novak. She seemed very busy. I wonder if she needs any more help.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1Complete(Quest, QuestGiver, Player)
+	elseif Step == 2 then
+		QuestComplete(Quest, QuestGiver, Player)
+	end
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	-- Add dialog here for when the quest is accepted
+end
+
+function Declined(Quest, QuestGiver, Player)
+	-- Add dialog here for when the quest is declined
+end

+ 84 - 0
server/Quests/Baubbleshire/nylaspiethief.lua

@@ -0,0 +1,84 @@
+--[[
+    Script Name    : Quests/Baubbleshire/nylas_pie_thief.lua
+    Script Author  : Dorbin
+    Script Date    : 2022.01.11 01:01:26
+    Script Purpose : 
+
+        Zone       : Baubbleshire
+        Quest Giver: Nyla Diggs
+        Preceded by: None
+        Followed by: 
+--]]
+
+function Init(Quest)
+	AddQuestStepZoneloc(Quest, 1, "I must check 'The Ringing Hammer' smithy.", 5, "I need to check the smithy for someone who may have taken the pie", 0, 850.34, -18.22, -514.64, 238)
+	AddQuestStepCompleteAction(Quest, 1, "step1beentothesmithy")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+    FaceTarget(QuestGiver, Spawn)
+ conversation = CreateConversation()
+ AddConversationOption(conversation, "I'll be back once I look around!")
+ StartConversation(conversation, NPC, Spawn, "You'd do that? Tell you what - you search for the missing pie and when you return I'll have a fresh baked pie waiting for you. I'll give the culprit such a scolding they'll think twice before taking one of my pies.")
+end
+
+function Declined(Quest, QuestGiver, Player)
+end
+
+function Deleted(Quest, QuestGiver, Player)
+end
+
+function step1beentothesmithy(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I checked 'The Ringing Hammer'")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I checked the smithy, but found no one who took the pie")
+
+	AddQuestStepChat(Quest, 2, "I need to check 'The Qeynos Exchange'.", 5, "I need to check the bank for someone who may have taken the pie", 0, 895.18, -18.01, -480.29, 238)
+	AddQuestStepCompleteAction(Quest, 2, "step2beentobank")
+end
+
+function step1beentothesmithy(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I checked 'The Qeynos Exchange'")
+	UpdateQuestTaskGroupDescription(Quest, 2, "I checked the bank, but found no one who took the pie")
+
+	AddQuestStepChat(Quest, 3, "I need to investigate 'The Deepmug Tavern'.", 5, "I need to check the tavern for someone who may have taken the pie", 0, 880.47, -18.31, -443.50, 238)
+	AddQuestStepCompleteAction(Quest, 3, "step3deepmug")
+end
+
+function step1beentothesmithy(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 3, "I smell the pie in 'The Deepmug Tavern'")
+	UpdateQuestTaskGroupDescription(Quest, 3, "I smell the pie coming from someone in The Deepmug Tavern")
+
+	AddQuestStepChat(Quest, 4, "I need to investigate 'The Deepmug Tavern'.", 5, "I need to check the tavern for someone who may have taken the pie", 0, 880.47, -18.31, -443.50, 238)
+	AddQuestStepCompleteAction(Quest, 4, "step3deepmug")
+end
+
+function step1beentothesmithy(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 4, "I smell the pie in 'The Deepmug Tavern'")
+	UpdateQuestTaskGroupDescription(Quest, 4, "I smell the pie coming from someone in The Deepmug Tavern")
+
+	AddQuestStepChat(Quest, 5, "I need to investigate 'The Deepmug Tavern'.", 1, "I need to check the tavern for someone who may have taken the pie", 0, 2380030)
+	AddQuestStepCompleteAction(Quest, 5, "ThiefFound")
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 5, "I've told Nyla about her lost pie.")
+	UpdateQuestTaskGroupDescription(Quest, 5, "I've uncovered Nyla's pie thief and told Nyla who did it.")
+
+	UpdateQuestStepDescription(Quest, "I told Nyla about her lost pie. I guess the thief was Lozoria over in the Deepmug tavern. Couldn't resist he said! Oh well, it seems like everything's all right though. ")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1Complete(Quest, QuestGiver, Player)
+	elseif Step == 2 then
+		QuestComplete(Quest, QuestGiver, Player)
+			elseif Step == 3 then
+		QuestComplete(Quest, QuestGiver, Player)
+					elseif Step == 4 then
+		QuestComplete(Quest, QuestGiver, Player)
+					elseif Step == 5 then
+		QuestComplete(Quest, QuestGiver, Player)
+end
+
+end

+ 2 - 2
server/Quests/GraystoneYard/rat_man_bloodsaber_crusade.lua

@@ -28,10 +28,10 @@ end
 
 function Accepted(Quest, QuestGiver, Player)
 	FaceTarget(QuestGiver, Player)
+    PlayFlavor(QuestGiver, "","","agree",0,0,Player)
 	Dialog.New(QuestGiver, Player)
 	Dialog.AddDialog("Then seek out the catacombs! You must slay the Bloodsabers in the caverns. May your faith in the righteous bring you victory, or welcome you in the afterlife. The gods are watching!")
-	Dialog.AddVoiceover("voiceover/english/watcher_curmogliel_kar_thal/qey_village03/watchercurmogliel002", 1937849354, 1911529851)
-    PlayFlavor(QuestGiver, "","","agree",0,0,Player)
+	Dialog.AddVoiceover("voiceover/english/watcher_curmogliel_kar_thal/qey_village03/watchercurmogliel002.mp3", 1937849354, 1911529851)
     Dialog.AddOption("I will prove myself. I will be back.")
     Dialog.Start()
 end

+ 73 - 0
server/Quests/Oakmyst/a_citizens_request.lua

@@ -0,0 +1,73 @@
+--[[
+	Script Name	: Quests/Oakmyst/a_citizens_request.lua
+	Script Purpose	: Handles the quest, "A Citizen's Request"
+	Script Author	: Scatman
+	Script Date	: 2009.05.03
+	
+	Zone       : Oakmyst Forest
+	Quest Giver: Lieutenant Charlin
+	Preceded by: Cause for Investigation (cause_for_investigation.lua)
+	Followed by: An Important Meeting (an_important_meeting.lua)
+	Modified   :5/6/2020
+	Modified by: Ememjr
+	Notes      : Updated NPC ID's
+	
+	
+--]]
+
+
+function Init(Quest)
+	AddQuestStepChat(Quest, 1, "I need to speak with Bardrian Vorsuth on the docks in western Oakmyst Forest.", 1, "Lieutenant Charlin has asked that I head to the docks in Oakmyst Forest on his behalf.", 0, 1950060)
+	AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_SpokeWithBardrian")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	FaceTarget(QuestGiver, Player)
+	conversation = CreateConversation()
+
+	PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin011a.mp3", "", "", 3187068134, 4200320763, Player)
+	AddConversationOption(conversation, "I'll return with his information.")
+	StartConversation(conversation, QuestGiver, Player, "Bring his news back to me. We'll add it to what we've already got.")
+end
+
+function Declined(Quest, QuestGiver, Player)
+end
+
+function Step1_Complete_SpokeWithBardrian(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have spoken with Bardrian Vorsuth.")
+	
+	AddQuestStepChat(Quest, 2, "I need to bring the news of the machine back to Lieutenant Charlin.", 1, "Lieutenant Charlin has asked that I head to the docks in Oakmyst Forest on his behalf.", 0, 1950008) 
+	AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_SpokeWithCharlin")
+end
+
+function Step2_Complete_SpokeWithCharlin(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I have spoken with Lieutenant Charlin.")
+	
+	AddQuestStep(Quest, 3, "Lieutenant Charlin has asked that I search Oakmyst Forest thoroughly for another machine like the one found on the docks. I should check near water.", 1, 100, "Lieutenant Charlin has asked that I head to the docks in Oakmyst Forest on his behalf.", 0) 
+	AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_FoundMachine")
+end
+
+function Step3_Complete_FoundMachine(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 3, "I have found another machine.")
+	
+	AddQuestStepChat(Quest, 4, "I need to tell Lieutenant Charlin of my find.", 1, "Lieutenant Charlin has asked that I head to the docks in Oakmyst Forest on his behalf.", 0, 1950008) 
+	AddQuestStepCompleteAction(Quest, 4, "QuestComplete")
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 4, "I have spoken to Lieutenant Charlin.")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I have found a mysterious machine in Oakmyst Forest.")
+	
+	UpdateQuestDescription(Quest, "I found some sort of machinery that someone had set up in Oakmyst Forest. Though its purpose was not clear it was done so covertly and as such was probably an attempt of some sort of environmental sabotage.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1_Complete_SpokeWithBardrian(Quest, QuestGiver, Player)
+	elseif Step == 2 then
+		Step2_Complete_SpokeWithCharlin(Quest, QuestGiver, Player)
+	elseif Step == 3 then
+		Step3_Complete_FoundMachine(Quest, QuestGiver, Player)
+	end
+end

+ 56 - 0
server/Quests/Oakmyst/an_important_meeting.lua

@@ -0,0 +1,56 @@
+--[[
+	Script Name	: Quests/Oakmyst/an_important_meeting.lua
+	Script Purpose	: Handles the quest, "An Important Meeting"
+	Script Author	: Scatman
+	Script Date	: 2009.05.03
+	
+	Zone       : Oakmyst Forest
+	Quest Giver: Lieutenant Charlin
+	Preceded by: A Citizen's Request (a_citizens_request.lua)
+	Followed by: Clean Up (clean_up.lua)
+    Modified   : 5-5-2020
+	By         : Ememjr
+	Notes      : fixed item id for A Gnollish Contingency Book
+	
+--]]
+
+
+function Init(Quest)
+    AddQuestStep(Quest, 1, "I need to interrupt the meeting being held on the small hill that overlooks the falls just west of The Western Falls.", 1, 100, ".", 0)
+	AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledGilrix")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	FaceTarget(QuestGiver, Player)
+	conversation = CreateConversation()
+
+	PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin019a.mp3", "", "", 1345224197, 2287197630, Player)	
+	AddConversationOption(conversation, "Thanks.")
+	StartConversation(conversation, QuestGiver, Player, "Be safe. They won't appreciate this, heh.")
+end
+
+function Declined(Quest, QuestGiver, Player)
+end
+
+function Step1_Complete_KilledGilrix(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have interrupted the meeting.")
+	
+	-- A Gnollish Contingency Book
+	SummonItem(Player, 21029, 1)
+	
+	AddQuestStepChat(Quest, 2, "I need to return to Lieutenant Charlin and tell him what happened.", 1, ".", 0, 1950008) 
+	AddQuestStepCompleteAction(Quest, 2, "QuestComplete")
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have spoken with Lieutenant Charlin.")
+
+	UpdateQuestDescription(Quest, "I interrupted the meeting just as planned. It was between a few gnolls and a gnome. The gnome ran off but the gnolls were slain. The information found on them will help deconstruct their plans in Oakmyst Forest.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1_Complete_KilledGilrix(Quest, QuestGiver, Player)
+	end
+end

+ 81 - 0
server/Quests/Oakmyst/an_ode_to_oakmyst.lua

@@ -0,0 +1,81 @@
+--[[
+	Script Name		:	an_ode_to_oakmyst.lua
+	Script Purpose	:	Handles the quest, "An Ode to Oakmyst"
+	Script Author	:	ememjr
+	Script Date		:	5/9/2017
+	Script Notes	:
+
+	Zone			:	Oakmyst Forest
+	Quest Giver		:
+	Preceded by		:	None
+	Followed by		:	None
+--]]
+
+
+function Init(Quest)
+	AddQuestStepLocation(Quest, 1, "Go to Sloshed Tree", 10, "Visit the Oakmyst location hinted of in the line \"A lonesome trunk drifting amidst the clear blue.\"", 11, 924, 2, -276)
+	AddQuestStepCompleteAction(Quest, 1, "Step1Complete")
+end
+
+function Step1Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "Visited Sloshed Tree")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I visited the Sloshed Tree.")
+
+	AddQuestStepLocation(Quest, 2, "Go to Oakmyst Falls", 10, "Visit the Oakmyst location hinted of in the line \"The life giver billows and feeds.\"", 11, 994, 0, -204)
+	AddQuestStepCompleteAction(Quest, 2, "Step2Complete")
+end
+
+function Step2Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "Visited Oakmyst Falls")
+	UpdateQuestTaskGroupDescription(Quest, 2, "I visited Oakmyst Falls.")
+
+	AddQuestStepLocation(Quest, 3, "Go to Shaded Tail Glade", 10, "Visit the Oakmyst location hinted of in the line \"Dark beauty with huddled rodent masses hangs over the trailed pass.\"", 11, 866, 11, -226)
+	AddQuestStepCompleteAction(Quest, 3, "Step3Complete")
+end
+
+function Step3Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 3, "Visited Shaded Tail Glade")
+	UpdateQuestTaskGroupDescription(Quest, 3, "I visited the Shaded Tail Glade")
+
+	AddQuestStepLocation(Quest, 4, "Go to Fay Overlook", 10, "Visit the Oakmyst location hinted of in the line \"A perch above the trees to gaze down upon the shimmering fay.\"", 11, 853, 13, -314)
+	AddQuestStepCompleteAction(Quest, 4, "Step4Complete")
+end
+
+function Step4Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 4, "Visited Fay Overlook")
+	UpdateQuestTaskGroupDescription(Quest, 4, "I visited the Fay Overlook.")
+
+	AddQuestStepLocation(Quest, 5, "Go to Teardrop Cave", 10, "Visit the Oakmyst location hinted of in the line \"A place of secluded beauty, flowering an isolated teardrop.\"", 11, 935, 12, -172 )
+	AddQuestStepCompleteAction(Quest, 5, "QuestComplete")
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	-- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around
+	UpdateQuestStepDescription(Quest, 5, "Visited Teardrop Cave")
+	UpdateQuestTaskGroupDescription(Quest, 5, "I visited Teardrop Cave.")
+
+	UpdateQuestDescription(Quest, "I visited all the points of interests hinted at within the poem called \"An Ode to Oakmyst\".")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1Complete(Quest, QuestGiver, Player)
+	elseif Step == 2 then
+		Step2Complete(Quest, QuestGiver, Player)
+	elseif Step == 3 then
+		Step3Complete(Quest, QuestGiver, Player)
+	elseif Step == 4 then
+		Step4Complete(Quest, QuestGiver, Player)
+	elseif Step == 5 then
+		QuestComplete(Quest, QuestGiver, Player)
+	end
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	-- Add dialog here for when the quest is accepted
+end
+
+function Declined(Quest, QuestGiver, Player)
+	-- Add dialog here for when the quest is declined
+end

+ 69 - 0
server/Quests/Oakmyst/booze_in_the_drink.lua

@@ -0,0 +1,69 @@
+--[[
+	Script Name	: Quests/Oakmyst/booze_in_the_drink.lua
+	Script Purpose	: Handles the quest, "Booze in the Drink"
+	Script Author	: Scatman
+	Script Date	: 2008.09.19
+	
+	Zone       : Oakmyst Forest
+	Quest Giver: Marv Boilfist
+	Preceded by: None
+	Followed by: None
+--]]
+
+
+function Init(Quest)
+	-- a keg of booze
+	AddQuestStepObtainItem(Quest, 1, "I need to rescue the drowning booze.", 8, 100, "Marv Boilfist has lost a large amount of booze off the docks in Oakmyst Forest. He has asked that I help retrieve it.", 2285, 1950) 
+	AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_RescuedBooze")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	 FaceTarget(QuestGiver, Player)
+	 conversation = CreateConversation()
+	 
+	 AddConversationOption(conversation, "I'll be back.")
+	 StartConversation(conversation, QuestGiver, Player, "Glad to hear it!")
+end
+
+function Declined(Quest, QuestGiver, Player)
+end
+
+function Step1_Complete_RescuedBooze(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have rescued the booze from the water.")
+
+	AddQuestStepChat(Quest, 2, "I need to bring the booze back to Marv Boilfist.", 1, "Marv Boilfist has lost a large amount of booze off the docks in Oakmyst Forest. He has asked that I help retrieve it.", 0, 1950025) 
+	AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_SpokeWithMarv")
+end
+
+function Step2_Complete_SpokeWithMarv(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I have given Marv his booze.")
+	
+	-- a keg of booze
+	while HasItem(Player, 1950) do
+		RemoveItem(Player, 1950)
+	end
+
+	AddQuestStepChat(Quest, 3, "I need to tell Lieutenant Charlin of the Blackburrow Stout I found.", 1, "Marv Boilfist has lost a large amount of booze off the docks in Oakmyst Forest. He has asked that I help retrieve it.", 0, 1950008) 
+	AddQuestStepCompleteAction(Quest, 3, "Quest_Complete")
+end
+
+function Quest_Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 3, "I have spoken with Lieutenant Charlin.")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I have found Marv's booze as well as some Blackburrow Stout.")
+	
+	-- blackburrow stout
+	while HasItem(Player, 3774) do
+		RemoveItem(Player, 3774)
+	end
+	
+	UpdateQuestDescription(Quest, "I have found Marv's kegs for him. One keg I brought back wasn't one of Marv's, but was a keg of Blackburrow Stout. I reported this to the Qeynos Guard at Marv's suggestion.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1_Complete_RescuedBooze(Quest, QuestGiver, Player)
+	elseif Step == 2 then
+		Step2_Complete_SpokeWithMarv(Quest, QuestGiver, Player)
+	end
+end

+ 61 - 0
server/Quests/Oakmyst/cause_for_investigation.lua

@@ -0,0 +1,61 @@
+--[[
+	Script Name	: Quests/Oakmyst/cause_for_investigation.lua
+	Script Purpose	: Handles the quest, "Cause for Investigation"
+	Script Author	: Scatman
+	Script Date	: 2009.10.07
+
+	Zone       : Oakmyst Forest
+	Quest Giver: Lieutenant Charlin
+	Preceded by: Natural Causes? (natural_causes.lua)
+	Followed by: A Citizen's Request (a_citizens_request.lua)
+--]]
+
+
+function Init(Quest)
+	-- unearthed soil
+	 Say(NPC, "This is me talking INit")
+	AddQuestStepObtainItem(Quest, 1,  "Lieutenant Charlin would like me to collect soil samples from all around Oakmyst Forest.", 5, 100,  "Charlin has asked that I collect soil samples from the dirt piles that are popping up all around Oakmyst Forest.", 10, 15098)
+	AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_GotSoil")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	FaceTarget(QuestGiver, Player)
+	conversation = CreateConversation()
+	Say(QuestGiver, "This is me talking try to set spawn to acive")
+	PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin008a.mp3", "", "", 717032559, 738942880, Player)
+
+	AddConversationOption(conversation, "You're welcome.")
+	StartConversation(conversation, QuestGiver, Player, "It may be nothing, but it may help us. Thanks for doing this.")
+
+end
+
+function Declined(Quest, QuestGiver, Player)
+
+end
+
+
+function Step1_Complete_GotSoil(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have collected some soil samples for Lieutenant Charlin.")
+
+	AddQuestStepChat(Quest, 2, "I need to bring this soil to Lieutenant Charlin.", 1, "Charlin has asked that I collect soil samples from the dirt piles that are popping up all around Oakmyst Forest.", 0, 1950008)
+	AddQuestStepCompleteAction(Quest, 2, "QuestComplete")
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I have spoken with Lieutenant Charlin.")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the soil for Charlin.")
+
+	-- remove unearthed soil
+	while HasItem(Player, 15098) do
+		RemoveItem(Player, 15098)
+	end
+
+	UpdateQuestDescription(Quest, "I have gathered the soil samples for Charlin. He hopes something will turn up from the tests.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1_Complete_GotSoil(Quest, QuestGiver, Player)
+	end
+end

+ 84 - 0
server/Quests/Oakmyst/clean_up.lua

@@ -0,0 +1,84 @@
+--[[
+	Script Name	: Quests/Oakmyst/clean_up.lua
+	Script Purpose	: Handles the quest, "Clean Up"
+	Script Author	: Scatman
+	Script Date	: 2009.10.08
+	
+	Zone       : Oakmyst Forest
+	Quest Giver: Lieutenant Charlin
+	Preceded by: An Important Meeting (an_important_meeting.lua)
+	Followed by: Reinforcements (reinforcements.lua)
+	Modified   : 5/6/2020
+	      by   : Ememjr
+	    Notes  : updated spawn ID's and quest id's
+--]]
+
+
+function Init(Quest)
+	AddQuestStepKill(Quest, 1, "I need to kill Lieutenant Gnar'Sok. I can find him hiding in an alcove just northwest of The Western Falls.", 1, 100, "I need to take out the remaining gnoll lieutenants.", 1220, 1950066)
+	AddQuestStepKill(Quest, 2, "I need to kill Lieutenant Chorsun. The path west from Lieutenant Charlin leads to him if I turn north before passing under the bridge.", 1, 100, "I need to take out the remaining gnoll lieutenants.", 1220, 1950038)
+	AddQuestStepKill(Quest, 3, "I need to kill Lieutenant Scyn. He is hiding on a rocky hill southeast of Clearwater Pond.", 1, 100, "I need to take out the remaining gnoll lieutenants.", 1220, 1950067)
+	AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledGnarSok")
+	AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_KilledChorsun")
+	AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_KilledScyn")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	FaceTarget(QuestGiver, Player)
+	conversation = CreateConversation()
+
+	PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin024b.mp3", "", "", 2171842973, 3442277052, Player)
+	AddConversationOption(conversation, "Thank you.")
+	StartConversation(conversation, QuestGiver, Player, "Taking them out will be a huge victory for us here, good luck.")
+end
+
+function Declined(Quest, QuestGiver, Player)
+end
+
+function Step1_Complete_KilledGnarSok(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have slain Lieutenant Gnar'Sok.")
+
+	if QuestIsComplete(Player, 211) then
+		Multiple_Steps_Complete(Quest, QuestGiver, Player)
+	end
+end
+function Step2_Complete_KilledChorsun(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I have slain Lieutenant Chorsun.")
+
+	if QuestIsComplete(Player, 211) then
+		Multiple_Steps_Complete(Quest, QuestGiver, Player)
+	end
+end
+
+function Step3_Complete_KilledScyn(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 3, "I have slain Lieutenant Scyn.")
+
+	if QuestIsComplete(Player, 211) then
+		Multiple_Steps_Complete(Quest, QuestGiver, Player)
+	end
+end
+
+function Multiple_Steps_Complete(Quest, QuestGiver, Player)
+	UpdateQuestTaskGroupDescription(Quest, 1, "I have slain the three gnoll lieutenants.")
+
+	AddQuestStepChat(Quest, 4, "I need to return to Lieutenant Charlin.", 1, "I need to bring the news of the slain lieutenants back to Lieutenant Charlin.", 0, 1950008) 
+	AddQuestStepCompleteAction(Quest, 4, "QuestComplete")
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 4, "I have spoken with Lieutenant Charlin.")
+	UpdateQuestTaskGroupDescription(Quest, 2, "I have spoken with Lieutenant Charlin.")
+	
+	UpdateQuestDescription(Quest, "I have slain all three of the gnoll lieutenants. With their deaths the Oakmyst Forest should be free of gnollish corruption for some time.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1_Complete_KilledGnarSok(Quest, QuestGiver, Player)
+	elseif Step == 2 then
+		Step2_Complete_KilledChorsun(Quest, QuestGiver, Player)
+	elseif Step == 3 then
+		Step3_Complete_KilledScyn(Quest, QuestGiver, Player)
+	end
+end

+ 49 - 0
server/Quests/Oakmyst/destroy_the_corruption.lua

@@ -0,0 +1,49 @@
+--[[
+	Script Name	: Quests/Oakmyst/destroy_the_corruption.lua
+	Script Purpose	: Handles the quest, "Destroy the Corruption"
+	Script Author	: Scatman
+	Script Date	: 2009.05.09
+	
+	Zone       : Oakmyst Forest
+	Quest Giver: Scholar Neola
+	Preceded by: Judgement of the Dryads (judgement_of_the_dryads.lua)
+	Followed by: None
+--]]
+
+
+function Init(Quest)
+	AddQuestStepKill(Quest, 1, "Find and defeat Rotweed.", 1, 100, "I must slay Rotweed. This being can be found in the Teardrop Cave in Oakmyst Forest.", 611, 1950204)
+	AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledRotweed")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	FaceTarget(QuestGiver, Player)
+	conversation = CreateConversation()
+	
+	PlayFlavor(QuestGiver, "voiceover/english/empress_anassa/qey_adv01_oakmyst/empressanassa002.mp3", "", "", 3988531876, 1061259431, Player)
+	AddConversationOption(conversation, "What is Rotweed?", "WhatIsRotweed")
+	AddConversationOption(conversation, "I will battle this Rotweed and return victorious.")
+	StartConversation(conversation, QuestGiver, Player, "The evil calls itself Rotweed and lurks in the darkness of Teardrop Cave. It buries itself in the cave walls and exudes corruption upon this woodland. ")
+end
+
+function Declined(Quest, QuestGiver, Player)
+end
+
+function Step1_Complete_KilledRotweed(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have found and defeated Rotweed .")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I have slain the many creatures that made up Rotweed the plant fiend.")
+
+	AddQuestStepChat(Quest, 2, "Speak to Empress Anassa.", 1, "I must return to speak to Empress Anassa in Oakmyst Forest.", 0, 1950078) 
+	AddQuestStepCompleteAction(Quest, 2, "QuestComplete")
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	UpdateQuestDescription(Quest, "I encountered and defeated the twisted plant fiend Rotweed. Empress Anassa of the Oakmyst dryads was very appreciative.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1_Complete_KilledRotweed(Quest, QuestGiver, Player)
+	end
+end

+ 32 - 0
server/Quests/Oakmyst/druids_legacy.lua

@@ -0,0 +1,32 @@
+--[[
+    Script Name    : Quests/Oakmyst/druids_legacy.lua
+    Script Author  : Jabantiz
+    Script Date    : 2017.12.30 05:12:17
+    Script Purpose : 
+
+        Zone       : Oakmyst
+        Quest Giver: 
+        Preceded by: None
+        Followed by: 
+--]]
+
+function Init(Quest)
+
+end
+
+function Accepted(Quest, QuestGiver, Player)
+
+end
+
+function Declined(Quest, QuestGiver, Player)
+
+end
+
+function quest_complete(Quest, QuestGiver, Player)
+
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+
+end
+

+ 69 - 0
server/Quests/Oakmyst/far_seas_requisition_okf050.lua

@@ -0,0 +1,69 @@
+--[[
+	Script Name		:	Quests/Oakmyst/far_seas_requisition_okf050.lua
+	Script Purpose	:	Handles the quest, "Far Seas Requisition #OKF050"
+	Script Author	:	ememjr
+	Script Date		:	5/9/2017
+	Script Notes	:
+
+	Zone			:	Oakmyst Forest
+	Quest Giver		:
+	Preceded by		:	None
+	Followed by		:	None
+--]]
+
+
+function Init(Quest)
+	AddQuestStepKill(Quest, 1, "I must gather some mystail yearling tails.", 4, 100, "To fill the requisition, I must hunt down the creatures in Oakmyst Forest, reachable by any number of mariner bells in the City of Qeynos.", 172, 1950009)
+	AddQuestStepCompleteAction(Quest, 1, "Step1Complete")
+end
+
+function Step1Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have gathered some mystail yearling tails.")
+
+	AddQuestStepKill(Quest, 2, "I must gather tongues from clearwater frogs.", 3, 100, "To fill the requisition, I must hunt down the creatures in Oakmyst Forest, reachable by any number of mariner bells in the City of Qeynos.", 1104, 1950020)
+	AddQuestStepCompleteAction(Quest, 2, "Step2Complete")
+end
+
+function Step2Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I have gathered tongues from clearwater frogs.")
+
+	AddQuestStepKill(Quest, 3, "I must get the hide from one Oakmyst great bear.", 1, 100, "To fill the requisition, I must hunt down the creatures in Oakmyst Forest, reachable by any number of mariner bells in the City of Qeynos.", 127, 1950023)
+	AddQuestStepCompleteAction(Quest, 3, "Step3Complete")
+end
+
+function Step3Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 3, "I have collected the hide of an Oakmyst great bear.")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I have hunted down all the resources to fill the requisition.")
+
+	AddQuestStepChat(Quest, 4, "I need to talk to Diggin Diggs", 1, "I must go to the province district of Qeynos to seek out the client for this order.", 10, 6600085)
+	AddQuestStepCompleteAction(Quest, 4, "QuestComplete")
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	-- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around
+	UpdateQuestStepDescription(Quest, 4, "I talked to Diggin Diggs.")
+	UpdateQuestTaskGroupDescription(Quest, 2, "I have delivered the goods to Diggin Diggs.")
+
+	UpdateQuestDescription(Quest, "I filled the Far Seas Requisition and delivered the goods to the client in the Qeynos Province District. I have been paid in full for this work, but the order was late.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1Complete(Quest, QuestGiver, Player)
+	elseif Step == 2 then
+		Step2Complete(Quest, QuestGiver, Player)
+	elseif Step == 3 then
+		Step3Complete(Quest, QuestGiver, Player)
+	elseif Step == 4 then
+		QuestComplete(Quest, QuestGiver, Player)
+	end
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	-- Add dialog here for when the quest is accepted
+end
+
+function Declined(Quest, QuestGiver, Player)
+	-- Add dialog here for when the quest is declined
+end

+ 69 - 0
server/Quests/Oakmyst/far_seas_requisition_okf063.lua

@@ -0,0 +1,69 @@
+--[[
+	Script Name		:	Quests/Oakmyst/far_seas_requisition_okf063.lua
+	Script Purpose	:	Handles the quest, "Far Seas Requisition #OKF063"
+	Script Author	:	ememjr
+	Script Date		:	5/9/2017
+	Script Notes	:
+
+	Zone			:	Oakmyst Forest
+	Quest Giver		:
+	Preceded by		:	None
+	Followed by		:	None
+--]]
+
+
+function Init(Quest)
+	AddQuestStepKill(Quest, 1, "I must collect five Oakmyst fawn pelts.", 5, 100, "To fill the requisition, I must hunt down the creatures in Oakmyst Forest, reachable by any number of mariner bells in the City of Qeynos.", 138, 1950001)
+	AddQuestStepCompleteAction(Quest, 1, "Step1Complete")
+end
+
+function Step1Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have collected five Oakmyst fawn pelts.")
+
+	AddQuestStepKill(Quest, 2, "I must collect five badger cub pelts.", 5, 100, "To fill the requisition, I must hunt down the creatures in Oakmyst Forest, reachable by any number of mariner bells in the City of Qeynos.", 129, 1950035)
+	AddQuestStepCompleteAction(Quest, 2, "Step2Complete")
+end
+
+function Step2Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I have collected five badger cub pelts.")
+
+	AddQuestStepKill(Quest, 3, "I must collect a single bear cub pelt.", 1, 100, "To fill the requisition, I must hunt down the creatures in Oakmyst Forest, reachable by any number of mariner bells in the City of Qeynos.", 128, 1950000)
+	AddQuestStepCompleteAction(Quest, 3, "Step3Complete")
+end
+
+function Step3Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 3, "I have collected a single bear cub pelt.")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I have collected all of the items listed in the requisition.")
+
+	AddQuestStepChat(Quest, 4, "I need to talk to Diggin Diggs", 1, "I must go to the province district of Qeynos to seek out the client for this order.", 10, 6600085)
+	AddQuestStepCompleteAction(Quest, 4, "QuestComplete")
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	-- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around
+	UpdateQuestStepDescription(Quest, 4, "I talked to Diggin Diggs.")
+	UpdateQuestTaskGroupDescription(Quest, 2, "I have delivered the goods to Diggin Diggs.")
+
+	UpdateQuestDescription(Quest, "I filled the Far Seas Requisition and delivered the goods to the client in the Qeynos Province District. I have been paid in full for this work, but the order was late.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1Complete(Quest, QuestGiver, Player)
+	elseif Step == 2 then
+		Step2Complete(Quest, QuestGiver, Player)
+	elseif Step == 3 then
+		Step3Complete(Quest, QuestGiver, Player)
+	elseif Step == 4 then
+		QuestComplete(Quest, QuestGiver, Player)
+	end
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	-- Add dialog here for when the quest is accepted
+end
+
+function Declined(Quest, QuestGiver, Player)
+	-- Add dialog here for when the quest is declined
+end

+ 62 - 0
server/Quests/Oakmyst/feed_the_sapling.lua

@@ -0,0 +1,62 @@
+--[[
+	Script Name	: Quests/Oakmyst/feed_the_sapling.lua
+	Script Purpose	: Handles the quest, "Feed the Sapling"
+	Script Author	: Scatman
+	Script Date	: 2009.10.08
+	
+	Zone       : Oakmyst Forest
+	Quest Giver: Scholar Neola
+	Preceded by: None
+	Followed by: Judgement of the Dryads (judgement_of_the_dryads.lua)
+--]]
+
+
+function Init(Quest)
+	AddQuestStep(Quest, 1, "Search the alchemy shelves.", 1, 100, "I must search for the alchemist shop in Nettleville to attain the magical plant nutrient.", 182)
+	AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_FoundNutrients")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	FaceTarget(QuestGiver, Player)
+	conversation = CreateConversation()
+	
+	PlayFlavor(QuestGiver, "voiceover/english/scholar_neola/qey_adv01_oakmyst/scholarneola002.mp3", "", "", 4033827219, 3906200141, Player)
+	AddConversationOption(conversation, "I will go and find this arcane nutrient.")
+	StartConversation(conversation, QuestGiver, Player, "I cannot leave this woodland, but you can. Within the villages of Qeynos an alchemist has created a powerful nutrient that will aid the sapling. Retrieve this prized item and feed it to the growing tree. ")
+end
+
+function Declined(Quest, QuestGiver, Player)
+end
+
+function Step1_Complete_FoundNutrients(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I searched the alchemy shelves.")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I found Smitelin's Excel-o-gro in Nettleville.")
+	UpdateQuestZone(Quest, "Oakmyst Forest")
+
+	AddQuestStepChat(Quest, 2, "Find the treant sapling.", 1, "I must sprinkle Smitelin's Excel-o-gro into the treant sapling of Oakmyst Forest.", 0, 1950068) 
+	AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_SpokeToSapling")
+end
+
+function Step2_Complete_SpokeToSapling(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I poured the nutrient on the treant sapling.")
+	UpdateQuestTaskGroupDescription(Quest, 2, "I sprinkled the magical nutrient, Smitelin's Excel-o-gro onto the treant sapling.")
+
+	AddQuestStepChat(Quest, 3, "Speak to Scholar Neola.", 1, "I should inform Scholar Neola that I saved the treant sapling.", 0, 1950079) 
+	AddQuestStepCompleteAction(Quest, 3, "QuestComplete")
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 3, "I spoke to Scholar Neola.")
+	UpdateQuestTaskGroupDescription(Quest, 3, "I spoke to Scholar Neola and informed her the sapling was fed.")
+	
+	UpdateQuestDescription(Quest, "I found a magical plant food called Smitelin's Excel-o-gro and fed it to the treant sapling in Oakmyst Forest.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1_Complete_FoundNutrients(Quest, QuestGiver, Player)
+	elseif Step == 2 then
+		Step2_Complete_SpokeToSapling(Quest, QuestGiver, Player)
+	end
+end

+ 53 - 0
server/Quests/Oakmyst/glowmyst_juice.lua

@@ -0,0 +1,53 @@
+--[[
+	Script Name	: Quests/Oakmyst/glowmyst_juice.lua
+	Script Purpose	: Handles the quest, "Glowmyst Juice"
+	Script Author	: Scatman
+	Script Date	: 2009.10.08	
+	
+	Zone       : Oakmyst Forest
+	Quest Giver: Toppa Doppster
+	Preceded by: None
+	Followed by: None
+	Modified by: Ememjr
+	      Date : 5/7/2020
+	     Notes : Updated NPC ID
+--]]
+
+
+function Init(Quest)
+	AddQuestStepKill(Quest, 1, "I need ten glowmyst beetle fluid sacs for Toppa.", 10, 100, "Toppa would like me to collect some glowmyst juice for her friends.", 146, 1950002) 
+	AddQuestStepCompleteAction(Quest, 1, "step1_complete_killedBeetles")
+
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	 FaceTarget(QuestGiver, Player)
+	 conversation = CreateConversation()
+	 
+	 AddConversationOption(conversation, "You're welcome.")
+	 StartConversation(conversation, QuestGiver, Player, "Great! Thank you!")
+end
+
+function Declined(Quest, QuestGiver, Player)
+end
+
+function step1_complete_killedBeetles(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have collected the fluid sacs.")
+	
+	AddQuestStepChat(Quest, 2, "I need to give these fluid sacs to Toppa", 1, "Toppa would like me to collect some glowmyst juice for her friends.", 146, 1950005) 
+	AddQuestStepCompleteAction(Quest, 2, "Quest_Complete")
+end
+
+function Quest_Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I have given Toppa the glowmyst juice.")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I have collected the fluid sacs.")
+
+	UpdateQuestDescription(Quest, "I have given Toppa the glowmyst juice she wanted. She was very thankful.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+	   step1_complete_killedBeetles(Quest, QuestGiver, Player)
+	end
+end

+ 80 - 0
server/Quests/Oakmyst/if_i_had_a_hammer.lua

@@ -0,0 +1,80 @@
+--[[
+    Script Name    : Quests/Oakmyst/if_i_had_a_hammer.lua
+    Script Author  : Ememjr
+    Script Date    : 2020.05.08 03:05:50
+    Script Purpose : 
+
+        Zone       : Oakmyst
+        Quest Giver: 
+        Preceded by: None
+        Followed by: 
+--]]
+
+-- reward is "Handbook of the Ironforge Exchange", 722 tradeskill xp, +250 The Ironforge Exchange faction and 6-8 silver
+
+function Init(Quest)
+    SetQuestFeatherColor(Quest, 2)
+	AddQuestStepObtainItem(Quest, 1, "I need to get the recipe from the bench beside Henk.", 1, 100, "Henk the mender has instructed me to get what I'll need for crafting. There is a recipe on the table, sack of coal on the ground, and I'll need some of the tin and lead clusters I harvested earlier.", 0, 32122)
+	AddQuestStepCompleteAction(Quest, 1, "GotRecipe")
+end
+
+function GotRecipe(Quest, QuestGiver, Player)
+    UpdateQuestStepDescription(Quest, 1, "I picked up the recipe, and should examine it in my inventory to scribe it.")
+	AddQuestStepObtainItem(Quest, 2, "I need to pick up some coal from the sack.", 1, 100, "Henk the mender has instructed me to get what I'll need for crafting. There is a recipe on the table, sack of coal on the ground, and I'll need some of the tin and lead clusters I harvested earlier.", 0, 5771)
+    AddQuestStepCompleteAction(Quest, 2, "GotCoal")
+end
+
+function GotCoal(Quest, QuestGiver, Player)
+    UpdateQuestTaskGroupDescription(Quest, 1, "I obtained the supplies I will need.")
+	AddQuestStepObtainItem(Quest, 3, "I should ensure I have a tin and lead cluster in my bags, then use the mender's anvil to craft.", 1, 100, "I should scribe the recipe book, and ensure I have a lead and tin cluster in my bags. Then click on the anvil in front of the mender to use it. Select the lucky wolf paw recipe and then click 'Create', then 'Begin'.", 0, 163306)
+	AddQuestStepCompleteAction(Quest, 3, "CraftedPaw")
+end
+
+function CraftedPaw(Quest, QuestGiver, Player)
+    UpdateQuestTaskGroupDescription(Quest, 2, "I created a Lucky Wolf Paw charm.")
+    AddQuestStepChat(Quest, 4, "I should return to Henk once again.", 1, "Henk the mender is in Oakmyst Forest nar the tunnel to the docks. I should let him know that I made the lucky wolf paw charm.", 0, 1950127)
+    AddQuestStepCompleteAction(Quest, 4, "TalkedHenk")
+end
+
+function TalkedHenk(Quest, QuestGiver, Player)
+    UpdateQuestTaskGroupDescription(Quest, 3, "Henk has suggested that I speak to the tradeskill tutor in North Qeynos to learn more about crafting.")
+    AddQuestStepChat(Quest, 5, "I should find the tradeskill tutor North Qeynos to learn more about crafting.", 1, "In Qeynos, the tradeskill tutor can be found in the Ironforge Exchange building, near the bank in North Qeynos.", 0, 4700220)
+	AddQuestStepCompleteAction(Quest, 5, "CompleteQuest")
+end
+
+
+function CompleteQuest(Quest, QuestGiver, Player)
+    GiveQuestReward(Quest, Player)
+end
+
+function Accepted(Quest, QuestGiver, Player)
+    SendPopUpMessage(Player, "This quest cannot be fully completed yet. Do not report as bug.", 255, 0, 0)
+    FaceTarget(QuestGiver, Player)
+	conversation = CreateConversation()
+
+	PlayFlavor(QuestGiver, "", "", "", 0, 0, Player)
+	AddConversationOption(conversation, "I'll get those items now.")
+	StartConversation(conversation, QuestGiver, Player, "Pick up a copy of my lucky charm recipe over there beside me, and scribe it into your recipe book.  Then grab some coal from the sack.  You'll also need one of the tin clusters and lead clusters that you harvested earlier, and make sure you have them with you in your bags.")
+	AddSpawnAccess(GetSpawn(Player, 4701805), Player)
+	AddSpawnAccess(GetSpawn(Player, 4701804), Player)
+end
+
+function Declined(Quest, QuestGiver, Player)
+end
+
+function Deleted(Quest, QuestGiver, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+    if Step == 1 then
+	    GotRecipe(Quest, QuestGiver, Player)
+	elseif Step == 2 then
+	    GotCoal(Quest, QuestGiver, Player)
+	elseif Step == 3 then
+	    CraftedPaw(Quest, QuestGiver, Player)
+	elseif Step == 4 then
+	    TalkedBull(Quest, QuestGiver, Player)
+	elseif Step == 5 then
+	    CompleteQuest(Quest, QuestGiver, Player)
+	end
+end

+ 51 - 0
server/Quests/Oakmyst/judgement_of_the_dryads.lua

@@ -0,0 +1,51 @@
+--[[
+	Script Name	: Quests/Oakmyst/judgement_of_the_dryads.lua
+	Script Purpose	: Handles the quest, "Judgement of the Dryads"
+	Script Author	: Scatman
+	Script Date	: 2009.10.08
+	
+	Zone       : Oakmyst Forest
+	Quest Giver: Scholar Neola
+	Preceded by: Feed the Sapling (feed_the_sapling.lua)
+	Followed by: Destroy the Corruption (destroy_the_corruption.lua)
+--]]
+
+
+function Init(Quest)
+	AddQuestStepKill(Quest, 1, "Slay five Sunshimmer Sprites.", 5, 100, "I must hunt down and slay five Sunshimmer Sprites in Oakmyst Forest.", 611, 1950100, 1950050, 1950072, 1950099, 1950053, 1950069, 1950052, 1950098, 1950049, 1950071, 1950051, 1950101, 1950070)
+	AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KillSprites")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	FaceTarget(QuestGiver, Player)
+	conversation = CreateConversation()
+	
+	PlayFlavor(QuestGiver, "voiceover/english/judge_eunomia/qey_adv01_oakmyst/judgeeunomia002.mp3", "", "", 2678200574, 3115032598, Player)
+	AddConversationOption(conversation, "I shall do my best to lower their numbers.")
+	StartConversation(conversation, QuestGiver, Player, "They're corrupted fayfolke--bright with beauty but twisted and corrupted to the core. They're called the sunshimmer sprites.  You must destroy them.")
+end
+
+function Declined(Quest, QuestGiver, Player)
+end
+
+function Step1_Complete_KillSprites(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have slain five Sunshimmer Sprites.")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I have slain five Sunshimmer Sprites in Oakmyst Forest.")
+
+	AddQuestStepChat(Quest, 2, "Speak to Judge Eunomia.", 1, "I must speak to Judge Eunomia in Oakmyst Forest.", 0, 1950077) 
+	AddQuestStepCompleteAction(Quest, 2, "QuestComplete")
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I spoke to Judge Eunomia.")
+	UpdateQuestTaskGroupDescription(Quest, 2, "I spoke to Judge Eunomia in Oakmyst Forest.")
+	
+	UpdateQuestDescription(Quest, "I have served Judge Eunomia and the dryads of Oakmyst by lowering the population of the Sunshimmer Sprites, a corrupted form of fairies that began to infest the forest.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1_Complete_KillSprites(Quest, QuestGiver, Player)
+	end
+end

+ 81 - 0
server/Quests/Oakmyst/natural_causes.lua

@@ -0,0 +1,81 @@
+--[[
+	Script Name	: Quests/Oakmyst/natural_causes.lua
+	Script Purpose	: Handles the quest, "Natural Causes?"
+	Script Author	: Scatman
+	Script Date	: 2009.05.03
+	modified by : Ememjr
+	modified date: 2017.04.21
+
+	Zone       : Oakmyst Forest
+	Quest Giver: Lieutenant Charlin
+	Preceded by: None
+	Followed by: Cause for Investigation (cause_for_investigation.lua)
+--]]
+
+
+function Init(Quest)
+	AddQuestStepKill(Quest, 1, "I need to collect a poison gland from the frogs of Oakmyst Forest, commonly found near The Western Falls.", 1, 25, "Lieutenant Charlin has asked that I collect poison from some of the creatures local to Oakmyst Forest.", 160, 1950020)
+	AddQuestStepKill(Quest, 2, "I need to collect a poison sac from the spiders found near The Western Falls.", 1, 25, "Lieutenant Charlin has asked that I collect poison from some of the creatures local to Oakmyst Forest.", 158, 1950014,1950015)
+	AddQuestStepKill(Quest, 3, "I need to collect a poison sac from any of the mystail rats in Oakmyst Forest.", 1, 25, "Lieutenant Charlin has asked that I collect poison from some of the creatures local to Oakmyst Forest.", 112, 1950009,1950017,1950010,1950016)
+	AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_GotPoison")
+	AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_GotPoison")
+	AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_GotPoison")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	FaceTarget(QuestGiver, Player)
+	conversation = CreateConversation()
+
+	PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin005a.mp3", "", "", 3816458075, 1868191399, Player)
+	AddConversationOption(conversation, "I will be.")
+	StartConversation(conversation, QuestGiver, Player, "Be careful out there.")
+end
+
+function Declined(Quest, QuestGiver, Player)
+end
+
+function Step1_Complete_GotPoison(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have collected a frog poison gland.")
+
+	if QuestIsComplete(Player, 207) then
+		MultipleStepComplete(Quest, QuestGiver, Player)
+	end
+end
+
+function Step2_Complete_GotPoison(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I have found a poison sac from a spider in Oakmyst Forest.")
+
+	if QuestIsComplete(Player, 207) then
+		MultipleStepComplete(Quest, QuestGiver, Player)
+	end
+end
+
+function Step3_Complete_GotPoison(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 3, "I have collected a poison sac from a mystail rat in Oakmyst Forest.")
+
+	if QuestIsComplete(Player, 207) then
+		MultipleStepComplete(Quest, QuestGiver, Player)
+	end
+end
+
+function MultipleStepComplete(Quest, QuestGiver, Player)
+	UpdateQuestTaskGroupDescription(Quest, 1, "I have collected some poison for Lieutenant Charlin.")
+	AddQuestStepChat(Quest, 4, "I need to speak with Lieutenant Charlin near the gates to Castleview Hamlet.", 1, "I need to return to Lieutenant Charlin and give him the poison that I have collected.", 0, 1950008)
+	AddQuestStepCompleteAction(Quest, 4, "QuestComplete")
+end
+
+
+function QuestComplete(Quest, QuestGiver, Player)
+	UpdateQuestDescription(Quest, "I have collected the poisons that Charlin requested. He will send the poisons back to town to have tests run on them.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1_Complete_GotPoison(Quest, QuestGiver, Player)
+	elseif Step == 2 then
+		Step2_Complete_GotPoison(Quest, QuestGiver, Player)
+	elseif Step == 3 then
+		Step3_Complete_GotPoison(Quest, QuestGiver, Player)
+	end
+end

+ 51 - 0
server/Quests/Oakmyst/proof_of_poachers.lua

@@ -0,0 +1,51 @@
+--[[
+	Script Name	: Quests/Oakmyst/proof_of_poachers.lua
+	Script Purpose	: Handles the quest, "Proof of Poachers"
+	Script Author	: Scatman
+	Script Date	: 2009.10.09
+	
+	Zone       : Oakmyst Forest
+	Quest Giver: Steward Tredo
+	Preceded by: None
+	Followed by: None
+--]]
+
+
+function Init(Quest)
+	AddQuestStepKill(Quest, 1, "Slay two shady furriers", 2, 100, "Slay two shady furriers. They can be found at night lurking the Oakmyst Forest.", 2468, 1950006)
+	AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledPoachers")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	FaceTarget(QuestGiver, Player)
+	conversation = CreateConversation()
+	
+	PlayFlavor(QuestGiver, "voiceover/english/optional1/steward_tredo/qey_adv01_oakmyst/stewardtredo001.mp3", "", "", 3490306942, 2253910242, Player)
+	AddConversationOption(conversation, "I'll keep my eyes out at night.")
+	StartConversation(conversation, QuestGiver, Player, "A new defender of Oakmyst? Grand! Tracker Galera seeks proof of the poachers' existence. They say they lurk the shadows at night. Bring her proof, and I'm sure she'll be grateful.")
+end
+
+function Declined(Quest, QuestGiver, Player)
+end
+
+function Step1_Complete_KilledPoachers(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have collected a frog poison gland.")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I slew two shady furriers and retrieved poached pelts as proof of their invasion of the woods.")
+
+	AddQuestStepChat(Quest, 2, "Speak to Tracker Galera.", 1, "Speak to Tracker Galera, a wood elf that walks the trails of Oakmyst Forest.", 0, 1950011) 
+	AddQuestStepCompleteAction(Quest, 2, "QuestComplete")
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I have spoken to Tracker Galera.")
+	UpdateQuestTaskGroupDescription(Quest, 2, "I spoke with Tracker Galera and gave her poached pelts as proof of the poaching activity going on in the forest.")
+	
+	UpdateQuestDescription(Quest, "I hunted down the shady furriers and retrieved poached pelts of the Oakmyst creatures. I gave the pelts to Tracker Galera as proof of the poacher's activity within the woods.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1_Complete_KilledPoachers(Quest, QuestGiver, Player)
+	end
+end

+ 93 - 0
server/Quests/Oakmyst/regrowth.lua

@@ -0,0 +1,93 @@
+--[[
+	Script Name	: Quests/Castleview/regrowth.lua
+	Script Purpose	: Handles the quest, "Regrowth"
+	Script Author	: Scatman
+	Script Date	: 2009.10.02
+	
+	Zone       : Oakmyst Forest
+	Quest Giver: Adalin Emerael
+	Preceded by: None
+	Followed by: None
+--]]
+
+function Init(Quest)
+	AddQuestStep(Quest, 1, "I need to cleanse the tree west of the gates to Castleview Hamlet.", 1, 100, "Adalin has asked for my help in cleansing a number of trees in the Oakmyst Forest.", 0)
+	AddQuestStep(Quest, 2, "I need to cleanse the tree east of the Western Falls, west of the first tree.", 1, 100, "Adalin has asked for my help in cleansing a number of trees in the Oakmyst Forest.", 0)
+	AddQuestStep(Quest, 3, "I need to cleanse the tree east of the entrance to the docks.", 1, 100, "Adalin has asked for my help in cleansing a number of trees in the Oakmyst Forest.", 0)
+	AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_Tree1")
+	AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_Tree2")
+	AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_Tree3")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	FaceTarget(QuestGiver, Player)
+	conversation = CreateConversation()
+	
+	-- cleansing salve
+	if not HasItem(Player, 4386, 1) then
+		SummonItem(Player, 4386, 1)
+	end
+
+	AddConversationOption(conversation, "I will, thank you.")
+	StartConversation(conversation, QuestGiver, Player, "This salve should allow you to cleanse them easily enough. May tunare be with you.")
+end
+
+function Declined(Quest, QuestGiver, Player)
+end
+
+function Step1_Complete_Tree1(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have cleansed the tree west of the gates to Castleview Hamlet.")
+	
+	if QuestIsComplete(Player, 294) then
+		TreesCleansed(Quest, QuestGiver, Player)
+	end
+end
+
+function Step2_Complete_Tree2(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I have cleansed the tree east of the Western Falls.")
+	
+	if QuestIsComplete(Player, 294) then
+		TreesCleansed(Quest, QuestGiver, Player)
+	end
+end
+
+function Step3_Complete_Tree3(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 3, "I have cleansed the tree east of the entrance to the docks.")
+	
+	if QuestIsComplete(Player, 294) then
+		TreesCleansed(Quest, QuestGiver, Player)
+	end
+end
+
+function TreesCleansed(Quest, QuestGiver, Player)
+	UpdateQuestTaskGroupDescription(Quest, 1, "I have cleansed the plants that Adalin has asked me to cleanse.")
+	
+	AddQuestStepChat(Quest, 4, "I need to return to Adalin and tell him of the gnoll attack.", 1, "I need to return to Adalin and tell him of the gnoll attack while cleansing.", 0, 1950005)
+	AddQuestStepCompleteAction(Quest, 4, "Step4_Complete_SpokeWithAdalin")
+end
+
+function Step4_Complete_SpokeWithAdalin(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 4, "I have spoken with Adalin.")
+	
+	AddQuestStepChat(Quest, 5, "I need to bring the news of the gnoll presence to Lieutenant Charlin.", 1, "I need to return to Adalin and tell him of the gnoll attack while cleansing.", 0, 1950015)
+	AddQuestStepCompleteAction(Quest, 5, "Quest_Complete")
+end
+
+function Quest_Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 5, "I have spoken with Lieutenant Charlin.")
+	UpdateQuestTaskGroupDescription(Quest, 2, "I have informed Lieutenant Charlin of the gnoll presence in Oakmyst Forest.")
+	UpdateQuestDescription(Quest, "In helping Adalin Emerael cleanse some of the trees in Oakmyst Forest I was attacked by a gnoll. With the gnoll's paw as proof Lieutenant Charlin has agreed that a possible gnoll threat needs to be looked in to.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1_Complete_Tree1(Quest, QuestGiver, Player)
+	elseif Step == 2 then
+		Step2_Complete_Tree2(Quest, QuestGiver, Player)
+	elseif Step == 3 then
+		Step3_Complete_Tree3(Quest, QuestGiver, Player)
+	elseif Step == 4 then
+		Step4_Complete_SpokeWithAdalin(Quest, QuestGiver, Player)
+	end
+end

+ 40 - 0
server/Quests/Oakmyst/reinforcements.lua

@@ -0,0 +1,40 @@
+--[[
+	Script Name	: Quests/Oakmyst/reinforcements.lua
+	Script Purpose	: Handles the quest, "Reinforcements"
+	Script Author	: Scatman
+	Script Date	: 2009.10.08
+	
+	Zone       : Oakmyst Forest
+	Quest Giver: Lieutenant Charlin
+	Preceded by: Clean Up (clean_up.lua)
+	Followed by: None
+--]]
+
+
+function Init(Quest)
+	AddQuestStepChat(Quest, 1, "I must report to Consul Bree in The Caves.", 1, "I must report to Consul Bree in The Caves to help in the defense of Qeynos.", 0, 1970010) 
+	AddQuestStepCompleteAction(Quest, 1, "QuestComplete")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	FaceTarget(QuestGiver, Player)
+	conversation = CreateConversation()
+
+	PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/lieutenant_charlin/qey_adv01_oakmyst/quests/charlin/charlin027a.mp3", "", "salute", 1196044113, 40498286, Player)
+	AddConversationOption(conversation, "Thank you.")
+	StartConversation(conversation, QuestGiver, Player, "I guess that's why they asked for you. Go, " .. GetName(Player) .. ", and be well. Thank you for all your help.")
+end
+
+function Declined(Quest, QuestGiver, Player)
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have spoken with Consul Bree.")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I have spoken with Consul Bree.")
+	
+	UpdateQuestDescription(Quest, "I have spoken with Consul Bree.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+end

+ 41 - 0
server/Quests/Oakmyst/runed_acorn.lua

@@ -0,0 +1,41 @@
+--[[
+	Script Name		:	RunedAcorn.lua
+	Script Purpose	:	Handles the quest, "Runed Acorn"
+	Script Author	:	ememjr
+	Script Date		:	5/9/2017
+	Script Notes	:
+
+	Zone			:	Oakmyst Forest
+	Quest Giver		:
+	Preceded by		:	None
+	Followed by		:	None
+--]]
+
+
+function Init(Quest)
+	AddQuestStepKill(Quest, 1, "I need to kill three corrupted dryads.", 3, 100, "Corrupted dryads often hide in dark, dank places such as water-filled caverns.", 611, 1950013, 1950070)
+	AddQuestStepCompleteAction(Quest, 1, "QuestComplete")
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	-- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around
+	UpdateQuestStepDescription(Quest, 1, "I have killed three corrupted dryads.")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I found the corrupted dryads in a secret cave by the waterfall in Oakmyst Forest.")
+
+	UpdateQuestDescription(Quest, "I have killed three corrupted dryads and released their souls to be reborn in the renewal of spring.  I am still not sure, however, as to how they came to be corrupted.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		QuestComplete(Quest, QuestGiver, Player)
+	end
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	-- Add dialog here for when the quest is accepted
+end
+
+function Declined(Quest, QuestGiver, Player)
+	-- Add dialog here for when the quest is declined
+end

+ 57 - 0
server/Quests/Oakmyst/that_cheating_gnome.lua

@@ -0,0 +1,57 @@
+--[[
+	Script Name	: Quests/Oakmyst/that_cheating_gnome.lua
+	Script Purpose	: Handles the quest, "That Cheating Gnome!"
+	Script Author	: Scatman
+	Script Date	: 2009.05.03
+	
+	Zone       : Oakmyst Forest
+	Quest Giver: Jorn Sorefoot
+	Preceded by: None
+	Followed by: <quest-to-follow>
+--]]
+
+function Init(Quest)
+	AddQuestStepKill(Quest, 1, "I need to recover Jorn's money from Fluwkowir Haggleton. Jorn last saw Fluwkowir heading west toward the docks.", 1, 100, ".", 399, 1950094) 
+	AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_GotJornsPack")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	FaceTarget(QuestGiver, Player)
+	conversation = CreateConversation()
+	
+	PlayFlavor(QuestGiver, "voiceover/english/tutorial_revamp/jorn_sorefoot/qey_adv01_oakmyst/quests/jorn/jorn005a.mp3", "", "", 1536076306, 896415484, Player)
+	AddConversationOption(conversation, "You're welcome.")
+	StartConversation(conversation, QuestGiver, Player, "Thanks for your help. I'm just about worn out from all this looking.")
+end
+
+function Declined(Quest, QuestGiver, Player)
+end
+
+function Step1_Complete_GotJornsPack(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have recovered Jorn's money.")
+	AddQuestStepChat(Quest, 2, "I need to return the money to Jorn.", 1, ".", 2165, 1950022) 
+	AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_SpokeWithJorn")
+end
+
+function Step2_Complete_SpokeWithJorn(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I have recovered Jorn's money.")
+	AddQuestStepChat(Quest, 3, "I need to give Fluwkowir's book to Lieutenant Charlin.", 1, ".", 0, 1950015) 
+	AddQuestStepCompleteAction(Quest, 3, "QuestComplete")
+end
+
+
+function QuestComplete(Quest, QuestGiver, Player)
+	-- Flukowir's Satchel
+	RemoveItem(Player, 6389)
+	
+	UpdateQuestDescription(Quest, "I found Fluwkowir. After confronting him he attacked me. On him he had a small satchel, in that satchel I found Jorn's money but also some strange notes written in Lucanic.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1_Complete_GotJornsPack(Quest, QuestGiver, Player)
+	elseif Step == 2 then
+		Step2_Complete_SpokeWithJorn(Quest, QuestGiver, Player)
+	end
+end

+ 37 - 0
server/Quests/Oakmyst/the_patchwork_tapestry.lua

@@ -0,0 +1,37 @@
+--[[
+	Script Name	: Quests/Oakmyst/the_patchwork_tapestry.lua
+	Script Purpose	: Handles the quest, "The Patchwork Tapestry"
+	Script Author	: Scatman
+	Script Date	: 2009.10.08
+	
+	Zone       : Unknown
+	Quest Giver: None
+	Preceded by: None
+	Followed by: None
+--]]
+
+
+function Init(Quest)
+	-- Fabric Patch
+	AddQuestStepObtainItem(Quest, 1, "Hunt fairies in Norrath to gain fay fabric patches to study.", 7, 100, "I must obtain more patches of fay fabric to piece together the foundation of the fairy language. I must get the fabric patches from fairies of Norrath.", 417, 6079)
+	AddQuestStepCompleteAction(Quest, 1, "Quest_Complete")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+end
+
+function Declined(Quest, QuestGiver, Player)
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have a studied a fay fabric patch.")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I have learned Fayfolk, language of the fairies.")
+	
+	-- Learn language (fayfolk)
+	
+	UpdateQuestDescription(Quest, "I pieced together patches of fay fabric to discover the foundation of two languages, Norrathian and Fay. I have used the fabric patches to learn the language of the fairies, Fayfolk.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+end

+ 80 - 0
server/Quests/PeatBog/Ambushed (2).lua

@@ -0,0 +1,80 @@
+--[[
+	Script Name		:	Ambushed.lua
+	Script Purpose	:	Handles the quest, "Ambushed"
+	Script Author	:	Shatou
+	Script Date		:	1/8/2020
+	Script Notes	:	
+
+	Zone			:	Peat Bog
+	Quest Giver		:	Lieutenant Dawson
+	Preceded by		:	Mysterious Machine
+	Followed by		:	On The Move
+--]]
+
+local LIEUTENANT_DAWSON_ID = 1980012
+local ENTITY_COMMAND_INSPECT = 61
+local AMBUSHED_QUEST_ID = 509
+
+function Init(Quest)
+	AddQuestStepSpell(Quest, 1, "I need to investigate the ambush site west of Two Logs Pond, which is south of the sewer grate.", 1, 100, "Lieutenant Dawson has asked me to investigate three ambush sites.", 11, ENTITY_COMMAND_INSPECT)
+	AddQuestStepCompleteAction(Quest, 1, "Step1Complete")
+	
+	AddQuestStepSpell(Quest, 2, "I need to investigate the ambush site in the north eastern corner of the area east of Two Logs Pond.", 1, 100, "Lieutenant Dawson has asked me to investigate three ambush sites.", 11, ENTITY_COMMAND_INSPECT)
+	AddQuestStepCompleteAction(Quest, 2, "Step2Complete")
+	
+	AddQuestStepSpell(Quest, 3, "I need to investigate the ambush site in the south end of the area east of Two Logs Pond.", 1, 100, "Lieutenant Dawson has asked me to investigate three ambush sites.", 11, ENTITY_COMMAND_INSPECT)
+	AddQuestStepCompleteAction(Quest, 3, "Step3Complete")
+end
+
+function CheckProgress(Quest, QuestGiver, Player)
+	if QuestStepIsComplete(Player, AMBUSHED_QUEST_ID, 1) and QuestStepIsComplete(Player, AMBUSHED_QUEST_ID, 2) and QuestStepIsComplete(Player, AMBUSHED_QUEST_ID, 3) then
+		UpdateQuestTaskGroupDescription(Quest, 1, "I have investigated all three ambush sites.")
+		
+		AddQuestStepChat(Quest, 4, "I need to return to Lieutenant Dawson.", 1, "I need to tell Lieutenant Dawson of what I found at one of the ambush sites.", 11, ENTITY_COMMAND_INSPECT)
+		AddQuestStepCompleteAction(Quest, 4, "QuestComplete")
+	end
+end
+
+function Step1Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have investigated the ambush site near Two Logs Pond.")
+	CheckProgress(Quest, QuestGiver, Player)
+end
+
+function Step2Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I have investigated the ambush site in the area east of Two Logs Pond.")
+	CheckProgress(Quest, QuestGiver, Player)
+end
+
+function Step3Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 3, "I have investigated the ambush site in the southern end of the area east of Two Logs Pond.")
+	CheckProgress(Quest, QuestGiver, Player)
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	-- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around
+	UpdateQuestStepDescription(Quest, 4, "I have spoken with Lieutenant Dawson.")
+	UpdateQuestTaskGroupDescription(Quest, 2, "I have spoken with Lieutenant Dawson.")
+
+	UpdateQuestDescription(Quest, "I found evidence of gnolls at one of the ambush sites.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1Complete(Quest, QuestGiver, Player)
+	elseif Step == 2 then
+		Step2Complete(Quest, QuestGiver, Player)
+	elseif Step == 3 then
+		Step3Complete(Quest, QuestGiver, Player)
+	elseif Step == 4 then
+		QuestComplete(Quest, QuestGiver, Player)
+	end
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	-- Add dialog here for when the quest is accepted
+end
+
+function Declined(Quest, QuestGiver, Player)
+	-- Add dialog here for when the quest is declined
+end

+ 39 - 0
server/Quests/PeatBog/reinforcements (2).lua

@@ -0,0 +1,39 @@
+--[[
+	Script Name	: Quests/PeatBog/reinforcements.lua
+	Script Purpose	: Handles the quest, "Reinforcements"
+	Script Author	: Scatman
+	Script Date	: 2009.05.11
+	
+	Zone       : The Peat Bog
+	Quest Giver: Lieutenant Dawson
+	Preceded by: A Final Foe (a_final_foe.lua)
+	Followed by: None
+--]]
+
+
+function Init(Quest)
+
+
+	AddQuestStepChat(Quest, 1, "I must report to Consul Bree in The Caves.", 1, "I must report to Consul Bree in The Caves to help in the defense of Qeynos.", 0, 1970010)
+	AddQuestStepCompleteAction(Quest, 1, "QuestComplete")
+
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	FaceTarget(QuestGiver, Player)
+	conversation = CreateConversation()
+	
+	AddConversationOption(conversation, "I can do this.")
+	StartConversation(conversation, QuestGiver, Player, "I know you can. Qeynos is counting on you, " .. GetName(Player) .. ". Make us proud!")
+end
+
+function Declined(Quest, QuestGiver, Player)
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	UpdateQuestDescription(Quest, "I have spoken with Consul Bree.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+end

+ 35 - 0
server/Quests/QueensColny/welcome_to_norrath.lua

@@ -0,0 +1,35 @@
+--[[
+    Script Name    : Quests/QueensColny/welcome_to_norrath.lua
+    Script Author  : Zcoretri
+    Script Date    : 2015.08.03
+    Script Purpose : Handles the quest, "Welcome to Norrath"
+
+        Zone       : The Queens Colony
+        Quest Giver: Proximity
+        Preceded by: None
+        Followed by: The Art of Combat
+--]]
+
+function Init(Quest)
+    AddQuestStepChat(Quest, 1, "I need to speak with Murrar Shar. He is at the entrance to Myrrin's Tower in the center of the Colony.", 1, "Speak to Murrar Shar, outside the entrance of Myrrin's Tower in the center of the colony.", 0, 2530076)
+--    AddQuestStepChat(Quest, 1, "Speak to Murrar Shar, outside the entrance of Myrrin's Tower in the center of the colony.", 0, 2530076)
+    AddQuestStepCompleteAction(Quest, 1, "step1_complete")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+
+end
+
+function Declined(Quest, QuestGiver, Player)
+
+end
+
+function step1_complete(Quest, QuestGiver, Player)
+    UpdateQuestDescription(Quest, "I spoke with Murrar Shar.")
+    GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+
+end
+

+ 75 - 0
server/Quests/SerpentSewers/BackAndForth.lua

@@ -0,0 +1,75 @@
+--[[
+	Script Name		:  Quests/SerpentSewers/BackAndForth.lua
+	Script Purpose	        :	Handles the quest, "Back and Forth"
+	Script Author	        :	premierio015
+	Script Date		:	17.06.2020
+	Script Notes	        :	Auto generated with QuestParser.
+
+	Zone			:	Access Quests
+	Quest Giver		:	Cicero Puer
+	Preceded by		:	Murkwater Uniform
+	Followed by		:	None
+--]]
+
+
+function Init(Quest)
+	AddQuestStepKill(Quest, 1, "Kill Crazy Peepers.", 1, 100, "Cicero would like me to dispatch of some gnome known only as ''Crazy Peepers.''  If I take care of this Peepers character Cicero will tell me where I can find a secret room with plenty of loot.", 611, 1550074)
+	AddQuestStepCompleteAction(Quest, 1, "Step1Complete")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	-- Add dialog here for when the quest is accepted
+end
+
+function Declined(Quest, QuestGiver, Player)
+	-- Add dialog here for when the quest is declined
+end
+
+function Deleted(Quest, QuestGiver, Player)
+	-- Remove any quest specific items here when the quest is deleted
+end
+
+function Step1Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I've taken care of Peepers.")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I've taken care of that Peepers character, I should return to Cicero.")
+
+	AddQuestStepChat(Quest, 2, "Return to Cicero.", 1, "I've dispatched of that Crazy Peepers character for Cicero, I should go back to him and get the location of this ''secret'' room.", 11, 1550022, 1550059)
+	AddQuestStepCompleteAction(Quest, 2, "Step2Complete")
+end
+
+function Step2Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I've spoken with Cicero.")
+	UpdateQuestTaskGroupDescription(Quest, 2, "I've returned to Cicero and informed him of that crazy gnome's demise.")
+
+	AddQuestStepChat(Quest, 3, "Deliver the letter to Merchant Tula Mawh.", 1, "Cicero says that I have to take this letter to a merchant down here in the sewers by the name of Tula, and she will give me the directions I need.", 1223, 1550014)
+	AddQuestStepCompleteAction(Quest, 3, "Step3Complete")
+end
+
+function Step3Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 3, "I delivered the letter to Tula.")
+	UpdateQuestTaskGroupDescription(Quest, 3, "I delivered the letter for that pesky little rodent, and it turned out to be some sort of love letter.")
+
+	AddQuestStepChat(Quest, 4, "Return to Cicero, again.", 1, "That dirty little rat is either trying to pull a fast one over on me, or he thinks he can use me as a personal letter carrier.", 11, 1550022, 1550059)
+	AddQuestStepCompleteAction(Quest, 4, "QuestComplete")
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	-- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around
+	UpdateQuestStepDescription(Quest, 4, "I've spoken with Cicero, again.")
+	UpdateQuestTaskGroupDescription(Quest, 4, "It turns out he just needed a letter delivered.  Cicero gave me the directions to the Serpent's Lair.")
+
+	UpdateQuestDescription(Quest, "Well after killing a crazy gnome and playing love letter messenger, Cicero finally gave me directions to the Serpent's Lair.  I only hope the place was worth the trouble.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1Complete(Quest, QuestGiver, Player)
+	elseif Step == 2 then
+		Step2Complete(Quest, QuestGiver, Player)
+	elseif Step == 3 then
+		Step3Complete(Quest, QuestGiver, Player)
+	elseif Step == 4 then
+		QuestComplete(Quest, QuestGiver, Player)
+	end
+end

+ 47 - 0
server/Quests/SerpentSewers/CrazyIsAsCrazyDoes.lua

@@ -0,0 +1,47 @@
+--[[
+	Script Name		:	Quests/SerpentSewers/CrazyIsAsCrazyDoes.lua
+	Script Purpose	:	Handles the quest, "Crazy is as Crazy Does"
+	Script Author	:	premierio015
+	Script Date		:	16.06.2020
+	Script Notes	:	Auto generated with QuestParser.
+
+	Zone			:	Serpent Sewer
+	Quest Giver		:	final notice
+	Preceded by		:	None
+	Followed by		:	None
+--]]
+
+
+function Init(Quest)
+	SetQuestFeatherColor(Quest, 3)
+	SetQuestRepeatable(Quest)
+	AddQuestStepKill(Quest, 1, "Find and kill Crazy Peepers.", 1, 100, "This note was apparently meant for someone else.", 611, 1550074)
+	AddQuestStepCompleteAction(Quest, 1, "QuestComplete")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	-- Add dialog here for when the quest is accepted
+end
+
+function Declined(Quest, QuestGiver, Player)
+	-- Add dialog here for when the quest is declined
+end
+
+function Deleted(Quest, QuestGiver, Player)
+	-- Remove any quest specific items here when the quest is deleted
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	-- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around
+	UpdateQuestStepDescription(Quest, 1, "I've killed Crazy Peepers.")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I've carried out the tasks stated in the note.")
+
+	UpdateQuestDescription(Quest, "Interesting... I guess it was worth it for the experience.  I suppose it couldn't hurt to take on adventures such as these.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		QuestComplete(Quest, QuestGiver, Player)
+	end
+end

+ 104 - 0
server/Quests/SerpentSewers/MurkwaterUniform.lua

@@ -0,0 +1,104 @@
+--[[
+	Script Name		:	Quests/SerpentSewers/MurkwaterUniform.lua
+	Script Purpose	        :	Handles the quest, "Murkwater Uniform"
+	Script Author	        :	premierio015
+	Script Date		:	16.06.2020
+	Script Notes	        :	Auto generated with QuestParser.
+
+	Zone			:	Serpent Sewer
+	Quest Giver		:	Cicero Puer
+	Preceded by		:	None
+	Followed by		:	None
+--]]
+
+
+function Init(Quest)
+	AddQuestStepKill(Quest, 1, "Boots off a Murkwater abettor.", 1, 25, "I need to get all of the pieces that make up the Murkwater uniform while here in the Serpent's Sewers.", 1398, 1550045, 1550008, 1550046, 1550009)
+	AddQuestStepCompleteAction(Quest, 1, "Step1Complete")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	conversation = CreateConversation()
+        PlayFlavor(QuestGiver, "voiceover/english/cicero_puer/fprt_sewer02/ciceropuer006.mp3", "", "", 611926151, 2666895781, Player)
+        AddConversationOption(conversation, "I'll return soon.")
+        StartConversation(conversation, QuestGiver, Player, "Excellent!  Hurry now, there isn't much time!  The Murkwaters are down in the Serpent Sewers. I can smell them.")
+end
+
+function Declined(Quest, QuestGiver, Player)
+	-- Add dialog here for when the quest is declined
+end
+
+function Deleted(Quest, QuestGiver, Player)
+	-- Remove any quest specific items here when the quest is deleted
+end
+
+function Step1Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I've got the Boots.")
+
+	AddQuestStepKill(Quest, 2, "Leggings off a Murkwater steward.", 1, 25, "I need to get all of the pieces that make up the Murkwater uniform while here in the Serpent's Sewers.", 1402, 1550047, 1550010)
+	AddQuestStepCompleteAction(Quest, 2, "Step2Complete")
+end
+
+function Step2Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I've got the Leggings.")
+
+	AddQuestStepKill(Quest, 3, "Bracers off a Murkwater induct.", 1, 25, "I need to get all of the pieces that make up the Murkwater uniform while here in the Serpent's Sewers.", 1399, 1550011, 1550048)
+	AddQuestStepCompleteAction(Quest, 3, "Step3Complete")
+end
+
+function Step3Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 3, "I've got the Bracers.")
+
+	AddQuestStepKill(Quest, 4, "Gloves off a Murkwater induct.", 1, 25, "I need to get all of the pieces that make up the Murkwater uniform while here in the Serpent's Sewers.", 1400, 1550011, 1550048 )
+	AddQuestStepCompleteAction(Quest, 4, "Step4Complete")
+end
+
+function Step4Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 4, "I've got the Gloves.")
+
+	AddQuestStepKill(Quest, 5, "Sleeves off a Murkwater steward.", 1, 25, "I need to get all of the pieces that make up the Murkwater uniform while here in the Serpent's Sewers.", 1417, 1550047, 1550010)
+	AddQuestStepCompleteAction(Quest, 5, "Step5Complete")
+end
+
+function Step5Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 5, "I've got the Sleeves .")
+
+	AddQuestStepKill(Quest, 6, "Chest piece off a Murkwater abettor.", 1, 25, "I need to get all of the pieces that make up the Murkwater uniform while here in the Serpent's Sewers.", 1397, 1550045, 1550008, 1550046, 1550009)
+	AddQuestStepCompleteAction(Quest, 6, "Step6Complete")
+end
+
+function Step6Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 6, "I've got the chest piece.")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I've gathered all of the pieces that make up the Murkwater uniform.")
+
+	AddQuestStepChat(Quest, 7, "I should get this stuff back to Cicero Puer.", 1, "I need to get this uniform to that ratonga, Cicero.", 11, 1550022, 1550059)
+	AddQuestStepCompleteAction(Quest, 7, "QuestComplete")
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	-- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around
+	UpdateQuestStepDescription(Quest, 7, "I've given Cicero the clothes.")
+	UpdateQuestTaskGroupDescription(Quest, 2, "I've given the uniform to Cicero.")
+
+	UpdateQuestDescription(Quest, "I've given the ratonga the Murkwater uniform, now he's busy scheming who knows what.  Anyway, he stuck to his end of the bargain, and that's all that matters.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1Complete(Quest, QuestGiver, Player)
+	elseif Step == 2 then
+		Step2Complete(Quest, QuestGiver, Player)
+	elseif Step == 3 then
+		Step3Complete(Quest, QuestGiver, Player)
+	elseif Step == 4 then
+		Step4Complete(Quest, QuestGiver, Player)
+	elseif Step == 5 then
+		Step5Complete(Quest, QuestGiver, Player)
+	elseif Step == 6 then
+		Step6Complete(Quest, QuestGiver, Player)
+	elseif Step == 7 then
+		QuestComplete(Quest, QuestGiver, Player)
+	end
+end
+

二进制
server/Quests/SouthQeynos/.barbaric_chores.lua.swp


+ 48 - 0
server/Quests/Sprawl/advanced_problem_solving.lua

@@ -0,0 +1,48 @@
+--[[
+	Script Name	: Quests/TheSprawl/advanced_problem_solving.lua
+	Script Purpose	: Handles the quest, "Advanced Problem Solving"
+	Script Author	: Scatman
+	Script Date	: 2009.07.26
+	
+	Zone       : The Sprawl
+	Quest Giver: Crispin Luvinius
+	Preceded by: Problem Solving (problem_solving.lua)
+	Followed by: None
+--]]
+
+function Init(Quest)
+	AddQuestStepKill(Quest, 1, "I need to beat up five Giantslayer bashers.", 5, 100, "I've heard that Giantslayer bashers hang out in the Sprawl. I should pay them a little visit.", 611, 1260022)
+	AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledBashers")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	FaceTarget(QuestGiver, Player)
+	conversation = CreateConversation()
+
+	AddConversationOption(conversation, "Yah, yah.")
+	StartConversation(conversation, QuestGiver, Player, "Good, maybe you'll earn some respect with us.")
+end
+
+function Declined(Quest, QuestGiver, Player)
+end
+
+function Step1_Complete_KilledBashers(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I've beat down five Giantslayer bashers.")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I've sent the Giantslayers a message that they shouldn't listen to vagrants who tell tall tales.")
+	
+	AddQuestStepChat(Quest, 2, "I need to talk with Crispin.", 1, "I should let Crispin know that he and his gang have nothing to worry about.", 0, 1260020)
+	AddQuestStepCompleteAction(Quest, 2, "Quest_Complete")
+end
+
+function Quest_Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I've spoken with Crispin.")
+	UpdateQuestTaskGroupDescription(Quest, 2, "I've let Crispin know these guys won't be bothering them anymore.")
+	GiveQuestReward(Quest, Player)
+	UpdateQuestDescription(Quest, "I've taken care of Crispin's problem. It seems that the guy isn't as tough as he acts.")
+end
+
+function Reload(Quest, QuestGiver, Player)
+	if Step == 1 then
+		Step1_Complete_KilledBashers(Quest, QuestGiver, Player)
+	end
+end

+ 48 - 0
server/Quests/Sprawl/problem_solving.lua

@@ -0,0 +1,48 @@
+--[[
+	Script Name	: Quests/TheSprawl/problem_solving.lua
+	Script Purpose	: Handles the quest, "Problem Solving"
+	Script Author	: Scatman
+	Script Date	: 2009.07.26
+	
+	Zone       : The Sprawl
+	Quest Giver: Crispin Luvinius
+	Preceded by: None
+	Followed by: Advanced Problem Solving (advanced_problem_solving.lua)
+--]]
+
+function Init(Quest)
+	AddQuestStepKill(Quest, 1, "I need to kill five Dervish hoodlums.", 5, 100, "I need to send a message to the Dervish hoodlums in the Sprawl. The message will involve a lot of them breathing dirt.", 611, 1260007)
+	AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledHoodlums")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	FaceTarget(QuestGiver, Player)
+	conversation = CreateConversation()
+
+	AddConversationOption(conversation, "All right.")
+	StartConversation(conversation, QuestGiver, Player, "Come back when you're done.")
+end
+
+function Declined(Quest, QuestGiver, Player)
+end
+
+function Step1_Complete_KilledHoodlums(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I've dealt with the hoodlums.")
+	UpdateQuestTaskGroupDescription(Quest, 1, "Those hoodlums got the message loud and clear.")
+	
+	AddQuestStepChat(Quest, 2, "I need to talk with Crispin.", 1, "I should let Crispin in know that his problem has been solved. I should get paid, too.", 0, 1260020)
+	AddQuestStepCompleteAction(Quest, 2, "Quest_Complete")
+end
+
+function Quest_Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I've spoken with Crispin.")
+	UpdateQuestTaskGroupDescription(Quest, 2, "I've let Crispin know that I've solved his problem.")
+	GiveQuestReward(Quest, Player)
+	UpdateQuestDescription(Quest, "I've taken care of Crispin's problem. I think it won't be too long before his business partner decides to do what he was told to do.")
+end
+
+function Reload(Quest, QuestGiver, Player)
+	if Step == 1 then
+		Step1_Complete_KilledHoodlums(Quest, QuestGiver, Player)
+	end
+end

+ 32 - 0
server/Quests/SunkenCity/jezranazs_hideous_locket.lua

@@ -0,0 +1,32 @@
+--[[
+    Script Name    : Quests/Sunkencity/jezranazs_hideous_locket.lua
+    Script Author  : neatz09
+    Script Date    : 2018.12.31 12:12:13
+    Script Purpose : 
+
+        Zone       : Sunkencity
+        Quest Giver: 
+        Preceded by: None
+        Followed by: 
+--]]
+
+function Init(Quest)
+
+end
+
+function Accepted(Quest, QuestGiver, Player)
+
+end
+
+function Declined(Quest, QuestGiver, Player)
+
+end
+
+function quest_complete(Quest, QuestGiver, Player)
+
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+
+end
+

+ 104 - 0
server/Quests/SunkenCity/joining_the_gang.lua

@@ -0,0 +1,104 @@
+--[[
+	Script Name	: Quests/SunkenCity/joining_the_gang.lua
+	Script Purpose	: Handles the quest, "Joining the Gang"
+	Script Author	: Scatman
+	Script Date	    : 2009.08.01
+	
+	Zone       : Sunken City
+	Quest Giver: Manius Galla
+	Preceded by: None
+	Followed by: None
+--]]
+
+function Init(Quest)
+	AddQuestStepKill(Quest, 1, "I must kill two Blackshield raiders.", 2, 100, "I need to kill some of the Blackshields in the Sunken City.", 611, 1240123, 1240126, 1240117, 1240098, 1240124, 1240073, 1240067, 1240119, 1240140, 1240081, 1240118)
+	AddQuestStepKill(Quest, 2, "I must kill two Blackshield plunderers.", 2, 100, "I need to kill some of the Blackshields in the Sunken City.", 611, 1240129, 1240092, 1240111, 1240095, 1240114, 1240078, 1240068)
+	AddQuestStepKill(Quest, 3, "I must kill two Blackshield pillagers.", 2, 100, "I need to kill some of the Blackshields in the Sunken City.", 611, 1240090, 1240142, 1240113, 1240128, 1240069, 1240120, 1240099, 1240085, 1240148)
+	AddQuestStepKill(Quest, 4, "I must kill two Blackshield ravagers.", 2, 100, "I need to kill some of the Blackshields in the Sunken City.", 611, 1240094, 1240088, 1240136, 1240077, 1240130, 1240101, 1240100, 1240087, 1240074)
+	AddQuestStepKill(Quest, 5, "I must kill two Blackshield pirates.", 2, 100, "I need to kill some of the Blackshields in the Sunken City.", 611, 1240064, 1240093, 1240097, 1240134, 1240143, 1240055, 1240137, 1240089, 1240082, 1240147, 1240121)
+	AddQuestStepCompleteAction(Quest, 1, "Step1_Complete_KilledRaiders")
+	AddQuestStepCompleteAction(Quest, 2, "Step2_Complete_KilledPlunderers")
+	AddQuestStepCompleteAction(Quest, 3, "Step3_Complete_KilledPillagers")
+	AddQuestStepCompleteAction(Quest, 4, "Step4_Complete_KilledRavagers")
+	AddQuestStepCompleteAction(Quest, 5, "Step5_Complete_KilledPirates")
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	FaceTarget(QuestGiver, Player)
+	conversation = CreateConversation()
+
+	PlayFlavor(QuestGiver, "voiceover/english/optional5/standard_dark_elf_male/fprt_hood05/quests/tilzaknlim/tilzak_x1_accept.mp3", "", "", 16004203, 2050489897, Player)
+	AddConversationOption(conversation, "I'll be back when I have them.", "dlg_3_3")
+	StartConversation(conversation, QuestGiver, Player, "OH! You'll help me? Oh thank you so much, friend! I wish to make a nice souffle from the fins of the Dusk Sharks that roam the waters here in the Sunken City.  I need a large fin in order to make this souffle.  I will be eagerly anticipating your return!")
+end
+
+function Declined(Quest, QuestGiver, Player)
+end
+
+function Step1_Complete_KilledRaiders(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have killed the Blackshield raiders.")
+	
+	if QuestIsComplete(Player, 278) then
+		KilledBlacksields(Quest, QuestGiver, Player)
+	end
+end
+
+function Step2_Complete_KilledPlunderers(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I have killed the Blackshield plunderers.")
+	
+	if QuestIsComplete(Player, 278) then
+		KilledBlacksields(Quest, QuestGiver, Player)
+	end
+end
+
+function Step3_Complete_KilledPillagers(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 3, "I have killed the Blackshield pillagers.")
+	
+	if QuestIsComplete(Player, 278) then
+		KilledBlacksields(Quest, QuestGiver, Player)
+	end
+end
+
+function Step4_Complete_KilledRavagers(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 4, "I have killed the Blackshield ravagers.")
+	
+	if QuestIsComplete(Player, 278) then
+		KilledBlacksields(Quest, QuestGiver, Player)
+	end
+end
+
+function Step5_Complete_KilledPirates(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 5, "I have killed the Blackshield pirates.")
+	
+	if QuestIsComplete(Player, 278) then
+		KilledBlacksields(Quest, QuestGiver, Player)
+	end
+end
+
+function KilledBlacksields(Quest, QuestGiver, Player)
+	UpdateQuestTaskGroupDescription(Quest, 1, "I've killed all of the Blackshields that were part of my test.")
+
+	AddQuestStepChat(Quest, 2, "I need to speak with Manius.", 1, "I should return to Manius and let him know that I've passed his test.", 0, 1240079)
+	AddQuestStepCompleteAction(Quest, 2, "Quest_Complete")
+end
+
+function Quest_Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I've spoken with Manius.")
+	UpdateQuestTaskGroupDescription(Quest, 2, "I've let Manius know that I've done what it takes to pass his test.")
+	GiveQuestReward(Quest, Player)
+	UpdateQuestDescription(Quest, "I've killed the raider lackeys like Manius has asked, and completed my test. He said he'll think about letting me join, but hasn't decided yet. Maybe I should check back with him later.")
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1_Complete_KilledRaiders(Quest, QuestGiver, Player)
+	elseif Step == 2 then
+		Step2_Complete_KilledPlunderers(Quest, QuestGiver, Player)
+	elseif Step == 3 then
+		Step3_Complete_KilledPillagers(Quest, QuestGiver, Player)
+	elseif Step == 4 then
+		Step4_Complete_KilledRavagers(Quest, QuestGiver, Player)
+	elseif Step == 5 then
+		Step5_Complete_KilledPirates(Quest, QuestGiver, Player)
+	end
+end

+ 32 - 0
server/Quests/TheRuins/AJourneyOutsidetheCity

@@ -0,0 +1,32 @@
+--[[
+    Script Name    : Quests/TheRuins/AJourneyOutsidetheCity
+    Script Author  : neatz09
+    Script Date    : 2018.12.30 11:12:59
+    Script Purpose : 
+
+        Zone       : TheRuins
+        Quest Giver: 
+        Preceded by: None
+        Followed by: 
+--]]
+
+function Init(Quest)
+
+end
+
+function Accepted(Quest, QuestGiver, Player)
+
+end
+
+function Declined(Quest, QuestGiver, Player)
+
+end
+
+function quest_complete(Quest, QuestGiver, Player)
+
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+
+end
+

+ 32 - 0
server/Quests/TheRuins/IfIHadAHammer.lua

@@ -0,0 +1,32 @@
+--[[
+    Script Name    : Quests/TheRuins/IfIHadAHammer.lua
+    Script Author  : neatz09
+    Script Date    : 2018.12.30 11:12:40
+    Script Purpose : 
+
+        Zone       : TheRuins
+        Quest Giver: 
+        Preceded by: None
+        Followed by: 
+--]]
+
+function Init(Quest)
+
+end
+
+function Accepted(Quest, QuestGiver, Player)
+
+end
+
+function Declined(Quest, QuestGiver, Player)
+
+end
+
+function quest_complete(Quest, QuestGiver, Player)
+
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+
+end
+

+ 93 - 0
server/Quests/ZoneName/ElementsOfARitual.lua

@@ -0,0 +1,93 @@
+--[[
+	Script Name		:	ElementsofaRitual.lua
+	Script Purpose	:	Handles the quest, "Elements of a Ritual"
+	Script Author	:	Shatou
+	Script Date		:	1/3/2020
+	Script Notes	:	
+
+	Zone			:	Caves
+	Quest Giver		:	Consul Bree
+	Preceded by		:	Hit Them Where it Hurts
+	Followed by		:	High Shaman of the Rockpaw
+--]]
+
+local EMMA_TORQUE_ID = 1970007
+local ALBINO_PYTHON_ID = 1970009
+local INCANTATION_DUST_ID = 8295
+local RIVER_STONE_ID = 11599
+local DRAWING_RAY_ID = 46016
+
+
+function Init(Quest)
+	AddQuestStepChat(Quest, 1, "I need to speak with Emma Torque.", 1, "I need to acquire the object necessary to get a river stone from a river behemoth from Emma Torque.", 11, EMMA_TORQUE_ID)
+	AddQuestStepCompleteAction(Quest, 1, "Step1Complete")
+end
+
+function Step1Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have spoken with Emma Torque.")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I have acquired the Drawing Ray.")
+
+	AddQuestStepKill(Quest, 2, "I need to collect five crown scales from albino pythons here in the Caves.", 5, 100, "I need to collect the items necessary for the summoning ritual.", 84, ALBINO_PYTHON_ID)
+	AddQuestStepCompleteAction(Quest, 2, "Step2Complete")
+end
+
+function Step2Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I have collected five crown scales.")
+
+	AddQuestStepHarvest(Quest, 3, "I need to collect incantation dust from the Rockpaw camps.", 1, 100, "I need to collect the items necessary for the summoning ritual.", 10, INCANTATION_DUST_ID)
+	AddQuestStepCompleteAction(Quest, 3, "Step3Complete")
+end
+
+function Step3Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 3, "I have collected incantation dust from the Rockpaw camps.")
+
+	--AddQuestStepKill(Quest, 4, "I need to collect a river stone from a river behemoth. I will need to use Emma's device on the remains of one to get the stone.", 1, 100, "I need to collect the items necessary for the summoning ritual.", 769, 1970031)
+	
+	AddQuestStepObtainItem(Quest, 4, "I need to collect a river stone from a river behemoth. I will need to use Emma's device on the remains of one to get the stone.", 1, 100, "I need to collect the items necessary for the summoning ritual.", 769, RIVER_STONE_ID)
+	
+	AddQuestStepCompleteAction(Quest, 4, "Step4Complete")
+end
+
+function Step4Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 4, "I have collected a river stone.")
+	UpdateQuestTaskGroupDescription(Quest, 2, "I have collected the necessary items.")
+
+	AddQuestStepChat(Quest, 5, "I need to return to Consul Bree.", 1, "I need to return to Consul Bree now that I have collected all of the needed items.", 11, RIVER_STONE_ID, INCANTATION_DUST_ID)
+	AddQuestStepCompleteAction(Quest, 5, "QuestComplete")
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	-- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around
+	UpdateQuestStepDescription(Quest, 5, "I have spoken with Consul Bree.")
+	UpdateQuestTaskGroupDescription(Quest, 3, "I have spoken with Consul Bree.")
+
+	UpdateQuestDescription(Quest, "Now that I have gotten all of the items required for the ritual, I will be able to summon Zen'Durath.")
+	GiveQuestReward(Quest, Player)
+    RemoveItem(Player, DRAWING_RAY_ID)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1Complete(Quest, QuestGiver, Player)
+	elseif Step == 2 then
+		Step2Complete(Quest, QuestGiver, Player)
+	elseif Step == 3 then
+		Step3Complete(Quest, QuestGiver, Player)
+	elseif Step == 4 then
+		Step4Complete(Quest, QuestGiver, Player)
+	elseif Step == 5 then
+		QuestComplete(Quest, QuestGiver, Player)
+	end
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	-- Add dialog here for when the quest is accepted
+end
+
+function Declined(Quest, QuestGiver, Player)
+	-- Add dialog here for when the quest is declined
+end
+
+function Deleted(Quest, Player)
+	RemoveItem(Player, DRAWING_RAY_ID)
+end

+ 66 - 0
server/Quests/ZoneName/HitTheWhereItHurts.lua

@@ -0,0 +1,66 @@
+--[[
+	Script Name		:	HitThemWhereitHurts.lua
+	Script Purpose	:	Handles the quest, "Hit Them Where it Hurts"
+	Script Author	:	Shatou
+	Script Date		:	1/3/2020
+	Script Notes	:	Need to add scripts to the forge and mechanical parts to recognize a player with this quest, make them interactable, 
+						update the quest on use, and destroy them from the client view.
+
+	Zone			:	Caves
+	Quest Giver		:	Consul Bree
+	Preceded by		:	A Lack of Information
+	Followed by		:	Elements of a Ritual
+--]]
+
+
+function Init(Quest, Player)
+	AddQuestStep(Quest, 1, "I need to destroy the forge in the armory.", 1, 100, "Consul Bree has asked for my help in disrupting the gnoll operations here in the Caves. I can help by crippling their ability to craft armor and destroying some of their machine parts.", 12)
+        for i = 1, 6, 1 do
+            SummonItem(Player, 6975, 1)
+
+	end
+
+	AddQuestStepCompleteAction(Quest, 1, "Step1Complete")
+end
+
+function Step1Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 1, "I have destroyed the forge.")
+
+	AddQuestStep(Quest, 2, "I need to destroy some of the mechanical parts stashed in the Caves.", 5, 100, "Consul Bree has asked for my help in disrupting the gnoll operations here in the Caves. I can help by crippling their ability to craft armor and destroying some of their machine parts.", 1042)
+	AddQuestStepCompleteAction(Quest, 2, "Step2Complete")
+end
+
+function Step2Complete(Quest, QuestGiver, Player)
+	UpdateQuestStepDescription(Quest, 2, "I have destroyed some of the mechanical parts stashed in the Caves.")
+	UpdateQuestTaskGroupDescription(Quest, 1, "I have done as Consul Bree asked.")
+
+	AddQuestStepChat(Quest, 3, "I need to return to Consul Bree.", 1, "Now that I have helped Consul Bree I should return to her.", 11)
+	AddQuestStepCompleteAction(Quest, 3, "QuestComplete")
+end
+
+function QuestComplete(Quest, QuestGiver, Player)
+	-- The following UpdateQuestStepDescription and UpdateTaskGroupDescription are not needed, parser adds them for completion in case stuff needs to be moved around
+	UpdateQuestStepDescription(Quest, 3, "I have spoken with Consul Bree.")
+	UpdateQuestTaskGroupDescription(Quest, 2, "I have spoken with Consul Bree.")
+
+	UpdateQuestDescription(Quest, "I have interrupted work in the armory and destroyed a number of machine components for Bree.")
+	GiveQuestReward(Quest, Player)
+end
+
+function Reload(Quest, QuestGiver, Player, Step)
+	if Step == 1 then
+		Step1Complete(Quest, QuestGiver, Player)
+	elseif Step == 2 then
+		Step2Complete(Quest, QuestGiver, Player)
+	elseif Step == 3 then
+		QuestComplete(Quest, QuestGiver, Player)
+	end
+end
+
+function Accepted(Quest, QuestGiver, Player)
+	-- Add dialog here for when the quest is accepted
+end
+
+function Declined(Quest, QuestGiver, Player)
+	-- Add dialog here for when the quest is declined
+end

+ 4 - 1
server/SpawnScripts/A Meeting of the Minds/Borxx.lua

@@ -9,7 +9,10 @@
 
 -- spells = {Gaze, Glare of Eradication, Gaze of Commandment, Gaze of Writhing Agony}
 
-function spawn(NPC)
+require "SpawnScripts/Generic/NPCModule"
+
+function spawn(NPC, Spawn)
+    --NPCModule(NPC, Spawn)
 end
 
 function aggro(NPC, Spawn)

+ 1 - 0
server/SpawnScripts/Antonica/AdvisorPandrus.lua

@@ -9,6 +9,7 @@ require "SpawnScripts/Generic/NPCModule"
 
 function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(65 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(105 + dmgMod))

+ 4 - 3
server/SpawnScripts/Antonica/AglaemantistheColdwindTerror.lua

@@ -5,14 +5,15 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(55 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(95 + dmgMod))
-    
-
+    RandomMovement(NPC, Spawn, 20, -20, 2, 8, 15)
 end
 
 function hailed(NPC, Spawn)

+ 3 - 1
server/SpawnScripts/Antonica/AnimatorRotpaw.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(45 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(90 + dmgMod))

+ 1 - 0
server/SpawnScripts/Antonica/Blackbark.lua

@@ -9,6 +9,7 @@ require "SpawnScripts/Generic/NPCModule"
 
 function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(65 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(105 + dmgMod))

+ 3 - 1
server/SpawnScripts/Antonica/CaptainGaebrail.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(55 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(95 + dmgMod))

+ 3 - 1
server/SpawnScripts/Antonica/ChiefKeizall.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(55 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(95 + dmgMod))

+ 27 - 0
server/SpawnScripts/Antonica/Coffrey.lua

@@ -0,0 +1,27 @@
+--[[
+	Script Name		:	Coffrey.lua
+	Script Purpose	:	Waypoint Path for Coffrey.lua
+	Script Author	:	Auto Generated
+	Script Date		:	04/02/2020 03:22:53 PM
+	Script Notes	:	Locations collected from Live
+--]]
+
+function spawn(NPC)
+	waypoints(NPC)
+end
+
+function hailed(NPC, Spawn)
+	FaceTarget(NPC, Spawn)
+end
+
+function respawn(NPC)
+end
+
+function waypoints(NPC)
+	MovementLoopAddLocation(NPC, 373.29, -20.73, 371.98, 2, 0)
+	MovementLoopAddLocation(NPC, 361.65, -20.73, 394.13, 2, 0)
+	MovementLoopAddLocation(NPC, 250.8, -10.73, 440.87, 2, 0)
+	MovementLoopAddLocation(NPC, 166.83, -9.52, 588.67, 2, 0)
+end
+
+

+ 3 - 1
server/SpawnScripts/Antonica/GhostofVhalen.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(65 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(105 + dmgMod))

+ 3 - 1
server/SpawnScripts/Antonica/GrolvenChiptooth.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(70 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(110 + dmgMod))

+ 3 - 1
server/SpawnScripts/Antonica/HollyWindstalker.lua

@@ -7,9 +7,11 @@
 	Notes: Updated w/ Holly's 20+ min pathing script. 2022.08.26 Dorbin
 	       Updated w/ autoattack damage. LordPazuzu 1/12/24
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(65 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(105 + dmgMod))

+ 3 - 1
server/SpawnScripts/Antonica/KingKlicnik.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(35 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(75 + dmgMod))

+ 3 - 1
server/SpawnScripts/Antonica/LadyFaideth.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(55 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(95 + dmgMod))

+ 3 - 1
server/SpawnScripts/Antonica/LordRison.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(55 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(95 + dmgMod))

+ 3 - 1
server/SpawnScripts/Antonica/MayorWoodbridge.lua

@@ -6,9 +6,11 @@
                    : 
 --]]
 dofile("SpawnScripts/Generic/MonsterCallouts/Windstalkers.lua")
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(45 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(85 + dmgMod))

+ 3 - 1
server/SpawnScripts/Antonica/PriestofthePlaguebringer.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(55 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(95 + dmgMod))

+ 4 - 64
server/SpawnScripts/Antonica/RenuxtheUndying.lua

@@ -5,75 +5,15 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(24 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(60 + dmgMod))
-
-ChooseMovement(NPC)
-end
-
-function ChooseMovement(NPC)
-	local route = math.random(1,4)
-	if route == 1 then
-	    RouteOne(NPC, Spawn)
-	elseif route == 2 then
-	    RouteTwo(NPC, Spawn)
-	elseif route == 3 then
-	    RouteThree(NPC, Spawn)
-	elseif route == 4 then
-	    RouteFour(NPC, Spawn)
-	end
-end
-
-function RouteOne(NPC, Spawn)
-    local X = GetX(NPC)
-	local Y = GetY(NPC)
-	local Z = GetZ(NPC)
-    MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,10))
-    MovementLoopAddLocation(NPC, X + 7, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X + 7, Y, Z + 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X + 14, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X + 7, Y, Z + 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,10), "ChooseMovement")
-end
-
-function RouteTwo(NPC, Spawn)
-    local X = GetX(NPC)
-	local Y = GetY(NPC)
-	local Z = GetZ(NPC)
-    MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,10))
-    MovementLoopAddLocation(NPC, X - 7, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X - 7, Y, Z - 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X - 14, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X - 7, Y, Z - 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X, Y, Z, 1, math.random(5,10), "ChooseMovement")
-end
-
-function RouteThree(NPC, Spawn)
-    local X = GetX(NPC)
-	local Y = GetY(NPC)
-	local Z = GetZ(NPC)
-    MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X + 7, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X + 7, Y, Z - 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X + 14, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X + 7, Y, Z - 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,10), "ChooseMovement")
-end
-
-function RouteFour(NPC, Spawn)
-    local X = GetX(NPC)
-	local Y = GetY(NPC)
-	local Z = GetZ(NPC)
-    MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X - 7, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X - 7, Y, Z + 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X - 14, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X - 7, Y, Z + 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,10),"ChooseMovement")
+    RandomMovement(NPC, Spawn, 12, -12, 2, 8, 15)
 end
 
 function respawn(NPC, Spawn)

+ 3 - 1
server/SpawnScripts/Antonica/Rotclaw.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(15 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(26 + dmgMod))

+ 3 - 1
server/SpawnScripts/Antonica/SarkinSearfang.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(24 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(42 + dmgMod))

+ 1 - 2
server/SpawnScripts/Antonica/SentryActon.lua

@@ -10,10 +10,9 @@ local Quest2 = 5783
     local greetingsTable = { "voiceover/english/voice_emotes/greetings/greetings_1_1034.mp3",
     						 "voiceover/english/voice_emotes/greetings/greetings_2_1034.mp3",
     						 "voiceover/english/voice_emotes/greetings/greetings_3_1034.mp3"};
-require "SpawnScripts/Generic/NPCModule"
 
 function spawn(NPC, Spawn)
-    NPCModule(NPC, Spawn)
+
 end
 
 function hailed(NPC, Spawn)

+ 4 - 64
server/SpawnScripts/Antonica/Stoneclaw.lua

@@ -5,75 +5,15 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(65 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(105 + dmgMod))
-
-ChooseMovement(NPC)
-end
-
-function ChooseMovement(NPC)
-	local route = math.random(1,4)
-	if route == 1 then
-	    RouteOne(NPC, Spawn)
-	elseif route == 2 then
-	    RouteTwo(NPC, Spawn)
-	elseif route == 3 then
-	    RouteThree(NPC, Spawn)
-	elseif route == 4 then
-	    RouteFour(NPC, Spawn)
-	end
-end
-
-function RouteOne(NPC, Spawn)
-    local X = GetX(NPC)
-	local Y = GetY(NPC)
-	local Z = GetZ(NPC)
-    MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,10))
-    MovementLoopAddLocation(NPC, X + 7, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X + 7, Y, Z + 7, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X + 14, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X + 7, Y, Z + 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,10), "ChooseMovement")
-end
-
-function RouteTwo(NPC, Spawn)
-    local X = GetX(NPC)
-	local Y = GetY(NPC)
-	local Z = GetZ(NPC)
-    MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,10))
-    MovementLoopAddLocation(NPC, X - 7, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X - 7, Y, Z - 7, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X - 14, Y, Z+7, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X - 7, Y, Z - 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X, Y, Z, 1, math.random(5,10), "ChooseMovement")
-end
-
-function RouteThree(NPC, Spawn)
-    local X = GetX(NPC)
-	local Y = GetY(NPC)
-	local Z = GetZ(NPC)
-    MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X + 7, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X + 7, Y, Z - 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X + 14, Y, Z+12, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X + 7, Y, Z - 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,10), "ChooseMovement")
-end
-
-function RouteFour(NPC, Spawn)
-    local X = GetX(NPC)
-	local Y = GetY(NPC)
-	local Z = GetZ(NPC)
-    MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X - 7, Y, Z+14, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X - 7, Y, Z + 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X - 14, Y, Z -14, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X - 7, Y, Z + 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,10), "ChooseMovement")
+    RandomMovement(NPC, Spawn, 12, -12, 2, 8, 15)
 end
 
 function respawn(NPC, Spawn)

+ 3 - 1
server/SpawnScripts/Antonica/TarkSearfang.lua

@@ -6,9 +6,11 @@
                    : 
 --]]
 dofile("SpawnScripts/Generic/MonsterCallouts/DarkpawGnoll1.lua")
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(24 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(42 + dmgMod))

+ 3 - 1
server/SpawnScripts/Antonica/TheDarkpawFanglord.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(65 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(105 + dmgMod))

+ 3 - 1
server/SpawnScripts/Antonica/TheKlicnikQueen.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(35 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(75 + dmgMod))

+ 4 - 2
server/SpawnScripts/Antonica/TheTwotoedRat.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
-    DmgBonus = math.floor(GetStr(NPC) /10)
+function spawn(NPC, Spawn)
+    dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", 6 + DmgBonus) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", 12 + DmgBonus)

+ 20 - 0
server/SpawnScripts/Antonica/WatchmanHaggerty.lua

@@ -0,0 +1,20 @@
+--[[
+    Script Name    : SpawnScripts/Antonica/WatchmanHaggerty.lua
+    Script Author  : LordPazuzu
+    Script Date    : 2024.04.14 05:04:04
+    Script Purpose : 
+                   : 
+--]]
+require "SpawnScripts/Generic/NPCModule"
+
+function spawn(NPC, Spawn)
+    NPCModule(NPC, Spawn)
+end
+
+function hailed(NPC, Spawn)
+	FaceTarget(NPC, Spawn)
+end
+
+function respawn(NPC)
+	spawn(NPC)
+end

+ 20 - 0
server/SpawnScripts/Antonica/WatchmanLoxley.lua

@@ -0,0 +1,20 @@
+--[[
+    Script Name    : SpawnScripts/Antonica/WatchmanLoxley.lua
+    Script Author  : LordPazuzu
+    Script Date    : 2024.04.14 05:04:28
+    Script Purpose : 
+                   : 
+--]]
+require "SpawnScripts/Generic/NPCModule"
+
+function spawn(NPC, Spawn)
+    NPCModule(NPC, Spawn)
+end
+
+function hailed(NPC, Spawn)
+	FaceTarget(NPC, Spawn)
+end
+
+function respawn(NPC)
+	spawn(NPC)
+end

+ 3 - 1
server/SpawnScripts/Antonica/aBloodsaberCorruptor.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(65 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(105 + dmgMod))

+ 1 - 1
server/SpawnScripts/Antonica/aColdwindKingCrab.lua

@@ -5,11 +5,11 @@
     Script Purpose : 
                    : 
 --]]
-
 require "SpawnScripts/Generic/NPCModule"
 
 function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(24 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(42 + dmgMod))

+ 1 - 0
server/SpawnScripts/Antonica/aColdwindLunker.lua

@@ -9,6 +9,7 @@ require "SpawnScripts/Generic/NPCModule"
 
 function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(24 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(42 + dmgMod))

+ 3 - 1
server/SpawnScripts/Antonica/aDeepwaterLurker.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(30 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(60 + dmgMod))

+ 4 - 1
server/SpawnScripts/Antonica/aMalevolentViper.lua

@@ -5,8 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
+
 function spawn(NPC, Spawn)
-    DmgBonus = math.floor(GetStr(NPC) /10)
+    dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", 8 + DmgBonus) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", 15 + DmgBonus)

+ 3 - 3
server/SpawnScripts/Antonica/aMoatRat.lua

@@ -12,9 +12,9 @@ function spawn(NPC, Spawn)
     RandomMovement(NPC, Spawn, 12, -12, 2, 8, 15)
 end
 
-function respawn(NPC, Spawn)
-    spawn(NPC)
-end
+--function respawn(NPC, Spawn)
+    --spawn(NPC)
+--end
 
 function hailed(NPC, Spawn)
     FaceTarget(NPC, Spawn)

+ 3 - 1
server/SpawnScripts/Antonica/aSabertoothHero.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(65 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(105 + dmgMod))

+ 3 - 1
server/SpawnScripts/Antonica/aSabertoothPackLord.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(55 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(95 + dmgMod))

+ 3 - 1
server/SpawnScripts/Antonica/aSoddenStalker.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(55 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(95 + dmgMod))

+ 3 - 1
server/SpawnScripts/Antonica/anAncientSogbone.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(30 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(60 + dmgMod))

+ 13 - 0
server/SpawnScripts/Antonica/devnoobicus.lua

@@ -0,0 +1,13 @@
+function spawn(NPC)
+	MovementLoopAddLocation(NPC, 338.72, -9.34, 810.21, 353.57, 7, 0)
+	MovementLoopAddLocation(NPC, 339.82, -13.68, 788.88, 356.62, 7, 0)
+	MovementLoopAddLocation(NPC, 341.05, -16.82, 738.47, 327.01, 7, 0)
+end
+
+function respawn(NPC)
+	spawn(NPC)
+end
+
+function hailed(NPC, Spawn)
+	FaceTarget(NPC, Spawn)
+end

+ 1 - 0
server/SpawnScripts/BloodSkullValleyMaulicsStronghold/GeneralDrull.lua

@@ -9,6 +9,7 @@ require "SpawnScripts/Generic/NPCModule"
 
 function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(55 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(95 + dmgMod))

+ 1 - 0
server/SpawnScripts/BloodSkullValleyMaulicsStronghold/LegioneerGorlak.lua

@@ -9,6 +9,7 @@ require "SpawnScripts/Generic/NPCModule"
 
 function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(45 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(85 + dmgMod))

+ 3 - 1
server/SpawnScripts/Classic_forest/KendallCopperholdsRemains.lua

@@ -6,10 +6,12 @@
                    : 
 --]]
 dofile("SpawnScripts/Generic/MonsterCallouts/BaseSkeleton1.lua")
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     SetSpawnAnimation(NPC, 13016)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(15 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(26 + dmgMod))

+ 4 - 2
server/SpawnScripts/Classic_forest/KinlocFlamepawsRemains.lua

@@ -6,10 +6,12 @@
                    : 
 --]]
 dofile("SpawnScripts/Generic/MonsterCallouts/BaseSkeleton1.lua")
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
-    SetSpawnAnimation(NPC, 13016)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
+    SetSpawnAnimation(NPC, 13016)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(24 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(42 + dmgMod))

+ 4 - 2
server/SpawnScripts/Classic_forest/SornCopperholdsRemains.lua

@@ -6,10 +6,12 @@
                    : 
 --]]
 dofile("SpawnScripts/Generic/MonsterCallouts/BaseSkeleton1.lua")
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
-    SetSpawnAnimation(NPC, 13016)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
+    SetSpawnAnimation(NPC, 13016)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(15 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(26 + dmgMod))

+ 5 - 4
server/SpawnScripts/Classic_forest/TheBasaltWatcher.lua

@@ -5,19 +5,20 @@
     Script Purpose : Classic Version of the basalt watcher
                    : 
 --]]
-
+require "SpawnScripts/Generic/NPCModule"
 function hailed(NPC, Spawn)
+    
 end
 
 function respawn(NPC)
 	spawn(NPC)
 end
 
-
-function spawn(NPC)
+function spawn(NPC, Spawn)
+    dmgMod = GetStr(NPC)/10
+    Named(NPC)
 	SetPlayerProximityFunction(NPC, 15, "InRange", "LeaveRange")	    
     AddTimer(NPC,math.random(1260000, 2160000),"wakeup")            --random activation between 12 (~21min) and 24 (37min) Norrath/in-game hours
-    dmgMod = GetStr(NPC)/10
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(30 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(60 + dmgMod))

+ 4 - 2
server/SpawnScripts/Classic_forest/TinshenBrinthsRemains.lua

@@ -6,10 +6,12 @@
                    : 
 --]]
 dofile("SpawnScripts/Generic/MonsterCallouts/BaseSkeleton1.lua")
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
-    SetSpawnAnimation(NPC, 13016)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
+    SetSpawnAnimation(NPC, 13016)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(18 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(32 + dmgMod))

+ 4 - 2
server/SpawnScripts/Classic_forest/YesturaRhamreysRemains.lua

@@ -6,10 +6,12 @@
                    : 
 --]]
 dofile("SpawnScripts/Generic/MonsterCallouts/BaseSkeleton1.lua")
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
-    SetSpawnAnimation(NPC, 13016)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
+    SetSpawnAnimation(NPC, 13016)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(15 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(26 + dmgMod))

+ 4 - 64
server/SpawnScripts/Classic_forest/aRabidBadger.lua

@@ -5,75 +5,15 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(10 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(22 + dmgMod))
-
-ChooseMovement(NPC)
-end
-
-function ChooseMovement(NPC)
-	local route = math.random(1,4)
-	if route == 1 then
-	    RouteOne(NPC, Spawn)
-	elseif route == 2 then
-	    RouteTwo(NPC, Spawn)
-	elseif route == 3 then
-	    RouteThree(NPC, Spawn)
-	elseif route == 4 then
-	    RouteFour(NPC, Spawn)
-	end
-end
-
-function RouteOne(NPC, Spawn)
-    local X = GetX(NPC)
-	local Y = GetY(NPC)
-	local Z = GetZ(NPC)
-    MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,10))
-    MovementLoopAddLocation(NPC, X + 5, Y, Z, 2,math.random(5,10))
-	MovementLoopAddLocation(NPC, X + 5, Y, Z + 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X + 6, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X + 5, Y, Z + 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,10))
-end
-
-function RouteTwo(NPC, Spawn)
-    local X = GetX(NPC)
-	local Y = GetY(NPC)
-	local Z = GetZ(NPC)
-    MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,10))
-    MovementLoopAddLocation(NPC, X - 5, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X - 5, Y, Z - 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X - 6, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X - 5, Y, Z - 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X, Y, Z, 1, math.random(5,10))
-end
-
-function RouteThree(NPC, Spawn)
-    local X = GetX(NPC)
-	local Y = GetY(NPC)
-	local Z = GetZ(NPC)
-    MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X + 5, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X + 5, Y, Z - 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X + 6, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X + 5, Y, Z - 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,10))
-end
-
-function RouteFour(NPC, Spawn)
-    local X = GetX(NPC)
-	local Y = GetY(NPC)
-	local Z = GetZ(NPC)
-    MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X - 5, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X - 5, Y, Z + 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X - 6, Y, Z, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X - 5, Y, Z + 4, 2, math.random(5,10))
-	MovementLoopAddLocation(NPC, X, Y, Z, 2, math.random(5,10))
+    RandomMovement(NPC, Spawn, 6, -6, 2, 8, 15)
 end
 
 function respawn(NPC, Spawn)

+ 3 - 2
server/SpawnScripts/DownBelow_Classic/AFallenPrince.lua

@@ -5,13 +5,14 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(24 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(42 + dmgMod))
-
     SetSeeHide(NPC,1)
     SetSeeInvis(NPC,1)
 end

+ 3 - 1
server/SpawnScripts/DownBelow_Classic/ARottingVermin.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(15 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(26 + dmgMod))

+ 2 - 1
server/SpawnScripts/DownBelow_Classic/TheCreeper.lua

@@ -5,10 +5,11 @@
     Script Purpose : 
                    : 
 --]]
-
+require "SpawnScripts/Generic/NPCModule"
 
 function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(15 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(26 + dmgMod))

+ 3 - 1
server/SpawnScripts/DownBelow_Classic/TheCryptProtector.lua

@@ -5,9 +5,11 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
     dmgMod = GetStr(NPC)/10
+    Named(NPC)
     SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
     SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(15 + dmgMod)) 
     SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(26 + dmgMod))

+ 7 - 1
server/SpawnScripts/DownBelow_Classic/TheGroundsKeeper.lua

@@ -5,8 +5,14 @@
     Script Purpose : 
                    : 
 --]]
+require "SpawnScripts/Generic/NPCModule"
 
-function spawn(NPC)
+function spawn(NPC, Spawn)
+    dmgMod = GetStr(NPC)/10
+    Named(NPC)
+    SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
+    SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(30 + dmgMod)) 
+    SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(60 + dmgMod))
     SetSeeHide(NPC,1)
     SetSeeInvis(NPC,1)
     AddTimer(NPC, 6000,"waypoints")

+ 1 - 0
server/SpawnScripts/DownBelow_Classic/aBloodsaberCenterPatrol.lua

@@ -15,6 +15,7 @@ function spawn(NPC, Spawn)
     
     if GetSpawnID(NPC) == 8340015 then
         dmgMod = GetStr(NPC)/10
+        Named(NPC)
         SetInfoStructUInt(NPC, "override_primary_weapon", 1)        
         SetInfoStructUInt(NPC, "primary_weapon_damage_low", math.floor(12 + dmgMod)) 
         SetInfoStructUInt(NPC, "primary_weapon_damage_high", math.floor(24 + dmgMod))

部分文件因为文件数量过多而无法显示