Scripting: Quest: Troll Patrol: The Alchemist's Apprentice

This commit is contained in:
Malcrom
2013-06-17 20:52:41 -02:30
parent d163c58258
commit 14695b056a
3 changed files with 801 additions and 25 deletions

View File

@@ -2,23 +2,23 @@
DELETE FROM `creature_text` WHERE `entry`=28205;
INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
-- Events 1,2,3
(28205,0,0,'Quickly, get me some...',42,0,100,1,0,0,'Alchemist Finklestein'),
(28205,0,1,'I think it needs...',42,0,100,1,0,0,'Alchemist Finklestein'),
(28205,0,2,'Find me some...',42,0,100,1,0,0,'Alchemist Finklestein'),
(28205,0,3,'It simply must have some...',42,0,100,1,0,0,'Alchemist Finklestein'),
(28205,0,4,'We need some...',42,0,100,1,0,0,'Alchemist Finklestein'),
(28205,0,5,'It simply must have some...',42,0,100,1,0,0,'Alchemist Finklestein'),
(28205,0,0,'Quickly, get me some...',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,0,1,'I think it needs...',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,0,2,'Find me some...',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,0,3,'It simply must have some...',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,0,4,'We need some...',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,0,5,'It simply must have some...',42,0,100,0,0,0,'Alchemist Finklestein'),
-- Event 4
(28205,1,0,'I think it''s time for...',42,0,100,1,0,0,'Alchemist Finklestein'),
(28205,1,1,'Next, we''ll need...',42,0,100,1,0,0,'Alchemist Finklestein'),
(28205,1,2,'Tastes like it needs more....',42,0,100,1,0,0,'Alchemist Finklestein'),
(28205,1,3,'Alright, now find me some...',42,0,100,1,0,0,'Alchemist Finklestein'),
(28205,1,0,'I think it''s time for...',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,1,1,'Next, we''ll need...',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,1,2,'Tastes like it needs more....',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,1,3,'Alright, now find me some...',42,0,100,0,0,0,'Alchemist Finklestein'),
-- Event 5
(28205,2,0,'Coming along nicely, but still needs...',42,0,100,1,0,0,'Alchemist Finklestein'),
(28205,2,1,'Before it thickens, we must add...',42,0,100,1,0,0,'Alchemist Finklestein'),
(28205,2,0,'Coming along nicely, but still needs...',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,2,1,'Before it thickens, we must add...',42,0,100,0,0,0,'Alchemist Finklestein'),
-- Event 6
(28205,3,0,'Before it boils over, I need...',42,0,100,1,0,0,'Alchemist Finklestein'),
(28205,3,1,'It''s thickening! Quickly, get some...',42,0,100,1,0,0,'Alchemist Finklestein'),
(28205,3,0,'Before it boils over, I need...',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,3,1,'It''s thickening! Quickly, get some...',42,0,100,0,0,0,'Alchemist Finklestein'),
-- Fail
(28205,4,0,'You''re too late. I must start again from the beginning....',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,4,1,'No! The serum is ruined!',42,0,100,0,0,0,'Alchemist Finklestein'),
@@ -38,10 +38,9 @@ INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`pr
(28205,17,0,'Prismatic Mojo!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,18,0,'Raptor Claw!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,19,0,'Amberseed!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,20,0,'Burning Ice!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,21,0,'Shrunken Dragon''s Claw!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,22,0,'Chilled Serpent Mucus!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,23,0,'Crystallized Hogsnot!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,24,0,'Crushed Basilisk Crystals!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,25,0,'Trollbane!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,26,0,'Frozen Spider Ichor!',42,0,100,0,0,0,'Alchemist Finklestein');
(28205,20,0,'Shrunken Dragon''s Claw!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,21,0,'Chilled Serpent Mucus!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,22,0,'Crystallized Hogsnot!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,23,0,'Crushed Basilisk Crystals!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,24,0,'Trollbane!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,25,0,'Frozen Spider Ichor!',42,0,100,0,0,0,'Alchemist Finklestein');

View File

@@ -0,0 +1,86 @@
-- Add option conditions for Alchemist Finklestein
DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId` IN (15) AND `SourceGroup` IN (9668) AND `SourceEntry` IN (0) AND `ConditionValue1` IN (51216);
INSERT INTO `conditions` (`SourceTypeOrReferenceId`,`SourceGroup`,`SourceEntry`,`ElseGroup`,`ConditionTypeOrReference`,`ConditionValue1`,`ConditionValue2`,`ConditionValue3`,`NegativeCondition`,`ErrorTextId`,`ScriptName`,`Comment`) VALUES
(15,9668,0,1,1,51216,0,0,1,0,'','Alchemist Finklestein - Show gossip option only if player does not have aura 51216');
UPDATE `creature_template` SET `AIName`= '',`ScriptName`= 'npc_alchemist_finklestein' WHERE `entry`=28205;
UPDATE `gameobject_template` SET `ScriptName`= 'go_finklesteins_cauldron' WHERE `entry`=190498;
DELETE FROM `spell_script_names` WHERE `spell_id` IN (51134,51105,51107,51015,51154,51157,51046,51018,51055,51057,
51059,51062,51064,51067,51069,51072,51077,51079,51081,51083,51085,51087,51091,51093,51095,51097,51100,51102);
INSERT INTO `spell_script_names` (`spell_id`,`ScriptName`) VALUES
(51134,'spell_random_ingredient_easy'),
(51105,'spell_random_ingredient_medium'),
(51107,'spell_random_ingredient_hard'),
(51015,'spell_random_ingredient_aura'),
(51154,'spell_random_ingredient_aura'),
(51157,'spell_random_ingredient_aura'),
(51046,'spell_pot_check'),
(51018,'spell_fetch_ingredient_aura'),
(51055,'spell_fetch_ingredient_aura'),
(51057,'spell_fetch_ingredient_aura'),
(51059,'spell_fetch_ingredient_aura'),
(51062,'spell_fetch_ingredient_aura'),
(51064,'spell_fetch_ingredient_aura'),
(51067,'spell_fetch_ingredient_aura'),
(51069,'spell_fetch_ingredient_aura'),
(51072,'spell_fetch_ingredient_aura'),
(51077,'spell_fetch_ingredient_aura'),
(51079,'spell_fetch_ingredient_aura'),
(51081,'spell_fetch_ingredient_aura'),
(51083,'spell_fetch_ingredient_aura'),
(51085,'spell_fetch_ingredient_aura'),
(51087,'spell_fetch_ingredient_aura'),
(51091,'spell_fetch_ingredient_aura'),
(51093,'spell_fetch_ingredient_aura'),
(51095,'spell_fetch_ingredient_aura'),
(51097,'spell_fetch_ingredient_aura'),
(51100,'spell_fetch_ingredient_aura'),
(51102,'spell_fetch_ingredient_aura');
-- Add texts for Alchemist Finklestein
DELETE FROM `creature_text` WHERE `entry`=28205;
INSERT INTO `creature_text` (`entry`,`groupid`,`id`,`text`,`type`,`language`,`probability`,`emote`,`duration`,`sound`,`comment`) VALUES
-- Events 1,2,3
(28205,0,0,'Quickly, get me some...',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,0,1,'I think it needs...',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,0,2,'Find me some...',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,0,3,'It simply must have some...',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,0,4,'We need some...',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,0,5,'It simply must have some...',42,0,100,0,0,0,'Alchemist Finklestein'),
-- Event 4
(28205,1,0,'I think it''s time for...',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,1,1,'Next, we''ll need...',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,1,2,'Tastes like it needs more....',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,1,3,'Alright, now find me some...',42,0,100,0,0,0,'Alchemist Finklestein'),
-- Event 5
(28205,2,0,'Coming along nicely, but still needs...',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,2,1,'Before it thickens, we must add...',42,0,100,0,0,0,'Alchemist Finklestein'),
-- Event 6
(28205,3,0,'Before it boils over, I need...',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,3,1,'It''s thickening! Quickly, get some...',42,0,100,0,0,0,'Alchemist Finklestein'),
-- Fail
(28205,4,0,'You''re too late. I must start again from the beginning....',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,4,1,'No! The serum is ruined!',42,0,100,0,0,0,'Alchemist Finklestein'),
-- Item request
(28205,5,0,'Knotroot!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,6,0,'Pickled Eagle Egg!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,7,0,'Speckled Guano!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,8,0,'Withered Batwing!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,9,0,'Seasoned Slider Cider!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,10,0,'Pulverized Gargoyle Teeth!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,11,0,'Muddy Mire Maggot!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,12,0,'Spiky Spider Egg!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,13,0,'Hairy Herring Head!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,14,0,'Putrid Pirate Perspiration!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,15,0,'Icecrown Bottled Water!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,16,0,'Wasp''s Wings!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,17,0,'Prismatic Mojo!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,18,0,'Raptor Claw!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,19,0,'Amberseed!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,20,0,'Shrunken Dragon''s Claw!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,21,0,'Chilled Serpent Mucus!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,22,0,'Crystallized Hogsnot!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,23,0,'Crushed Basilisk Crystals!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,24,0,'Trollbane!',42,0,100,0,0,0,'Alchemist Finklestein'),
(28205,25,0,'Frozen Spider Ichor!',42,0,100,0,0,0,'Alchemist Finklestein');

View File

@@ -21,12 +21,15 @@
#include "ScriptedEscortAI.h"
#include "Player.h"
#include "SpellInfo.h"
#include "SpellScript.h"
#include "SpellAuras.h"
#include "SpellAuraEffects.h"
/*####
## npc_drakuru_shackles
####*/
enum eDrakuruShackles
enum DrakuruShackles
{
SPELL_LEFT_CHAIN = 59951,
SPELL_RIGHT_CHAIN = 59952,
@@ -34,7 +37,7 @@ enum eDrakuruShackles
SPELL_FREE_RAGECLAW = 55223,
NPC_RAGECLAW = 29686,
QUEST_TROLLS_IS_GONE_CRAZY = 12861,
QUEST_TROLLS_IS_GONE_CRAZY = 12861
};
class npc_drakuru_shackles : public CreatureScript
@@ -115,7 +118,7 @@ public:
## npc_captured_rageclaw
####*/
enum eRageclaw
enum Rageclaw
{
SPELL_UNSHACKLED = 55085,
SPELL_KNEEL = 39656
@@ -1385,7 +1388,7 @@ public:
## go_scourge_enclosure
######*/
enum eScourgeEnclosure
enum ScourgeEnclosure
{
QUEST_OUR_ONLY_HOPE = 12916,
NPC_GYMER_DUMMY = 29928 //from quest template
@@ -1413,6 +1416,686 @@ public:
}
};
/*######
## Quest: Troll Patrol: The Alchemist's Apprentice
######*/
enum Finklestein
{
// Creatre
NPC_FINKLESTEIN = 28205,
// Quest
QUEST_THE_ALCHEMIST_APPRENTICE_DAILY = 12541,
// Spells
SPELL_ALCHEMIST_APPRENTICE_INVISBUFF = 51216,
SPELL_RANDOM_INGREDIENT_EASY_AURA = 51015,
SPELL_RANDOM_INGREDIENT_MEDIUM_AURA = 51154,
SPELL_RANDOM_INGREDIENT_HARD_AURA = 51157,
SPELL_RANDOM_INGREDIENT_EASY = 51134,
SPELL_RANDOM_INGREDIENT_MEDIUM = 51105,
SPELL_RANDOM_INGREDIENT_HARD = 51107,
SPELL_NEXT_INGREDIENT = 51049,
SPELL_POT_CHECK = 51046,
SPELL_THROW_INGREDIENT = 51025,
SPELL_KILL_CREDIT = 51111,
// Spell Fetch Easy
SPELL_FETCH_KNOTROOT = 51018,
SPELL_FETCH_PICKLED_EAGLE_EGG = 51055,
SPELL_FETCH_SPECKLED_GUANO = 51057,
SPELL_FETCH_WITHERED_BATWING = 51059,
SPELL_FETCH_SEASONED_SLIDER_CIDER = 51062,
SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH = 51064,
SPELL_FETCH_MUDDY_MIRE_MAGGOT = 51067,
SPELL_FETCH_SPIKY_SPIDER_EGG = 51069,
SPELL_FETCH_HAIRY_HERRING_HEAD = 51072,
SPELL_FETCH_PUTRID_PIRATE_PERSPIRATION = 51077,
SPELL_FETCH_ICECROWN_BOTTLED_WATER = 51079,
// Spell Have Easy
SPELL_HAVE_KNOTROOT = 51047,
SPELL_HAVE_PICKLED_EAGLE_EGG = 51056,
SPELL_HAVE_SPECKLED_GUANO = 51058,
SPELL_HAVE_WITHERED_BATWING = 51060,
SPELL_HAVE_SEASONED_SLIDER_CIDER = 51063,
SPELL_HAVE_PULVERIZED_GARGOYLE_TEETH = 51065,
SPELL_HAVE_MUDDY_MIRE_MAGGOT = 51068,
SPELL_HAVE_SPIKY_SPIDER_EGG = 51070,
SPELL_HAVE_HAIRY_HERRING_HEAD = 51075,
SPELL_HAVE_PUTRID_PIRATE_PERSPIRATION = 51078,
SPELL_HAVE_ICECROWN_BOTTLED_WATER = 51080,
// Spell Fetch Medium
SPELL_FETCH_WASPS_WINGS = 51081,
SPELL_FETCH_PRISMATIC_MOJO = 51083,
SPELL_FETCH_RAPTOR_CLAW = 51085,
SPELL_FETCH_AMBERSEED = 51087,
SPELL_FETCH_SHRUNKEN_DRAGONS_CLAW = 51091,
// Spell Have Medium
SPELL_HAVE_WASPS_WINGS = 51082,
SPELL_HAVE_PRISMATIC_MOJO = 51084,
SPELL_HAVE_RAPTOR_CLAW = 51086,
SPELL_HAVE_AMBERSEED = 51088,
SPELL_HAVE_SHRUNKEN_DRAGONS_CLAW = 51092,
// Spell Fetch Hard
SPELL_FETCH_CHILLED_SERPENT_MUCUS = 51093,
SPELL_FETCH_CRYSTALLIZED_HOGSNOT = 51095,
SPELL_FETCH_CRUSHED_BASILISK_CRYSTALS = 51097,
SPELL_FETCH_TROLLBANE = 51100,
SPELL_FETCH_FROZEN_SPIDER_ICHOR = 51102,
// Spell Have Hard
SPELL_HAVE_CHILLED_SERPENT_MUCUS = 51094,
SPELL_HAVE_CRYSTALLIZED_HOGSNOT = 51096,
SPELL_HAVE_CRUSHED_BASILISK_CRYSTALS = 51098,
SPELL_HAVE_TROLLBANE = 51101,
SPELL_HAVE_FROZEN_SPIDER_ICHOR = 51104,
// Text
SAY_EASY_123 = 0,
SAY_MEDIUM_4 = 1,
SAY_MEDIUM_5 = 2,
SAY_HARD_6 = 3,
SAY_RUINED = 4,
// Text Easy
SAY_KNOTROOT = 5,
SAY_PICKLED_EAGLE_EGG = 6,
SAY_SPECKLED_GUANO = 7,
SAY_WITHERED_BATWING = 8,
SAY_SEASONED_SLIDER_CIDER = 9,
SAY_PULVERIZED_GARGOYLE_TEETH = 10,
SAY_MUDDY_MIRE_MAGGOT = 11,
SAY_SPIKY_SPIDER_EGG = 12,
SAY_HAIRY_HERRING_HEAD = 13,
SAY_PUTRID_PIRATE_PERSPIRATION = 14,
SAY_ICECROWN_BOTTLED_WATER = 15,
// Text Medium
SAY_WASPS_WINGS = 16,
SAY_PRISMATIC_MOJO = 17,
SAY_RAPTOR_CLAW = 18,
SAY_AMBERSEED = 19,
SAY_SHRUNKEN_DRAGONS_CLAW = 20,
// Text Hard
SAY_CHILLED_SERPENT_MUCUS = 21,
SAY_CRYSTALLIZED_HOGSNOT = 22,
SAY_CRUSHED_BASILISK_CRYSTALS = 23,
SAY_TROLLBANE = 24,
SAY_FROZEN_SPIDER_ICHOR = 25
};
enum FinklesteinEvents
{
EVENT_TURN_TO_POT = 1,
EVENT_TURN_BACK = 2,
EVENT_EASY_123 = 3,
EVENT_MEDIUM_4 = 4,
EVENT_MEDIUM_5 = 5,
EVENT_HARD_6 = 6
};
class npc_alchemist_finklestein : public CreatureScript
{
public:
npc_alchemist_finklestein() : CreatureScript("npc_alchemist_finklestein") { }
struct npc_alchemist_finklesteinAI : public ScriptedAI
{
npc_alchemist_finklesteinAI(Creature* creature) : ScriptedAI(creature) { }
void Reset()
{
_events.ScheduleEvent(EVENT_TURN_TO_POT, urand(15000, 26000));
}
void SetData(uint32 Type, uint32 Data)
{
if (Type == 1 && Data == 1)
switch (_getingredienttry)
{
case 2:
case 3:
_events.ScheduleEvent(EVENT_EASY_123, 100);
break;
case 4:
_events.ScheduleEvent(EVENT_MEDIUM_4, 100);
break;
case 5:
_events.ScheduleEvent(EVENT_MEDIUM_5, 100);
break;
case 6:
_events.ScheduleEvent(EVENT_HARD_6, 100);
break;
default:
break;
}
}
void UpdateAI(uint32 diff)
{
_events.Update(diff);
while (uint32 eventId = _events.ExecuteEvent())
{
switch (eventId)
{
case EVENT_TURN_TO_POT:
me->SetFacingTo(6.230825f);
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING_NO_SHEATHE);
_events.ScheduleEvent(EVENT_TURN_BACK, 11000);
break;
case EVENT_TURN_BACK:
me->SetFacingTo(4.886922f);
me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE);
_events.ScheduleEvent(EVENT_TURN_TO_POT, urand(25000, 41000));
break;
case EVENT_EASY_123:
if (Player* player = Unit::GetPlayer(*me, _playerGUID))
{
Talk(SAY_EASY_123, _playerGUID);
DoCast(player, SPELL_RANDOM_INGREDIENT_EASY_AURA);
++_getingredienttry;
}
break;
case EVENT_MEDIUM_4:
if (Player* player = Unit::GetPlayer(*me, _playerGUID))
{
Talk(SAY_MEDIUM_4, _playerGUID);
DoCast(player, SPELL_RANDOM_INGREDIENT_MEDIUM_AURA);
++_getingredienttry;
}
break;
case EVENT_MEDIUM_5:
if (Player* player = Unit::GetPlayer(*me, _playerGUID))
{
Talk(SAY_MEDIUM_5, _playerGUID);
DoCast(player, SPELL_RANDOM_INGREDIENT_MEDIUM_AURA);
++_getingredienttry;
}
break;
case EVENT_HARD_6:
if (Player* player = Unit::GetPlayer(*me, _playerGUID))
{
Talk(SAY_HARD_6, _playerGUID);
DoCast(player, SPELL_RANDOM_INGREDIENT_HARD_AURA);
++_getingredienttry;
}
break;
default:
break;
}
}
}
void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/)
{
player->CLOSE_GOSSIP_MENU();
DoCast(player, SPELL_ALCHEMIST_APPRENTICE_INVISBUFF);
_playerGUID = player->GetGUID();
_getingredienttry = 1;
_events.ScheduleEvent(EVENT_EASY_123, 100);
}
private:
EventMap _events;
uint64 _playerGUID;
uint8 _getingredienttry;
};
CreatureAI* GetAI(Creature* creature) const
{
return new npc_alchemist_finklesteinAI(creature);
}
};
class go_finklesteins_cauldron : public GameObjectScript
{
public:
go_finklesteins_cauldron() : GameObjectScript("go_finklesteins_cauldron") { }
bool OnGossipHello(Player* player, GameObject* go)
{
player->CastSpell(player, SPELL_POT_CHECK);
return true;
}
};
/*#####
# spell_random_ingredient_aura
#####*/
class spell_random_ingredient_aura : public SpellScriptLoader
{
public: spell_random_ingredient_aura() : SpellScriptLoader("spell_random_ingredient_aura") { }
class spell_random_ingredient_aura_AuraScript : public AuraScript
{
PrepareAuraScript(spell_random_ingredient_aura_AuraScript);
bool Validate(SpellInfo const* /*spellEntry*/)
{
if (!sSpellMgr->GetSpellInfo(SPELL_RANDOM_INGREDIENT_EASY) || !sSpellMgr->GetSpellInfo(SPELL_RANDOM_INGREDIENT_MEDIUM) || !sSpellMgr->GetSpellInfo(SPELL_RANDOM_INGREDIENT_HARD))
return false;
return true;
}
void PeriodicTick(AuraEffect const* aurEff)
{
switch (GetSpellInfo()->Id)
{
case SPELL_RANDOM_INGREDIENT_EASY_AURA:
GetTarget()->CastSpell(GetTarget(), SPELL_RANDOM_INGREDIENT_EASY);
break;
case SPELL_RANDOM_INGREDIENT_MEDIUM_AURA:
GetTarget()->CastSpell(GetTarget(), SPELL_RANDOM_INGREDIENT_MEDIUM);
break;
case SPELL_RANDOM_INGREDIENT_HARD_AURA:
GetTarget()->CastSpell(GetTarget(), SPELL_RANDOM_INGREDIENT_HARD);
break;
}
}
void Register()
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_random_ingredient_aura_AuraScript::PeriodicTick, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY);
}
};
AuraScript* GetAuraScript() const
{
return new spell_random_ingredient_aura_AuraScript();
}
};
/*#####
# spell_random_ingredient_easy
#####*/
class spell_random_ingredient_easy : public SpellScriptLoader
{
public: spell_random_ingredient_easy() : SpellScriptLoader("spell_random_ingredient_easy") { }
class spell_random_ingredient_easy_SpellScript : public SpellScript
{
PrepareSpellScript(spell_random_ingredient_easy_SpellScript);
bool Validate(SpellInfo const* /*spellEntry*/)
{
if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_KNOTROOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PICKLED_EAGLE_EGG) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SPECKLED_GUANO) ||
!sSpellMgr->GetSpellInfo(SPELL_FETCH_WITHERED_BATWING) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SEASONED_SLIDER_CIDER) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH) ||
!sSpellMgr->GetSpellInfo(SPELL_FETCH_MUDDY_MIRE_MAGGOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SPIKY_SPIDER_EGG) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_HAIRY_HERRING_HEAD) ||
!sSpellMgr->GetSpellInfo(SPELL_FETCH_PUTRID_PIRATE_PERSPIRATION) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_ICECROWN_BOTTLED_WATER))
return false;
return true;
}
void HandleScriptEffect(SpellEffIndex /* effIndex */)
{
if (Player* player = GetHitPlayer())
{
uint8 spelltocast = urand(1, 11);
Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f);
if (!finklestein)
return;
switch (spelltocast)
{
case 1:
finklestein->CastSpell(player, SPELL_FETCH_KNOTROOT, true, NULL);
finklestein->AI()->Talk(SAY_KNOTROOT, player->GetGUID());
break;
case 2:
finklestein->CastSpell(player, SPELL_FETCH_PICKLED_EAGLE_EGG, true, NULL);
finklestein->AI()->Talk(SAY_PICKLED_EAGLE_EGG, player->GetGUID());
break;
case 3:
finklestein->CastSpell(player, SPELL_FETCH_SPECKLED_GUANO, true, NULL);
finklestein->AI()->Talk(SAY_SPECKLED_GUANO, player->GetGUID());
break;
case 4:
finklestein->CastSpell(player, SPELL_FETCH_WITHERED_BATWING, true, NULL);
finklestein->AI()->Talk(SAY_WITHERED_BATWING, player->GetGUID());
break;
case 5:
finklestein->CastSpell(player, SPELL_FETCH_SEASONED_SLIDER_CIDER, true, NULL);
finklestein->AI()->Talk(SAY_SEASONED_SLIDER_CIDER, player->GetGUID());
break;
case 6:
finklestein->CastSpell(player, SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH, true, NULL);
finklestein->AI()->Talk(SAY_PULVERIZED_GARGOYLE_TEETH, player->GetGUID());
break;
case 7:
finklestein->CastSpell(player, SPELL_FETCH_MUDDY_MIRE_MAGGOT, true, NULL);
finklestein->AI()->Talk(SAY_MUDDY_MIRE_MAGGOT, player->GetGUID());
break;
case 8:
finklestein->CastSpell(player, SPELL_FETCH_SPIKY_SPIDER_EGG, true, NULL);
finklestein->AI()->Talk(SAY_SPIKY_SPIDER_EGG, player->GetGUID());
break;
case 9:
finklestein->CastSpell(player, SPELL_FETCH_HAIRY_HERRING_HEAD, true, NULL);
finklestein->AI()->Talk(SAY_HAIRY_HERRING_HEAD, player->GetGUID());
break;
case 10:
finklestein->CastSpell(player, SPELL_FETCH_PUTRID_PIRATE_PERSPIRATION, true, NULL);
finklestein->AI()->Talk(SAY_PUTRID_PIRATE_PERSPIRATION, player->GetGUID());
break;
case 11:
finklestein->CastSpell(player, SPELL_FETCH_ICECROWN_BOTTLED_WATER, true, NULL);
finklestein->AI()->Talk(SAY_ICECROWN_BOTTLED_WATER, player->GetGUID());
break;
default:
break;
}
}
}
void Register()
{
OnEffectHitTarget += SpellEffectFn(spell_random_ingredient_easy_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const
{
return new spell_random_ingredient_easy_SpellScript();
}
};
/*#####
# spell_random_ingredient_medium
#####*/
class spell_random_ingredient_medium : public SpellScriptLoader
{
public: spell_random_ingredient_medium() : SpellScriptLoader("spell_random_ingredient_medium") { }
class spell_random_ingredient_medium_SpellScript : public SpellScript
{
PrepareSpellScript(spell_random_ingredient_medium_SpellScript);
bool Validate(SpellInfo const* /*spellEntry*/)
{
if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_WASPS_WINGS) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PRISMATIC_MOJO) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_RAPTOR_CLAW) ||
!sSpellMgr->GetSpellInfo(SPELL_FETCH_AMBERSEED) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SHRUNKEN_DRAGONS_CLAW))
return false;
return true;
}
void HandleScriptEffect(SpellEffIndex /* effIndex */)
{
if (Player* player = GetHitPlayer())
{
uint8 spelltocast = urand(1, 5);
Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f);
if (!finklestein)
return;
switch (spelltocast)
{
case 1:
finklestein->CastSpell(player, SPELL_FETCH_WASPS_WINGS, true, NULL);
finklestein->AI()->Talk(SAY_WASPS_WINGS, player->GetGUID());
break;
case 2:
finklestein->CastSpell(player, SPELL_FETCH_PRISMATIC_MOJO, true, NULL);
finklestein->AI()->Talk(SAY_PRISMATIC_MOJO, player->GetGUID());
break;
case 3:
finklestein->CastSpell(player, SPELL_FETCH_RAPTOR_CLAW, true, NULL);
finklestein->AI()->Talk(SAY_RAPTOR_CLAW, player->GetGUID());
break;
case 4:
finklestein->CastSpell(player, SPELL_FETCH_AMBERSEED, true, NULL);
finklestein->AI()->Talk(SAY_AMBERSEED, player->GetGUID());
break;
case 5:
finklestein->CastSpell(player, SPELL_FETCH_SHRUNKEN_DRAGONS_CLAW, true, NULL);
finklestein->AI()->Talk(SAY_SHRUNKEN_DRAGONS_CLAW, player->GetGUID());
break;
default:
break;
}
}
}
void Register()
{
OnEffectHitTarget += SpellEffectFn(spell_random_ingredient_medium_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const
{
return new spell_random_ingredient_medium_SpellScript();
}
};
/*#####
# spell_random_ingredient_hard
#####*/
class spell_random_ingredient_hard : public SpellScriptLoader
{
public: spell_random_ingredient_hard() : SpellScriptLoader("spell_random_ingredient_hard") { }
class spell_random_ingredient_hard_SpellScript : public SpellScript
{
PrepareSpellScript(spell_random_ingredient_hard_SpellScript);
bool Validate(SpellInfo const* /*spellEntry*/)
{
if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_CHILLED_SERPENT_MUCUS) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_CRYSTALLIZED_HOGSNOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_CRUSHED_BASILISK_CRYSTALS) ||
!sSpellMgr->GetSpellInfo(SPELL_FETCH_TROLLBANE) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_FROZEN_SPIDER_ICHOR))
return false;
return true;
}
void HandleScriptEffect(SpellEffIndex /* effIndex */)
{
if (Player* player = GetHitPlayer())
{
uint8 spelltocast = urand(1, 5);
Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f);
if (!finklestein)
return;
switch (spelltocast)
{
case 1:
finklestein->CastSpell(player, SPELL_FETCH_CHILLED_SERPENT_MUCUS, true, NULL);
finklestein->AI()->Talk(SAY_CHILLED_SERPENT_MUCUS, player->GetGUID());
break;
case 2:
finklestein->CastSpell(player, SPELL_FETCH_CRYSTALLIZED_HOGSNOT, true, NULL);
finklestein->AI()->Talk(SAY_CRYSTALLIZED_HOGSNOT, player->GetGUID());
break;
case 3:
finklestein->CastSpell(player, SPELL_FETCH_CRUSHED_BASILISK_CRYSTALS, true, NULL);
finklestein->AI()->Talk(SAY_CRUSHED_BASILISK_CRYSTALS, player->GetGUID());
break;
case 4:
finklestein->CastSpell(player, SPELL_FETCH_TROLLBANE, true, NULL);
finklestein->AI()->Talk(SAY_TROLLBANE, player->GetGUID());
break;
case 5:
finklestein->CastSpell(player, SPELL_FETCH_FROZEN_SPIDER_ICHOR, true, NULL);
finklestein->AI()->Talk(SAY_FROZEN_SPIDER_ICHOR, player->GetGUID());
break;
default:
break;
}
}
}
void Register()
{
OnEffectHitTarget += SpellEffectFn(spell_random_ingredient_hard_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const
{
return new spell_random_ingredient_hard_SpellScript();
}
};
/*#####
# spell_pot_check
#####*/
uint32 const FetchSpells[21] [4] =
{
// { Fetch spell, Have spell, Item, Text }
{ 51018, 51047, 38338, 6 }, // Knotroot
{ 51055, 51056, 38341, 7 }, // Pickled Eagle Egg
{ 51057, 51058, 38337, 8 }, // Speckled Guano
{ 51059, 51060, 38339, 9 }, // Withered Batwing
{ 51062, 51063, 38381, 10 }, // Seasoned Slider Cider
{ 51064, 51065, 38384, 11 }, // Pulverized Gargoyle Teeth
{ 51067, 51068, 38386, 12 }, // Muddy Mire Maggot
{ 51069, 51070, 38393, 13 }, // Spiky Spider Egg
{ 51072, 51075, 38396, 14 }, // Hairy Herring Head
{ 51077, 51078, 38397, 15 }, // Putrid Pirate Perspiration
{ 51079, 51080, 38398, 16 }, // Icecrown Bottled Water
{ 51081, 51082, 38369, 17 }, // Wasp's Wings
{ 51083, 51084, 38343, 18 }, // Prismatic Mojo
{ 51085, 51086, 38370, 19 }, // Raptor Claw
{ 51087, 51088, 38340, 20 }, // Amberseed
{ 51091, 51092, 38344, 21 }, // Shrunken Dragon's Claw
{ 51093, 51094, 38346, 22 }, // Chilled Serpent Mucus
{ 51095, 51096, 38336, 23 }, // Crystallized Hogsnot
{ 51097, 51098, 38379, 24 }, // Crushed Basilisk Crystals
{ 51100, 51101, 38342, 25 }, // Trollbane
{ 51102, 51104, 38345, 26 } // Frozen Spider Ichor
};
class spell_pot_check : public SpellScriptLoader
{
public: spell_pot_check() : SpellScriptLoader("spell_pot_check") { }
class spell_pot_check_SpellScript : public SpellScript
{
PrepareSpellScript(spell_pot_check_SpellScript);
bool Validate(SpellInfo const* /*spellEntry*/)
{
if (!sSpellMgr->GetSpellInfo(SPELL_FETCH_KNOTROOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PICKLED_EAGLE_EGG) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SPECKLED_GUANO) ||
!sSpellMgr->GetSpellInfo(SPELL_FETCH_WITHERED_BATWING) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SEASONED_SLIDER_CIDER) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_PULVERIZED_GARGOYLE_TEETH) ||
!sSpellMgr->GetSpellInfo(SPELL_FETCH_MUDDY_MIRE_MAGGOT) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_SPIKY_SPIDER_EGG) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_HAIRY_HERRING_HEAD) ||
!sSpellMgr->GetSpellInfo(SPELL_FETCH_PUTRID_PIRATE_PERSPIRATION) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_ICECROWN_BOTTLED_WATER) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_WASPS_WINGS) ||
!sSpellMgr->GetSpellInfo(SPELL_FETCH_PRISMATIC_MOJO) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_RAPTOR_CLAW) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_AMBERSEED) ||
!sSpellMgr->GetSpellInfo(SPELL_FETCH_SHRUNKEN_DRAGONS_CLAW) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_CHILLED_SERPENT_MUCUS) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_CRYSTALLIZED_HOGSNOT) ||
!sSpellMgr->GetSpellInfo(SPELL_FETCH_CRUSHED_BASILISK_CRYSTALS) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_TROLLBANE) || !sSpellMgr->GetSpellInfo(SPELL_FETCH_FROZEN_SPIDER_ICHOR) ||
!sSpellMgr->GetSpellInfo(SPELL_HAVE_KNOTROOT) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_PICKLED_EAGLE_EGG) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_SPECKLED_GUANO) ||
!sSpellMgr->GetSpellInfo(SPELL_HAVE_WITHERED_BATWING) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_SEASONED_SLIDER_CIDER) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_PULVERIZED_GARGOYLE_TEETH) ||
!sSpellMgr->GetSpellInfo(SPELL_HAVE_MUDDY_MIRE_MAGGOT) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_SPIKY_SPIDER_EGG) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_HAIRY_HERRING_HEAD) ||
!sSpellMgr->GetSpellInfo(SPELL_HAVE_PUTRID_PIRATE_PERSPIRATION) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_ICECROWN_BOTTLED_WATER) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_WASPS_WINGS) ||
!sSpellMgr->GetSpellInfo(SPELL_HAVE_PRISMATIC_MOJO) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_RAPTOR_CLAW) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_AMBERSEED) ||
!sSpellMgr->GetSpellInfo(SPELL_HAVE_SHRUNKEN_DRAGONS_CLAW) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_CHILLED_SERPENT_MUCUS) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_CRYSTALLIZED_HOGSNOT) ||
!sSpellMgr->GetSpellInfo(SPELL_HAVE_CRUSHED_BASILISK_CRYSTALS) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_TROLLBANE) || !sSpellMgr->GetSpellInfo(SPELL_HAVE_FROZEN_SPIDER_ICHOR))
return false;
return true;
}
void HandleScriptEffect(SpellEffIndex /* effIndex */)
{
if (Player* player = GetHitPlayer())
{
for (uint8 i = 0; i < 21; ++i)
{
if(player->HasAura(FetchSpells[i] [0]))
{
player->CastSpell(player, SPELL_THROW_INGREDIENT);
player->RemoveAura(FetchSpells[i] [0]);
if(player->HasAura(FetchSpells[i] [1]))
{
player->RemoveAura(FetchSpells[i] [1]);
player->DestroyItemCount(FetchSpells[i] [2], 1, true);
if (i < 15)
{
if (Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f))
finklestein->AI()->SetData(1, 1);
return;
}
else
{
if (player->GetQuestStatus(QUEST_THE_ALCHEMIST_APPRENTICE_DAILY) == QUEST_STATUS_INCOMPLETE)
{
player->RemoveAura(SPELL_ALCHEMIST_APPRENTICE_INVISBUFF);
player->CastSpell(player, SPELL_KILL_CREDIT);
}
}
}
else
{
RemoveItems(player);
player->RemoveAura(SPELL_ALCHEMIST_APPRENTICE_INVISBUFF);
if (Creature* finklestein = GetClosestCreatureWithEntry(player, NPC_FINKLESTEIN, 25.0f))
finklestein->AI()->Talk(SAY_RUINED, player->GetGUID());
return;
}
}
}
}
}
void RemoveItems(Player* player)
{
for (uint8 i = 0; i < 21; ++i)
if (player->HasItemCount(FetchSpells[i] [2], 1, true))
player->DestroyItemCount(FetchSpells[i] [2], 1, true);
}
void Register()
{
OnEffectHitTarget += SpellEffectFn(spell_pot_check_SpellScript::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const
{
return new spell_pot_check_SpellScript();
}
};
/*#####
# spell_fetch_ingredient_aura
#####*/
class spell_fetch_ingredient_aura : public SpellScriptLoader
{
public: spell_fetch_ingredient_aura() : SpellScriptLoader("spell_fetch_ingredient_aura") { }
class spell_fetch_ingredient_aura_AuraScript : public AuraScript
{
PrepareAuraScript(spell_fetch_ingredient_aura_AuraScript);
void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/)
{
if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE)
if (Unit* target = GetTarget())
if (GetTargetApplication()->GetRemoveMode() == AURA_REMOVE_BY_EXPIRE)
if (target->HasAura(SPELL_ALCHEMIST_APPRENTICE_INVISBUFF))
if (Creature* finklestein = GetClosestCreatureWithEntry(target, NPC_FINKLESTEIN, 100.0f))
{
target->RemoveAura(SPELL_ALCHEMIST_APPRENTICE_INVISBUFF);
finklestein->AI()->Talk(SAY_RUINED, target->GetGUID());
}
}
void Register()
{
OnEffectRemove += AuraEffectRemoveFn(spell_fetch_ingredient_aura_AuraScript::OnRemove, EFFECT_0, SPELL_AURA_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
AuraScript* GetAuraScript() const
{
return new spell_fetch_ingredient_aura_AuraScript();
}
};
void AddSC_zuldrak()
{
new npc_drakuru_shackles;
@@ -1428,4 +2111,12 @@ void AddSC_zuldrak()
new npc_elemental_lord;
new npc_fiend_elemental;
new go_scourge_enclosure;
new npc_alchemist_finklestein;
new go_finklesteins_cauldron;
new spell_random_ingredient_aura;
new spell_random_ingredient_easy;
new spell_random_ingredient_medium;
new spell_random_ingredient_hard;
new spell_pot_check;
new spell_fetch_ingredient_aura;
}