mirror of
https://github.com/TrinityCore/TrinityCore.git
synced 2026-01-20 09:17:36 +01:00
Scripts/UK: Adjusted Ingvar the Plunderer's spell timers (Shadow Axe is still missing), sniffs have been used as source.
This commit is contained in:
@@ -45,16 +45,32 @@ enum Creatures
|
||||
MOB_INGVAR_UNDEAD = 23980,
|
||||
};
|
||||
|
||||
enum Events
|
||||
{
|
||||
EVENT_CLEAVE = 1,
|
||||
EVENT_SMASH,
|
||||
EVENT_STAGGERING_ROAR,
|
||||
EVENT_ENRAGE,
|
||||
|
||||
EVENT_DARK_SMASH,
|
||||
EVENT_DREADFUL_ROAR,
|
||||
EVENT_WOE_STRIKE,
|
||||
EVENT_SHADOW_AXE
|
||||
};
|
||||
|
||||
enum Phases
|
||||
{
|
||||
PHASE_HUMAN = 1,
|
||||
PHASE_UNDEAD,
|
||||
};
|
||||
|
||||
enum Spells
|
||||
{
|
||||
//Ingvar Spells human form
|
||||
SPELL_CLEAVE = 42724,
|
||||
SPELL_SMASH = 42669,
|
||||
H_SPELL_SMASH = 59706,
|
||||
SPELL_STAGGERING_ROAR = 42708,
|
||||
H_SPELL_STAGGERING_ROAR = 59708,
|
||||
SPELL_ENRAGE = 42705,
|
||||
H_SPELL_ENRAGE = 59707,
|
||||
|
||||
SPELL_INGVAR_FEIGN_DEATH = 42795,
|
||||
SPELL_SUMMON_BANSHEE = 42912,
|
||||
@@ -63,9 +79,7 @@ enum Spells
|
||||
//Ingvar Spells undead form
|
||||
SPELL_DARK_SMASH = 42723,
|
||||
SPELL_DREADFUL_ROAR = 42729,
|
||||
H_SPELL_DREADFUL_ROAR = 59734,
|
||||
SPELL_WOE_STRIKE = 42730,
|
||||
H_SPELL_WOE_STRIKE = 59735,
|
||||
|
||||
ENTRY_THROW_TARGET = 23996,
|
||||
SPELL_SHADOW_AXE_SUMMON = 42749
|
||||
@@ -110,10 +124,18 @@ public:
|
||||
me->RemoveFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_OOC_NOT_ATTACKABLE);
|
||||
me->SetStandState(UNIT_STAND_STATE_STAND);
|
||||
|
||||
uiCleaveTimer = 2000;
|
||||
uiSmashTimer = 5000;
|
||||
uiEnrageTimer = 10000;
|
||||
uiRoarTimer = 15000;
|
||||
events.Reset();
|
||||
events.SetPhase(PHASE_HUMAN);
|
||||
|
||||
events.ScheduleEvent(EVENT_CLEAVE, urand(6,12)*IN_MILLISECONDS, 0, PHASE_HUMAN);
|
||||
events.ScheduleEvent(EVENT_STAGGERING_ROAR, urand(18,21)*IN_MILLISECONDS, 0, PHASE_HUMAN);
|
||||
events.ScheduleEvent(EVENT_ENRAGE, urand(7,14)*IN_MILLISECONDS, 0, PHASE_HUMAN);
|
||||
events.ScheduleEvent(EVENT_SMASH, urand(12,17)*IN_MILLISECONDS, 0, PHASE_HUMAN);
|
||||
|
||||
events.ScheduleEvent(EVENT_DARK_SMASH, urand(14,22)*IN_MILLISECONDS, 0, PHASE_UNDEAD);
|
||||
events.ScheduleEvent(EVENT_DREADFUL_ROAR, urand(18,21)*IN_MILLISECONDS, 0, PHASE_UNDEAD);
|
||||
events.ScheduleEvent(EVENT_WOE_STRIKE, urand(10,14)*IN_MILLISECONDS, 0, PHASE_UNDEAD);
|
||||
events.ScheduleEvent(EVENT_SHADOW_AXE, 30*IN_MILLISECONDS, 0, PHASE_UNDEAD);
|
||||
|
||||
uiSpawnResTimer = 3000;
|
||||
|
||||
@@ -138,6 +160,7 @@ public:
|
||||
|
||||
bEventInProgress = true;
|
||||
bIsUndead = true;
|
||||
events.SetPhase(PHASE_UNDEAD);
|
||||
|
||||
DoScriptText(YELL_DEAD_1, me);
|
||||
}
|
||||
@@ -208,70 +231,60 @@ public:
|
||||
return;
|
||||
}
|
||||
|
||||
if (uiCleaveTimer <= diff)
|
||||
{
|
||||
if (!me->HasUnitState(UNIT_STAT_CASTING))
|
||||
{
|
||||
if (bIsUndead)
|
||||
DoCast(me->getVictim(), SPELL_WOE_STRIKE);
|
||||
else
|
||||
DoCast(me->getVictim(), SPELL_CLEAVE);
|
||||
uiCleaveTimer = rand()%5000 + 2000;
|
||||
}
|
||||
} else uiCleaveTimer -= diff;
|
||||
events.Update(diff);
|
||||
|
||||
if (uiSmashTimer <= diff)
|
||||
{
|
||||
if (!me->HasUnitState(UNIT_STAT_CASTING))
|
||||
{
|
||||
if (bIsUndead)
|
||||
DoCast(me->getVictim(), SPELL_DARK_SMASH);
|
||||
else
|
||||
DoCast(me->getVictim(), SPELL_SMASH);
|
||||
uiSmashTimer = 10000;
|
||||
}
|
||||
} else uiSmashTimer -= diff;
|
||||
if (me->HasUnitState(UNIT_STAT_CASTING))
|
||||
return;
|
||||
|
||||
if (!bIsUndead)
|
||||
while (uint32 eventId = events.ExecuteEvent())
|
||||
{
|
||||
if (uiEnrageTimer <= diff)
|
||||
switch (eventId)
|
||||
{
|
||||
DoCast(me, SPELL_ENRAGE);
|
||||
uiEnrageTimer = 10000;
|
||||
} else uiEnrageTimer -= diff;
|
||||
} else // In Undead form used to summon weapon
|
||||
{
|
||||
if (uiEnrageTimer <= diff)
|
||||
{
|
||||
if (!me->HasUnitState(UNIT_STAT_CASTING))
|
||||
{
|
||||
// Spawn target for Axe
|
||||
Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 1);
|
||||
if (target)
|
||||
// PHASE ONE
|
||||
case EVENT_CLEAVE:
|
||||
DoCastVictim(SPELL_CLEAVE);
|
||||
events.ScheduleEvent(EVENT_CLEAVE, urand(6,12)*IN_MILLISECONDS, 0, PHASE_HUMAN);
|
||||
break;
|
||||
case EVENT_STAGGERING_ROAR:
|
||||
DoCast(me, SPELL_STAGGERING_ROAR);
|
||||
events.ScheduleEvent(EVENT_STAGGERING_ROAR, urand(18,21)*IN_MILLISECONDS, 0, PHASE_HUMAN);
|
||||
break;
|
||||
case EVENT_ENRAGE:
|
||||
DoCast(me, SPELL_ENRAGE);
|
||||
events.ScheduleEvent(EVENT_ENRAGE, urand(7,14)*IN_MILLISECONDS, 0, PHASE_HUMAN);
|
||||
break;
|
||||
case EVENT_SMASH:
|
||||
DoCastVictim(SPELL_SMASH);
|
||||
events.ScheduleEvent(EVENT_SMASH, urand(12,17)*IN_MILLISECONDS, 0, PHASE_HUMAN);
|
||||
break;
|
||||
// PHASE TWO
|
||||
case EVENT_DARK_SMASH:
|
||||
DoCastVictim(SPELL_DARK_SMASH);
|
||||
events.ScheduleEvent(EVENT_DARK_SMASH, urand(14,22)*IN_MILLISECONDS, 0, PHASE_UNDEAD);
|
||||
break;
|
||||
case EVENT_DREADFUL_ROAR:
|
||||
DoCast(me, SPELL_DREADFUL_ROAR);
|
||||
events.ScheduleEvent(EVENT_DREADFUL_ROAR, urand(18,21)*IN_MILLISECONDS, 0, PHASE_UNDEAD);
|
||||
break;
|
||||
case EVENT_WOE_STRIKE:
|
||||
DoCastVictim(SPELL_WOE_STRIKE);
|
||||
events.ScheduleEvent(EVENT_WOE_STRIKE, urand(10,14)*IN_MILLISECONDS, 0, PHASE_UNDEAD);
|
||||
break;
|
||||
case EVENT_SHADOW_AXE:
|
||||
if (Unit* target = SelectTarget(SELECT_TARGET_TOPAGGRO, 1))
|
||||
{
|
||||
me->SummonCreature(ENTRY_THROW_TARGET, target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 2000);
|
||||
|
||||
DoCast(me, SPELL_SHADOW_AXE_SUMMON);
|
||||
}
|
||||
uiEnrageTimer = 30000;
|
||||
}
|
||||
} else uiEnrageTimer -= diff;
|
||||
}
|
||||
|
||||
if (uiRoarTimer <= diff)
|
||||
{
|
||||
if (!me->HasUnitState(UNIT_STAT_CASTING))
|
||||
{
|
||||
if (bIsUndead)
|
||||
DoCast(me, SPELL_DREADFUL_ROAR);
|
||||
else
|
||||
DoCast(me, SPELL_STAGGERING_ROAR);
|
||||
uiRoarTimer = 10000;
|
||||
events.ScheduleEvent(EVENT_SHADOW_AXE, 30*IN_MILLISECONDS, 0, PHASE_UNDEAD);
|
||||
break;
|
||||
}
|
||||
} else uiRoarTimer -= diff;
|
||||
}
|
||||
|
||||
DoMeleeAttackIfReady();
|
||||
}
|
||||
private:
|
||||
EventMap events;
|
||||
};
|
||||
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user