Merge branch 'azerothcore:master' into Playerbot

This commit is contained in:
ZhengPeiRu21
2023-04-06 10:12:34 -06:00
committed by GitHub
9 changed files with 1465 additions and 24 deletions

View File

@@ -0,0 +1,4 @@
-- DB update 2023_04_05_03 -> 2023_04_05_04
DELETE FROM `creature` WHERE (`id1` = 37230) AND (`guid` IN (247156));
DELETE FROM `creature_movement_override` WHERE `SpawnId`=247156;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,3 @@
-- DB update 2023_04_06_00 -> 2023_04_06_01
DELETE FROM `creature` WHERE (`id1` = 37230) AND (`guid` IN (247157));
DELETE FROM `creature_movement_override` WHERE `SpawnId`=247157;

View File

@@ -4461,7 +4461,7 @@ void SpellMgr::LoadSpellInfoCorrections()
});
// Self Visual - Sleep Until Cancelled(DND)
ApplySpellFix({ 14915 }, [](SpellInfo* spellInfo)
ApplySpellFix({ 6606, 14915 }, [](SpellInfo* spellInfo)
{
spellInfo->AuraInterruptFlags &= ~AURA_INTERRUPT_FLAG_NOT_SEATED;
});

View File

@@ -282,6 +282,7 @@ public:
_didFirstFlyPhase = false;
_isBelow20Pct = false;
_isThirdPhase = false;
_isLanding = false;
_bombCount = 0;
_mysticBuffetStack = 0;
_Reset();
@@ -365,15 +366,16 @@ public:
void DoAction(int32 action) override
{
if (action == ACTION_START_FROSTWYRM)
if (action == ACTION_START_FROSTWYRM && !_isLanding)
{
_isLanding = true;
if (TempSummon* summon = me->ToTempSummon())
summon->SetTempSummonType(TEMPSUMMON_DEAD_DESPAWN);
if (me->isDead())
return;
instance->SetBossState(DATA_SINDRAGOSA, IN_PROGRESS);
me->setActive(true);
me->SetDisableGravity(true);
me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE);
@@ -673,6 +675,7 @@ public:
bool _isBelow20Pct;
bool _isThirdPhase;
bool _isInAirPhase;
bool _isLanding;
};
CreatureAI* GetAI(Creature* creature) const override

View File

@@ -116,6 +116,11 @@ DoorData const doorData[] =
{0, 0, DOOR_TYPE_ROOM }
};
ObjectData const creatureData[] =
{
{ NPC_SINDRAGOSA, DATA_SINDRAGOSA }
};
// this doesnt have to only store questgivers, also can be used for related quest spawns
struct WeeklyQuest
{
@@ -203,6 +208,7 @@ public:
SetBossNumber(MAX_ENCOUNTERS);
SetPersistentDataCount(MAX_DATA_INDEXES);
LoadBossBoundaries(boundaries);
LoadObjectData(creatureData, nullptr);
LoadDoorData(doorData);
TeamIdInInstance = TEAM_NEUTRAL;
HeroicAttempts = MaxHeroicAttempts;
@@ -257,7 +263,7 @@ public:
if (GetBossState(DATA_LADY_DEATHWHISPER) == DONE && GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != DONE)
SpawnGunship();
if (GetBossState(DATA_SINDRAGOSA) != DONE && IsSindragosaIntroDone && SindragosaGUID.IsEmpty() && Events.GetTimeUntilEvent(EVENT_RESPAWN_SINDRAGOSA) == Milliseconds::max())
if (GetBossState(DATA_SINDRAGOSA) != DONE && IsSindragosaIntroDone && !GetCreature(DATA_SINDRAGOSA) && Events.GetTimeUntilEvent(EVENT_RESPAWN_SINDRAGOSA) == Milliseconds::max())
{
Events.ScheduleEvent(EVENT_RESPAWN_SINDRAGOSA, 30s);
}
@@ -518,12 +524,16 @@ public:
default:
break;
}
InstanceScript::OnCreatureCreate(creature);
}
void OnCreatureRemove(Creature* creature) override
{
if (creature->GetEntry() == NPC_SINDRAGOSA)
SindragosaGUID.Clear();
InstanceScript::OnCreatureRemove(creature);
}
uint32 GetCreatureEntry(ObjectGuid::LowType /*guidLow*/, CreatureData const* data) override
@@ -1764,15 +1774,18 @@ public:
SpawnGunship();
break;
case EVENT_RESPAWN_SINDRAGOSA:
if (Creature* sindragosa = instance->SummonCreature(NPC_SINDRAGOSA, SindragosaSpawnPos))
if (!GetCreature(DATA_SINDRAGOSA))
{
sindragosa->setActive(true);
sindragosa->SetDisableGravity(true);
sindragosa->GetMotionMaster()->MovePath(NPC_SINDRAGOSA * 10, true);
if (TempSummon* summon = sindragosa->ToTempSummon())
if (Creature* sindragosa = instance->SummonCreature(NPC_SINDRAGOSA, SindragosaSpawnPos))
{
summon->SetTempSummonType(TEMPSUMMON_DEAD_DESPAWN);
sindragosa->setActive(true);
sindragosa->SetDisableGravity(true);
sindragosa->GetMotionMaster()->MovePath(NPC_SINDRAGOSA * 10, true);
if (TempSummon* summon = sindragosa->ToTempSummon())
{
summon->SetTempSummonType(TEMPSUMMON_DEAD_DESPAWN);
}
}
}
// Could happen more than once if more than one player enters before she respawns.

