refactor(Core/Scripts): restyle scripts lib with astyle (#3467)

This commit is contained in:
Kargatum
2020-10-11 15:35:34 +07:00
committed by GitHub
parent 4cca286a4d
commit 5e20b46812
538 changed files with 92888 additions and 91297 deletions

View File

@@ -98,7 +98,7 @@ public:
struct boss_ingvar_the_plundererAI : public ScriptedAI
{
boss_ingvar_the_plundererAI(Creature *c) : ScriptedAI(c), summons(me)
boss_ingvar_the_plundererAI(Creature* c) : ScriptedAI(c), summons(me)
{
pInstance = c->GetInstanceScript();
}
@@ -126,7 +126,7 @@ public:
pInstance->SetData(DATA_INGVAR, NOT_STARTED);
}
void DamageTaken(Unit*, uint32 &damage, DamageEffectType, SpellSchoolMask)
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask)
{
if (me->GetDisplayId() == DISPLAYID_DEFAULT && damage >= me->GetHealth())
{
@@ -146,7 +146,7 @@ public:
}
}
void EnterCombat(Unit * /*who*/)
void EnterCombat(Unit* /*who*/)
{
events.Reset();
// schedule Phase 1 abilities
@@ -171,7 +171,7 @@ public:
s->SetCanFly(true);
s->SetDisableGravity(true);
s->SetHover(true);
s->SetPosition(s->GetPositionX(), s->GetPositionY(), s->GetPositionZ()+35.0f, s->GetOrientation());
s->SetPosition(s->GetPositionX(), s->GetPositionY(), s->GetPositionZ() + 35.0f, s->GetOrientation());
s->SetFacingTo(s->GetOrientation());
}
else if (s->GetEntry() == NPC_THROW)
@@ -254,7 +254,7 @@ public:
break;
case EVENT_VALKYR_MOVE:
if( Creature* s = ObjectAccessor::GetCreature(*me, ValkyrGUID) )
s->GetMotionMaster()->MovePoint(1, s->GetPositionX(), s->GetPositionY(), s->GetPositionZ()-15.0f);
s->GetMotionMaster()->MovePoint(1, s->GetPositionX(), s->GetPositionY(), s->GetPositionZ() - 15.0f);
events.PopEvent();
break;
case EVENT_ANNHYLDE_YELL:
@@ -322,7 +322,7 @@ public:
me->CastSpell((Unit*)NULL, SPELL_STAGGERING_ROAR, false);
else
me->CastSpell((Unit*)NULL, SPELL_DREADFUL_ROAR, false);
events.RepeatEvent(urand(15000,20000));
events.RepeatEvent(urand(15000, 20000));
break;
case EVENT_SPELL_CLEAVE_OR_WOE_STRIKE:
if( me->GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID) == 0 )
@@ -334,7 +334,7 @@ public:
me->CastSpell(me->GetVictim(), SPELL_CLEAVE, false);
else
me->CastSpell(me->GetVictim(), SPELL_WOE_STRIKE, false);
events.RepeatEvent(urand(0,4000)+3000);
events.RepeatEvent(urand(0, 4000) + 3000);
break;
case EVENT_SPELL_SMASH:
if( me->GetUInt32Value(UNIT_VIRTUAL_ITEM_SLOT_ID) == 0 )
@@ -349,7 +349,7 @@ public:
me->CastSpell((Unit*)NULL, SPELL_SMASH, false);
else
me->CastSpell((Unit*)NULL, SPELL_DARK_SMASH, false);
events.RepeatEvent(urand(9000,11000));
events.RepeatEvent(urand(9000, 11000));
events.RescheduleEvent(EVENT_UNROOT, 3750);
break;
case EVENT_SPELL_ENRAGE_OR_SHADOW_AXE:
@@ -368,7 +368,7 @@ public:
break;
case EVENT_AXE_RETURN:
if (Creature* c = ObjectAccessor::GetCreature(*me, ThrowGUID))
c->GetMotionMaster()->MoveCharge(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()+0.5f);
c->GetMotionMaster()->MoveCharge(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 0.5f);
events.PopEvent();
events.RescheduleEvent(EVENT_AXE_PICKUP, 1500);
break;

View File

