aboutsummaryrefslogtreecommitdiff
path: root/src/server/scripts/EasternKingdoms/ShadowfangKeep
diff options
context:
space:
mode:
authorazazel <none@none>2010-08-08 22:54:58 +0600
committerazazel <none@none>2010-08-08 22:54:58 +0600
commit590199d8e17405a0717eaf2e2d39f0d671b6f844 (patch)
tree36755767c89c4639c7cb0e2f31d8a99f53bb8cf5 /src/server/scripts/EasternKingdoms/ShadowfangKeep
parent8a69e50d6aff8ea75100a1fb660deecf03b3ea07 (diff)
* Rename InstanceData to InstanceScript
* Rename *mgr to their new names in scripts project * Mass convert all the scripts (NEEDS THOROUGH TESTING, because it was done automatically) Please, report bugs on issue tracker. --HG-- branch : trunk rename : src/server/game/Instances/InstanceData.cpp => src/server/game/Instances/InstanceScript.cpp rename : src/server/game/Instances/InstanceData.h => src/server/game/Instances/InstanceScript.h
Diffstat (limited to 'src/server/scripts/EasternKingdoms/ShadowfangKeep')
-rw-r--r--src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp352
-rw-r--r--src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp226
2 files changed, 292 insertions, 286 deletions
diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp
index be3cd67c8d6..e8c7e83dd0c 100644
--- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp
+++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/instance_shadowfang_keep.cpp
@@ -53,227 +53,229 @@ const Position SpawnLocation[] =
{-145.905,2180.520,128.448,4.183},
{-140.794,2178.037,128.448,4.090},
{-138.640,2170.159,136.577,2.737}
-};
-struct instance_shadowfang_keep : public ScriptedInstance
+}; class instance_shadowfang_keep : public InstanceMapScript
{
- instance_shadowfang_keep(Map* pMap) : ScriptedInstance(pMap) {Initialize();};
+public:
+ instance_shadowfang_keep() : InstanceMapScript("instance_shadowfang_keep") { }
+
+ InstanceScript* GetInstanceData_InstanceMapScript(Map* pMap)
+ {
+ return new instance_shadowfang_keep_InstanceMapScript(pMap);
+ }
- uint32 m_auiEncounter[MAX_ENCOUNTER];
- std::string str_data;
+ struct instance_shadowfang_keep_InstanceMapScript : public InstanceScript
+ {
+ instance_shadowfang_keep_InstanceMapScript(Map* pMap) : InstanceScript(pMap) {Initialize();};
- uint64 uiAshGUID;
- uint64 uiAdaGUID;
- uint64 uiArchmageArugalGUID;
+ uint32 m_auiEncounter[MAX_ENCOUNTER];
+ std::string str_data;
- uint64 DoorCourtyardGUID;
- uint64 DoorSorcererGUID;
- uint64 DoorArugalGUID;
+ uint64 uiAshGUID;
+ uint64 uiAdaGUID;
+ uint64 uiArchmageArugalGUID;
- uint8 uiPhase;
- uint16 uiTimer;
+ uint64 DoorCourtyardGUID;
+ uint64 DoorSorcererGUID;
+ uint64 DoorArugalGUID;
- void Initialize()
- {
- memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
+ uint8 uiPhase;
+ uint16 uiTimer;
- uiAshGUID = 0;
- uiAdaGUID = 0;
- uiArchmageArugalGUID = 0;
+ void Initialize()
+ {
+ memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
- DoorCourtyardGUID = 0;
- DoorSorcererGUID = 0;
- DoorArugalGUID = 0;
+ uiAshGUID = 0;
+ uiAdaGUID = 0;
+ uiArchmageArugalGUID = 0;
- uiPhase = 0;
- uiTimer = 0;
- }
+ DoorCourtyardGUID = 0;
+ DoorSorcererGUID = 0;
+ DoorArugalGUID = 0;
- void OnCreatureCreate(Creature* pCreature, bool /*add*/)
- {
- switch(pCreature->GetEntry())
- {
- case NPC_ASH: uiAshGUID = pCreature->GetGUID(); break;
- case NPC_ADA: uiAdaGUID = pCreature->GetGUID(); break;
- case NPC_ARCHMAGE_ARUGAL: uiArchmageArugalGUID = pCreature->GetGUID(); break;
+ uiPhase = 0;
+ uiTimer = 0;
}
- }
- void OnGameObjectCreate(GameObject* pGo, bool /*add*/)
- {
- switch(pGo->GetEntry())
+ void OnCreatureCreate(Creature* pCreature, bool /*add*/)
{
- case GO_COURTYARD_DOOR:
- DoorCourtyardGUID = pGo->GetGUID();
- if (m_auiEncounter[0] == DONE)
- HandleGameObject(NULL, true, pGo);
- break;
- case GO_SORCERER_DOOR:
- DoorSorcererGUID = pGo->GetGUID();
- if (m_auiEncounter[2] == DONE)
- HandleGameObject(NULL, true, pGo);
- break;
- case GO_ARUGAL_DOOR:
- DoorArugalGUID = pGo->GetGUID();
- if (m_auiEncounter[3] == DONE)
- HandleGameObject(NULL, true, pGo);
- break;
+ switch(pCreature->GetEntry())
+ {
+ case NPC_ASH: uiAshGUID = pCreature->GetGUID(); break;
+ case NPC_ADA: uiAdaGUID = pCreature->GetGUID(); break;
+ case NPC_ARCHMAGE_ARUGAL: uiArchmageArugalGUID = pCreature->GetGUID(); break;
+ }
}
- }
-
- void DoSpeech()
- {
- Creature* pAda = instance->GetCreature(uiAdaGUID);
- Creature* pAsh = instance->GetCreature(uiAshGUID);
- if (pAda && pAda->isAlive() && pAsh && pAsh->isAlive())
+ void OnGameObjectCreate(GameObject* pGo, bool /*add*/)
{
- DoScriptText(SAY_BOSS_DIE_AD,pAda);
- DoScriptText(SAY_BOSS_DIE_AS,pAsh);
+ switch(pGo->GetEntry())
+ {
+ case GO_COURTYARD_DOOR:
+ DoorCourtyardGUID = pGo->GetGUID();
+ if (m_auiEncounter[0] == DONE)
+ HandleGameObject(NULL, true, pGo);
+ break;
+ case GO_SORCERER_DOOR:
+ DoorSorcererGUID = pGo->GetGUID();
+ if (m_auiEncounter[2] == DONE)
+ HandleGameObject(NULL, true, pGo);
+ break;
+ case GO_ARUGAL_DOOR:
+ DoorArugalGUID = pGo->GetGUID();
+ if (m_auiEncounter[3] == DONE)
+ HandleGameObject(NULL, true, pGo);
+ break;
+ }
}
- }
- void SetData(uint32 type, uint32 data)
- {
- switch(type)
+ void DoSpeech()
{
- case TYPE_FREE_NPC:
- if (data == DONE)
- DoUseDoorOrButton(DoorCourtyardGUID);
- m_auiEncounter[0] = data;
- break;
- case TYPE_RETHILGORE:
- if (data == DONE)
- DoSpeech();
- m_auiEncounter[1] = data;
- break;
- case TYPE_FENRUS:
- switch(data)
- {
- case DONE:
- uiTimer = 1000;
- uiPhase = 1;
- break;
- case 7:
- DoUseDoorOrButton(DoorSorcererGUID);
- break;
- }
- m_auiEncounter[2] = data;
- break;
- case TYPE_NANDOS:
- if (data == DONE)
- DoUseDoorOrButton(DoorArugalGUID);
- m_auiEncounter[3] = data;
- break;
+ Creature* pAda = instance->GetCreature(uiAdaGUID);
+ Creature* pAsh = instance->GetCreature(uiAshGUID);
+
+ if (pAda && pAda->isAlive() && pAsh && pAsh->isAlive())
+ {
+ DoScriptText(SAY_BOSS_DIE_AD,pAda);
+ DoScriptText(SAY_BOSS_DIE_AS,pAsh);
+ }
}
- if (data == DONE)
+ void SetData(uint32 type, uint32 data)
{
- OUT_SAVE_INST_DATA;
+ switch(type)
+ {
+ case TYPE_FREE_NPC:
+ if (data == DONE)
+ DoUseDoorOrButton(DoorCourtyardGUID);
+ m_auiEncounter[0] = data;
+ break;
+ case TYPE_RETHILGORE:
+ if (data == DONE)
+ DoSpeech();
+ m_auiEncounter[1] = data;
+ break;
+ case TYPE_FENRUS:
+ switch(data)
+ {
+ case DONE:
+ uiTimer = 1000;
+ uiPhase = 1;
+ break;
+ case 7:
+ DoUseDoorOrButton(DoorSorcererGUID);
+ break;
+ }
+ m_auiEncounter[2] = data;
+ break;
+ case TYPE_NANDOS:
+ if (data == DONE)
+ DoUseDoorOrButton(DoorArugalGUID);
+ m_auiEncounter[3] = data;
+ break;
+ }
+
+ if (data == DONE)
+ {
+ OUT_SAVE_INST_DATA;
- std::ostringstream saveStream;
- saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3];
+ std::ostringstream saveStream;
+ saveStream << m_auiEncounter[0] << " " << m_auiEncounter[1] << " " << m_auiEncounter[2] << " " << m_auiEncounter[3];
- str_data = saveStream.str();
+ str_data = saveStream.str();
- SaveToDB();
- OUT_SAVE_INST_DATA_COMPLETE;
+ SaveToDB();
+ OUT_SAVE_INST_DATA_COMPLETE;
+ }
}
- }
- uint32 GetData(uint32 type)
- {
- switch(type)
+ uint32 GetData(uint32 type)
{
- case TYPE_FREE_NPC:
- return m_auiEncounter[0];
- case TYPE_RETHILGORE:
- return m_auiEncounter[1];
- case TYPE_FENRUS:
- return m_auiEncounter[2];
- case TYPE_NANDOS:
- return m_auiEncounter[3];
+ switch(type)
+ {
+ case TYPE_FREE_NPC:
+ return m_auiEncounter[0];
+ case TYPE_RETHILGORE:
+ return m_auiEncounter[1];
+ case TYPE_FENRUS:
+ return m_auiEncounter[2];
+ case TYPE_NANDOS:
+ return m_auiEncounter[3];
+ }
+ return 0;
}
- return 0;
- }
-
- std::string GetSaveData()
- {
- return str_data;
- }
- void Load(const char* in)
- {
- if (!in)
+ std::string GetSaveData()
{
- OUT_LOAD_INST_DATA_FAIL;
- return;
+ return str_data;
}
- OUT_LOAD_INST_DATA(in);
-
- std::istringstream loadStream(in);
- loadStream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2] >> m_auiEncounter[3];
-
- for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
+ void Load(const char* in)
{
- if (m_auiEncounter[i] == IN_PROGRESS)
- m_auiEncounter[i] = NOT_STARTED;
- }
+ if (!in)
+ {
+ OUT_LOAD_INST_DATA_FAIL;
+ return;
+ }
- OUT_LOAD_INST_DATA_COMPLETE;
- }
+ OUT_LOAD_INST_DATA(in);
- void Update(uint32 uiDiff)
- {
- if (GetData(TYPE_FENRUS) != DONE)
- return;
+ std::istringstream loadStream(in);
+ loadStream >> m_auiEncounter[0] >> m_auiEncounter[1] >> m_auiEncounter[2] >> m_auiEncounter[3];
- Creature* pArchmage = instance->GetCreature(uiArchmageArugalGUID);
- Creature* pSummon = NULL;
+ for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
+ {
+ if (m_auiEncounter[i] == IN_PROGRESS)
+ m_auiEncounter[i] = NOT_STARTED;
+ }
- if (!pArchmage || !pArchmage->isAlive())
- return;
+ OUT_LOAD_INST_DATA_COMPLETE;
+ }
- if (uiPhase)
+ void Update(uint32 uiDiff)
{
- if (uiTimer <= uiDiff)
+ if (GetData(TYPE_FENRUS) != DONE)
+ return;
+
+ Creature* pArchmage = instance->GetCreature(uiArchmageArugalGUID);
+ Creature* pSummon = NULL;
+
+ if (!pArchmage || !pArchmage->isAlive())
+ return;
+
+ if (uiPhase)
{
- switch(uiPhase)
+ if (uiTimer <= uiDiff)
{
- case 1:
- pSummon = pArchmage->SummonCreature(pArchmage->GetEntry(),SpawnLocation[4],TEMPSUMMON_TIMED_DESPAWN,10000);
- pSummon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
- pSummon->SetReactState(REACT_DEFENSIVE);
- pSummon->CastSpell(pSummon,SPELL_ASHCROMBE_TELEPORT,true);
- DoScriptText(SAY_ARCHMAGE,pSummon);
- uiTimer = 2000;
- uiPhase = 2;
- break;
- case 2:
- pArchmage->SummonCreature(NPC_ARUGAL_VOIDWALKER,SpawnLocation[0],TEMPSUMMON_CORPSE_TIMED_DESPAWN,60000);
- pArchmage->SummonCreature(NPC_ARUGAL_VOIDWALKER,SpawnLocation[1],TEMPSUMMON_CORPSE_TIMED_DESPAWN,60000);
- pArchmage->SummonCreature(NPC_ARUGAL_VOIDWALKER,SpawnLocation[2],TEMPSUMMON_CORPSE_TIMED_DESPAWN,60000);
- pArchmage->SummonCreature(NPC_ARUGAL_VOIDWALKER,SpawnLocation[3],TEMPSUMMON_CORPSE_TIMED_DESPAWN,60000);
- uiPhase = 0;
- break;
-
- }
- } else uiTimer -= uiDiff;
+ switch(uiPhase)
+ {
+ case 1:
+ pSummon = pArchmage->SummonCreature(pArchmage->GetEntry(),SpawnLocation[4],TEMPSUMMON_TIMED_DESPAWN,10000);
+ pSummon->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
+ pSummon->SetReactState(REACT_DEFENSIVE);
+ pSummon->CastSpell(pSummon,SPELL_ASHCROMBE_TELEPORT,true);
+ DoScriptText(SAY_ARCHMAGE,pSummon);
+ uiTimer = 2000;
+ uiPhase = 2;
+ break;
+ case 2:
+ pArchmage->SummonCreature(NPC_ARUGAL_VOIDWALKER,SpawnLocation[0],TEMPSUMMON_CORPSE_TIMED_DESPAWN,60000);
+ pArchmage->SummonCreature(NPC_ARUGAL_VOIDWALKER,SpawnLocation[1],TEMPSUMMON_CORPSE_TIMED_DESPAWN,60000);
+ pArchmage->SummonCreature(NPC_ARUGAL_VOIDWALKER,SpawnLocation[2],TEMPSUMMON_CORPSE_TIMED_DESPAWN,60000);
+ pArchmage->SummonCreature(NPC_ARUGAL_VOIDWALKER,SpawnLocation[3],TEMPSUMMON_CORPSE_TIMED_DESPAWN,60000);
+ uiPhase = 0;
+ break;
+
+ }
+ } else uiTimer -= uiDiff;
+ }
}
- }
+ };
+
};
-InstanceData* GetInstanceData_instance_shadowfang_keep(Map* pMap)
-{
- return new instance_shadowfang_keep(pMap);
-}
void AddSC_instance_shadowfang_keep()
{
- Script *newscript;
- newscript = new Script;
- newscript->Name = "instance_shadowfang_keep";
- newscript->GetInstanceData = &GetInstanceData_instance_shadowfang_keep;
- newscript->RegisterSelf();
+ new instance_shadowfang_keep();
}
-
diff --git a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp
index 61f06276bb6..a66ff361eaf 100644
--- a/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp
+++ b/src/server/scripts/EasternKingdoms/ShadowfangKeep/shadowfang_keep.cpp
@@ -52,149 +52,153 @@ enum eEnums
};
#define GOSSIP_ITEM_DOOR "Thanks, I'll follow you to the door."
-
-struct npc_shadowfang_prisonerAI : public npc_escortAI
+ class npc_shadowfang_prisoner : public CreatureScript
{
- npc_shadowfang_prisonerAI(Creature *c) : npc_escortAI(c)
+public:
+ npc_shadowfang_prisoner() : CreatureScript("npc_shadowfang_prisoner") { }
+
+ CreatureAI* GetAI(Creature* pCreature) const
{
- pInstance = c->GetInstanceData();
- uiNpcEntry = c->GetEntry();
+ return new npc_shadowfang_prisonerAI(pCreature);
}
- ScriptedInstance *pInstance;
- uint32 uiNpcEntry;
-
- void WaypointReached(uint32 uiPoint)
+ bool OnGossipSelect(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
{
- switch(uiPoint)
+ if (uiAction == GOSSIP_ACTION_INFO_DEF+1)
{
- case 0:
- if (uiNpcEntry == NPC_ASH)
- DoScriptText(SAY_FREE_AS, me);
- else
- DoScriptText(SAY_FREE_AD, me);
- break;
- case 10:
- if (uiNpcEntry == NPC_ASH)
- DoScriptText(SAY_OPEN_DOOR_AS, me);
- else
- DoScriptText(SAY_OPEN_DOOR_AD, me);
- break;
- case 11:
- if (uiNpcEntry == NPC_ASH)
- DoCast(me, SPELL_UNLOCK);
- break;
- case 12:
- if (uiNpcEntry == NPC_ASH)
- DoScriptText(SAY_POST_DOOR_AS, me);
- else
- DoScriptText(SAY_POST1_DOOR_AD, me);
-
- if (pInstance)
- pInstance->SetData(TYPE_FREE_NPC, DONE);
- break;
- case 13:
- if (uiNpcEntry != NPC_ASH)
- DoScriptText(SAY_POST2_DOOR_AD, me);
- break;
+ pPlayer->CLOSE_GOSSIP_MENU();
+
+ if (npc_escortAI* pEscortAI = CAST_AI(npc_shadowfang_prisoner::npc_shadowfang_prisonerAI, pCreature->AI()))
+ pEscortAI->Start(false, false);
}
+ return true;
}
- void Reset() {}
- void EnterCombat(Unit* /*who*/) {}
-};
+ bool OnGossipHello(Player* pPlayer, Creature* pCreature)
+ {
+ InstanceScript* pInstance = pCreature->GetInstanceScript();
-CreatureAI* GetAI_npc_shadowfang_prisoner(Creature* pCreature)
-{
- return new npc_shadowfang_prisonerAI(pCreature);
-}
+ if (pInstance && pInstance->GetData(TYPE_FREE_NPC) != DONE && pInstance->GetData(TYPE_RETHILGORE) == DONE)
+ pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_DOOR, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
-bool GossipHello_npc_shadowfang_prisoner(Player* pPlayer, Creature* pCreature)
-{
- ScriptedInstance* pInstance = pCreature->GetInstanceData();
+ pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
- if (pInstance && pInstance->GetData(TYPE_FREE_NPC) != DONE && pInstance->GetData(TYPE_RETHILGORE) == DONE)
- pPlayer->ADD_GOSSIP_ITEM(GOSSIP_ICON_CHAT, GOSSIP_ITEM_DOOR, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF+1);
+ return true;
+ }
- pPlayer->SEND_GOSSIP_MENU(pPlayer->GetGossipTextId(pCreature), pCreature->GetGUID());
+ struct npc_shadowfang_prisonerAI : public npc_escortAI
+ {
+ npc_shadowfang_prisonerAI(Creature *c) : npc_escortAI(c)
+ {
+ pInstance = c->GetInstanceScript();
+ uiNpcEntry = c->GetEntry();
+ }
- return true;
-}
+ InstanceScript *pInstance;
+ uint32 uiNpcEntry;
-bool GossipSelect_npc_shadowfang_prisoner(Player* pPlayer, Creature* pCreature, uint32 /*uiSender*/, uint32 uiAction)
-{
- if (uiAction == GOSSIP_ACTION_INFO_DEF+1)
- {
- pPlayer->CLOSE_GOSSIP_MENU();
+ void WaypointReached(uint32 uiPoint)
+ {
+ switch(uiPoint)
+ {
+ case 0:
+ if (uiNpcEntry == NPC_ASH)
+ DoScriptText(SAY_FREE_AS, me);
+ else
+ DoScriptText(SAY_FREE_AD, me);
+ break;
+ case 10:
+ if (uiNpcEntry == NPC_ASH)
+ DoScriptText(SAY_OPEN_DOOR_AS, me);
+ else
+ DoScriptText(SAY_OPEN_DOOR_AD, me);
+ break;
+ case 11:
+ if (uiNpcEntry == NPC_ASH)
+ DoCast(me, SPELL_UNLOCK);
+ break;
+ case 12:
+ if (uiNpcEntry == NPC_ASH)
+ DoScriptText(SAY_POST_DOOR_AS, me);
+ else
+ DoScriptText(SAY_POST1_DOOR_AD, me);
+
+ if (pInstance)
+ pInstance->SetData(TYPE_FREE_NPC, DONE);
+ break;
+ case 13:
+ if (uiNpcEntry != NPC_ASH)
+ DoScriptText(SAY_POST2_DOOR_AD, me);
+ break;
+ }
+ }
- if (npc_escortAI* pEscortAI = CAST_AI(npc_shadowfang_prisonerAI, pCreature->AI()))
- pEscortAI->Start(false, false);
- }
- return true;
-}
+ void Reset() {}
+ void EnterCombat(Unit* /*who*/) {}
+ };
-struct npc_arugal_voidwalkerAI : public ScriptedAI
-{
- npc_arugal_voidwalkerAI(Creature* pCreature) : ScriptedAI(pCreature)
- {
- pInstance = pCreature->GetInstanceData();
- }
+};
- ScriptedInstance* pInstance;
- uint32 uiDarkOffering;
- void Reset()
+ class npc_arugal_voidwalker : public CreatureScript
+{
+public:
+ npc_arugal_voidwalker() : CreatureScript("npc_arugal_voidwalker") { }
+
+ CreatureAI* GetAI(Creature* pCreature) const
{
- uiDarkOffering = urand(290,10);
+ return new npc_arugal_voidwalkerAI(pCreature);
}
- void UpdateAI(uint32 const uiDiff)
+ struct npc_arugal_voidwalkerAI : public ScriptedAI
{
- if (!UpdateVictim())
- return;
+ npc_arugal_voidwalkerAI(Creature* pCreature) : ScriptedAI(pCreature)
+ {
+ pInstance = pCreature->GetInstanceScript();
+ }
- if (uiDarkOffering <= uiDiff)
+ InstanceScript* pInstance;
+
+ uint32 uiDarkOffering;
+
+ void Reset()
+ {
+ uiDarkOffering = urand(290,10);
+ }
+
+ void UpdateAI(uint32 const uiDiff)
{
- if (Creature* pFriend = me->FindNearestCreature(me->GetEntry(),25.0f,true))
+ if (!UpdateVictim())
+ return;
+
+ if (uiDarkOffering <= uiDiff)
{
- if (pFriend)
- DoCast(pFriend,SPELL_DARK_OFFERING);
- }
- else
- DoCast(me,SPELL_DARK_OFFERING);
- uiDarkOffering = urand(4400,12500);
- } else uiDarkOffering -= uiDiff;
+ if (Creature* pFriend = me->FindNearestCreature(me->GetEntry(),25.0f,true))
+ {
+ if (pFriend)
+ DoCast(pFriend,SPELL_DARK_OFFERING);
+ }
+ else
+ DoCast(me,SPELL_DARK_OFFERING);
+ uiDarkOffering = urand(4400,12500);
+ } else uiDarkOffering -= uiDiff;
- DoMeleeAttackIfReady();
- }
+ DoMeleeAttackIfReady();
+ }
+
+ void JustDied(Unit* /*pKiller*/)
+ {
+ if (pInstance)
+ pInstance->SetData(TYPE_FENRUS, pInstance->GetData(TYPE_FENRUS) + 1);
+ }
+ };
- void JustDied(Unit* /*pKiller*/)
- {
- if (pInstance)
- pInstance->SetData(TYPE_FENRUS, pInstance->GetData(TYPE_FENRUS) + 1);
- }
};
-CreatureAI* GetAI_npc_arugal_voidwalker(Creature* pCreature)
-{
- return new npc_arugal_voidwalkerAI(pCreature);
-}
void AddSC_shadowfang_keep()
{
- Script* newscript;
-
- newscript = new Script;
- newscript->Name = "npc_shadowfang_prisoner";
- newscript->pGossipHello = &GossipHello_npc_shadowfang_prisoner;
- newscript->pGossipSelect = &GossipSelect_npc_shadowfang_prisoner;
- newscript->GetAI = &GetAI_npc_shadowfang_prisoner;
- newscript->RegisterSelf();
-
- newscript = new Script;
- newscript->Name = "npc_arugal_voidwalker";
- newscript->GetAI = &GetAI_npc_arugal_voidwalker;
- newscript->RegisterSelf();
+ new npc_shadowfang_prisoner();
+ new npc_arugal_voidwalker();
}
-