Scripts/Icecrown Citadel: Implemented boss raid frames for Blood Prince Council

This commit is contained in:
Shauren
2011-01-23 21:42:32 +01:00
parent ac689f456d
commit e5b4f8e84d
3 changed files with 27 additions and 5 deletions

View File

@@ -397,15 +397,16 @@ bool InstanceScript::CheckAchievementCriteriaMeet(uint32 criteria_id, Player con
return false;
}
void InstanceScript::SendEncounterUnit(uint32 type, Unit* unit, uint8 param1 /*= 0*/, uint8 param2 /*= 0*/)
void InstanceScript::SendEncounterUnit(uint32 type, Unit* unit /*= NULL*/, uint8 param1 /*= 0*/, uint8 param2 /*= 0*/)
{
WorldPacket data(SMSG_UPDATE_INSTANCE_ENCOUNTER_UNIT, 1);
// size of this packet is at most 15 (usually less)
WorldPacket data(SMSG_UPDATE_INSTANCE_ENCOUNTER_UNIT, 15);
data << uint32(type);
switch (type)
{
case 0:
case 1:
case ENCOUNTER_FRAME_ADD:
case ENCOUNTER_FRAME_REMOVE:
case 2:
data.append(unit->GetPackGUID());
data << uint8(param1);

View File

@@ -39,6 +39,12 @@ class Creature;
typedef std::set<GameObject*> DoorSet;
typedef std::set<Creature*> MinionSet;
enum EncounterFrameType
{
ENCOUNTER_FRAME_ADD = 0,
ENCOUNTER_FRAME_REMOVE = 1,
};
enum EncounterState
{
NOT_STARTED = 0,
@@ -190,7 +196,7 @@ class InstanceScript : public ZoneScript
// Checks boss requirements (one boss required to kill other)
virtual bool CheckRequiredBosses(uint32 /*bossId*/, Player const* /*player*/ = NULL) const { return true; }
void SendEncounterUnit(uint32 type, Unit* unit, uint8 param1 = 0, uint8 param2 = 0);
void SendEncounterUnit(uint32 type, Unit* unit = NULL, uint8 param1 = 0, uint8 param2 = 0);
protected:
void SetBossNumber(uint32 number) { bosses.resize(number); }

View File

@@ -213,16 +213,25 @@ class boss_blood_council_controller : public CreatureScript
DoCast(me, SPELL_INVOCATION_OF_BLOOD_VALANAR);
if (Creature* keleseth = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PRINCE_KELESETH_GUID)))
{
instance->SendEncounterUnit(ENCOUNTER_FRAME_ADD, keleseth);
if (!keleseth->isInCombat())
DoZoneInCombat(keleseth);
}
if (Creature* taldaram = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PRINCE_TALDARAM_GUID)))
{
instance->SendEncounterUnit(ENCOUNTER_FRAME_ADD, taldaram);
if (!taldaram->isInCombat())
DoZoneInCombat(taldaram);
}
if (Creature* valanar = ObjectAccessor::GetCreature(*me, instance->GetData64(DATA_PRINCE_VALANAR_GUID)))
{
instance->SendEncounterUnit(ENCOUNTER_FRAME_ADD, valanar);
if (!valanar->isInCombat())
DoZoneInCombat(valanar);
}
events.ScheduleEvent(EVENT_INVOCATION_OF_BLOOD, 46500);
@@ -408,10 +417,12 @@ class boss_prince_keleseth_icc : public CreatureScript
void JustDied(Unit* /*killer*/)
{
Talk(SAY_KELESETH_DEATH);
instance->SendEncounterUnit(ENCOUNTER_FRAME_REMOVE, me);
}
void JustReachedHome()
{
instance->SendEncounterUnit(ENCOUNTER_FRAME_REMOVE, me);
me->SetHealth(spawnHealth);
isEmpowered = false;
}
@@ -593,10 +604,12 @@ class boss_prince_taldaram_icc : public CreatureScript
void JustDied(Unit* /*killer*/)
{
Talk(EMOTE_TALDARAM_DEATH);
instance->SendEncounterUnit(ENCOUNTER_FRAME_REMOVE, me);
}
void JustReachedHome()
{
instance->SendEncounterUnit(ENCOUNTER_FRAME_REMOVE, me);
me->SetHealth(spawnHealth);
isEmpowered = false;
}
@@ -792,10 +805,12 @@ class boss_prince_valanar_icc : public CreatureScript
void JustDied(Unit* /*killer*/)
{
Talk(SAY_VALANAR_DEATH);
instance->SendEncounterUnit(ENCOUNTER_FRAME_REMOVE, me);
}
void JustReachedHome()
{
instance->SendEncounterUnit(ENCOUNTER_FRAME_REMOVE, me);
me->SetHealth(me->GetMaxHealth());
isEmpowered = false;
}