@@ -55,7 +55,7 @@ public:
struct npc_frost_tombAI : public NullCreatureAI
{
npc_frost_tombAI(Creature *c) : NullCreatureAI(c), PrisonerGUID(0)
npc_frost_tombAI(Creature* c) : NullCreatureAI(c), PrisonerGUID(0)
{
if (TempSummon* t = c->ToTempSummon())
if (Unit* s = t->GetSummoner())
@@ -113,7 +113,7 @@ public:
struct boss_kelesethAI : public ScriptedAI
{
boss_kelesethAI(Creature *c) : ScriptedAI(c)
boss_kelesethAI(Creature* c) : ScriptedAI(c)
{
pInstance = c->GetInstanceScript();
}
@@ -172,7 +172,7 @@ public:
return;
events.Update(diff);
if( me->HasUnitState(UNIT_STATE_CASTING) )
return;
@@ -182,7 +182,7 @@ public:
break;
case EVENT_SPELL_SHADOWBOLT:
me->CastSpell(me->GetVictim(), SPELL_SHADOWBOLT, false);
events.RepeatEvent(urand(4000,5000));
events.RepeatEvent(urand(4000, 5000));
break;
case EVENT_FROST_TOMB:
if( Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 0.0f, true) )
@@ -200,9 +200,9 @@ public:
Talk(SAY_SUMMON_SKELETONS);
for (uint8 i = 0; i < 5; ++i)
{
float dist = rand_norm()*4+3.0f;
float angle = rand_norm()*2*M_PI;
if( Creature* c = me->SummonCreature(NPC_SKELETON, 156.2f+cos(angle)*dist, 259.1f+sin(angle)*dist, 42.9f, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20000) )
float dist = rand_norm() * 4 + 3.0f;
float angle = rand_norm() * 2 * M_PI;
if( Creature* c = me->SummonCreature(NPC_SKELETON, 156.2f + cos(angle) * dist, 259.1f + sin(angle) * dist, 42.9f, 0, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 20000) )
if( Unit* target = c->SelectNearestTarget(250.0f) )
{
c->AddThreat(target, 5.0f);
@@ -243,23 +243,23 @@ public:
struct npc_vrykul_skeletonAI : public ScriptedAI
{
npc_vrykul_skeletonAI(Creature *c) : ScriptedAI(c)
npc_vrykul_skeletonAI(Creature* c) : ScriptedAI(c)
{
pInstance = c->GetInstanceScript();
}
InstanceScript *pInstance;
InstanceScript* pInstance;
EventMap events;
void Reset()
{
events.Reset();
events.RescheduleEvent(EVENT_SPELL_DECREPIFY, urand(10000,20000));
events.RescheduleEvent(EVENT_SPELL_DECREPIFY, urand(10000, 20000));
if( IsHeroic() )
events.RescheduleEvent(EVENT_SPELL_BONE_ARMOR, urand(25000,120000));
events.RescheduleEvent(EVENT_SPELL_BONE_ARMOR, urand(25000, 120000));
}
void DamageTaken(Unit*, uint32 &damage, DamageEffectType, SpellSchoolMask)
void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask)
{
if (damage >= me->GetHealth())
{
@@ -303,12 +303,12 @@ public:
case EVENT_SPELL_DECREPIFY:
if( !me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE) )
me->CastSpell(me->GetVictim(), SPELL_DECREPIFY, false);
events.RepeatEvent(urand(15000,25000));
events.RepeatEvent(urand(15000, 25000));
break;
case EVENT_SPELL_BONE_ARMOR:
if( !me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE) )
me->CastSpell((Unit*)NULL, SPELL_BONE_ARMOR, false);
events.RepeatEvent(urand(40000,120000));
events.RepeatEvent(urand(40000, 120000));
break;
case EVENT_RESURRECT:
events.PopEvent();
@@ -337,31 +337,31 @@ public:
class spell_frost_tomb : public SpellScriptLoader
{
public:
spell_frost_tomb() : SpellScriptLoader("spell_frost_tomb") { }
public:
spell_frost_tomb() : SpellScriptLoader("spell_frost_tomb") { }
class spell_frost_tombAuraScript : public AuraScript
class spell_frost_tombAuraScript : public AuraScript
{
PrepareAuraScript(spell_frost_tombAuraScript);
void HandleEffectPeriodic(AuraEffect const* aurEff)
{
PrepareAuraScript(spell_frost_tombAuraScript);
void HandleEffectPeriodic(AuraEffect const* aurEff)
{
PreventDefaultAction();
if (aurEff->GetTickNumber()==1)
if( Unit* target = GetTarget() )
target->CastSpell((Unit*)NULL, SPELL_FROST_TOMB_SUMMON, true);
}
void Register()
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_frost_tombAuraScript::HandleEffectPeriodic, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY);
}
};
AuraScript* GetAuraScript() const
{
return new spell_frost_tombAuraScript();
PreventDefaultAction();
if (aurEff->GetTickNumber() == 1)
if( Unit* target = GetTarget() )
target->CastSpell((Unit*)NULL, SPELL_FROST_TOMB_SUMMON, true);
}
void Register()
{
OnEffectPeriodic += AuraEffectPeriodicFn(spell_frost_tombAuraScript::HandleEffectPeriodic, EFFECT_1, SPELL_AURA_PERIODIC_DUMMY);
}
};
AuraScript* GetAuraScript() const
{
return new spell_frost_tombAuraScript();
}
};
void AddSC_boss_keleseth()

View File

@@ -65,7 +65,7 @@ public:
struct boss_skarvald_the_constructorAI : public ScriptedAI
{
boss_skarvald_the_constructorAI(Creature *c) : ScriptedAI(c)
boss_skarvald_the_constructorAI(Creature* c) : ScriptedAI(c)
{
pInstance = c->GetInstanceScript();
}
@@ -100,7 +100,7 @@ public:
}
}
void EnterCombat(Unit * who)
void EnterCombat(Unit* who)
{
events.Reset();
events.RescheduleEvent(EVENT_SPELL_CHARGE, 5000);
@@ -121,7 +121,7 @@ public:
}
}
void KilledUnit(Unit * /*victim*/)
void KilledUnit(Unit* /*victim*/)
{
if (me->GetEntry() == NPC_SKARVALD)
Talk(YELL_SKARVALD_KILL);
@@ -131,8 +131,10 @@ public:
{
if( me->GetEntry() != NPC_SKARVALD )
return;
if( pInstance ) {
if( Creature* dalronn = pInstance->instance->GetCreature(pInstance->GetData64(DATA_DALRONN)) ) {
if( pInstance )
{
if( Creature* dalronn = pInstance->instance->GetCreature(pInstance->GetData64(DATA_DALRONN)) )
{
if( dalronn->isDead() )
{
Talk(YELL_SKARVALD_SKA_DIEDFIRST);
@@ -157,7 +159,7 @@ public:
return;
events.Update(diff);
if( me->HasUnitState(UNIT_STATE_CASTING) )
return;
@@ -176,13 +178,13 @@ public:
me->AddThreat(target, 10000.0f);
me->CastSpell(target, SPELL_CHARGE, false);
}
events.RepeatEvent(urand(5000,10000));
events.RepeatEvent(urand(5000, 10000));
break;
case EVENT_SPELL_STONE_STRIKE:
if( me->GetVictim() && me->IsWithinMeleeRange(me->GetVictim()) )
{
me->CastSpell(me->GetVictim(), SPELL_STONE_STRIKE, false);
events.RepeatEvent(urand(5000,10000));
events.RepeatEvent(urand(5000, 10000));
}
else
events.RepeatEvent(3000);
@@ -206,7 +208,7 @@ public:
struct boss_dalronn_the_controllerAI : public ScriptedAI
{
boss_dalronn_the_controllerAI(Creature *c) : ScriptedAI(c), summons(me)
boss_dalronn_the_controllerAI(Creature* c) : ScriptedAI(c), summons(me)
{
pInstance = c->GetInstanceScript();
}
@@ -246,7 +248,7 @@ public:
}
}
void EnterCombat(Unit * who)
void EnterCombat(Unit* who)
{
events.Reset();
events.RescheduleEvent(EVENT_SPELL_SHADOW_BOLT, 1000);
@@ -269,7 +271,7 @@ public:
}
}
void KilledUnit(Unit * /*victim*/)
void KilledUnit(Unit* /*victim*/)
{
if (me->GetEntry() == NPC_DALRONN)
Talk(YELL_DALRONN_KILL);
@@ -284,8 +286,10 @@ public:
{
if( me->GetEntry() != NPC_DALRONN )
return;
if( pInstance ) {
if( Creature* skarvald = pInstance->instance->GetCreature(pInstance->GetData64(DATA_SKARVALD)) ) {
if( pInstance )
{
if( Creature* skarvald = pInstance->instance->GetCreature(pInstance->GetData64(DATA_SKARVALD)) )
{
if( skarvald->isDead() )
{
Talk(YELL_DALRONN_DAL_DIEDFIRST);
@@ -309,7 +313,7 @@ public:
return;
events.Update(diff);
if( me->HasUnitState(UNIT_STATE_CASTING) )
return;
@@ -328,20 +332,20 @@ public:
case EVENT_SPELL_SHADOW_BOLT:
if( Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 42.0f, true) )
me->CastSpell(target, SPELL_SHADOW_BOLT, false);
events.RepeatEvent(2500);
events.RepeatEvent(2500);
break;
case EVENT_SPELL_DEBILITATE:
if( Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0, 45.0f, true) )
{
me->CastSpell(target, SPELL_DEBILITATE, false);
events.RepeatEvent(urand(5000,10000));
events.RepeatEvent(urand(5000, 10000));
}
else
events.RepeatEvent(3000);
break;
case EVENT_SPELL_SUMMON_SKELETONS:
me->CastSpell((Unit*)NULL, SPELL_SUMMON_SKELETONS, false);
events.RepeatEvent(urand(20000,30000));
events.RepeatEvent(urand(20000, 30000));
break;
}

View File

@@ -81,9 +81,8 @@ public:
c->SetVisible(true);
return;
}
else
if(c->IsVisible())
c->SetVisible(false);
else if(c->IsVisible())
c->SetVisible(false);
}
}
@@ -91,14 +90,30 @@ public:
{
switch(creature->GetEntry())
{
case NPC_KELESETH: NPC_KelesethGUID = creature->GetGUID(); break;
case NPC_DALRONN: NPC_DalronnGUID = creature->GetGUID(); break;
case NPC_SKARVALD: NPC_SkarvaldGUID = creature->GetGUID(); break;
case NPC_DALRONN_GHOST: NPC_DalronnGhostGUID = creature->GetGUID(); break;
case NPC_SKARVALD_GHOST: NPC_SkarvaldGhostGUID = creature->GetGUID(); break;
case NPC_INGVAR: NPC_IngvarGUID = creature->GetGUID(); break;
case NPC_DARK_RANGER_MARRAH:NPC_DarkRangerMarrahGUID = creature->GetGUID(); break;
case NPC_ENSLAVED_PROTO_DRAKE: if (creature->GetPositionX() < 250.0f) NPC_SpecialDrakeGUID = creature->GetGUID(); break;
case NPC_KELESETH:
NPC_KelesethGUID = creature->GetGUID();
break;
case NPC_DALRONN:
NPC_DalronnGUID = creature->GetGUID();
break;
case NPC_SKARVALD:
NPC_SkarvaldGUID = creature->GetGUID();
break;
case NPC_DALRONN_GHOST:
NPC_DalronnGhostGUID = creature->GetGUID();
break;
case NPC_SKARVALD_GHOST:
NPC_SkarvaldGhostGUID = creature->GetGUID();
break;
case NPC_INGVAR:
NPC_IngvarGUID = creature->GetGUID();
break;
case NPC_DARK_RANGER_MARRAH:
NPC_DarkRangerMarrahGUID = creature->GetGUID();
break;
case NPC_ENSLAVED_PROTO_DRAKE:
if (creature->GetPositionX() < 250.0f) NPC_SpecialDrakeGUID = creature->GetGUID();
break;
}
}
@@ -199,7 +214,7 @@ public:
c->DespawnOrUnsummon();
NPC_SkarvaldGhostGUID = 0;
}
m_auiEncounter[1] = data;
break;
case DATA_UNLOCK_SKARVALD_LOOT:
@@ -211,7 +226,7 @@ public:
if (uint32 lootid = c->GetCreatureTemplate()->lootid)
c->loot.FillLoot(lootid, LootTemplates_Creature, c->GetLootRecipient(), false, false, c->GetLootMode());
if (c->GetLootMode())
c->loot.generateMoneyLoot(c->GetCreatureTemplate()->mingold,c->GetCreatureTemplate()->maxgold);
c->loot.generateMoneyLoot(c->GetCreatureTemplate()->mingold, c->GetCreatureTemplate()->maxgold);
c->DestroyForNearbyPlayers();
c->SetVisible(true);
}
@@ -226,7 +241,7 @@ public:
if (uint32 lootid = c->GetCreatureTemplate()->lootid)
c->loot.FillLoot(lootid, LootTemplates_Creature, c->GetLootRecipient(), false, false, c->GetLootMode());
if (c->GetLootMode())
c->loot.generateMoneyLoot(c->GetCreatureTemplate()->mingold,c->GetCreatureTemplate()->maxgold);
c->loot.generateMoneyLoot(c->GetCreatureTemplate()->mingold, c->GetCreatureTemplate()->maxgold);
c->DestroyForNearbyPlayers();
c->SetVisible(true);
}
@@ -244,17 +259,17 @@ public:
case DATA_FORGE_3:
if (data == NOT_STARTED)
{
HandleGameObject(GO_ForgeBellowGUID[type-100], false);
HandleGameObject(GO_ForgeFireGUID[type-100], false);
HandleGameObject(GO_ForgeAnvilGUID[type-100], false);
ForgeEventMask &= ~((uint32)(1<<(type-100)));
HandleGameObject(GO_ForgeBellowGUID[type - 100], false);
HandleGameObject(GO_ForgeFireGUID[type - 100], false);
HandleGameObject(GO_ForgeAnvilGUID[type - 100], false);
ForgeEventMask &= ~((uint32)(1 << (type - 100)));
}
else
{
HandleGameObject(GO_ForgeBellowGUID[type-100], true);
HandleGameObject(GO_ForgeFireGUID[type-100], true);
HandleGameObject(GO_ForgeAnvilGUID[type-100], true);
ForgeEventMask |= (uint32)(1<<(type-100));
HandleGameObject(GO_ForgeBellowGUID[type - 100], true);
HandleGameObject(GO_ForgeFireGUID[type - 100], true);
HandleGameObject(GO_ForgeAnvilGUID[type - 100], true);
ForgeEventMask |= (uint32)(1 << (type - 100));
}
break;
case DATA_SPECIAL_DRAKE:
@@ -273,10 +288,14 @@ public:
{
switch(id)
{
case DATA_KELESETH: return NPC_KelesethGUID;
case DATA_DALRONN: return NPC_DalronnGUID;
case DATA_SKARVALD: return NPC_SkarvaldGUID;
case DATA_INGVAR: return NPC_IngvarGUID;
case DATA_KELESETH:
return NPC_KelesethGUID;
case DATA_DALRONN:
return NPC_DalronnGUID;
case DATA_SKARVALD:
return NPC_SkarvaldGUID;
case DATA_INGVAR:
return NPC_IngvarGUID;
}
return 0;
}
@@ -292,7 +311,7 @@ public:
case DATA_FORGE_1:
case DATA_FORGE_2:
case DATA_FORGE_3:
return ForgeEventMask & (uint32)(1<<(id-100));
return ForgeEventMask & (uint32)(1 << (id - 100));
}
return 0;
}
@@ -336,7 +355,8 @@ public:
for (uint8 i = 0; i < MAX_ENCOUNTER; ++i)
if (m_auiEncounter[i] == IN_PROGRESS)
m_auiEncounter[i] = NOT_STARTED;
} else OUT_LOAD_INST_DATA_FAIL;
}
else OUT_LOAD_INST_DATA_FAIL;
OUT_LOAD_INST_DATA_COMPLETE;
}

View File

