aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/scripts/world_script_texts.sql4
-rw-r--r--sql/scripts/world_scripts_full.sql2
-rw-r--r--sql/updates/10545_world_script_texts.sql6
-rw-r--r--sql/updates/10545_world_scriptname.sql1
-rw-r--r--src/server/scripts/Northrend/borean_tundra.cpp216
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;
}