Merge branch 'master' into Playerbot

This commit is contained in:
Yunfan Li
2024-10-04 21:57:35 +08:00
90 changed files with 381 additions and 169 deletions
@@ -316,6 +316,7 @@ struct boss_illidan_stormrage : public BossAI
DoStopAttack();
me->SetControlled(true, UNIT_STATE_ROOT);
me->SetCombatMovement(false);
DoResetThreatList();
DoCastSelf(SPELL_DEMON_TRANSFORM_1, true);
me->m_Events.AddEventAtOffset([&] {
@@ -734,7 +735,10 @@ struct npc_akama_illidan : public ScriptedAI
scheduler.CancelAll();
me->m_Events.KillAllEvents(true);
me->SetReactState(REACT_AGGRESSIVE);
me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
if (instance->GetBossState(DATA_ILLIDAN_STORMRAGE) == DONE)
me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
else
me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP);
me->setActive(false);
summons.DespawnAll();
DoCastSelf(SPELL_REDUCED_THREAT, true);
@@ -27,67 +27,67 @@
enum Says
{
SAY_BROKEN_FREE_0 = 0,
SAY_BROKEN_FREE_1 = 1,
SAY_BROKEN_FREE_2 = 2,
SAY_LOW_HEALTH = 3,
SAY_DEATH = 4,
SAY_BROKEN_FREE_0 = 0,
SAY_BROKEN_FREE_1 = 1,
SAY_BROKEN_FREE_2 = 2,
SAY_LOW_HEALTH = 3,
SAY_DEATH = 4,
SAY_BROKEN_S1 = 0,
SAY_BROKEN_S2 = 1
SAY_BROKEN_S1 = 0,
SAY_BROKEN_S2 = 1
};
enum Spells
{
// Akama
SPELL_STEALTH = 34189,
SPELL_DESTRUCTIVE_POISON = 40874,
SPELL_CHAIN_LIGHTNING = 39945,
SPELL_AKAMA_SOUL_CHANNEL = 40447,
SPELL_FIXATE = 40607,
SPELL_AKAMA_SOUL_RETRIEVE = 40902, // epilogue
SPELL_AKAMA_SOUL_EXPEL_CHANNEL = 40927, // epilogue
SPELL_STEALTH = 34189,
SPELL_DESTRUCTIVE_POISON = 40874,
SPELL_CHAIN_LIGHTNING = 39945,
SPELL_AKAMA_SOUL_CHANNEL = 40447,
SPELL_FIXATE = 40607,
SPELL_AKAMA_SOUL_RETRIEVE = 40902, // epilogue
SPELL_AKAMA_SOUL_EXPEL_CHANNEL = 40927, // epilogue
// Shade & Channelers
SPELL_SHADE_SOUL_CHANNEL = 40401,
SPELL_THREAT = 41602,
SPELL_SHADE_OF_AKAMA_TRIGGER = 40955,
SPELL_SHADE_SOUL_CHANNEL = 40401,
SPELL_THREAT = 41602,
SPELL_SHADE_OF_AKAMA_TRIGGER = 40955,
// Summons
SPELL_ASHTONGUE_WAVE_A = 42073, // unused
SPELL_ASHTONGUE_WAVE_B = 42035,
SPELL_SUMMON_ASHTONGUE_SORCERER = 40476,
SPELL_SUMMON_ASHTONGUE_DEFENDER = 40474
SPELL_ASHTONGUE_WAVE_A = 42073, // unused
SPELL_ASHTONGUE_WAVE_B = 42035,
SPELL_SUMMON_ASHTONGUE_SORCERER = 40476,
SPELL_SUMMON_ASHTONGUE_DEFENDER = 40474
};
enum Creatures
{
NPC_ASHTONGUE_SORCERER = 23215,
NPC_ASHTONGUE_DEFENDER = 23216,
NPC_ASHTONGUE_ELEMENTAL = 23523,
NPC_ASHTONGUE_ROGUE = 23318,
NPC_ASHTONGUE_SPIRITBIND = 23524,
NPC_ASHTONGUE_BROKEN = 23319
NPC_ASHTONGUE_SORCERER = 23215,
NPC_ASHTONGUE_DEFENDER = 23216,
NPC_ASHTONGUE_ELEMENTAL = 23523,
NPC_ASHTONGUE_ROGUE = 23318,
NPC_ASHTONGUE_SPIRITBIND = 23524,
NPC_ASHTONGUE_BROKEN = 23319
};
enum Misc
{
SUMMON_GROUP_BROKENS = 1,
SUMMON_GROUP_BROKENS = 1,
POINT_ENGAGE = 0,
POINT_OUTRO = 1,
POINT_ENGAGE = 0,
POINT_OUTRO = 1,
ACTION_GENERATOR_START = 1,
ACTION_GENERATOR_STOP = 2,
ACTION_GENERATOR_DESPAWN_ALL = 3,
ACTION_GENERATOR_START = 1,
ACTION_GENERATOR_STOP = 2,
ACTION_GENERATOR_DESPAWN_ALL = 3,
ACTION_GENERATOR_DESPAWN_NON_DEFENDERS = 4,
COUNTER_SPAWNS_MAX = 20, // Max number of spawns for each generator, number chosen at random
COUNTER_SPAWNS_MAX = 20, // Max number of spawns for each generator, number chosen at random
ACTION_AKAMA_START_OUTRO = 1,
ACTION_AKAMA_START_OUTRO = 1,
FACTION_DEFAULT = 1820,
FACTION_ENGAGE = 1868,
FACTION_DEFENDER = 1847
FACTION_DEFAULT = 1820,
FACTION_MONSTER_SPAR = 1847
};
Position AkamaEngage = { 517.4877f, 400.79926f, 112.77704f };
@@ -222,6 +222,7 @@ struct npc_akama_shade : public ScriptedAI
_sayLowHealth = false;
_died = false;
scheduler.CancelAll();
_generators.clear();
}
void MovementInform(uint32 type, uint32 point) override
@@ -232,7 +233,7 @@ struct npc_akama_shade : public ScriptedAI
{
case POINT_ENGAGE:
me->SetHomePosition(me->GetPosition());
me->SetFaction(FACTION_ENGAGE);
me->SetFaction(FACTION_MONSTER_SPAR_BUDDY);
DoCastSelf(SPELL_AKAMA_SOUL_CHANNEL, true);
break;
case POINT_OUTRO:
@@ -279,6 +280,10 @@ struct npc_akama_shade : public ScriptedAI
else if (damage >= me->GetHealth() && !_died)
{
_died = true;
me->GetCreatureListWithEntryInGrid(_generators, NPC_CREATURE_GENERATOR_AKAMA, 100.0f);
for (Creature* generator : _generators)
generator->AI()->DoAction(ACTION_GENERATOR_DESPAWN_ALL);
damage = me->GetHealth() - 1;
Talk(SAY_DEATH);
if (Creature* shade = instance->GetCreature(DATA_SHADE_OF_AKAMA))
@@ -342,6 +347,7 @@ struct npc_akama_shade : public ScriptedAI
private:
bool _sayLowHealth;
bool _died;
std::list<Creature *> _generators;
};
struct npc_creature_generator_akama : public ScriptedAI
@@ -355,7 +361,6 @@ struct npc_creature_generator_akama : public ScriptedAI
void Reset() override
{
summons.DespawnAll();
scheduler.CancelAll();
}
@@ -363,6 +368,7 @@ struct npc_creature_generator_akama : public ScriptedAI
{
spawnCounter++;
ScriptedAI::JustSummoned(summon);
summons.Summon(summon);
switch (summon->GetEntry())
{
@@ -374,13 +380,10 @@ struct npc_creature_generator_akama : public ScriptedAI
summon->GetMotionMaster()->MovePoint(POINT_ENGAGE, x, y, z);
}
break;
case NPC_ASHTONGUE_DEFENDER:
summon->SetFaction(FACTION_DEFENDER);
if (Creature* akama = instance->GetCreature(DATA_AKAMA_SHADE))
summon->AI()->AttackStart(akama);
break;
default:
summon->SetInCombatWithZone();
if (Creature* akama = instance->GetCreature(DATA_AKAMA_SHADE))
summon->AI()->AttackStart(akama);
break;
}
}
@@ -434,6 +437,14 @@ struct npc_creature_generator_akama : public ScriptedAI
summons.DespawnAll();
scheduler.CancelAll();
break;
case ACTION_GENERATOR_DESPAWN_NON_DEFENDERS:
summons.DoForAllSummons([&](WorldObject* summon)
{
if (Creature* c = summon->ToCreature())
if (c->GetEntry() != NPC_ASHTONGUE_DEFENDER && c->GetEntry() != NPC_ASHTONGUE_SORCERER)
c->DespawnOrUnsummon();
});
break;
}
}
+1 -1
View File
@@ -1017,7 +1017,7 @@ class spell_dru_swift_flight_passive : public AuraScript
void Register() override
{
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_swift_flight_passive::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_INCREASE_VEHICLE_FLIGHT_SPEED);
DoEffectCalcAmount += AuraEffectCalcAmountFn(spell_dru_swift_flight_passive::CalculateAmount, EFFECT_1, SPELL_AURA_MOD_INCREASE_FLIGHT_SPEED);
}
};