View File

@@ -29,6 +29,7 @@ enum MekgineerSteamrigger
SPELL_SUPER_SHRINK_RAY = 31485,
SPELL_SAW_BLADE = 31486,
SPELL_ELECTRIFIED_NET = 35107,
SPELL_ENRAGE = 26662,
SPELL_REPAIR_N = 31532,
SPELL_REPAIR_H = 37936,
@@ -39,7 +40,8 @@ enum MekgineerSteamrigger
EVENT_CHECK_HP75 = 3,
EVENT_SPELL_SHRINK = 4,
EVENT_SPELL_SAW = 5,
EVENT_SPELL_NET = 6
EVENT_SPELL_NET = 6,
EVENT_ENRAGE = 7
};
struct boss_mekgineer_steamrigger : public BossAI
@@ -62,9 +64,10 @@ struct boss_mekgineer_steamrigger : public BossAI
{
Talk(SAY_AGGRO);
_JustEngagedWith();
events.ScheduleEvent(EVENT_SPELL_SHRINK, 20000);
events.ScheduleEvent(EVENT_SPELL_SAW, 15000);
events.ScheduleEvent(EVENT_SPELL_NET, 10000);
events.ScheduleEvent(EVENT_SPELL_SHRINK, 26550);
events.ScheduleEvent(EVENT_SPELL_SAW, 6050, 17650);
events.ScheduleEvent(EVENT_SPELL_NET, 14400);
events.ScheduleEvent(EVENT_ENRAGE, 300000);
events.ScheduleEvent(EVENT_CHECK_HP75, 5000);
events.ScheduleEvent(EVENT_CHECK_HP50, 5000);
events.ScheduleEvent(EVENT_CHECK_HP25, 5000);
@@ -96,19 +99,22 @@ struct boss_mekgineer_steamrigger : public BossAI
{
case EVENT_SPELL_SHRINK:
me->CastSpell(me->GetVictim(), SPELL_SUPER_SHRINK_RAY, false);
events.RepeatEvent(20000);
events.Repeat(35100ms, 54100ms);
break;
case EVENT_SPELL_SAW:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 1))
me->CastSpell(target, SPELL_SAW_BLADE, false);
else
me->CastSpell(me->GetVictim(), SPELL_SAW_BLADE, false);
events.RepeatEvent(15000);
events.Repeat(6050ms, 17650ms);
break;
case EVENT_SPELL_NET:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0))
me->CastSpell(target, SPELL_ELECTRIFIED_NET, false);
events.RepeatEvent(10000);
events.Repeat(21800ms, 34200ms);
break;
case EVENT_ENRAGE:
DoCastSelf(SPELL_ENRAGE, true);
break;
case EVENT_CHECK_HP25:
case EVENT_CHECK_HP50:

View File

@@ -30,6 +30,7 @@ enum NagaDistiller
SPELL_SPELL_REFLECTION = 31534,
SPELL_IMPALE = 39061,
SPELL_HEAD_CRACK = 16172,
SPELL_WARLORDS_RAGE = 37081,
SPELL_WARLORDS_RAGE_NAGA = 31543,
SPELL_WARLORDS_RAGE_PROC = 36453,
@@ -38,7 +39,8 @@ enum NagaDistiller
EVENT_SPELL_REFLECTION = 1,
EVENT_SPELL_IMPALE = 2,
EVENT_SPELL_RAGE = 3
EVENT_SPELL_HEAD_CRACK = 3,
EVENT_SPELL_RAGE = 4
};
struct boss_warlord_kalithresh : public BossAI
@@ -49,8 +51,9 @@ struct boss_warlord_kalithresh : public BossAI
{
Talk(SAY_AGGRO);
_JustEngagedWith();
events.ScheduleEvent(EVENT_SPELL_REFLECTION, 10000);
events.ScheduleEvent(EVENT_SPELL_IMPALE, urand(7000, 14000));
events.ScheduleEvent(EVENT_SPELL_REFLECTION, 20000, 36000);
events.ScheduleEvent(EVENT_SPELL_IMPALE, 7000, 14000);
events.ScheduleEvent(EVENT_SPELL_HEAD_CRACK, 15000);
events.ScheduleEvent(EVENT_SPELL_RAGE, 20000);
}
@@ -78,12 +81,16 @@ struct boss_warlord_kalithresh : public BossAI
{
case EVENT_SPELL_REFLECTION:
me->CastSpell(me, SPELL_SPELL_REFLECTION, false);
events.RepeatEvent(urand(15000, 20000));
events.Repeat(20s, 36s);
break;
case EVENT_SPELL_IMPALE:
if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 10.0f, true))
me->CastSpell(target, SPELL_IMPALE, false);
events.RepeatEvent(urand(7500, 12500));
events.Repeat(7500ms, 12500ms);
break;
case EVENT_SPELL_HEAD_CRACK:
DoCastVictim(SPELL_HEAD_CRACK);
events.Repeat(45s, 55s);
break;
case EVENT_SPELL_RAGE:
if (Creature* distiller = me->FindNearestCreature(NPC_NAGA_DISTILLER, 100.0f))

View File

@@ -61,7 +61,6 @@ struct boss_harbinger_skyriss : public BossAI
void Reset() override
{
_Reset();
me->SetImmuneToAll(false);
ScheduleHealthCheckEvent(66, [&] {
Talk(SAY_IMAGE);