diff options
-rw-r--r-- | sql/scripts/world_script_texts.sql | 4 | ||||
-rw-r--r-- | sql/scripts/world_scripts_full.sql | 2 | ||||
-rw-r--r-- | sql/updates/10545_world_script_texts.sql | 6 | ||||
-rw-r--r-- | sql/updates/10545_world_scriptname.sql | 1 | ||||
-rw-r--r-- | src/server/scripts/Northrend/borean_tundra.cpp | 216 |
5 files changed, 228 insertions, 1 deletions
diff --git a/sql/scripts/world_script_texts.sql b/sql/scripts/world_script_texts.sql index c5a7da20e19..c8015b9b1ce 100644 --- a/sql/scripts/world_script_texts.sql +++ b/sql/scripts/world_script_texts.sql @@ -1858,6 +1858,10 @@ INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`,`content_loc1` (30007,-1571041,'Do you fell that folks? The air is cracking with energy! Than can only mean one thing...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,''), (28604,-1571042,'Ouch! Watch where you''re tugging!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,'adventurous dwarf SAY_DWARF_OUCH'), (28604,-1571043,'Glad I could help!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,'adventurous dwarf SAY_DWARF_HELP'), + (25248,-1571044,'Well...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,'npc_hidden_cultist SAY_HIDDEN_CULTIST_1'), + (25828,-1571045,'Finally! This charade is over... Arthas give me strength!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,'npc_hidden_cultist SAY_HIDDEN_CULTIST_2'), + (25827,-1571046,'You don''t know who you''re messing with! Death beckons!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,'npc_hidden_cultist SAY_HIDDEN_CULTIST_3'), + (25248,-1571047,'I suppose this is it, then? I won''t go down quietly!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,'npc_hidden_cultist SAY_HIDDEN_CULTIST_4'), -- -1 574 000 UTGARDE KEEP (23953,-1574000,'Your blood is mine!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,13221,1,0,0,'keleseth SAY_AGGRO'), diff --git a/sql/scripts/world_scripts_full.sql b/sql/scripts/world_scripts_full.sql index f3ad34d4050..e18f803f9e5 100644 --- a/sql/scripts/world_scripts_full.sql +++ b/sql/scripts/world_scripts_full.sql @@ -448,7 +448,7 @@ UPDATE `creature_template` SET `ScriptName`='npc_valiance_keep_cannoneer' WHERE UPDATE `creature_template` SET `ScriptName`='npc_warmage_coldarra' WHERE `entry` IN (27173,27904,27906); UPDATE `creature_template` SET `ScriptName`='npc_valiance_keep_cannoneer' WHERE `entry`=25306; UPDATE `creature_template` SET `ScriptName`= 'npc_seaforium_depth_charge' WHERE `entry`=25401; - +UPDATE `creature_template` SET `ScriptName`='npc_hidden_cultist' WHERE `entry` IN (25828,25248,25827); /* BURNING STEPPES */ UPDATE `creature_template` SET `ScriptName`='npc_ragged_john' WHERE `entry`=9563; diff --git a/sql/updates/10545_world_script_texts.sql b/sql/updates/10545_world_script_texts.sql new file mode 100644 index 00000000000..15e4de0f148 --- /dev/null +++ b/sql/updates/10545_world_script_texts.sql @@ -0,0 +1,6 @@ +DELETE FROM `script_texts` WHERE `npc_entry` IN (25828,25248,25827); +INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`,`content_loc1`,`content_loc2`,`content_loc3`,`content_loc4`,`content_loc5`,`content_loc6`,`content_loc7`,`content_loc8`,`sound`,`type`,`language`,`emote`,`comment`) VALUES +(25248,-1571044,'Well...',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,'npc_hidden_cultist SAY_HIDDEN_CULTIST_1'), +(25828,-1571045,'Finally! This charade is over... Arthas give me strength!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,'npc_hidden_cultist SAY_HIDDEN_CULTIST_2'), +(25827,-1571046,'You don''t know who you''re messing with! Death beckons!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,'npc_hidden_cultist SAY_HIDDEN_CULTIST_3'), +(25248,-1571047,'I suppose this is it, then? I won''t go down quietly!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,0,0,'npc_hidden_cultist SAY_HIDDEN_CULTIST_4');
\ No newline at end of file diff --git a/sql/updates/10545_world_scriptname.sql b/sql/updates/10545_world_scriptname.sql new file mode 100644 index 00000000000..e5405faadf8 --- /dev/null +++ b/sql/updates/10545_world_scriptname.sql @@ -0,0 +1 @@ +UPDATE `creature_template` SET `ScriptName`='npc_hidden_cultist' WHERE `entry` IN (25828,25248,25827);
\ No newline at end of file diff --git a/src/server/scripts/Northrend/borean_tundra.cpp b/src/server/scripts/Northrend/borean_tundra.cpp index dfeee0bc505..55ed9e10348 100644 --- a/src/server/scripts/Northrend/borean_tundra.cpp +++ b/src/server/scripts/Northrend/borean_tundra.cpp @@ -2350,6 +2350,221 @@ public: } }; +/*###### +## npc_hidden_cultist +######*/ + +enum eHiddenCultist +{ + SPELL_SHROUD_OF_THE_DEATH_CULTIST = 46077, //not working + SPELL_RIGHTEOUS_VISION = 46078, //player aura + + QUEST_THE_HUNT_IS_ON = 11794, + + GOSSIP_TEXT_SALTY_JOHN_THORPE = 12529, + GOSSIP_TEXT_GUARD_MITCHELSS = 12530, + GOSSIP_TEXT_TOM_HEGGER = 12528, + + NPC_TOM_HEGGER = 25827, + NPC_SALTY_JOHN_THORPE = 25248, + NPC_GUARD_MITCHELLS = 25828, + + SAY_HIDDEN_CULTIST_1 = -1571044, + SAY_HIDDEN_CULTIST_2 = -1571045, + SAY_HIDDEN_CULTIST_3 = -1571046, + SAY_HIDDEN_CULTIST_4 = -1571047 +}; + +#define GOSSIP_ITEM_TOM_HEGGER "What do you know about the Cult of the Damned?" +#define GOSSIP_ITEM_GUARD_MITCHELLS "How long have you worked for the Cult of the Damned?" +#define GOSSIP_ITEM_SALTY_JOHN_THORPE "I have a reason to believe you're involved in the cultist activity" + +class npc_hidden_cultist : public CreatureScript +{ +public: + npc_hidden_cultist() : CreatureScript("npc_hidden_cultist") { } + + struct npc_hidden_cultistAI : public ScriptedAI + { + npc_hidden_cultistAI(Creature* pCreature) : ScriptedAI(pCreature) + { + uiEmoteState = pCreature->GetUInt32Value(UNIT_NPC_EMOTESTATE); + uiNpcFlags = pCreature->GetUInt32Value(UNIT_NPC_FLAGS); + } + + uint32 uiEmoteState; + uint32 uiNpcFlags; + + uint32 uiEventTimer; + uint8 uiEventPhase; + + uint64 uiPlayerGUID; + + void Reset() + { + if (uiEmoteState) + me->SetUInt32Value(UNIT_NPC_EMOTESTATE,uiEmoteState); + + if (uiNpcFlags) + me->SetUInt32Value(UNIT_NPC_FLAGS,uiNpcFlags); + + uiEventTimer = 0; + uiEventPhase = 0; + + uiPlayerGUID = 0; + + DoCast(SPELL_SHROUD_OF_THE_DEATH_CULTIST); + + me->RestoreFaction(); + } + + void DoAction(const int32 iParam) + { + me->StopMoving(); + me->SetUInt32Value(UNIT_NPC_FLAGS,0); + if (Player* pPlayer = me->GetPlayer(*me,uiPlayerGUID)) + { + me->SetInFront(pPlayer); + me->SendMovementFlagUpdate(); + } + uiEventTimer = 3000; + uiEventPhase = 1; + } + + void SetGUID(const uint64 &uiGuid, int32 iId) + { + uiPlayerGUID = uiGuid; + } + + void AttackPlayer() + { + me->setFaction(14); + if (Player* pPlayer = me->GetPlayer(*me,uiPlayerGUID)) + me->AI()->AttackStart(pPlayer); + } + + void UpdateAI(const uint32 uiDiff) + { + if (uiEventTimer && uiEventTimer <= uiDiff) + { + switch(uiEventPhase) + { + case 1: + switch(me->GetEntry()) + { + case NPC_SALTY_JOHN_THORPE: + me->SetUInt32Value(UNIT_NPC_EMOTESTATE,0); + DoScriptText(SAY_HIDDEN_CULTIST_1,me); + uiEventTimer = 5000; + uiEventPhase = 2; + break; + case NPC_GUARD_MITCHELLS: + DoScriptText(SAY_HIDDEN_CULTIST_2,me); + uiEventTimer = 5000; + uiEventPhase = 2; + break; + case NPC_TOM_HEGGER: + DoScriptText(SAY_HIDDEN_CULTIST_3,me); + uiEventTimer = 5000; + uiEventPhase = 2; + break; + } + break; + case 2: + switch(me->GetEntry()) + { + case NPC_SALTY_JOHN_THORPE: + DoScriptText(SAY_HIDDEN_CULTIST_4,me); + if (Player* pPlayer = me->GetPlayer(*me,uiPlayerGUID)) + { + me->SetInFront(pPlayer); + me->SendMovementFlagUpdate(); + } + uiEventTimer = 3000; + uiEventPhase = 3; + break; + case NPC_GUARD_MITCHELLS: + case NPC_TOM_HEGGER: + AttackPlayer(); + uiEventPhase = 0; + break; + } + break; + case 3: + if (me->GetEntry() == NPC_SALTY_JOHN_THORPE) + { + AttackPlayer(); + uiEventPhase = 0; + } + break; + } + }else uiEventTimer -= uiDiff; + + if (!UpdateVictim()) + return; + + DoMeleeAttackIfReady(); + } + }; + + CreatureAI* GetAI(Creature* pCreature) const + { + return new npc_hidden_cultistAI(pCreature); + } + + bool OnGossipHello(Player* pPlayer, Creature* pCreature) + { + uint32 uiGossipText = 0; + char* charGossipItem = ""; + + switch(pCreature->GetEntry()) + { + case NPC_TOM_HEGGER: + uiGossipText = GOSSIP_TEXT_TOM_HEGGER; + charGossipItem = GOSSIP_ITEM_TOM_HEGGER; + break; + case NPC_SALTY_JOHN_THORPE: + uiGossipText = GOSSIP_TEXT_SALTY_JOHN_THORPE; + charGossipItem = GOSSIP_ITEM_SALTY_JOHN_THORPE; + break; + case NPC_GUARD_MITCHELLS: + uiGossipText = GOSSIP_TEXT_GUARD_MITCHELSS; + charGossipItem = GOSSIP_ITEM_GUARD_MITCHELLS; + break; + default: + return false; + } + + if (pPlayer->HasAura(SPELL_RIGHTEOUS_VISION) && pPlayer->GetQuestStatus(QUEST_THE_HUNT_IS_ON) == QUEST_STATUS_INCOMPLETE) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, charGossipItem, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1); + + if (pCreature->isVendor()) + pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_VENDOR, GOSSIP_TEXT_BROWSE_GOODS, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_TRADE); + + pPlayer->SEND_GOSSIP_MENU(uiGossipText, pCreature->GetGUID()); + + return true; + } + + bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 uiSender, uint32 uiAction) + { + pPlayer->PlayerTalkClass->ClearMenus(); + + if (uiAction == GOSSIP_ACTION_INFO_DEF+1) + { + pPlayer->CLOSE_GOSSIP_MENU(); + pCreature->AI()->SetGUID(pPlayer->GetGUID()); + pCreature->AI()->DoAction(1); + } + + if (uiAction == GOSSIP_ACTION_TRADE) + pPlayer->SEND_VENDORLIST(pCreature->GetGUID()); + + return true; + } + +}; + void AddSC_borean_tundra() { new npc_sinkhole_kill_credit; @@ -2378,4 +2593,5 @@ void AddSC_borean_tundra() new npc_seaforium_depth_charge; new npc_valiance_keep_cannoneer; new npc_warmage_coldarra; + new npc_hidden_cultist; } |