fix(Scripts/ShatteredHalls): Don't let Flame Arrows stack in Blood Guard Porung Gauntlet Event (#24434)

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: sudlud <sudlud@users.noreply.github.com>
This commit is contained in:
Gultask
2026-01-30 00:12:35 -03:00
committed by GitHub
parent eae4ed19be
commit ce7566defb
3 changed files with 40 additions and 3 deletions

View File

@@ -291,10 +291,29 @@ class spell_tsh_shoot_flame_arrow : public SpellScript
unitList.remove_if([&](WorldObject* target) -> bool unitList.remove_if([&](WorldObject* target) -> bool
{ {
return !target->SelectNearestPlayer(15.0f); if (!target)
return true;
if (!target->SelectNearestPlayer(15.0f))
return true;
if (target->FindNearestGameObject(GO_BLAZE, 6.0f))
return true;
// Don't stack arrows on the same target
if (InstanceScript* instance = caster->GetInstanceScript())
if (target->GetGUID() == instance->GetGuidData(DATA_LAST_FLAME_ARROW))
return true;
return false;
}); });
Acore::Containers::RandomResize(unitList, 1); Acore::Containers::RandomResize(unitList, 1);
// Replace last arrow GUID
if (!unitList.empty())
if (InstanceScript* instance = caster->GetInstanceScript())
instance->SetGuidData(DATA_LAST_FLAME_ARROW, unitList.front()->GetGUID());
} }
void HandleScriptEffect(SpellEffIndex effIndex) void HandleScriptEffect(SpellEffIndex effIndex)

View File

@@ -117,11 +117,25 @@ public:
return PrisonerGUID[data - DATA_PRISONER_1]; return PrisonerGUID[data - DATA_PRISONER_1];
case DATA_EXECUTIONER: case DATA_EXECUTIONER:
return ExecutionerGUID; return ExecutionerGUID;
case DATA_LAST_FLAME_ARROW:
return LastArrowGUID;
} }
return ObjectGuid::Empty; return ObjectGuid::Empty;
} }
void SetGuidData(uint32 data, ObjectGuid value) override
{
switch (data)
{
case DATA_LAST_FLAME_ARROW:
LastArrowGUID = value;
break;
default:
break;
}
}
void Update(uint32 diff) override void Update(uint32 diff) override
{ {
if (RescueTimer && RescueTimer < 100 * MINUTE * IN_MILLISECONDS) if (RescueTimer && RescueTimer < 100 * MINUTE * IN_MILLISECONDS)
@@ -164,6 +178,7 @@ public:
} }
protected: protected:
ObjectGuid LastArrowGUID;
ObjectGuid ExecutionerGUID; ObjectGuid ExecutionerGUID;
ObjectGuid PrisonerGUID[3]; ObjectGuid PrisonerGUID[3];
uint32 RescueTimer; uint32 RescueTimer;

View File

@@ -37,7 +37,8 @@ enum DataTypes
DATA_EXECUTIONER = 14, DATA_EXECUTIONER = 14,
DATA_OMROGG_LEFT_HEAD = 15, DATA_OMROGG_LEFT_HEAD = 15,
DATA_OMROGG_RIGHT_HEAD = 16, DATA_OMROGG_RIGHT_HEAD = 16,
DATA_WARCHIEF_PORTAL = 17 DATA_WARCHIEF_PORTAL = 17,
DATA_LAST_FLAME_ARROW = 18
}; };
enum CreatureIds enum CreatureIds
@@ -49,6 +50,7 @@ enum CreatureIds
NPC_SH_ZEALOT = 17462, NPC_SH_ZEALOT = 17462,
NPC_SH_ARCHER = 17427, NPC_SH_ARCHER = 17427,
NPC_SH_SCOUT = 17693, NPC_SH_SCOUT = 17693,
NPC_SH_FLAME_ARROW = 17687,
// Warchief Kargath // Warchief Kargath
NPC_WARCHIEF_KARGATH = 16808, NPC_WARCHIEF_KARGATH = 16808,
@@ -76,7 +78,8 @@ enum CreatureIds
enum GameobjectIds enum GameobjectIds
{ {
GO_GRAND_WARLOCK_CHAMBER_DOOR_1 = 182539, GO_GRAND_WARLOCK_CHAMBER_DOOR_1 = 182539,
GO_GRAND_WARLOCK_CHAMBER_DOOR_2 = 182540 GO_GRAND_WARLOCK_CHAMBER_DOOR_2 = 182540,
GO_BLAZE = 181915
}; };
enum SpellIds enum SpellIds