Merge pull request #16486 from Rushor/spiderman

[3.3.5][6.x]Scripts/Karazhan: Implement Optional Boss Spawn
This commit is contained in:
Rushor
2016-02-09 21:18:58 +01:00
3 changed files with 84 additions and 1 deletions

View File

@@ -44,6 +44,13 @@ EndScriptData */
11 - Nightbane
*/
const Position OptionalSpawn[] =
{
{ -10960.981445f, -1940.138428f, 46.178097f, 4.12f }, // Hyakiss the Lurker
{ -10899.903320f, -2085.573730f, 49.474449f, 1.38f }, // Rokad the Ravager
{ -10945.769531f, -2040.153320f, 49.474438f, 0.077f } // Shadikith the Glider
};
class instance_karazhan : public InstanceMapScript
{
public:
@@ -64,6 +71,7 @@ public:
// 1 - OZ, 2 - HOOD, 3 - RAJ, this never gets altered.
m_uiOperaEvent = urand(1, 3);
m_uiOzDeathCount = 0;
OptionalBossCount = 0;
}
uint32 m_auiEncounter[MAX_ENCOUNTER];
@@ -71,6 +79,7 @@ public:
uint32 m_uiOperaEvent;
uint32 m_uiOzDeathCount;
uint32 OptionalBossCount;
ObjectGuid m_uiCurtainGUID;
ObjectGuid m_uiStageDoorLeftGUID;
@@ -107,6 +116,29 @@ public:
}
}
void OnUnitDeath(Unit* unit) override
{
Creature* creature = unit->ToCreature();
if (!creature)
return;
switch (creature->GetEntry())
{
case NPC_COLDMIST_WIDOW:
case NPC_COLDMIST_STALKER:
case NPC_SHADOWBAT:
case NPC_VAMPIRIC_SHADOWBAT:
case NPC_GREATER_SHADOWBAT:
case NPC_PHASE_HOUND:
case NPC_DREADBEAST:
case NPC_SHADOWBEAST:
SetData(TYPE_OPTIONAL_BOSS, NOT_STARTED);
break;
default:
break;
}
}
void SetData(uint32 type, uint32 uiData) override
{
switch (type)
@@ -118,7 +150,28 @@ public:
m_auiEncounter[1] = uiData;
break;
case TYPE_MAIDEN: m_auiEncounter[2] = uiData; break;
case TYPE_OPTIONAL_BOSS: m_auiEncounter[3] = uiData; break;
case TYPE_OPTIONAL_BOSS:
m_auiEncounter[3] = uiData;
if (uiData == NOT_STARTED)
{
++OptionalBossCount;
if (OptionalBossCount == 50)
{
switch (urand(0, 2))
{
case 0:
instance->SummonCreature(NPC_HYAKISS_THE_LURKER, OptionalSpawn[0]);
break;
case 1:
instance->SummonCreature(NPC_ROKAD_THE_RAVAGER, OptionalSpawn[1]);
break;
case 2:
instance->SummonCreature(NPC_SHADIKITH_THE_GLIDER, OptionalSpawn[2]);
break;
}
}
}
break;
case TYPE_OPERA:
m_auiEncounter[4] = uiData;
if (uiData == DONE)

View File

@@ -64,4 +64,20 @@ enum OperaEvents
EVENT_RAJ = 3
};
enum MiscCreatures
{
NPC_HYAKISS_THE_LURKER = 16179,
NPC_ROKAD_THE_RAVAGER = 16181,
NPC_SHADIKITH_THE_GLIDER = 16180,
// Trash
NPC_COLDMIST_WIDOW = 16171,
NPC_COLDMIST_STALKER = 16170,
NPC_SHADOWBAT = 16173,
NPC_VAMPIRIC_SHADOWBAT = 16175,
NPC_GREATER_SHADOWBAT = 16174,
NPC_PHASE_HOUND = 16178,
NPC_DREADBEAST = 16177,
NPC_SHADOWBEAST = 16176
};
#endif