Gundrak: Implement Eck the Ferocious spawning

Based on pivonroll's code but rewrited from scratch

--HG--
branch : trunk
This commit is contained in:
Tartalo
2010-03-22 22:27:37 +01:00
parent e018c4cc7b
commit df45e38ba6
5 changed files with 61 additions and 6 deletions

View File

@@ -20,6 +20,9 @@ enum Spells
SPELL_ECK_SPRING_1 = 55815, //Eck leaps at a distant target. --> Drops aggro and charges a random player. Tank can simply taunt him back.
SPELL_ECK_SPRING_2 = 55837 //Eck leaps at a distant target.
};
static Position EckSpawnPoint = { 1643.877930, 936.278015, 107.204948, 0.668432 };
struct boss_eckAI : public ScriptedAI
{
boss_eckAI(Creature *c) : ScriptedAI(c)
@@ -117,6 +120,31 @@ CreatureAI* GetAI_boss_eck(Creature* pCreature)
return new boss_eckAI (pCreature);
}
struct npc_ruins_dwellerAI : public ScriptedAI
{
npc_ruins_dwellerAI(Creature *c) : ScriptedAI(c)
{
pInstance = c->GetInstanceData();
}
ScriptedInstance* pInstance;
void JustDied(Unit *who)
{
if(pInstance)
{
pInstance->SetData(DATA_RUIN_DIED_DWELLER,m_creature->GetGUID());
if (pInstance->GetData(DATA_RUIN_DIED_DWELLER) == 0)
m_creature->SummonCreature(CREATURE_ECK, EckSpawnPoint, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 300*IN_MILISECONDS);
}
}
};
CreatureAI* GetAI_npc_ruins_dweller(Creature* pCreature)
{
return new npc_ruins_dwellerAI (pCreature);
}
void AddSC_boss_eck()
{
Script *newscript;
@@ -125,4 +153,9 @@ void AddSC_boss_eck()
newscript->Name = "boss_eck";
newscript->GetAI = &GetAI_boss_eck;
newscript->RegisterSelf();
newscript = new Script;
newscript->Name = "npc_ruins_dweller";
newscript->GetAI = &GetAI_npc_ruins_dweller;
newscript->RegisterSelf();
}

View File

@@ -7,7 +7,8 @@ enum Data
DATA_MOORABI_EVENT,
DATA_DRAKKARI_COLOSSUS_EVENT,
DATA_GAL_DARAH_EVENT,
DATA_ECK_THE_FEROCIOUS_EVENT
DATA_ECK_THE_FEROCIOUS_EVENT,
DATA_RUIN_DIED_DWELLER
};
enum Data64
@@ -21,4 +22,14 @@ enum Data64
DATA_DRAKKARI_COLOSSUS
};
enum mainCreatures
{
CREATURE_RUIN_DWELLER = 29920,
CREATURE_SLAD_RAN = 29304,
CREATURE_MOORABI = 29305,
CREATURE_GALDARAH = 29306,
CREATURE_DRAKKARICOLOSSUS = 29307,
CREATURE_ECK = 29932
};
#endif

View File

@@ -55,6 +55,8 @@ struct instance_gundrak : public ScriptedInstance
GOState uiBridgeState;
GOState uiCollisionState;
std::set<uint64> DwellerGUIDs;
std::string str_data;
void Initialize()
@@ -95,6 +97,8 @@ struct instance_gundrak : public ScriptedInstance
uiBridgeState = GO_STATE_ACTIVE;
uiCollisionState = GO_STATE_READY;
DwellerGUIDs.clear();
memset(&m_auiEncounter, 0, sizeof(m_auiEncounter));
}
@@ -110,11 +114,12 @@ struct instance_gundrak : public ScriptedInstance
{
switch(pCreature->GetEntry())
{
case 29304: uiSladRan = pCreature->GetGUID(); break;
case 29305: uiMoorabi = pCreature->GetGUID(); break;
case 29306: uiGalDarah = pCreature->GetGUID(); break;
case 29307: uiDrakkariColossus = pCreature->GetGUID(); break;
case 29932: uiEckTheFerocious = pCreature->GetGUID(); break;
case CREATURE_SLAD_RAN: uiSladRan = pCreature->GetGUID(); break;
case CREATURE_MOORABI: uiMoorabi = pCreature->GetGUID(); break;
case CREATURE_GALDARAH: uiGalDarah = pCreature->GetGUID(); break;
case CREATURE_DRAKKARICOLOSSUS: uiDrakkariColossus = pCreature->GetGUID(); break;
case CREATURE_ECK: uiEckTheFerocious = pCreature->GetGUID(); break;
case CREATURE_RUIN_DWELLER: DwellerGUIDs.insert(pCreature->GetGUID()); break;
}
}
@@ -263,6 +268,9 @@ struct instance_gundrak : public ScriptedInstance
if (bHeroicMode && data == DONE)
HandleGameObject(uiEckTheFerociousDoorBehind,true);
break;
case DATA_RUIN_DIED_DWELLER:
DwellerGUIDs.erase(data);
break;
}
if (data == DONE)
@@ -278,6 +286,7 @@ struct instance_gundrak : public ScriptedInstance
case DATA_GAL_DARAH_EVENT: return m_auiEncounter[2];
case DATA_DRAKKARI_COLOSSUS_EVENT: return m_auiEncounter[3];
case DATA_ECK_THE_FEROCIOUS_EVENT: return m_auiEncounter[4];
case DATA_RUIN_DIED_DWELLER: return DwellerGUIDs.size();
}
return 0;