Shadowfang Keep: Implemented event after Boss Fenrus the Devourer death.
--HG-- branch : trunk
This commit is contained in:
@@ -429,6 +429,7 @@ INSERT INTO `script_texts` (`npc_entry`,`entry`,`content_default`,`content_loc1`
|
|||||||
(0,-1033006,'Good luck with Arugal. I must hurry back to Hadrec now.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,1,'prisoner adamant SAY_POST2_DOOR_AD'),
|
(0,-1033006,'Good luck with Arugal. I must hurry back to Hadrec now.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,1,'prisoner adamant SAY_POST2_DOOR_AD'),
|
||||||
(3849,-1033007,'About time someone killed the wretch.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,1,'prisoner adamant SAY_BOSS_DIE_AD'),
|
(3849,-1033007,'About time someone killed the wretch.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,1,1,'prisoner adamant SAY_BOSS_DIE_AD'),
|
||||||
(3850,-1033008,'For once I agree with you... scum.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,7,1,'prisoner ashcrombe SAY_BOSS_DIE_AS'),
|
(3850,-1033008,'For once I agree with you... scum.',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,0,7,1,'prisoner ashcrombe SAY_BOSS_DIE_AS'),
|
||||||
|
(4275,-1033009,'Who cares interfere with the Sons of Arugal?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,''),
|
||||||
|
|
||||||
-- -1 034 000 STOCKADES
|
-- -1 034 000 STOCKADES
|
||||||
-- -1 036 000 DEADMINES
|
-- -1 036 000 DEADMINES
|
||||||
|
|||||||
@@ -960,6 +960,7 @@ UPDATE `creature_template` SET `ScriptName`='npc_zamael_lunthistle' WHERE `entry
|
|||||||
/* SHADOWFANG KEEP */
|
/* SHADOWFANG KEEP */
|
||||||
UPDATE `instance_template` SET `script`='instance_shadowfang_keep' WHERE `map`=33;
|
UPDATE `instance_template` SET `script`='instance_shadowfang_keep' WHERE `map`=33;
|
||||||
UPDATE `creature_template` SET `ScriptName`='npc_shadowfang_prisoner' WHERE `entry` IN (3849,3850);
|
UPDATE `creature_template` SET `ScriptName`='npc_shadowfang_prisoner' WHERE `entry` IN (3849,3850);
|
||||||
|
UPDATE `creature_template` SET `ScriptName`='npc_arugal_voidwalker' WHERE `entry`=4627;
|
||||||
|
|
||||||
/* SHADOWMOON VALLEY */
|
/* SHADOWMOON VALLEY */
|
||||||
UPDATE `creature_template` SET `ScriptName`='boss_doomwalker' WHERE `entry`=17711;
|
UPDATE `creature_template` SET `ScriptName`='boss_doomwalker' WHERE `entry`=17711;
|
||||||
|
|||||||
@@ -0,0 +1,3 @@
|
|||||||
|
DELETE FROM `script_texts` WHERE `entry`=-1033009;
|
||||||
|
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
|
||||||
|
(4275,-1033009,'Who cares interfere with the Sons of Arugal?',NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,0,1,0,0,'');
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
UPDATE `creature_template` SET `ScriptName`='npc_arugal_voidwalker' WHERE `entry`=4627;
|
||||||
+72
-3
@@ -30,15 +30,28 @@ enum eEnums
|
|||||||
{
|
{
|
||||||
SAY_BOSS_DIE_AD = -1033007,
|
SAY_BOSS_DIE_AD = -1033007,
|
||||||
SAY_BOSS_DIE_AS = -1033008,
|
SAY_BOSS_DIE_AS = -1033008,
|
||||||
|
SAY_ARCHMAGE = -1033009,
|
||||||
|
|
||||||
NPC_ASH = 3850,
|
NPC_ASH = 3850,
|
||||||
NPC_ADA = 3849,
|
NPC_ADA = 3849,
|
||||||
|
NPC_ARCHMAGE_ARUGAL = 4275,
|
||||||
|
NPC_ARUGAL_VOIDWALKER = 4627,
|
||||||
|
|
||||||
GO_COURTYARD_DOOR = 18895, //door to open when talking to NPC's
|
GO_COURTYARD_DOOR = 18895, //door to open when talking to NPC's
|
||||||
GO_SORCERER_DOOR = 18972, //door to open when Fenrus the Devourer
|
GO_SORCERER_DOOR = 18972, //door to open when Fenrus the Devourer
|
||||||
GO_ARUGAL_DOOR = 18971 //door to open when Wolf Master Nandos
|
GO_ARUGAL_DOOR = 18971, //door to open when Wolf Master Nandos
|
||||||
|
|
||||||
|
SPELL_ASHCROMBE_TELEPORT = 15742
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const Position SpawnLocation[] =
|
||||||
|
{
|
||||||
|
{-148.199,2165.647,128.448,1.026},
|
||||||
|
{-153.110,2168.620,128.448,1.026},
|
||||||
|
{-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 TRINITY_DLL_DECL instance_shadowfang_keep : public ScriptedInstance
|
struct TRINITY_DLL_DECL instance_shadowfang_keep : public ScriptedInstance
|
||||||
{
|
{
|
||||||
instance_shadowfang_keep(Map* pMap) : ScriptedInstance(pMap) {Initialize();};
|
instance_shadowfang_keep(Map* pMap) : ScriptedInstance(pMap) {Initialize();};
|
||||||
@@ -48,21 +61,29 @@ struct TRINITY_DLL_DECL instance_shadowfang_keep : public ScriptedInstance
|
|||||||
|
|
||||||
uint64 uiAshGUID;
|
uint64 uiAshGUID;
|
||||||
uint64 uiAdaGUID;
|
uint64 uiAdaGUID;
|
||||||
|
uint64 uiArchmageArugalGUID;
|
||||||
|
|
||||||
uint64 DoorCourtyardGUID;
|
uint64 DoorCourtyardGUID;
|
||||||
uint64 DoorSorcererGUID;
|
uint64 DoorSorcererGUID;
|
||||||
uint64 DoorArugalGUID;
|
uint64 DoorArugalGUID;
|
||||||
|
|
||||||
|
uint8 uiPhase;
|
||||||
|
uint8 uiTimer;
|
||||||
|
|
||||||
void Initialize()
|
void Initialize()
|
||||||
{
|
{
|
||||||
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
|
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
|
||||||
|
|
||||||
uiAshGUID = 0;
|
uiAshGUID = 0;
|
||||||
uiAdaGUID = 0;
|
uiAdaGUID = 0;
|
||||||
|
uiArchmageArugalGUID = 0;
|
||||||
|
|
||||||
DoorCourtyardGUID = 0;
|
DoorCourtyardGUID = 0;
|
||||||
DoorSorcererGUID = 0;
|
DoorSorcererGUID = 0;
|
||||||
DoorArugalGUID = 0;
|
DoorArugalGUID = 0;
|
||||||
|
|
||||||
|
uiPhase = 0;
|
||||||
|
uiTimer = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void OnCreatureCreate(Creature* pCreature, bool add)
|
void OnCreatureCreate(Creature* pCreature, bool add)
|
||||||
@@ -71,6 +92,7 @@ struct TRINITY_DLL_DECL instance_shadowfang_keep : public ScriptedInstance
|
|||||||
{
|
{
|
||||||
case NPC_ASH: uiAshGUID = pCreature->GetGUID(); break;
|
case NPC_ASH: uiAshGUID = pCreature->GetGUID(); break;
|
||||||
case NPC_ADA: uiAdaGUID = pCreature->GetGUID(); break;
|
case NPC_ADA: uiAdaGUID = pCreature->GetGUID(); break;
|
||||||
|
case NPC_ARCHMAGE_ARUGAL: uiArchmageArugalGUID = pCreature->GetGUID(); break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -123,8 +145,16 @@ struct TRINITY_DLL_DECL instance_shadowfang_keep : public ScriptedInstance
|
|||||||
m_auiEncounter[1] = data;
|
m_auiEncounter[1] = data;
|
||||||
break;
|
break;
|
||||||
case TYPE_FENRUS:
|
case TYPE_FENRUS:
|
||||||
if (data == DONE)
|
switch(data)
|
||||||
DoUseDoorOrButton(DoorSorcererGUID);
|
{
|
||||||
|
case DONE:
|
||||||
|
uiTimer = 1000;
|
||||||
|
uiPhase = 1;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
DoUseDoorOrButton(DoorSorcererGUID);
|
||||||
|
break;
|
||||||
|
}
|
||||||
m_auiEncounter[2] = data;
|
m_auiEncounter[2] = data;
|
||||||
break;
|
break;
|
||||||
case TYPE_NANDOS:
|
case TYPE_NANDOS:
|
||||||
@@ -190,6 +220,45 @@ struct TRINITY_DLL_DECL instance_shadowfang_keep : public ScriptedInstance
|
|||||||
|
|
||||||
OUT_LOAD_INST_DATA_COMPLETE;
|
OUT_LOAD_INST_DATA_COMPLETE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Update(uint32 uiDiff)
|
||||||
|
{
|
||||||
|
if (GetData(TYPE_FENRUS) != DONE)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Creature* pArchmage = instance->GetCreature(uiArchmageArugalGUID);
|
||||||
|
Creature* pSummon = NULL;
|
||||||
|
|
||||||
|
if (!pArchmage || !pArchmage->isAlive())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (uiPhase)
|
||||||
|
{
|
||||||
|
if (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)
|
InstanceData* GetInstanceData_instance_shadowfang_keep(Map* pMap)
|
||||||
|
|||||||
@@ -44,7 +44,9 @@ enum eEnums
|
|||||||
SAY_POST2_DOOR_AD = -1033006,
|
SAY_POST2_DOOR_AD = -1033006,
|
||||||
|
|
||||||
SPELL_UNLOCK = 6421,
|
SPELL_UNLOCK = 6421,
|
||||||
NPC_ASH = 3850
|
NPC_ASH = 3850,
|
||||||
|
|
||||||
|
SPELL_DARK_OFFERING = 7154
|
||||||
};
|
};
|
||||||
|
|
||||||
#define GOSSIP_ITEM_DOOR "Thanks, I'll follow you to the door."
|
#define GOSSIP_ITEM_DOOR "Thanks, I'll follow you to the door."
|
||||||
@@ -129,9 +131,57 @@ bool GossipSelect_npc_shadowfang_prisoner(Player* pPlayer, Creature* pCreature,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct TRINITY_DLL_DECL npc_arugal_voidwalkerAI : public ScriptedAI
|
||||||
|
{
|
||||||
|
npc_arugal_voidwalkerAI(Creature* pCreature) : ScriptedAI(pCreature)
|
||||||
|
{
|
||||||
|
pInstance = pCreature->GetInstanceData();
|
||||||
|
}
|
||||||
|
|
||||||
|
ScriptedInstance* pInstance;
|
||||||
|
|
||||||
|
uint32 uiDarkOffering;
|
||||||
|
|
||||||
|
void Reset()
|
||||||
|
{
|
||||||
|
uiDarkOffering = urand(290,10);
|
||||||
|
}
|
||||||
|
|
||||||
|
void UpdateAI(uint32 const uiDiff)
|
||||||
|
{
|
||||||
|
if (!UpdateVictim())
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (uiDarkOffering <= uiDiff)
|
||||||
|
{
|
||||||
|
if (Creature* pFriend = m_creature->FindNearestCreature(m_creature->GetEntry(),25.0f,true))
|
||||||
|
{
|
||||||
|
if (pFriend)
|
||||||
|
DoCast(pFriend,SPELL_DARK_OFFERING);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
DoCast(m_creature,SPELL_DARK_OFFERING);
|
||||||
|
uiDarkOffering = urand(4400,12500);
|
||||||
|
} else uiDarkOffering -= uiDiff;
|
||||||
|
|
||||||
|
DoMeleeAttackIfReady();
|
||||||
|
}
|
||||||
|
|
||||||
|
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()
|
void AddSC_shadowfang_keep()
|
||||||
{
|
{
|
||||||
Script *newscript;
|
Script* newscript;
|
||||||
|
|
||||||
newscript = new Script;
|
newscript = new Script;
|
||||||
newscript->Name = "npc_shadowfang_prisoner";
|
newscript->Name = "npc_shadowfang_prisoner";
|
||||||
@@ -139,5 +189,10 @@ void AddSC_shadowfang_keep()
|
|||||||
newscript->pGossipSelect = &GossipSelect_npc_shadowfang_prisoner;
|
newscript->pGossipSelect = &GossipSelect_npc_shadowfang_prisoner;
|
||||||
newscript->GetAI = &GetAI_npc_shadowfang_prisoner;
|
newscript->GetAI = &GetAI_npc_shadowfang_prisoner;
|
||||||
newscript->RegisterSelf();
|
newscript->RegisterSelf();
|
||||||
|
|
||||||
|
newscript = new Script;
|
||||||
|
newscript->Name = "npc_arugal_voidwalker";
|
||||||
|
newscript->GetAI = &GetAI_npc_arugal_voidwalker;
|
||||||
|
newscript->RegisterSelf();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -5,9 +5,13 @@
|
|||||||
#ifndef DEF_SHADOWFANG_H
|
#ifndef DEF_SHADOWFANG_H
|
||||||
#define DEF_SHADOWFANG_H
|
#define DEF_SHADOWFANG_H
|
||||||
|
|
||||||
#define TYPE_FREE_NPC 1
|
enum eData
|
||||||
#define TYPE_RETHILGORE 2
|
{
|
||||||
#define TYPE_FENRUS 3
|
TYPE_FREE_NPC = 1,
|
||||||
#define TYPE_NANDOS 4
|
TYPE_RETHILGORE = 2,
|
||||||
|
TYPE_FENRUS = 3,
|
||||||
|
TYPE_NANDOS = 4
|
||||||
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user