@@ -20,18 +20,18 @@ public:
struct npc_dragonflayer_forge_masterAI : public ScriptedAI
{
npc_dragonflayer_forge_masterAI(Creature *c) : ScriptedAI(c)
npc_dragonflayer_forge_masterAI(Creature* c) : ScriptedAI(c)
{
pInstance = c->GetInstanceScript();
float x = me->GetHomePosition().GetPositionX();
float y = me->GetHomePosition().GetPositionY();
if (x>344.0f && x<357.0f && y<-35.0f && y>-44.0f)
if (x > 344.0f && x < 357.0f && y < -35.0f && y > -44.0f)
{
dataId = DATA_FORGE_1;
prevDataId = 0;
}
else if (x>380.0f && x<389.0f && y<-12.0f && y>-21.0f)
else if (x > 380.0f && x < 389.0f && y < -12.0f && y > -21.0f)
{
dataId = DATA_FORGE_2;
prevDataId = DATA_FORGE_1;
@@ -199,36 +199,36 @@ enum TickingTimeBomb
class spell_ticking_time_bomb : public SpellScriptLoader
{
public:
spell_ticking_time_bomb() : SpellScriptLoader("spell_ticking_time_bomb") { }
public:
spell_ticking_time_bomb() : SpellScriptLoader("spell_ticking_time_bomb") { }
class spell_ticking_time_bomb_AuraScript : public AuraScript
class spell_ticking_time_bomb_AuraScript : public AuraScript
{
PrepareAuraScript(spell_ticking_time_bomb_AuraScript);
bool Validate(SpellInfo const* /*spellEntry*/)
{
PrepareAuraScript(spell_ticking_time_bomb_AuraScript);
bool Validate(SpellInfo const* /*spellEntry*/)
{
return (bool) sSpellMgr->GetSpellInfo(SPELL_TICKING_TIME_BOMB_EXPLODE);
}
void HandleOnEffectRemove(AuraEffect const* /* aurEff */, AuraEffectHandleModes /* mode */)
{
if (GetCaster() == GetTarget())
{
GetTarget()->CastSpell(GetTarget(), SPELL_TICKING_TIME_BOMB_EXPLODE, true);
}
}
void Register()
{
OnEffectRemove += AuraEffectRemoveFn(spell_ticking_time_bomb_AuraScript::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
AuraScript* GetAuraScript() const
{
return new spell_ticking_time_bomb_AuraScript();
return (bool) sSpellMgr->GetSpellInfo(SPELL_TICKING_TIME_BOMB_EXPLODE);
}
void HandleOnEffectRemove(AuraEffect const* /* aurEff */, AuraEffectHandleModes /* mode */)
{
if (GetCaster() == GetTarget())
{
GetTarget()->CastSpell(GetTarget(), SPELL_TICKING_TIME_BOMB_EXPLODE, true);
}
}
void Register()
{
OnEffectRemove += AuraEffectRemoveFn(spell_ticking_time_bomb_AuraScript::HandleOnEffectRemove, EFFECT_0, SPELL_AURA_PERIODIC_DUMMY, AURA_EFFECT_HANDLE_REAL);
}
};
AuraScript* GetAuraScript() const
{
return new spell_ticking_time_bomb_AuraScript();
}
};
void AddSC_utgarde_keep()

View File

@@ -106,12 +106,12 @@ public:
struct boss_palehoofAI : public ScriptedAI
{
boss_palehoofAI(Creature *pCreature) : ScriptedAI(pCreature), summons(me)
boss_palehoofAI(Creature* pCreature) : ScriptedAI(pCreature), summons(me)
{
m_pInstance = pCreature->GetInstanceScript();
}
InstanceScript *m_pInstance;
InstanceScript* m_pInstance;
EventMap events;
SummonList summons;
uint64 OrbGUID;
@@ -126,7 +126,7 @@ public:
do
{
good = true;
RandomUnfreeze[i] = urand(0,3);
RandomUnfreeze[i] = urand(0, 3);
for (uint8 j = 0; j < i; ++j)
if (RandomUnfreeze[i] == RandomUnfreeze[j])
@@ -134,8 +134,7 @@ public:
good = false;
break;
}
}
while (!good);
} while (!good);
}
events.Reset();
@@ -144,7 +143,7 @@ public:
OrbGUID = 0;
Counter = 0;
me->CastSpell(me, SPELL_FREEZE, true);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
me->SetControlled(false, UNIT_STATE_STUNNED);
if (m_pInstance)
@@ -152,7 +151,7 @@ public:
m_pInstance->SetData(DATA_GORTOK_PALEHOOF, NOT_STARTED);
// Reset statue
if (GameObject *statisGenerator = m_pInstance->instance->GetGameObject(m_pInstance->GetData64(STATIS_GENERATOR)))
if (GameObject* statisGenerator = m_pInstance->instance->GetGameObject(m_pInstance->GetData64(STATIS_GENERATOR)))
{
statisGenerator->RemoveFlag(GAMEOBJECT_FLAGS, GO_FLAG_NOT_SELECTABLE);
statisGenerator->SetGoState(GO_STATE_READY);
@@ -161,7 +160,7 @@ public:
// Reset mini bosses
for(uint8 i = 0; i < 4; ++i)
{
if(Creature *Animal = ObjectAccessor::GetCreature(*me, m_pInstance->GetData64(DATA_NPC_FRENZIED_WORGEN+i)))
if(Creature* Animal = ObjectAccessor::GetCreature(*me, m_pInstance->GetData64(DATA_NPC_FRENZIED_WORGEN + i)))
{
Animal->SetPosition(Animal->GetHomePosition());
Animal->StopMovingOnCurrentPos();
@@ -178,7 +177,7 @@ public:
{
if (param == ACTION_START_EVENT)
{
if (Creature *cr = me->SummonCreature(NPC_ORB_TRIGGER, 238.608f, -460.71f, 109.567f))
if (Creature* cr = me->SummonCreature(NPC_ORB_TRIGGER, 238.608f, -460.71f, 109.567f))
{
OrbGUID = cr->GetGUID();
cr->AddAura(SPELL_ORB_VISUAL, cr);
@@ -204,7 +203,7 @@ public:
m_pInstance->SetData(DATA_GORTOK_PALEHOOF, IN_PROGRESS);
}
void MoveInLineOfSight(Unit *who)
void MoveInLineOfSight(Unit* who)
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE))
return;
@@ -226,85 +225,85 @@ public:
switch (events.GetEvent())
{
case EVENT_UNFREEZE_MONSTER:
{
if (Creature *orb = ObjectAccessor::GetCreature(*me, OrbGUID))
{
if (Creature *miniBoss = ObjectAccessor::GetCreature(*me, m_pInstance->GetData64(DATA_NPC_FRENZIED_WORGEN+RandomUnfreeze[Counter])))
if (Creature* orb = ObjectAccessor::GetCreature(*me, OrbGUID))
{
Counter++;
miniBoss->AI()->DoAction(ACTION_UNFREEZE);
orb->CastSpell(miniBoss, SPELL_AWAKEN_SUBBOSS, true);
events.ScheduleEvent(EVENT_UNFREEZE_MONSTER2, 6000);
if (Creature* miniBoss = ObjectAccessor::GetCreature(*me, m_pInstance->GetData64(DATA_NPC_FRENZIED_WORGEN + RandomUnfreeze[Counter])))
{
Counter++;
miniBoss->AI()->DoAction(ACTION_UNFREEZE);
orb->CastSpell(miniBoss, SPELL_AWAKEN_SUBBOSS, true);
events.ScheduleEvent(EVENT_UNFREEZE_MONSTER2, 6000);
}
else
EnterEvadeMode();
}
else
EnterEvadeMode();
events.PopEvent();
break;
}
events.PopEvent();
break;
}
case EVENT_UNFREEZE_MONSTER2:
{
if (Creature *orb = ObjectAccessor::GetCreature(*me, OrbGUID))
{
if (Creature *miniBoss = ObjectAccessor::GetCreature(*me, m_pInstance->GetData64(DATA_NPC_FRENZIED_WORGEN+RandomUnfreeze[Counter-1])))
if (Creature* orb = ObjectAccessor::GetCreature(*me, OrbGUID))
{
miniBoss->AI()->DoAction(ACTION_UNFREEZE2);
orb->RemoveAurasDueToSpell(SPELL_AWAKEN_SUBBOSS);
if (Creature* miniBoss = ObjectAccessor::GetCreature(*me, m_pInstance->GetData64(DATA_NPC_FRENZIED_WORGEN + RandomUnfreeze[Counter - 1])))
{
miniBoss->AI()->DoAction(ACTION_UNFREEZE2);
orb->RemoveAurasDueToSpell(SPELL_AWAKEN_SUBBOSS);
}
else
EnterEvadeMode();
}
else
EnterEvadeMode();
events.PopEvent();
break;
}
events.PopEvent();
break;
}
case EVENT_PALEHOOF_START:
{
if (Creature *orb = ObjectAccessor::GetCreature(*me, OrbGUID))
{
orb->CastSpell(me, SPELL_AWAKEN_SUBBOSS, true);
events.ScheduleEvent(EVENT_PALEHOOF_START2, 6000);
if (Creature* orb = ObjectAccessor::GetCreature(*me, OrbGUID))
{
orb->CastSpell(me, SPELL_AWAKEN_SUBBOSS, true);
events.ScheduleEvent(EVENT_PALEHOOF_START2, 6000);
}
events.PopEvent();
break;
}
events.PopEvent();
break;
}
case EVENT_PALEHOOF_START2:
{
Talk(SAY_AGGRO);
if (Creature *orb = ObjectAccessor::GetCreature(*me, OrbGUID))
orb->RemoveAurasDueToSpell(SPELL_AWAKEN_SUBBOSS);
{
Talk(SAY_AGGRO);
if (Creature* orb = ObjectAccessor::GetCreature(*me, OrbGUID))
orb->RemoveAurasDueToSpell(SPELL_AWAKEN_SUBBOSS);
me->RemoveAurasDueToSpell(SPELL_FREEZE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
me->SetControlled(false, UNIT_STATE_STUNNED);
// SETINCOMBATWITHZONE
me->RemoveAurasDueToSpell(SPELL_FREEZE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
me->SetControlled(false, UNIT_STATE_STUNNED);
// SETINCOMBATWITHZONE
// schedule combat events
events.ScheduleEvent(EVENT_PALEHOOF_WITHERING_ROAR, 10000);
events.ScheduleEvent(EVENT_PALEHOOF_IMPALE, 12000);
events.ScheduleEvent(EVENT_PALEHOOF_ARCING_SMASH, 15000);
events.PopEvent();
break;
}
// schedule combat events
events.ScheduleEvent(EVENT_PALEHOOF_WITHERING_ROAR, 10000);
events.ScheduleEvent(EVENT_PALEHOOF_IMPALE, 12000);
events.ScheduleEvent(EVENT_PALEHOOF_ARCING_SMASH, 15000);
events.PopEvent();
break;
}
case EVENT_PALEHOOF_WITHERING_ROAR:
{
me->CastSpell(me, IsHeroic() ? SPELL_WITHERING_ROAR_H : SPELL_WITHERING_ROAR_N, false);
events.RepeatEvent(8000 + rand()%4000);
break;
}
{
me->CastSpell(me, IsHeroic() ? SPELL_WITHERING_ROAR_H : SPELL_WITHERING_ROAR_N, false);
events.RepeatEvent(8000 + rand() % 4000);
break;
}
case EVENT_PALEHOOF_IMPALE:
{
if (Unit *tgt = SelectTarget(SELECT_TARGET_RANDOM, 0))
me->CastSpell(tgt, IsHeroic() ? SPELL_IMPALE_H : SPELL_IMPALE_N, false);
{
if (Unit* tgt = SelectTarget(SELECT_TARGET_RANDOM, 0))
me->CastSpell(tgt, IsHeroic() ? SPELL_IMPALE_H : SPELL_IMPALE_N, false);
events.RepeatEvent(8000 + rand()%4000);
break;
}
events.RepeatEvent(8000 + rand() % 4000);
break;
}
case EVENT_PALEHOOF_ARCING_SMASH:
{
me->CastSpell(me->GetVictim(), SPELL_ARCING_SMASH, false);
events.RepeatEvent(13000 + rand()%4000);
break;
}
{
me->CastSpell(me->GetVictim(), SPELL_ARCING_SMASH, false);
events.RepeatEvent(13000 + rand() % 4000);
break;
}
}
DoMeleeAttackIfReady();
@@ -348,7 +347,7 @@ public:
m_pInstance = pCreature->GetInstanceScript();
}
InstanceScript *m_pInstance;
InstanceScript* m_pInstance;
EventMap events;
SummonList summons;
@@ -356,10 +355,10 @@ public:
{
summons.DespawnAll();
events.Reset();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
}
void EnterCombat(Unit *) {}
void EnterCombat(Unit*) {}
void DoAction(int32 param)
{
@@ -381,7 +380,7 @@ public:
summons.DespawnAll();
}
void MoveInLineOfSight(Unit *who)
void MoveInLineOfSight(Unit* who)
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
return;
@@ -406,39 +405,39 @@ public:
switch (events.GetEvent())
{
case EVENT_JORMUNGAR_ACID_SPIT:
{
if (Unit *tgt = SelectTarget(SELECT_TARGET_RANDOM, 0))
me->CastSpell(tgt, SPELL_ACID_SPIT, false);
events.RepeatEvent(2000 + rand()%2000);
break;
}
case EVENT_JORMUNGAR_ACID_SPLATTER:
{
me->CastSpell(me, IsHeroic() ? SPELL_ACID_SPLATTER_H : SPELL_ACID_SPLATTER_N, false);
// Aura summon wont work because of duration
float x, y, z;
me->GetPosition(x, y, z);
for (uint8 i = 0; i < 6; ++i)
{
if (Creature* pJormungarWorm = me->SummonCreature(NPC_JORMUNGAR_WORM, x+rand()%10, y+rand()%10, z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 360000))
{
summons.Summon(pJormungarWorm);
pJormungarWorm->SetInCombatWithZone();
}
}
events.RepeatEvent(10000 + rand()%4000);
break;
}
case EVENT_JORMUNGAR_POISON_BREATH:
{
if (Unit *tgt = SelectTarget(SELECT_TARGET_RANDOM, 0))
me->CastSpell(tgt, IsHeroic() ? SPELL_POISON_BREATH_H : SPELL_POISON_BREATH_N, false);
if (Unit* tgt = SelectTarget(SELECT_TARGET_RANDOM, 0))
me->CastSpell(tgt, SPELL_ACID_SPIT, false);
events.RepeatEvent(8000 + rand()%4000);
break;
}
events.RepeatEvent(2000 + rand() % 2000);
break;
}
case EVENT_JORMUNGAR_ACID_SPLATTER:
{
me->CastSpell(me, IsHeroic() ? SPELL_ACID_SPLATTER_H : SPELL_ACID_SPLATTER_N, false);
// Aura summon wont work because of duration
float x, y, z;
me->GetPosition(x, y, z);
for (uint8 i = 0; i < 6; ++i)
{
if (Creature* pJormungarWorm = me->SummonCreature(NPC_JORMUNGAR_WORM, x + rand() % 10, y + rand() % 10, z, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 360000))
{
summons.Summon(pJormungarWorm);
pJormungarWorm->SetInCombatWithZone();
}
}
events.RepeatEvent(10000 + rand() % 4000);
break;
}
case EVENT_JORMUNGAR_POISON_BREATH:
{
if (Unit* tgt = SelectTarget(SELECT_TARGET_RANDOM, 0))
me->CastSpell(tgt, IsHeroic() ? SPELL_POISON_BREATH_H : SPELL_POISON_BREATH_N, false);
events.RepeatEvent(8000 + rand() % 4000);
break;
}
}
DoMeleeAttackIfReady();
@@ -448,7 +447,7 @@ public:
{
if (m_pInstance)
{
if (Creature *palehoof = ObjectAccessor::GetCreature(*me, m_pInstance->GetData64(DATA_GORTOK_PALEHOOF)))
if (Creature* palehoof = ObjectAccessor::GetCreature(*me, m_pInstance->GetData64(DATA_GORTOK_PALEHOOF)))
palehoof->AI()->DoAction(ACTION_MINIBOSS_DIED);
}
}
@@ -476,16 +475,16 @@ public:
m_pInstance = pCreature->GetInstanceScript();
}
InstanceScript *m_pInstance;
InstanceScript* m_pInstance;
EventMap events;
void Reset()
{
events.Reset();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
}
void EnterCombat(Unit *) {}
void EnterCombat(Unit*) {}
void DoAction(int32 param)
{
@@ -505,7 +504,7 @@ public:
}
}
void MoveInLineOfSight(Unit *who)
void MoveInLineOfSight(Unit* who)
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
return;
@@ -530,25 +529,25 @@ public:
switch (events.GetEvent())
{
case EVENT_RHINO_STOMP:
{
me->CastSpell(me->GetVictim(), SPELL_STOMP, false);
events.RepeatEvent(8000 + rand()%4000);
break;
}
{
me->CastSpell(me->GetVictim(), SPELL_STOMP, false);
events.RepeatEvent(8000 + rand() % 4000);
break;
}
case EVENT_RHINO_GORE:
{
me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_GORE_H : SPELL_GORE_N, false);
events.RepeatEvent(13000 + rand()%4000);
break;
}
{
me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_GORE_H : SPELL_GORE_N, false);
events.RepeatEvent(13000 + rand() % 4000);
break;
}
case EVENT_RHINO_WOUND:
{
if (Unit *tgt = SelectTarget(SELECT_TARGET_RANDOM, 0))
me->CastSpell(tgt, IsHeroic() ? SPELL_GRIEVOUS_WOUND_H : SPELL_GRIEVOUS_WOUND_N, false);
{
if (Unit* tgt = SelectTarget(SELECT_TARGET_RANDOM, 0))
me->CastSpell(tgt, IsHeroic() ? SPELL_GRIEVOUS_WOUND_H : SPELL_GRIEVOUS_WOUND_N, false);
events.RepeatEvent(18000 + rand()%4000);
break;
}
events.RepeatEvent(18000 + rand() % 4000);
break;
}
}
DoMeleeAttackIfReady();
@@ -558,7 +557,7 @@ public:
{
if (m_pInstance)
{
if (Creature *palehoof = ObjectAccessor::GetCreature(*me, m_pInstance->GetData64(DATA_GORTOK_PALEHOOF)))
if (Creature* palehoof = ObjectAccessor::GetCreature(*me, m_pInstance->GetData64(DATA_GORTOK_PALEHOOF)))
palehoof->AI()->DoAction(ACTION_MINIBOSS_DIED);
}
}
@@ -586,16 +585,16 @@ public:
m_pInstance = pCreature->GetInstanceScript();
}
InstanceScript *m_pInstance;
InstanceScript* m_pInstance;
EventMap events;
void Reset()
{
events.Reset();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
}
void EnterCombat(Unit *) {}
void EnterCombat(Unit*) {}
void DoAction(int32 param)
{
@@ -615,7 +614,7 @@ public:
}
}
void MoveInLineOfSight(Unit *who)
void MoveInLineOfSight(Unit* who)
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
return;
@@ -640,23 +639,23 @@ public:
switch (events.GetEvent())
{
case EVENT_FURBOLG_CHAIN:
{
me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_CHAIN_LIGHTING_H : SPELL_CHAIN_LIGHTING_N, false);
events.RepeatEvent(4000 + rand()%3000);
break;
}
{
me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_CHAIN_LIGHTING_H : SPELL_CHAIN_LIGHTING_N, false);
events.RepeatEvent(4000 + rand() % 3000);
break;
}
case EVENT_FURBOLG_CRAZED:
{
me->CastSpell(me, SPELL_CRAZED, false);
events.RepeatEvent(8000 + rand()%4000);
break;
}
{
me->CastSpell(me, SPELL_CRAZED, false);
events.RepeatEvent(8000 + rand() % 4000);
break;
}
case EVENT_FURBOLG_ROAR:
{
me->CastSpell(me, SPELL_TERRIFYING_ROAR, false);
events.RepeatEvent(10000 + rand()%5000);
break;
}
{
me->CastSpell(me, SPELL_TERRIFYING_ROAR, false);
events.RepeatEvent(10000 + rand() % 5000);
break;
}
}
DoMeleeAttackIfReady();
@@ -666,7 +665,7 @@ public:
{
if (m_pInstance)
{
if (Creature *palehoof = ObjectAccessor::GetCreature(*me, m_pInstance->GetData64(DATA_GORTOK_PALEHOOF)))
if (Creature* palehoof = ObjectAccessor::GetCreature(*me, m_pInstance->GetData64(DATA_GORTOK_PALEHOOF)))
palehoof->AI()->DoAction(ACTION_MINIBOSS_DIED);
}
}
@@ -694,16 +693,16 @@ public:
m_pInstance = pCreature->GetInstanceScript();
}
InstanceScript *m_pInstance;
InstanceScript* m_pInstance;
EventMap events;
void Reset()
{
events.Reset();
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_NOT_SELECTABLE);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
}
void EnterCombat(Unit *) {}
void EnterCombat(Unit*) {}
void DoAction(int32 param)
{
@@ -723,7 +722,7 @@ public:
}
}
void MoveInLineOfSight(Unit *who)
void MoveInLineOfSight(Unit* who)
{
if (me->HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE))
return;
@@ -748,23 +747,23 @@ public:
switch (events.GetEvent())
{
case EVENT_WORGEN_MORTAL:
{
me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_MORTAL_WOUND_H : SPELL_MORTAL_WOUND_N, false);
events.RepeatEvent(4000 + rand()%3000);
break;
}
{
me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_MORTAL_WOUND_H : SPELL_MORTAL_WOUND_N, false);
events.RepeatEvent(4000 + rand() % 3000);
break;
}
case EVENT_WORGEN_ENRAGE1:
{
me->CastSpell(me, SPELL_ENRAGE_1, false);
events.RepeatEvent(15000);
break;
}
{
me->CastSpell(me, SPELL_ENRAGE_1, false);
events.RepeatEvent(15000);
break;
}
case EVENT_WORGEN_ENRAGE2:
{
me->CastSpell(me, SPELL_ENRAGE_2, false);
events.RepeatEvent(10000);
break;
}
{
me->CastSpell(me, SPELL_ENRAGE_2, false);
events.RepeatEvent(10000);
break;
}
}
DoMeleeAttackIfReady();
@@ -774,7 +773,7 @@ public:
{
if (m_pInstance)
{
if (Creature *palehoof = ObjectAccessor::GetCreature(*me, m_pInstance->GetData64(DATA_GORTOK_PALEHOOF)))
if (Creature* palehoof = ObjectAccessor::GetCreature(*me, m_pInstance->GetData64(DATA_GORTOK_PALEHOOF)))
palehoof->AI()->DoAction(ACTION_MINIBOSS_DIED);
}
}
@@ -786,11 +785,11 @@ class go_palehoof_sphere : public GameObjectScript
public:
go_palehoof_sphere() : GameObjectScript("go_palehoof_sphere") { }
bool OnGossipHello(Player * /*pPlayer*/, GameObject *go) override
bool OnGossipHello(Player* /*pPlayer*/, GameObject* go) override
{
InstanceScript *pInstance = go->GetInstanceScript();
InstanceScript* pInstance = go->GetInstanceScript();
Creature *pPalehoof = ObjectAccessor::GetCreature(*go, pInstance ? pInstance->GetData64(DATA_GORTOK_PALEHOOF) : 0);
Creature* pPalehoof = ObjectAccessor::GetCreature(*go, pInstance ? pInstance->GetData64(DATA_GORTOK_PALEHOOF) : 0);
if (pPalehoof && pPalehoof->IsAlive())
{
// maybe these are hacks :(

View File

@@ -68,7 +68,7 @@ enum Events
EVENT_GRAUF_REMOVE_SKADI = 14,
};
static Position TrashPosition[]=
static Position TrashPosition[] =
{
{441.236f, -512.000f, 104.930f, 0.0f},
{478.436f, -494.475f, 104.730f, 0.0f}
@@ -105,12 +105,12 @@ public:
struct boss_skadiAI : public ScriptedAI
{
boss_skadiAI(Creature *pCreature) : ScriptedAI(pCreature), summons(me)
boss_skadiAI(Creature* pCreature) : ScriptedAI(pCreature), summons(me)
{
m_pInstance = pCreature->GetInstanceScript();
}
InstanceScript *m_pInstance;
InstanceScript* m_pInstance;
EventMap events;
SummonList summons;
uint64 GraufGUID;
@@ -120,7 +120,7 @@ public:
{
events.Reset();
summons.DespawnAll();
if (Creature *cr = me->SummonCreature(NPC_GRAUF, 341.741f, -516.955f, 104.669f, 3.12414f))
if (Creature* cr = me->SummonCreature(NPC_GRAUF, 341.741f, -516.955f, 104.669f, 3.12414f))
{
GraufGUID = cr->GetGUID();
summons.Summon(cr);
@@ -143,7 +143,7 @@ public:
}
}
Creature *GetGrauf() { return ObjectAccessor::GetCreature(*me, GraufGUID); }
Creature* GetGrauf() { return ObjectAccessor::GetCreature(*me, GraufGUID); }
void EnterCombat(Unit* /*pWho*/)
{
@@ -194,40 +194,40 @@ public:
switch (events.GetEvent())
{
case EVENT_SKADI_START:
{
me->SetControlled(false, UNIT_STATE_ROOT);
if (Creature *cr = GetGrauf())
{
me->EnterVehicleUnattackable(cr, 0);
cr->AI()->DoAction(ACTION_START_EVENT);
me->SetControlled(false, UNIT_STATE_ROOT);
if (Creature* cr = GetGrauf())
{
me->EnterVehicleUnattackable(cr, 0);
cr->AI()->DoAction(ACTION_START_EVENT);
}
else
EnterEvadeMode();
events.PopEvent();
break;
}
else
EnterEvadeMode();
events.PopEvent();
break;
}
case EVENT_SKADI_CRUSH:
{
me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_CRUSH_H : SPELL_CRUSH_N, false);
events.RepeatEvent(8000);
break;
}
{
me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_CRUSH_H : SPELL_CRUSH_N, false);
events.RepeatEvent(8000);
break;
}
case EVENT_SKADI_SPEAR:
{
if (Unit *tgt = SelectTarget(SELECT_TARGET_RANDOM, 0))
me->CastSpell(tgt, IsHeroic() ? SPELL_POISONED_SPEAR_H : SPELL_POISONED_SPEAR_N, false);
{
if (Unit* tgt = SelectTarget(SELECT_TARGET_RANDOM, 0))
me->CastSpell(tgt, IsHeroic() ? SPELL_POISONED_SPEAR_H : SPELL_POISONED_SPEAR_N, false);
events.RepeatEvent(10000);
break;
}
events.RepeatEvent(10000);
break;
}
case EVENT_SKADI_WHIRLWIND:
{
me->CastSpell(me, IsHeroic() ? SPELL_WHIRLWIND_H : SPELL_WHIRLWIND_N, false);
events.RepeatEvent(15000 + rand()%5000);
events.DelayEvents(10000);
break;
}
{
me->CastSpell(me, IsHeroic() ? SPELL_WHIRLWIND_H : SPELL_WHIRLWIND_N, false);
events.RepeatEvent(15000 + rand() % 5000);
events.DelayEvents(10000);
break;
}
}
DoMeleeAttackIfReady();
@@ -247,7 +247,7 @@ public:
void KilledUnit(Unit* /*pVictim*/)
{
if (urand(0,1))
if (urand(0, 1))
return;
Talk(SAY_KILL);
@@ -267,12 +267,12 @@ public:
struct boss_skadi_graufAI : public VehicleAI
{
boss_skadi_graufAI(Creature *pCreature) : VehicleAI(pCreature), summons(me)
boss_skadi_graufAI(Creature* pCreature) : VehicleAI(pCreature), summons(me)
{
m_pInstance = pCreature->GetInstanceScript();
}
InstanceScript *m_pInstance;
InstanceScript* m_pInstance;
EventMap events;
SummonList summons;
uint8 currentPos;
@@ -296,8 +296,8 @@ public:
}
else if (param == ACTION_REMOVE_SKADI)
{
if (Unit *passenger = me->GetVehicleKit()->GetPassenger(0))
if (Creature *skadi = passenger->ToCreature())
if (Unit* passenger = me->GetVehicleKit()->GetPassenger(0))
if (Creature* skadi = passenger->ToCreature())
skadi->AI()->Talk(SAY_DRAKE_DEATH);
me->GetMotionMaster()->MovePoint(10, 480.0f, -513.0f, 108.0f);
events.ScheduleEvent(EVENT_GRAUF_REMOVE_SKADI, 2000);
@@ -311,7 +311,7 @@ public:
}
}
void SpellHitTarget(Unit *target, const SpellInfo *spellInfo)
void SpellHitTarget(Unit* target, const SpellInfo* spellInfo)
{
if (spellInfo->Id == 47593) // SPELL_FLAME_VISUAL trigger
target->CastSpell(target, me->GetMap()->IsHeroic() ? SPELL_FLAME_BREATH_H : SPELL_FLAME_BREATH_N, true);
@@ -322,21 +322,21 @@ public:
for(uint8 j = 0; j < 50; ++j)
{
if (point == 1)
me->SummonCreature(NPC_BREATH_TRIGGER, 480.0f-(j*3), -518.0f+(j/16.0f), 105.0f, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000);
me->SummonCreature(NPC_BREATH_TRIGGER, 480.0f - (j * 3), -518.0f + (j / 16.0f), 105.0f, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000);
else
me->SummonCreature(NPC_BREATH_TRIGGER, 480.0f-(j*3), -510.0f+(j/16.0f), 105.0f, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000);
me->SummonCreature(NPC_BREATH_TRIGGER, 480.0f - (j * 3), -510.0f + (j / 16.0f), 105.0f, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000);
}
// and out of loop, cover the small room
if (point == 0)
{
Creature *cr;
Creature* cr;
if ((cr = me->SummonCreature(NPC_BREATH_TRIGGER, 483, -484.9f, 105, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000)))
cr->CastSpell(cr, cr->GetMap()->IsHeroic() ? SPELL_FLAME_BREATH_H : SPELL_FLAME_BREATH_N, true);
if ((cr = me->SummonCreature(NPC_BREATH_TRIGGER, 471.0f, -484.7f, 105, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000)))
cr->CastSpell(cr, cr->GetMap()->IsHeroic() ? SPELL_FLAME_BREATH_H : SPELL_FLAME_BREATH_N, true);
for (uint8 j = 0; j < 7; j++)
if ((cr = me->SummonCreature(NPC_BREATH_TRIGGER, 477.0f, -507.0f+(j*3), 105.0f, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000)))
if ((cr = me->SummonCreature(NPC_BREATH_TRIGGER, 477.0f, -507.0f + (j * 3), 105.0f, 0, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 30000)))
cr->CastSpell(cr, cr->GetMap()->IsHeroic() ? SPELL_FLAME_BREATH_H : SPELL_FLAME_BREATH_N, true);
}
}
@@ -345,19 +345,19 @@ public:
{
switch(Id)
{
case 0:
case 1:
me->RemoveAurasDueToSpell(SPELL_FLAME_VISUAL);
me->SetFacingTo(M_PI*2);
break;
case 2:
case 3:
if (m_pInstance)
m_pInstance->SetData(SKADI_IN_RANGE, 1);
case 0:
case 1:
me->RemoveAurasDueToSpell(SPELL_FLAME_VISUAL);
me->SetFacingTo(M_PI * 2);
break;
case 2:
case 3:
if (m_pInstance)
m_pInstance->SetData(SKADI_IN_RANGE, 1);
me->MonsterTextEmote(EMOTE_IN_RANGE, 0, true);
me->SetFacingTo(M_PI);
break;
me->MonsterTextEmote(EMOTE_IN_RANGE, 0, true);
me->SetFacingTo(M_PI);
break;
}
}
@@ -367,7 +367,7 @@ public:
{
case 0:
case 1:
return 2+urand(0,1);
return 2 + urand(0, 1);
default:
if (me->GetPositionY() < -515.0f)
return 1;
@@ -376,14 +376,14 @@ public:
}
}
void EnterCombat(Unit *)
void EnterCombat(Unit*)
{
me->SetInCombatWithZone();
}
void RemoveSkadi(bool withEvade)
{
if (Unit *skadi = me->GetVehicleKit()->GetPassenger(0))
if (Unit* skadi = me->GetVehicleKit()->GetPassenger(0))
{
summons.DespawnAll();
skadi->ExitVehicle();
@@ -415,12 +415,12 @@ public:
void SpawnHelpers(uint8 Spot)
{
if (Creature *Harpooner = me->SummonCreature(NPC_YMIRJAR_HARPOONER, TrashPosition[Spot].GetPositionX()+rand()%5, TrashPosition[Spot].GetPositionY()+rand()%5, TrashPosition[Spot].GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000))
if (Creature* Harpooner = me->SummonCreature(NPC_YMIRJAR_HARPOONER, TrashPosition[Spot].GetPositionX() + rand() % 5, TrashPosition[Spot].GetPositionY() + rand() % 5, TrashPosition[Spot].GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000))
{
Harpooner->SetInCombatWithZone();
summons.Summon(Harpooner);
}
if (Creature *Second = me->SummonCreature((urand(0,1) ? NPC_YMIRJAR_WARRIOR : NPC_YMIRJAR_WITCH_DOCTOR), TrashPosition[Spot].GetPositionX()+rand()%5, TrashPosition[Spot].GetPositionY()+rand()%5, TrashPosition[Spot].GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000))
if (Creature* Second = me->SummonCreature((urand(0, 1) ? NPC_YMIRJAR_WARRIOR : NPC_YMIRJAR_WITCH_DOCTOR), TrashPosition[Spot].GetPositionX() + rand() % 5, TrashPosition[Spot].GetPositionY() + rand() % 5, TrashPosition[Spot].GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000))
{
Second->SetInCombatWithZone();
summons.Summon(Second);
@@ -433,54 +433,54 @@ public:
switch (events.GetEvent())
{
case EVENT_GRAUF_CHECK:
{
CheckPlayers();
events.RepeatEvent(2000);
break;
}
case EVENT_GRAUF_START:
{
me->GetMotionMaster()->Clear(true);
me->GetMotionMaster()->MoveTakeoff(10, SkadiPosition[0].GetPositionX(), SkadiPosition[0].GetPositionY(), SkadiPosition[0].GetPositionZ(), 3.0f);
SpawnHelpers(0);
SpawnHelpers(0);
events.ScheduleEvent(EVENT_GRAUF_MOVE, 15000);
events.ScheduleEvent(EVENT_GRAUF_SUMMON_HELPERS, 20000);
events.PopEvent();
break;
}
case EVENT_GRAUF_MOVE:
{
AchievementHitCount = 0;
uint8 targetPoint = SelectNextPos(currentPos);
me->GetMotionMaster()->MovePoint(targetPoint, SkadiPosition[targetPoint].GetPositionX(), SkadiPosition[targetPoint].GetPositionY(), SkadiPosition[targetPoint].GetPositionZ());
if (targetPoint <= 1)
{
SpawnFlameTriggers(targetPoint);
me->CastSpell(me, SPELL_FLAME_VISUAL, false);
CheckPlayers();
events.RepeatEvent(2000);
break;
}
case EVENT_GRAUF_START:
{
me->GetMotionMaster()->Clear(true);
me->GetMotionMaster()->MoveTakeoff(10, SkadiPosition[0].GetPositionX(), SkadiPosition[0].GetPositionY(), SkadiPosition[0].GetPositionZ(), 3.0f);
if (m_pInstance)
m_pInstance->SetData(SKADI_IN_RANGE, 0);
SpawnHelpers(0);
SpawnHelpers(0);
events.ScheduleEvent(EVENT_GRAUF_MOVE, 15000);
events.ScheduleEvent(EVENT_GRAUF_SUMMON_HELPERS, 20000);
events.PopEvent();
break;
}
case EVENT_GRAUF_MOVE:
{
AchievementHitCount = 0;
uint8 targetPoint = SelectNextPos(currentPos);
me->GetMotionMaster()->MovePoint(targetPoint, SkadiPosition[targetPoint].GetPositionX(), SkadiPosition[targetPoint].GetPositionY(), SkadiPosition[targetPoint].GetPositionZ());
if (targetPoint <= 1)
{
SpawnFlameTriggers(targetPoint);
me->CastSpell(me, SPELL_FLAME_VISUAL, false);
}
currentPos = targetPoint;
events.RepeatEvent(25000);
break;
}
if (m_pInstance)
m_pInstance->SetData(SKADI_IN_RANGE, 0);
currentPos = targetPoint;
events.RepeatEvent(25000);
break;
}
case EVENT_GRAUF_SUMMON_HELPERS:
{
SpawnHelpers(1);
events.RepeatEvent(15000);
break;
}
{
SpawnHelpers(1);
events.RepeatEvent(15000);
break;
}
case EVENT_GRAUF_REMOVE_SKADI:
{
RemoveSkadi(false);
me->DespawnOrUnsummon();
events.PopEvent();
break;
}
{
RemoveSkadi(false);
me->DespawnOrUnsummon();
events.PopEvent();
break;
}
}
}
};
@@ -493,14 +493,14 @@ public:
bool OnGossipHello(Player* pPlayer, GameObject* go) override
{
InstanceScript *m_pInstance = go->GetInstanceScript();
InstanceScript* m_pInstance = go->GetInstanceScript();
if (m_pInstance && m_pInstance->GetData(DATA_SKADI_THE_RUTHLESS) == IN_PROGRESS)
if (m_pInstance->GetData(SKADI_IN_RANGE) == 1)
{
uint8 count = m_pInstance->GetData(SKADI_HITS)+1;
uint8 count = m_pInstance->GetData(SKADI_HITS) + 1;
m_pInstance->SetData(SKADI_HITS, count);
if (Creature *grauf = ObjectAccessor::GetCreature(*pPlayer, m_pInstance->GetData64(DATA_GRAUF)))
if (Creature* grauf = ObjectAccessor::GetCreature(*pPlayer, m_pInstance->GetData64(DATA_GRAUF)))
{
if (count >= 3)
{

View File

@@ -74,7 +74,7 @@ enum Events
EVENT_SORROWGRAVE_FINISH_RITUAL = 15,
};
const Position RitualChannelerLoc[3]=
const Position RitualChannelerLoc[3] =
{
{296.42f, -355.01f, 90.94f, 0.0f},
{302.36f, -352.01f, 90.54f, 0.0f},
@@ -123,10 +123,10 @@ public:
events.Reset();
events2.Reset();
if (!Started)
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
else
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
me->SetHover(true);
}
}
@@ -142,7 +142,7 @@ public:
if (data != 1 || param != 1 || Started || (instance && instance->GetData(DATA_SVALA_SORROWGRAVE) == DONE))
return;
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
Started = true;
me->setActive(true);
events2.ScheduleEvent(EVENT_SVALA_START, 5000);
@@ -225,43 +225,43 @@ public:
events2.ScheduleEvent(EVENT_SVALA_TALK4, 9000);
break;
case 30:
{
WorldPacket data(SMSG_SPLINE_MOVE_SET_HOVER, 9);
data.append(me->GetPackGUID());
me->SendMessageToSet(&data, false);
break;
}
{
WorldPacket data(SMSG_SPLINE_MOVE_SET_HOVER, 9);
data.append(me->GetPackGUID());
me->SendMessageToSet(&data, false);
break;
}
case EVENT_SVALA_TALK4:
{
me->CastSpell(me, SPELL_SVALA_TRANSFORMING1, true);
me->UpdateEntry(NPC_SVALA_SORROWGRAVE);
me->SetCorpseDelay(sWorld->getIntConfig(CONFIG_CORPSE_DECAY_ELITE));
me->SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 6.0f);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
if (Creature* Arthas = ObjectAccessor::GetCreature(*me, ArthasGUID))
Arthas->InterruptNonMeleeSpells(false);
me->RemoveAllAuras();
me->SetWalk(false);
events2.ScheduleEvent(EVENT_SVALA_TALK5, 2000);
{
me->CastSpell(me, SPELL_SVALA_TRANSFORMING1, true);
me->UpdateEntry(NPC_SVALA_SORROWGRAVE);
me->SetCorpseDelay(sWorld->getIntConfig(CONFIG_CORPSE_DECAY_ELITE));
me->SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 6.0f);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
if (Creature* Arthas = ObjectAccessor::GetCreature(*me, ArthasGUID))
Arthas->InterruptNonMeleeSpells(false);
me->RemoveAllAuras();
me->SetWalk(false);
events2.ScheduleEvent(EVENT_SVALA_TALK5, 2000);
std::list<Creature*> creatureList;
me->GetCreaturesWithEntryInRange(creatureList, 100.0f, NPC_DRAGONFLAYER_SPECTATOR);
for (std::list<Creature*>::const_iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr)
(*itr)->AI()->SetData(1, 2);
std::list<Creature*> creatureList;
me->GetCreaturesWithEntryInRange(creatureList, 100.0f, NPC_DRAGONFLAYER_SPECTATOR);
for (std::list<Creature*>::const_iterator itr = creatureList.begin(); itr != creatureList.end(); ++itr)
(*itr)->AI()->SetData(1, 2);
break;
}
break;
}
case EVENT_SVALA_TALK5:
Talk(TALK_INTRO_S2);
events2.ScheduleEvent(EVENT_SVALA_TALK6, 12000);
break;
case EVENT_SVALA_TALK6:
if (Creature *Arthas = ObjectAccessor::GetCreature(*me, ArthasGUID))
if (Creature* Arthas = ObjectAccessor::GetCreature(*me, ArthasGUID))
Arthas->AI()->Talk(TALK_INTRO_A2);
events2.ScheduleEvent(EVENT_SVALA_TALK7, 9000);
break;
case EVENT_SVALA_TALK7:
me->SetFacingTo(M_PI/2.0f);
me->SetFacingTo(M_PI / 2.0f);
Talk(TALK_INTRO_S3);
if (GameObject* mirror = ObjectAccessor::GetGameObject(*me, instance->GetData64(GO_SVALA_MIRROR)))
mirror->SetGoState(GO_STATE_ACTIVE);
@@ -273,7 +273,7 @@ public:
break;
case EVENT_SVALA_TALK9:
me->SetFloatValue(UNIT_FIELD_HOVERHEIGHT, 3.0f);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC|UNIT_FLAG_IMMUNE_TO_NPC);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_IMMUNE_TO_PC | UNIT_FLAG_IMMUNE_TO_NPC);
me->LoadEquipment(1, true);
me->setActive(false);
if (Player* target = SelectTargetFromPlayerList(100.0f))
@@ -302,16 +302,16 @@ public:
events.ScheduleEvent(EVENT_SORROWGRAVE_FLAMES, urand(8000, 12000));
break;
case EVENT_SORROWGRAVE_FLAMES2:
{
std::list<Creature*> braziers;
me->GetCreaturesWithEntryInRange(braziers, 100.0f, NPC_FLAME_BRAZIER);
if (!braziers.empty())
{
for (std::list<Creature*>::const_iterator itr = braziers.begin(); itr != braziers.end(); ++itr)
(*itr)->CastCustomSpell(SPELL_BALL_OF_FLAME, SPELLVALUE_MAX_TARGETS, 1, (*itr), true);
std::list<Creature*> braziers;
me->GetCreaturesWithEntryInRange(braziers, 100.0f, NPC_FLAME_BRAZIER);
if (!braziers.empty())
{
for (std::list<Creature*>::const_iterator itr = braziers.begin(); itr != braziers.end(); ++itr)
(*itr)->CastCustomSpell(SPELL_BALL_OF_FLAME, SPELLVALUE_MAX_TARGETS, 1, (*itr), true);
}
break;
}
break;
}
case EVENT_SORROWGRAVE_RITUAL:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
{
@@ -386,55 +386,55 @@ public:
class spell_svala_ritual_strike : public SpellScriptLoader
{
public:
spell_svala_ritual_strike() : SpellScriptLoader("spell_svala_ritual_strike") { }
public:
spell_svala_ritual_strike() : SpellScriptLoader("spell_svala_ritual_strike") { }
class spell_svala_ritual_strike_SpellScript : public SpellScript
class spell_svala_ritual_strike_SpellScript : public SpellScript
{
PrepareSpellScript(spell_svala_ritual_strike_SpellScript);
void HandleDummyEffect(SpellEffIndex /*effIndex*/)
{
PrepareSpellScript(spell_svala_ritual_strike_SpellScript);
void HandleDummyEffect(SpellEffIndex /*effIndex*/)
if (Unit* unitTarget = GetHitUnit())
{
if (Unit* unitTarget = GetHitUnit())
{
if (unitTarget->GetTypeId() != TYPEID_UNIT)
return;
if (unitTarget->GetTypeId() != TYPEID_UNIT)
return;
Unit::DealDamage(GetCaster(), unitTarget, 7000, NULL, DIRECT_DAMAGE);
}
Unit::DealDamage(GetCaster(), unitTarget, 7000, NULL, DIRECT_DAMAGE);
}
void Register()
{
OnEffectHitTarget += SpellEffectFn(spell_svala_ritual_strike_SpellScript::HandleDummyEffect, EFFECT_2, SPELL_EFFECT_DUMMY);
}
};
SpellScript *GetSpellScript() const
{
return new spell_svala_ritual_strike_SpellScript();
}
class spell_svala_ritual_strike_AuraScript : public AuraScript
void Register()
{
PrepareAuraScript(spell_svala_ritual_strike_AuraScript);
void CalculateAmount(AuraEffect const * /*aurEff*/, int32 & amount, bool & /*canBeRecalculated*/)
{
// Set amount based on difficulty
amount = (GetCaster()->GetMap()->IsHeroic() ? 2000 : 1000);
}
void Register()
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_svala_ritual_strike_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_PERIODIC_DAMAGE);
}
};
AuraScript *GetAuraScript() const
{
return new spell_svala_ritual_strike_AuraScript();
OnEffectHitTarget += SpellEffectFn(spell_svala_ritual_strike_SpellScript::HandleDummyEffect, EFFECT_2, SPELL_EFFECT_DUMMY);
}
};
SpellScript* GetSpellScript() const
{
return new spell_svala_ritual_strike_SpellScript();
}
class spell_svala_ritual_strike_AuraScript : public AuraScript
{
PrepareAuraScript(spell_svala_ritual_strike_AuraScript);
void CalculateAmount(AuraEffect const* /*aurEff*/, int32& amount, bool& /*canBeRecalculated*/)
{
// Set amount based on difficulty
amount = (GetCaster()->GetMap()->IsHeroic() ? 2000 : 1000);
}
void Register()
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_svala_ritual_strike_AuraScript::CalculateAmount, EFFECT_1, SPELL_AURA_PERIODIC_DAMAGE);
}
};
AuraScript* GetAuraScript() const
{
return new spell_svala_ritual_strike_AuraScript();
}
};
void AddSC_boss_svala()

