aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sql/FULL/world_script_texts.sql3
-rw-r--r--sql/updates/6477_world_scripts.sql4
-rw-r--r--src/bindings/scripts/scripts/northrend/violet_hold/violet_hold.cpp126
3 files changed, 130 insertions, 3 deletions
diff --git a/sql/FULL/world_script_texts.sql b/sql/FULL/world_script_texts.sql
index 144e7149aa2..702fa8821b2 100644
--- a/sql/FULL/world_script_texts.sql
+++ b/sql/FULL/world_script_texts.sql
@@ -1983,6 +1983,9 @@ INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`,`content_loc1`
(29305,-1604015,'Get ready for somethin''... much... BIGGAH! ',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'SAY_TRANSFORM boss_moorabi'),
(29305,-1604016,'Da ground gonna swallow you up',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'SAY_QUAKE boss_moorabi'),
(29305,-1604017,'%s begins to transform!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,3,0,0,'EMOTE_TRANSFORM boss_moorabi'),
+
+-- -1 608 000 VIOLET HOLD
+ (30658,-1608000,'Prision guards, we are leaving! These adventurers are taking over! Go go go',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,''),
-- -1 615 000 OBSIDIAN SANCTUM
(30451,-1615000,'I fear nothing! Least of all you!',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,14111,1,0,0,'shadron SAY_SHADRON_AGGRO'),
diff --git a/sql/updates/6477_world_scripts.sql b/sql/updates/6477_world_scripts.sql
new file mode 100644
index 00000000000..54e2a8e6dbf
--- /dev/null
+++ b/sql/updates/6477_world_scripts.sql
@@ -0,0 +1,4 @@
+DELETE FROM `script_texts` WHERE `entry`=-1608000;
+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
+ (30658,-1608000,'Prision guards, we are leaving! These adventurers are taking over! Go go go',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'');
+
diff --git a/src/bindings/scripts/scripts/northrend/violet_hold/violet_hold.cpp b/src/bindings/scripts/scripts/northrend/violet_hold/violet_hold.cpp
index c35368c1622..5d06dc9ad96 100644
--- a/src/bindings/scripts/scripts/northrend/violet_hold/violet_hold.cpp
+++ b/src/bindings/scripts/scripts/northrend/violet_hold/violet_hold.cpp
@@ -16,7 +16,127 @@ enum PortalCreatures
CREATURE_AZURE_STALKER = 32191
};
+enum eSinclari
+{
+ NPC_VIOLET_HOLD_GUARD = 30659,
+
+ SAY_SINCLARI_1 = -1608000,
+};
+
const Position DoorPosition = { 1828.300049, 797.309021, 46.135502, 1.48353};
+const Position MovePosition = { 1806.955566, 803.851807, 44.363323};
+
+struct TRINITY_DLL_DECL npc_sinclariAI : public ScriptedAI
+{
+ npc_sinclariAI(Creature* pCreature) : ScriptedAI(pCreature)
+ {
+ pInstance = pCreature->GetInstanceData();
+ }
+
+ ScriptedInstance* pInstance;
+
+ uint8 uiPhase;
+ uint32 uiTimer;
+
+ std::list<Creature*> GuardList;
+
+ void Reset()
+ {
+ uiPhase = 0;
+ uiTimer = 0;
+
+ m_creature->SetVisibility(VISIBILITY_ON);
+ m_creature->SetReactState(REACT_AGGRESSIVE);
+
+ m_creature->GetCreatureListWithEntryInGrid(GuardList, NPC_VIOLET_HOLD_GUARD, 40.0f);
+ if (!GuardList.empty())
+ for (std::list<Creature*>::iterator itr = GuardList.begin(); itr != GuardList.end(); ++itr)
+ {
+ if (Creature* pGuard = *itr)
+ {
+ pGuard->SetVisibility(VISIBILITY_ON);
+ pGuard->SetReactState(REACT_AGGRESSIVE);
+ }
+ }
+ }
+
+ void MovementInform(uint32 uiType, uint32 uiId)
+ {
+ if (uiType != POINT_MOTION_TYPE)
+ return;
+
+ if (pInstance)
+ pInstance->SetData(DATA_WAVE_COUNT,1);
+
+ //She should not be despawned, she will be used by the instance to summon some npcs
+ m_creature->SetVisibility(VISIBILITY_OFF);
+ m_creature->SetReactState(REACT_PASSIVE);
+ }
+
+ void UpdateAI(const uint32 uiDiff)
+ {
+ ScriptedAI::UpdateAI(uiDiff);
+
+ if (uiPhase)
+ {
+ if (uiTimer <= uiDiff)
+ {
+ switch(uiPhase)
+ {
+ case 1:
+ DoScriptText(SAY_SINCLARI_1, m_creature);
+ uiTimer = 4000;
+ uiPhase = 2;
+ break;
+ case 2:
+ m_creature->GetCreatureListWithEntryInGrid(GuardList, NPC_VIOLET_HOLD_GUARD, 40.0f);
+ if (!GuardList.empty())
+ for (std::list<Creature*>::iterator itr = GuardList.begin(); itr != GuardList.end(); ++itr)
+ {
+ if (Creature* pGuard = *itr)
+ {
+ pGuard->RemoveUnitMovementFlag(MOVEMENTFLAG_WALK_MODE);
+ pGuard->GetMotionMaster()->MovePoint(0, MovePosition);
+ }
+ }
+ uiTimer = 6000;
+ uiPhase = 3;
+ break;
+ case 3:
+ m_creature->GetCreatureListWithEntryInGrid(GuardList, NPC_VIOLET_HOLD_GUARD, 40.0f);
+ if (!GuardList.empty())
+ for (std::list<Creature*>::iterator itr = GuardList.begin(); itr != GuardList.end(); ++itr)
+ {
+ if (Creature* pGuard = *itr)
+ {
+ pGuard->SetVisibility(VISIBILITY_OFF);
+ pGuard->SetReactState(REACT_PASSIVE);
+ }
+ }
+ uiTimer = 2000;
+ uiPhase = 4;
+ break;
+ case 4:
+ m_creature->GetMotionMaster()->MovePoint(0, MovePosition);
+ uiTimer = 0;
+ uiPhase = 0;
+ break;
+ }
+ }
+ else uiTimer -= uiDiff;
+ }
+
+ if (!UpdateVictim())
+ return;
+
+ DoMeleeAttackIfReady();
+ }
+};
+
+CreatureAI* GetAI_npc_sinclari(Creature* pCreature)
+{
+ return new npc_sinclariAI(pCreature);
+}
bool GossipHello_npc_sinclari(Player* pPlayer, Creature* pCreature)
{
@@ -31,9 +151,8 @@ bool GossipSelect_npc_sinclari(Player* pPlayer, Creature* pCreature, uint32 uiSe
{
if (pPlayer)
pPlayer->CLOSE_GOSSIP_MENU();
- ScriptedInstance* pInstance = pCreature->GetInstanceData();
- if (pInstance)
- pInstance->SetData(DATA_WAVE_COUNT,1);
+ CAST_AI(npc_sinclariAI, (pCreature->AI()))->uiPhase = 1;
+
return true;
}
@@ -98,6 +217,7 @@ void AddSC_violet_hold()
newscript = new Script;
newscript->Name = "npc_sinclari_vh";
+ newscript->GetAI = &GetAI_npc_sinclari;
newscript->pGossipHello = &GossipHello_npc_sinclari;
newscript->pGossipSelect = &GossipSelect_npc_sinclari;
newscript->RegisterSelf();