mirror of
https://github.com/mod-playerbots/azerothcore-wotlk.git
synced 2026-03-16 05:55:07 +00:00
fix(Scripts/Ulduar): Remove GUID-based harpoon identification in Razors… (#24846)
Co-authored-by: Keader <keader.android@gmail.com> Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -44,7 +44,6 @@ enum Spells
|
||||
SPELL_CHAIN_2 = 49682,
|
||||
SPELL_CHAIN_3 = 49683,
|
||||
SPELL_CHAIN_4 = 49684,
|
||||
SPELL_LAUNCH_CHAIN = 62505,
|
||||
|
||||
// Dark Rune Sentinel
|
||||
SPELL_WHIRLWIND = 63808,
|
||||
@@ -207,31 +206,11 @@ struct boss_razorscale : public BossAI
|
||||
|
||||
void SpellHit(Unit* caster, SpellInfo const* spell) override
|
||||
{
|
||||
if (!caster || !instance)
|
||||
if (!caster)
|
||||
return;
|
||||
|
||||
switch (spell->Id)
|
||||
{
|
||||
case SPELL_LAUNCH_CHAIN:
|
||||
{
|
||||
uint32 spellId = SPELL_CHAIN_4;
|
||||
|
||||
if (caster->GetGUID() == instance->GetGuidData(DATA_HARPOON_FIRE_STATE_1))
|
||||
{
|
||||
spellId = SPELL_CHAIN_1;
|
||||
}
|
||||
else if (caster->GetGUID() == instance->GetGuidData(DATA_HARPOON_FIRE_STATE_2))
|
||||
{
|
||||
spellId = SPELL_CHAIN_2;
|
||||
}
|
||||
else if (caster->GetGUID() == instance->GetGuidData(DATA_HARPOON_FIRE_STATE_3))
|
||||
{
|
||||
spellId = SPELL_CHAIN_3;
|
||||
}
|
||||
|
||||
caster->CastSpell(me, spellId, true);
|
||||
}
|
||||
break;
|
||||
case SPELL_CHAIN_1:
|
||||
case SPELL_CHAIN_2:
|
||||
case SPELL_CHAIN_3:
|
||||
@@ -447,16 +426,16 @@ struct boss_razorscale : public BossAI
|
||||
events.ScheduleEvent(EVENT_FLY_UP, 2s);
|
||||
break;
|
||||
case EVENT_FLY_UP:
|
||||
{
|
||||
me->SetInCombatWithZone(); // just in case
|
||||
if (instance)
|
||||
for( int i = 0; i < 4; ++i )
|
||||
if (Creature* hfs = instance->GetCreature(DATA_HARPOON_FIRE_STATE_1 + i))
|
||||
{
|
||||
me->SummonCreature(34188, hfs->GetPositionX(), hfs->GetPositionY(), hfs->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 22000);
|
||||
hfs->AI()->SetData(1, 0);
|
||||
}
|
||||
std::list<Creature*> hfsList;
|
||||
me->GetCreaturesWithEntryInRange(hfsList, 300.0f, NPC_HARPOON_FIRE_STATE);
|
||||
for (Creature* hfs : hfsList)
|
||||
{
|
||||
me->SummonCreature(34188, hfs->GetPositionX(), hfs->GetPositionY(), hfs->GetPositionZ(), 0, TEMPSUMMON_TIMED_DESPAWN, 22000);
|
||||
hfs->AI()->SetData(1, 0);
|
||||
}
|
||||
|
||||
me->RemoveAura(SPELL_LAUNCH_CHAIN);
|
||||
me->RemoveAura(SPELL_CHAIN_1);
|
||||
me->RemoveAura(SPELL_CHAIN_3);
|
||||
if (RAID_MODE(0, 1))
|
||||
@@ -506,6 +485,7 @@ struct boss_razorscale : public BossAI
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case EVENT_RESUME_FIXING:
|
||||
for (uint8 i = 0; i < 3; ++i)
|
||||
if (Creature* c = ObjectAccessor::GetCreature(*me, ExpeditionEngineerGUIDs[i]))
|
||||
@@ -621,9 +601,10 @@ public:
|
||||
creature->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP);
|
||||
|
||||
// reset npcs NPC_HARPOON_FIRE_STATE
|
||||
for (uint8 i = 0; i < 4; ++i)
|
||||
if (Creature* hfs = instance->GetCreature(DATA_HARPOON_FIRE_STATE_1 + i))
|
||||
hfs->AI()->SetData(1, 0);
|
||||
std::list<Creature*> hfsList;
|
||||
razorscale->GetCreaturesWithEntryInRange(hfsList, 300.0f, NPC_HARPOON_FIRE_STATE);
|
||||
for (Creature* hfs : hfsList)
|
||||
hfs->AI()->SetData(1, 0);
|
||||
|
||||
if (razorscale->AI())
|
||||
{
|
||||
@@ -687,18 +668,19 @@ struct npc_ulduar_harpoonfirestate : public NullCreatureAI
|
||||
|
||||
uint32 GetHarpoonGunIdForThisHFS()
|
||||
{
|
||||
if (pInstance)
|
||||
{
|
||||
if (me->GetGUID() == pInstance->GetGuidData(DATA_HARPOON_FIRE_STATE_1))
|
||||
return GO_HARPOON_GUN_1;
|
||||
else if (me->GetGUID() == pInstance->GetGuidData(DATA_HARPOON_FIRE_STATE_2))
|
||||
return GO_HARPOON_GUN_2;
|
||||
else if (me->GetGUID() == pInstance->GetGuidData(DATA_HARPOON_FIRE_STATE_3))
|
||||
return GO_HARPOON_GUN_3;
|
||||
else
|
||||
return GO_HARPOON_GUN_4;
|
||||
}
|
||||
return 0;
|
||||
static uint32 const harpoonEntries[] = { GO_HARPOON_GUN_1, GO_HARPOON_GUN_2, GO_HARPOON_GUN_3, GO_HARPOON_GUN_4 };
|
||||
for (uint32 entry : harpoonEntries)
|
||||
if (me->FindNearestGameObject(entry, 5.0f))
|
||||
return entry;
|
||||
|
||||
// Fallback: determine by X position
|
||||
if (me->GetPositionX() > 595)
|
||||
return GO_HARPOON_GUN_4;
|
||||
else if (me->GetPositionX() > 585)
|
||||
return GO_HARPOON_GUN_3;
|
||||
else if (me->GetPositionX() > 575)
|
||||
return GO_HARPOON_GUN_2;
|
||||
return GO_HARPOON_GUN_1;
|
||||
}
|
||||
|
||||
void SetData(uint32 id, uint32 value) override
|
||||
@@ -706,7 +688,6 @@ struct npc_ulduar_harpoonfirestate : public NullCreatureAI
|
||||
switch (id)
|
||||
{
|
||||
case 1: // cleanup at the start of the fight
|
||||
if (pInstance)
|
||||
{
|
||||
uint32 h_entry = GetHarpoonGunIdForThisHFS();
|
||||
if (GameObject* wh = me->FindNearestGameObject(h_entry, 5.0f))
|
||||
@@ -743,7 +724,7 @@ struct npc_ulduar_harpoonfirestate : public NullCreatureAI
|
||||
if (!razorscale)
|
||||
return;
|
||||
if (!razorscale->HasAura(value))
|
||||
me->CastSpell(razorscale, SPELL_LAUNCH_CHAIN, true);
|
||||
me->CastSpell(razorscale, value, true);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -832,15 +813,16 @@ struct npc_ulduar_expedition_engineer : public NullCreatureAI
|
||||
return;
|
||||
}
|
||||
|
||||
for( int i = 0; i < 4; ++i )
|
||||
if (Creature* fs = pInstance->GetCreature(DATA_HARPOON_FIRE_STATE_1 + i))
|
||||
if (!fs->AI()->GetData(2))
|
||||
{
|
||||
float a = rand_norm() * M_PI;
|
||||
me->GetMotionMaster()->MovePoint(0, fs->GetPositionX() + 3.0f * cos(a), fs->GetPositionY() + 3.0f * std::sin(a), fs->GetPositionZ());
|
||||
fixingGUID = fs->GetGUID();
|
||||
return;
|
||||
}
|
||||
std::list<Creature*> hfsList;
|
||||
me->GetCreaturesWithEntryInRange(hfsList, 300.0f, NPC_HARPOON_FIRE_STATE);
|
||||
for (Creature* fs : hfsList)
|
||||
if (!fs->AI()->GetData(2))
|
||||
{
|
||||
float a = rand_norm() * M_PI;
|
||||
me->GetMotionMaster()->MovePoint(0, fs->GetPositionX() + 3.0f * cos(a), fs->GetPositionY() + 3.0f * std::sin(a), fs->GetPositionZ());
|
||||
fixingGUID = fs->GetGUID();
|
||||
return;
|
||||
}
|
||||
|
||||
Reset(); // all harpoons repaired
|
||||
me->GetMotionMaster()->MoveTargetedHome();
|
||||
@@ -877,30 +859,17 @@ public:
|
||||
return true;
|
||||
}
|
||||
|
||||
uint32 npc = 0;
|
||||
uint32 spell = 0;
|
||||
switch (go->GetEntry())
|
||||
{
|
||||
case GO_HARPOON_GUN_1:
|
||||
npc = DATA_HARPOON_FIRE_STATE_1;
|
||||
spell = SPELL_CHAIN_1;
|
||||
break;
|
||||
case GO_HARPOON_GUN_2:
|
||||
npc = DATA_HARPOON_FIRE_STATE_2;
|
||||
spell = SPELL_CHAIN_2;
|
||||
break;
|
||||
case GO_HARPOON_GUN_3:
|
||||
npc = DATA_HARPOON_FIRE_STATE_3;
|
||||
spell = SPELL_CHAIN_3;
|
||||
break;
|
||||
case GO_HARPOON_GUN_4:
|
||||
npc = DATA_HARPOON_FIRE_STATE_4;
|
||||
spell = SPELL_CHAIN_4;
|
||||
break;
|
||||
case GO_HARPOON_GUN_1: spell = SPELL_CHAIN_1; break;
|
||||
case GO_HARPOON_GUN_2: spell = SPELL_CHAIN_2; break;
|
||||
case GO_HARPOON_GUN_3: spell = SPELL_CHAIN_3; break;
|
||||
case GO_HARPOON_GUN_4: spell = SPELL_CHAIN_4; break;
|
||||
}
|
||||
|
||||
if (Creature* hfs = pInstance->GetCreature(npc))
|
||||
hfs->AI()->SetData(3, spell);
|
||||
if (Creature* hfs = go->FindNearestCreature(NPC_HARPOON_FIRE_STATE, 5.0f))
|
||||
hfs->AI()->SetData(3, spell);
|
||||
|
||||
go->SetLootState(GO_JUST_DEACTIVATED);
|
||||
return true;
|
||||
|
||||
@@ -154,9 +154,6 @@ public:
|
||||
uint32 m_unbrokenAchievement;
|
||||
uint32 m_mageBarrier;
|
||||
|
||||
// Razorscale
|
||||
ObjectGuid m_RazorscaleHarpoonFireStateGUID[4];
|
||||
|
||||
// Hodir
|
||||
bool hmHodir;
|
||||
Position normalChestPosition = { 1967.152588f, -204.188461f, 432.686951f, 5.50957f };
|
||||
@@ -472,18 +469,6 @@ public:
|
||||
if (!m_algalonTimer)
|
||||
creature->DespawnOrUnsummon();
|
||||
break;
|
||||
case NPC_HARPOON_FIRE_STATE:
|
||||
{
|
||||
if (creature->GetPositionX() > 595 )
|
||||
m_RazorscaleHarpoonFireStateGUID[3] = creature->GetGUID();
|
||||
else if (creature->GetPositionX() > 585 )
|
||||
m_RazorscaleHarpoonFireStateGUID[2] = creature->GetGUID();
|
||||
else if (creature->GetPositionX() > 575 )
|
||||
m_RazorscaleHarpoonFireStateGUID[1] = creature->GetGUID();
|
||||
else
|
||||
m_RazorscaleHarpoonFireStateGUID[0] = creature->GetGUID();
|
||||
}
|
||||
break;
|
||||
//! These creatures are summoned by something else than Algalon
|
||||
//! but need to be controlled/despawned by him - so they need to be
|
||||
//! registered in his summon list
|
||||
@@ -803,12 +788,6 @@ public:
|
||||
case DATA_REPAIR_STATION2:
|
||||
return m_RepairSGUID[1];
|
||||
|
||||
// Razorscales Harpoon Fire State GUIDs
|
||||
case DATA_HARPOON_FIRE_STATE_1:
|
||||
case DATA_HARPOON_FIRE_STATE_2:
|
||||
case DATA_HARPOON_FIRE_STATE_3:
|
||||
case DATA_HARPOON_FIRE_STATE_4:
|
||||
return m_RazorscaleHarpoonFireStateGUID[data - 200];
|
||||
}
|
||||
|
||||
return GetObjectGuid(data);
|
||||
|
||||
@@ -66,12 +66,6 @@ enum UlduarData
|
||||
DATA_UNBROKEN_ACHIEVEMENT = 105,
|
||||
DATA_LEVIATHAN_DOORS = 106,
|
||||
|
||||
// Razorscales Harpoon Fire State GUIDs
|
||||
DATA_HARPOON_FIRE_STATE_1 = 200,
|
||||
DATA_HARPOON_FIRE_STATE_2 = 201,
|
||||
DATA_HARPOON_FIRE_STATE_3 = 202,
|
||||
DATA_HARPOON_FIRE_STATE_4 = 203,
|
||||
|
||||
// Mimiron creatures
|
||||
DATA_MIMIRON_LEVIATHAN_MKII = 301,
|
||||
DATA_MIMIRON_VX001 = 302,
|
||||
|
||||
Reference in New Issue
Block a user