View File

@@ -97,12 +97,12 @@ public:
struct boss_ymironAI : public ScriptedAI
{
boss_ymironAI(Creature *pCreature) : ScriptedAI(pCreature), summons(me), summons2(me)
boss_ymironAI(Creature* pCreature) : ScriptedAI(pCreature), summons(me), summons2(me)
{
pInstance = pCreature->GetInstanceScript();
}
InstanceScript *pInstance;
InstanceScript* pInstance;
EventMap events;
SummonList summons;
SummonList summons2;
@@ -117,7 +117,7 @@ public:
do
{
good = true;
BoatOrder[i] = urand(0,3);
BoatOrder[i] = urand(0, 3);
for (uint8 j = 0; j < i; ++j)
if (BoatOrder[i] == BoatOrder[j])
@@ -125,8 +125,7 @@ public:
good = false;
break;
}
}
while (!good);
} while (!good);
}
events.Reset();
@@ -134,8 +133,8 @@ public:
summons2.DespawnAll();
BoatNum = 0;
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE|UNIT_FLAG_DISABLE_MOVE);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE);
if(pInstance)
{
pInstance->SetData(DATA_KING_YMIRON, NOT_STARTED);
@@ -176,15 +175,15 @@ public:
if (point == 0)
{
Talk(BoatStructure[BoatOrder[BoatNum-1]].say);
if (Creature *cr = me->FindNearestCreature(BoatStructure[BoatOrder[BoatNum-1]].trigger, 50.0f))
Talk(BoatStructure[BoatOrder[BoatNum - 1]].say);
if (Creature* cr = me->FindNearestCreature(BoatStructure[BoatOrder[BoatNum - 1]].trigger, 50.0f))
me->CastSpell(cr, SPELL_CHANNEL_YMIRON_TO_SPIRIT, true);
events.ScheduleEvent(EVENT_YMIRON_ACTIVATE_BOAT, 6000);
}
}
void SpellHitTarget(Unit *, const SpellInfo *spellInfo)
void SpellHitTarget(Unit*, const SpellInfo* spellInfo)
{
if (spellInfo->Id == 59302 && pInstance) // Bane trigger
pInstance->SetData(DATA_YMIRON_ACHIEVEMENT, false);
@@ -202,117 +201,125 @@ public:
switch (events.GetEvent())
{
case EVENT_YMIRON_HEALTH_CHECK:
{
if (me->GetHealth() < std::max(0.0f, float(me->GetMaxHealth()*(1.0f-(IsHeroic() ? 0.2f : 0.334f)*float(BoatNum+1)))))
{
events.DelayEvents(12000);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->InterruptNonMeleeSpells(true);
me->CastSpell(me, SPELL_SCREAMS_OF_THE_DEAD, true);
me->GetMotionMaster()->Clear();
me->GetMotionMaster()->MovePoint(0, BoatStructure[BoatOrder[BoatNum]].MoveX, BoatStructure[BoatOrder[BoatNum]].MoveY, BoatStructure[BoatOrder[BoatNum]].MoveZ);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
summons.DespawnAll();
if (me->GetHealth() < std::max(0.0f, float(me->GetMaxHealth() * (1.0f - (IsHeroic() ? 0.2f : 0.334f)*float(BoatNum + 1)))))
{
events.DelayEvents(12000);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
me->InterruptNonMeleeSpells(true);
me->CastSpell(me, SPELL_SCREAMS_OF_THE_DEAD, true);
me->GetMotionMaster()->Clear();
me->GetMotionMaster()->MovePoint(0, BoatStructure[BoatOrder[BoatNum]].MoveX, BoatStructure[BoatOrder[BoatNum]].MoveY, BoatStructure[BoatOrder[BoatNum]].MoveZ);
me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
summons.DespawnAll();
// Spawn flames in previous boat if any
if (BoatNum) // different than 0
if (Creature *cr = me->SummonTrigger(BoatStructure[BoatOrder[BoatNum-1]].SpawnX, BoatStructure[BoatOrder[BoatNum-1]].SpawnY, BoatStructure[BoatOrder[BoatNum-1]].SpawnZ, 0, 1800000))
{
cr->AddAura(SPELL_FLAMES, cr);
summons2.Summon(cr);
}
// Spawn flames in previous boat if any
if (BoatNum) // different than 0
if (Creature* cr = me->SummonTrigger(BoatStructure[BoatOrder[BoatNum - 1]].SpawnX, BoatStructure[BoatOrder[BoatNum - 1]].SpawnY, BoatStructure[BoatOrder[BoatNum - 1]].SpawnZ, 0, 1800000))
{
cr->AddAura(SPELL_FLAMES, cr);
summons2.Summon(cr);
}
BoatNum++;
BoatNum++;
}
events.RepeatEvent(1000);
break;
}
events.RepeatEvent(1000);
break;
}
case EVENT_YMIRON_BANE:
{
me->CastSpell(me, IsHeroic() ? SPELL_BANE_H : SPELL_BANE_N, false);
events.RepeatEvent(20000+rand()%5000);
break;
}
{
me->CastSpell(me, IsHeroic() ? SPELL_BANE_H : SPELL_BANE_N, false);
events.RepeatEvent(20000 + rand() % 5000);
break;
}
case EVENT_YMIRON_FETID_ROT:
{
me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_FETID_ROT_H : SPELL_FETID_ROT_N, false);
events.RepeatEvent(10000+rand()%3000);
break;
}
{
me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_FETID_ROT_H : SPELL_FETID_ROT_N, false);
events.RepeatEvent(10000 + rand() % 3000);
break;
}
case EVENT_YMIRON_DARK_SLASH:
{
int32 dmg = me->GetVictim()->GetHealth() / 2;
me->CastCustomSpell(me->GetVictim(), SPELL_DARK_SLASH, &dmg, 0, 0, false);
events.RepeatEvent(30000+rand()%5000);
break;
}
{
int32 dmg = me->GetVictim()->GetHealth() / 2;
me->CastCustomSpell(me->GetVictim(), SPELL_DARK_SLASH, &dmg, 0, 0, false);
events.RepeatEvent(30000 + rand() % 5000);
break;
}
case EVENT_YMIRON_ACTIVATE_BOAT:
{
// Spawn it!
if (Creature* king = me->SummonCreature(BoatStructure[BoatOrder[BoatNum-1]].npc, BoatStructure[BoatOrder[BoatNum-1]].SpawnX, BoatStructure[BoatOrder[BoatNum-1]].SpawnY, BoatStructure[BoatOrder[BoatNum-1]].SpawnZ, BoatStructure[BoatOrder[BoatNum-1]].SpawnO, TEMPSUMMON_CORPSE_DESPAWN, 0))
{
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
king->CastSpell(me, SPELL_CHANNEL_SPIRIT_TO_YMIRON, true);
summons.Summon(king);
king->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
king->SetDisableGravity(true);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
me->GetMotionMaster()->MoveChase(me->GetVictim());
switch(BoatOrder[BoatNum-1])
// Spawn it!
if (Creature* king = me->SummonCreature(BoatStructure[BoatOrder[BoatNum - 1]].npc, BoatStructure[BoatOrder[BoatNum - 1]].SpawnX, BoatStructure[BoatOrder[BoatNum - 1]].SpawnY, BoatStructure[BoatOrder[BoatNum - 1]].SpawnZ, BoatStructure[BoatOrder[BoatNum - 1]].SpawnO, TEMPSUMMON_CORPSE_DESPAWN, 0))
{
case 0: events.ScheduleEvent(EVENT_YMIRON_RANULF_ABILITY, 3000, 1); break;
case 1: events.ScheduleEvent(EVENT_YMIRON_TORGYN_ABILITY, 3000, 1); break;
case 2: events.ScheduleEvent(EVENT_YMIRON_BJORN_ABILITY, 3000, 1); break;
case 3: events.ScheduleEvent(EVENT_YMIRON_HALDOR_ABILITY, 3000, 1); break;
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE);
king->CastSpell(me, SPELL_CHANNEL_SPIRIT_TO_YMIRON, true);
summons.Summon(king);
king->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE);
king->SetDisableGravity(true);
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_DISABLE_MOVE);
me->GetMotionMaster()->MoveChase(me->GetVictim());
switch(BoatOrder[BoatNum - 1])
{
case 0:
events.ScheduleEvent(EVENT_YMIRON_RANULF_ABILITY, 3000, 1);
break;
case 1:
events.ScheduleEvent(EVENT_YMIRON_TORGYN_ABILITY, 3000, 1);
break;
case 2:
events.ScheduleEvent(EVENT_YMIRON_BJORN_ABILITY, 3000, 1);
break;
case 3:
events.ScheduleEvent(EVENT_YMIRON_HALDOR_ABILITY, 3000, 1);
break;
}
}
}
events.PopEvent();
break;
}
events.PopEvent();
break;
}
case EVENT_YMIRON_BJORN_ABILITY:
{
if (Creature* sf = me->SummonCreature(NPC_SPIRIT_FOUNT, 385+rand()%10, -330+rand()%10, 104.756f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 180000))
{
summons.Summon(sf);
sf->SetSpeed(MOVE_RUN, 0.4f);
sf->AddAura(IsHeroic() ? SPELL_SPIRIT_FOUNT_H : SPELL_SPIRIT_FOUNT_N, sf);
sf->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
sf->GetMotionMaster()->MoveFollow(me->GetVictim(), 0, rand_norm()*M_PI*2);
}
events.PopEvent();
break;
}
case EVENT_YMIRON_HALDOR_ABILITY:
{
me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_SPIRIT_STRIKE_H : SPELL_SPIRIT_STRIKE_N, false);
events.RepeatEvent(5000);
break;
}
case EVENT_YMIRON_RANULF_ABILITY:
{
me->CastSpell(me, IsHeroic() ? SPELL_SPIRIT_BURST_H : SPELL_SPIRIT_BURST_N, false);
events.RepeatEvent(10000);
break;
}
case EVENT_YMIRON_TORGYN_ABILITY:
{
for(uint8 i = 0; i < 4; ++i)
{
if (Creature* as = me->SummonCreature(NPC_AVENGING_SPIRIT, me->GetPositionX()+rand()%10, me->GetPositionY()+rand()%10, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000))
if (Creature* sf = me->SummonCreature(NPC_SPIRIT_FOUNT, 385 + rand() % 10, -330 + rand() % 10, 104.756f, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 180000))
{
summons.Summon(as);
as->SetInCombatWithZone();
summons.Summon(sf);
sf->SetSpeed(MOVE_RUN, 0.4f);
sf->AddAura(IsHeroic() ? SPELL_SPIRIT_FOUNT_H : SPELL_SPIRIT_FOUNT_N, sf);
sf->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
sf->GetMotionMaster()->MoveFollow(me->GetVictim(), 0, rand_norm()*M_PI * 2);
}
events.PopEvent();
break;
}
case EVENT_YMIRON_HALDOR_ABILITY:
{
me->CastSpell(me->GetVictim(), IsHeroic() ? SPELL_SPIRIT_STRIKE_H : SPELL_SPIRIT_STRIKE_N, false);
events.RepeatEvent(5000);
break;
}
case EVENT_YMIRON_RANULF_ABILITY:
{
me->CastSpell(me, IsHeroic() ? SPELL_SPIRIT_BURST_H : SPELL_SPIRIT_BURST_N, false);
events.RepeatEvent(10000);
break;
}
case EVENT_YMIRON_TORGYN_ABILITY:
{
for(uint8 i = 0; i < 4; ++i)
{
if (Creature* as = me->SummonCreature(NPC_AVENGING_SPIRIT, me->GetPositionX() + rand() % 10, me->GetPositionY() + rand() % 10, me->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 30000))
{
summons.Summon(as);
as->SetInCombatWithZone();
}
}
events.RepeatEvent(15000);
break;
}
events.RepeatEvent(15000);
break;
}
}
DoMeleeAttackIfReady();
DoMeleeAttackIfReady();
}
void JustDied(Unit* /*pKiller*/)
@@ -327,7 +334,7 @@ public:
void KilledUnit(Unit* /*pVictim*/)
{
if (urand(0,1))
if (urand(0, 1))
return;
Talk(SAY_SLAY);

View File

@@ -45,36 +45,36 @@ public:
void Initialize()
{
SvalaSorrowgrave = 0;
GortokPalehoof = 0;
SkadiRuthless = 0;
KingYmiron = 0;
FrenziedWorgen = 0;
RavenousFurbolg = 0;
MassiveJormungar = 0;
FerociousRhino = 0;
Grauf = 0;
SvalaSorrowgrave = 0;
GortokPalehoof = 0;
SkadiRuthless = 0;
KingYmiron = 0;
FrenziedWorgen = 0;
RavenousFurbolg = 0;
MassiveJormungar = 0;
FerociousRhino = 0;
Grauf = 0;
SvalaMirrorGUID = 0;
StatisGenerator = 0;
SkadiHits = 0;
SkadiInRange = 0;
SkadiRuthlessDoor= 0;
YmironDoor = 0;
FightStatus = 0;
SvalaMirrorGUID = 0;
StatisGenerator = 0;
SkadiHits = 0;
SkadiInRange = 0;
SkadiRuthlessDoor = 0;
YmironDoor = 0;
FightStatus = 0;
svalaAchievement = false;
skadiAchievement = false;
ymironAchievement = false;
for(uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
Encounters[i] = NOT_STARTED;
svalaAchievement = false;
skadiAchievement = false;
ymironAchievement = false;
for(uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
Encounters[i] = NOT_STARTED;
}
bool IsEncounterInProgress() const
{
for(uint8 i = 0; i < MAX_ENCOUNTERS; ++i)
if(Encounters[i] == IN_PROGRESS)
if(Encounters[i] == IN_PROGRESS)
return true;
return false;
@@ -83,15 +83,33 @@ public:
{
switch(pCreature->GetEntry())
{
case NPC_SVALA_SORROWGRAVE: SvalaSorrowgrave = pCreature->GetGUID(); break;
case NPC_GORTOK_PALEHOOF: GortokPalehoof = pCreature->GetGUID(); break;
case NPC_SKADI_THE_RUTHLESS: SkadiRuthless = pCreature->GetGUID(); break;
case NPC_KING_YMIRON: KingYmiron = pCreature->GetGUID(); break;
case NPC_FRENZIED_WORGEN: FrenziedWorgen = pCreature->GetGUID(); break;
case NPC_RAVENOUS_FURBOLG: RavenousFurbolg = pCreature->GetGUID(); break;
case NPC_MASSIVE_JORMUNGAR: MassiveJormungar = pCreature->GetGUID(); break;
case NPC_FEROCIOUS_RHINO: FerociousRhino = pCreature->GetGUID(); break;
case NPC_GARUF: Grauf = pCreature->GetGUID(); break;
case NPC_SVALA_SORROWGRAVE:
SvalaSorrowgrave = pCreature->GetGUID();
break;
case NPC_GORTOK_PALEHOOF:
GortokPalehoof = pCreature->GetGUID();
break;
case NPC_SKADI_THE_RUTHLESS:
SkadiRuthless = pCreature->GetGUID();
break;
case NPC_KING_YMIRON:
KingYmiron = pCreature->GetGUID();
break;
case NPC_FRENZIED_WORGEN:
FrenziedWorgen = pCreature->GetGUID();
break;
case NPC_RAVENOUS_FURBOLG:
RavenousFurbolg = pCreature->GetGUID();
break;
case NPC_MASSIVE_JORMUNGAR:
MassiveJormungar = pCreature->GetGUID();
break;
case NPC_FEROCIOUS_RHINO:
FerociousRhino = pCreature->GetGUID();
break;
case NPC_GARUF:
Grauf = pCreature->GetGUID();
break;
}
}
@@ -102,14 +120,14 @@ public:
case GO_SKADI_THE_RUTHLESS_DOOR:
SkadiRuthlessDoor = pGo->GetGUID();
if (Encounters[DATA_SKADI_THE_RUTHLESS] == DONE)
HandleGameObject(0,true,pGo);
HandleGameObject(0, true, pGo);
break;
case GO_KING_YMIRON_DOOR:
YmironDoor = pGo->GetGUID();
if (Encounters[DATA_KING_YMIRON] == DONE)
HandleGameObject(0,true,pGo);
if (Encounters[DATA_KING_YMIRON] == DONE)
HandleGameObject(0, true, pGo);
break;
case GO_GORK_PALEHOOF_SPHERE:
case GO_GORK_PALEHOOF_SPHERE:
StatisGenerator = pGo->GetGUID();
break;
case GO_SVALA_MIRROR:
@@ -143,16 +161,16 @@ public:
case DATA_SKADI_THE_RUTHLESS:
if (data == DONE)
{
HandleGameObject(SkadiRuthlessDoor,true);
HandleGameObject(SkadiRuthlessDoor, true);
// Make ymiron attackable
if (Creature *cr = instance->GetCreature(KingYmiron))
if (Creature* cr = instance->GetCreature(KingYmiron))
cr->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NOT_SELECTABLE);
}
Encounters[type] = data;
break;
case DATA_KING_YMIRON:
if (data == DONE)
HandleGameObject(YmironDoor,true);
HandleGameObject(YmironDoor, true);
Encounters[type] = data;
break;
case SKADI_HITS:
@@ -212,7 +230,8 @@ public:
if (Encounters[i] == IN_PROGRESS)
Encounters[i] = NOT_STARTED;
} else OUT_LOAD_INST_DATA_FAIL;
}
else OUT_LOAD_INST_DATA_FAIL;
OUT_LOAD_INST_DATA_COMPLETE;
}
@@ -221,12 +240,18 @@ public:
{
switch(type)
{
case DATA_SVALA_SORROWGRAVE: return Encounters[0];
case DATA_GORTOK_PALEHOOF: return Encounters[1];
case DATA_SKADI_THE_RUTHLESS: return Encounters[2];
case DATA_KING_YMIRON: return Encounters[3];
case SKADI_HITS: return SkadiHits;
case SKADI_IN_RANGE: return SkadiInRange;
case DATA_SVALA_SORROWGRAVE:
return Encounters[0];
case DATA_GORTOK_PALEHOOF:
return Encounters[1];
case DATA_SKADI_THE_RUTHLESS:
return Encounters[2];
case DATA_KING_YMIRON:
return Encounters[3];
case SKADI_HITS:
return SkadiHits;
case SKADI_IN_RANGE:
return SkadiInRange;
}
return 0;
}
@@ -235,19 +260,32 @@ public:
{
switch(identifier)
{
case DATA_SVALA_SORROWGRAVE: return SvalaSorrowgrave;
case DATA_GORTOK_PALEHOOF: return GortokPalehoof;
case DATA_SKADI_THE_RUTHLESS: return SkadiRuthless;
case DATA_KING_YMIRON: return KingYmiron;
case DATA_NPC_FRENZIED_WORGEN: return FrenziedWorgen;
case DATA_NPC_RAVENOUS_FURBOLG: return RavenousFurbolg;
case DATA_NPC_MASSIVE_JORMUNGAR: return MassiveJormungar;
case DATA_NPC_FEROCIOUS_RHINO: return FerociousRhino;
case YMIRON_DOOR: return YmironDoor;
case STATIS_GENERATOR: return StatisGenerator;
case SKADI_DOOR: return SkadiRuthlessDoor;
case DATA_GRAUF: return Grauf;
case GO_SVALA_MIRROR: return SvalaMirrorGUID;
case DATA_SVALA_SORROWGRAVE:
return SvalaSorrowgrave;
case DATA_GORTOK_PALEHOOF:
return GortokPalehoof;
case DATA_SKADI_THE_RUTHLESS:
return SkadiRuthless;
case DATA_KING_YMIRON:
return KingYmiron;
case DATA_NPC_FRENZIED_WORGEN:
return FrenziedWorgen;
case DATA_NPC_RAVENOUS_FURBOLG:
return RavenousFurbolg;
case DATA_NPC_MASSIVE_JORMUNGAR:
return MassiveJormungar;
case DATA_NPC_FEROCIOUS_RHINO:
return FerociousRhino;
case YMIRON_DOOR:
return YmironDoor;
case STATIS_GENERATOR:
return StatisGenerator;
case SKADI_DOOR:
return SkadiRuthlessDoor;
case DATA_GRAUF:
return Grauf;
case GO_SVALA_MIRROR:
return SvalaMirrorGUID;
}
return 0;

View File

@@ -15,7 +15,7 @@ enum Data
DATA_NPC_RAVENOUS_FURBOLG = 11,
DATA_NPC_MASSIVE_JORMUNGAR = 12,
DATA_NPC_FEROCIOUS_RHINO = 13,
YMIRON_DOOR = 20,
STATIS_GENERATOR = 21,