From d436f97ea2fec84258a5e34f374c20b032e9a670 Mon Sep 17 00:00:00 2001 From: Yunfan Li <56597220+liyunfan1223@users.noreply.github.com> Date: Mon, 19 Aug 2024 01:28:56 +0800 Subject: [PATCH 1/9] =?UTF-8?q?fix(Script/Vehicles):=20The=20next=20player?= =?UTF-8?q?=20entering=20Salvaged=20Siege=20Engine=20=E2=80=A6=20(#19674)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit fix(Script/Vehicles): The next player entering Salvaged Siege Engine should control turret if it's not occupied. --- src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp index b43119631..90890f2f1 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/ulduar.cpp @@ -546,7 +546,7 @@ struct npc_salvaged_siege_engine : public VehicleAI { if (Unit* turret = vehicle->GetPassenger(7)) { - if (Vehicle* turretVehicle = me->GetVehicleKit()) + if (Vehicle* turretVehicle = turret->GetVehicleKit()) { if (!turretVehicle->IsVehicleInUse()) { From 23f58016d078e922ebbc378f28223d6d0a19693d Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sun, 18 Aug 2024 14:56:38 -0300 Subject: [PATCH 2/9] fix(Core/Map): Exempt raids from the hourly limit (#19650) --- src/server/game/Maps/MapMgr.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Maps/MapMgr.cpp b/src/server/game/Maps/MapMgr.cpp index 9e89d64e2..423f5ac5d 100644 --- a/src/server/game/Maps/MapMgr.cpp +++ b/src/server/game/Maps/MapMgr.cpp @@ -223,7 +223,7 @@ Map::EnterState MapMgr::PlayerCannotEnter(uint32 mapid, Player* player, bool log } // players are only allowed to enter 5 instances per hour - if (entry->IsDungeon() && (!group || !group->isLFGGroup() || !group->IsLfgRandomInstance())) + if (entry->IsNonRaidDungeon() && (!group || !group->isLFGGroup() || !group->IsLfgRandomInstance())) { uint32 instaceIdToCheck = 0; if (InstanceSave* save = sInstanceSaveMgr->PlayerGetInstanceSave(player->GetGUID(), mapid, player->GetDifficulty(entry->IsRaid()))) From b0f77eb39b4453d1b2a3224402925f52fc608cac Mon Sep 17 00:00:00 2001 From: Grimdhex <176165533+Grimdhex@users.noreply.github.com> Date: Mon, 19 Aug 2024 01:31:55 +0200 Subject: [PATCH 3/9] fix(DB/SAI): Aether Ray spells and timers (#19620) --- .../sql/updates/pending_db_world/rev_1723619543080521000.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1723619543080521000.sql diff --git a/data/sql/updates/pending_db_world/rev_1723619543080521000.sql b/data/sql/updates/pending_db_world/rev_1723619543080521000.sql new file mode 100644 index 000000000..59d76c18f --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1723619543080521000.sql @@ -0,0 +1,5 @@ +-- fix spells and timer of Aether Ray (22181) +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 22181) AND (`source_type` = 0) AND (`id` IN (0, 2)); +INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES +(22181, 0, 0, 0, 0, 0, 100, 0, 5000, 15000, 20000, 20000, 0, 0, 11, 35333, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Aether Ray - In Combat - Cast \'Tail Swipe\''), +(22181, 0, 2, 0, 3, 0, 100, 0, 0, 75, 20000, 20000, 0, 0, 11, 17008, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Aether Ray - Between 0-75% Mana - Cast \'Mana Drain\''); From 1908ede1b5acbfddda8a3f1c633324de8ae9738b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 18 Aug 2024 23:32:50 +0000 Subject: [PATCH 4/9] chore(DB): import pending files Referenced commit(s): b0f77eb39b4453d1b2a3224402925f52fc608cac --- .../rev_1723619543080521000.sql => db_world/2024_08_18_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1723619543080521000.sql => db_world/2024_08_18_00.sql} (95%) diff --git a/data/sql/updates/pending_db_world/rev_1723619543080521000.sql b/data/sql/updates/db_world/2024_08_18_00.sql similarity index 95% rename from data/sql/updates/pending_db_world/rev_1723619543080521000.sql rename to data/sql/updates/db_world/2024_08_18_00.sql index 59d76c18f..87c292215 100644 --- a/data/sql/updates/pending_db_world/rev_1723619543080521000.sql +++ b/data/sql/updates/db_world/2024_08_18_00.sql @@ -1,3 +1,4 @@ +-- DB update 2024_08_17_02 -> 2024_08_18_00 -- fix spells and timer of Aether Ray (22181) DELETE FROM `smart_scripts` WHERE (`entryorguid` = 22181) AND (`source_type` = 0) AND (`id` IN (0, 2)); INSERT INTO `smart_scripts` (`entryorguid`, `source_type`, `id`, `link`, `event_type`, `event_phase_mask`, `event_chance`, `event_flags`, `event_param1`, `event_param2`, `event_param3`, `event_param4`, `event_param5`, `event_param6`, `action_type`, `action_param1`, `action_param2`, `action_param3`, `action_param4`, `action_param5`, `action_param6`, `target_type`, `target_param1`, `target_param2`, `target_param3`, `target_param4`, `target_x`, `target_y`, `target_z`, `target_o`, `comment`) VALUES From 79a653b13e699866f9c9bb31d68081433947742e Mon Sep 17 00:00:00 2001 From: Tereneckla Date: Sun, 18 Aug 2024 23:34:56 +0000 Subject: [PATCH 5/9] fix (Core/Spells): remove object size for hit calculation of aoe aura spells that target enemies (#19529) remove object size for aoe on enemy spells --- src/server/game/Grids/Notifiers/GridNotifiers.h | 2 +- src/server/game/Spells/Spell.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game/Grids/Notifiers/GridNotifiers.h b/src/server/game/Grids/Notifiers/GridNotifiers.h index 3440bf8af..9d6b36a0b 100644 --- a/src/server/game/Grids/Notifiers/GridNotifiers.h +++ b/src/server/game/Grids/Notifiers/GridNotifiers.h @@ -1104,7 +1104,7 @@ namespace Acore } - if (i_funit->_IsValidAttackTarget(u, _spellInfo, i_obj->GetTypeId() == TYPEID_DYNAMICOBJECT ? i_obj : nullptr) && i_obj->IsWithinDistInMap(u, i_range)) + if (i_funit->_IsValidAttackTarget(u, _spellInfo, i_obj->GetTypeId() == TYPEID_DYNAMICOBJECT ? i_obj : nullptr) && i_obj->IsWithinDistInMap(u, i_range,true,false)) return true; return false; diff --git a/src/server/game/Spells/Spell.cpp b/src/server/game/Spells/Spell.cpp index ea4c3383e..4429a9be4 100644 --- a/src/server/game/Spells/Spell.cpp +++ b/src/server/game/Spells/Spell.cpp @@ -9035,7 +9035,7 @@ namespace Acore if (!target->ToGameObject()->IsInRange(_position->GetPositionX(), _position->GetPositionY(), _position->GetPositionZ(), _range)) return false; } - else if (!target->IsWithinDist3d(_position, _range)) + else if (!target->IsInDist(_position, _range)) return false; else if (target->GetTypeId() == TYPEID_UNIT && target->ToCreature()->IsAvoidingAOE()) // pussywizard return false; From 01c8344cc8df536255e2d501acb59ca6437f35e4 Mon Sep 17 00:00:00 2001 From: Carriola-wotlk <148633595+Carriola-wotlk@users.noreply.github.com> Date: Mon, 19 Aug 2024 02:06:45 +0200 Subject: [PATCH 6/9] fix(Scripts/BlackTemple): Gathios the Shatterer shouldnt use Hammer of Justice on random players (#19653) * fix: SelectTargetMethod Random replaced with MaxThreat * restore like origin * fix: cast Hammer Of Justice on current target instead random target * refactor: case EVENT_SPELL_HAMMER_OF_JUSTICE statement refactored * refactor: if statement splitted * refactor: last space removed * Update src/server/scripts/Outland/BlackTemple/illidari_council.cpp Co-authored-by: Benjamin Jackson <38561765+heyitsbench@users.noreply.github.com> * fix redundant check and new line --------- Co-authored-by: MattiaBallarini Co-authored-by: Andrew <47818697+Nyeriah@users.noreply.github.com> Co-authored-by: Benjamin Jackson <38561765+heyitsbench@users.noreply.github.com> --- .../Outland/BlackTemple/illidari_council.cpp | 28 +++++-------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp index eeff38ecc..f77b4d639 100644 --- a/src/server/scripts/Outland/BlackTemple/illidari_council.cpp +++ b/src/server/scripts/Outland/BlackTemple/illidari_council.cpp @@ -103,20 +103,6 @@ enum Misc EVENT_KILL_TALK = 100 }; -struct HammerOfJusticeSelector -{ -public: - HammerOfJusticeSelector(Unit* me) : _me(me) { } - - bool operator()(Unit const* target) const - { - return target && target->GetTypeId() == TYPEID_PLAYER && _me->IsInRange(target, 10.0f, 40.0f, true); - } - -private: - Unit const* _me; -}; - class VerasEnvenom : public BasicEvent { public: @@ -337,12 +323,13 @@ public: events.ScheduleEvent(EVENT_SPELL_AURA, 30000); break; case EVENT_SPELL_HAMMER_OF_JUSTICE: - if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, HammerOfJusticeSelector(me))) - { - me->CastSpell(target, SPELL_HAMMER_OF_JUSTICE, false); - events.ScheduleEvent(EVENT_SPELL_HAMMER_OF_JUSTICE, 20000); - break; - } + if (Unit* target = me->GetVictim()) + if (target->IsPlayer() && me->IsInRange(target, 10.0f, 40.0f, true)) + { + me->CastSpell(target, SPELL_HAMMER_OF_JUSTICE); + events.ScheduleEvent(EVENT_SPELL_HAMMER_OF_JUSTICE, 20s); + break; + } events.ScheduleEvent(EVENT_SPELL_HAMMER_OF_JUSTICE, 0); break; case EVENT_SPELL_SEAL: @@ -711,4 +698,3 @@ void AddSC_boss_illidari_council() RegisterSpellScript(spell_illidari_council_judgement); RegisterSpellScript(spell_illidari_council_deadly_strike_aura); } - From cccd8005e865925e6f2f9541fd23e4ed67d995db Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Mon, 19 Aug 2024 01:29:44 -0300 Subject: [PATCH 7/9] =?UTF-8?q?fix(DB/Creature):=20Essence=20of=20Desire?= =?UTF-8?q?=20&=20Essence=20of=20Suffering=20taunt=20immu=E2=80=A6=20(#196?= =?UTF-8?q?82)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- data/sql/updates/pending_db_world/rev_1724025497789221500.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1724025497789221500.sql diff --git a/data/sql/updates/pending_db_world/rev_1724025497789221500.sql b/data/sql/updates/pending_db_world/rev_1724025497789221500.sql new file mode 100644 index 000000000..d44f5b8fa --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1724025497789221500.sql @@ -0,0 +1,2 @@ +-- +UPDATE `creature_template` SET `flags_extra` = `flags_extra` |256 WHERE `entry` IN (23418, 23419); From 1275b64ef0dfd17971fb02ef4f4ab3359de427f9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 19 Aug 2024 04:30:38 +0000 Subject: [PATCH 8/9] chore(DB): import pending files Referenced commit(s): cccd8005e865925e6f2f9541fd23e4ed67d995db --- .../rev_1724025497789221500.sql => db_world/2024_08_19_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1724025497789221500.sql => db_world/2024_08_19_00.sql} (69%) diff --git a/data/sql/updates/pending_db_world/rev_1724025497789221500.sql b/data/sql/updates/db_world/2024_08_19_00.sql similarity index 69% rename from data/sql/updates/pending_db_world/rev_1724025497789221500.sql rename to data/sql/updates/db_world/2024_08_19_00.sql index d44f5b8fa..4e6abb46f 100644 --- a/data/sql/updates/pending_db_world/rev_1724025497789221500.sql +++ b/data/sql/updates/db_world/2024_08_19_00.sql @@ -1,2 +1,3 @@ +-- DB update 2024_08_18_00 -> 2024_08_19_00 -- UPDATE `creature_template` SET `flags_extra` = `flags_extra` |256 WHERE `entry` IN (23418, 23419); From 337135bf9e409d97628f6f8778d32433991058fc Mon Sep 17 00:00:00 2001 From: Kitzunu <24550914+Kitzunu@users.noreply.github.com> Date: Mon, 19 Aug 2024 10:17:02 +0200 Subject: [PATCH 9/9] refactor(Core/Misc): Use NpcFlag helpers (#19676) * chore(Core/Misc): Use HasNpcFlag instead of HasFlag * extend to all npcflag helpers --- src/server/game/AI/CoreAI/PassiveAI.cpp | 2 +- src/server/game/AI/SmartScripts/SmartScript.cpp | 6 +++--- src/server/game/Entities/Unit/Unit.h | 5 ++--- .../CavernsOfTime/BattleForMountHyjal/hyjal.cpp | 10 +++++----- .../scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp | 4 ++-- 5 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/server/game/AI/CoreAI/PassiveAI.cpp b/src/server/game/AI/CoreAI/PassiveAI.cpp index 080827f1a..796231e41 100644 --- a/src/server/game/AI/CoreAI/PassiveAI.cpp +++ b/src/server/game/AI/CoreAI/PassiveAI.cpp @@ -25,7 +25,7 @@ NullCreatureAI::NullCreatureAI(Creature* c) : CreatureAI(c) { me->SetReactState( int32 NullCreatureAI::Permissible(Creature const* creature) { - if (creature->HasFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_SPELLCLICK)) + if (creature->HasNpcFlag(UNIT_NPC_FLAG_SPELLCLICK)) return PERMIT_BASE_PROACTIVE + 50; if (creature->IsTrigger()) diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index efac02f80..c680cc4cc 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -2061,21 +2061,21 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { for (WorldObject* target : targets) if (IsCreature(target)) - target->ToUnit()->SetUInt32Value(UNIT_NPC_FLAGS, e.action.unitFlag.flag); + target->ToUnit()->ReplaceAllNpcFlags(NPCFlags(e.action.unitFlag.flag)); break; } case SMART_ACTION_ADD_NPC_FLAG: { for (WorldObject* target : targets) if (IsCreature(target)) - target->ToUnit()->SetFlag(UNIT_NPC_FLAGS, e.action.unitFlag.flag); + target->ToUnit()->SetNpcFlag(NPCFlags(e.action.unitFlag.flag)); break; } case SMART_ACTION_REMOVE_NPC_FLAG: { for (WorldObject* target : targets) if (IsCreature(target)) - target->ToUnit()->RemoveFlag(UNIT_NPC_FLAGS, e.action.unitFlag.flag); + target->ToUnit()->RemoveNpcFlag(NPCFlags(e.action.unitFlag.flag)); break; } case SMART_ACTION_CROSS_CAST: diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index bdd01d230..97efd9c2f 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1003,13 +1003,12 @@ public: [[nodiscard]] bool IsInnkeeper() const { return HasNpcFlag(UNIT_NPC_FLAG_INNKEEPER); } [[nodiscard]] bool IsSpiritHealer() const { return HasNpcFlag(UNIT_NPC_FLAG_SPIRITHEALER); } [[nodiscard]] bool IsSpiritGuide() const { return HasNpcFlag(UNIT_NPC_FLAG_SPIRITGUIDE); } - [[nodiscard]] bool IsTabardDesigner()const { return HasNpcFlag(UNIT_NPC_FLAG_TABARDDESIGNER); } + [[nodiscard]] bool IsTabardDesigner() const { return HasNpcFlag(UNIT_NPC_FLAG_TABARDDESIGNER); } [[nodiscard]] bool IsAuctioner() const { return HasNpcFlag(UNIT_NPC_FLAG_AUCTIONEER); } [[nodiscard]] bool IsArmorer() const { return HasNpcFlag(UNIT_NPC_FLAG_REPAIR); } [[nodiscard]] bool IsServiceProvider() const { - return HasFlag(UNIT_NPC_FLAGS, - UNIT_NPC_FLAG_VENDOR | UNIT_NPC_FLAG_TRAINER | UNIT_NPC_FLAG_FLIGHTMASTER | + return HasNpcFlag(UNIT_NPC_FLAG_VENDOR | UNIT_NPC_FLAG_TRAINER | UNIT_NPC_FLAG_FLIGHTMASTER | UNIT_NPC_FLAG_PETITIONER | UNIT_NPC_FLAG_BATTLEMASTER | UNIT_NPC_FLAG_BANKER | UNIT_NPC_FLAG_INNKEEPER | UNIT_NPC_FLAG_SPIRITHEALER | UNIT_NPC_FLAG_SPIRITGUIDE | UNIT_NPC_FLAG_TABARDDESIGNER | UNIT_NPC_FLAG_AUCTIONEER); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp index b527b96b7..01b12a9ef 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/hyjal.cpp @@ -113,7 +113,7 @@ public: scheduler.CancelAll(); if (InstanceScript* hyjal = me->GetInstanceScript()) if (!hyjal->GetData(DATA_WAVE_STATUS)) - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP); } void JustEngagedWith(Unit* /*who*/) override @@ -138,7 +138,7 @@ public: void IsSummonedBy(WorldObject* /*summoner*/) override { - me->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); DoCastSelf(SPELL_SIMPLE_TELEPORT, true); // Should wait 2400ms @@ -176,7 +176,7 @@ public: bool OnGossipSelect(Player* /*player*/ , Creature* creature, uint32 /*sender*/, uint32 /*action*/) override { - creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + creature->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); if (InstanceScript* hyjal = creature->GetInstanceScript()) { @@ -213,7 +213,7 @@ public: scheduler.CancelAll(); if (InstanceScript* hyjal = me->GetInstanceScript()) if (!hyjal->GetData(DATA_WAVE_STATUS)) - me->SetFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP); } void JustEngagedWith(Unit* /*who*/) override @@ -251,7 +251,7 @@ public: bool OnGossipSelect(Player* /*player*/, Creature* creature, uint32 /*sender*/, uint32 /*action*/) override { - creature->RemoveFlag(UNIT_NPC_FLAGS, UNIT_NPC_FLAG_GOSSIP); + creature->RemoveNpcFlag(UNIT_NPC_FLAG_GOSSIP); if (InstanceScript* hyjal = creature->GetInstanceScript()) { diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp index b9f4f71f3..dc2e9c641 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp @@ -1790,7 +1790,7 @@ public: if (!spellClickHandled) return; - if (!me->GetUInt32Value(UNIT_NPC_FLAGS)) + if (!me->GetNpcFlags()) return; switch (me->GetArmor()) @@ -1806,7 +1806,7 @@ public: break; } - me->SetUInt32Value(UNIT_NPC_FLAGS, 0); + me->ReplaceAllNpcFlags(UNIT_NPC_FLAG_NONE); me->DespawnOrUnsummon(1000); }