fix(Scripts/VOA): code-style improvements + bandwidth consumptio (#3632)

This commit is contained in:
Goatform
2020-11-27 12:50:50 +01:00
committed by GitHub
parent 553f1b455a
commit 37d1f2be47
@@ -11,13 +11,17 @@
enum Archavon enum Archavon
{ {
SPELL_ROCK_SHARDS = 58678, SPELL_ROCK_SHARDS = 58678,
SPELL_ROCK_SHARDS_LEFT_HAND_VISUAL = 58689,
SPELL_ROCK_SHARDS_RIGHT_HAND_VISUAL = 58692,
SPELL_ROCK_SHARDS_DAMAGE_10 = 58695,
SPELL_ROCK_SHARDS_DAMAGE_25 = 60883,
SPELL_CRUSHING_LEAP_10 = 58960, SPELL_CRUSHING_LEAP_10 = 58960,
SPELL_CRUSHING_LEAP_25 = 60894, //Instant (10-80yr range) -- Leaps at an enemy, inflicting 8000 Physical damage, knocking all nearby enemies away, and creating a cloud of choking debris. SPELL_CRUSHING_LEAP_25 = 60894, // Instant (10-80yr range) -- Leaps at an enemy, inflicting 8000 Physical damage, knocking all nearby enemies away, and creating a cloud of choking debris.
SPELL_STOMP_10 = 58663, SPELL_STOMP_10 = 58663,
SPELL_STOMP_25 = 60880, SPELL_STOMP_25 = 60880,
SPELL_IMPALE_10 = 58666, SPELL_IMPALE_10 = 58666,
SPELL_IMPALE_25 = 60882, //Lifts an enemy off the ground with a spiked fist, inflicting 47125 to 52875 Physical damage and 9425 to 10575 additional damage each second for 8 sec. SPELL_IMPALE_25 = 60882, // Lifts an enemy off the ground with a spiked fist, inflicting 47125 to 52875 Physical damage and 9425 to 10575 additional damage each second for 8 sec.
SPELL_BERSERK = 47008, SPELL_BERSERK = 47008
}; };
enum enum
@@ -32,156 +36,184 @@ enum Events
EVENT_CHOKING_CLOUD = 2, EVENT_CHOKING_CLOUD = 2,
EVENT_STOMP = 3, EVENT_STOMP = 3,
EVENT_IMPALE = 4, EVENT_IMPALE = 4,
EVENT_BERSERK = 5, EVENT_BERSERK = 5
}; };
// 31125 - Archavon the Stone Watcher
class boss_archavon : public CreatureScript class boss_archavon : public CreatureScript
{ {
public: public:
boss_archavon() : CreatureScript("boss_archavon") { } boss_archavon() : CreatureScript("boss_archavon") { }
struct boss_archavonAI : public ScriptedAI struct boss_archavonAI : public ScriptedAI
{
boss_archavonAI(Creature* creature) : ScriptedAI(creature)
{ {
pInstance = me->GetInstanceScript(); boss_archavonAI(Creature* creature) : ScriptedAI(creature)
}
InstanceScript* pInstance;
EventMap events;
void Reset()
{
events.Reset();
if (pInstance)
{ {
if (pInstance->GetData(DATA_STONED)) pInstance = me->GetInstanceScript();
{
if (Aura* aur = me->AddAura(SPELL_STONED_AURA, me))
{
aur->SetMaxDuration(60 * MINUTE * IN_MILLISECONDS);
aur->SetDuration(60 * MINUTE * IN_MILLISECONDS);
}
}
pInstance->SetData(EVENT_ARCHAVON, NOT_STARTED);
} }
}
void AttackStart(Unit* who) InstanceScript* pInstance;
{ EventMap events;
if (me->HasAura(SPELL_STONED_AURA))
return;
ScriptedAI::AttackStart(who); void Reset()
}
void EnterCombat(Unit* /*who*/)
{
events.ScheduleEvent(EVENT_ROCK_SHARDS, 15000);
events.ScheduleEvent(EVENT_CHOKING_CLOUD, 30000);
events.ScheduleEvent(EVENT_STOMP, 45000);
events.ScheduleEvent(EVENT_BERSERK, 300000);
if (pInstance)
pInstance->SetData(EVENT_ARCHAVON, IN_PROGRESS);
}
void JustDied(Unit* )
{
if (pInstance)
pInstance->SetData(EVENT_ARCHAVON, DONE);
}
void UpdateAI(uint32 diff)
{
if (!UpdateVictim())
return;
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
return;
switch (events.ExecuteEvent())
{ {
case EVENT_ROCK_SHARDS: events.Reset();
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0)) if (pInstance)
me->CastSpell(target, SPELL_ROCK_SHARDS, false); {
if (pInstance->GetData(DATA_STONED))
{
if (Aura* aur = me->AddAura(SPELL_STONED_AURA, me))
{
aur->SetMaxDuration(60 * MINUTE* IN_MILLISECONDS);
aur->SetDuration(60 * MINUTE* IN_MILLISECONDS);
}
}
events.RepeatEvent(15000); pInstance->SetData(EVENT_ARCHAVON, NOT_STARTED);
break; }
case EVENT_CHOKING_CLOUD: }
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1))
me->CastSpell(target, RAID_MODE(SPELL_CRUSHING_LEAP_10, SPELL_CRUSHING_LEAP_25), true); //10y~80y, ignore range
events.RepeatEvent(30000); void AttackStart(Unit* who)
break; {
case EVENT_STOMP: if (me->HasAura(SPELL_STONED_AURA))
{
return;
}
ScriptedAI::AttackStart(who);
}
void EnterCombat(Unit* /*who*/)
{
events.ScheduleEvent(EVENT_ROCK_SHARDS, 15000);
events.ScheduleEvent(EVENT_CHOKING_CLOUD, 30000);
events.ScheduleEvent(EVENT_STOMP, 45000);
events.ScheduleEvent(EVENT_BERSERK, 300000);
if (pInstance)
{
pInstance->SetData(EVENT_ARCHAVON, IN_PROGRESS);
}
}
void JustDied(Unit*)
{
if (pInstance)
{
pInstance->SetData(EVENT_ARCHAVON, DONE);
}
}
void UpdateAI(uint32 diff)
{
if (!UpdateVictim())
{
return;
}
events.Update(diff);
if (me->HasUnitState(UNIT_STATE_CASTING))
{
return;
}
switch (events.ExecuteEvent())
{
case EVENT_ROCK_SHARDS:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 0))
{
DoCast(target, SPELL_ROCK_SHARDS);
}
events.RepeatEvent(15000);
break;
case EVENT_CHOKING_CLOUD:
if (Unit* target = SelectTarget(SELECT_TARGET_RANDOM, 1))
{
DoCast(target, RAID_MODE(SPELL_CRUSHING_LEAP_10, SPELL_CRUSHING_LEAP_25), true); //10y ~ 80y, ignore range
}
events.RepeatEvent(30000);
break;
case EVENT_STOMP:
{ {
char buffer[100]; char buffer[100];
sprintf(buffer, "Archavon the Stone Watcher lunges for %s!", me->GetVictim()->GetName().c_str()); sprintf(buffer, "Archavon the Stone Watcher lunges for %s!", me->GetVictim()->GetName().c_str());
me->MonsterTextEmote(buffer, 0); me->MonsterTextEmote(buffer, 0);
me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_STOMP_10, SPELL_STOMP_25), false);
DoCastVictim(RAID_MODE(SPELL_STOMP_10, SPELL_STOMP_25));
events.RepeatEvent(45000); events.RepeatEvent(45000);
events.ScheduleEvent(EVENT_IMPALE, 3000); events.ScheduleEvent(EVENT_IMPALE, 3000);
break; break;
} }
case EVENT_IMPALE: case EVENT_IMPALE:
me->CastSpell(me->GetVictim(), RAID_MODE(SPELL_IMPALE_10, SPELL_IMPALE_25), false); DoCastVictim(RAID_MODE(SPELL_IMPALE_10, SPELL_IMPALE_25));
break; break;
case EVENT_BERSERK: case EVENT_BERSERK:
me->CastSpell(me, SPELL_BERSERK, true); DoCast(me, SPELL_BERSERK, true);
Talk(EMOTE_BERSERK); Talk(EMOTE_BERSERK);
break; break;
default: default:
break; break;
}
DoMeleeAttackIfReady();
}
};
CreatureAI* GetAI(Creature* creature) const
{
return new boss_archavonAI(creature);
}
};
class spell_archavon_rock_shards : public SpellScriptLoader
{
public:
spell_archavon_rock_shards() : SpellScriptLoader("spell_archavon_rock_shards") { }
class spell_archavon_rock_shards_SpellScript : public SpellScript
{
PrepareSpellScript(spell_archavon_rock_shards_SpellScript);
void HandleScript(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(effIndex);
Unit* target = GetHitUnit();
Unit* caster = GetOriginalCaster();
if (target && caster && caster->GetMap())
{
for (uint32 i = 0; i < 3; ++i)
{
caster->CastSpell(target, 58689, true);
caster->CastSpell(target, 58692, true);
} }
caster->CastSpell(target, caster->GetMap()->Is25ManRaid() ? 60883 : 58695, true); DoMeleeAttackIfReady();
} }
} };
void Register() CreatureAI* GetAI(Creature* creature) const
{ {
OnEffectHitTarget += SpellEffectFn(spell_archavon_rock_shards_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); return new boss_archavonAI(creature);
} }
}; };
SpellScript* GetSpellScript() const // 58941 - Rock Shards
{ class spell_archavon_rock_shards : public SpellScriptLoader
return new spell_archavon_rock_shards_SpellScript(); {
} public:
spell_archavon_rock_shards() : SpellScriptLoader("spell_archavon_rock_shards") { }
class spell_archavon_rock_shards_SpellScript : public SpellScript
{
PrepareSpellScript(spell_archavon_rock_shards_SpellScript);
void HandleScript(SpellEffIndex effIndex)
{
PreventHitDefaultEffect(effIndex);
Unit* caster = GetCaster();
Unit* target = GetHitUnit();
if (!caster || !target)
{
return;
}
Map* map = caster->GetMap();
if (!map)
{
return;
}
caster->CastSpell(target, SPELL_ROCK_SHARDS_LEFT_HAND_VISUAL, true);
caster->CastSpell(target, SPELL_ROCK_SHARDS_RIGHT_HAND_VISUAL, true);
uint32 spellId = map->Is25ManRaid() ? SPELL_ROCK_SHARDS_DAMAGE_25 : SPELL_ROCK_SHARDS_DAMAGE_10;
caster->CastSpell(target, spellId, true);
}
void Register()
{
OnEffectHitTarget += SpellEffectFn(spell_archavon_rock_shards_SpellScript::HandleScript, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT);
}
};
SpellScript* GetSpellScript() const
{
return new spell_archavon_rock_shards_SpellScript();
}
}; };