From 0c687f9c60b699e78122d1811f598209ae92bc53 Mon Sep 17 00:00:00 2001 From: sudlud Date: Sat, 4 Oct 2025 02:28:05 +0200 Subject: [PATCH 001/140] fix(DB/Gameobject): Sniffed Values for 'Big Rancid Meat' spawns (#23095) --- .../pending_db_world/rev_1759525004799036400.sql | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1759525004799036400.sql diff --git a/data/sql/updates/pending_db_world/rev_1759525004799036400.sql b/data/sql/updates/pending_db_world/rev_1759525004799036400.sql new file mode 100644 index 000000000..10755e244 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1759525004799036400.sql @@ -0,0 +1,12 @@ +-- Update gameobject 'Big Rancid Meat' with sniffed values +-- updated spawns +DELETE FROM `gameobject` WHERE (`id` IN (177665)) AND (`guid` IN (45717)); +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`, `Comment`) VALUES +(45717, 177665, 0, 0, 0, 1, 1, 1598.3446044921875, -3246.51708984375, 66.82944488525390625, 5.480334281921386718, 0, 0, -0.39073085784912109, 0.920504987239837646, 120, 255, 1, "", 46248, NULL); + +-- new spawns +DELETE FROM `gameobject` WHERE (`id` IN (191789)) AND (`guid` IN (178, 179, 180)); +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`, `Comment`) VALUES +(178, 191789, 571, 0, 0, 1, 1, 8322.1416015625, 2812.73779296875, 655.9156494140625, 2.042035102844238281, 0, 0, 0.852640151977539062, 0.522498607635498046, 120, 255, 1, "", 46368, NULL), +(179, 191789, 571, 0, 0, 1, 1, 8340.8603515625, 2739.64208984375, 655.246337890625, 4.97418975830078125, 0, 0, -0.60876083374023437, 0.793353796005249023, 120, 255, 1, "", 46368, NULL), +(180, 191789, 571, 0, 0, 1, 1, 8347.0751953125, 2816.0400390625, 655.16448974609375, 6.248279094696044921, 0, 0, -0.01745223999023437, 0.999847710132598876, 120, 255, 1, "", 46368, NULL); From edd91cc551efa2f1bbca6db8940e94eba2161ff7 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 4 Oct 2025 00:29:08 +0000 Subject: [PATCH 002/140] chore(DB): import pending files Referenced commit(s): 0c687f9c60b699e78122d1811f598209ae92bc53 --- .../rev_1759525004799036400.sql => db_world/2025_10_04_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1759525004799036400.sql => db_world/2025_10_04_00.sql} (97%) diff --git a/data/sql/updates/pending_db_world/rev_1759525004799036400.sql b/data/sql/updates/db_world/2025_10_04_00.sql similarity index 97% rename from data/sql/updates/pending_db_world/rev_1759525004799036400.sql rename to data/sql/updates/db_world/2025_10_04_00.sql index 10755e244..8c6986179 100644 --- a/data/sql/updates/pending_db_world/rev_1759525004799036400.sql +++ b/data/sql/updates/db_world/2025_10_04_00.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_02_01 -> 2025_10_04_00 -- Update gameobject 'Big Rancid Meat' with sniffed values -- updated spawns DELETE FROM `gameobject` WHERE (`id` IN (177665)) AND (`guid` IN (45717)); From 3aa0de26994b2746ce32b2963a76586f94c0401f Mon Sep 17 00:00:00 2001 From: blinkysc <37940565+blinkysc@users.noreply.github.com> Date: Fri, 3 Oct 2025 19:29:17 -0500 Subject: [PATCH 003/140] fix(Script/Gundrak): path for Eck will only open in heroic (#23072) --- src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp index 5e3225938..f8a87b253 100644 --- a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp +++ b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp @@ -105,6 +105,9 @@ public: break; case GO_ECK_DOORS: case GO_ECK_UNDERWATER_GATE: + if (instance->IsHeroic()) + AddDoor(gameobject); + break; case GO_GAL_DARAH_DOORS0: case GO_GAL_DARAH_DOORS1: case GO_GAL_DARAH_DOORS2: @@ -119,6 +122,9 @@ public: { case GO_ECK_DOORS: case GO_ECK_UNDERWATER_GATE: + if (instance->IsHeroic()) + RemoveDoor(gameobject); + break; case GO_GAL_DARAH_DOORS0: case GO_GAL_DARAH_DOORS1: case GO_GAL_DARAH_DOORS2: From 4f19eb9b815c5e5da75c039e0981141eb9898718 Mon Sep 17 00:00:00 2001 From: sudlud Date: Sat, 4 Oct 2025 02:29:34 +0200 Subject: [PATCH 004/140] fix(DB/Gameobject): Sniffed Values for 'Stolen Pack' spawns (#23094) --- .../sql/updates/pending_db_world/rev_1759524261297901900.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1759524261297901900.sql diff --git a/data/sql/updates/pending_db_world/rev_1759524261297901900.sql b/data/sql/updates/pending_db_world/rev_1759524261297901900.sql new file mode 100644 index 000000000..452a5e007 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1759524261297901900.sql @@ -0,0 +1,5 @@ +-- Update gameobject 'Stolen Pack' with sniffed values +-- new spawns +DELETE FROM `gameobject` WHERE (`id` IN (191726)) AND (`guid` IN (42)); +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`, `Comment`) VALUES +(42, 191726, 571, 0, 0, 1, 1, 7312.4150390625, -1610.486572265625, 944.2940673828125, 4.991643905639648437, 0, 0, -0.60181427001953125, 0.798636078834533691, 120, 255, 1, "", 47720, NULL); From 7015f5197189957128826da5925d63bfbaf49802 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 4 Oct 2025 00:30:10 +0000 Subject: [PATCH 005/140] chore(DB): import pending files Referenced commit(s): edd91cc551efa2f1bbca6db8940e94eba2161ff7 --- .../rev_1759524261297901900.sql => db_world/2025_10_04_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1759524261297901900.sql => db_world/2025_10_04_01.sql} (93%) diff --git a/data/sql/updates/pending_db_world/rev_1759524261297901900.sql b/data/sql/updates/db_world/2025_10_04_01.sql similarity index 93% rename from data/sql/updates/pending_db_world/rev_1759524261297901900.sql rename to data/sql/updates/db_world/2025_10_04_01.sql index 452a5e007..82575f58c 100644 --- a/data/sql/updates/pending_db_world/rev_1759524261297901900.sql +++ b/data/sql/updates/db_world/2025_10_04_01.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_04_00 -> 2025_10_04_01 -- Update gameobject 'Stolen Pack' with sniffed values -- new spawns DELETE FROM `gameobject` WHERE (`id` IN (191726)) AND (`guid` IN (42)); From b80353d2887a41299d27f51a13108f18eb00e118 Mon Sep 17 00:00:00 2001 From: killerwife Date: Sat, 4 Oct 2025 02:52:38 +0200 Subject: [PATCH 006/140] fix(Core/Movement): Implement order counters (#23015) --- .../game/Entities/Creature/Creature.cpp | 106 +---- src/server/game/Entities/Creature/Creature.h | 4 - src/server/game/Entities/Player/Player.cpp | 158 +++----- src/server/game/Entities/Player/Player.h | 5 +- src/server/game/Entities/Unit/Unit.cpp | 315 +++++++++++---- src/server/game/Entities/Unit/Unit.h | 17 +- src/server/game/Entities/Unit/UnitDefines.h | 2 + src/server/game/Handlers/MiscHandler.cpp | 44 ++- src/server/game/Handlers/MovementHandler.cpp | 367 +++++++++--------- src/server/game/Server/Protocol/Opcodes.cpp | 8 +- src/server/game/Server/WorldSession.cpp | 3 +- src/server/game/Server/WorldSession.h | 17 +- 12 files changed, 546 insertions(+), 500 deletions(-) diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index ad6cdd819..877cfee68 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -1998,7 +1998,7 @@ void Creature::setDeathState(DeathState state, bool despawn) m_formation->FormationReset(true, false); bool needsFalling = !despawn && (IsFlying() || IsHovering()) && !IsUnderWater(); - SetHover(false, false, false); + SetHover(false); SetDisableGravity(false, false, false); if (needsFalling) @@ -3244,8 +3244,9 @@ bool Creature::SetDisableGravity(bool disable, bool packetOnly /*= false*/, bool { WorldPacket data(disable ? SMSG_MOVE_GRAVITY_DISABLE : SMSG_MOVE_GRAVITY_ENABLE, 12); data << GetPackGUID(); - data << uint32(0); //! movement counter + data << m_movedByPlayer->ToPlayer()->GetSession()->GetOrderCounter(); // movement counter m_movedByPlayer->ToPlayer()->SendDirectMessage(&data); + m_movedByPlayer->ToPlayer()->GetSession()->IncrementOrderCounter(); data.Initialize(MSG_MOVE_GRAVITY_CHNG, 64); data << GetPackGUID(); @@ -3318,107 +3319,6 @@ void Creature::RefreshSwimmingFlag(bool recheck) SetUnitFlag(UNIT_FLAG_SWIMMING); } -bool Creature::SetCanFly(bool enable, bool /*packetOnly*/ /* = false */) -{ - if (!Unit::SetCanFly(enable)) - return false; - - if (m_movedByPlayer) - { - sScriptMgr->AnticheatSetCanFlybyServer(m_movedByPlayer->ToPlayer(), enable); - - if (!enable) - m_movedByPlayer->ToPlayer()->SetFallInformation(GameTime::GetGameTime().count(), m_movedByPlayer->ToPlayer()->GetPositionZ()); - - WorldPacket data(enable ? SMSG_MOVE_SET_CAN_FLY : SMSG_MOVE_UNSET_CAN_FLY, 12); - data << GetPackGUID(); - data << uint32(0); //! movement counter - m_movedByPlayer->ToPlayer()->SendDirectMessage(&data); - - data.Initialize(MSG_MOVE_UPDATE_CAN_FLY, 64); - data << GetPackGUID(); - BuildMovementPacket(&data); - m_movedByPlayer->ToPlayer()->SendMessageToSet(&data, false); - return true; - } - - WorldPacket data(enable ? SMSG_SPLINE_MOVE_SET_FLYING : SMSG_SPLINE_MOVE_UNSET_FLYING, 9); - data << GetPackGUID(); - SendMessageToSet(&data, false); - return true; -} - -bool Creature::SetWaterWalking(bool enable, bool packetOnly /* = false */) -{ - if (!packetOnly && !Unit::SetWaterWalking(enable)) - return false; - - if (m_movedByPlayer) - { - WorldPacket data(enable ? SMSG_MOVE_WATER_WALK : SMSG_MOVE_LAND_WALK, 12); - data << GetPackGUID(); - data << uint32(0); //! movement counter - m_movedByPlayer->ToPlayer()->SendDirectMessage(&data); - - data.Initialize(MSG_MOVE_WATER_WALK, 64); - data << GetPackGUID(); - BuildMovementPacket(&data); - m_movedByPlayer->ToPlayer()->SendMessageToSet(&data, false); - return true; - } - - WorldPacket data(enable ? SMSG_SPLINE_MOVE_WATER_WALK : SMSG_SPLINE_MOVE_LAND_WALK, 9); - data << GetPackGUID(); - SendMessageToSet(&data, true); - return true; -} - -bool Creature::SetFeatherFall(bool enable, bool packetOnly /* = false */) -{ - if (!packetOnly && !Unit::SetFeatherFall(enable)) - return false; - - if (m_movedByPlayer) - { - WorldPacket data(enable ? SMSG_MOVE_FEATHER_FALL : SMSG_MOVE_NORMAL_FALL, 12); - data << GetPackGUID(); - data << uint32(0); //! movement counter - m_movedByPlayer->ToPlayer()->SendDirectMessage(&data); - - data.Initialize(MSG_MOVE_FEATHER_FALL, 64); - data << GetPackGUID(); - BuildMovementPacket(&data); - m_movedByPlayer->ToPlayer()->SendMessageToSet(&data, false); - return true; - } - - WorldPacket data(enable ? SMSG_SPLINE_MOVE_FEATHER_FALL : SMSG_SPLINE_MOVE_NORMAL_FALL, 9); - data << GetPackGUID(); - SendMessageToSet(&data, true); - return true; -} - -bool Creature::SetHover(bool enable, bool packetOnly /*= false*/, bool updateAnimationTier /*= true*/) -{ - if (!packetOnly && !Unit::SetHover(enable)) - return false; - - if (updateAnimationTier && IsAlive() && !HasUnitState(UNIT_STATE_ROOT) && !IsRooted()) - { - if (IsLevitating()) - SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_FLY); - else if (IsHovering()) - SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_HOVER); - else - SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_ANIM_TIER, UNIT_BYTE1_FLAG_GROUND); - } - - WorldPacket data(enable ? SMSG_SPLINE_MOVE_SET_HOVER : SMSG_SPLINE_MOVE_UNSET_HOVER, 9); - data << GetPackGUID(); - SendMessageToSet(&data, false); - return true; -} - float Creature::GetAggroRange(Unit const* target) const { // Determines the aggro range for creatures diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index a2c294702..e5ebcd45a 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -143,10 +143,6 @@ public: bool SetWalk(bool enable) override; bool SetDisableGravity(bool disable, bool packetOnly = false, bool updateAnimationTier = true) override; bool SetSwim(bool enable) override; - bool SetCanFly(bool enable, bool packetOnly = false) override; - bool SetWaterWalking(bool enable, bool packetOnly = false) override; - bool SetFeatherFall(bool enable, bool packetOnly = false) override; - bool SetHover(bool enable, bool packetOnly = false, bool updateAnimationTier = true) override; bool HasSpellFocus(Spell const* focusSpell = nullptr) const; struct diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index d45f32670..05c93ca7e 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -1337,9 +1337,10 @@ void Player::SendTeleportAckPacket() { WorldPacket data(MSG_MOVE_TELEPORT_ACK, 41); data << GetPackGUID(); - data << uint32(0); // this value increments every time + data << GetSession()->GetOrderCounter(); // movement counter BuildMovementPacket(&data); GetSession()->SendPacket(&data); + GetSession()->IncrementOrderCounter(); } bool Player::TeleportTo(uint32 mapid, float x, float y, float z, float orientation, uint32 options /*= 0*/, Unit* target /*= nullptr*/, bool newInstance /*= false*/) @@ -4425,27 +4426,29 @@ void Player::DeleteOldRecoveryItems(uint32 keepDays) void Player::SetMovement(PlayerMovementType pType) { WorldPacket data; + const PackedGuid& guid = GetPackGUID(); switch (pType) { case MOVE_ROOT: - data.Initialize(SMSG_FORCE_MOVE_ROOT, GetPackGUID().size() + 4); + data.Initialize(SMSG_FORCE_MOVE_ROOT, guid.size() + 4); break; case MOVE_UNROOT: - data.Initialize(SMSG_FORCE_MOVE_UNROOT, GetPackGUID().size() + 4); + data.Initialize(SMSG_FORCE_MOVE_UNROOT, guid.size() + 4); break; case MOVE_WATER_WALK: - data.Initialize(SMSG_MOVE_WATER_WALK, GetPackGUID().size() + 4); + data.Initialize(SMSG_MOVE_WATER_WALK, guid.size() + 4); break; case MOVE_LAND_WALK: - data.Initialize(SMSG_MOVE_LAND_WALK, GetPackGUID().size() + 4); + data.Initialize(SMSG_MOVE_LAND_WALK, guid.size() + 4); break; default: LOG_ERROR("entities.player", "Player::SetMovement: Unsupported move type ({}), data not sent to client.", pType); return; } - data << GetPackGUID(); - data << uint32(0); + data << guid; + data << GetSession()->GetOrderCounter(); // movement counter GetSession()->SendPacket(&data); + GetSession()->IncrementOrderCounter(); } /* Preconditions: @@ -11701,13 +11704,56 @@ void Player::SendInitialPacketsAfterAddToMap() if (HasStunAura()) SetMovement(MOVE_ROOT); + WorldPacket setCompoundState(SMSG_MULTIPLE_MOVES, 100); + setCompoundState << uint32(0); // size placeholder + // manual send package (have code in HandleEffect(this, AURA_EFFECT_HANDLE_SEND_FOR_CLIENT, true); that must not be re-applied. - if (HasRootAura()) + if (IsImmobilizedState()) { - WorldPacket data2(SMSG_FORCE_MOVE_ROOT, 10); - data2 << GetPackGUID(); - data2 << (uint32)2; - SendMessageToSet(&data2, true); + auto const counter = GetSession()->GetOrderCounter(); + setCompoundState << uint8(2 + GetPackGUID().size() + 4); + setCompoundState << uint16(SMSG_FORCE_MOVE_ROOT); + setCompoundState << GetPackGUID(); + setCompoundState << uint32(counter); + GetSession()->IncrementOrderCounter(); + } + + if (HasAuraType(SPELL_AURA_FEATHER_FALL)) + { + auto const counter = GetSession()->GetOrderCounter(); + setCompoundState << uint8(2 + GetPackGUID().size() + 4); + setCompoundState << uint16(SMSG_MOVE_FEATHER_FALL); + setCompoundState << GetPackGUID(); + setCompoundState << uint32(counter); + GetSession()->IncrementOrderCounter(); + } + + if (HasAuraType(SPELL_AURA_WATER_WALK)) + { + auto const counter = GetSession()->GetOrderCounter(); + setCompoundState << uint8(2 + GetPackGUID().size() + 4); + setCompoundState << uint16(SMSG_MOVE_WATER_WALK); + setCompoundState << GetPackGUID(); + setCompoundState << uint32(counter); + GetSession()->IncrementOrderCounter(); + } + + if (HasAuraType(SPELL_AURA_HOVER)) + { + auto const counter = GetSession()->GetOrderCounter(); + setCompoundState << uint8(2 + GetPackGUID().size() + 4); + setCompoundState << uint16(SMSG_MOVE_SET_HOVER); + setCompoundState << GetPackGUID(); + setCompoundState << uint32(counter); + GetSession()->IncrementOrderCounter(); + } + + // TODO: Pending mount protocol + + if (setCompoundState.size() > 4) + { + setCompoundState.put(0, setCompoundState.size() - 4); + SendDirectMessage(&setCompoundState); } SendEnchantmentDurations(); // must be after add to map @@ -15932,8 +15978,9 @@ bool Player::SetDisableGravity(bool disable, bool packetOnly /*= false*/, bool / WorldPacket data(disable ? SMSG_MOVE_GRAVITY_DISABLE : SMSG_MOVE_GRAVITY_ENABLE, 12); data << GetPackGUID(); - data << uint32(0); //! movement counter + data << GetSession()->GetOrderCounter(); // movement counter SendDirectMessage(&data); + GetSession()->IncrementOrderCounter(); data.Initialize(MSG_MOVE_GRAVITY_CHNG, 64); data << GetPackGUID(); @@ -15942,91 +15989,6 @@ bool Player::SetDisableGravity(bool disable, bool packetOnly /*= false*/, bool / return true; } -bool Player::SetCanFly(bool apply, bool packetOnly /*= false*/) -{ - sScriptMgr->AnticheatSetCanFlybyServer(this, apply); - - if (!packetOnly && !Unit::SetCanFly(apply)) - return false; - - if (!apply) - SetFallInformation(GameTime::GetGameTime().count(), GetPositionZ()); - - WorldPacket data(apply ? SMSG_MOVE_SET_CAN_FLY : SMSG_MOVE_UNSET_CAN_FLY, 12); - data << GetPackGUID(); - data << uint32(0); //! movement counter - SendDirectMessage(&data); - - data.Initialize(MSG_MOVE_UPDATE_CAN_FLY, 64); - data << GetPackGUID(); - BuildMovementPacket(&data); - SendMessageToSet(&data, false); - return true; -} - -bool Player::SetHover(bool apply, bool packetOnly /*= false*/, bool /*updateAnimationTier = true*/) -{ - // moved inside, flag can be removed on landing and wont send appropriate packet to client when aura is removed - if (!packetOnly /* && !Unit::SetHover(apply)*/) - { - Unit::SetHover(apply); - // return false; - } - - WorldPacket data(apply ? SMSG_MOVE_SET_HOVER : SMSG_MOVE_UNSET_HOVER, 12); - data << GetPackGUID(); - data << uint32(0); //! movement counter - SendDirectMessage(&data); - - data.Initialize(MSG_MOVE_HOVER, 64); - data << GetPackGUID(); - BuildMovementPacket(&data); - SendMessageToSet(&data, false); - return true; -} - -bool Player::SetWaterWalking(bool apply, bool packetOnly /*= false*/) -{ - // moved inside, flag can be removed on landing and wont send appropriate packet to client when aura is removed - if (!packetOnly /* && !Unit::SetWaterWalking(apply)*/) - { - Unit::SetWaterWalking(apply); - // return false; - } - - WorldPacket data(apply ? SMSG_MOVE_WATER_WALK : SMSG_MOVE_LAND_WALK, 12); - data << GetPackGUID(); - data << uint32(0); //! movement counter - SendDirectMessage(&data); - - data.Initialize(MSG_MOVE_WATER_WALK, 64); - data << GetPackGUID(); - BuildMovementPacket(&data); - SendMessageToSet(&data, false); - return true; -} - -bool Player::SetFeatherFall(bool apply, bool packetOnly /*= false*/) -{ - // Xinef: moved inside, flag can be removed on landing and wont send appropriate packet to client when aura is removed - if (!packetOnly/* && !Unit::SetFeatherFall(apply)*/) - { - Unit::SetFeatherFall(apply); - //return false; - } - - WorldPacket data(apply ? SMSG_MOVE_FEATHER_FALL : SMSG_MOVE_NORMAL_FALL, 12); - data << GetPackGUID(); - data << uint32(0); //! movement counter - SendDirectMessage(&data); - - data.Initialize(MSG_MOVE_FEATHER_FALL, 64); - data << GetPackGUID(); - BuildMovementPacket(&data); - SendMessageToSet(&data, false); - return true; -} - Guild* Player::GetGuild() const { uint32 guildId = GetGuildId(); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index c8dd9fc7a..74c89cc96 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2564,13 +2564,10 @@ public: void RemoveFromWhisperWhiteList(ObjectGuid guid) { WhisperList.remove(guid); } bool SetDisableGravity(bool disable, bool packetOnly = false, bool updateAnimationTier = true) override; - bool SetCanFly(bool apply, bool packetOnly = false) override; - bool SetWaterWalking(bool apply, bool packetOnly = false) override; - bool SetFeatherFall(bool apply, bool packetOnly = false) override; - bool SetHover(bool enable, bool packetOnly = false, bool updateAnimationTier = true) override; [[nodiscard]] bool CanFly() const override { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_CAN_FLY); } [[nodiscard]] bool CanEnterWater() const override { return true; } + bool IsFreeFlying() const { return HasAuraType(SPELL_AURA_MOD_INCREASE_MOUNTED_FLIGHT_SPEED) || HasAuraType(SPELL_AURA_FLY); } // saving void AdditionalSavingAddMask(uint8 mask) { m_additionalSaveTimer = 2000; m_additionalSaveMask |= mask; } diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index adaadd275..ced1d1f47 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -244,8 +244,6 @@ Unit::Unit() : WorldObject(), _dualWieldMode = DualWieldMode::AUTO; - m_rootTimes = 0; - m_state = 0; m_deathState = DeathState::Alive; @@ -4332,10 +4330,10 @@ void Unit::ProcessTerrainStatusUpdate() LiquidData const& liquidData = GetLiquidData(); - // remove appropriate auras if we are swimming/not swimming respectively - if (liquidData.Status & MAP_LIQUID_STATUS_SWIMMING) + // remove appropriate auras if we are swimming/not swimming respectively - exact mirror of client logic + if (liquidData.Status & MAP_LIQUID_STATUS_SWIMMING && (liquidData.Level - GetPositionZ()) > GetCollisionHeight() * 0.75f) // Shallow water at ~75% of collision height) RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_NOT_ABOVEWATER); - else if (!isSwimming()) + else RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_NOT_UNDERWATER); // liquid aura handling @@ -13607,9 +13605,10 @@ void Unit::Mount(uint32 mount, uint32 VehicleId, uint32 creatureEntry) WorldPacket data(SMSG_MOVE_SET_COLLISION_HGT, GetPackGUID().size() + 4 + 4); data << GetPackGUID(); - data << uint32(GameTime::GetGameTime().count()); // Packet counter + data << player->GetSession()->GetOrderCounter(); // movement counter data << player->GetCollisionHeight(); player->GetSession()->SendPacket(&data); + player->GetSession()->IncrementOrderCounter(); } RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_MOUNT); @@ -13623,13 +13622,14 @@ void Unit::Dismount() SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0); RemoveUnitFlag(UNIT_FLAG_MOUNT); - if (Player* thisPlayer = ToPlayer()) + if (Player* player = ToPlayer()) { WorldPacket data(SMSG_MOVE_SET_COLLISION_HGT, GetPackGUID().size() + 4 + 4); data << GetPackGUID(); - data << uint32(GameTime::GetGameTime().count()); // Packet counter - data << thisPlayer->GetCollisionHeight(); - thisPlayer->GetSession()->SendPacket(&data); + data << player->GetSession()->GetOrderCounter(); // movement counter + data << player->GetCollisionHeight(); + player->GetSession()->SendPacket(&data); + player->GetSession()->IncrementOrderCounter(); } WorldPacket data(SMSG_DISMOUNT, 8); @@ -14643,11 +14643,13 @@ void Unit::SetSpeed(UnitMoveType mtype, float rate, bool forced) return; } data << GetPackGUID(); - data << (uint32)0; // moveEvent, NUM_PMOVE_EVTS = 0x39 + data << (IsPlayer() ? ToPlayer()->GetSession()->GetOrderCounter() : uint32(0)); // movement counter if (mtype == MOVE_RUN) data << uint8(0); // new 2.1.0 data << float(GetSpeed(mtype)); SendMessageToSet(&data, true); + if (IsPlayer()) // TODO: Resolve this mess + ToPlayer()->GetSession()->IncrementOrderCounter(); } } @@ -16806,6 +16808,15 @@ bool Unit::IsStandState() const return !IsSitState() && s != UNIT_STAND_STATE_SLEEP && s != UNIT_STAND_STATE_KNEEL; } +bool Unit::IsStandUpOnMovementState() const +{ + uint8 s = getStandState(); + return + s == UNIT_STAND_STATE_SIT_CHAIR || s == UNIT_STAND_STATE_SIT_LOW_CHAIR || + s == UNIT_STAND_STATE_SIT_MEDIUM_CHAIR || s == UNIT_STAND_STATE_SIT_HIGH_CHAIR || + s == UNIT_STAND_STATE_SIT || s == UNIT_STAND_STATE_SLEEP; +} + void Unit::SetStandState(uint8 state) { SetByteValue(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_STAND_STATE, state); @@ -18302,9 +18313,6 @@ void Unit::SetRooted(bool apply, bool isStun) { if (apply) { - if (m_rootTimes > 0) // blizzard internal check? - m_rootTimes++; - // MOVEMENTFLAG_ROOT cannot be used in conjunction with MOVEMENTFLAG_MASK_MOVING (tested 3.3.5a) // this will freeze clients. That's why we remove MOVEMENTFLAG_MASK_MOVING before // setting MOVEMENTFLAG_ROOT @@ -18336,8 +18344,9 @@ void Unit::SetRooted(bool apply, bool isStun) { WorldPacket data(SMSG_FORCE_MOVE_ROOT, GetPackGUID().size() + 4); data << GetPackGUID(); - data << m_rootTimes; + data << m_movedByPlayer->ToPlayer()->GetSession()->GetOrderCounter(); // movement counter m_movedByPlayer->ToPlayer()->SendDirectMessage(&data); + m_movedByPlayer->ToPlayer()->GetSession()->IncrementOrderCounter(); } else { @@ -18356,8 +18365,9 @@ void Unit::SetRooted(bool apply, bool isStun) { WorldPacket data(SMSG_FORCE_MOVE_UNROOT, GetPackGUID().size() + 4); data << GetPackGUID(); - data << m_rootTimes; + data << m_movedByPlayer->ToPlayer()->GetSession()->GetOrderCounter(); // movement counter m_movedByPlayer->ToPlayer()->SendDirectMessage(&data); + m_movedByPlayer->ToPlayer()->GetSession()->IncrementOrderCounter(); } else { @@ -19261,16 +19271,14 @@ void Unit::KnockbackFrom(float x, float y, float speedXY, float speedZ) WorldPacket data(SMSG_MOVE_KNOCK_BACK, (8 + 4 + 4 + 4 + 4 + 4)); data << GetPackGUID(); - data << uint32(0); // counter + data << player->GetSession()->GetOrderCounter(); // movement counter data << float(vcos); // x direction data << float(vsin); // y direction data << float(speedXY); // Horizontal speed data << float(-speedZ); // Z Movement speed (vertical) player->GetSession()->SendPacket(&data); - - if (player->HasIncreaseMountedFlightSpeedAura() || player->HasFlyAura()) - player->SetCanFly(true, true); + player->GetSession()->IncrementOrderCounter(); player->SetCanKnockback(true); } @@ -20464,39 +20472,168 @@ bool Unit::SetSwim(bool enable) * * Doesn't inform the client. */ -bool Unit::SetCanFly(bool enable, bool /*packetOnly = false */) +void Unit::SetCanFly(bool enable) { - if (enable == HasUnitMovementFlag(MOVEMENTFLAG_CAN_FLY)) - return false; + bool isClientControlled = IsClientControlled(); - if (enable) + if (!isClientControlled) { - AddUnitMovementFlag(MOVEMENTFLAG_CAN_FLY); - RemoveUnitMovementFlag(MOVEMENTFLAG_FALLING); - } - else - { - RemoveUnitMovementFlag(MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_MASK_MOVING_FLY); + if (enable) + m_movementInfo.AddMovementFlag(MOVEMENTFLAG_CAN_FLY); + else + m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_CAN_FLY); } - return true; + if (!IsInWorld()) // is sent on add to map + return; + + if (isClientControlled) + { + if (Player const* player = GetClientControlling()) + { + auto const counter = player->GetSession()->GetOrderCounter(); + + WorldPacket data(enable ? SMSG_MOVE_SET_CAN_FLY : SMSG_MOVE_UNSET_CAN_FLY, GetPackGUID().size() + 4); + data << GetPackGUID(); + data << counter; + player->GetSession()->SendPacket(&data); + player->GetSession()->IncrementOrderCounter(); + return; + } + } + + WorldPacket data(enable ? SMSG_SPLINE_MOVE_SET_FLYING : SMSG_SPLINE_MOVE_UNSET_FLYING, 9); + data << GetPackGUID(); + SendMessageToSet(&data, true); } -/** - * @brief Allow to walk on water. Doesn't inform the client. - * Need to use SendMovementWaterWalking() if it's for players. - */ -bool Unit::SetWaterWalking(bool enable, bool /*packetOnly = false*/) +void Unit::SetFeatherFall(bool enable) { - if (enable == HasUnitMovementFlag(MOVEMENTFLAG_WATERWALKING)) - return false; + bool isClientControlled = IsClientControlled(); + + if (!isClientControlled) + { + if (enable) + m_movementInfo.AddMovementFlag(MOVEMENTFLAG_FALLING_SLOW); + else + m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_FALLING_SLOW); + } + + if (!IsInWorld()) // is sent on add to map + return; + + if (isClientControlled) + { + if (Player const* player = GetClientControlling()) + { + auto const counter = player->GetSession()->GetOrderCounter(); + + WorldPacket data(enable ? SMSG_MOVE_FEATHER_FALL : SMSG_MOVE_NORMAL_FALL, GetPackGUID().size() + 4); + + data << GetPackGUID(); + data << counter; + player->GetSession()->SendPacket(&data); + player->GetSession()->IncrementOrderCounter(); + + // start fall from current height + if (!enable) + const_cast(player)->SetFallInformation(0, GetPositionZ()); + + return; + } + } + + WorldPacket data(enable ? SMSG_SPLINE_MOVE_FEATHER_FALL : SMSG_SPLINE_MOVE_NORMAL_FALL); + data << GetPackGUID(); + SendMessageToSet(&data, true); +} + +void Unit::SetHover(bool enable) +{ + bool isClientControlled = IsClientControlled(); + + if (!isClientControlled) + { + if (enable) + m_movementInfo.AddMovementFlag(MOVEMENTFLAG_HOVER); + else + m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_HOVER); + } + + float hoverHeight = GetHoverHeight(); if (enable) - AddUnitMovementFlag(MOVEMENTFLAG_WATERWALKING); + { + if (hoverHeight && GetPositionZ() - GetMap()->GetHeight(GetPhaseMask(), GetPositionX(), GetPositionY(), GetPositionZ()) < hoverHeight) + Relocate(GetPositionX(), GetPositionY(), GetPositionZ() + hoverHeight); + } else - RemoveUnitMovementFlag(MOVEMENTFLAG_WATERWALKING); + { + if (IsAlive() || !IsUnit()) + { + float newZ = std::max(GetMap()->GetHeight(GetPhaseMask(), GetPositionX(), GetPositionY(), GetPositionZ()), GetPositionZ() - hoverHeight); + UpdateAllowedPositionZ(GetPositionX(), GetPositionY(), newZ); + Relocate(GetPositionX(), GetPositionY(), newZ); + } + } - return true; + if (!IsInWorld()) // is sent on add to map + return; + + if (isClientControlled) + { + if (Player const* player = GetClientControlling()) + { + WorldPacket data(enable ? SMSG_MOVE_SET_HOVER : SMSG_MOVE_UNSET_HOVER, GetPackGUID().size() + 4); + + auto const counter = player->GetSession()->GetOrderCounter(); + + data << GetPackGUID(); + data << counter; + player->GetSession()->SendPacket(&data); + player->GetSession()->IncrementOrderCounter(); + return; + } + } + + WorldPacket data(enable ? SMSG_SPLINE_MOVE_SET_HOVER : SMSG_SPLINE_MOVE_UNSET_HOVER, 9); + data << GetPackGUID(); + SendMessageToSet(&data, true); +} + +void Unit::SetWaterWalking(bool enable) +{ + bool isClientControlled = IsClientControlled(); + + if (!isClientControlled) + { + if (enable) + m_movementInfo.AddMovementFlag(MOVEMENTFLAG_WATERWALKING); + else + m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_WATERWALKING); + } + + if (!IsInWorld()) // is sent on add to map + return; + + if (isClientControlled) + { + if (Player const* player = GetClientControlling()) + { + auto const counter = player->GetSession()->GetOrderCounter(); + + WorldPacket data(enable ? SMSG_MOVE_WATER_WALK : SMSG_MOVE_LAND_WALK, GetPackGUID().size() + 4); + data << GetPackGUID(); + data << counter; + player->GetSession()->SendPacket(&data); + player->GetSession()->IncrementOrderCounter(); + return; + } + } + + WorldPacket data(enable ? SMSG_SPLINE_MOVE_WATER_WALK : SMSG_SPLINE_MOVE_LAND_WALK, 9); + data << GetPackGUID(); + SendMessageToSet(&data, true); } void Unit::SendMovementWaterWalking(Player* sendTo) @@ -20508,19 +20645,6 @@ void Unit::SendMovementWaterWalking(Player* sendTo) sendTo->SendDirectMessage(&data); } -bool Unit::SetFeatherFall(bool enable, bool /*packetOnly = false*/) -{ - if (enable == HasUnitMovementFlag(MOVEMENTFLAG_FALLING_SLOW)) - return false; - - if (enable) - AddUnitMovementFlag(MOVEMENTFLAG_FALLING_SLOW); - else - RemoveUnitMovementFlag(MOVEMENTFLAG_FALLING_SLOW); - - return true; -} - void Unit::SendMovementFeatherFall(Player* sendTo) { if (!movespline->Initialized()) @@ -20530,34 +20654,6 @@ void Unit::SendMovementFeatherFall(Player* sendTo) sendTo->SendDirectMessage(&data); } -bool Unit::SetHover(bool enable, bool /*packetOnly = false*/, bool /*updateAnimationTier = true*/) -{ - if (enable == HasUnitMovementFlag(MOVEMENTFLAG_HOVER)) - return false; - - float hoverHeight = GetFloatValue(UNIT_FIELD_HOVERHEIGHT); - - if (enable) - { - AddUnitMovementFlag(MOVEMENTFLAG_HOVER); - if (hoverHeight && GetPositionZ() - GetFloorZ() < hoverHeight) - UpdateHeight(GetPositionZ() + hoverHeight); - } - else - { - RemoveUnitMovementFlag(MOVEMENTFLAG_HOVER); - if (hoverHeight && (!isDying() || !IsCreature())) - { - float newZ = std::max(GetFloorZ(), GetPositionZ() - hoverHeight); - UpdateAllowedPositionZ(GetPositionX(), GetPositionY(), newZ); - UpdateHeight(newZ); - } - SendMovementFlagUpdate(); // pussywizard: needed for falling after death (instead of falling onto air at hover height) - } - - return true; -} - void Unit::SendMovementHover(Player* sendTo) { if (!movespline->Initialized()) @@ -21203,3 +21299,58 @@ std::string Unit::GetDebugInfo() const << " Class: " << std::to_string(getClass()); return sstr.str(); } + +bool Unit::IsClientControlled(Player const* exactClient /*= nullptr*/) const +{ + // Severvide method to check if unit is client controlled (optionally check for specific client in control) + + // Applies only to player controlled units + if (!HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED)) + return false; + + // These flags are meant to be used when server controls this unit, client control is taken away + if (HasFlag(UNIT_FIELD_FLAGS, (UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_CONFUSED | UNIT_FLAG_FLEEING))) + return false; + + // If unit is possessed, it has lost original control... + if (ObjectGuid const& guid = GetCharmerGUID()) + { + // ... but if it is a possessing charm, then we have to check if some other player controls it + if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_POSSESSED) && guid.IsPlayer()) + return (exactClient ? (exactClient->GetGUID() == guid) : true); + return false; + } + + // By default: players have client control over themselves + if (IsPlayer()) + return (exactClient ? (exactClient == this) : true); + return false; +} + +Player const* Unit::GetClientControlling() const +{ + // Serverside reverse "mover" deduction logic at controlled unit + + // Applies only to player controlled units + if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_PLAYER_CONTROLLED)) + { + // Charm always removes control from original client... + if (GetCharmerGUID()) + { + // ... but if it is a possessing charm, some other client may have control + if (HasFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_POSSESSED)) + { + Unit const* charmer = GetCharmer(); + if (charmer && charmer->IsPlayer()) + return static_cast(charmer); + } + } + else if (IsPlayer()) + { + // Check if anything prevents original client from controlling + if (IsClientControlled(static_cast(this))) + return static_cast(this); + } + } + return nullptr; +} diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 8f847210c..1e8b5fd2e 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -744,6 +744,7 @@ public: void SetExtraUnitMovementFlags(uint16 f) { m_movementInfo.flags2 = f; } inline bool IsCrowdControlled() const { return HasFlag(UNIT_FIELD_FLAGS, (UNIT_FLAG_CONFUSED | UNIT_FLAG_FLEEING | UNIT_FLAG_STUNNED)); } + inline bool IsImmobilizedState() const { return HasUnitState(UNIT_STATE_ROOT | UNIT_STATE_STUNNED); } /*********************************************************/ /*** UNIT TYPES, CLASSES, RACES... ***/ @@ -826,6 +827,11 @@ public: bool IsValidAssistTarget(Unit const* target) const; bool _IsValidAssistTarget(Unit const* target, SpellInfo const* bySpell) const; + // Client controlled: check if unit currently is under client control (has active "mover"), optionally check for specific client (server-side) + bool IsClientControlled(Player const* exactClient = nullptr) const; + // Controlling client: server PoV on which client (player) controls movement of the unit at the moment, obtain "mover" (server-side) + Player const* GetClientControlling() const; + // Combat range [[nodiscard]] float GetBoundaryRadius() const { return m_floatValues[UNIT_FIELD_BOUNDINGRADIUS]; } [[nodiscard]] float GetCombatReach() const override { return m_floatValues[UNIT_FIELD_COMBATREACH]; } @@ -1676,10 +1682,10 @@ public: virtual bool SetWalk(bool enable); virtual bool SetDisableGravity(bool disable, bool packetOnly = false, bool updateAnimationTier = true); virtual bool SetSwim(bool enable); - virtual bool SetCanFly(bool enable, bool packetOnly = false); - virtual bool SetWaterWalking(bool enable, bool packetOnly = false); - virtual bool SetFeatherFall(bool enable, bool packetOnly = false); - virtual bool SetHover(bool enable, bool packetOnly = false, bool updateAnimationTier = true); + void SetCanFly(bool enable); + void SetWaterWalking(bool enable); + void SetFeatherFall(bool enable); + void SetHover(bool enable); MotionMaster* GetMotionMaster() { return i_motionMaster; } [[nodiscard]] const MotionMaster* GetMotionMaster() const { return i_motionMaster; } @@ -1706,6 +1712,7 @@ public: [[nodiscard]] uint8 getStandState() const { return GetByteValue(UNIT_FIELD_BYTES_1, 0); } [[nodiscard]] bool IsSitState() const; [[nodiscard]] bool IsStandState() const; + [[nodiscard]] bool IsStandUpOnMovementState() const; void SetStandState(uint8 state); void SetStandFlags(uint8 flags) { SetByteFlag(UNIT_FIELD_BYTES_1, UNIT_BYTES_1_OFFSET_VIS_FLAG, flags); } @@ -2129,8 +2136,6 @@ protected: bool m_applyResilience; bool _instantCast; - uint32 m_rootTimes; - private: bool IsTriggeredAtSpellProcEvent(Unit* victim, Aura* aura, WeaponAttackType attType, bool isVictim, bool active, SpellProcEventEntry const*& spellProcEvent, ProcEventInfo const& eventInfo); bool HandleDummyAuraProc(Unit* victim, uint32 damage, AuraEffect* triggeredByAura, SpellInfo const* procSpell, uint32 procFlag, uint32 procEx, uint32 cooldown, ProcEventInfo const& eventInfo); diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h index e6885fe16..dfa371ca4 100644 --- a/src/server/game/Entities/Unit/UnitDefines.h +++ b/src/server/game/Entities/Unit/UnitDefines.h @@ -412,6 +412,8 @@ enum MovementFlags MOVEMENTFLAG_MASK_PLAYER_ONLY = MOVEMENTFLAG_FLYING, + MOVEMENTFLAG_MASK_MOVING_OR_TURN = MOVEMENTFLAG_MASK_MOVING | MOVEMENTFLAG_MASK_TURNING, + /// Movement flags that have change status opcodes associated for players MOVEMENTFLAG_MASK_HAS_PLAYER_STATUS_OPCODE = MOVEMENTFLAG_DISABLE_GRAVITY | MOVEMENTFLAG_ROOT | MOVEMENTFLAG_CAN_FLY | MOVEMENTFLAG_WATERWALKING | MOVEMENTFLAG_FALLING_SLOW | MOVEMENTFLAG_HOVER diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 942eae9c5..64673eb3e 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -949,12 +949,6 @@ void WorldSession::HandleNextCinematicCamera(WorldPacket& /*recv_data*/) GetPlayer()->GetCinematicMgr()->BeginCinematic(); } -void WorldSession::HandleFeatherFallAck(WorldPacket& recv_data) -{ - // no used - recv_data.rfinish(); // prevent warnings spam -} - void WorldSession::HandleSetActionBarToggles(WorldPacket& recv_data) { uint8 ActionBar; @@ -1519,12 +1513,13 @@ void WorldSession::HandleCancelMountAuraOpcode(WorldPacket& /*recv_data*/) _player->RemoveAurasByType(SPELL_AURA_MOUNTED); } -void WorldSession::HandleMoveSetCanFlyAckOpcode(WorldPacket& recv_data) +void WorldSession::HandleMoveFlagChangeOpcode(WorldPacket& recv_data) { - // fly mode on/off - LOG_DEBUG("network", "WORLD: CMSG_MOVE_SET_CAN_FLY_ACK"); + LOG_DEBUG("network", "WORLD: {}", GetOpcodeNameForLogging((Opcodes)recv_data.GetOpcode())); ObjectGuid guid; + uint32 counter; + uint32 isApplied; recv_data >> guid.ReadAsPacked(); if (!_player) @@ -1533,17 +1528,42 @@ void WorldSession::HandleMoveSetCanFlyAckOpcode(WorldPacket& recv_data) return; } - recv_data.read_skip(); // unk + recv_data >> counter; MovementInfo movementInfo; movementInfo.guid = guid; ReadMovementInfo(recv_data, &movementInfo); - recv_data.read_skip(); // unk2 + recv_data >> isApplied; sScriptMgr->AnticheatSetCanFlybyServer(_player, movementInfo.HasMovementFlag(MOVEMENTFLAG_CAN_FLY)); - _player->m_mover->m_movementInfo.flags = movementInfo.GetMovementFlags(); + Unit* mover = _player->m_mover; + Player* plrMover = mover->ToPlayer(); + + mover->m_movementInfo.flags = movementInfo.GetMovementFlags(); + + Opcodes response; + + switch (recv_data.GetOpcode()) + { + case CMSG_MOVE_HOVER_ACK: response = MSG_MOVE_HOVER; break; + case CMSG_MOVE_FEATHER_FALL_ACK: response = MSG_MOVE_FEATHER_FALL; break; + case CMSG_MOVE_WATER_WALK_ACK: response = MSG_MOVE_WATER_WALK; break; + case CMSG_MOVE_SET_CAN_FLY_ACK: response = MSG_MOVE_UPDATE_CAN_FLY; break; + default: return; + } + + if (!ProcessMovementInfo(movementInfo, mover, plrMover, recv_data)) + { + recv_data.rfinish(); // prevent warnings spam + return; + } + + WorldPacket data(response, 8); + data << guid.WriteAsPacked(); + WriteMovementInfo(&data, &movementInfo); + _player->m_mover->SendMessageToSet(&data, _player); } void WorldSession::HandleRequestPetInfo(WorldPackets::Pet::RequestPetInfo& /*packet*/) diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 77b5bb43b..443ac946c 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -370,82 +370,44 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData) movementInfo.guid = guid; ReadMovementInfo(recvData, &movementInfo); - // Stop emote on move - if (Player* plrMover = mover->ToPlayer()) - { - if (plrMover->GetUInt32Value(UNIT_NPC_EMOTESTATE) != EMOTE_ONESHOT_NONE && movementInfo.HasMovementFlag(MOVEMENTFLAG_MASK_MOVING)) - { - plrMover->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); - } - } - - if (!movementInfo.pos.IsPositionValid()) - { - if (plrMover) - { - sScriptMgr->AnticheatUpdateMovementInfo(plrMover, movementInfo); - } - - recvData.rfinish(); // prevent warnings spam - return; - } - - if (!mover->movespline->Finalized()) + if (!ProcessMovementInfo(movementInfo, mover, plrMover, recvData)) { recvData.rfinish(); // prevent warnings spam return; } - // Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE - if (mover->HasUnitFlag(UNIT_FLAG_DISABLE_MOVE)) - { - // Xinef: skip moving packets - if (movementInfo.HasMovementFlag(MOVEMENTFLAG_MASK_MOVING)) - { - if (plrMover) - { - sScriptMgr->AnticheatUpdateMovementInfo(plrMover, movementInfo); - } - return; - } - movementInfo.pos.Relocate(mover->GetPositionX(), mover->GetPositionY(), mover->GetPositionZ()); + /* process position-change */ + WorldPacket data(opcode, recvData.size()); + movementInfo.guid = mover->GetGUID(); + WriteMovementInfo(&data, &movementInfo); + mover->SendMessageToSet(&data, _player); +} - if (mover->IsCreature()) - { - movementInfo.transport.guid = mover->m_movementInfo.transport.guid; - movementInfo.transport.pos.Relocate(mover->m_movementInfo.transport.pos.GetPositionX(), mover->m_movementInfo.transport.pos.GetPositionY(), mover->m_movementInfo.transport.pos.GetPositionZ()); - movementInfo.transport.seat = mover->m_movementInfo.transport.seat; - } +void WorldSession::SynchronizeMovement(MovementInfo& movementInfo) +{ + int64 movementTime = (int64)movementInfo.time + _timeSyncClockDelta; + if (_timeSyncClockDelta == 0 || movementTime < 0 || movementTime > 0xFFFFFFFF) + { + LOG_INFO("misc", "The computed movement time using clockDelta is erronous. Using fallback instead"); + movementInfo.time = getMSTime(); } - - if (movementInfo.HasMovementFlag(MOVEMENTFLAG_ONTRANSPORT)) + else { - // We were teleported, skip packets that were broadcast before teleport - if (movementInfo.pos.GetExactDist2d(mover) > SIZE_OF_GRIDS) - { - if (plrMover) - { - sScriptMgr->AnticheatUpdateMovementInfo(plrMover, movementInfo); - //LOG_INFO("anticheat", "MovementHandler:: 2 We were teleported, skip packets that were broadcast before teleport"); - } - recvData.rfinish(); // prevent warnings spam - return; - } + movementInfo.time = (uint32)movementTime; + } +} - if (!Acore::IsValidMapCoord(movementInfo.pos.GetPositionX() + movementInfo.transport.pos.GetPositionX(), movementInfo.pos.GetPositionY() + movementInfo.transport.pos.GetPositionY(), - movementInfo.pos.GetPositionZ() + movementInfo.transport.pos.GetPositionZ(), movementInfo.pos.GetOrientation() + movementInfo.transport.pos.GetOrientation())) - { - if (plrMover) - { - sScriptMgr->AnticheatUpdateMovementInfo(plrMover, movementInfo); - } +void WorldSession::HandleMoverRelocation(MovementInfo& movementInfo, Unit* mover) +{ + SynchronizeMovement(movementInfo); - recvData.rfinish(); // prevent warnings spam - return; - } + mover->UpdatePosition(movementInfo.pos); + mover->m_movementInfo = movementInfo; + if (mover->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_ONTRANSPORT)) + { // if we boarded a transport, add us to it - if (plrMover) + if (Player* plrMover = mover->ToPlayer()) { if (!plrMover->GetTransport()) { @@ -483,13 +445,155 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData) } } } - else if (plrMover && plrMover->GetTransport()) // if we were on a transport, leave + else if (mover->IsPlayer()) { - sScriptMgr->AnticheatSetUnderACKmount(plrMover); // just for safe + if (Player* plrMover = mover->ToPlayer()) + { + if (plrMover->GetTransport()) // if we were on a transport, leave + { + sScriptMgr->AnticheatSetUnderACKmount(plrMover); // just for safe - plrMover->m_transport->RemovePassenger(plrMover); - plrMover->m_transport = nullptr; - movementInfo.transport.Reset(); + plrMover->m_transport->RemovePassenger(plrMover); + plrMover->m_transport = nullptr; + movementInfo.transport.Reset(); + } + } + } + + // Some vehicles allow the passenger to turn by himself + if (Vehicle* vehicle = mover->GetVehicle()) + { + if (VehicleSeatEntry const* seat = vehicle->GetSeatForPassenger(mover)) + { + if (seat->m_flags & VEHICLE_SEAT_FLAG_ALLOW_TURNING && movementInfo.pos.GetOrientation() != mover->GetOrientation()) + { + mover->SetOrientation(movementInfo.pos.GetOrientation()); + mover->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TURNING); + } + } + } + + if (Player* plrMover = mover->ToPlayer()) // nothing is charmed, or player charmed + { + if (plrMover->IsSitState() && (movementInfo.flags & (MOVEMENTFLAG_MASK_MOVING | MOVEMENTFLAG_MASK_TURNING))) + plrMover->SetStandState(UNIT_STAND_STATE_STAND); + + if (movementInfo.pos.GetPositionZ() < plrMover->GetMap()->GetMinHeight(movementInfo.pos.GetPositionX(), movementInfo.pos.GetPositionY())) + { + if (!plrMover->GetBattleground() || !plrMover->GetBattleground()->HandlePlayerUnderMap(_player)) + { + if (plrMover->IsAlive()) + { + plrMover->SetPlayerFlag(PLAYER_FLAGS_IS_OUT_OF_BOUNDS); + plrMover->EnvironmentalDamage(DAMAGE_FALL_TO_VOID, GetPlayer()->GetMaxHealth()); + // player can be alive if GM + if (plrMover->IsAlive()) + plrMover->KillPlayer(); + } + else if (!plrMover->HasPlayerFlag(PLAYER_FLAGS_IS_OUT_OF_BOUNDS)) + { + GraveyardStruct const* grave = sGraveyard->GetClosestGraveyard(plrMover, plrMover->GetTeamId()); + if (grave) + { + plrMover->TeleportTo(grave->Map, grave->x, grave->y, grave->z, plrMover->GetOrientation()); + plrMover->Relocate(grave->x, grave->y, grave->z, plrMover->GetOrientation()); + } + } + } + } + } +} + +bool WorldSession::VerifyMovementInfo(MovementInfo const& movementInfo, Player* plrMover, Unit* mover, Opcodes opcode) const +{ + if (!movementInfo.pos.IsPositionValid()) + { + if (plrMover) + { + sScriptMgr->AnticheatUpdateMovementInfo(plrMover, movementInfo); + } + + return false; + } + + if (!mover->movespline->Finalized()) + return false; + + // Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE + if (mover->HasUnitFlag(UNIT_FLAG_DISABLE_MOVE)) + { + // Xinef: skip moving packets + if (movementInfo.HasMovementFlag(MOVEMENTFLAG_MASK_MOVING)) + { + if (plrMover) + { + sScriptMgr->AnticheatUpdateMovementInfo(plrMover, movementInfo); + } + return false; + } + } + + bool jumpopcode = false; + if (opcode == MSG_MOVE_JUMP) + { + jumpopcode = true; + if (plrMover && !sScriptMgr->AnticheatHandleDoubleJump(plrMover, mover)) + { + plrMover->GetSession()->KickPlayer(); + return false; + } + } + + /* start some hack detection */ + if (plrMover && !sScriptMgr->AnticheatCheckMovementInfo(plrMover, movementInfo, mover, jumpopcode)) + { + plrMover->GetSession()->KickPlayer(); + return false; + } + + if (movementInfo.HasMovementFlag(MOVEMENTFLAG_ONTRANSPORT)) + { + // We were teleported, skip packets that were broadcast before teleport + if (movementInfo.pos.GetExactDist2d(mover) > SIZE_OF_GRIDS) + { + if (plrMover) + { + sScriptMgr->AnticheatUpdateMovementInfo(plrMover, movementInfo); + //LOG_INFO("anticheat", "MovementHandler:: 2 We were teleported, skip packets that were broadcast before teleport"); + } + return false; + } + + if (!Acore::IsValidMapCoord(movementInfo.pos.GetPositionX() + movementInfo.transport.pos.GetPositionX(), movementInfo.pos.GetPositionY() + movementInfo.transport.pos.GetPositionY(), + movementInfo.pos.GetPositionZ() + movementInfo.transport.pos.GetPositionZ(), movementInfo.pos.GetOrientation() + movementInfo.transport.pos.GetOrientation())) + { + if (plrMover) + { + sScriptMgr->AnticheatUpdateMovementInfo(plrMover, movementInfo); + } + + return false; + } + } + return true; +} + +bool WorldSession::ProcessMovementInfo(MovementInfo& movementInfo, Unit* mover, Player* plrMover, WorldPacket& recvData) +{ + Opcodes opcode = (Opcodes)recvData.GetOpcode(); + if (!VerifyMovementInfo(movementInfo, plrMover, mover, opcode)) + return false; + + if (mover->HasUnitFlag(UNIT_FLAG_DISABLE_MOVE)) + { + movementInfo.pos.Relocate(mover->GetPositionX(), mover->GetPositionY(), mover->GetPositionZ()); + + if (mover->IsCreature()) + { + movementInfo.transport.guid = mover->m_movementInfo.transport.guid; + movementInfo.transport.pos.Relocate(mover->m_movementInfo.transport.pos.GetPositionX(), mover->m_movementInfo.transport.pos.GetPositionY(), mover->m_movementInfo.transport.pos.GetPositionZ()); + movementInfo.transport.seat = mover->m_movementInfo.transport.seat; + } } // fall damage generation (ignore in flight case that can be triggered also at lags in moment teleportation to another map). @@ -523,89 +627,19 @@ void WorldSession::HandleMovementOpcodes(WorldPacket& recvData) sScriptMgr->OnPlayerMove(plrMover, movementInfo, opcode); } - bool jumpopcode = false; - if (opcode == MSG_MOVE_JUMP) + if (movementInfo.GetMovementFlags() & MOVEMENTFLAG_MASK_MOVING_OR_TURN) { - jumpopcode = true; - if (plrMover && !sScriptMgr->AnticheatHandleDoubleJump(plrMover, mover)) - { - plrMover->GetSession()->KickPlayer(); - return; - } + if (mover->IsStandState()) + mover->SetStandState(UNIT_STAND_STATE_STAND); + mover->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); } - /* start some hack detection */ - if (plrMover && !sScriptMgr->AnticheatCheckMovementInfo(plrMover, movementInfo, mover, jumpopcode)) - { - plrMover->GetSession()->KickPlayer(); - return; - } - - /* process position-change */ - WorldPacket data(opcode, recvData.size()); - int64 movementTime = (int64)movementInfo.time + _timeSyncClockDelta; - if (_timeSyncClockDelta == 0 || movementTime < 0 || movementTime > 0xFFFFFFFF) - { - LOG_INFO("misc", "The computed movement time using clockDelta is erronous. Using fallback instead"); - movementInfo.time = getMSTime(); - } - else - { - movementInfo.time = (uint32) movementTime; - } - - movementInfo.guid = mover->GetGUID(); - WriteMovementInfo(&data, &movementInfo); - mover->SendMessageToSet(&data, _player); - - mover->m_movementInfo = movementInfo; - - // Some vehicles allow the passenger to turn by himself - if (Vehicle* vehicle = mover->GetVehicle()) - { - if (VehicleSeatEntry const* seat = vehicle->GetSeatForPassenger(mover)) - { - if (seat->m_flags & VEHICLE_SEAT_FLAG_ALLOW_TURNING && movementInfo.pos.GetOrientation() != mover->GetOrientation()) - { - mover->SetOrientation(movementInfo.pos.GetOrientation()); - mover->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TURNING); - } - } - - return; - } - - mover->UpdatePosition(movementInfo.pos); - - if (plrMover) // nothing is charmed, or player charmed - { - if (plrMover->IsSitState() && (movementInfo.flags & (MOVEMENTFLAG_MASK_MOVING | MOVEMENTFLAG_MASK_TURNING))) - plrMover->SetStandState(UNIT_STAND_STATE_STAND); + HandleMoverRelocation(movementInfo, mover); + if (plrMover && opcode != CMSG_MOVE_KNOCK_BACK_ACK) plrMover->UpdateFallInformationIfNeed(movementInfo, opcode); - if (movementInfo.pos.GetPositionZ() < plrMover->GetMap()->GetMinHeight(movementInfo.pos.GetPositionX(), movementInfo.pos.GetPositionY())) - if (!plrMover->GetBattleground() || !plrMover->GetBattleground()->HandlePlayerUnderMap(_player)) - { - if (plrMover->IsAlive()) - { - plrMover->SetPlayerFlag(PLAYER_FLAGS_IS_OUT_OF_BOUNDS); - plrMover->EnvironmentalDamage(DAMAGE_FALL_TO_VOID, GetPlayer()->GetMaxHealth()); - // player can be alive if GM - if (plrMover->IsAlive()) - plrMover->KillPlayer(); - } - else if (!plrMover->HasPlayerFlag(PLAYER_FLAGS_IS_OUT_OF_BOUNDS)) - { - GraveyardStruct const* grave = sGraveyard->GetClosestGraveyard(plrMover, plrMover->GetTeamId()); - if (grave) - { - plrMover->TeleportTo(grave->Map, grave->x, grave->y, grave->z, plrMover->GetOrientation()); - plrMover->Relocate(grave->x, grave->y, grave->z, plrMover->GetOrientation()); - } - } - } - } + return true; } void WorldSession::HandleForceSpeedChangeAck(WorldPacket& recvData) @@ -762,11 +796,13 @@ void WorldSession::HandleMoveKnockBackAck(WorldPacket& recvData) { LOG_DEBUG("network", "CMSG_MOVE_KNOCK_BACK_ACK"); + Unit* mover = _player->m_mover; + ObjectGuid guid; recvData >> guid.ReadAsPacked(); // pussywizard: typical check for incomming movement packets - if (!_player->m_mover || !_player->m_mover->IsInWorld() || _player->m_mover->IsDuringRemoveFromWorld() || guid != _player->m_mover->GetGUID()) + if (!mover || !mover->IsInWorld() || mover->IsDuringRemoveFromWorld() || guid != mover->GetGUID()) { recvData.rfinish(); // prevent warnings spam return; @@ -778,7 +814,10 @@ void WorldSession::HandleMoveKnockBackAck(WorldPacket& recvData) movementInfo.guid = guid; ReadMovementInfo(recvData, &movementInfo); - _player->m_mover->m_movementInfo = movementInfo; + mover->m_movementInfo = movementInfo; + + if (mover->IsPlayer() && static_cast(mover)->IsFreeFlying()) + mover->SetCanFly(true); WorldPacket data(MSG_MOVE_KNOCK_BACK, 66); data << guid.WriteAsPacked(); @@ -793,38 +832,6 @@ void WorldSession::HandleMoveKnockBackAck(WorldPacket& recvData) _player->SendMessageToSet(&data, false); } -void WorldSession::HandleMoveHoverAck(WorldPacket& recvData) -{ - LOG_DEBUG("network", "CMSG_MOVE_HOVER_ACK"); - - ObjectGuid guid; - recvData >> guid.ReadAsPacked(); - - recvData.read_skip(); // unk - - MovementInfo movementInfo; - movementInfo.guid = guid; - ReadMovementInfo(recvData, &movementInfo); - - recvData.read_skip(); // unk2 -} - -void WorldSession::HandleMoveWaterWalkAck(WorldPacket& recvData) -{ - LOG_DEBUG("network", "CMSG_MOVE_WATER_WALK_ACK"); - - ObjectGuid guid; - recvData >> guid.ReadAsPacked(); - - recvData.read_skip(); // unk - - MovementInfo movementInfo; - movementInfo.guid = guid; - ReadMovementInfo(recvData, &movementInfo); - - recvData.read_skip(); // unk2 -} - void WorldSession::HandleSummonResponseOpcode(WorldPacket& recvData) { if (!_player->IsAlive() || _player->IsInCombat()) diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index bc12f7764..11b0a9005 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -374,7 +374,7 @@ void OpcodeTable::Initialize() /*0x0F3*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_NORMAL_FALL, STATUS_NEVER); /*0x0F4*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_HOVER, STATUS_NEVER); /*0x0F5*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_HOVER, STATUS_NEVER); - /*0x0F6*/ DEFINE_HANDLER(CMSG_MOVE_HOVER_ACK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMoveHoverAck ); + /*0x0F6*/ DEFINE_HANDLER(CMSG_MOVE_HOVER_ACK, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleMoveFlagChangeOpcode ); /*0x0F7*/ DEFINE_SERVER_OPCODE_HANDLER(MSG_MOVE_HOVER, STATUS_NEVER); /*0x0F8*/ DEFINE_HANDLER(CMSG_TRIGGER_CINEMATIC_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); /*0x0F9*/ DEFINE_HANDLER(CMSG_OPENING_CINEMATIC, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); @@ -847,8 +847,8 @@ void OpcodeTable::Initialize() /*0x2CC*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_RAID_INSTANCE_INFO, STATUS_NEVER); /*0x2CD*/ DEFINE_HANDLER(CMSG_REQUEST_RAID_INFO, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleRequestRaidInfoOpcode ); /*0x2CE*/ DEFINE_HANDLER(CMSG_MOVE_TIME_SKIPPED, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveTimeSkippedOpcode ); - /*0x2CF*/ DEFINE_HANDLER(CMSG_MOVE_FEATHER_FALL_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleFeatherFallAck ); - /*0x2D0*/ DEFINE_HANDLER(CMSG_MOVE_WATER_WALK_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveWaterWalkAck ); + /*0x2CF*/ DEFINE_HANDLER(CMSG_MOVE_FEATHER_FALL_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveFlagChangeOpcode ); + /*0x2D0*/ DEFINE_HANDLER(CMSG_MOVE_WATER_WALK_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveFlagChangeOpcode ); /*0x2D1*/ DEFINE_HANDLER(CMSG_MOVE_NOT_ACTIVE_MOVER, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveNotActiveMover ); /*0x2D2*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_PLAY_SOUND, STATUS_NEVER); /*0x2D3*/ DEFINE_HANDLER(CMSG_BATTLEFIELD_STATUS, STATUS_LOGGEDIN, PROCESS_THREADUNSAFE, &WorldSession::HandleBattlefieldStatusOpcode ); @@ -965,7 +965,7 @@ void OpcodeTable::Initialize() /*0x342*/ DEFINE_HANDLER(MSG_MOVE_STOP_SWIM_CHEAT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); /*0x343*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_SET_CAN_FLY, STATUS_NEVER); /*0x344*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_MOVE_UNSET_CAN_FLY, STATUS_NEVER); - /*0x345*/ DEFINE_HANDLER(CMSG_MOVE_SET_CAN_FLY_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveSetCanFlyAckOpcode ); + /*0x345*/ DEFINE_HANDLER(CMSG_MOVE_SET_CAN_FLY_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveFlagChangeOpcode ); /*0x346*/ DEFINE_HANDLER(CMSG_MOVE_SET_FLY, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes ); /*0x347*/ DEFINE_HANDLER(CMSG_SOCKET_GEMS, STATUS_LOGGEDIN, PROCESS_INPLACE, &WorldSession::HandleSocketOpcode ); /*0x348*/ DEFINE_HANDLER(CMSG_ARENA_TEAM_CREATE, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); diff --git a/src/server/game/Server/WorldSession.cpp b/src/server/game/Server/WorldSession.cpp index c8d336fe5..412d1a9f6 100644 --- a/src/server/game/Server/WorldSession.cpp +++ b/src/server/game/Server/WorldSession.cpp @@ -136,7 +136,8 @@ WorldSession::WorldSession(uint32 id, std::string&& name, uint32 accountFlags, s _addonMessageReceiveCount(0), _timeSyncClockDeltaQueue(6), _timeSyncClockDelta(0), - _pendingTimeSyncRequests() + _pendingTimeSyncRequests(), + _orderCounter(0) { memset(m_Tutorials, 0, sizeof(m_Tutorials)); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index c5fa3c8ae..8f0a8fd59 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -379,6 +379,10 @@ public: void ReadMovementInfo(WorldPacket& data, MovementInfo* mi); void WriteMovementInfo(WorldPacket* data, MovementInfo* mi); + void SynchronizeMovement(MovementInfo& movementInfo); + void HandleMoverRelocation(MovementInfo& movementInfo, Unit* mover); + bool VerifyMovementInfo(MovementInfo const& movementInfo, Player* plrMover, Unit* mover, Opcodes opcode) const; + bool ProcessMovementInfo(MovementInfo& movementInfo, Unit* mover, Player* plrMover, WorldPacket& recvData); void SendPacket(WorldPacket const* packet); void SendPetNameInvalid(uint32 error, std::string const& name, DeclinedName* declinedName); @@ -582,6 +586,10 @@ public: // Time Synchronisation void ResetTimeSync(); void SendTimeSync(); + + // Movement packet order + uint32 GetOrderCounter() const { return _orderCounter; } + void IncrementOrderCounter() { ++_orderCounter; } public: // opcodes handlers void Handle_NULL(WorldPacket& null); // not used void Handle_EarlyProccess(WorldPacket& recvPacket); // just mark packets processed in WorldSocket::OnRead @@ -620,11 +628,6 @@ public: // opcodes handlers // new party stats void HandleInspectHonorStatsOpcode(WorldPacket& recvPacket); - void HandleMoveWaterWalkAck(WorldPacket& recvPacket); - void HandleFeatherFallAck(WorldPacket& recvData); - - void HandleMoveHoverAck(WorldPacket& recvData); - void HandleMountSpecialAnimOpcode(WorldPacket& recvdata); // character view @@ -969,7 +972,7 @@ public: // opcodes handlers void HandleFarSightOpcode(WorldPacket& recvData); void HandleSetDungeonDifficultyOpcode(WorldPacket& recvData); void HandleSetRaidDifficultyOpcode(WorldPacket& recvData); - void HandleMoveSetCanFlyAckOpcode(WorldPacket& recvData); + void HandleMoveFlagChangeOpcode(WorldPacket& recvData); void HandleSetTitleOpcode(WorldPacket& recvData); void HandleRealmSplitOpcode(WorldPacket& recvData); void HandleTimeSyncResp(WorldPacket& recvData); @@ -1237,6 +1240,8 @@ private: uint32 _timeSyncNextCounter; uint32 _timeSyncTimer; + uint32 _orderCounter; + WorldSession(WorldSession const& right) = delete; WorldSession& operator=(WorldSession const& right) = delete; }; From b28da6e03f92a866ae17ba0315713a941b65d842 Mon Sep 17 00:00:00 2001 From: sogladev Date: Sat, 4 Oct 2025 09:28:14 +0200 Subject: [PATCH 007/140] fix(Scripts/Northrend): quest Sniffing out the Perpetrator (#23076) --- .../rev_1759519474819030750.sql | 44 ++++++ .../scripts/Northrend/zone_storm_peaks.cpp | 142 +++++++++--------- 2 files changed, 116 insertions(+), 70 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1759519474819030750.sql diff --git a/data/sql/updates/pending_db_world/rev_1759519474819030750.sql b/data/sql/updates/pending_db_world/rev_1759519474819030750.sql new file mode 100644 index 000000000..371e8f60c --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1759519474819030750.sql @@ -0,0 +1,44 @@ +-- +SET @PATH := 29677; +DELETE FROM `script_waypoint` WHERE `entry`=@PATH; +INSERT INTO `script_waypoint` (`entry`, `pointid`, `location_x`, `location_y`, `location_z`, `waittime`) VALUES +(@PATH, 0, 7157.85, -749.79016, 891.31964, 0), +(@PATH, 1, 7164.398, -764.5809, 892.379, 0), +(@PATH, 2, 7173.0713, -777.02747, 899.1467, 0), +(@PATH, 3, 7182.944, -781.4821, 904.5898, 0), +(@PATH, 4, 7193.046, -787.17285, 910.80505, 0), +(@PATH, 5, 7205.2866, -793.2994, 917.2018, 0), +(@PATH, 6, 7218.268, -802.1098, 921.5436, 0), +(@PATH, 7, 7230.444, -816.3606, 924.7782, 0), +(@PATH, 8, 7232.167, -834.23175, 926.6067, 0), +(@PATH, 9, 7247.4736, -848.1854, 925.8038, 0), +(@PATH, 10, 7263.3325, -875.33746, 925.0643, 0), +(@PATH, 11, 7275.5557, -895.33954, 926.41693, 0), +(@PATH, 12, 7283.677, -922.1367, 922.6736, 0), +(@PATH, 13, 7284.9517, -947.7603, 918.92914, 0), +(@PATH, 14, 7294.8335, -985.7026, 915.495, 0), +(@PATH, 15, 7310.106, -1018.042, 913.71466, 0), +(@PATH, 16, 7321.158, -1040.3647, 912.26416, 0), +(@PATH, 17, 7341.2275, -1082.5309, 905.9852, 0), +(@PATH, 18, 7355.9634, -1127.9506, 907.5246, 0), +(@PATH, 19, 7359.7407, -1156.9366, 910.2179, 0), +(@PATH, 20, 7352.724, -1172.65, 912.25995, 0), +(@PATH, 21, 7340.049, -1188.0729, 914.70184, 0), +(@PATH, 22, 7330.8037, -1201.4724, 915.6217, 0), +(@PATH, 23, 7323.1274, -1228.3346, 909.4873, 0), +(@PATH, 24, 7316.8394, -1268.2141, 902.8047, 0), +(@PATH, 25, 7316.317, -1300.7645, 904.0472, 0), +(@PATH, 26, 7315.278, -1332.3418, 904.6077, 0), +(@PATH, 27, 7313.0195, -1366.2754, 907.04065, 0), +(@PATH, 28, 7312.0806, -1399.7428, 910.6963, 0), +(@PATH, 29, 7312.83, -1434.0999, 912.7638, 0), +(@PATH, 30, 7311.606, -1466.3434, 916.6626, 0), +(@PATH, 31, 7309.7144, -1498.7023, 921.09863, 0), +(@PATH, 32, 7306.8794, -1531.1903, 928.2958, 0), +(@PATH, 33, 7305.797, -1558.9252, 939.31244, 0), +(@PATH, 34, 7305.19, -1566.0189, 940.9037, 0); + +-- set StandState to sitting +DELETE FROM `creature_template_addon` WHERE (`entry` = 29695); +INSERT INTO `creature_template_addon` (`entry`, `path_id`, `mount`, `bytes1`, `bytes2`, `emote`, `visibilityDistanceType`, `auras`) VALUES +(29695, 0, 0, 1, 0, 0, 0, ''); diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index 35fd65e31..d43a29a5e 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -28,88 +28,90 @@ #include "Vehicle.h" #include "WaypointMgr.h" -enum qSniffing +enum qSniffingOutThePerpetrator { + NPC_FROSTHOUND = 29677, SPELL_SUMMON_PURSUERS_PERIODIC = 54993, SPELL_SNIFFING_CREDIT = 55477, + TALK_EMOTE_FROSTHOUND_SNIFF = 0, + TALK_SEEN = 1, + TALK_CONFRONT = 2, + TALK_EMOTE_TRACKED_COMPLETE = 3, }; -class npc_frosthound : public CreatureScript +struct npc_frosthound : public npc_escortAI { -public: - npc_frosthound() : CreatureScript("npc_frosthound") { } + explicit npc_frosthound(Creature* creature) : npc_escortAI(creature), _summons(creature) {} - struct npc_frosthoundAI : public npc_escortAI + void AttackStart(Unit* /*who*/) override {} + void JustEngagedWith(Unit* /*who*/) override {} + void EnterEvadeMode(EvadeReason /* why */) override {} + void JustDied(Unit* /*killer*/) override { } + void OnCharmed(bool /*apply*/) override { } + + void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override { - npc_frosthoundAI(Creature* creature) : npc_escortAI(creature) {} - - void AttackStart(Unit* /*who*/) override {} - void JustEngagedWith(Unit* /*who*/) override {} - void EnterEvadeMode(EvadeReason /* why */) override {} - - void PassengerBoarded(Unit* who, int8 /*seatId*/, bool apply) override + if (who->IsPlayer()) { - if (who->IsPlayer()) + if (apply) { - if (apply) - { - me->SetFaction(who->GetFaction()); - me->CastSpell(me, SPELL_SUMMON_PURSUERS_PERIODIC, true); - Start(false, true, who->GetGUID()); - } + me->SetFaction(who->GetFaction()); + me->CastSpell(me, SPELL_SUMMON_PURSUERS_PERIODIC, true); + Start(false, true, who->GetGUID()); + Talk(TALK_EMOTE_FROSTHOUND_SNIFF, me); } } - - void JustDied(Unit* /*killer*/) override - { - } - - void OnCharmed(bool /*apply*/) override - { - } - - void UpdateAI(uint32 diff) override - { - npc_escortAI::UpdateAI(diff); - - if (!UpdateVictim()) - return; - } - - void WaypointReached(uint32 waypointId) override - { - Player* player = GetPlayerForEscort(); - if (!player) - return; - - switch (waypointId) - { - case 0: - me->TextEmote("You've been seen! Use the net and Freezing elixir to keep the dwarves away!", nullptr, true); - break; - case 19: - me->TextEmote("The frosthound has located the thief's hiding place. Confront him!", 0, true); - if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit()) - summoner->ToPlayer()->KilledMonsterCredit(29677); - break; - } - } - - void JustSummoned(Creature* cr) override - { - cr->ToTempSummon()->SetTempSummonType(TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT); - cr->ToTempSummon()->InitStats(20000); - if (urand(0, 1)) - cr->GetMotionMaster()->MoveFollow(me, 0.0f, 0.0f); - else if (cr->AI()) - cr->AI()->AttackStart(me); - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_frosthoundAI(creature); } + + void UpdateAI(uint32 diff) override + { + npc_escortAI::UpdateAI(diff); + + if (!UpdateVictim()) + return; + } + + void WaypointReached(uint32 waypointId) override + { + Player* player = GetPlayerForEscort(); + if (!player) + return; + + switch (waypointId) + { + case 0: + Talk(TALK_SEEN, player); + break; + case 34: + Talk(TALK_EMOTE_TRACKED_COMPLETE, me); + Talk(TALK_CONFRONT, player); + if (Unit* summoner = me->ToTempSummon()->GetSummonerUnit()) + summoner->ToPlayer()->KilledMonsterCredit(NPC_FROSTHOUND); + _summons.DespawnAll(); + break; + default: + break; + } + } + + void JustSummoned(Creature* cr) override + { + _summons.Summon(cr); + cr->ToTempSummon()->SetTempSummonType(TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT); + cr->ToTempSummon()->InitStats(20000); + if (urand(0, 1)) + cr->GetMotionMaster()->MoveFollow(me, 0.0f, 0.0f); + else if (cr->AI()) + cr->AI()->AttackStart(me); + } + + void Reset() override + { + _summons.DespawnAll(); + } + +private: + SummonList _summons; }; enum eIronWatcher @@ -1194,7 +1196,7 @@ class spell_feed_stormcrest_eagle : public SpellScript void AddSC_storm_peaks() { - new npc_frosthound(); + RegisterCreatureAI(npc_frosthound); new npc_iron_watcher(); new npc_time_lost_proto_drake(); new npc_wild_wyrm(); From 9012df17d263d489c55814bbc13a8415ae054b8e Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 4 Oct 2025 07:29:16 +0000 Subject: [PATCH 008/140] chore(DB): import pending files Referenced commit(s): b28da6e03f92a866ae17ba0315713a941b65d842 --- .../rev_1759519474819030750.sql => db_world/2025_10_04_02.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1759519474819030750.sql => db_world/2025_10_04_02.sql} (97%) diff --git a/data/sql/updates/pending_db_world/rev_1759519474819030750.sql b/data/sql/updates/db_world/2025_10_04_02.sql similarity index 97% rename from data/sql/updates/pending_db_world/rev_1759519474819030750.sql rename to data/sql/updates/db_world/2025_10_04_02.sql index 371e8f60c..d12c1542b 100644 --- a/data/sql/updates/pending_db_world/rev_1759519474819030750.sql +++ b/data/sql/updates/db_world/2025_10_04_02.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_04_01 -> 2025_10_04_02 -- SET @PATH := 29677; DELETE FROM `script_waypoint` WHERE `entry`=@PATH; From 2fb9c01c200c64f2722397e1a739027e905bcb9a Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 4 Oct 2025 05:03:02 -0300 Subject: [PATCH 009/140] fix(Core/Unit): Fix thorns/retribution aura only dealing damage on white hits (#23041) --- src/server/game/Entities/Unit/Unit.cpp | 102 +++++++++++++------------ src/server/game/Entities/Unit/Unit.h | 1 + 2 files changed, 55 insertions(+), 48 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index ced1d1f47..addcf5b2b 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -866,6 +866,9 @@ uint32 Unit::DealDamage(Unit* attacker, Unit* victim, uint32 damage, CleanDamage // interrupting auras with AURA_INTERRUPT_FLAG_DAMAGE before checking !damage (absorbed damage breaks that type of auras) if (spellProto) { + if (attacker && damagetype != DOT && spellProto->DmgClass == SPELL_DAMAGE_CLASS_MELEE && !(spellProto->GetSchoolMask() & SPELL_SCHOOL_MASK_HOLY)) + attacker->DealDamageShieldDamage(victim); + if (!spellProto->HasAttribute(SPELL_ATTR4_REACTIVE_DAMAGE_PROC)) victim->RemoveAurasWithInterruptFlags(AURA_INTERRUPT_FLAG_TAKE_DAMAGE, spellProto->Id); } @@ -1973,57 +1976,60 @@ void Unit::DealMeleeDamage(CalcDamageInfo* damageInfo, bool durabilityLoss) // Do effect if any damage done to target if (damageInfo->damages[0].damage + damageInfo->damages[1].damage) + DealDamageShieldDamage(victim); +} + +void Unit::DealDamageShieldDamage(Unit* victim) +{ + // We're going to call functions which can modify content of the list during iteration over it's elements + // Let's copy the list so we can prevent iterator invalidation + AuraEffectList vDamageShieldsCopy(victim->GetAuraEffectsByType(SPELL_AURA_DAMAGE_SHIELD)); + for (AuraEffectList::const_iterator dmgShieldItr = vDamageShieldsCopy.begin(); dmgShieldItr != vDamageShieldsCopy.end(); ++dmgShieldItr) { - // We're going to call functions which can modify content of the list during iteration over it's elements - // Let's copy the list so we can prevent iterator invalidation - AuraEffectList vDamageShieldsCopy(victim->GetAuraEffectsByType(SPELL_AURA_DAMAGE_SHIELD)); - for (AuraEffectList::const_iterator dmgShieldItr = vDamageShieldsCopy.begin(); dmgShieldItr != vDamageShieldsCopy.end(); ++dmgShieldItr) + SpellInfo const* i_spellProto = (*dmgShieldItr)->GetSpellInfo(); + // Damage shield can be resisted... + if (SpellMissInfo missInfo = victim->SpellHitResult(this, i_spellProto, false)) { - SpellInfo const* i_spellProto = (*dmgShieldItr)->GetSpellInfo(); - // Damage shield can be resisted... - if (SpellMissInfo missInfo = victim->SpellHitResult(this, i_spellProto, false)) - { - victim->SendSpellMiss(this, i_spellProto->Id, missInfo); - continue; - } - - // ...or immuned - if (IsImmunedToDamageOrSchool(i_spellProto)) - { - victim->SendSpellDamageImmune(this, i_spellProto->Id); - continue; - } - - uint32 damage = uint32(std::max(0, (*dmgShieldItr)->GetAmount())); // xinef: done calculated at amount calculation - - if (Unit* caster = (*dmgShieldItr)->GetCaster()) - { - damage = caster->SpellDamageBonusDone(this, i_spellProto, damage, SPELL_DIRECT_DAMAGE, (*dmgShieldItr)->GetEffIndex()); - damage = this->SpellDamageBonusTaken(caster, i_spellProto, damage, SPELL_DIRECT_DAMAGE); - } - - uint32 absorb = 0; - - DamageInfo dmgInfo(victim, this, damage, i_spellProto, i_spellProto->GetSchoolMask(), SPELL_DIRECT_DAMAGE); - Unit::CalcAbsorbResist(dmgInfo); - absorb = dmgInfo.GetAbsorb(); - damage = dmgInfo.GetDamage(); - - Unit::DealDamageMods(this, damage, &absorb); - - /// @todo: Move this to a packet handler - WorldPacket data(SMSG_SPELLDAMAGESHIELD, (8 + 8 + 4 + 4 + 4 + 4)); - data << victim->GetGUID(); - data << GetGUID(); - data << uint32(i_spellProto->Id); - data << uint32(damage); // Damage - int32 overkill = int32(damage) - int32(GetHealth()); - data << uint32(overkill > 0 ? overkill : 0); // Overkill - data << uint32(i_spellProto->GetSchoolMask()); - victim->SendMessageToSet(&data, true); - - Unit::DealDamage(victim, this, damage, 0, SPELL_DIRECT_DAMAGE, i_spellProto->GetSchoolMask(), i_spellProto, true); + victim->SendSpellMiss(this, i_spellProto->Id, missInfo); + continue; } + + // ...or immuned + if (IsImmunedToDamageOrSchool(i_spellProto)) + { + victim->SendSpellDamageImmune(this, i_spellProto->Id); + continue; + } + + uint32 damage = uint32(std::max(0, (*dmgShieldItr)->GetAmount())); // xinef: done calculated at amount calculation + + if (Unit* caster = (*dmgShieldItr)->GetCaster()) + { + damage = caster->SpellDamageBonusDone(this, i_spellProto, damage, SPELL_DIRECT_DAMAGE, (*dmgShieldItr)->GetEffIndex()); + damage = this->SpellDamageBonusTaken(caster, i_spellProto, damage, SPELL_DIRECT_DAMAGE); + } + + uint32 absorb = 0; + + DamageInfo dmgInfo(victim, this, damage, i_spellProto, i_spellProto->GetSchoolMask(), SPELL_DIRECT_DAMAGE); + Unit::CalcAbsorbResist(dmgInfo); + absorb = dmgInfo.GetAbsorb(); + damage = dmgInfo.GetDamage(); + + Unit::DealDamageMods(this, damage, &absorb); + + /// @todo: Move this to a packet handler + WorldPacket data(SMSG_SPELLDAMAGESHIELD, (8 + 8 + 4 + 4 + 4 + 4)); + data << victim->GetGUID(); + data << GetGUID(); + data << uint32(i_spellProto->Id); + data << uint32(damage); // Damage + int32 overkill = int32(damage) - int32(GetHealth()); + data << uint32(overkill > 0 ? overkill : 0); // Overkill + data << uint32(i_spellProto->GetSchoolMask()); + victim->SendMessageToSet(&data, true); + + Unit::DealDamage(victim, this, damage, 0, SPELL_DIRECT_DAMAGE, i_spellProto->GetSchoolMask(), i_spellProto, true); } } diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 1e8b5fd2e..77b56d566 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1171,6 +1171,7 @@ public: static uint32 DealDamage(Unit* attacker, Unit* victim, uint32 damage, CleanDamage const* cleanDamage = nullptr, DamageEffectType damagetype = DIRECT_DAMAGE, SpellSchoolMask damageSchoolMask = SPELL_SCHOOL_MASK_NORMAL, SpellInfo const* spellProto = nullptr, bool durabilityLoss = true, bool allowGM = false, Spell const* spell = nullptr); void DealMeleeDamage(CalcDamageInfo* damageInfo, bool durabilityLoss); void DealSpellDamage(SpellNonMeleeDamage* damageInfo, bool durabilityLoss, Spell const* spell = nullptr); + void DealDamageShieldDamage(Unit* victim); static void DealDamageMods(Unit const* victim, uint32& damage, uint32* absorb); static void Kill(Unit* killer, Unit* victim, bool durabilityLoss = true, WeaponAttackType attackType = BASE_ATTACK, SpellInfo const* spellProto = nullptr, Spell const* spell = nullptr); From 86af3f302b2b1e464661ef4e80eb049f58738ccc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A9=E9=B9=AD?= <18535853+PkllonG@users.noreply.github.com> Date: Sat, 4 Oct 2025 21:33:31 +0800 Subject: [PATCH 010/140] fix(Core/Unit): Fix all that have UNIT_STATE_NO_ENVIRONMENT_UPD (#23100) --- src/server/game/Entities/Unit/UnitDefines.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h index dfa371ca4..1875a96aa 100644 --- a/src/server/game/Entities/Unit/UnitDefines.h +++ b/src/server/game/Entities/Unit/UnitDefines.h @@ -197,7 +197,7 @@ enum UnitState UNIT_STATE_IGNORE_PATHFINDING = 0x10000000, // do not use pathfinding in any MovementGenerator UNIT_STATE_NO_ENVIRONMENT_UPD = 0x20000000, - UNIT_STATE_NO_COMBAT_MOVEMENT, // serverside only - should never be changed outside of core and hence shouldnt have a defined static value and be at the end + UNIT_STATE_NO_COMBAT_MOVEMENT = 0x40000000, // serverside only - should not be changed outside the core and should be placed at the end UNIT_STATE_ALL_STATE_SUPPORTED = UNIT_STATE_DIED | UNIT_STATE_MELEE_ATTACKING | UNIT_STATE_STUNNED | UNIT_STATE_ROAMING | UNIT_STATE_CHASE | UNIT_STATE_FLEEING | UNIT_STATE_IN_FLIGHT | UNIT_STATE_FOLLOW | UNIT_STATE_ROOT | UNIT_STATE_CONFUSED From fd24bbba8d483283036b34ea58a3e36fd8321571 Mon Sep 17 00:00:00 2001 From: Rocco Silipo <108557877+Rorschach91@users.noreply.github.com> Date: Sat, 4 Oct 2025 15:52:04 +0200 Subject: [PATCH 011/140] fix(DB/SmartAI): Wounded Westfall Infantries now have an offy-like behaviour. (#23098) --- .../pending_db_world/Wounded_westfall.sql | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 data/sql/updates/pending_db_world/Wounded_westfall.sql diff --git a/data/sql/updates/pending_db_world/Wounded_westfall.sql b/data/sql/updates/pending_db_world/Wounded_westfall.sql new file mode 100644 index 000000000..4c26c7235 --- /dev/null +++ b/data/sql/updates/pending_db_world/Wounded_westfall.sql @@ -0,0 +1,27 @@ + +-- Set MT and WD +UPDATE `creature` SET `wander_distance` = 0, `MovementType` = 0 WHERE (`id1` = 27482) AND (`guid` IN (104181)); + +-- Set byte1 (Kneel) +UPDATE `creature_addon` SET `bytes1` = 8 WHERE (`guid` IN (104181, 104184)); + +-- Update SmartAI +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 27482; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 27482); +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 +(27482, 0, 0, 0, 25, 0, 100, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Wounded Westfall Infantry - On Reset - Set Reactstate Passive'), +(27482, 0, 1, 0, 4, 0, 100, 0, 0, 0, 0, 0, 0, 0, 8, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Wounded Westfall Infantry - On Aggro - Set Reactstate Aggressive'), +(27482, 0, 2, 0, 0, 0, 100, 0, 2000, 4000, 8000, 12000, 0, 0, 11, 32771, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Wounded Westfall Infantry - In Combat - Cast \'Holy Shock\''), +(27482, 0, 3, 0, 0, 0, 100, 0, 3000, 6000, 32000, 36000, 0, 0, 11, 29385, 32, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Wounded Westfall Infantry - In Combat - Cast \'Seal of Command\''), +(27482, 0, 4, 0, 8, 0, 100, 512, 48845, 0, 0, 0, 0, 0, 80, 2748200, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Wounded Westfall Infantry - On Spellhit \'Renew Infantry\' - Run Script'); + +-- Set Action List +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 2748200); +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 +(2748200, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 48813, 2, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Wounded Westfall Infantry - Actionlist - Cast \'Kill Credit\''), +(2748200, 9, 1, 0, 0, 0, 100, 0, 500, 500, 0, 0, 0, 0, 91, 8, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Wounded Westfall Infantry - Actionlist - Remove FlagStandstate Kneel'), +(2748200, 9, 2, 0, 0, 0, 100, 0, 2500, 2500, 0, 0, 0, 0, 66, 1, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Wounded Westfall Infantry - Actionlist - Set Orientation Invoker'), +(2748200, 9, 3, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 0, 0, 5, 113, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Wounded Westfall Infantry - Actionlist - Play Emote 113'), +(2748200, 9, 4, 0, 0, 0, 100, 0, 100, 100, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Wounded Westfall Infantry - Actionlist - Say Line 0'), +(2748200, 9, 5, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 0, 0, 53, 1, 27482, 0, 0, 2000, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Wounded Westfall Infantry - Actionlist - Start Waypoint Path 27482'); From 7ab7a5108c6a9a08de8e7d01d50b99d7d09772e3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 4 Oct 2025 13:53:04 +0000 Subject: [PATCH 012/140] chore(DB): import pending files Referenced commit(s): fd24bbba8d483283036b34ea58a3e36fd8321571 --- .../Wounded_westfall.sql => db_world/2025_10_04_03.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/Wounded_westfall.sql => db_world/2025_10_04_03.sql} (98%) diff --git a/data/sql/updates/pending_db_world/Wounded_westfall.sql b/data/sql/updates/db_world/2025_10_04_03.sql similarity index 98% rename from data/sql/updates/pending_db_world/Wounded_westfall.sql rename to data/sql/updates/db_world/2025_10_04_03.sql index 4c26c7235..bd4a85489 100644 --- a/data/sql/updates/pending_db_world/Wounded_westfall.sql +++ b/data/sql/updates/db_world/2025_10_04_03.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_04_02 -> 2025_10_04_03 -- Set MT and WD UPDATE `creature` SET `wander_distance` = 0, `MovementType` = 0 WHERE (`id1` = 27482) AND (`guid` IN (104181)); From 4e06a567972bc32dcc049960511db07d1f07b577 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 4 Oct 2025 11:24:04 -0300 Subject: [PATCH 013/140] fix(DB/Conditions): Fix conditions for The Demoralizer spell (#23101) --- .../updates/pending_db_world/rev_1759584634141533900.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1759584634141533900.sql diff --git a/data/sql/updates/pending_db_world/rev_1759584634141533900.sql b/data/sql/updates/pending_db_world/rev_1759584634141533900.sql new file mode 100644 index 000000000..0c09ed55d --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1759584634141533900.sql @@ -0,0 +1,6 @@ +-- +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 13) AND (`SourceGroup` = 1) AND (`SourceEntry` = 50674); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(13, 1, 50674, 0, 0, 31, 0, 3, 25469, 0, 0, 0, 0, '', 'The Demoralizer only hits Mindless Aberration'), +(13, 1, 50674, 0, 1, 31, 0, 3, 25332, 0, 0, 0, 0, '', 'The Demoralizer only hits Stitched Warsong Horror'), +(13, 1, 50674, 0, 2, 31, 0, 3, 25333, 0, 0, 0, 0, '', 'The Demoralizer only hits Undying Aggressor'); From 0fb9431692052f4010ccd75be208388801b93464 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 4 Oct 2025 14:25:08 +0000 Subject: [PATCH 014/140] chore(DB): import pending files Referenced commit(s): 4e06a567972bc32dcc049960511db07d1f07b577 --- .../rev_1759584634141533900.sql => db_world/2025_10_04_04.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1759584634141533900.sql => db_world/2025_10_04_04.sql} (94%) diff --git a/data/sql/updates/pending_db_world/rev_1759584634141533900.sql b/data/sql/updates/db_world/2025_10_04_04.sql similarity index 94% rename from data/sql/updates/pending_db_world/rev_1759584634141533900.sql rename to data/sql/updates/db_world/2025_10_04_04.sql index 0c09ed55d..6c37e6106 100644 --- a/data/sql/updates/pending_db_world/rev_1759584634141533900.sql +++ b/data/sql/updates/db_world/2025_10_04_04.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_04_03 -> 2025_10_04_04 -- DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 13) AND (`SourceGroup` = 1) AND (`SourceEntry` = 50674); INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES From 6ceb23fd6d6892adf23164b0901bfcd9c9952e66 Mon Sep 17 00:00:00 2001 From: Rocco Silipo <108557877+Rorschach91@users.noreply.github.com> Date: Sat, 4 Oct 2025 19:10:10 +0200 Subject: [PATCH 015/140] fix(DB/SmartAI): Fix Fuel Tank and Horde Siege Tank issues. (#23104) --- data/sql/updates/pending_db_world/Siege_tank.sql | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 data/sql/updates/pending_db_world/Siege_tank.sql diff --git a/data/sql/updates/pending_db_world/Siege_tank.sql b/data/sql/updates/pending_db_world/Siege_tank.sql new file mode 100644 index 000000000..17248c5b5 --- /dev/null +++ b/data/sql/updates/pending_db_world/Siege_tank.sql @@ -0,0 +1,11 @@ + +-- Update SmartAI (Horde Siege Tank and Barrels). +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE (`entry` IN (25334, 27064)); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0) AND (`entryorguid` IN (25334, 27064)); +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 +(27064, 0, 0, 1, 103, 0, 100, 512, 0, 25334, 1, 2, 0, 0, 11, 47916, 2, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Abandoned Fuel Tank - On 1 or More Units in Range - Cast \'Fuel\''), +(27064, 0, 1, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 41, 4000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Abandoned Fuel Tank - On 1 or More Units in Range - Despawn In 4000 ms'), +(27064, 0, 2, 0, 11, 0, 100, 512, 0, 0, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Abandoned Fuel Tank - On Respawn - Stop Attacking'), +(25334, 0, 0, 0, 8, 0, 100, 512, 47916, 0, 2000, 2000, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Horde Siege Tank - On Spellhit \'Fuel\' - Say Line 0'), +(25334, 0, 1, 0, 28, 0, 100, 0, 0, 0, 0, 0, 0, 0, 41, 1000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Horde Siege Tank - On Passenger Removed - Despawn In 1000 ms'); From c2440e1fa392d6e2e1a854a18aa08351e1d9431f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 4 Oct 2025 17:11:12 +0000 Subject: [PATCH 016/140] chore(DB): import pending files Referenced commit(s): 6ceb23fd6d6892adf23164b0901bfcd9c9952e66 --- .../Siege_tank.sql => db_world/2025_10_04_05.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/Siege_tank.sql => db_world/2025_10_04_05.sql} (97%) diff --git a/data/sql/updates/pending_db_world/Siege_tank.sql b/data/sql/updates/db_world/2025_10_04_05.sql similarity index 97% rename from data/sql/updates/pending_db_world/Siege_tank.sql rename to data/sql/updates/db_world/2025_10_04_05.sql index 17248c5b5..a2f9d56ac 100644 --- a/data/sql/updates/pending_db_world/Siege_tank.sql +++ b/data/sql/updates/db_world/2025_10_04_05.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_04_04 -> 2025_10_04_05 -- Update SmartAI (Horde Siege Tank and Barrels). UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE (`entry` IN (25334, 27064)); From 42f9db32845375234491b194d41259540cbee370 Mon Sep 17 00:00:00 2001 From: sudlud Date: Sat, 4 Oct 2025 22:31:07 +0200 Subject: [PATCH 017/140] fix(DB/Gameobject): Sniffed Values for 'Doodad_Nox_portal_top01' spawns (#23110) --- .../pending_db_world/rev_1759598138082148000.sql | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1759598138082148000.sql diff --git a/data/sql/updates/pending_db_world/rev_1759598138082148000.sql b/data/sql/updates/pending_db_world/rev_1759598138082148000.sql new file mode 100644 index 000000000..a0fed8bb5 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1759598138082148000.sql @@ -0,0 +1,12 @@ +-- Update gameobject 'Doodad_Nox_portal_top01' with sniffed values +-- updated spawns +DELETE FROM `gameobject` WHERE (`id` IN (191542)) AND (`guid` IN (57145, 57146)); +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`, `Comment`) VALUES +(57145, 191542, 571, 0, 0, 1, 1, 6175.19140625, -2017.2734375, 241.0088348388671875, 2.312558174133300781, 0, 0, 0.915310859680175781, 0.402748137712478637, 120, 255, 1, "", 48019, NULL), +(57146, 191542, 571, 0, 0, 1, 1, 5171.69140625, -1666.64453125, 242.7811279296875, 2.888511419296264648, 0, 0, 0.99200439453125, 0.126203224062919616, 120, 255, 1, "", 46368, NULL); + +-- new spawns +DELETE FROM `gameobject` WHERE (`id` IN (191542, 192613)) AND (`guid` IN (149, 150)); +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`, `Comment`) VALUES +(149, 191542, 571, 0, 0, 1, 1, 2418.4443359375, 6456.0224609375, 50.21396255493164062, 1.608663797378540039, 0, 0, 0.720367431640625, 0.693592667579650878, 120, 255, 1, "", 45772, NULL), +(150, 192613, 571, 0, 0, 1, 1, 3669.799072265625, -1269.822021484375, 251.2554931640625, 2.404482841491699218, 0, 0, 0.932848930358886718, 0.360267788171768188, 120, 255, 1, "", 45854, NULL); From 973aec9928f8d441b6a8e7e98703a9ba1c3e6644 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 4 Oct 2025 20:32:12 +0000 Subject: [PATCH 018/140] chore(DB): import pending files Referenced commit(s): 42f9db32845375234491b194d41259540cbee370 --- .../rev_1759598138082148000.sql => db_world/2025_10_04_06.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1759598138082148000.sql => db_world/2025_10_04_06.sql} (97%) diff --git a/data/sql/updates/pending_db_world/rev_1759598138082148000.sql b/data/sql/updates/db_world/2025_10_04_06.sql similarity index 97% rename from data/sql/updates/pending_db_world/rev_1759598138082148000.sql rename to data/sql/updates/db_world/2025_10_04_06.sql index a0fed8bb5..d89fd5b64 100644 --- a/data/sql/updates/pending_db_world/rev_1759598138082148000.sql +++ b/data/sql/updates/db_world/2025_10_04_06.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_04_05 -> 2025_10_04_06 -- Update gameobject 'Doodad_Nox_portal_top01' with sniffed values -- updated spawns DELETE FROM `gameobject` WHERE (`id` IN (191542)) AND (`guid` IN (57145, 57146)); From 2afcd037c7a8fcef6d330c59b8bc4bc8a17a86d2 Mon Sep 17 00:00:00 2001 From: blinkysc <37940565+blinkysc@users.noreply.github.com> Date: Sat, 4 Oct 2025 17:24:55 -0500 Subject: [PATCH 019/140] fix(Script/Sunwell): Sinister reflection delays 5 seconds before set in combat (#22939) --- .../EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp index ddd75f48a..221f15a23 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp @@ -178,7 +178,12 @@ struct npc_kiljaeden_controller : public NullCreatureAI { summons.Summon(summon); if (summon->GetEntry() == NPC_SINISTER_REFLECTION) - summon->SetInCombatWithZone(); + { + summon->m_Events.AddEventAtOffset([summon] { + if (summon && summon->IsAlive() && !summon->IsInCombat()) + summon->SetInCombatWithZone(); + }, 5s); + } else if (summon->GetEntry() == NPC_KALECGOS_KJ) summon->setActive(true); } From 0767b2edf5b7fc7fc4007dbcb7d4ca9add120838 Mon Sep 17 00:00:00 2001 From: killerwife Date: Sun, 5 Oct 2025 19:45:07 +0200 Subject: [PATCH 020/140] fix(Core/Movement): Add safeguards against root freezes (#23117) --- src/server/game/Entities/Unit/Unit.h | 1 + src/server/game/Handlers/MovementHandler.cpp | 6 ++++++ src/server/game/Movement/Spline/MoveSplineInit.cpp | 9 ++++++++- src/server/scripts/Commands/cs_gm.cpp | 10 ++-------- 4 files changed, 17 insertions(+), 9 deletions(-) diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 77b56d566..726addd94 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1644,6 +1644,7 @@ public: [[nodiscard]] virtual bool CanFly() const = 0; [[nodiscard]] bool IsFlying() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_FLYING | MOVEMENTFLAG_DISABLE_GRAVITY); } [[nodiscard]] bool IsFalling() const; + [[nodiscard]] bool IsRooted() const { return m_movementInfo.HasMovementFlag(MOVEMENTFLAG_ROOT); } [[nodiscard]] float GetHoverHeight() const { return IsHovering() ? GetFloatValue(UNIT_FIELD_HOVERHEIGHT) : 0.0f; } diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index 443ac946c..c738365b5 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -575,6 +575,12 @@ bool WorldSession::VerifyMovementInfo(MovementInfo const& movementInfo, Player* return false; } } + + // rooted mover sent packet without root or moving AND root - ignore, due to client crash possibility + if (opcode != CMSG_FORCE_MOVE_UNROOT_ACK) + if (mover->IsRooted() && (!movementInfo.HasMovementFlag(MOVEMENTFLAG_ROOT) || movementInfo.HasMovementFlag(MOVEMENTFLAG_MASK_MOVING))) + return false; + return true; } diff --git a/src/server/game/Movement/Spline/MoveSplineInit.cpp b/src/server/game/Movement/Spline/MoveSplineInit.cpp index c2f6664b6..a9d3dd530 100644 --- a/src/server/game/Movement/Spline/MoveSplineInit.cpp +++ b/src/server/game/Movement/Spline/MoveSplineInit.cpp @@ -23,6 +23,7 @@ #include "Unit.h" #include "Vehicle.h" #include "WorldPacket.h" +#include "Log.h" namespace Movement { @@ -103,7 +104,13 @@ namespace Movement bool isOrientationOnly = args.path.size() == 2 && args.path[0] == args.path[1]; - if ((moveFlags & MOVEMENTFLAG_ROOT) || isOrientationOnly) + if (moveFlags & MOVEMENTFLAG_ROOT) // This case should essentially never occur - hence the trace logging - hints to issues elsewhere + { + LOG_TRACE("movement", "Invalid movement during root. Entry: {} IsImmobilized {}, moveflags {}", unit->GetEntry(), unit->IsImmobilizedState() ? "true" : "false", moveFlags); + moveFlags &= ~MOVEMENTFLAG_MASK_MOVING; + } + + if (isOrientationOnly) moveFlags &= ~MOVEMENTFLAG_MASK_MOVING; if (!args.HasVelocity) diff --git a/src/server/scripts/Commands/cs_gm.cpp b/src/server/scripts/Commands/cs_gm.cpp index 302fb5803..69fec5a02 100644 --- a/src/server/scripts/Commands/cs_gm.cpp +++ b/src/server/scripts/Commands/cs_gm.cpp @@ -92,24 +92,18 @@ public: if (!target) target = handler->GetSession()->GetPlayer(); - WorldPacket data(12); - bool canFly = false; if (enable.has_value()) { - data.SetOpcode(*enable ? SMSG_MOVE_SET_CAN_FLY : SMSG_MOVE_UNSET_CAN_FLY); canFly = *enable; + target->SetCanFly(canFly); } else { canFly = handler->GetSession()->GetPlayer()->CanFly(); - data.SetOpcode(canFly ? SMSG_MOVE_UNSET_CAN_FLY : SMSG_MOVE_SET_CAN_FLY); - canFly = !canFly; + target->SetCanFly(!canFly); } - data << target->GetPackGUID(); - data << uint32(0); // unknown - target->SendMessageToSet(&data, true); handler->PSendSysMessage(LANG_COMMAND_FLYMODE_STATUS, handler->GetNameLink(target), canFly ? "on" : "off"); return true; } From 4572003eb1bacd6c4da7107e9210bc3a7f857c6e Mon Sep 17 00:00:00 2001 From: blinkysc <37940565+blinkysc@users.noreply.github.com> Date: Sun, 5 Oct 2025 12:51:21 -0500 Subject: [PATCH 021/140] fix(Script/Gundrak): Eck spring now resets threat after cast and Spit/Spring Timings (#23124) --- .../scripts/Northrend/Gundrak/boss_eck.cpp | 21 ++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) diff --git a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp index 5a4dbcd2c..ef11e32a6 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp @@ -17,6 +17,7 @@ #include "CreatureScript.h" #include "ScriptedCreature.h" +#include "SpellInfo.h" #include "gundrak.h" enum Spells @@ -71,6 +72,15 @@ public: } } + void SpellHitTarget(Unit* target, SpellInfo const* spell) override + { + if (spell->Id == SPELL_ECK_SPRING) + { + me->GetThreatMgr().ResetAllThreat(); + me->AddThreat(target, 1.0f); + } + } + void Reset() override { BossAI::Reset(); @@ -81,8 +91,8 @@ public: BossAI::JustEngagedWith(who); events.ScheduleEvent(EVENT_ECK_BERSERK, 60s, 90s); events.ScheduleEvent(EVENT_ECK_BITE, 5s); - events.ScheduleEvent(EVENT_ECK_SPIT, 10s); - events.ScheduleEvent(EVENT_ECK_SPRING, 8s); + events.ScheduleEvent(EVENT_ECK_SPIT, 10s, 37s); + events.ScheduleEvent(EVENT_ECK_SPRING, 10s, 24s); } void JustDied(Unit* killer) override @@ -120,17 +130,14 @@ public: break; case EVENT_ECK_SPIT: me->CastSpell(me->GetVictim(), SPELL_ECK_SPIT, false); - events.ScheduleEvent(EVENT_ECK_SPIT, 10s); + events.ScheduleEvent(EVENT_ECK_SPIT, 11s, 24s); break; case EVENT_ECK_SPRING: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true, false)) { - me->GetThreatMgr().ResetAllThreat(); - me->AddThreat(target, 500.0f); me->CastSpell(target, SPELL_ECK_SPRING, false); } - - events.ScheduleEvent(EVENT_ECK_SPRING, 5s, 10s); + events.ScheduleEvent(EVENT_ECK_SPRING, 10s, 24s); break; } From 1159076146bd27fd1dbc0d1f75a54f147c26d48b Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Mon, 6 Oct 2025 12:40:29 -0300 Subject: [PATCH 022/140] =?UTF-8?q?fix(Scripts/Gundrak):=20Eck=20should=20?= =?UTF-8?q?spawn=20when=20the=20Ruin=20Dweller=20formatio=E2=80=A6=20(#231?= =?UTF-8?q?14)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rev_1759620083648554800.sql | 8 ++++ .../scripts/Northrend/Gundrak/gundrak.h | 11 ++++-- .../Northrend/Gundrak/instance_gundrak.cpp | 39 ++++++++++++------- 3 files changed, 41 insertions(+), 17 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1759620083648554800.sql diff --git a/data/sql/updates/pending_db_world/rev_1759620083648554800.sql b/data/sql/updates/pending_db_world/rev_1759620083648554800.sql new file mode 100644 index 000000000..6c9838b19 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1759620083648554800.sql @@ -0,0 +1,8 @@ +-- +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -127203); + +DELETE FROM `creature_formations` WHERE `leaderGUID` = 127203; +INSERT INTO `creature_formations` (`leaderGUID`, `memberGUID`, `dist`, `angle`, `groupAI`, `point_1`, `point_2`) VALUES +(127203, 127203, 0, 0, 3, 0, 0), +(127203, 127201, 0, 0, 3, 0, 0), +(127203, 127202, 0, 0, 3, 0, 0); diff --git a/src/server/scripts/Northrend/Gundrak/gundrak.h b/src/server/scripts/Northrend/Gundrak/gundrak.h index 8d38819ea..ea340b4c0 100644 --- a/src/server/scripts/Northrend/Gundrak/gundrak.h +++ b/src/server/scripts/Northrend/Gundrak/gundrak.h @@ -30,16 +30,21 @@ enum Data DATA_MOORABI = 1, DATA_DRAKKARI_COLOSSUS = 2, DATA_GAL_DARAH = 3, - DATA_ECK_THE_FEROCIOUS_INIT = 4, - DATA_ECK_THE_FEROCIOUS = 5, - MAX_ENCOUNTERS = 6 + DATA_ECK_THE_FEROCIOUS = 4, + MAX_ENCOUNTERS = 5 }; enum Creatures { + NPC_RUINS_DWELLER = 29920, NPC_ECK_THE_FEROCIOUS = 29932 }; +enum GDTexts +{ + EMOTE_SUMMON_ECK = 0 +}; + enum GameObjects { GO_ALTAR_OF_SLAD_RAN = 192518, diff --git a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp index f8a87b253..422303298 100644 --- a/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp +++ b/src/server/scripts/Northrend/Gundrak/instance_gundrak.cpp @@ -15,6 +15,7 @@ * with this program. If not, see . */ +#include "CreatureGroups.h" #include "InstanceMapScript.h" #include "ScriptedCreature.h" #include "gundrak.h" @@ -137,13 +138,6 @@ public: { switch (type) { - case NPC_ECK_THE_FEROCIOUS: - if (GetBossState(DATA_ECK_THE_FEROCIOUS_INIT) != DONE) - { - SetBossState(DATA_ECK_THE_FEROCIOUS_INIT, NOT_STARTED); - SetBossState(DATA_ECK_THE_FEROCIOUS_INIT, DONE); - } - break; case GO_ALTAR_OF_SLAD_RAN: if (GameObject* statue = instance->GetGameObject(_bridgeGUIDs[0])) statue->SetGoState(GO_STATE_READY); @@ -194,19 +188,36 @@ public: if (GameObject* altar = instance->GetGameObject(_drakkariAltarGUID)) altar->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE); break; - case DATA_ECK_THE_FEROCIOUS_INIT: - { - Position pos = {1624.70f, 891.43f, 95.08f, 1.2f}; - if (instance->IsHeroic()) - instance->SummonCreature(NPC_ECK_THE_FEROCIOUS, pos); - break; - } } return true; } + void OnUnitDeath(Unit* unit) override + { + if (!instance->IsHeroic() || !unit->EntryEquals(NPC_RUINS_DWELLER) || IsBossDone(DATA_ECK_THE_FEROCIOUS)) + return; + + if (Creature* dweller = unit->ToCreature()) + if (CreatureGroup* formation = dweller->GetFormation()) + { + scheduler.CancelAll(); + scheduler.Schedule(1s, [this, dweller, formation](TaskContext /*context*/) + { + if (!formation->IsAnyMemberAlive()) + { + if (dweller) + dweller->AI()->Talk(EMOTE_SUMMON_ECK); + + instance->SummonCreature(NPC_ECK_THE_FEROCIOUS, { 1624.70f, 891.43f, 95.08f, 1.2f }); + } + }); + } + } + void Update(uint32 diff) override { + scheduler.Update(diff); + if (!_activateTimer) return; From 43d46de681a5314e9b6d7740d3516897d43ebcf3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Mon, 6 Oct 2025 15:41:43 +0000 Subject: [PATCH 023/140] chore(DB): import pending files Referenced commit(s): 1159076146bd27fd1dbc0d1f75a54f147c26d48b --- .../rev_1759620083648554800.sql => db_world/2025_10_06_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1759620083648554800.sql => db_world/2025_10_06_00.sql} (89%) diff --git a/data/sql/updates/pending_db_world/rev_1759620083648554800.sql b/data/sql/updates/db_world/2025_10_06_00.sql similarity index 89% rename from data/sql/updates/pending_db_world/rev_1759620083648554800.sql rename to data/sql/updates/db_world/2025_10_06_00.sql index 6c9838b19..4406e1857 100644 --- a/data/sql/updates/pending_db_world/rev_1759620083648554800.sql +++ b/data/sql/updates/db_world/2025_10_06_00.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_04_06 -> 2025_10_06_00 -- DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = -127203); From bfe2cbc9c7ad77e4ee378c9ac6bd410f2f719e35 Mon Sep 17 00:00:00 2001 From: Rocco Silipo <108557877+Rorschach91@users.noreply.github.com> Date: Tue, 7 Oct 2025 09:35:50 +0200 Subject: [PATCH 024/140] fix(DB/Creature) Remove immunity to Disarm from Gal'darah. (#23136) --- data/sql/updates/pending_db_world/Disarm.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 data/sql/updates/pending_db_world/Disarm.sql diff --git a/data/sql/updates/pending_db_world/Disarm.sql b/data/sql/updates/pending_db_world/Disarm.sql new file mode 100644 index 000000000..25bca0b9f --- /dev/null +++ b/data/sql/updates/pending_db_world/Disarm.sql @@ -0,0 +1,3 @@ + +-- Remove Disarm Immunity +UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask` &~ 4 WHERE (`entry` IN (31368, 29306)); From 10acbafed5c4da9e4e870d6be979381bad5a55cd Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 7 Oct 2025 07:36:58 +0000 Subject: [PATCH 025/140] chore(DB): import pending files Referenced commit(s): bfe2cbc9c7ad77e4ee378c9ac6bd410f2f719e35 --- .../{pending_db_world/Disarm.sql => db_world/2025_10_07_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/Disarm.sql => db_world/2025_10_07_00.sql} (76%) diff --git a/data/sql/updates/pending_db_world/Disarm.sql b/data/sql/updates/db_world/2025_10_07_00.sql similarity index 76% rename from data/sql/updates/pending_db_world/Disarm.sql rename to data/sql/updates/db_world/2025_10_07_00.sql index 25bca0b9f..deaa9dd34 100644 --- a/data/sql/updates/pending_db_world/Disarm.sql +++ b/data/sql/updates/db_world/2025_10_07_00.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_06_00 -> 2025_10_07_00 -- Remove Disarm Immunity UPDATE `creature_template` SET `mechanic_immune_mask` = `mechanic_immune_mask` &~ 4 WHERE (`entry` IN (31368, 29306)); From 939dae3119328717a59661d94ec346fc407a18db Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Tue, 7 Oct 2025 04:37:40 -0300 Subject: [PATCH 026/140] fix(Scripts/CoS): Fix chest despawning when player leaves map (#23112) --- .../CullingOfStratholme/culling_of_stratholme.cpp | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp index 32ec43e80..5d1e9826a 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp @@ -1154,16 +1154,7 @@ public: if (GameObject* go = pInstance->instance->GetGameObject(pInstance->GetGuidData(DATA_EXIT_GATE))) go->SetGoState(GO_STATE_ACTIVE); - if (!me->GetMap()->GetPlayers().IsEmpty()) - { - if (Player* player = me->GetMap()->GetPlayers().getFirst()->GetSource()) - { - if (GameObject* chest = player->SummonGameObject(DUNGEON_MODE(GO_MALGANIS_CHEST_N, GO_MALGANIS_CHEST_H), 2288.35f, 1498.73f, 128.414f, -0.994837f, 0, 0, 0, 0, 0)) - { - chest->SetLootRecipient(me->GetMap()); - } - } - } + pInstance->instance->SummonGameObject(DUNGEON_MODE(GO_MALGANIS_CHEST_N, GO_MALGANIS_CHEST_H), 2288.35f, 1498.73f, 128.414f, -0.994837f, 0, 0, 0, 0, 7 * DAY * IN_MILLISECONDS); } ScheduleNextEvent(currentEvent, 10000); break; From 483b068e4dad65e05f6194ae14654e3c50b1a777 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Tue, 7 Oct 2025 04:39:57 -0300 Subject: [PATCH 027/140] fix(Scripts/IsleOfQueldanas): Fix Greengill Slave script (#23109) --- .../rev_1759604146375864300.sql | 16 ++++++ .../zone_isle_of_queldanas.cpp | 56 ------------------- 2 files changed, 16 insertions(+), 56 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1759604146375864300.sql diff --git a/data/sql/updates/pending_db_world/rev_1759604146375864300.sql b/data/sql/updates/pending_db_world/rev_1759604146375864300.sql new file mode 100644 index 000000000..d45ea33c5 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1759604146375864300.sql @@ -0,0 +1,16 @@ +-- +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 25084; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 25084); +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 +(25084, 0, 0, 1, 8, 0, 100, 1, 45109, 0, 0, 0, 0, 0, 11, 45110, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Greengill Slave - On Spellhit \'Orb of Murloc Control\' - Cast \'Greengill Slave Freed\' (No Repeat)'), +(25084, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 45111, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Greengill Slave - On Spellhit \'Orb of Murloc Control\' - Cast \'Enrage\' (No Repeat)'), +(25084, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 36, 25085, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Greengill Slave - On Spellhit \'Orb of Murloc Control\' - Update Template To \'Freed Greengill Slave\' (No Repeat)'), +(25084, 0, 3, 4, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 9, 25073, 0, 100, 0, 0, 0, 0, 0, 'Greengill Slave - On Spellhit \'Orb of Murloc Control\' - Start Attacking (No Repeat)'), +(25084, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 19, 25060, 100, 0, 0, 0, 0, 0, 0, 'Greengill Slave - On Spellhit \'Orb of Murloc Control\' - Start Attacking (No Repeat)'), +(25084, 0, 5, 6, 7, 0, 100, 0, 0, 0, 0, 0, 0, 0, 41, 5000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Greengill Slave - On Evade - Despawn In 5000 ms'), +(25084, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 89, 5, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Greengill Slave - On Evade - Start Random Movement'); + +DELETE FROM `spell_custom_attr` WHERE `spell_id` = 45111; +INSERT INTO `spell_custom_attr` (`spell_id`, `attributes`) VALUES +(45111, 0x00000800); diff --git a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp index be0caf53d..61e04b795 100644 --- a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp +++ b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp @@ -610,61 +610,6 @@ public: }; }; -/*###### THEIR: ######*/ - -/*###### -## npc_greengill_slave -######*/ - -#define ENRAGE 45111 -#define ORB 45109 -#define QUESTG 11541 -#define DM 25060 - -class npc_greengill_slave : public CreatureScript -{ -public: - npc_greengill_slave() : CreatureScript("npc_greengill_slave") { } - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_greengill_slaveAI(creature); - } - - struct npc_greengill_slaveAI : public ScriptedAI - { - npc_greengill_slaveAI(Creature* creature) : ScriptedAI(creature) { } - - void JustEngagedWith(Unit* /*who*/) override { } - - void SpellHit(Unit* caster, SpellInfo const* spellInfo) override - { - Player* player = caster->ToPlayer(); - if (!player) - return; - - if (spellInfo->Id == ORB && !me->HasAura(ENRAGE)) - { - if (player->GetQuestStatus(QUESTG) == QUEST_STATUS_INCOMPLETE) - DoCast(player, 45110, true); - - DoCast(me, ENRAGE); - - if (Creature* Myrmidon = me->FindNearestCreature(DM, 70)) - { - me->AddThreat(Myrmidon, 100000.0f); - AttackStart(Myrmidon); - } - } - } - - void UpdateAI(uint32 /*diff*/) override - { - DoMeleeAttackIfReady(); - } - }; -}; - // 45396, 45398 - Weapon Coating Enchant class spell_gen_weapon_coating_enchant : public AuraScript { @@ -690,6 +635,5 @@ void AddSC_isle_of_queldanas() new npc_bh_thalorien_dawnseeker(); RegisterSpellScript(spell_bh_cleanse_quel_delar); new npc_grand_magister_rommath(); - new npc_greengill_slave(); RegisterSpellScript(spell_gen_weapon_coating_enchant); } From 79bb3230b197ca2edccc0c79b1f3e505ba5938d3 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 7 Oct 2025 07:41:03 +0000 Subject: [PATCH 028/140] chore(DB): import pending files Referenced commit(s): 483b068e4dad65e05f6194ae14654e3c50b1a777 --- .../rev_1759604146375864300.sql => db_world/2025_10_07_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1759604146375864300.sql => db_world/2025_10_07_01.sql} (97%) diff --git a/data/sql/updates/pending_db_world/rev_1759604146375864300.sql b/data/sql/updates/db_world/2025_10_07_01.sql similarity index 97% rename from data/sql/updates/pending_db_world/rev_1759604146375864300.sql rename to data/sql/updates/db_world/2025_10_07_01.sql index d45ea33c5..7f4116a8c 100644 --- a/data/sql/updates/pending_db_world/rev_1759604146375864300.sql +++ b/data/sql/updates/db_world/2025_10_07_01.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_07_00 -> 2025_10_07_01 -- UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 25084; From 2c5aab9ed287e87c2aea2f2920276975709989f1 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Tue, 7 Oct 2025 04:41:15 -0300 Subject: [PATCH 029/140] fix(Core/Spells): Drakkari Medicine Man Earth Shield max targets (#23102) --- src/server/game/Spells/SpellInfoCorrections.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/server/game/Spells/SpellInfoCorrections.cpp b/src/server/game/Spells/SpellInfoCorrections.cpp index 9873af325..6712f1109 100644 --- a/src/server/game/Spells/SpellInfoCorrections.cpp +++ b/src/server/game/Spells/SpellInfoCorrections.cpp @@ -5151,6 +5151,12 @@ void SpellMgr::LoadSpellInfoCorrections() spellInfo->AttributesEx3 |= SPELL_ATTR3_ALWAYS_HIT; }); + // Earth Shield + ApplySpellFix({ 55599, 58981 }, [](SpellInfo* spellInfo) + { + spellInfo->AttributesEx5 |= SPELL_ATTR5_LIMIT_N; + }); + for (uint32 i = 0; i < GetSpellInfoStoreSize(); ++i) { SpellInfo* spellInfo = mSpellInfoMap[i]; From 62d7b0c2e7916cd227275daf434774b1feded814 Mon Sep 17 00:00:00 2001 From: Ryan Turner Date: Thu, 9 Oct 2025 08:48:14 +0100 Subject: [PATCH 030/140] docs(PR_Template): Added Commit Message Guidelines to PR template. (#23155) --- pull_request_template.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/pull_request_template.md b/pull_request_template.md index b62291ba4..5d48e1258 100644 --- a/pull_request_template.md +++ b/pull_request_template.md @@ -1,5 +1,8 @@ + + + ## Changes Proposed: This PR proposes changes to: From e46e29b012889be62346426eb82e7d10007d7bb0 Mon Sep 17 00:00:00 2001 From: Rocco Silipo <108557877+Rorschach91@users.noreply.github.com> Date: Thu, 9 Oct 2025 12:23:53 +0200 Subject: [PATCH 031/140] fix(DB/Script/Gundrak) Improve Drakkari Rhino bridge event. (#23144) --- .../pending_db_world/Drakkari_Rhino.sql | 38 +++++++++++++++++++ .../game/AI/SmartScripts/SmartScriptMgr.cpp | 2 + 2 files changed, 40 insertions(+) create mode 100644 data/sql/updates/pending_db_world/Drakkari_Rhino.sql diff --git a/data/sql/updates/pending_db_world/Drakkari_Rhino.sql b/data/sql/updates/pending_db_world/Drakkari_Rhino.sql new file mode 100644 index 000000000..42d4f5ce7 --- /dev/null +++ b/data/sql/updates/pending_db_world/Drakkari_Rhino.sql @@ -0,0 +1,38 @@ + +-- Add Npcs to Rhino. +DELETE FROM `vehicle_template_accessory` WHERE `entry` = 29931; +INSERT INTO `vehicle_template_accessory` (`entry`, `accessory_entry`, `seat_id`, `minion`, `description`, `summontype`, `summontimer`) VALUES +(29931, 29982, 0, 0, 'Drakkari Raider', 7, 0), +(29931, 29982, 1, 0, 'Drakkari Raider', 7, 0), +(29931, 29982, 2, 0, 'Drakkari Raider', 7, 0); + +-- Remove Spawns (Drakkari Raider) +DELETE FROM `creature` WHERE `id1` = 29982; + +-- Remove Guid SmartAI (Drakkari Raider) +DELETE FROM `smart_scripts` WHERE (`entryorguid` IN (-127226, -127225, -127217)) AND (`source_type` = 0); + +-- Remove Extra Flag Dont_override (Drakkari Raider) +UPDATE `creature_template` SET `flags_extra` = `flags_extra` &~ 134217728 WHERE (`entry` = 29982); + +-- Edit SmartAI (Drakkari Rhino and Drakkari Raider) +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE (`entry` IN (29931, 29982)); + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0) AND (`entryorguid` IN (29931, 29982)); +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 +(29931, 0, 0, 0, 9, 0, 100, 514, 0, 0, 8000, 8000, 5, 40, 11, 55530, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Rhino - Within 5-40 Range - Cast \'Charge\' (Normal Dungeon)'), +(29931, 0, 1, 0, 9, 0, 100, 516, 0, 0, 8000, 8000, 5, 40, 11, 58991, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Rhino - Within 5-40 Range - Cast \'Charge\' (Heroic Dungeon)'), +(29931, 0, 2, 0, 0, 0, 100, 514, 0, 10000, 8000, 22000, 0, 0, 11, 55663, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Rhino - In Combat - Cast \'Deafening Roar\' (Normal Dungeon)'), +(29931, 0, 3, 0, 0, 0, 100, 516, 0, 10000, 8000, 22000, 0, 0, 11, 58992, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Rhino - In Combat - Cast \'Deafening Roar\' (Heroic Dungeon)'), +(29931, 0, 4, 0, 38, 0, 100, 0, 0, 2, 0, 0, 0, 0, 232, 1272070, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Rhino - On Data Set 0 2 - Start Path 1272070'), +(29931, 0, 5, 6, 108, 0, 100, 0, 3, 1272070, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Rhino - On Point 3 of Path 1272070 Reached - Set Home Position'), +(29931, 0, 6, 7, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 223, 150, 0, 0, 0, 0, 0, 29, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Rhino - On Point 3 of Path 1272070 Reached - Do Action ID 150'), +(29931, 0, 7, 8, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 223, 151, 0, 0, 0, 0, 0, 29, 1, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Rhino - On Point 3 of Path 1272070 Reached - Do Action ID 151'), +(29931, 0, 8, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 223, 152, 0, 0, 0, 0, 0, 29, 2, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Rhino - On Point 3 of Path 1272070 Reached - Do Action ID 152'), +(29982, 0, 0, 0, 0, 0, 100, 0, 2000, 6000, 5000, 11000, 0, 0, 11, 15496, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Raider - In Combat - Cast \'Cleave\''), +(29982, 0, 1, 2, 72, 0, 100, 0, 150, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Raider - On Action 150 Done - Exit vehicle'), +(29982, 0, 2, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 1773.92, 748.702, 119.4, 3.1151, 'Drakkari Raider - On Action 150 Done - Set Home Position'), +(29982, 0, 3, 4, 72, 0, 100, 0, 151, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Raider - On Action 151 Done - Exit vehicle'), +(29982, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 1769.33, 743.685, 119.4, 3.1151, 'Drakkari Raider - On Action 151 Done - Set Home Position'), +(29982, 0, 5, 6, 72, 0, 100, 0, 152, 0, 0, 0, 0, 0, 203, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Drakkari Raider - On Action 152 Done - Exit vehicle'), +(29982, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 1771.29, 738.667, 119.4, 3.1151, 'Drakkari Raider - On Action 152 Done - Set Home Position'); diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 6db3e4cb2..59490f556 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -555,6 +555,7 @@ bool SmartAIMgr::IsTargetValid(SmartScriptHolder const& e) case SMART_TARGET_RANDOM_POINT: case SMART_TARGET_ROLE_SELECTION: case SMART_TARGET_LOOT_RECIPIENTS: + case SMART_TARGET_VEHICLE_PASSENGER: case SMART_EVENT_SUMMONED_UNIT_DIES: case SMART_EVENT_SUMMONED_UNIT_EVADE: case SMART_TARGET_PLAYER_RANGE: @@ -866,6 +867,7 @@ bool SmartAIMgr::CheckUnusedActionParams(SmartScriptHolder const& e) case SMART_ACTION_ZONE_UNDER_ATTACK: return NO_PARAMS; case SMART_ACTION_LOAD_GRID: return NO_PARAMS; case SMART_ACTION_MUSIC: return sizeof(SmartAction::music); + case SMART_ACTION_DO_ACTION: return sizeof(SmartAction::doAction); case SMART_ACTION_SET_GUID: return sizeof(SmartAction::setGuid); case SMART_ACTION_SCRIPTED_SPAWN: return sizeof(SmartAction::scriptSpawn); case SMART_ACTION_SET_SCALE: return sizeof(SmartAction::setScale); From f68e8d664fd65fdf39cfacec98f4d5b948a614b5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 9 Oct 2025 10:28:51 +0000 Subject: [PATCH 032/140] chore(DB): import pending files Referenced commit(s): e46e29b012889be62346426eb82e7d10007d7bb0 --- .../Drakkari_Rhino.sql => db_world/2025_10_09_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/Drakkari_Rhino.sql => db_world/2025_10_09_00.sql} (98%) diff --git a/data/sql/updates/pending_db_world/Drakkari_Rhino.sql b/data/sql/updates/db_world/2025_10_09_00.sql similarity index 98% rename from data/sql/updates/pending_db_world/Drakkari_Rhino.sql rename to data/sql/updates/db_world/2025_10_09_00.sql index 42d4f5ce7..3eaa71566 100644 --- a/data/sql/updates/pending_db_world/Drakkari_Rhino.sql +++ b/data/sql/updates/db_world/2025_10_09_00.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_07_01 -> 2025_10_09_00 -- Add Npcs to Rhino. DELETE FROM `vehicle_template_accessory` WHERE `entry` = 29931; From f7bde08d59bdbab20d1db6d4bf0e287d94114477 Mon Sep 17 00:00:00 2001 From: sudlud Date: Thu, 9 Oct 2025 14:16:00 +0200 Subject: [PATCH 033/140] fix(DB/Gameobject): Sniffed Values for 'Lava' spawns (#23097) --- .../pending_db_world/rev_1759564042478564900.sql | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1759564042478564900.sql diff --git a/data/sql/updates/pending_db_world/rev_1759564042478564900.sql b/data/sql/updates/pending_db_world/rev_1759564042478564900.sql new file mode 100644 index 000000000..23ca69731 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1759564042478564900.sql @@ -0,0 +1,15 @@ +-- Update gameobject 'Lava' with sniffed values +-- updated spawns +DELETE FROM `gameobject` WHERE (`id` IN (191854, 191858, 191859, 191855, 191856, 191857)) AND (`guid` IN (58982, 59037, 59050, 67174, 67176, 67178)); +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`, `Comment`) VALUES +(58982, 191854, 571, 0, 0, 1, 1, 4397.71826171875, 1617.9945068359375, 129.1055908203125, 4.520402908325195312, 0, 0, -0.77162456512451171, 0.636078238487243652, 120, 255, 1, "", 46158, NULL), +(59037, 191858, 571, 0, 0, 1, 1, 4435.0810546875, 1672.25341796875, 131.871307373046875, 3.90954136848449707, 0, 0, -0.92718315124511718, 0.37460830807685852, 120, 255, 1, "", 46158, NULL), +(59050, 191859, 571, 0, 0, 1, 1, 4537.86279296875, 1702.455078125, 158.952392578125, 3.063024282455444335, 0, 0, 0.999228477478027343, 0.039274025708436965, 120, 255, 1, "", 46158, NULL), +(67174, 191855, 571, 0, 0, 1, 1, 4423.2138671875, 1815.5992431640625, 160.35821533203125, 4.982916831970214843, 0, 0, -0.60529327392578125, 0.796002507209777832, 120, 255, 1, "", 46158, NULL), +(67176, 191856, 571, 0, 0, 1, 1, 4511.74365234375, 1860.2879638671875, 161.1739959716796875, 4.982916831970214843, 0, 0, -0.60529327392578125, 0.796002507209777832, 120, 255, 1, "", 46158, NULL), +(67178, 191857, 571, 0, 0, 1, 1, 4299.21142578125, 1867.4713134765625, 160.4115753173828125, 0.026179106906056404, 0, 0, 0.013089179992675781, 0.999914348125457763, 120, 255, 1, "", 47720, NULL); + +-- new spawns +DELETE FROM `gameobject` WHERE (`id` IN (191861)) AND (`guid` IN (44)); +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`, `Comment`) VALUES +(44, 191861, 571, 0, 0, 1, 1, 4567.751953125, 1630.7730712890625, 164.80889892578125, 2.975770950317382812, 0, 0, 0.996564865112304687, 0.082815870642662048, 120, 255, 1, "", 46158, NULL); From a2785badd14b6ba5951cfbdc5fd89b1a1042e64c Mon Sep 17 00:00:00 2001 From: sudlud Date: Thu, 9 Oct 2025 14:16:10 +0200 Subject: [PATCH 034/140] fix(DB/Gameobject): Sniffed Values for 'Frostglow' spawns (#23099) --- .../sql/updates/pending_db_world/rev_1759576487953177900.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1759576487953177900.sql diff --git a/data/sql/updates/pending_db_world/rev_1759576487953177900.sql b/data/sql/updates/pending_db_world/rev_1759576487953177900.sql new file mode 100644 index 000000000..4bc554380 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1759576487953177900.sql @@ -0,0 +1,5 @@ +-- Update gameobject 'Frostglow' with sniffed values +-- new spawns +DELETE FROM `gameobject` WHERE (`id` IN (192077)) AND (`guid` IN (46)); +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`, `Comment`) VALUES +(46, 192077, 571, 0, 0, 1, 8, 7214.13720703125, -2652.241455078125, 820.3399658203125, 0.24434557557106018, 0, 0, 0.121869087219238281, 0.9925462007522583, 120, 255, 1, "", 46248, NULL); From ca20c8a7609a7243ee654cec5c62a2cabcb2185a Mon Sep 17 00:00:00 2001 From: sudlud Date: Thu, 9 Oct 2025 14:16:19 +0200 Subject: [PATCH 035/140] fix(DB/Gameobject): Sniffed Values for 'Torch' spawns (#23111) --- .../rev_1759607010727479600.sql | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1759607010727479600.sql diff --git a/data/sql/updates/pending_db_world/rev_1759607010727479600.sql b/data/sql/updates/pending_db_world/rev_1759607010727479600.sql new file mode 100644 index 000000000..00fbbe9e0 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1759607010727479600.sql @@ -0,0 +1,33 @@ +-- Update gameobject 'Torch' with sniffed values +-- updated spawns +DELETE FROM `gameobject` WHERE (`id` IN (192618, 97701, 177385, 176767, 179507, 179508, 179513, 192562, 192563, 191836, 191837, 191838, 191839, 192620, 192621, 192614, 192615)) AND (`guid` IN (100103, 11894, 43177, 45428, 49958, 49960, 49967, 57030, 57079, 58173, 58174, 58190, 58206, 58207, 58218, 58219, 58968, 58975, 7094, 7095)); +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`, `Comment`) VALUES +(100103, 192618, 571, 0, 0, 1, 1, 5931.291015625, -3036.54443359375, 393.401611328125, 2.015851974487304687, 0, 0, 0.845726966857910156, 0.533615827560424804, 120, 255, 1, "", 46368, NULL), +(11894, 97701, 189, 0, 0, 1, 1, 1169.0335693359375, 1345.62841796875, 33.04557037353515625, 3.141592741012573242, 0, 0, -1, 0, 7200, 255, 1, "", 48632, NULL), +(43177, 177385, 289, 0, 0, 1, 1, 227.2589263916015625, 88.310302734375, 99.19482421875, 0.017452461645007133, 0, 0, 0.008726119995117187, 0.999961912631988525, 7200, 255, 1, "", 50664, NULL), +(45428, 176767, 0, 0, 0, 1, 1, 1262.9735107421875, -2563.075927734375, 96.84517669677734375, 0.479964137077331542, 0, 0, 0.237685203552246093, 0.971342265605926513, 120, 255, 1, "", 46248, NULL), +(49958, 179507, 1, 0, 0, 1, 1, -3821.48828125, 1253.965087890625, 162.3778533935546875, 4.703663349151611328, 0, 0, -0.71018505096435546, 0.704015016555786132, 120, 255, 1, "", 46248, NULL), +(49960, 179508, 1, 0, 0, 1, 1, -3757.915283203125, 1252.9454345703125, 162.3778533935546875, 4.703663349151611328, 0, 0, -0.71018505096435546, 0.704015016555786132, 120, 255, 1, "", 46248, NULL), +(49967, 179513, 1, 0, 0, 1, 1, -4070.459716796875, 84.60311126708984375, 60.002593994140625, 4.223697185516357421, 0, 0, -0.85716724395751953, 0.515038192272186279, 120, 255, 1, "", 47720, NULL), +(57030, 192562, 571, 0, 0, 1, 1, 6954.73388671875, -4626.74072265625, 468.348052978515625, 2.364918231964111328, 0, 0, 0.925539970397949218, 0.378649920225143432, 120, 255, 1, "", 46368, NULL), +(57079, 192563, 571, 0, 0, 1, 1, 6933.04248046875, -4648.81396484375, 468.348052978515625, 2.364918231964111328, 0, 0, 0.925539970397949218, 0.378649920225143432, 120, 255, 1, "", 46368, NULL), +(58173, 191836, 571, 0, 0, 1, 1, 6945.23974609375, -4371.509765625, 478.80419921875, 3.926995515823364257, 0, 0, -0.92387866973876953, 0.38268551230430603, 120, 255, 1, "", 46368, NULL), +(58174, 191836, 571, 0, 0, 1, 1, 6726.8125, -4691.68017578125, 478.794921875, 0.767943859100341796, 0, 0, 0.374606132507324218, 0.927184045314788818, 120, 255, 1, "", 50172, NULL), +(58190, 191837, 571, 0, 0, 1, 1, 7001.833984375, -4428.10400390625, 478.80419921875, 3.926995515823364257, 0, 0, -0.92387866973876953, 0.38268551230430603, 120, 255, 1, "", 46368, NULL), +(58206, 191838, 571, 0, 0, 1, 1, 7036.54541015625, -4393.39306640625, 478.80419921875, 3.926995515823364257, 0, 0, -0.92387866973876953, 0.38268551230430603, 120, 255, 1, "", 46368, NULL), +(58207, 191838, 571, 0, 0, 1, 1, 6635.90234375, -4668.20703125, 478.794921875, 0.767943859100341796, 0, 0, 0.374606132507324218, 0.927184045314788818, 120, 255, 1, "", 50172, NULL), +(58218, 191839, 571, 0, 0, 1, 1, 6979.951171875, -4336.798828125, 478.80419921875, 3.926995515823364257, 0, 0, -0.92387866973876953, 0.38268551230430603, 120, 255, 1, "", 46368, NULL), +(58219, 191839, 571, 0, 0, 1, 1, 6691.50048828125, -4725.7802734375, 478.794921875, 0.767943859100341796, 0, 0, 0.374606132507324218, 0.927184045314788818, 120, 255, 1, "", 50172, NULL), +(58968, 192620, 571, 0, 0, 1, 1, 5855.06787109375, -2905.767333984375, 362.3609619140625, 2.015851974487304687, 0, 0, 0.845726966857910156, 0.533615827560424804, 120, 255, 1, "", 46158, NULL), +(58975, 192621, 571, 0, 0, 1, 1, 5666.6611328125, -2995.633056640625, 362.3609619140625, 2.015851974487304687, 0, 0, 0.845726966857910156, 0.533615827560424804, 120, 255, 1, "", 46158, NULL), +(7094, 192614, 571, 0, 0, 1, 1, 5850.66455078125, -3038.080322265625, 307.921875, 2.015851974487304687, 0, 0, 0.845726966857910156, 0.533615827560424804, 120, 255, 1, "", 45942, NULL), +(7095, 192615, 571, 0, 0, 1, 1, 5770.06396484375, -3076.52490234375, 307.921875, 2.015851974487304687, 0, 0, 0.845726966857910156, 0.533615827560424804, 120, 255, 1, "", 45942, NULL); + +-- remaining spawns (no sniffed values available) +-- (`guid` IN (49961, 49962)) + +-- new spawns +DELETE FROM `gameobject` WHERE (`id` IN (191837, 192619)) AND (`guid` IN (162, 163)); +INSERT INTO `gameobject` (`guid`, `id`, `map`, `zoneId`, `areaId`, `spawnMask`, `phaseMask`, `position_x`, `position_y`, `position_z`, `orientation`, `rotation0`, `rotation1`, `rotation2`, `rotation3`, `spawntimesecs`, `animprogress`, `state`, `ScriptName`, `VerifiedBuild`, `Comment`) VALUES +(162, 191837, 571, 0, 0, 1, 1, 6671.21435546875, -4634.1064453125, 478.794921875, 0.767943859100341796, 0, 0, 0.374606132507324218, 0.927184045314788818, 120, 255, 1, "", 50172, NULL), +(163, 192619, 571, 0, 0, 1, 1, 5718.88671875, -3137.856201171875, 393.134735107421875, 2.015851974487304687, 0, 0, 0.845726966857910156, 0.533615827560424804, 120, 255, 1, "", 46158, NULL); From 8fbdca8d508d1021eb27f14dd0b860f260f1af04 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 9 Oct 2025 12:17:05 +0000 Subject: [PATCH 036/140] chore(DB): import pending files Referenced commit(s): f7bde08d59bdbab20d1db6d4bf0e287d94114477 --- .../rev_1759564042478564900.sql => db_world/2025_10_09_01.sql} | 1 + .../rev_1759576487953177900.sql => db_world/2025_10_09_02.sql} | 1 + .../rev_1759607010727479600.sql => db_world/2025_10_09_03.sql} | 1 + 3 files changed, 3 insertions(+) rename data/sql/updates/{pending_db_world/rev_1759564042478564900.sql => db_world/2025_10_09_01.sql} (98%) rename data/sql/updates/{pending_db_world/rev_1759576487953177900.sql => db_world/2025_10_09_02.sql} (93%) rename data/sql/updates/{pending_db_world/rev_1759607010727479600.sql => db_world/2025_10_09_03.sql} (99%) diff --git a/data/sql/updates/pending_db_world/rev_1759564042478564900.sql b/data/sql/updates/db_world/2025_10_09_01.sql similarity index 98% rename from data/sql/updates/pending_db_world/rev_1759564042478564900.sql rename to data/sql/updates/db_world/2025_10_09_01.sql index 23ca69731..a9384e49c 100644 --- a/data/sql/updates/pending_db_world/rev_1759564042478564900.sql +++ b/data/sql/updates/db_world/2025_10_09_01.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_09_00 -> 2025_10_09_01 -- Update gameobject 'Lava' with sniffed values -- updated spawns DELETE FROM `gameobject` WHERE (`id` IN (191854, 191858, 191859, 191855, 191856, 191857)) AND (`guid` IN (58982, 59037, 59050, 67174, 67176, 67178)); diff --git a/data/sql/updates/pending_db_world/rev_1759576487953177900.sql b/data/sql/updates/db_world/2025_10_09_02.sql similarity index 93% rename from data/sql/updates/pending_db_world/rev_1759576487953177900.sql rename to data/sql/updates/db_world/2025_10_09_02.sql index 4bc554380..e86101035 100644 --- a/data/sql/updates/pending_db_world/rev_1759576487953177900.sql +++ b/data/sql/updates/db_world/2025_10_09_02.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_09_01 -> 2025_10_09_02 -- Update gameobject 'Frostglow' with sniffed values -- new spawns DELETE FROM `gameobject` WHERE (`id` IN (192077)) AND (`guid` IN (46)); diff --git a/data/sql/updates/pending_db_world/rev_1759607010727479600.sql b/data/sql/updates/db_world/2025_10_09_03.sql similarity index 99% rename from data/sql/updates/pending_db_world/rev_1759607010727479600.sql rename to data/sql/updates/db_world/2025_10_09_03.sql index 00fbbe9e0..fe1979d2d 100644 --- a/data/sql/updates/pending_db_world/rev_1759607010727479600.sql +++ b/data/sql/updates/db_world/2025_10_09_03.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_09_02 -> 2025_10_09_03 -- Update gameobject 'Torch' with sniffed values -- updated spawns DELETE FROM `gameobject` WHERE (`id` IN (192618, 97701, 177385, 176767, 179507, 179508, 179513, 192562, 192563, 191836, 191837, 191838, 191839, 192620, 192621, 192614, 192615)) AND (`guid` IN (100103, 11894, 43177, 45428, 49958, 49960, 49967, 57030, 57079, 58173, 58174, 58190, 58206, 58207, 58218, 58219, 58968, 58975, 7094, 7095)); From 8d2f3074832fa0ac909d58ff5b48e1e8c89c7b95 Mon Sep 17 00:00:00 2001 From: GrenderG Date: Thu, 9 Oct 2025 20:09:40 +0200 Subject: [PATCH 037/140] fix(Core/Spells): Correct follow position for Pets and Companions. (#23154) Co-authored-by: sogladev --- src/server/game/Entities/Pet/PetDefines.h | 7 +++++-- src/server/game/Spells/SpellEffects.cpp | 11 +++++++++-- src/server/scripts/Pet/pet_generic.cpp | 4 ++-- src/server/scripts/Spells/spell_item.cpp | 2 +- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/server/game/Entities/Pet/PetDefines.h b/src/server/game/Entities/Pet/PetDefines.h index 6bb873258..ea7380ed2 100644 --- a/src/server/game/Entities/Pet/PetDefines.h +++ b/src/server/game/Entities/Pet/PetDefines.h @@ -23,6 +23,7 @@ #include #include #include +#include enum ReactStates : uint8; @@ -202,8 +203,10 @@ enum PetScalingSpells SPELL_RISEN_GHOUL_SELF_STUN = 47466, }; -#define PET_FOLLOW_DIST 1.0f -#define PET_FOLLOW_ANGLE (M_PI/2) +constexpr float PET_FOLLOW_DIST = 2.0f; +constexpr float PET_FOLLOW_ANGLE = std::numbers::pi_v / 2; +constexpr float MINI_PET_SUMMON_ANGLE = std::numbers::pi_v / 4; +constexpr float MINI_PET_FOLLOW_ANGLE = std::numbers::pi_v; class PetStable { diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index d8dcba2d5..a95f99367 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -2429,8 +2429,14 @@ void Spell::EffectSummonType(SpellEffIndex effIndex) } break; } - case SUMMON_TYPE_JEEVES: case SUMMON_TYPE_MINIPET: + // For companions, recalculate the position to ensure they spawn at the intended π/4 angle. + destTarget->Relocate(m_originalCaster->GetNearPosition( + m_originalCaster->GetDistance2d(destTarget->GetPositionX(), destTarget->GetPositionY()), + MINI_PET_SUMMON_ANGLE + )); + [[fallthrough]]; + case SUMMON_TYPE_JEEVES: { summon = m_caster->GetMap()->SummonCreature(entry, *destTarget, properties, duration, m_originalCaster, m_spellInfo->Id, 0, personalSpawn); if (!summon || !summon->HasUnitTypeMask(UNIT_MASK_MINION)) @@ -2446,8 +2452,9 @@ void Spell::EffectSummonType(SpellEffIndex effIndex) //summon->AI()->EnterEvadeMode(); if (properties->Type != SUMMON_TYPE_JEEVES) { + summon->SetFacingToObject(m_originalCaster); summon->GetMotionMaster()->Clear(false); - summon->GetMotionMaster()->MoveFollow(m_originalCaster, PET_FOLLOW_DIST, summon->GetFollowAngle(), MOTION_SLOT_ACTIVE); + summon->GetMotionMaster()->MoveFollow(m_originalCaster, PET_FOLLOW_DIST, MINI_PET_FOLLOW_ANGLE, MOTION_SLOT_ACTIVE); } break; } diff --git a/src/server/scripts/Pet/pet_generic.cpp b/src/server/scripts/Pet/pet_generic.cpp index 6e91d2a19..165ccb0f5 100644 --- a/src/server/scripts/Pet/pet_generic.cpp +++ b/src/server/scripts/Pet/pet_generic.cpp @@ -160,7 +160,7 @@ struct npc_pet_gen_argent_pony_bridle : public ScriptedAI if (Unit* owner = me->GetCharmerOrOwner()) { me->GetMotionMaster()->Clear(false); - me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, me->GetFollowAngle(), MOTION_SLOT_ACTIVE); + me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, MINI_PET_FOLLOW_ANGLE, MOTION_SLOT_ACTIVE); } } @@ -709,7 +709,7 @@ struct npc_pet_gen_toxic_wasteling : public PassiveAI if (Unit* owner = me->GetCharmerOrOwner()) { me->GetMotionMaster()->Clear(false); - me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, me->GetFollowAngle(), MOTION_SLOT_ACTIVE); + me->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, MINI_PET_FOLLOW_ANGLE, MOTION_SLOT_ACTIVE); } me->AddAura(71854, me); // Growth checkTimer = 0; diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index 29269f537..823ad36d3 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -1083,7 +1083,7 @@ class spell_item_enchanted_broom_periodic : public AuraScript { if (owner->isMoving()) { - GetTarget()->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, GetTarget()->GetFollowAngle(), MOTION_SLOT_ACTIVE); + GetTarget()->GetMotionMaster()->MoveFollow(owner, PET_FOLLOW_DIST, MINI_PET_FOLLOW_ANGLE, MOTION_SLOT_ACTIVE); } else { From d237ea655242a966766db7893e2299d9b84cdbc1 Mon Sep 17 00:00:00 2001 From: Benjamin Jackson <38561765+heyitsbench@users.noreply.github.com> Date: Thu, 9 Oct 2025 14:10:43 -0400 Subject: [PATCH 038/140] fix(Core/Handlers): Properly limit equipment set name length to client maximum. (#23151) --- src/server/game/Handlers/CharacterHandler.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index 1bb8ac6ed..e18b7365e 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1754,9 +1754,21 @@ void WorldSession::HandleEquipmentSetSave(WorldPacket& recvData) std::string name; recvData >> name; + if (name.length() > 16) // Client limitation + { + LOG_ERROR("entities.player.cheat", "Character GUID {} tried to create equipment set {} with too long a name!", _player->GetGUID().ToString(), setGuid); + return; + } + std::string iconName; recvData >> iconName; + if (iconName.length() > 100) // DB limitation + { + LOG_ERROR("entities.player.cheat", "Character GUID {} tried to create equipment set {} with too long an icon name!", _player->GetGUID().ToString(), setGuid); + return; + } + EquipmentSet eqSet; eqSet.Guid = setGuid; From 5c053aabe58fcbebdce62686d81889c704c09704 Mon Sep 17 00:00:00 2001 From: sogladev Date: Thu, 9 Oct 2025 20:12:46 +0200 Subject: [PATCH 039/140] fix(Core/Battlefield): AddressSanitizer new-delete-type-mismatch (#23038) Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/server/game/Battlefield/Battlefield.h | 1 + 1 file changed, 1 insertion(+) diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h index ab00697c3..6b2abdfc5 100644 --- a/src/server/game/Battlefield/Battlefield.h +++ b/src/server/game/Battlefield/Battlefield.h @@ -146,6 +146,7 @@ class BfGraveyard { public: BfGraveyard(Battlefield* Bf); + virtual ~BfGraveyard() = default; // Method to changing who controls the graveyard void GiveControlTo(TeamId team); From a0fd1803208c63b55311a2ec19d08d92e1498ca1 Mon Sep 17 00:00:00 2001 From: Benjamin Jackson <38561765+heyitsbench@users.noreply.github.com> Date: Thu, 9 Oct 2025 15:57:16 -0400 Subject: [PATCH 040/140] fix(Scripts/Spells): Move Eye of Gruul and Soul Preserver to the same script. (#22692) Co-authored-by: sudlud --- .../healing-trance-script.sql | 4 + src/server/game/Entities/Unit/Unit.cpp | 22 ------ src/server/scripts/Spells/spell_item.cpp | 76 ++++++++++++++----- 3 files changed, 60 insertions(+), 42 deletions(-) create mode 100644 data/sql/updates/pending_db_world/healing-trance-script.sql diff --git a/data/sql/updates/pending_db_world/healing-trance-script.sql b/data/sql/updates/pending_db_world/healing-trance-script.sql new file mode 100644 index 000000000..162e93a0e --- /dev/null +++ b/data/sql/updates/pending_db_world/healing-trance-script.sql @@ -0,0 +1,4 @@ +DELETE FROM `spell_script_names` WHERE `spell_id` IN (37705, 60510); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(37705, 'spell_item_healing_trance'), +(60510, 'spell_item_healing_trance'); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index addcf5b2b..4a26367b5 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -9289,28 +9289,6 @@ bool Unit::HandleProcTriggerSpell(Unit* victim, uint32 damage, AuraEffect* trigg { switch (auraSpellInfo->Id) { - // Soul Preserver - case 60510: - { - switch (getClass()) - { - case CLASS_DRUID: - trigger_spell_id = 60512; - break; - case CLASS_PALADIN: - trigger_spell_id = 60513; - break; - case CLASS_PRIEST: - trigger_spell_id = 60514; - break; - case CLASS_SHAMAN: - trigger_spell_id = 60515; - break; - } - - target = this; - break; - } case 37657: // Lightning Capacitor case 54841: // Thunder Capacitor case 67712: // Item - Coliseum 25 Normal Caster Trinket diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index 823ad36d3..44d52f0e7 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -1206,27 +1206,38 @@ class spell_item_direbrew_remote_aura : public AuraScript } }; -enum EyeOfGruul +enum HealingTrance { - SPELL_DRUID_ITEM_HEALING_TRANCE = 37721, - SPELL_PALADIN_ITEM_HEALING_TRANCE = 37723, - SPELL_PRIEST_ITEM_HEALING_TRANCE = 37706, - SPELL_SHAMAN_ITEM_HEALING_TRANCE = 37722 + SPELL_HEALING_DISCOUNT = 37705, + SPELL_SOUL_PRESERVER = 60510, + SPELL_PRIEST_EYE_OF_GRUUL_HEALING_TRANCE = 37706, + SPELL_DRUID_EYE_OF_GRUUL_HEALING_TRANCE = 37721, + SPELL_SHAMAN_EYE_OF_GRUUL_HEALING_TRANCE = 37722, + SPELL_PALADIN_EYE_OF_GRUUL_HEALING_TRANCE = 37723, + SPELL_DRUID_SOUL_PRESERVER_HEALING_TRANCE = 60512, + SPELL_PALADIN_SOUL_PRESERVER_HEALING_TRANCE = 60513, + SPELL_PRIEST_SOUL_PRESERVER_HEALING_TRANCE = 60514, + SPELL_SHAMAN_SOUL_PRESERVER_HEALING_TRANCE = 60515, }; // 37705 - Healing Discount -class spell_item_eye_of_gruul_healing_discount : public AuraScript +// 60510 - Soul Preserver +class spell_item_healing_trance : public AuraScript { - PrepareAuraScript(spell_item_eye_of_gruul_healing_discount); + PrepareAuraScript(spell_item_healing_trance); bool Validate(SpellInfo const* /*spellInfo*/) override { return ValidateSpellInfo( { - SPELL_DRUID_ITEM_HEALING_TRANCE, - SPELL_PALADIN_ITEM_HEALING_TRANCE, - SPELL_PRIEST_ITEM_HEALING_TRANCE, - SPELL_SHAMAN_ITEM_HEALING_TRANCE + SPELL_PRIEST_EYE_OF_GRUUL_HEALING_TRANCE, + SPELL_DRUID_EYE_OF_GRUUL_HEALING_TRANCE, + SPELL_SHAMAN_EYE_OF_GRUUL_HEALING_TRANCE, + SPELL_PALADIN_EYE_OF_GRUUL_HEALING_TRANCE, + SPELL_DRUID_SOUL_PRESERVER_HEALING_TRANCE, + SPELL_PALADIN_SOUL_PRESERVER_HEALING_TRANCE, + SPELL_PRIEST_SOUL_PRESERVER_HEALING_TRANCE, + SPELL_SHAMAN_SOUL_PRESERVER_HEALING_TRANCE, }); } @@ -1235,32 +1246,57 @@ class spell_item_eye_of_gruul_healing_discount : public AuraScript PreventDefaultAction(); if (Unit* unitTarget = GetTarget()) { - uint32 spell_id = 0; - switch (unitTarget->getClass()) + uint32 const itemSpell = GetSpellInfo()->Id; + uint32 spellId = 0; + + if (itemSpell == SPELL_HEALING_DISCOUNT) { + switch (unitTarget->getClass()) + { case CLASS_DRUID: - spell_id = SPELL_DRUID_ITEM_HEALING_TRANCE; + spellId = SPELL_DRUID_EYE_OF_GRUUL_HEALING_TRANCE; break; case CLASS_PALADIN: - spell_id = SPELL_PALADIN_ITEM_HEALING_TRANCE; + spellId = SPELL_PALADIN_EYE_OF_GRUUL_HEALING_TRANCE; break; case CLASS_PRIEST: - spell_id = SPELL_PRIEST_ITEM_HEALING_TRANCE; + spellId = SPELL_PRIEST_EYE_OF_GRUUL_HEALING_TRANCE; break; case CLASS_SHAMAN: - spell_id = SPELL_SHAMAN_ITEM_HEALING_TRANCE; + spellId = SPELL_SHAMAN_EYE_OF_GRUUL_HEALING_TRANCE; break; default: return; // ignore for non-healing classes + } + } + else if (itemSpell == SPELL_SOUL_PRESERVER) + { + switch (unitTarget->getClass()) + { + case CLASS_DRUID: + spellId = SPELL_DRUID_SOUL_PRESERVER_HEALING_TRANCE; + break; + case CLASS_PALADIN: + spellId = SPELL_PALADIN_SOUL_PRESERVER_HEALING_TRANCE; + break; + case CLASS_PRIEST: + spellId = SPELL_PRIEST_SOUL_PRESERVER_HEALING_TRANCE; + break; + case CLASS_SHAMAN: + spellId = SPELL_SHAMAN_SOUL_PRESERVER_HEALING_TRANCE; + break; + default: + return; // ignore for non-healing classes + } } - unitTarget->CastSpell(unitTarget, spell_id, true, nullptr, aurEff); + unitTarget->CastSpell(unitTarget, spellId, true, nullptr, aurEff); } } void Register() override { - OnEffectProc += AuraEffectProcFn(spell_item_eye_of_gruul_healing_discount::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); + OnEffectProc += AuraEffectProcFn(spell_item_healing_trance::HandleProc, EFFECT_0, SPELL_AURA_PROC_TRIGGER_SPELL); } }; @@ -4292,7 +4328,7 @@ void AddSC_item_spell_scripts() RegisterSpellScript(spell_item_summon_or_dismiss); RegisterSpellScript(spell_item_draenic_pale_ale); RegisterSpellAndAuraScriptPair(spell_item_direbrew_remote, spell_item_direbrew_remote_aura); - RegisterSpellScript(spell_item_eye_of_gruul_healing_discount); + RegisterSpellScript(spell_item_healing_trance); RegisterSpellScript(spell_item_summon_argent_knight); RegisterSpellScript(spell_item_instant_statue); // 23074 Arcanite Dragonling From cc6a256307699dcad0e1deb9cafed0d6df9b4021 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Thu, 9 Oct 2025 19:58:18 +0000 Subject: [PATCH 041/140] chore(DB): import pending files Referenced commit(s): a0fd1803208c63b55311a2ec19d08d92e1498ca1 --- .../healing-trance-script.sql => db_world/2025_10_09_04.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/healing-trance-script.sql => db_world/2025_10_09_04.sql} (82%) diff --git a/data/sql/updates/pending_db_world/healing-trance-script.sql b/data/sql/updates/db_world/2025_10_09_04.sql similarity index 82% rename from data/sql/updates/pending_db_world/healing-trance-script.sql rename to data/sql/updates/db_world/2025_10_09_04.sql index 162e93a0e..2831a290f 100644 --- a/data/sql/updates/pending_db_world/healing-trance-script.sql +++ b/data/sql/updates/db_world/2025_10_09_04.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_09_03 -> 2025_10_09_04 DELETE FROM `spell_script_names` WHERE `spell_id` IN (37705, 60510); INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES (37705, 'spell_item_healing_trance'), From f670387ad4f1738c0e93fbb96e1909f44361e290 Mon Sep 17 00:00:00 2001 From: Benjamin Jackson <38561765+heyitsbench@users.noreply.github.com> Date: Fri, 10 Oct 2025 01:02:00 -0400 Subject: [PATCH 042/140] refactor(Core/Packets): Rewrite various calendar and complaint packets to modern class. (#22884) --- src/server/game/Handlers/CalendarHandler.cpp | 36 +++------ src/server/game/Handlers/MiscHandler.cpp | 33 +-------- src/server/game/Server/Packets/AllPackets.h | 1 + .../game/Server/Packets/CalendarPackets.cpp | 41 +++++++++++ .../game/Server/Packets/CalendarPackets.h | 73 +++++++++++++++++++ .../game/Server/Packets/MiscPackets.cpp | 28 +++++++ src/server/game/Server/Packets/MiscPackets.h | 26 +++++++ src/server/game/Server/WorldSession.h | 19 +++-- 8 files changed, 197 insertions(+), 60 deletions(-) create mode 100644 src/server/game/Server/Packets/CalendarPackets.cpp create mode 100644 src/server/game/Server/Packets/CalendarPackets.h diff --git a/src/server/game/Handlers/CalendarHandler.cpp b/src/server/game/Handlers/CalendarHandler.cpp index 53cccbf4e..6bb531636 100644 --- a/src/server/game/Handlers/CalendarHandler.cpp +++ b/src/server/game/Handlers/CalendarHandler.cpp @@ -35,6 +35,7 @@ Copied events should probably have a new owner #include "ArenaTeamMgr.h" #include "CalendarMgr.h" +#include "CalendarPackets.h" #include "DatabaseEnv.h" #include "DisableMgr.h" #include "GameEventMgr.h" @@ -184,43 +185,31 @@ void WorldSession::HandleCalendarGetCalendar(WorldPacket& /*recvData*/) SendPacket(&data); } -void WorldSession::HandleCalendarGetEvent(WorldPacket& recvData) +void WorldSession::HandleCalendarGetEvent(WorldPackets::Calendar::GetEvent& packet) { - uint64 eventId; - recvData >> eventId; + LOG_DEBUG("network", "CMSG_CALENDAR_GET_EVENT. Player [{}] Event [{}]", _player->GetGUID().ToString(), packet.EventId); - LOG_DEBUG("network", "CMSG_CALENDAR_GET_EVENT. Player [{}] Event [{}]", _player->GetGUID().ToString(), eventId); - - if (CalendarEvent* calendarEvent = sCalendarMgr->GetEvent(eventId)) + if (CalendarEvent* calendarEvent = sCalendarMgr->GetEvent(packet.EventId)) sCalendarMgr->SendCalendarEvent(_player->GetGUID(), *calendarEvent, CALENDAR_SENDTYPE_GET); else sCalendarMgr->SendCalendarCommandResult(_player->GetGUID(), CALENDAR_ERROR_EVENT_INVALID); } -void WorldSession::HandleCalendarGuildFilter(WorldPacket& recvData) +void WorldSession::HandleCalendarGuildFilter(WorldPackets::Calendar::GuildFilter& packet) { LOG_DEBUG("network", "CMSG_CALENDAR_GUILD_FILTER [{}]", _player->GetGUID().ToString()); - uint32 minLevel; - uint32 maxLevel; - uint32 minRank; - - recvData >> minLevel >> maxLevel >> minRank; - if (Guild* guild = sGuildMgr->GetGuildById(_player->GetGuildId())) - guild->MassInviteToEvent(this, minLevel, maxLevel, minRank); + guild->MassInviteToEvent(this, packet.MinimumLevel, packet.MaximumLevel, packet.MinimumRank); - LOG_DEBUG("network", "CMSG_CALENDAR_GUILD_FILTER: Min level [{}], Max level [{}], Min rank [{}]", minLevel, maxLevel, minRank); + LOG_DEBUG("network", "CMSG_CALENDAR_GUILD_FILTER: Min level [{}], Max level [{}], Min rank [{}]", packet.MinimumLevel, packet.MaximumLevel, packet.MinimumRank); } -void WorldSession::HandleCalendarArenaTeam(WorldPacket& recvData) +void WorldSession::HandleCalendarArenaTeam(WorldPackets::Calendar::ArenaTeam& packet) { LOG_DEBUG("network", "CMSG_CALENDAR_ARENA_TEAM [{}]", _player->GetGUID().ToString()); - uint32 arenaTeamId; - recvData >> arenaTeamId; - - if (ArenaTeam* team = sArenaTeamMgr->GetArenaTeamById(arenaTeamId)) + if (ArenaTeam* team = sArenaTeamMgr->GetArenaTeamById(packet.ArenaTeamId)) team->MassInviteToEvent(this); } @@ -763,14 +752,11 @@ void WorldSession::HandleCalendarEventModeratorStatus(WorldPacket& recvData) sCalendarMgr->SendCalendarCommandResult(guid, CALENDAR_ERROR_EVENT_INVALID); } -void WorldSession::HandleCalendarComplain(WorldPacket& recvData) +void WorldSession::HandleCalendarComplain(WorldPackets::Calendar::CalendarComplain& packet) { ObjectGuid guid = _player->GetGUID(); - uint64 eventId; - ObjectGuid complainGUID; - recvData >> eventId >> complainGUID; - LOG_DEBUG("network", "CMSG_CALENDAR_COMPLAIN [{}] EventId [{}] guid [{}]", guid.ToString(), eventId, complainGUID.ToString()); + LOG_DEBUG("network", "CMSG_CALENDAR_COMPLAIN [{}] EventId [{}] guid [{}]", guid.ToString(), packet.EventId, packet.ComplainGuid.ToString()); // what to do with complains? } diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 64673eb3e..bb2651c02 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -1138,45 +1138,18 @@ void WorldSession::HandleWhoisOpcode(WorldPacket& recv_data) LOG_DEBUG("network", "Received whois command from player {} for character {}", GetPlayer()->GetName(), charname); } -void WorldSession::HandleComplainOpcode(WorldPacket& recv_data) +void WorldSession::HandleComplainOpcode(WorldPackets::Misc::Complain& packet) { LOG_DEBUG("network", "WORLD: CMSG_COMPLAIN"); - uint8 spam_type; // 0 - mail, 1 - chat - ObjectGuid spammer_guid; - uint32 unk1 = 0; - uint32 unk2 = 0; - uint32 unk3 = 0; - uint32 unk4 = 0; - std::string description = ""; - recv_data >> spam_type; // unk 0x01 const, may be spam type (mail/chat) - recv_data >> spammer_guid; // player guid - switch (spam_type) - { - case 0: - recv_data >> unk1; // const 0 - recv_data >> unk2; // probably mail id - recv_data >> unk3; // const 0 - break; - case 1: - recv_data >> unk1; // probably language - recv_data >> unk2; // message type? - recv_data >> unk3; // probably channel id - recv_data >> unk4; // unk random value - recv_data >> description; // spam description string (messagetype, channel name, player name, message) - break; - } - // NOTE: all chat messages from this spammer automatically ignored by spam reporter until logout in case chat spam. // if it's mail spam - ALL mails from this spammer automatically removed by client // Complaint Received message - WorldPacket data(SMSG_COMPLAIN_RESULT, 1); - data << uint8(0); - SendPacket(&data); + SendPacket(WorldPackets::Misc::ComplainResult().Write()); LOG_DEBUG("network", "REPORT SPAM: type {}, {}, unk1 {}, unk2 {}, unk3 {}, unk4 {}, message {}", - spam_type, spammer_guid.ToString(), unk1, unk2, unk3, unk4, description); + packet.SpamType, packet.SpammerGuid.ToString(), packet.Unk1, packet.Unk2, packet.Unk3, packet.Unk4, packet.Description); } void WorldSession::HandleRealmSplitOpcode(WorldPacket& recv_data) diff --git a/src/server/game/Server/Packets/AllPackets.h b/src/server/game/Server/Packets/AllPackets.h index 498dafb90..c618303b4 100644 --- a/src/server/game/Server/Packets/AllPackets.h +++ b/src/server/game/Server/Packets/AllPackets.h @@ -19,6 +19,7 @@ #define AllPackets_h__ #include "BankPackets.h" +#include "CalendarPackets.h" #include "CharacterPackets.h" #include "ChatPackets.h" #include "CombatLogPackets.h" diff --git a/src/server/game/Server/Packets/CalendarPackets.cpp b/src/server/game/Server/Packets/CalendarPackets.cpp new file mode 100644 index 000000000..5710c0ff0 --- /dev/null +++ b/src/server/game/Server/Packets/CalendarPackets.cpp @@ -0,0 +1,41 @@ +/* + * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by the + * Free Software Foundation; either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#include "CalendarPackets.h" + +void WorldPackets::Calendar::GetEvent::Read() +{ + _worldPacket >> EventId; +} + +void WorldPackets::Calendar::GuildFilter::Read() +{ + _worldPacket >> MinimumLevel; + _worldPacket >> MaximumLevel; + _worldPacket >> MinimumRank; +} + +void WorldPackets::Calendar::ArenaTeam::Read() +{ + _worldPacket >> ArenaTeamId; +} + +void WorldPackets::Calendar::CalendarComplain::Read() +{ + _worldPacket >> EventId; + _worldPacket >> ComplainGuid; +} diff --git a/src/server/game/Server/Packets/CalendarPackets.h b/src/server/game/Server/Packets/CalendarPackets.h new file mode 100644 index 000000000..cfba1f146 --- /dev/null +++ b/src/server/game/Server/Packets/CalendarPackets.h @@ -0,0 +1,73 @@ +/* + * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU Affero General Public License as published by the + * Free Software Foundation; either version 3 of the License, or (at your + * option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along + * with this program. If not, see . + */ + +#ifndef CalendarPackets_h__ +#define CalendarPackets_h__ + +#include "Guild.h" +#include "Packet.h" + +namespace WorldPackets +{ + namespace Calendar + { + class GetEvent final : public ClientPacket + { + public: + GetEvent(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_GET_EVENT, std::move(packet)) {} + + void Read() override; + + uint64 EventId = 0; + }; + + class GuildFilter final : public ClientPacket + { + public: + GuildFilter(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_GUILD_FILTER, std::move(packet)) {} + + void Read() override; + + uint32 MinimumLevel = 1; + uint32 MaximumLevel = 1; + uint32 MinimumRank = GR_GUILDMASTER; + }; + + class ArenaTeam final : public ClientPacket + { + public: + ArenaTeam(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_ARENA_TEAM, std::move(packet)) {} + + void Read() override; + + uint32 ArenaTeamId = 0; + }; + + class CalendarComplain final : public ClientPacket + { + public: + CalendarComplain(WorldPacket&& packet) : ClientPacket(CMSG_CALENDAR_COMPLAIN, std::move(packet)) {} + + void Read() override; + + uint64 EventId = 0; + ObjectGuid ComplainGuid; + }; + } +} + +#endif // CalendarPackets_h__ diff --git a/src/server/game/Server/Packets/MiscPackets.cpp b/src/server/game/Server/Packets/MiscPackets.cpp index 109845381..4ff462fe0 100644 --- a/src/server/game/Server/Packets/MiscPackets.cpp +++ b/src/server/game/Server/Packets/MiscPackets.cpp @@ -140,3 +140,31 @@ WorldPacket const* WorldPackets::Misc::UITime::Write() return &_worldPacket; } + +void WorldPackets::Misc::Complain::Read() +{ + _worldPacket >> SpamType; // 0 - mail, 1 - chat + _worldPacket >> SpammerGuid; + switch (SpamType) + { + case 0: + _worldPacket >> Unk1; // const 0 + _worldPacket >> Unk2; // probably mail id + _worldPacket >> Unk3; // const 0 + break; + case 1: + _worldPacket >> Unk1; // probably language + _worldPacket >> Unk2; // message type? + _worldPacket >> Unk3; // probably channel id + _worldPacket >> Unk4; // unk random value + _worldPacket >> Description; // spam description string (messagetype, channel name, player name, message) + break; + } +} + +WorldPacket const* WorldPackets::Misc::ComplainResult::Write() +{ + _worldPacket << Unk; + + return &_worldPacket; +} diff --git a/src/server/game/Server/Packets/MiscPackets.h b/src/server/game/Server/Packets/MiscPackets.h index 7453ad7fc..0c9f66f95 100644 --- a/src/server/game/Server/Packets/MiscPackets.h +++ b/src/server/game/Server/Packets/MiscPackets.h @@ -210,6 +210,32 @@ namespace WorldPackets uint32 Time = 0; }; + + class Complain final : public ClientPacket + { + public: + Complain(WorldPacket&& packet) : ClientPacket(CMSG_COMPLAIN, std::move(packet)) {} + + void Read() override; + + uint8 SpamType = 0; // 0 - mail, 1 - chat + ObjectGuid SpammerGuid; + uint32 Unk1 = 0; + uint32 Unk2 = 0; + uint32 Unk3 = 0; + uint32 Unk4 = 0; + std::string Description = ""; + }; + + class ComplainResult final : public ServerPacket + { + public: + ComplainResult() : ServerPacket(SMSG_COMPLAIN_RESULT, 1) {} + + WorldPacket const* Write() override; + + uint8 Unk = 0; + }; } } diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 8f0a8fd59..33ccaaa4f 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -150,6 +150,7 @@ namespace WorldPackets { class MinimapPingClient; class RandomRollClient; + class Complain; } namespace Pet @@ -189,6 +190,14 @@ namespace WorldPackets class ItemRefundInfo; class ItemRefund; } + + namespace Calendar + { + class GetEvent; + class GuildFilter; + class ArenaTeam; + class CalendarComplain; + } } enum AccountDataType @@ -1036,7 +1045,7 @@ public: // opcodes handlers void HandleAreaSpiritHealerQueueOpcode(WorldPacket& recvData); void HandleCancelMountAuraOpcode(WorldPacket& recvData); void HandleSelfResOpcode(WorldPacket& recvData); - void HandleComplainOpcode(WorldPacket& recvData); + void HandleComplainOpcode(WorldPackets::Misc::Complain& packet); void HandleRequestPetInfo(WorldPackets::Pet::RequestPetInfo& packet); // Socket gem @@ -1073,9 +1082,9 @@ public: // opcodes handlers // Calendar void HandleCalendarGetCalendar(WorldPacket& recvData); - void HandleCalendarGetEvent(WorldPacket& recvData); - void HandleCalendarGuildFilter(WorldPacket& recvData); - void HandleCalendarArenaTeam(WorldPacket& recvData); + void HandleCalendarGetEvent(WorldPackets::Calendar::GetEvent& packet); + void HandleCalendarGuildFilter(WorldPackets::Calendar::GuildFilter& packet); + void HandleCalendarArenaTeam(WorldPackets::Calendar::ArenaTeam& packet); void HandleCalendarAddEvent(WorldPacket& recvData); void HandleCalendarUpdateEvent(WorldPacket& recvData); void HandleCalendarRemoveEvent(WorldPacket& recvData); @@ -1085,7 +1094,7 @@ public: // opcodes handlers void HandleCalendarEventRemoveInvite(WorldPacket& recvData); void HandleCalendarEventStatus(WorldPacket& recvData); void HandleCalendarEventModeratorStatus(WorldPacket& recvData); - void HandleCalendarComplain(WorldPacket& recvData); + void HandleCalendarComplain(WorldPackets::Calendar::CalendarComplain& packet); void HandleCalendarGetNumPending(WorldPacket& recvData); void HandleCalendarEventSignup(WorldPacket& recvData); From 21724b51913fd2674260cb93c6e4b4ad63dfb144 Mon Sep 17 00:00:00 2001 From: Benjamin Jackson <38561765+heyitsbench@users.noreply.github.com> Date: Fri, 10 Oct 2025 01:02:44 -0400 Subject: [PATCH 043/140] fix(Scripts/Karazhan): remove Blood Mirror auras from Mirkblood when mirrored target dies (#23159) --- .../EasternKingdoms/Karazhan/boss_tenris_mirkblood.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_tenris_mirkblood.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_tenris_mirkblood.cpp index bed336447..8784c7991 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_tenris_mirkblood.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_tenris_mirkblood.cpp @@ -123,6 +123,15 @@ struct boss_tenris_mirkblood : public BossAI return; DoCast(victim, SPELL_SUMMON_SANGUINE_SPIRIT_ON_KILL); + + if (!_mirrorTarget) + return; + + if (victim == _mirrorTarget) + { + me->RemoveAurasDueToSpell(SPELL_BLOOD_MIRROR0); + me->RemoveAurasDueToSpell(SPELL_BLOOD_MIRROR1); + } } void DamageTaken(Unit* attacker, uint32& damage, DamageEffectType damageType, SpellSchoolMask damageSchoolMask) override From b7d7089da6302d6ed487c850267476f6a7ec63f9 Mon Sep 17 00:00:00 2001 From: Benjamin Jackson <38561765+heyitsbench@users.noreply.github.com> Date: Fri, 10 Oct 2025 11:37:14 -0400 Subject: [PATCH 044/140] fix(Core/Entities): Daily and other quests should grant XP when rewarded on subsequent completions. (#23160) --- src/server/game/Entities/Player/PlayerQuest.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/game/Entities/Player/PlayerQuest.cpp b/src/server/game/Entities/Player/PlayerQuest.cpp index 9f663ff2f..a8307c788 100644 --- a/src/server/game/Entities/Player/PlayerQuest.cpp +++ b/src/server/game/Entities/Player/PlayerQuest.cpp @@ -740,9 +740,9 @@ void Player::RewardQuest(Quest const* quest, uint32 reward, Object* questGiver, if (log_slot < MAX_QUEST_LOG_SIZE) SetQuestSlot(log_slot, 0); - bool rewarded = IsQuestRewarded(quest_id) && !quest->IsDFQuest(); + bool const rewarded = IsQuestRewarded(quest_id) && !quest->IsDFQuest() && !(quest->IsDaily() || quest->IsWeekly() || quest->IsMonthly()); - // Not give XP in case already completed once repeatable quest + // Repeatable quests (not time-based reset ones) should not give XP on subsequent completions uint32 XP = rewarded ? 0 : CalculateQuestRewardXP(quest); sScriptMgr->OnPlayerQuestComputeXP(this, quest, XP); From dd1f6f776cf7c9dba989706fc668deb97aaea611 Mon Sep 17 00:00:00 2001 From: privatecore Date: Fri, 10 Oct 2025 21:53:36 +0200 Subject: [PATCH 045/140] fix(Core/Player): Fix NotAvoidSatisfy script hook to reference the current player (#23004) --- src/server/game/Entities/Player/PlayerStorage.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/game/Entities/Player/PlayerStorage.cpp b/src/server/game/Entities/Player/PlayerStorage.cpp index d45533ad6..a932af812 100644 --- a/src/server/game/Entities/Player/PlayerStorage.cpp +++ b/src/server/game/Entities/Player/PlayerStorage.cpp @@ -6833,7 +6833,7 @@ bool Player::Satisfy(DungeonProgressionRequirements const* ar, uint32 target_map || missingPlayerItems.size() || missingPlayerQuests.size() || missingPlayerAchievements.size() || missingLeaderItems.size() || missingLeaderQuests.size() || missingLeaderAchievements.size()) { - if (!sScriptMgr->OnPlayerNotAvoidSatisfy(partyLeader, ar, target_map, report)) + if (!sScriptMgr->OnPlayerNotAvoidSatisfy(this, ar, target_map, report)) return true; if (report) From 4867510cac89e12b56e95d5a60b7f88bfb4ecca6 Mon Sep 17 00:00:00 2001 From: grace-of-hainaut <104199792+grace-of-hainaut@users.noreply.github.com> Date: Fri, 10 Oct 2025 21:14:58 +0100 Subject: [PATCH 046/140] fix(Core): Correct fishing catch calculations (#23171) --- .../game/Entities/GameObject/GameObject.cpp | 37 +++++++++++-------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index f258db1ca..d8897ab12 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -1731,34 +1731,40 @@ void GameObject::Use(Unit* user) uint32 zone, subzone; GetZoneAndAreaId(zone, subzone); - int32 zone_skill = sObjectMgr->GetFishingBaseSkillLevel(subzone); - if (!zone_skill) - zone_skill = sObjectMgr->GetFishingBaseSkillLevel(zone); + int32 zoneSkill = sObjectMgr->GetFishingBaseSkillLevel(subzone); + if (!zoneSkill) + zoneSkill = sObjectMgr->GetFishingBaseSkillLevel(zone); //provide error, no fishable zone or area should be 0 - if (!zone_skill) + if (!zoneSkill) LOG_ERROR("sql.sql", "Fishable areaId {} are not properly defined in `skill_fishing_base_level`.", subzone); - int32 skill = player->GetSkillValue(SKILL_FISHING); + // no miss skill is zone skill + 95 since at least patch 2.1 + int32 const noMissSkill = zoneSkill + 95; + + int32 const skill = player->GetSkillValue(SKILL_FISHING); int32 chance; - if (skill < zone_skill) + // fishing pool catches are 100% + //TODO: find reasonable value for fishing hole search + GameObject* fishingHole = LookupFishingHoleAround(20.0f + CONTACT_DISTANCE); + if (fishingHole) + chance = 100; + else if (skill < noMissSkill) { - chance = int32(pow((double)skill / zone_skill, 2) * 100); + chance = int32(pow((double)skill / noMissSkill, 2) * 100); if (chance < 1) chance = 1; } else chance = 100; - int32 roll = irand(1, 100); + int32 const roll = irand(1, 100); - LOG_DEBUG("entities.gameobject", "Fishing check (skill: {} zone min skill: {} chance {} roll: {}", skill, zone_skill, chance, roll); + LOG_DEBUG("entities.gameobject", "Fishing check (skill: {} zone min skill: {} no-miss skill: {} chance {} roll: {})", skill, zoneSkill, noMissSkill, chance, roll); - if (sScriptMgr->OnPlayerUpdateFishingSkill(player, skill, zone_skill, chance, roll)) - { + if (sScriptMgr->OnPlayerUpdateFishingSkill(player, skill, zoneSkill, chance, roll)) player->UpdateFishingSkill(); - } // but you will likely cause junk in areas that require a high fishing skill (not yet implemented) if (chance >= roll) { @@ -1768,11 +1774,10 @@ void GameObject::Use(Unit* user) SetOwnerGUID(player->GetGUID()); SetSpellId(0); // prevent removing unintended auras at Unit::RemoveGameObject - //TODO: find reasonable value for fishing hole search - GameObject* ok = LookupFishingHoleAround(20.0f + CONTACT_DISTANCE); - if (ok) + // fishing pool catch + if (fishingHole) { - ok->Use(player); + fishingHole->Use(player); SetLootState(GO_JUST_DEACTIVATED); } else From 8a64eb05f71c14079fc788307de1889316edaea5 Mon Sep 17 00:00:00 2001 From: zeb139 <37308742+zeb139@users.noreply.github.com> Date: Fri, 10 Oct 2025 16:55:59 -0400 Subject: [PATCH 047/140] fix(Core): Deeprun Tram Subway timer/syncronization by loading grid (#23009) --- src/server/game/Maps/TransportMgr.cpp | 42 ++++++++++++++++++--------- src/server/game/Maps/TransportMgr.h | 2 ++ 2 files changed, 30 insertions(+), 14 deletions(-) diff --git a/src/server/game/Maps/TransportMgr.cpp b/src/server/game/Maps/TransportMgr.cpp index f065ccf56..a024a02b9 100644 --- a/src/server/game/Maps/TransportMgr.cpp +++ b/src/server/game/Maps/TransportMgr.cpp @@ -448,31 +448,45 @@ void TransportMgr::SpawnContinentTransports() LOG_INFO("server.loading", ">> Spawned {} continent motion transports in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); } + // Preloads Deeprun Tram to fix issues with Subway carts syncronization + /// @todo: This is a temporary workaround. Consider removing TransportMgr::PreloadGridsFromQuery() as part of fix. + /** + Takenbacon: "In the long run the most likely ideal fix would be to always spawn all transport types (and thus loading their grid) on map creation" + See https://github.com/azerothcore/azerothcore-wotlk/pull/23009 for more details. + */ + PreloadGridsFromQuery("SELECT map, position_x, position_y FROM gameobject g JOIN gameobject_template t ON g.id = t.entry WHERE t.type = 11 AND g.map = 369", count); + if (sWorld->getBoolConfig(CONFIG_ENABLE_CONTINENT_TRANSPORT_PRELOADING)) { // pussywizard: preload grids for continent static transports - QueryResult result2 = WorldDatabase.Query("SELECT map, position_x, position_y FROM gameobject g JOIN gameobject_template t ON g.id = t.entry WHERE t.type = 11"); + PreloadGridsFromQuery("SELECT map, position_x, position_y FROM gameobject g JOIN gameobject_template t ON g.id = t.entry WHERE t.type = 11 AND g.map != 369", count); + LOG_INFO("server.loading", ">> Preloaded grids for {} continent static transports in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); + } +} - if (result2) +void TransportMgr::PreloadGridsFromQuery(std::string const& query, uint32& count) +{ + if (QueryResult result = WorldDatabase.Query(query)) + { + do { - do - { - Field* fields = result2->Fetch(); - uint16 mapId = fields[0].Get(); - float x = fields[1].Get(); - float y = fields[2].Get(); + Field* fields = result->Fetch(); + uint16 mapId = fields[0].Get(); + float x = fields[1].Get(); + float y = fields[2].Get(); - MapEntry const* mapEntry = sMapStore.LookupEntry(mapId); - if (mapEntry && !mapEntry->Instanceable()) + if (MapEntry const* mapEntry = sMapStore.LookupEntry(mapId)) + { + if (!mapEntry->Instanceable()) + { if (Map* map = sMapMgr->CreateBaseMap(mapId)) { map->LoadGrid(x, y); ++count; } - } while (result2->NextRow()); - } - - LOG_INFO("server.loading", ">> Preloaded grids for {} continent static transports in {} ms", count, GetMSTimeDiffToNow(oldMSTime)); + } + } + } while (result->NextRow()); } } diff --git a/src/server/game/Maps/TransportMgr.h b/src/server/game/Maps/TransportMgr.h index 9767ab335..6f712657e 100644 --- a/src/server/game/Maps/TransportMgr.h +++ b/src/server/game/Maps/TransportMgr.h @@ -158,6 +158,8 @@ private: TransportInstanceMap _instanceTransports; TransportAnimationContainer _transportAnimations; + + void PreloadGridsFromQuery(std::string const& query, uint32& count); }; #define sTransportMgr TransportMgr::instance() From 864ca5a3244e94e4f16021ca1dcc4aeae01990f8 Mon Sep 17 00:00:00 2001 From: Annamaria <20357406+Annamaria-CC@users.noreply.github.com> Date: Fri, 10 Oct 2025 22:56:12 +0200 Subject: [PATCH 048/140] fix (db/smartscripts) : Milton Beats should be male (#22748) --- data/sql/updates/pending_db_world/miltonbeats.sql | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 data/sql/updates/pending_db_world/miltonbeats.sql diff --git a/data/sql/updates/pending_db_world/miltonbeats.sql b/data/sql/updates/pending_db_world/miltonbeats.sql new file mode 100644 index 000000000..a460ae17e --- /dev/null +++ b/data/sql/updates/pending_db_world/miltonbeats.sql @@ -0,0 +1,3 @@ +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 13082) AND (`source_type` = 0) AND (`id` = 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 +(13082, 0, 2, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Milton Beats - On Respawn - Morph To Model 4016'); From 4bd945e950f3a5f4bbeda5e910b8fb0c8f65a708 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 10 Oct 2025 20:57:02 +0000 Subject: [PATCH 049/140] chore(DB): import pending files Referenced commit(s): 8a64eb05f71c14079fc788307de1889316edaea5 --- .../miltonbeats.sql => db_world/2025_10_10_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/miltonbeats.sql => db_world/2025_10_10_00.sql} (94%) diff --git a/data/sql/updates/pending_db_world/miltonbeats.sql b/data/sql/updates/db_world/2025_10_10_00.sql similarity index 94% rename from data/sql/updates/pending_db_world/miltonbeats.sql rename to data/sql/updates/db_world/2025_10_10_00.sql index a460ae17e..19c84c018 100644 --- a/data/sql/updates/pending_db_world/miltonbeats.sql +++ b/data/sql/updates/db_world/2025_10_10_00.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_09_04 -> 2025_10_10_00 DELETE FROM `smart_scripts` WHERE (`entryorguid` = 13082) AND (`source_type` = 0) AND (`id` = 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 (13082, 0, 2, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 3, 0, 4016, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Milton Beats - On Respawn - Morph To Model 4016'); From a89e9899954dc759d196c586201ae44a4ca58740 Mon Sep 17 00:00:00 2001 From: Annamaria <20357406+Annamaria-CC@users.noreply.github.com> Date: Fri, 10 Oct 2025 22:59:31 +0200 Subject: [PATCH 050/140] fix(DB/SAI): Sergeant Lukas should be male (#22747) --- data/sql/updates/pending_db_world/sergeantlukas.sql | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 data/sql/updates/pending_db_world/sergeantlukas.sql diff --git a/data/sql/updates/pending_db_world/sergeantlukas.sql b/data/sql/updates/pending_db_world/sergeantlukas.sql new file mode 100644 index 000000000..21f1d65d0 --- /dev/null +++ b/data/sql/updates/pending_db_world/sergeantlukas.sql @@ -0,0 +1,4 @@ +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 23723; +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 23723) AND (`source_type` = 0) AND (`id` = 0); +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 +(23723, 0, 0, 0, 11, 0, 100, 0, 0, 0, 0, 0, 0, 0, 3, 0, 2981, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Sergeant Lukas - On Respawn - Morph To Model 2981'); From c52d99bfc49008a377394e954eecd23059f76b53 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 10 Oct 2025 21:00:36 +0000 Subject: [PATCH 051/140] chore(DB): import pending files Referenced commit(s): a89e9899954dc759d196c586201ae44a4ca58740 --- .../sergeantlukas.sql => db_world/2025_10_10_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/sergeantlukas.sql => db_world/2025_10_10_01.sql} (94%) diff --git a/data/sql/updates/pending_db_world/sergeantlukas.sql b/data/sql/updates/db_world/2025_10_10_01.sql similarity index 94% rename from data/sql/updates/pending_db_world/sergeantlukas.sql rename to data/sql/updates/db_world/2025_10_10_01.sql index 21f1d65d0..1bc945774 100644 --- a/data/sql/updates/pending_db_world/sergeantlukas.sql +++ b/data/sql/updates/db_world/2025_10_10_01.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_10_00 -> 2025_10_10_01 UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 23723; DELETE FROM `smart_scripts` WHERE (`entryorguid` = 23723) AND (`source_type` = 0) AND (`id` = 0); 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 9ce8bd0cc69242c409ad78857c690905f5011449 Mon Sep 17 00:00:00 2001 From: Tereneckla Date: Fri, 10 Oct 2025 21:37:36 +0000 Subject: [PATCH 052/140] fix(Core/Module): don't fallback to .dist for module configs (#22874) --- modules/CMakeLists.txt | 1 + src/common/Configuration/Config.cpp | 49 +++++++++++------------------ 2 files changed, 19 insertions(+), 31 deletions(-) diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt index 46c9d5e16..6c631988e 100644 --- a/modules/CMakeLists.txt +++ b/modules/CMakeLists.txt @@ -342,6 +342,7 @@ foreach(ModuleName ${MODULE_LIST__}) foreach(configFileName ${MODULE_CONFIG_LIST}) CopyModuleConfig("${MODULE_CONFIG_PATH}/${configFileName}") + string(REGEX REPLACE "\.dist$" "" configFileName ${configFileName}) set(CONFIG_LIST ${CONFIG_LIST}${configFileName},) message(STATUS " | * ${configFileName}") endforeach() diff --git a/src/common/Configuration/Config.cpp b/src/common/Configuration/Config.cpp index 5f653fa96..258d15d65 100644 --- a/src/common/Configuration/Config.cpp +++ b/src/common/Configuration/Config.cpp @@ -412,8 +412,14 @@ T ConfigMgr::GetValueDefault(std::string const& name, T const& def, bool showLog LOG_FATAL("server.loading", "> Config:\n\nFATAL ERROR: Missing property {} in config file {}, add \"{} = {}\" to this file or define '{}' as an environment variable\n\nYour server cannot start without this option!", name, _filename, name, Acore::ToString(def), envVarName); else + { + std::string configs = _filename; + if (!_moduleConfigFiles.empty()) + configs += " or module config"; + LOG_WARN("server.loading", "> Config: Missing property {} in config file {}, add \"{} = {}\" to this file or define '{}' as an environment variable.", - name, _filename, name, Acore::ToString(def), envVarName); + name, configs, name, def, envVarName); + } } return def; } @@ -471,8 +477,14 @@ std::string ConfigMgr::GetValueDefault(std::string const& name, std LOG_FATAL("server.loading", "> Config:\n\nFATAL ERROR: Missing property {} in config file {}, add \"{} = {}\" to this file or define '{}' as an environment variable.\n\nYour server cannot start without this option!", name, _filename, name, def, envVarName); else + { + std::string configs = _filename; + if (!_moduleConfigFiles.empty()) + configs += " or module config"; + LOG_WARN("server.loading", "> Config: Missing property {} in config file {}, add \"{} = {}\" to this file or define '{}' as an environment variable.", - name, _filename, name, def, envVarName); + name, configs, name, def, envVarName); + } } return def; @@ -588,38 +600,13 @@ bool ConfigMgr::LoadModulesConfigs(bool isReload /*= false*/, bool isNeedPrintIn // Start loading module configs std::string const& moduleConfigPath = GetConfigPath() + "modules/"; - bool isExistDefaultConfig = true; - bool isExistDistConfig = true; - for (auto const& distFileName : _additonalFiles) + for (auto const& fileName : _additonalFiles) { - std::string defaultFileName = distFileName; + bool isExistConfig = LoadAdditionalFile(moduleConfigPath + fileName, false, isReload); - if (!defaultFileName.empty()) - { - defaultFileName.erase(defaultFileName.end() - 5, defaultFileName.end()); - } - - // Load .conf.dist config - isExistDistConfig = LoadAdditionalFile(moduleConfigPath + distFileName, false, isReload); - - if (!isReload && !isExistDistConfig) - { - LOG_FATAL("server.loading", "> ConfigMgr::LoadModulesConfigs: Not found original config '{}'. Stop loading", distFileName); - ABORT(); - } - - // Load .conf config - isExistDefaultConfig = LoadAdditionalFile(moduleConfigPath + defaultFileName, true, isReload); - - if (isExistDefaultConfig && isExistDistConfig) - { - _moduleConfigFiles.emplace_back(defaultFileName); - } - else if (!isExistDefaultConfig && isExistDistConfig) - { - _moduleConfigFiles.emplace_back(distFileName); - } + if (isExistConfig) + _moduleConfigFiles.emplace_back(fileName); } if (isNeedPrintInfo) From 292f1a417d0906353eceeaa4cc1df8e8d1b1755f Mon Sep 17 00:00:00 2001 From: Benjamin Jackson <38561765+heyitsbench@users.noreply.github.com> Date: Fri, 10 Oct 2025 19:07:56 -0400 Subject: [PATCH 053/140] fix(Scripts/Spells): Add checks for Relief for the Fallen script. (#23168) --- src/server/scripts/Spells/spell_quest.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index 127bd957a..704a35424 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -1364,6 +1364,9 @@ class spell_q12937_relief_for_the_fallen : public AuraScript void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { + if (!GetCaster() || !GetCaster()->IsPlayer()) + return; + Player* caster = GetCaster()->ToPlayer(); Unit* target = GetUnitOwner(); if (target && target->ToCreature()) From 051a3c5ba885258773cd6dfe3ba4faf66275dc0a Mon Sep 17 00:00:00 2001 From: Ryan Turner Date: Sat, 11 Oct 2025 09:24:38 +0100 Subject: [PATCH 054/140] fix(DB/Loot): Kodo apparation no longer can be skinned (#23173) --- data/sql/updates/pending_db_world/rev_1760132966346437000.sql | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1760132966346437000.sql diff --git a/data/sql/updates/pending_db_world/rev_1760132966346437000.sql b/data/sql/updates/pending_db_world/rev_1760132966346437000.sql new file mode 100644 index 000000000..9cdd8c519 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1760132966346437000.sql @@ -0,0 +1,2 @@ +-- Removes skinloot ID from the kodo appration +UPDATE `creature_template` SET `skinloot` = 0 WHERE `entry` = 11521; From dcbc02c93a6d61d751435e9d3397674d00dda543 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 11 Oct 2025 08:31:50 +0000 Subject: [PATCH 055/140] chore(DB): import pending files Referenced commit(s): 051a3c5ba885258773cd6dfe3ba4faf66275dc0a --- .../rev_1760132966346437000.sql => db_world/2025_10_11_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1760132966346437000.sql => db_world/2025_10_11_00.sql} (72%) diff --git a/data/sql/updates/pending_db_world/rev_1760132966346437000.sql b/data/sql/updates/db_world/2025_10_11_00.sql similarity index 72% rename from data/sql/updates/pending_db_world/rev_1760132966346437000.sql rename to data/sql/updates/db_world/2025_10_11_00.sql index 9cdd8c519..939c91bd5 100644 --- a/data/sql/updates/pending_db_world/rev_1760132966346437000.sql +++ b/data/sql/updates/db_world/2025_10_11_00.sql @@ -1,2 +1,3 @@ +-- DB update 2025_10_10_01 -> 2025_10_11_00 -- Removes skinloot ID from the kodo appration UPDATE `creature_template` SET `skinloot` = 0 WHERE `entry` = 11521; From 43a54d4329bbed288b6dd5ed6de50c785b0b5766 Mon Sep 17 00:00:00 2001 From: arsinspace <140083535+arsinspace@users.noreply.github.com> Date: Sat, 11 Oct 2025 14:54:06 +0300 Subject: [PATCH 056/140] fix(Scripts/Gundrak): Fixed behavior for Colossus and Elemental (#23150) Co-authored-by: arsinspace --- .../Gundrak/boss_drakkari_colossus.cpp | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp index 18a30b7db..e4260080f 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp @@ -125,17 +125,18 @@ public: void Reset() override { BossAI::Reset(); - for (uint8 i = 0; i < 5; i++) - me->SummonCreature(NPC_LIVING_MOJO, mojoPosition[i].GetPositionX(), mojoPosition[i].GetPositionY(), mojoPosition[i].GetPositionZ(), 0, TEMPSUMMON_MANUAL_DESPAWN, 0); - - me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - } - - void InitializeAI() override - { - BossAI::InitializeAI(); - me->CastSpell(me, SPELL_FREEZE_ANIM, true); + if (!me->IsInEvadeMode()) + { + me->CastSpell(me, SPELL_FREEZE_ANIM, true); + me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + for (const auto & i : mojoPosition) + me->SummonCreature(NPC_LIVING_MOJO, i.GetPositionX(), i.GetPositionY(), i.GetPositionZ(), 0, TEMPSUMMON_MANUAL_DESPAWN, 0); + } + else + { + me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); + me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); + } } void JustReachedHome() override @@ -144,9 +145,9 @@ public: me->CastSpell(me, SPELL_FREEZE_ANIM, true); } - void JustEngagedWith(Unit* who) override + void ScheduleTasks() override { - BossAI::JustEngagedWith(who); + events.ScheduleEvent(EVENT_COLOSSUS_START_FIGHT, 1s); events.ScheduleEvent(EVENT_COLOSSUS_MIGHTY_BLOW, 10s); events.ScheduleEvent(EVENT_COLOSSUS_MORTAL_STRIKE, 7s); events.ScheduleEvent(EVENT_COLOSSUS_HEALTH_1, 1s); @@ -183,6 +184,7 @@ public: summons.Despawn(summon); if (summon->GetEntry() == NPC_DRAKKARI_ELEMENTAL) { + me->SetHealth(me->GetMaxHealth() / 2); me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->RemoveAurasDueToSpell(SPELL_FREEZE_ANIM); if (me->GetVictim()) @@ -231,7 +233,7 @@ public: events.ScheduleEvent(EVENT_COLOSSUS_HEALTH_1, 1s); break; case EVENT_COLOSSUS_HEALTH_2: - if (me->HealthBelowPct(21)) + if (me->HealthBelowPct(2)) { me->CastSpell(me, SPELL_EMERGE, false); me->CastSpell(me, SPELL_EMERGE_SUMMON, true); @@ -301,7 +303,7 @@ public: switch (events.ExecuteEvent()) { case EVENT_ELEMENTAL_HEALTH: - if (me->HealthBelowPct(51)) + if (me->HealthBelowPct(56)) { me->CastSpell(me, SPELL_FACE_ME, true); me->CastSpell(me, SPELL_SURGE_VISUAL, true); @@ -315,7 +317,7 @@ public: case EVENT_ELEMENTAL_SURGE: Talk(SAY_SURGE); me->CastSpell(me, SPELL_SURGE_VISUAL, true); - me->CastSpell(me->GetVictim(), SPELL_SURGE, false); + DoCastRandomTarget(SPELL_SURGE, 0, 40, true, false, true); events.ScheduleEvent(EVENT_ELEMENTAL_SURGE, 15s); break; case EVENT_ELEMENTAL_VOLLEY: From 1434cde99edc59901add4a61c8dbfaa5480ebeda Mon Sep 17 00:00:00 2001 From: Tereneckla Date: Sat, 11 Oct 2025 16:13:23 +0000 Subject: [PATCH 057/140] fix(Core/Player): Recalculate all StatModEffects on levelup (#23184) --- src/server/game/Entities/Player/Player.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 05c93ca7e..33e0ebe5d 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2500,6 +2500,7 @@ void Player::GiveLevel(uint8 level) m_Played_time[PLAYED_TIME_LEVEL] = 0; // Level Played Time reset _ApplyAllLevelScaleItemMods(false); + _RemoveAllAuraStatMods(); SetLevel(level); @@ -2522,6 +2523,7 @@ void Player::GiveLevel(uint8 level) UpdateSkillsToMaxSkillsForLevel(); _ApplyAllLevelScaleItemMods(true); + _ApplyAllAuraStatMods(); if (!isDead()) { From a14fe1c4de1cce963a168a58e07d7c734ea1147a Mon Sep 17 00:00:00 2001 From: Rocco Silipo <108557877+Rorschach91@users.noreply.github.com> Date: Sat, 11 Oct 2025 18:41:14 +0200 Subject: [PATCH 058/140] fix(DB/SAI): Move Rizzle Sprysprocket event to smartscript. (#23167) --- .../pending_db_world/Rizzle_Sprysprocket.sql | 112 ++++++ .../Kalimdor/kalimdor_script_loader.cpp | 2 - src/server/scripts/Kalimdor/zone_azshara.cpp | 361 ------------------ src/server/scripts/World/go_scripts.cpp | 3 +- 4 files changed, 114 insertions(+), 364 deletions(-) create mode 100644 data/sql/updates/pending_db_world/Rizzle_Sprysprocket.sql delete mode 100644 src/server/scripts/Kalimdor/zone_azshara.cpp diff --git a/data/sql/updates/pending_db_world/Rizzle_Sprysprocket.sql b/data/sql/updates/pending_db_world/Rizzle_Sprysprocket.sql new file mode 100644 index 000000000..b0a37ddfc --- /dev/null +++ b/data/sql/updates/pending_db_world/Rizzle_Sprysprocket.sql @@ -0,0 +1,112 @@ + +-- Add Waypoint +DELETE FROM `waypoints` WHERE (`entry` IN (2300200)); +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `orientation`, `point_comment`) VALUES +(2300200, 1, 3691.97, -3962.41, 35.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 2, 3675.02, -3960.49, 35.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 3, 3653.19, -3958.33, 33.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 4, 3621.12, -3958.51, 29.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 5, 3604.86, -3963, 29.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 6, 3569.94, -3970.25, 29.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 7, 3541.03, -3975.64, 29.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 8, 3510.84, -3978.71, 29.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 9, 3472.7, -3997.07, 29.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 10, 3439.15, -4014.55, 29.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 11, 3412.8, -4025.87, 29.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 12, 3384.95, -4038.04, 29.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 13, 3346.77, -4052.93, 29.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 14, 3299.56, -4071.59, 29.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 15, 3261.22, -4080.38, 30.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 16, 3220.68, -4083.09, 31.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 17, 3187.11, -4070.45, 33.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 18, 3162.78, -4062.75, 33.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 19, 3136.09, -4050.32, 33.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 20, 3119.47, -4044.51, 36.0363, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 21, 3098.95, -4019.8, 33.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 22, 3073.07, -4011.42, 33.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 23, 3051.71, -3993.37, 33.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 24, 3027.52, -3978.6, 33.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 25, 3003.78, -3960.14, 33.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 26, 2977.99, -3941.98, 31.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 27, 2964.57, -3932.07, 30.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 28, 2947.9, -3921.31, 29.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 29, 2924.91, -3910.8, 29.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 30, 2903.04, -3896.42, 29.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 31, 2884.75, -3874.03, 29.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 32, 2868.19, -3851.48, 29.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 33, 2854.62, -3819.72, 29.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 34, 2825.53, -3790.4, 29.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 35, 2804.31, -3773.05, 29.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 36, 2769.78, -3763.57, 29.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 37, 2727.23, -3745.92, 30.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 38, 2680.12, -3737.49, 30.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 39, 2647.62, -3739.94, 30.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 40, 2616.6, -3745.75, 30.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 41, 2589.38, -3731.97, 30.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 42, 2562.94, -3722.35, 31.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 43, 2521.05, -3716.6, 31.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 44, 2485.26, -3706.67, 31.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 45, 2458.93, -3696.67, 31.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 46, 2432, -3692.03, 31.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 47, 2399.59, -3681.97, 31.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 48, 2357.75, -3666.6, 31.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 49, 2311.99, -3656.88, 31.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 50, 2263.41, -3649.55, 31.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 51, 2209.05, -3641.76, 31.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 52, 2164.83, -3637.64, 31.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 53, 2122.42, -3639, 31.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 54, 2075.73, -3643.59, 31.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 55, 2033.59, -3649.52, 31.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 56, 1985.22, -3662.99, 31.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 57, 1927.09, -3679.56, 33.9118, NULL, 'Rizzle Sprysprocket escape'), +(2300200, 58, 1873.57, -3695.32, 33.9118, NULL, 'Rizzle Sprysprocket escape'); + +-- Set General SmartAI, Add Gossip ID, ScriptName, NpcFlag. +UPDATE `creature_template` SET `npcflag` = `npcflag` |1, `gossip_menu_id` = 21893, `ScriptName` = '', `AIName` = 'SmartAI' WHERE `entry` = 23002; + +-- Add SmartAI +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 23002); +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 +(23002, 0, 0, 1, 54, 0, 100, 0, 0, 0, 0, 0, 0, 0, 83, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle Sprysprocket - On Just Summoned - Remove Npc Flags Gossip'), +(23002, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 64, 12, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle Sprysprocket - On Just Summoned - Store Targetlist'), +(23002, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 39865, 2, 0, 1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle Sprysprocket - On Just Summoned - Cast \'Rizzle`s Blackjack\''), +(23002, 0, 3, 4, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle Sprysprocket - On Just Summoned - Say Line 0'), +(23002, 0, 4, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 80, 2300200, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle Sprysprocket - On Just Summoned - Run Script'), +(23002, 0, 5, 6, 60, 1, 100, 0, 15000, 20000, 25000, 30000, 0, 0, 11, 40525, 2, 0, 0, 0, 0, 12, 12, 0, 0, 0, 0, 0, 0, 0, 'Rizzle Sprysprocket - On Update - Cast \'Rizzle`s Frost Grenade\' (Phase 1)'), +(23002, 0, 6, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 12, 12, 0, 0, 0, 0, 0, 0, 0, 'Rizzle Sprysprocket - On Update - Say Line 1 (Phase 1)'), +(23002, 0, 7, 8, 101, 1, 100, 0, 1, 10, 1000, 1000, 1000, 0, 55, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle Sprysprocket - On 1 or More Players in Range - Stop Waypoint (Phase 1)'), +(23002, 0, 8, 9, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 28, 39912, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle Sprysprocket - On 1 or More Players in Range - Remove Aura \'Periodic Depth Charge Release\' (Phase 1)'), +(23002, 0, 9, 10, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 1, 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle Sprysprocket - On 1 or More Players in Range - Say Line 2 (Phase 1)'), +(23002, 0, 10, 11, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 82, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle Sprysprocket - On 1 or More Players in Range - Add Npc Flags Gossip (Phase 1)'), +(23002, 0, 11, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 22, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle Sprysprocket - On 1 or More Players in Range - Set Event Phase 0 (Phase 1)'), +(23002, 0, 12, 13, 62, 0, 100, 0, 21893, 0, 0, 0, 0, 0, 11, 39886, 0, 0, 0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle Sprysprocket - On Gossip Option 0 Selected - Cast \'Give Southfury Moonstone\''), +(23002, 0, 13, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 41, 3000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle Sprysprocket - On Gossip Option 0 Selected - Despawn In 3000 ms'), +(23002, 0, 14, 0, 58, 0, 100, 0, 58, 2300200, 0, 0, 0, 0, 41, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle Sprysprocket - On Path 2300200 Finished - Despawn Instant'); + +-- Set Action List +DELETE FROM `smart_scripts` WHERE (`source_type` = 9 AND `entryorguid` = 2300200); +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 +(2300200, 9, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 11, 23025, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle Sprysprocket - Actionlist - Cast \'Blink Cooldown Reduction\''), +(2300200, 9, 1, 0, 0, 0, 100, 0, 2000, 2000, 0, 0, 0, 0, 1, 3, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle Sprysprocket - Actionlist - Say Line 3'), +(2300200, 9, 2, 0, 0, 0, 100, 0, 500, 500, 0, 0, 0, 0, 11, 39871, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle Sprysprocket - Actionlist - Cast \'Rizzle`s Escape\''), +(2300200, 9, 3, 0, 0, 0, 100, 0, 1000, 1000, 0, 0, 0, 0, 11, 39912, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle Sprysprocket - Actionlist - Cast \'Periodic Depth Charge Release\''), +(2300200, 9, 4, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 22, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle Sprysprocket - Actionlist - Set Event Phase 1'), +(2300200, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 53, 1, 2300200, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle Sprysprocket - Actionlist - Start Waypoint Path 2300200'); + +-- Set Conditions +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` IN (15, 22)) AND (`SourceGroup` IN (8, 21893)) AND (`SourceEntry` IN (0, 23002)) AND (`SourceId` = 0) AND (`ElseGroup` = 0) AND (`ConditionTypeOrReference` = 47) AND (`ConditionTarget` = 0) AND (`ConditionValue1` = 10994) AND (`ConditionValue2` = 8) AND (`ConditionValue3` = 0); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 21893, 0, 0, 0, 47, 0, 10994, 8, 0, 0, 0, 0, '', 'Gossip displayed only if player has Chasing the Moonstone incomplete'), +(22, 8, 23002, 0, 0, 47, 0, 10994, 8, 0, 0, 0, 0, '', 'Event occurs only if player has Chasing the Moonstone incomplete.'); + +-- Set SmartAI (Rizzle's Depth Charge) +UPDATE `creature_template` SET `AIName` = 'SmartAI', `ScriptName` = '' WHERE `entry` = 23025; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 23025); +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 +(23025, 0, 0, 1, 54, 0, 100, 0, 0, 0, 0, 0, 0, 0, 207, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle\'s Depth Charge - On Just Summoned - Set hover 1'), +(23025, 0, 1, 2, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 61, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle\'s Depth Charge - On Just Summoned - Set Swim On'), +(23025, 0, 2, 3, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 18, 33554432, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle\'s Depth Charge - On Just Summoned - Set Flags Not Selectable'), +(23025, 0, 3, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle\'s Depth Charge - On Just Summoned - Set Reactstate Passive'), +(23025, 0, 4, 5, 101, 0, 100, 0, 1, 5, 1000, 1000, 1000, 0, 11, 38576, 2, 0, 0, 0, 0, 21, 5, 0, 0, 0, 0, 0, 0, 0, 'Rizzle\'s Depth Charge - On 1 or More Players in Range - Cast \'Knockback\''), +(23025, 0, 5, 0, 61, 0, 100, 0, 0, 0, 0, 0, 0, 0, 41, 1000, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Rizzle\'s Depth Charge - On 1 or More Players in Range - Despawn In 1000 ms'); diff --git a/src/server/scripts/Kalimdor/kalimdor_script_loader.cpp b/src/server/scripts/Kalimdor/kalimdor_script_loader.cpp index 1e80e0982..8186c7f36 100644 --- a/src/server/scripts/Kalimdor/kalimdor_script_loader.cpp +++ b/src/server/scripts/Kalimdor/kalimdor_script_loader.cpp @@ -74,7 +74,6 @@ void AddSC_instance_wailing_caverns(); //Wailing caverns void AddSC_zulfarrak(); void AddSC_instance_zulfarrak(); //Zul'Farrak instance script void AddSC_ashenvale(); -void AddSC_azshara(); void AddSC_azuremyst_isle(); void AddSC_bloodmyst_isle(); void AddSC_boss_azuregos(); @@ -157,7 +156,6 @@ void AddKalimdorScripts() AddSC_zulfarrak(); AddSC_instance_zulfarrak(); //Zul'Farrak instance script AddSC_ashenvale(); - AddSC_azshara(); AddSC_azuremyst_isle(); AddSC_bloodmyst_isle(); AddSC_boss_azuregos(); diff --git a/src/server/scripts/Kalimdor/zone_azshara.cpp b/src/server/scripts/Kalimdor/zone_azshara.cpp deleted file mode 100644 index 1a10cec1d..000000000 --- a/src/server/scripts/Kalimdor/zone_azshara.cpp +++ /dev/null @@ -1,361 +0,0 @@ -/* - * This file is part of the AzerothCore Project. See AUTHORS file for Copyright information - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the GNU Affero General Public License as published by the - * Free Software Foundation; either version 3 of the License, or (at your - * option) any later version. - * - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for - * more details. - * - * You should have received a copy of the GNU General Public License along - * with this program. If not, see . - */ - -#include "CreatureScript.h" -#include "Player.h" -#include "ScriptedCreature.h" -#include "ScriptedGossip.h" - -/*#### -# npc_rizzle_sprysprocket -####*/ - -enum RizzleSprysprocketData -{ - QUEST_CHASING_THE_MOONSTONE = 10994, - - NPC_DEPTH_CHARGE = 23025, - - SPELL_RIZZLE_BLACKJACK = 39865, - SPELL_RIZZLE_ESCAPE = 39871, - SPELL_RIZZLE_FROST_GRENADE = 40525, - SPELL_DEPTH_CHARGE_TRAP = 38576, - SPELL_PERIODIC_DEPTH_CHARGE = 39912, - SPELL_GIVE_SOUTHFURY_MOONSTONE = 39886, - - SAY_RIZZLE_START = 0, - SAY_RIZZLE_GRENADE = 1, - SAY_RIZZLE_FINAL = 2, - MSG_ESCAPE_NOTICE = 3, - GOSSIP_GET_MOONSTONE = 21893 - -}; - -Position const WPs[58] = -{ - {3691.97f, -3962.41f, 35.9118f, 3.67f}, - {3675.02f, -3960.49f, 35.9118f, 3.67f}, - {3653.19f, -3958.33f, 33.9118f, 3.59f}, - {3621.12f, -3958.51f, 29.9118f, 3.48f}, - {3604.86f, -3963, 29.9118f, 3.48f}, - {3569.94f, -3970.25f, 29.9118f, 3.44f}, - {3541.03f, -3975.64f, 29.9118f, 3.41f}, - {3510.84f, -3978.71f, 29.9118f, 3.41f}, - {3472.7f, -3997.07f, 29.9118f, 3.35f}, - {3439.15f, -4014.55f, 29.9118f, 3.29f}, - {3412.8f, -4025.87f, 29.9118f, 3.25f}, - {3384.95f, -4038.04f, 29.9118f, 3.24f}, - {3346.77f, -4052.93f, 29.9118f, 3.22f}, - {3299.56f, -4071.59f, 29.9118f, 3.20f}, - {3261.22f, -4080.38f, 30.9118f, 3.19f}, - {3220.68f, -4083.09f, 31.9118f, 3.18f}, - {3187.11f, -4070.45f, 33.9118f, 3.16f}, - {3162.78f, -4062.75f, 33.9118f, 3.15f}, - {3136.09f, -4050.32f, 33.9118f, 3.07f}, - {3119.47f, -4044.51f, 36.0363f, 3.07f}, - {3098.95f, -4019.8f, 33.9118f, 3.07f}, - {3073.07f, -4011.42f, 33.9118f, 3.07f}, - {3051.71f, -3993.37f, 33.9118f, 3.02f}, - {3027.52f, -3978.6f, 33.9118f, 3.00f}, - {3003.78f, -3960.14f, 33.9118f, 2.98f}, - {2977.99f, -3941.98f, 31.9118f, 2.96f}, - {2964.57f, -3932.07f, 30.9118f, 2.96f}, - {2947.9f, -3921.31f, 29.9118f, 2.96f}, - {2924.91f, -3910.8f, 29.9118f, 2.94f}, - {2903.04f, -3896.42f, 29.9118f, 2.93f}, - {2884.75f, -3874.03f, 29.9118f, 2.90f}, - {2868.19f, -3851.48f, 29.9118f, 2.82f}, - {2854.62f, -3819.72f, 29.9118f, 2.80f}, - {2825.53f, -3790.4f, 29.9118f, 2.744f}, - {2804.31f, -3773.05f, 29.9118f, 2.71f}, - {2769.78f, -3763.57f, 29.9118f, 2.70f}, - {2727.23f, -3745.92f, 30.9118f, 2.69f}, - {2680.12f, -3737.49f, 30.9118f, 2.67f}, - {2647.62f, -3739.94f, 30.9118f, 2.66f}, - {2616.6f, -3745.75f, 30.9118f, 2.64f}, - {2589.38f, -3731.97f, 30.9118f, 2.61f}, - {2562.94f, -3722.35f, 31.9118f, 2.56f}, - {2521.05f, -3716.6f, 31.9118f, 2.55f}, - {2485.26f, -3706.67f, 31.9118f, 2.51f}, - {2458.93f, -3696.67f, 31.9118f, 2.51f}, - {2432, -3692.03f, 31.9118f, 2.46f}, - {2399.59f, -3681.97f, 31.9118f, 2.45f}, - {2357.75f, -3666.6f, 31.9118f, 2.44f}, - {2311.99f, -3656.88f, 31.9118f, 2.94f}, - {2263.41f, -3649.55f, 31.9118f, 3.02f}, - {2209.05f, -3641.76f, 31.9118f, 2.99f}, - {2164.83f, -3637.64f, 31.9118f, 3.15f}, - {2122.42f, -3639, 31.9118f, 3.21f}, - {2075.73f, -3643.59f, 31.9118f, 3.22f}, - {2033.59f, -3649.52f, 31.9118f, 3.42f}, - {1985.22f, -3662.99f, 31.9118f, 3.42f}, - {1927.09f, -3679.56f, 33.9118f, 3.42f}, - {1873.57f, -3695.32f, 33.9118f, 3.44f} -}; - -class npc_rizzle_sprysprocket : public CreatureScript -{ -public: - npc_rizzle_sprysprocket() : CreatureScript("npc_rizzle_sprysprocket") { } - - struct npc_rizzle_sprysprocketAI : public ScriptedAI - { - npc_rizzle_sprysprocketAI(Creature* creature) : ScriptedAI(creature) { } - - void Reset() override - { - SpellEscapeTimer = 1300; - TeleportTimer = 3500; - CheckTimer = 10000; - GrenadeTimer = 30000; - MustDieTimer = 3000; - CurrWP = 0; - - PlayerGUID.Clear(); - - MustDie = false; - Escape = false; - ContinueWP = false; - Reached = false; - } - - void JustEngagedWith(Unit* /*who*/) override { } - - void AttackStart(Unit* who) override - { - if (!who || PlayerGUID) - return; - - Player* player = who->ToPlayer(); - - if (player && player->GetQuestStatus(QUEST_CHASING_THE_MOONSTONE) == QUEST_STATUS_INCOMPLETE) - { - PlayerGUID = who->GetGUID(); - Talk(SAY_RIZZLE_START); - DoCast(who, SPELL_RIZZLE_BLACKJACK, false); - return; - } - } - - void sGossipSelect(Player* player, uint32 /*sender*/, uint32 /*action*/) override - { - CloseGossipMenuFor(player); - me->CastSpell(player, SPELL_GIVE_SOUTHFURY_MOONSTONE, true); - MustDieTimer = 3000; - MustDie = true; - } - - void MovementInform(uint32 type, uint32 id) override - { - if (type != POINT_MOTION_TYPE) - return; - - if (id == 57) - { - me->DespawnOrUnsummon(); - return; - } - - ++CurrWP; - ContinueWP = true; - } - - void UpdateAI(uint32 diff) override - { - if (MustDie) - { - if (MustDieTimer <= diff) - { - me->DespawnOrUnsummon(); - return; - } - else MustDieTimer -= diff; - } - - if (!Escape) - { - if (!PlayerGUID) - return; - - if (SpellEscapeTimer <= diff) - { - DoCast(me, SPELL_RIZZLE_ESCAPE, false); - SpellEscapeTimer = 10000; - } - else SpellEscapeTimer -= diff; - - if (TeleportTimer <= diff) - { - // temp solution - unit can't be teleported by core using spelleffect 5, only players - me->NearTeleportTo(3706.39f, -3969.15f, 35.9118f, me->GetOrientation()); - - //begin swimming and summon depth charges - Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID); - if (!player) - return; - - Talk(MSG_ESCAPE_NOTICE, player); - DoCast(me, SPELL_PERIODIC_DEPTH_CHARGE); - me->SetHover(true); - me->SetSwim(true); - me->SetSpeed(MOVE_RUN, 0.85f, true); - me->GetMotionMaster()->MovementExpired(); - me->GetMotionMaster()->MovePoint(CurrWP, WPs[CurrWP]); - Escape = true; - } - else TeleportTimer -= diff; - - return; - } - - if (ContinueWP) - { - me->GetMotionMaster()->MovePoint(CurrWP, WPs[CurrWP]); - ContinueWP = false; - } - - if (GrenadeTimer <= diff) - { - if (Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID)) - { - Talk(SAY_RIZZLE_GRENADE, player); - DoCast(player, SPELL_RIZZLE_FROST_GRENADE, true); - } - GrenadeTimer = 30000; - } - else GrenadeTimer -= diff; - - if (CheckTimer <= diff) - { - Player* player = ObjectAccessor::GetPlayer(*me, PlayerGUID); - if (!player) - { - me->DespawnOrUnsummon(); - return; - } - - if (me->IsWithinDist(player, 10) && me->GetPositionX() > player->GetPositionX() && !Reached) - { - Talk(SAY_RIZZLE_FINAL); - me->ReplaceAllNpcFlags(NPCFlags(1)); - me->SetFaction(FACTION_FRIENDLY); - me->GetMotionMaster()->MoveIdle(); - me->RemoveAurasDueToSpell(SPELL_PERIODIC_DEPTH_CHARGE); - Reached = true; - } - - CheckTimer = 1000; - } - else CheckTimer -= diff; - } - - private: - ObjectGuid PlayerGUID; - uint32 SpellEscapeTimer; - uint32 TeleportTimer; - uint32 CheckTimer; - uint32 GrenadeTimer; - uint32 MustDieTimer; - uint32 CurrWP; - bool MustDie; - bool Escape; - bool ContinueWP; - bool Reached; - }; - - bool OnGossipHello(Player* player, Creature* creature) override - { - if (player->GetQuestStatus(QUEST_CHASING_THE_MOONSTONE) != QUEST_STATUS_INCOMPLETE) - return true; - - AddGossipItemFor(player, GOSSIP_GET_MOONSTONE, 0, GOSSIP_SENDER_MAIN, GOSSIP_ACTION_INFO_DEF + 1); - SendGossipMenuFor(player, 10811, creature->GetGUID()); - - return true; - } - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_rizzle_sprysprocketAI(creature); - } -}; - -/*#### -# npc_depth_charge -####*/ -class npc_depth_charge : public CreatureScript -{ -public: - npc_depth_charge() : CreatureScript("npc_depth_charge") { } - - struct npc_depth_chargeAI : public ScriptedAI - { - npc_depth_chargeAI(Creature* creature) : ScriptedAI(creature) { } - - bool WeMustDie; - uint32 WeMustDieTimer; - - void Reset() override - { - me->SetHover(true); - me->SetSwim(true); - me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - WeMustDie = false; - WeMustDieTimer = 1000; - } - - void JustEngagedWith(Unit* /*who*/) override { } - - void AttackStart(Unit* /*who*/) override { } - - void MoveInLineOfSight(Unit* who) override - { - if (!who) - return; - - if (who->IsPlayer() && me->IsWithinDistInMap(who, 5)) - { - DoCast(who, SPELL_DEPTH_CHARGE_TRAP); - WeMustDie = true; - return; - } - } - - void UpdateAI(uint32 diff) override - { - if (WeMustDie) - { - if (WeMustDieTimer <= diff) - me->DespawnOrUnsummon(); - else - WeMustDieTimer -= diff; - } - return; - } - }; - - CreatureAI* GetAI(Creature* creature) const override - { - return new npc_depth_chargeAI(creature); - } -}; - -void AddSC_azshara() -{ - new npc_rizzle_sprysprocket(); - new npc_depth_charge(); -} diff --git a/src/server/scripts/World/go_scripts.cpp b/src/server/scripts/World/go_scripts.cpp index ff9adc963..a190384b2 100644 --- a/src/server/scripts/World/go_scripts.cpp +++ b/src/server/scripts/World/go_scripts.cpp @@ -1066,7 +1066,7 @@ class go_southfury_moonstone : public GameObjectScript public: go_southfury_moonstone() : GameObjectScript("go_southfury_moonstone") { } - bool OnGossipHello(Player* player, GameObject* /*go*/) override + bool OnGossipHello(Player* player, GameObject* go) override { //implicitTarget=48 not implemented as of writing this code, and manual summon may be just ok for our purpose //player->CastSpell(player, SPELL_SUMMON_RIZZLE, false); @@ -1076,6 +1076,7 @@ public: // no need casting spell blackjack, it's casted by script npc_rizzle_sprysprocket. //creature->CastSpell(player, SPELL_BLACKJACK, false); creature->AI()->AttackStart(player); + go->DespawnOrUnsummon(8000ms); } return false; From bc89aa561c13363cca8a2ab77ac792c3272bccb1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 11 Oct 2025 16:42:14 +0000 Subject: [PATCH 059/140] chore(DB): import pending files Referenced commit(s): a14fe1c4de1cce963a168a58e07d7c734ea1147a --- .../Rizzle_Sprysprocket.sql => db_world/2025_10_11_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/Rizzle_Sprysprocket.sql => db_world/2025_10_11_01.sql} (99%) diff --git a/data/sql/updates/pending_db_world/Rizzle_Sprysprocket.sql b/data/sql/updates/db_world/2025_10_11_01.sql similarity index 99% rename from data/sql/updates/pending_db_world/Rizzle_Sprysprocket.sql rename to data/sql/updates/db_world/2025_10_11_01.sql index b0a37ddfc..11ce6f8d7 100644 --- a/data/sql/updates/pending_db_world/Rizzle_Sprysprocket.sql +++ b/data/sql/updates/db_world/2025_10_11_01.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_11_00 -> 2025_10_11_01 -- Add Waypoint DELETE FROM `waypoints` WHERE (`entry` IN (2300200)); From 31b11d0d11192a6c2494709bc75ae22b856e0b64 Mon Sep 17 00:00:00 2001 From: killerwife Date: Sat, 11 Oct 2025 18:49:43 +0200 Subject: [PATCH 060/140] fix(Core/Movement): rework root protocol with ack in mind (#23147) --- src/server/game/Entities/Player/Player.cpp | 21 +--- src/server/game/Entities/Player/Player.h | 2 - src/server/game/Entities/Unit/Unit.cpp | 106 ++++++++---------- src/server/game/Entities/Unit/Unit.h | 3 +- src/server/game/Entities/Unit/UnitDefines.h | 4 +- src/server/game/Handlers/CharacterHandler.cpp | 5 +- src/server/game/Handlers/MiscHandler.cpp | 4 +- src/server/game/Handlers/MovementHandler.cpp | 81 ++++--------- src/server/game/Server/Protocol/Opcodes.cpp | 2 +- src/server/game/Server/WorldSession.h | 1 - 10 files changed, 86 insertions(+), 143 deletions(-) diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 33e0ebe5d..d310563ce 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -4431,12 +4431,6 @@ void Player::SetMovement(PlayerMovementType pType) const PackedGuid& guid = GetPackGUID(); switch (pType) { - case MOVE_ROOT: - data.Initialize(SMSG_FORCE_MOVE_ROOT, guid.size() + 4); - break; - case MOVE_UNROOT: - data.Initialize(SMSG_FORCE_MOVE_UNROOT, guid.size() + 4); - break; case MOVE_WATER_WALK: data.Initialize(SMSG_MOVE_WATER_WALK, guid.size() + 4); break; @@ -4490,10 +4484,10 @@ void Player::BuildPlayerRepop() SetHealth(1); // convert player body to ghost SetMovement(MOVE_WATER_WALK); SetWaterWalking(true); - if (!GetSession()->isLogingOut()) - { - SetMovement(MOVE_UNROOT); - } + + if (!IsImmobilizedState()) + SendMoveRoot(false); + RemoveUnitFlag(UNIT_FLAG_SKINNABLE); // BG - remove insignia related int32 corpseReclaimDelay = CalculateCorpseReclaimDelay(); if (corpseReclaimDelay >= 0) @@ -4530,7 +4524,7 @@ void Player::ResurrectPlayer(float restore_percent, bool applySickness) setDeathState(DeathState::Alive); SetMovement(MOVE_LAND_WALK); - SetMovement(MOVE_UNROOT); + SendMoveRoot(false); SetWaterWalking(false); m_deathTimer = 0; @@ -4594,7 +4588,7 @@ void Player::KillPlayer() if (IsFlying() && !GetTransport()) GetMotionMaster()->MoveFall(); - SetMovement(MOVE_ROOT); + SendMoveRoot(true); StopMirrorTimers(); //disable timers(bars) @@ -11703,9 +11697,6 @@ void Player::SendInitialPacketsAfterAddToMap() GetZoneAndAreaId(newzone, newarea); UpdateZone(newzone, newarea); // also call SendInitWorldStates(); - if (HasStunAura()) - SetMovement(MOVE_ROOT); - WorldPacket setCompoundState(SMSG_MULTIPLE_MOVES, 100); setCompoundState << uint32(0); // size placeholder diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 74c89cc96..0e03f58d1 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -448,8 +448,6 @@ typedef std::list ItemDurationList; enum PlayerMovementType { - MOVE_ROOT = 1, - MOVE_UNROOT = 2, MOVE_WATER_WALK = 3, MOVE_LAND_WALK = 4 }; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 4a26367b5..eb1a3f06b 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -18293,73 +18293,65 @@ void Unit::SetStunned(bool apply) } } -void Unit::SetRooted(bool apply, bool isStun) +void Unit::SetRooted(bool apply, bool stun, bool logout) { + const uint32 state = (stun ? (logout ? UNIT_STATE_LOGOUT_TIMER : UNIT_STATE_STUNNED) : UNIT_STATE_ROOT); + if (apply) { - // MOVEMENTFLAG_ROOT cannot be used in conjunction with MOVEMENTFLAG_MASK_MOVING (tested 3.3.5a) - // this will freeze clients. That's why we remove MOVEMENTFLAG_MASK_MOVING before - // setting MOVEMENTFLAG_ROOT - RemoveUnitMovementFlag(MOVEMENTFLAG_MASK_MOVING); + AddUnitState(state); - if (IsFalling()) - { - AddUnitMovementFlag(MOVEMENTFLAG_PENDING_ROOT); - } - else - { - AddUnitMovementFlag(MOVEMENTFLAG_ROOT); - } - - // Creature specific - if (!IsPlayer()) - { - if (isStun && movespline->Finalized()) - { - StopMovingOnCurrentPos(); - } - else - { - StopMoving(); - } - } - - if (m_movedByPlayer) - { - WorldPacket data(SMSG_FORCE_MOVE_ROOT, GetPackGUID().size() + 4); - data << GetPackGUID(); - data << m_movedByPlayer->ToPlayer()->GetSession()->GetOrderCounter(); // movement counter - m_movedByPlayer->ToPlayer()->SendDirectMessage(&data); - m_movedByPlayer->ToPlayer()->GetSession()->IncrementOrderCounter(); - } - else - { - WorldPacket data(SMSG_SPLINE_MOVE_ROOT, GetPackGUID().size()); - data << GetPackGUID(); - SendMessageToSet(&data, true); - } + SendMoveRoot(true); } else { - RemoveUnitMovementFlag(MOVEMENTFLAG_ROOT | MOVEMENTFLAG_PENDING_ROOT); + ClearUnitState(state); - if (!HasUnitState(UNIT_STATE_STUNNED)) // prevent moving if it also has stun effect + // Prevent giving ability to move if more immobilizers are active + if (!IsImmobilizedState()) + SendMoveRoot(false); + } +} + +void Unit::SendMoveRoot(bool apply) +{ + const Player* client = GetClientControlling(); + + // Apply flags in-place when unit currently is not controlled by a player + if (!client) + { + if (apply) { - if (m_movedByPlayer) - { - WorldPacket data(SMSG_FORCE_MOVE_UNROOT, GetPackGUID().size() + 4); - data << GetPackGUID(); - data << m_movedByPlayer->ToPlayer()->GetSession()->GetOrderCounter(); // movement counter - m_movedByPlayer->ToPlayer()->SendDirectMessage(&data); - m_movedByPlayer->ToPlayer()->GetSession()->IncrementOrderCounter(); - } - else - { - WorldPacket data(SMSG_SPLINE_MOVE_UNROOT, GetPackGUID().size()); - data << GetPackGUID(); - SendMessageToSet(&data, true); - } + m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_MASK_MOVING_FLY); + m_movementInfo.AddMovementFlag(MOVEMENTFLAG_ROOT); + if (!client) + StopMoving(); } + else + m_movementInfo.RemoveMovementFlag(MOVEMENTFLAG_ROOT); + } + + if (!IsInWorld()) + return; + + const PackedGuid& guid = GetPackGUID(); + // Wrath+ spline root: when unit is currently not controlled by a player + if (!client) + { + WorldPacket data(apply ? SMSG_SPLINE_MOVE_ROOT : SMSG_SPLINE_MOVE_UNROOT, guid.size()); + data << guid; + SendMessageToSet(&data, true); + } + // Wrath+ force root: when unit is controlled by a player + else + { + auto const counter = client->GetSession()->GetOrderCounter(); + + WorldPacket data(apply ? SMSG_FORCE_MOVE_ROOT : SMSG_FORCE_MOVE_UNROOT, guid.size() + 4); + data << guid; + data << counter; + client->GetSession()->SendPacket(&data); + client->GetSession()->IncrementOrderCounter(); } } diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 726addd94..290282510 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -2066,7 +2066,8 @@ protected: void SetFeared(bool apply, Unit* fearedBy = nullptr, bool isFear = false); void SetConfused(bool apply); void SetStunned(bool apply); - void SetRooted(bool apply, bool isStun = false); + void SetRooted(bool apply, bool stun = false, bool logout = false); + void SendMoveRoot(bool state); //----------- Protected variables ----------// UnitAI* i_AI; diff --git a/src/server/game/Entities/Unit/UnitDefines.h b/src/server/game/Entities/Unit/UnitDefines.h index 1875a96aa..72d19e7eb 100644 --- a/src/server/game/Entities/Unit/UnitDefines.h +++ b/src/server/game/Entities/Unit/UnitDefines.h @@ -197,7 +197,9 @@ enum UnitState UNIT_STATE_IGNORE_PATHFINDING = 0x10000000, // do not use pathfinding in any MovementGenerator UNIT_STATE_NO_ENVIRONMENT_UPD = 0x20000000, - UNIT_STATE_NO_COMBAT_MOVEMENT = 0x40000000, // serverside only - should not be changed outside the core and should be placed at the end + // serverside region + UNIT_STATE_NO_COMBAT_MOVEMENT = 0x40000000, // should not be changed outside the core and should be placed at the end + UNIT_STATE_LOGOUT_TIMER = 0x80000000, // Unit is logging out UNIT_STATE_ALL_STATE_SUPPORTED = UNIT_STATE_DIED | UNIT_STATE_MELEE_ATTACKING | UNIT_STATE_STUNNED | UNIT_STATE_ROAMING | UNIT_STATE_CHASE | UNIT_STATE_FLEEING | UNIT_STATE_IN_FLIGHT | UNIT_STATE_FOLLOW | UNIT_STATE_ROOT | UNIT_STATE_CONFUSED diff --git a/src/server/game/Handlers/CharacterHandler.cpp b/src/server/game/Handlers/CharacterHandler.cpp index e18b7365e..ac7ab2783 100644 --- a/src/server/game/Handlers/CharacterHandler.cpp +++ b/src/server/game/Handlers/CharacterHandler.cpp @@ -1164,8 +1164,11 @@ void WorldSession::HandlePlayerLoginToCharInWorld(Player* pCurrChar) SendPacket(&data); // Xinef: fix possible problem with flag UNIT_FLAG_STUNNED added during logout - if (!pCurrChar->HasUnitState(UNIT_STATE_STUNNED)) + if (pCurrChar->HasUnitState(UNIT_STATE_LOGOUT_TIMER)) + { + pCurrChar->SetRooted(false, true, true); pCurrChar->RemoveUnitFlag(UNIT_FLAG_STUNNED); + } pCurrChar->SendInitialPacketsBeforeAddToMap(); diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index bb2651c02..03c91c298 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -468,7 +468,7 @@ void WorldSession::HandleLogoutRequestOpcode(WorldPackets::Character::LogoutRequ GetPlayer()->SetStandState(UNIT_STAND_STATE_SIT); } - GetPlayer()->SetRooted(true); + GetPlayer()->SetRooted(true, true, true); GetPlayer()->SetUnitFlag(UNIT_FLAG_STUNNED); } @@ -492,7 +492,7 @@ void WorldSession::HandleLogoutCancelOpcode(WorldPackets::Character::LogoutCance // not remove flags if can't free move - its not set in Logout request code. if (GetPlayer()->CanFreeMove()) { - GetPlayer()->SetRooted(false); + GetPlayer()->SetRooted(false, true, true); GetPlayer()->SetStandState(UNIT_STAND_STATE_STAND); GetPlayer()->RemoveUnitFlag(UNIT_FLAG_STUNNED); diff --git a/src/server/game/Handlers/MovementHandler.cpp b/src/server/game/Handlers/MovementHandler.cpp index c738365b5..6bf1b899b 100644 --- a/src/server/game/Handlers/MovementHandler.cpp +++ b/src/server/game/Handlers/MovementHandler.cpp @@ -967,79 +967,36 @@ void WorldSession::ComputeNewClockDelta() void WorldSession::HandleMoveRootAck(WorldPacket& recvData) { + LOG_DEBUG("network", "WORLD: {}", GetOpcodeNameForLogging((Opcodes)recvData.GetOpcode())); + ObjectGuid guid; - recvData >> guid.ReadAsPacked(); - - Unit* mover = _player->m_mover; - if (!mover || guid != mover->GetGUID()) - { - recvData.rfinish(); // prevent warnings spam - return; - } - - uint32 movementCounter; - recvData >> movementCounter; - + uint32 counter; MovementInfo movementInfo; - movementInfo.guid = guid; + recvData >> guid.ReadAsPacked(); + recvData >> counter; ReadMovementInfo(recvData, &movementInfo); - /* process position-change */ - int64 movementTime = (int64) movementInfo.time + _timeSyncClockDelta; - if (_timeSyncClockDelta == 0 || movementTime < 0 || movementTime > 0xFFFFFFFF) - { - LOG_INFO("misc", "The computed movement time using clockDelta is erronous. Using fallback instead"); - movementInfo.time = getMSTime(); - } - else - { - movementInfo.time = (uint32)movementTime; - } - - movementInfo.guid = mover->GetGUID(); - mover->m_movementInfo = movementInfo; - mover->UpdatePosition(movementInfo.pos); - -} - -void WorldSession::HandleMoveUnRootAck(WorldPacket& recvData) -{ - ObjectGuid guid; - recvData >> guid.ReadAsPacked(); - Unit* mover = _player->m_mover; - if (!mover || guid != mover->GetGUID()) - { - recvData.rfinish(); // prevent warnings spam + + if (mover->GetGUID() != guid) return; - } - uint32 movementCounter; - recvData >> movementCounter; - - MovementInfo movementInfo; - movementInfo.guid = guid; - ReadMovementInfo(recvData, &movementInfo); - - /* process position-change */ - int64 movementTime = (int64) movementInfo.time + _timeSyncClockDelta; - if (_timeSyncClockDelta == 0 || movementTime < 0 || movementTime > 0xFFFFFFFF) + if (recvData.GetOpcode() == CMSG_FORCE_MOVE_UNROOT_ACK) // unroot case { - LOG_INFO("misc", "The computed movement time using clockDelta is erronous. Using fallback instead"); - movementInfo.time = getMSTime(); + if (!mover->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_ROOT)) + return; } - else + else // root case { - movementInfo.time = (uint32)movementTime; + if (mover->m_movementInfo.HasMovementFlag(MOVEMENTFLAG_ROOT)) + return; } - if (G3D::fuzzyEq(movementInfo.fallTime, 0.f)) - { - movementInfo.RemoveMovementFlag(MOVEMENTFLAG_FALLING); - } - - movementInfo.guid = mover->GetGUID(); - mover->m_movementInfo = movementInfo; - mover->UpdatePosition(movementInfo.pos); + if (!ProcessMovementInfo(movementInfo, mover, _player, recvData)) + return; + WorldPacket data(recvData.GetOpcode() == CMSG_FORCE_MOVE_UNROOT_ACK ? MSG_MOVE_UNROOT : MSG_MOVE_ROOT); + data << guid.WriteAsPacked(); + WriteMovementInfo(&data, &movementInfo); + mover->SendMessageToSet(&data, _player); } diff --git a/src/server/game/Server/Protocol/Opcodes.cpp b/src/server/game/Server/Protocol/Opcodes.cpp index 11b0a9005..cbb576580 100644 --- a/src/server/game/Server/Protocol/Opcodes.cpp +++ b/src/server/game/Server/Protocol/Opcodes.cpp @@ -363,7 +363,7 @@ void OpcodeTable::Initialize() /*0x0E8*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_MOVE_ROOT, STATUS_NEVER); /*0x0E9*/ DEFINE_HANDLER(CMSG_FORCE_MOVE_ROOT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveRootAck ); /*0x0EA*/ DEFINE_SERVER_OPCODE_HANDLER(SMSG_FORCE_MOVE_UNROOT, STATUS_NEVER); - /*0x0EB*/ DEFINE_HANDLER(CMSG_FORCE_MOVE_UNROOT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveUnRootAck ); + /*0x0EB*/ DEFINE_HANDLER(CMSG_FORCE_MOVE_UNROOT_ACK, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMoveRootAck ); /*0x0EC*/ DEFINE_HANDLER(MSG_MOVE_ROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); /*0x0ED*/ DEFINE_HANDLER(MSG_MOVE_UNROOT, STATUS_NEVER, PROCESS_INPLACE, &WorldSession::Handle_NULL ); /*0x0EE*/ DEFINE_HANDLER(MSG_MOVE_HEARTBEAT, STATUS_LOGGEDIN, PROCESS_THREADSAFE, &WorldSession::HandleMovementOpcodes ); diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 33ccaaa4f..c4f9ce9fe 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -628,7 +628,6 @@ public: // opcodes handlers void HandlePlayedTime(WorldPackets::Character::PlayedTimeClient& packet); // new - void HandleMoveUnRootAck(WorldPacket& recvPacket); void HandleMoveRootAck(WorldPacket& recvPacket); // new inspect From 75a9623f3d009eda3bcc46afdb4f30b00bec6d88 Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 11 Oct 2025 15:33:45 -0300 Subject: [PATCH 061/140] =?UTF-8?q?fix(DB/SAI):=20Fix=20robot=20chicken=20?= =?UTF-8?q?escort=20quests=20not=20granting=20credit=20to=20g=E2=80=A6=20(?= =?UTF-8?q?#23193)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pending_db_world/rev_1760193521428009300.sql | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1760193521428009300.sql diff --git a/data/sql/updates/pending_db_world/rev_1760193521428009300.sql b/data/sql/updates/pending_db_world/rev_1760193521428009300.sql new file mode 100644 index 000000000..e479f87b7 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1760193521428009300.sql @@ -0,0 +1,12 @@ +-- +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 780602) AND (`source_type` = 9) AND (`id` IN (5)); +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 +(780602, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 26, 836, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Homing Robot OOX-09/HL - Actionlist - Quest Credit \'Rescue OOX-09/HL!\''); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 780702) AND (`source_type` = 9) AND (`id` IN (6)); +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 +(780702, 9, 6, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 26, 2767, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Homing Robot OOX-22/FE - Actionlist - Quest Credit \'Rescue OOX-22/FE!\''); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 778402) AND (`source_type` = 9) AND (`id` IN (5)); +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 +(778402, 9, 5, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 26, 648, 0, 0, 0, 0, 0, 12, 1, 0, 0, 0, 0, 0, 0, 0, 'Homing Robot OOX-17/TN - Actionlist - Quest Credit \'Rescue OOX-17/TN!\''); From d49ce35d3ddc0b1d6010325493c915af4db99eea Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Sat, 11 Oct 2025 15:34:20 -0300 Subject: [PATCH 062/140] fix(DB/SAI): fix Ruin Dweller Spring (#23190) --- .../updates/pending_db_world/rev_1760190077779442400.sql | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1760190077779442400.sql diff --git a/data/sql/updates/pending_db_world/rev_1760190077779442400.sql b/data/sql/updates/pending_db_world/rev_1760190077779442400.sql new file mode 100644 index 000000000..60170cd7a --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1760190077779442400.sql @@ -0,0 +1,6 @@ +-- +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 29920); +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 +(29920, 0, 0, 0, 0, 0, 100, 0, 10000, 15000, 10000, 15000, 0, 0, 11, 55652, 0, 0, 0, 0, 0, 5, 0, 0, 0, 0, 0, 0, 0, 0, 'Ruins Dweller - In Combat - Cast \'Spring\''), +(29920, 0, 1, 0, 0, 0, 100, 0, 2000, 7000, 8000, 14000, 0, 0, 11, 55643, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 0, 'Ruins Dweller - In Combat - Cast \'Regurgitate\''), +(29920, 0, 2, 0, 31, 0, 100, 0, 55652, 0, 0, 0, 0, 0, 14, 0, 100, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Ruins Dweller - On Target Spellhit \'Spring\' - Set All Threat 0-100'); From 4b4c015e4b3ae8d0af4feab7a2642a85dd9fcdb1 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 11 Oct 2025 18:34:51 +0000 Subject: [PATCH 063/140] chore(DB): import pending files Referenced commit(s): 75a9623f3d009eda3bcc46afdb4f30b00bec6d88 --- .../rev_1760190077779442400.sql => db_world/2025_10_11_02.sql} | 1 + .../rev_1760193521428009300.sql => db_world/2025_10_11_03.sql} | 1 + 2 files changed, 2 insertions(+) rename data/sql/updates/{pending_db_world/rev_1760190077779442400.sql => db_world/2025_10_11_02.sql} (96%) rename data/sql/updates/{pending_db_world/rev_1760193521428009300.sql => db_world/2025_10_11_03.sql} (98%) diff --git a/data/sql/updates/pending_db_world/rev_1760190077779442400.sql b/data/sql/updates/db_world/2025_10_11_02.sql similarity index 96% rename from data/sql/updates/pending_db_world/rev_1760190077779442400.sql rename to data/sql/updates/db_world/2025_10_11_02.sql index 60170cd7a..5e9302e70 100644 --- a/data/sql/updates/pending_db_world/rev_1760190077779442400.sql +++ b/data/sql/updates/db_world/2025_10_11_02.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_11_01 -> 2025_10_11_02 -- DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 29920); 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 diff --git a/data/sql/updates/pending_db_world/rev_1760193521428009300.sql b/data/sql/updates/db_world/2025_10_11_03.sql similarity index 98% rename from data/sql/updates/pending_db_world/rev_1760193521428009300.sql rename to data/sql/updates/db_world/2025_10_11_03.sql index e479f87b7..efe1ac102 100644 --- a/data/sql/updates/pending_db_world/rev_1760193521428009300.sql +++ b/data/sql/updates/db_world/2025_10_11_03.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_11_02 -> 2025_10_11_03 -- DELETE FROM `smart_scripts` WHERE (`entryorguid` = 780602) AND (`source_type` = 9) AND (`id` IN (5)); 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 f0dea45457f3fc2f06e55871d96d4aeb95b200ac Mon Sep 17 00:00:00 2001 From: sogladev Date: Sat, 11 Oct 2025 23:01:17 +0200 Subject: [PATCH 064/140] fix(DB/SmartAI): Scorn spawns after Bloodmage Thalnos dies (#23106) Co-authored-by: AnonXS --- .../rev_1759592050712749074.sql | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1759592050712749074.sql diff --git a/data/sql/updates/pending_db_world/rev_1759592050712749074.sql b/data/sql/updates/pending_db_world/rev_1759592050712749074.sql new file mode 100644 index 000000000..63970f158 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1759592050712749074.sql @@ -0,0 +1,26 @@ +-- +DELETE FROM `creature` WHERE (`guid` = 248652) AND (`id1` = 14693); +DELETE FROM `game_event_creature` WHERE (`guid` = 248652) AND (`eventEntry` = 120); + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 4543) AND (`source_type` = 0) AND (`id` IN (7)); +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 +(4543, 0, 7, 0, 6, 0, 100, 0, 0, 0, 0, 0, 0, 0, 12, 14693, 8, 0, 0, 0, 0, 8, 0, 0, 0, 0, 1797.84, 1233.68, 18.3153, 1.58286, 'Bloodmage Thalnos - On Just Died - Summon Creature \'Scorn\''); + +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 14693; +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 14693) AND (`source_type` = 0) AND (`id` IN (4)); +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 +(14693, 0, 4, 0, 54, 0, 100, 0, 0, 0, 0, 0, 0, 0, 53, 0, 1469300, 1, 0, 0, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Scorn - On Just Summoned - Start Patrol Path 1469300'); + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 22) AND (`SourceGroup` = 8) AND (`SourceEntry` = 4543) AND (`SourceId` = 0) AND (`ElseGroup` = 0); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(22, 8, 4543, 0, 0, 12, 0, 120, 0, 0, 0, 0, 0, '', 'Scourge Invasion - Boss in instance activation event must be active'); + +SET @ENTRY := 14693; +DELETE FROM `waypoints` WHERE `entry` = @ENTRY * 100; +INSERT INTO `waypoints` (`entry`, `pointid`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `point_comment`) VALUES +(@ENTRY*100, 1, 1798.01, 1312.39, 18.69, NULL, 0, 'Scorn'), +(@ENTRY*100, 2, 1805.39, 1323.66, 18.91, NULL, 0, 'Scorn'), +(@ENTRY*100, 3, 1797.70, 1383.27, 18.76, NULL, 0, 'Scorn'), +(@ENTRY*100, 4, 1805.39, 1323.66, 18.91, NULL, 0, 'Scorn'), +(@ENTRY*100, 5, 1798.01, 1312.39, 18.69, NULL, 0, 'Scorn'), +(@ENTRY*100, 6, 1798.01, 1223.17, 18.274, NULL, 0, 'Scorn - spawn point'); From c50688c7027a13b02340570defaed9049991247f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 11 Oct 2025 21:02:20 +0000 Subject: [PATCH 065/140] chore(DB): import pending files Referenced commit(s): f0dea45457f3fc2f06e55871d96d4aeb95b200ac --- .../rev_1759592050712749074.sql => db_world/2025_10_11_04.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1759592050712749074.sql => db_world/2025_10_11_04.sql} (98%) diff --git a/data/sql/updates/pending_db_world/rev_1759592050712749074.sql b/data/sql/updates/db_world/2025_10_11_04.sql similarity index 98% rename from data/sql/updates/pending_db_world/rev_1759592050712749074.sql rename to data/sql/updates/db_world/2025_10_11_04.sql index 63970f158..85a5c7dac 100644 --- a/data/sql/updates/pending_db_world/rev_1759592050712749074.sql +++ b/data/sql/updates/db_world/2025_10_11_04.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_11_03 -> 2025_10_11_04 -- DELETE FROM `creature` WHERE (`guid` = 248652) AND (`id1` = 14693); DELETE FROM `game_event_creature` WHERE (`guid` = 248652) AND (`eventEntry` = 120); From 757de7a983d4f7fe196f3c9c3bae123eec74306b Mon Sep 17 00:00:00 2001 From: blinkysc <37940565+blinkysc@users.noreply.github.com> Date: Sat, 11 Oct 2025 16:50:19 -0500 Subject: [PATCH 066/140] fix(Script/Gundrak): Moorabi timing and hard reset (#23079) --- .../rev_1759364521496153591.sql | 2 + .../Northrend/Gundrak/boss_moorabi.cpp | 78 +++++++++++++------ 2 files changed, 56 insertions(+), 24 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1759364521496153591.sql diff --git a/data/sql/updates/pending_db_world/rev_1759364521496153591.sql b/data/sql/updates/pending_db_world/rev_1759364521496153591.sql new file mode 100644 index 000000000..9505b804f --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1759364521496153591.sql @@ -0,0 +1,2 @@ +-- Moorabi hard reset +UPDATE `creature_template` SET `flags_extra` = `flags_extra` | 2147483648 WHERE `entry` IN (29305, 30530); diff --git a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp index e0be1dd9d..5e6fd02aa 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp @@ -92,12 +92,18 @@ public: BossAI::JustEngagedWith(who); me->CastSpell(me, SPELL_MOJO_FRENZY, true); - events.ScheduleEvent(EVENT_GROUND_TREMOR, 18s); - events.ScheduleEvent(EVENT_NUMBLING_SHOUT, 10s); + events.ScheduleEvent(EVENT_GROUND_TREMOR, 13s, 30s); + events.ScheduleEvent(EVENT_NUMBLING_SHOUT, 8s, 38s); events.ScheduleEvent(EVENT_DETERMINED_STAB, 20s); events.ScheduleEvent(EVENT_TRANSFORMATION, 12s); } + void EnterEvadeMode(EvadeReason why) override + { + summons.DespawnAll(); + BossAI::EnterEvadeMode(why); + } + void SpellHitTarget(Unit* /*caster*/, SpellInfo const* spellInfo) override { if (spellInfo->Id == SPELL_TRANSFORMATION) @@ -113,6 +119,7 @@ public: { Talk(SAY_DEATH); Talk(EMOTE_ALTAR); + BossAI::JustDied(killer); } @@ -144,29 +151,52 @@ public: if (me->HasUnitState(UNIT_STATE_CASTING)) return; - switch (events.ExecuteEvent()) + while (uint32 eventId = events.ExecuteEvent()) { - case EVENT_GROUND_TREMOR: - if (roll_chance_i(50)) - Talk(SAY_QUAKE); - me->CastSpell(me, me->GetDisplayId() != me->GetNativeDisplayId() ? SPELL_QUAKE : SPELL_GROUND_TREMOR, false); - events.ScheduleEvent(EVENT_GROUND_TREMOR, 10s); - break; - case EVENT_NUMBLING_SHOUT: - me->CastSpell(me, me->GetDisplayId() != me->GetNativeDisplayId() ? SPELL_NUMBING_ROAR : SPELL_NUMBING_SHOUT, false); - events.ScheduleEvent(EVENT_NUMBLING_SHOUT, 10s); - break; - case EVENT_DETERMINED_STAB: - me->CastSpell(me->GetVictim(), me->GetDisplayId() != me->GetNativeDisplayId() ? SPELL_DETERMINED_GORE : SPELL_DETERMINED_STAB, false); - events.ScheduleEvent(EVENT_DETERMINED_STAB, 8s); - break; - case EVENT_TRANSFORMATION: - Talk(EMOTE_TRANSFORM); - Talk(SAY_TRANSFORM); - me->CastSpell(me, SPELL_TRANSFORMATION, false); - me->CastSpell(me, SPELL_SUMMON_PHANTOM_TRANSFORM, true); - events.ScheduleEvent(EVENT_TRANSFORMATION, 10s); - break; + switch (eventId) + { + case EVENT_GROUND_TREMOR: + if (roll_chance_i(50)) + Talk(SAY_QUAKE); + + if (me->GetDisplayId() != me->GetNativeDisplayId()) + { + me->CastSpell(me, SPELL_QUAKE, false); + events.ScheduleEvent(EVENT_GROUND_TREMOR, 16s, 63s); + } + else + { + me->CastSpell(me, SPELL_GROUND_TREMOR, false); + events.ScheduleEvent(EVENT_GROUND_TREMOR, 13s, 27s); + } + return; + + case EVENT_NUMBLING_SHOUT: + if (me->GetDisplayId() != me->GetNativeDisplayId()) + { + me->CastSpell(me, SPELL_NUMBING_ROAR, false); + events.ScheduleEvent(EVENT_NUMBLING_SHOUT, 8s, 54s); + } + else + { + me->CastSpell(me, SPELL_NUMBING_SHOUT, false); + events.ScheduleEvent(EVENT_NUMBLING_SHOUT, 6s, 27s); + } + return; + + case EVENT_DETERMINED_STAB: + me->CastSpell(me->GetVictim(), me->GetDisplayId() != me->GetNativeDisplayId() ? SPELL_DETERMINED_GORE : SPELL_DETERMINED_STAB, false); + events.ScheduleEvent(EVENT_DETERMINED_STAB, 8s); + return; + + case EVENT_TRANSFORMATION: + Talk(EMOTE_TRANSFORM); + Talk(SAY_TRANSFORM); + me->CastSpell(me, SPELL_TRANSFORMATION, false); + me->CastSpell(me, SPELL_SUMMON_PHANTOM_TRANSFORM, true); + events.ScheduleEvent(EVENT_TRANSFORMATION, 10s); + return; + } } DoMeleeAttackIfReady(); From fdb89bda9d8f38f9da69b459bdaae29804a6b740 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 11 Oct 2025 21:51:26 +0000 Subject: [PATCH 067/140] chore(DB): import pending files Referenced commit(s): 757de7a983d4f7fe196f3c9c3bae123eec74306b --- .../rev_1759364521496153591.sql => db_world/2025_10_11_05.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1759364521496153591.sql => db_world/2025_10_11_05.sql} (74%) diff --git a/data/sql/updates/pending_db_world/rev_1759364521496153591.sql b/data/sql/updates/db_world/2025_10_11_05.sql similarity index 74% rename from data/sql/updates/pending_db_world/rev_1759364521496153591.sql rename to data/sql/updates/db_world/2025_10_11_05.sql index 9505b804f..ee3812cf1 100644 --- a/data/sql/updates/pending_db_world/rev_1759364521496153591.sql +++ b/data/sql/updates/db_world/2025_10_11_05.sql @@ -1,2 +1,3 @@ +-- DB update 2025_10_11_04 -> 2025_10_11_05 -- Moorabi hard reset UPDATE `creature_template` SET `flags_extra` = `flags_extra` | 2147483648 WHERE `entry` IN (29305, 30530); From de20f42ce26b6457f67efbb849e6c7505673e69e Mon Sep 17 00:00:00 2001 From: Ryan Turner Date: Sat, 11 Oct 2025 22:51:33 +0100 Subject: [PATCH 068/140] fix(DB/Gossip) - Ancient Skull Pile no longer shows 2 gossip menu options (#23183) --- .../sql/updates/pending_db_world/rev_1760179588915167700.sql | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1760179588915167700.sql diff --git a/data/sql/updates/pending_db_world/rev_1760179588915167700.sql b/data/sql/updates/pending_db_world/rev_1760179588915167700.sql new file mode 100644 index 000000000..aaf1f4262 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1760179588915167700.sql @@ -0,0 +1,5 @@ +-- Correctly uses Option0 instead of Option1 to summon the Terokk +UPDATE `smart_scripts` SET `event_param2` = 0 WHERE `entryorguid` = 185928 AND `source_type` = 1 AND `id` = 0; + +-- Removes the duplicated option. +DELETE FROM `gossip_menu_option` WHERE `MenuID` = 8687 AND `OptionID` = 1; From a5e4ee10e14bef554b032b4dc57d4fd249781c10 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sat, 11 Oct 2025 21:52:31 +0000 Subject: [PATCH 069/140] chore(DB): import pending files Referenced commit(s): fdb89bda9d8f38f9da69b459bdaae29804a6b740 --- .../rev_1760179588915167700.sql => db_world/2025_10_11_06.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1760179588915167700.sql => db_world/2025_10_11_06.sql} (86%) diff --git a/data/sql/updates/pending_db_world/rev_1760179588915167700.sql b/data/sql/updates/db_world/2025_10_11_06.sql similarity index 86% rename from data/sql/updates/pending_db_world/rev_1760179588915167700.sql rename to data/sql/updates/db_world/2025_10_11_06.sql index aaf1f4262..99c162473 100644 --- a/data/sql/updates/pending_db_world/rev_1760179588915167700.sql +++ b/data/sql/updates/db_world/2025_10_11_06.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_11_05 -> 2025_10_11_06 -- Correctly uses Option0 instead of Option1 to summon the Terokk UPDATE `smart_scripts` SET `event_param2` = 0 WHERE `entryorguid` = 185928 AND `source_type` = 1 AND `id` = 0; From e07fddc51525d0e3788ebd04c8216766c5bc999a Mon Sep 17 00:00:00 2001 From: Benjamin Jackson <38561765+heyitsbench@users.noreply.github.com> Date: Sun, 12 Oct 2025 05:49:20 -0400 Subject: [PATCH 070/140] fix(Scripts/Item): Introduce Blizzlike Val'anyr absorption value bug. (#23152) --- src/server/scripts/Spells/spell_item.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index 44d52f0e7..5b458f44c 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -1503,16 +1503,20 @@ class spell_item_blessing_of_ancient_kings : public AuraScript HealInfo* healInfo = eventInfo.GetHealInfo(); if (!healInfo) - { return; - } int32 absorb = int32(CalculatePct(healInfo->GetHeal(), 15.0f)); // xinef: all heals contribute to one bubble if (AuraEffect* protEff = eventInfo.GetProcTarget()->GetAuraEffect(SPELL_PROTECTION_OF_ANCIENT_KINGS, 0/*, eventInfo.GetActor()->GetGUID()*/)) { - // The shield can grow to a maximum size of 20,000 damage absorbtion - protEff->SetAmount(std::min(protEff->GetAmount() + absorb, 20000)); + // The shield is supposed to cap out at 20,000 absorption... + absorb += protEff->GetAmount(); + + // ...but Blizz wrote this instead. See #23152 for details + if (absorb > 20000) + absorb = 200000; + + protEff->SetAmount(absorb); // Refresh and return to prevent replacing the aura protEff->GetBase()->RefreshDuration(); From da5fb6c9f824e8d8f299bfe4f5839157a08eec9c Mon Sep 17 00:00:00 2001 From: Peter Date: Sun, 12 Oct 2025 13:30:02 +0200 Subject: [PATCH 071/140] feat(Core): BG reputation modifier for WSG, AB and AV (#22685) Co-authored-by: Zoidwaffle --- .../apps/worldserver/worldserver.conf.dist | 12 ++++ .../Battlegrounds/Zones/BattlegroundAB.cpp | 3 +- .../game/Battlegrounds/Zones/BattlegroundAB.h | 1 + .../Battlegrounds/Zones/BattlegroundAV.cpp | 69 ++++++++++--------- .../game/Battlegrounds/Zones/BattlegroundAV.h | 1 + .../Battlegrounds/Zones/BattlegroundWS.cpp | 6 +- .../game/Battlegrounds/Zones/BattlegroundWS.h | 1 + src/server/game/World/WorldConfig.cpp | 3 + src/server/game/World/WorldConfig.h | 3 + 9 files changed, 63 insertions(+), 36 deletions(-) diff --git a/src/server/apps/worldserver/worldserver.conf.dist b/src/server/apps/worldserver/worldserver.conf.dist index 89863ac4f..07945f07f 100644 --- a/src/server/apps/worldserver/worldserver.conf.dist +++ b/src/server/apps/worldserver/worldserver.conf.dist @@ -2350,6 +2350,18 @@ Rate.Reputation.LowLevel.Quest = 1 Rate.Reputation.RecruitAFriendBonus = 0.1 +# +# Rate.Reputation.Gain.WSG +# Rate.Reputation.Gain.AB +# Rate.Reputation.Gain.AV +# Description: Reputation bonus rate for WSG, AB and AV battlegrounds. +# This is applied IN ADDITION to the global Rate.Reputation.Gain. +# Default: 1 + +Rate.Reputation.Gain.WSG = 1 +Rate.Reputation.Gain.AB = 1 +Rate.Reputation.Gain.AV = 1 + # ################################################################################################### diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp index 10c0956e5..d1aa246ab 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp @@ -115,7 +115,7 @@ void BattlegroundAB::PostUpdateImpl(uint32 diff) if (honorRewards < uint8(m_TeamScores[teamId] / _honorTics)) RewardHonorToTeam(GetBonusHonorFromKill(1), teamId); if (reputationRewards < uint8(m_TeamScores[teamId] / _reputationTics)) - RewardReputationToTeam(teamId == TEAM_ALLIANCE ? 509 : 510, 10, teamId); + RewardReputationToTeam(teamId == TEAM_ALLIANCE ? 509 : 510, uint32(10 * _abReputationRate), teamId); if (information < uint8(m_TeamScores[teamId] / BG_AB_WARNING_NEAR_VICTORY_SCORE)) { if (teamId == TEAM_ALLIANCE) @@ -421,6 +421,7 @@ bool BattlegroundAB::SetupBattleground() { _honorTics = BattlegroundMgr::IsBGWeekend(GetBgTypeID(true)) ? BG_AB_HONOR_TICK_WEEKEND : BG_AB_HONOR_TICK_NORMAL; _reputationTics = BattlegroundMgr::IsBGWeekend(GetBgTypeID(true)) ? BG_AB_REP_TICK_WEEKEND : BG_AB_REP_TICK_NORMAL; + _abReputationRate = sWorld->getRate(RATE_REPUTATION_GAIN_AB); for (uint32 i = 0; i < BG_AB_DYNAMIC_NODES_COUNT; ++i) { diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h index a250c9f16..61aee582d 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h @@ -299,6 +299,7 @@ private: EventMap _bgEvents; uint32 _honorTics; uint32 _reputationTics; + float _abReputationRate; uint8 _controlledPoints[PVP_TEAMS_COUNT] {}; bool _teamScores500Disadvantage[PVP_TEAMS_COUNT] {}; uint32 _configurableMaxTeamScore; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp index 5b6a8b335..b65daf5d9 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.cpp @@ -194,21 +194,21 @@ void BattlegroundAV::HandleQuestComplete(uint32 questid, Player* player) case AV_QUEST_A_COMMANDER1: case AV_QUEST_H_COMMANDER1: m_Team_QuestStatus[teamId][1]++; - RewardReputationToTeam(teamId, 1, teamId); + RewardReputationToTeam(teamId, uint32(1 * _avReputationRate), teamId); if (m_Team_QuestStatus[teamId][1] == 30) LOG_DEBUG("bg.battleground", "BG_AV Quest {} completed (need to implement some events here", questid); break; case AV_QUEST_A_COMMANDER2: case AV_QUEST_H_COMMANDER2: m_Team_QuestStatus[teamId][2]++; - RewardReputationToTeam(teamId, 1, teamId); + RewardReputationToTeam(teamId, uint32(1 * _avReputationRate), teamId); if (m_Team_QuestStatus[teamId][2] == 60) LOG_DEBUG("bg.battleground", "BG_AV Quest {} completed (need to implement some events here", questid); break; case AV_QUEST_A_COMMANDER3: case AV_QUEST_H_COMMANDER3: m_Team_QuestStatus[teamId][3]++; - RewardReputationToTeam(teamId, 1, teamId); + RewardReputationToTeam(teamId, uint32(1 * _avReputationRate), teamId); if (m_Team_QuestStatus[teamId][3] == 120) LOG_DEBUG("bg.battleground", "BG_AV Quest {} completed (need to implement some events here", questid); break; @@ -316,21 +316,21 @@ Creature* BattlegroundAV::AddAVCreature(uint16 cinfoid, uint16 type) type -= AV_CPLACE_MAX; cinfoid = uint16(BG_AV_StaticCreaturePos[type][4]); creature = AddCreature(BG_AV_StaticCreatureInfo[cinfoid], - type + AV_CPLACE_MAX, - BG_AV_StaticCreaturePos[type][0], - BG_AV_StaticCreaturePos[type][1], - BG_AV_StaticCreaturePos[type][2], - BG_AV_StaticCreaturePos[type][3]); + type + AV_CPLACE_MAX, + BG_AV_StaticCreaturePos[type][0], + BG_AV_StaticCreaturePos[type][1], + BG_AV_StaticCreaturePos[type][2], + BG_AV_StaticCreaturePos[type][3]); isStatic = true; } else { creature = AddCreature(BG_AV_CreatureInfo[cinfoid], - type, - BG_AV_CreaturePos[type][0], - BG_AV_CreaturePos[type][1], - BG_AV_CreaturePos[type][2], - BG_AV_CreaturePos[type][3]); + type, + BG_AV_CreaturePos[type][0], + BG_AV_CreaturePos[type][1], + BG_AV_CreaturePos[type][2], + BG_AV_CreaturePos[type][3]); } if (!creature) return nullptr; @@ -344,7 +344,7 @@ Creature* BattlegroundAV::AddAVCreature(uint16 cinfoid, uint16 type) (cinfoid >= AV_NPC_H_GRAVEDEFENSE0 && cinfoid <= AV_NPC_H_GRAVEDEFENSE3)))) { if (!isStatic && ((cinfoid >= AV_NPC_A_GRAVEDEFENSE0 && cinfoid <= AV_NPC_A_GRAVEDEFENSE3) - || (cinfoid >= AV_NPC_H_GRAVEDEFENSE0 && cinfoid <= AV_NPC_H_GRAVEDEFENSE3))) + || (cinfoid >= AV_NPC_H_GRAVEDEFENSE0 && cinfoid <= AV_NPC_H_GRAVEDEFENSE3))) { CreatureData& data = sObjectMgr->NewOrExistCreatureData(creature->GetSpawnId()); data.wander_distance = 5; @@ -814,11 +814,11 @@ void BattlegroundAV::PopulateNode(BG_AV_Nodes node) if (!trigger) { trigger = AddCreature(WORLD_TRIGGER, - node + 302, - BG_AV_CreaturePos[node + 302][0], - BG_AV_CreaturePos[node + 302][1], - BG_AV_CreaturePos[node + 302][2], - BG_AV_CreaturePos[node + 302][3]); + node + 302, + BG_AV_CreaturePos[node + 302][0], + BG_AV_CreaturePos[node + 302][1], + BG_AV_CreaturePos[node + 302][2], + BG_AV_CreaturePos[node + 302][3]); } //add bonus honor aura trigger creature when node is accupied @@ -1240,25 +1240,28 @@ GraveyardStruct const* BattlegroundAV::GetClosestGraveyard(Player* player) bool BattlegroundAV::SetupBattleground() { + _avReputationRate = sWorld->getRate(RATE_REPUTATION_GAIN_AV); + if (sBattlegroundMgr->IsBGWeekend(GetBgTypeID(true))) { - _reputationTower = 18; - _reputationCaptain = 185; - _reputationBoss = 525; - _reputationPerOwnedGraveyard = 18; - _reputationSurvivingCaptain = 175; - _reputationSurvivingTower = 18; - _reputationPerOwnedMine = 36; + _reputationTower = uint32(18 * _avReputationRate); + _reputationCaptain = uint32(185 * _avReputationRate); + _reputationBoss = uint32(525 * _avReputationRate); + _reputationPerOwnedGraveyard = uint32(18 * _avReputationRate); + _reputationSurvivingCaptain = uint32(175 * _avReputationRate); + _reputationSurvivingTower = uint32(18 * _avReputationRate); + _reputationPerOwnedMine = uint32(36 * _avReputationRate); } else { - _reputationTower = 12; - _reputationCaptain = 125; - _reputationBoss = sWorld->getIntConfig(CONFIG_BATTLEGROUND_ALTERAC_REP_ONBOSSDEATH); - _reputationPerOwnedGraveyard = 12; - _reputationSurvivingCaptain = 125; - _reputationSurvivingTower = 12; - _reputationPerOwnedMine = 24; + _reputationTower = uint32(12 * _avReputationRate); + _reputationCaptain = uint32(125 * _avReputationRate); + // Special case: This value comes from another config setting, but we still apply our multiplier + _reputationBoss = uint32(sWorld->getIntConfig(CONFIG_BATTLEGROUND_ALTERAC_REP_ONBOSSDEATH) * _avReputationRate); + _reputationPerOwnedGraveyard = uint32(12 * _avReputationRate); + _reputationSurvivingCaptain = uint32(125 * _avReputationRate); + _reputationSurvivingTower = uint32(12 * _avReputationRate); + _reputationPerOwnedMine = uint32(24 * _avReputationRate); } // Create starting objects diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h index a058f1d98..c8a0fd8cd 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAV.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAV.h @@ -1846,6 +1846,7 @@ private: uint32 _reputationSurvivingCaptain = 0; // 125, 175 uint32 _reputationSurvivingTower = 0; // 12, 18 uint32 _reputationPerOwnedMine = 0; // 24, 36 + float _avReputationRate; bool m_IsInformedNearVictory[2] {}; }; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp index 272f07fba..974e1d67a 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp @@ -426,15 +426,17 @@ void BattlegroundWS::HandleAreaTrigger(Player* player, uint32 trigger) bool BattlegroundWS::SetupBattleground() { + _wsReputationRate = sWorld->getRate(RATE_REPUTATION_GAIN_WSG); + if (sBattlegroundMgr->IsBGWeekend(GetBgTypeID(true))) { - _reputationCapture = 45; + _reputationCapture = uint32(45 * _wsReputationRate); _honorWinKills = 3; _honorEndKills = 4; } else { - _reputationCapture = 35; + _reputationCapture = uint32(35 * _wsReputationRate); _honorWinKills = 1; _honorEndKills = 2; } diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h index 61fa2516e..7aa897500 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h @@ -258,6 +258,7 @@ private: ObjectGuid _droppedFlagGUID[2]; uint8 _flagState[2]; TeamId _lastFlagCaptureTeam; + float _wsReputationRate; uint32 _reputationCapture; uint32 _honorWinKills; uint32 _honorEndKills; diff --git a/src/server/game/World/WorldConfig.cpp b/src/server/game/World/WorldConfig.cpp index eedd61eaf..7ee1b6f6d 100644 --- a/src/server/game/World/WorldConfig.cpp +++ b/src/server/game/World/WorldConfig.cpp @@ -85,6 +85,9 @@ void WorldConfig::BuildConfigCache() SetConfigValue(RATE_BUYVALUE_ITEM_HEIRLOOM, "Rate.BuyValue.Item.Heirloom", 1.0f); SetConfigValue(RATE_REPUTATION_GAIN, "Rate.Reputation.Gain", 1.0f); + SetConfigValue(RATE_REPUTATION_GAIN_AB, "Rate.Reputation.Gain.AB", 1.0f); + SetConfigValue(RATE_REPUTATION_GAIN_AV, "Rate.Reputation.Gain.AV", 1.0f); + SetConfigValue(RATE_REPUTATION_GAIN_WSG, "Rate.Reputation.Gain.WSG", 1.0f); SetConfigValue(RATE_REPUTATION_LOWLEVEL_KILL, "Rate.Reputation.LowLevel.Kill", 1.0f); SetConfigValue(RATE_REPUTATION_LOWLEVEL_QUEST, "Rate.Reputation.LowLevel.Quest", 1.0f); SetConfigValue(RATE_REPUTATION_RECRUIT_A_FRIEND_BONUS, "Rate.Reputation.RecruitAFriendBonus", 0.1f); diff --git a/src/server/game/World/WorldConfig.h b/src/server/game/World/WorldConfig.h index ce089b65a..f076d0b29 100644 --- a/src/server/game/World/WorldConfig.h +++ b/src/server/game/World/WorldConfig.h @@ -437,6 +437,9 @@ enum ServerConfigs RATE_XP_PET_NEXT_LEVEL, RATE_REPAIRCOST, RATE_REPUTATION_GAIN, + RATE_REPUTATION_GAIN_AB, + RATE_REPUTATION_GAIN_AV, + RATE_REPUTATION_GAIN_WSG, RATE_REPUTATION_LOWLEVEL_KILL, RATE_REPUTATION_LOWLEVEL_QUEST, RATE_REPUTATION_RECRUIT_A_FRIEND_BONUS, From 2cb42d8283cf48c41c2022c836bf035713059b24 Mon Sep 17 00:00:00 2001 From: Evgeny <940893+freekode@users.noreply.github.com> Date: Sun, 12 Oct 2025 13:36:39 +0200 Subject: [PATCH 072/140] fix(modules): fix path to setup_git_commit_template.sh in create_module.sh (#22757) --- modules/create_module.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/create_module.sh b/modules/create_module.sh index 51e9de479..8a7b12823 100644 --- a/modules/create_module.sh +++ b/modules/create_module.sh @@ -5,7 +5,7 @@ ##------------------------------- VARIABLES ---------------------------------## MODULE_TEMPLATE_URL="https://github.com/azerothcore/skeleton-module/" -GIT_COMMIT_MSG_SETUP="setup_git_commit_template.sh" +GIT_COMMIT_MSG_SETUP="../../apps/git_tools/setup_git_commit_template.sh" ##------------------------------- CODE ---------------------------------## From 6d97c5b0eed17762bfa2d543197912dff6037927 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alexis=20LOUBI=C3=88RE?= Date: Sun, 12 Oct 2025 13:37:28 +0200 Subject: [PATCH 073/140] fix(DB/SAI): Fix NPC Kurzen Medicine Man (#22954) --- .../pending_db_world/rev_1758137504154485630.sql | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1758137504154485630.sql diff --git a/data/sql/updates/pending_db_world/rev_1758137504154485630.sql b/data/sql/updates/pending_db_world/rev_1758137504154485630.sql new file mode 100644 index 000000000..33ba5278c --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1758137504154485630.sql @@ -0,0 +1,10 @@ +-- +UPDATE `creature_template` SET `maxlevel` = 33 WHERE `entry` = 940; +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 940); +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 +(940, 0, 0, 0, 74, 0, 100, 0, 0, 0, 19900, 28900, 30, 0, 11, 6077, 0, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 'Kurzen Medicine Man - On Friendly Between 0-30% Health - Cast \'Renew\''), +(940, 0, 1, 0, 74, 0, 100, 0, 0, 0, 34300, 39100, 30, 0, 11, 6064, 1, 0, 0, 0, 0, 9, 0, 0, 0, 0, 0, 0, 0, 0, 'Kurzen Medicine Man - On Friendly Between 0-30% Health - Cast \'Heal\''), +(940, 0, 2, 0, 60, 0, 100, 0, 1000, 1000, 70000, 90000, 0, 0, 11, 602, 32, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kurzen Medicine Man - On Update - Cast \'Inner Fire\''), +(940, 0, 3, 0, 2, 0, 100, 1, 0, 15, 0, 0, 0, 0, 25, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'Kurzen Medicine Man - Between 0-15% Health - Flee For Assist'), +(940, 0, 4, 0, 2, 0, 100, 0, 0, 50, 3000, 16000, 0, 0, 11, 6064, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kurzen Medicine Man - Between 0-50% Health - Cast \'Heal\''), +(940, 0, 5, 0, 2, 0, 100, 0, 0, 90, 16000, 24000, 30, 0, 11, 6077, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Kurzen Medicine Man - Between 0-90% Health - Cast \'Renew\''); From b717d9baabde50ec8ebae479eff15026be5e40cc Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 12 Oct 2025 11:37:41 +0000 Subject: [PATCH 074/140] chore(DB): import pending files Referenced commit(s): 2cb42d8283cf48c41c2022c836bf035713059b24 --- .../rev_1758137504154485630.sql => db_world/2025_10_12_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1758137504154485630.sql => db_world/2025_10_12_00.sql} (97%) diff --git a/data/sql/updates/pending_db_world/rev_1758137504154485630.sql b/data/sql/updates/db_world/2025_10_12_00.sql similarity index 97% rename from data/sql/updates/pending_db_world/rev_1758137504154485630.sql rename to data/sql/updates/db_world/2025_10_12_00.sql index 33ba5278c..c09409abc 100644 --- a/data/sql/updates/pending_db_world/rev_1758137504154485630.sql +++ b/data/sql/updates/db_world/2025_10_12_00.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_11_06 -> 2025_10_12_00 -- UPDATE `creature_template` SET `maxlevel` = 33 WHERE `entry` = 940; DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 940); From c3c28e0d8b24e90cb7f4994bd1aaf81df0e663b8 Mon Sep 17 00:00:00 2001 From: blinkysc <37940565+blinkysc@users.noreply.github.com> Date: Sun, 12 Oct 2025 06:54:52 -0500 Subject: [PATCH 075/140] fix(Script/BloodmystIsle): Tel'athion the Impure will no longer spawn from webbed creature (#22898) --- src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp index 359a18c57..01761599e 100644 --- a/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_bloodmyst_isle.cpp @@ -24,7 +24,7 @@ ######*/ //possible creatures to be spawned -uint32 const possibleSpawns[32] = {17322, 17661, 17496, 17522, 17340, 17352, 17333, 17524, 17654, 17348, 17339, 17345, 17359, 17353, 17336, 17550, 17330, 17701, 17321, 17325, 17320, 17683, 17342, 17715, 17334, 17341, 17338, 17337, 17346, 17344, 17327}; +uint32 const possibleSpawns[32] = {17322, 17661, 17496, 17522, 17340, 17352, 17333, 17524, 17654, 17348, 17339, 17345, 17353, 17336, 17550, 17330, 17701, 17321, 17325, 17320, 17683, 17342, 17715, 17334, 17341, 17338, 17337, 17346, 17344, 17327}; enum WebbedCreature { From e57dc1922fceff5ea4c4230c4124b501b54c7b28 Mon Sep 17 00:00:00 2001 From: p-tkachuk Date: Sun, 12 Oct 2025 15:56:34 +0200 Subject: [PATCH 076/140] fix(Scripts/TrialOfTheChampion): Fix Grand Champions agro before event end (#21775) --- .../TrialOfTheChampion/boss_grand_champions.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp index 649a60c6f..3ed2a5f79 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp @@ -246,6 +246,12 @@ public: events.Reset(); } + void MoveInLineOfSight(Unit* who) override + { + if (pInstance && pInstance->GetData(DATA_INSTANCE_PROGRESS) >= INSTANCE_PROGRESS_GRAND_CHAMPIONS_REACHED_DEST) + ScriptedAI::MoveInLineOfSight(who); + } + void JustEngagedWith(Unit* /*who*/) override { events.Reset(); @@ -410,6 +416,12 @@ public: } } + void MoveInLineOfSight(Unit* who) override + { + if (pInstance && pInstance->GetData(DATA_INSTANCE_PROGRESS) >= INSTANCE_PROGRESS_GRAND_CHAMPIONS_REACHED_DEST) + npc_escortAI::MoveInLineOfSight(who); + } + void JustEngagedWith(Unit* /*who*/) override { if (pInstance && pInstance->GetData(DATA_INSTANCE_PROGRESS) == INSTANCE_PROGRESS_CHAMPIONS_UNMOUNTED ) From ad70bedf91a28f06b2ec10de49dc7d4c64aa51ad Mon Sep 17 00:00:00 2001 From: LuckyLuc96 Date: Sun, 12 Oct 2025 09:57:46 -0400 Subject: [PATCH 077/140] fix(DB/SAI): Duskwood Flesh Eating Worms (#22189) --- .../updates/pending_db_world/rev_1748025016685131060.sql | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 data/sql/updates/pending_db_world/rev_1748025016685131060.sql diff --git a/data/sql/updates/pending_db_world/rev_1748025016685131060.sql b/data/sql/updates/pending_db_world/rev_1748025016685131060.sql new file mode 100644 index 000000000..3460b9a3d --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1748025016685131060.sql @@ -0,0 +1,9 @@ +-- +-- With this smart script set, the worm will seek the first player within 18 yards to attack, with no regard to the player's level. Being outside of 18 yards when killing a Rotted One will avoid this behavior. +-- Smart Script #2 will ensure the mob dies after 30 seconds, which is how long they are supposed to live. +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 2462; + +DELETE FROM `smart_scripts` WHERE (`source_type` = 0 AND `entryorguid` = 2462); +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 +(2462, 0, 0, 0, 101, 0, 100, 0, 0, 18, 0, 0, 0, 0, 49, 0, 0, 0, 0, 0, 0, 18, 18, 0, 0, 0, 0, 0, 0, 0, 'Flesh Eating Worm - On 0 or More Players in Range - Start Attacking'), +(2462, 0, 1, 0, 0, 0, 100, 0, 30000, 30000, 0, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Flesh Eating Worm - In Combat - Kill Self'); From 5c6e82aa02da631cf332cb441d4b219a81b5d91f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 12 Oct 2025 13:58:47 +0000 Subject: [PATCH 078/140] chore(DB): import pending files Referenced commit(s): ad70bedf91a28f06b2ec10de49dc7d4c64aa51ad --- .../rev_1748025016685131060.sql => db_world/2025_10_12_01.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1748025016685131060.sql => db_world/2025_10_12_01.sql} (96%) diff --git a/data/sql/updates/pending_db_world/rev_1748025016685131060.sql b/data/sql/updates/db_world/2025_10_12_01.sql similarity index 96% rename from data/sql/updates/pending_db_world/rev_1748025016685131060.sql rename to data/sql/updates/db_world/2025_10_12_01.sql index 3460b9a3d..777adf168 100644 --- a/data/sql/updates/pending_db_world/rev_1748025016685131060.sql +++ b/data/sql/updates/db_world/2025_10_12_01.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_12_00 -> 2025_10_12_01 -- -- With this smart script set, the worm will seek the first player within 18 yards to attack, with no regard to the player's level. Being outside of 18 yards when killing a Rotted One will avoid this behavior. -- Smart Script #2 will ensure the mob dies after 30 seconds, which is how long they are supposed to live. From 1c5f611d628ba5bf95d62be431bbaf55e83b3e6f Mon Sep 17 00:00:00 2001 From: Benjamin Jackson <38561765+heyitsbench@users.noreply.github.com> Date: Sun, 12 Oct 2025 09:59:18 -0400 Subject: [PATCH 079/140] fix(Core/ObjectMgr): Force probabilities of creature displays during runtime if total probability is 0. (#23197) --- src/server/game/Globals/ObjectMgr.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/server/game/Globals/ObjectMgr.cpp b/src/server/game/Globals/ObjectMgr.cpp index c532f5fe7..ff904bb17 100644 --- a/src/server/game/Globals/ObjectMgr.cpp +++ b/src/server/game/Globals/ObjectMgr.cpp @@ -1122,8 +1122,22 @@ void ObjectMgr::CheckCreatureTemplate(CreatureTemplate const* cInfo) if (!cInfo->Models.size()) LOG_ERROR("sql.sql", "Creature (Entry: {}) does not have any existing display id in creature_template_model.", cInfo->Entry); - else if (std::accumulate(cInfo->Models.begin(), cInfo->Models.end(), 0.0f, [](float sum, CreatureModel const& model) { return sum + model.Probability; }) <= 0.0f) - LOG_ERROR("sql.sql", "Creature (Entry: {}) has zero total chance for all models in creature_template_model.", cInfo->Entry); + else + { + float const totalProbability = std::accumulate(cInfo->Models.begin(), cInfo->Models.end(), 0.0f, [](float sum, CreatureModel const& model) { return sum + model.Probability; }); + + if (totalProbability <= 0.0f) + { // There are many cases in official data of all models having a probability of 0. Believe to be treated equivalent to equal chance ONLY if all are zeroed + if (totalProbability == 0.0f) + LOG_DEBUG("sql.sql", "Creature (Entry: {}) has zero total chance for all models in creature_template_model. Setting all to 1.0.", cInfo->Entry); + else // Custom, likely bad data + LOG_ERROR("sql.sql", "Creature (Entry: {}) has less than zero total chance for all models in creature_template_model. Setting all to 1.0.", cInfo->Entry); + + auto& models = const_cast(cInfo)->Models; + for (auto& model : models) + model.Probability = 1.0f; + } + } if (!cInfo->unit_class || ((1 << (cInfo->unit_class - 1)) & CLASSMASK_ALL_CREATURES) == 0) { From b1d526e59d88479a539f27983f743009bf132f7c Mon Sep 17 00:00:00 2001 From: sogladev Date: Sun, 12 Oct 2025 16:00:49 +0200 Subject: [PATCH 080/140] feat(Scripts/Spells): GM utility spells and Beastmaster Mode (#22964) Co-authored-by: ratkosrb --- .../rev_1758207124737991457.sql | 22 +++ src/server/game/Entities/Player/Player.h | 1 + src/server/game/Miscellaneous/Language.h | 3 +- src/server/scripts/Commands/cs_misc.cpp | 53 ++++++- src/server/scripts/Spells/spell_generic.cpp | 150 ++++++++++++++++++ 5 files changed, 221 insertions(+), 8 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1758207124737991457.sql diff --git a/data/sql/updates/pending_db_world/rev_1758207124737991457.sql b/data/sql/updates/pending_db_world/rev_1758207124737991457.sql new file mode 100644 index 000000000..cee7305e2 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1758207124737991457.sql @@ -0,0 +1,22 @@ +-- +-- GM Utility Spell Scripts +DELETE FROM `spell_script_names` WHERE `spell_id` IN (456, 2765, 1509, 18139, 6147, 2763, 20115, 20114, 24676, 24675); +INSERT INTO `spell_script_names` (`spell_id`, `ScriptName`) VALUES +(456, 'spell_gen_showlabel_off'), +(2765, 'spell_gen_showlabel_on'), +(1509, 'spell_gen_gm_off'), +(18139, 'spell_gen_gm_on'), +(6147, 'spell_gen_invis_off'), +(2763, 'spell_gen_invis_on'), +(20115, 'spell_gen_bm_on'), +(20114, 'spell_gen_bm_off'), +(24676, 'spell_gen_bm_on'), +(24675, 'spell_gen_bm_off'); + +DELETE FROM `acore_string` WHERE `entry` = 1186; +INSERT INTO `acore_string` (`entry`, `content_default`, `locale_koKR`, `locale_frFR`, `locale_deDE`, `locale_zhCN`, `locale_zhTW`, `locale_esES`, `locale_esMX`, `locale_ruRU`) VALUES +(1186, 'Beastmaster mode is {}', NULL, NULL, 'Der Beastmaster mode ist an ({})!', '兽王模式:{}', NULL, NULL, NULL, NULL); + +DELETE FROM `command` WHERE `name`='bm'; +INSERT INTO `command` (`name`, `security`, `help`) VALUES +('bm', 3, 'Syntax: .bm [on/off]\nEnable or Disable in game Beastmaster mode or show current state if on/off not provided.'); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 0e03f58d1..7cf536582 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1154,6 +1154,7 @@ public: void SetCommentator(bool on) { ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_COMMENTATOR2, on); } [[nodiscard]] bool IsDeveloper() const { return HasPlayerFlag(PLAYER_FLAGS_DEVELOPER); } void SetDeveloper(bool on) { ApplyModFlag(PLAYER_FLAGS, PLAYER_FLAGS_DEVELOPER, on); } + void SetBeastMaster(bool on) { if (on) SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); else RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } [[nodiscard]] bool isAcceptWhispers() const { return m_ExtraFlags & PLAYER_EXTRA_ACCEPT_WHISPERS; } void SetAcceptWhispers(bool on) { if (on) m_ExtraFlags |= PLAYER_EXTRA_ACCEPT_WHISPERS; else m_ExtraFlags &= ~PLAYER_EXTRA_ACCEPT_WHISPERS; } [[nodiscard]] bool IsGameMaster() const { return m_ExtraFlags & PLAYER_EXTRA_GM_ON; } diff --git a/src/server/game/Miscellaneous/Language.h b/src/server/game/Miscellaneous/Language.h index 5658e4147..5061f873c 100644 --- a/src/server/game/Miscellaneous/Language.h +++ b/src/server/game/Miscellaneous/Language.h @@ -978,7 +978,8 @@ enum AcoreStrings LANG_GUILD_INFO_EXTRA_INFO = 1183, LANG_GUILD_INFO_RANKS = 1184, LANG_GUILD_INFO_RANKS_LIST = 1185, - // Room for more level 3 1186-1198 not used + LANG_COMMAND_BEASTMASTER_MODE = 1186, + // Room for more level 3 1187-1198 not used // Debug commands LANG_DO_NOT_USE_6X_DEBUG_AREATRIGGER_LEFT = 1999, diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 4ca8b5b37..fe1410492 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -193,7 +193,8 @@ public: { "skirmish", HandleSkirmishCommand, SEC_ADMINISTRATOR, Console::No }, { "mailbox", HandleMailBoxCommand, SEC_MODERATOR, Console::No }, { "string", HandleStringCommand, SEC_GAMEMASTER, Console::No }, - { "opendoor", HandleOpenDoorCommand, SEC_GAMEMASTER, Console::No } + { "opendoor", HandleOpenDoorCommand, SEC_GAMEMASTER, Console::No }, + { "bm", HandleBMCommand, SEC_GAMEMASTER, Console::No } }; return commandTable; @@ -504,6 +505,7 @@ public: if (!session) { + handler->SendErrorMessage(LANG_USE_BOL); return false; } @@ -537,9 +539,6 @@ public: SetCommentatorMod(false); return true; } - - handler->SendErrorMessage(LANG_USE_BOL); - return false; } static bool HandleDevCommand(ChatHandler* handler, Optional enableArg) @@ -548,6 +547,7 @@ public: if (!session) { + handler->SendErrorMessage(LANG_USE_BOL); return false; } @@ -582,9 +582,6 @@ public: SetDevMod(false); return true; } - - handler->SendErrorMessage(LANG_USE_BOL); - return false; } static bool HandleGPSCommand(ChatHandler* handler, Optional target) @@ -3069,6 +3066,48 @@ public: handler->SendErrorMessage(LANG_CMD_NO_DOOR_FOUND, range ? *range : 5.0f); return false; } + + static bool HandleBMCommand(ChatHandler* handler, Optional enableArg) + { + WorldSession* session = handler->GetSession(); + + if (!session) + return false; + + auto SetBMMod = [&](bool enable) + { + char const* enabled = "ON"; + char const* disabled = "OFF"; + handler->SendNotification(LANG_COMMAND_BEASTMASTER_MODE, enable ? enabled : disabled); + + session->GetPlayer()->SetBeastMaster(enable); + }; + + if (!enableArg) + { + if (!AccountMgr::IsPlayerAccount(session->GetSecurity()) && session->GetPlayer()->IsDeveloper()) + SetBMMod(true); + else + SetBMMod(false); + + return true; + } + + if (*enableArg) + { + SetBMMod(true); + return true; + } + else + { + SetBMMod(false); + return true; + } + + handler->SendErrorMessage(LANG_USE_BOL); + return false; + } + }; void AddSC_misc_commandscript() diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index 5b1d646ac..fcd58e2f7 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -5528,6 +5528,148 @@ class spell_gen_food_heart_emote : public AuraScript } }; +// 456 - SHOWLABEL Only OFF +class spell_gen_showlabel_off : public SpellScript +{ + PrepareSpellScript(spell_gen_showlabel_off) + + void HandleScriptEffect(SpellEffIndex /*effIndex*/) + { + if (Player* player = GetCaster()->ToPlayer()) + player->SetGMChat(false); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_gen_showlabel_off::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +// 2765 - SHOWLABEL Only ON +class spell_gen_showlabel_on : public SpellScript +{ + PrepareSpellScript(spell_gen_showlabel_on) + + void HandleScriptEffect(SpellEffIndex /*effIndex*/) + { + if (Player* player = GetCaster()->ToPlayer()) + player->SetGMChat(true); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_gen_showlabel_on::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +// 1509 - GM Only OFF +class spell_gen_gm_off : public SpellScript +{ + PrepareSpellScript(spell_gen_gm_off) + + void HandleScriptEffect(SpellEffIndex /*effIndex*/) + { + if (Player* player = GetCaster()->ToPlayer()) + { + player->SetGameMaster(false); + player->UpdateTriggerVisibility(); + } + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_gen_gm_off::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +// 18139 - GM Only ON +class spell_gen_gm_on : public SpellScript +{ + PrepareSpellScript(spell_gen_gm_on) + + void HandleScriptEffect(SpellEffIndex /*effIndex*/) + { + if (Player* player = GetCaster()->ToPlayer()) + { + player->SetGameMaster(true); + player->UpdateTriggerVisibility(); + } + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_gen_gm_on::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +// 6147 - INVIS Only OFF +class spell_gen_invis_off : public SpellScript +{ + PrepareSpellScript(spell_gen_invis_off) + + void HandleScriptEffect(SpellEffIndex /*effIndex*/) + { + if (Player* player = GetCaster()->ToPlayer()) + player->SetGMVisible(true); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_gen_invis_off::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +// 2763 - INVIS Only ON +class spell_gen_invis_on : public SpellScript +{ + PrepareSpellScript(spell_gen_invis_on) + + void HandleScriptEffect(SpellEffIndex /*effIndex*/) + { + if (Player* player = GetCaster()->ToPlayer()) + player->SetGMVisible(false); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_gen_invis_on::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +// 20114, 24675 - BM Only OFF +class spell_gen_bm_off : public SpellScript +{ + PrepareSpellScript(spell_gen_bm_off) + + void HandleScriptEffect(SpellEffIndex /*effIndex*/) + { + if (Player* player = GetCaster()->ToPlayer()) + player->SetBeastMaster(false); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_gen_bm_off::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + +// 20115, 24676 - BM Only ON +class spell_gen_bm_on : public SpellScript +{ + PrepareSpellScript(spell_gen_bm_on) + + void HandleScriptEffect(SpellEffIndex /*effIndex*/) + { + if (Player* player = GetCaster()->ToPlayer()) + player->SetBeastMaster(true); + } + + void Register() override + { + OnEffectHit += SpellEffectFn(spell_gen_bm_on::HandleScriptEffect, EFFECT_0, SPELL_EFFECT_SCRIPT_EFFECT); + } +}; + void AddSC_generic_spell_scripts() { RegisterSpellScript(spell_silithyst); @@ -5693,4 +5835,12 @@ void AddSC_generic_spell_scripts() RegisterSpellScriptWithArgs(spell_gen_translocate, "spell_gen_translocate_up", SPELL_TRANSLOCATION_UP); RegisterSpellScript(spell_gen_cooldown_all); RegisterSpellScript(spell_gen_food_heart_emote); + RegisterSpellScript(spell_gen_showlabel_off); + RegisterSpellScript(spell_gen_showlabel_on); + RegisterSpellScript(spell_gen_gm_off); + RegisterSpellScript(spell_gen_gm_on); + RegisterSpellScript(spell_gen_invis_off); + RegisterSpellScript(spell_gen_invis_on); + RegisterSpellScript(spell_gen_bm_on); + RegisterSpellScript(spell_gen_bm_off); } From a0bbd2fe5eec5e5101a508fbf7a85a870f4625cb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 12 Oct 2025 14:02:06 +0000 Subject: [PATCH 081/140] chore(DB): import pending files Referenced commit(s): b1d526e59d88479a539f27983f743009bf132f7c --- .../rev_1758207124737991457.sql => db_world/2025_10_12_02.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1758207124737991457.sql => db_world/2025_10_12_02.sql} (96%) diff --git a/data/sql/updates/pending_db_world/rev_1758207124737991457.sql b/data/sql/updates/db_world/2025_10_12_02.sql similarity index 96% rename from data/sql/updates/pending_db_world/rev_1758207124737991457.sql rename to data/sql/updates/db_world/2025_10_12_02.sql index cee7305e2..6e86a9643 100644 --- a/data/sql/updates/pending_db_world/rev_1758207124737991457.sql +++ b/data/sql/updates/db_world/2025_10_12_02.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_12_01 -> 2025_10_12_02 -- -- GM Utility Spell Scripts DELETE FROM `spell_script_names` WHERE `spell_id` IN (456, 2765, 1509, 18139, 6147, 2763, 20115, 20114, 24676, 24675); From c79289c4b86bfff6dfd7c8eb1725b6cd6d02fe00 Mon Sep 17 00:00:00 2001 From: GrenderG Date: Sun, 12 Oct 2025 16:02:34 +0200 Subject: [PATCH 082/140] fix(Scripts/Karazhan): Fix Tenris Mirkblood area trigger conditions. (#23162) --- .../EasternKingdoms/Karazhan/boss_tenris_mirkblood.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_tenris_mirkblood.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_tenris_mirkblood.cpp index 8784c7991..07eb7da11 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_tenris_mirkblood.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_tenris_mirkblood.cpp @@ -290,8 +290,8 @@ public: bool OnTrigger(Player* player, AreaTrigger const* /*trigger*/) override { if (InstanceScript* instance = player->GetInstanceScript()) - if (instance->GetBossState(DATA_MIRKBLOOD) != DONE) - if (Creature* mirkblood = instance->GetCreature(DATA_MIRKBLOOD)) + if (Creature* mirkblood = instance->GetCreature(DATA_MIRKBLOOD)) + if (mirkblood->IsAlive() && !mirkblood->IsInCombat()) mirkblood->AI()->Talk(SAY_APPROACH, player); return false; @@ -306,8 +306,8 @@ public: bool OnTrigger(Player* player, AreaTrigger const* /*trigger*/) override { if (InstanceScript* instance = player->GetInstanceScript()) - if (instance->GetBossState(DATA_MIRKBLOOD) != DONE) - if (Creature* mirkblood = instance->GetCreature(DATA_MIRKBLOOD)) + if (Creature* mirkblood = instance->GetCreature(DATA_MIRKBLOOD)) + if (mirkblood->IsAlive() && mirkblood->IsImmuneToPC()) mirkblood->SetImmuneToPC(false); return false; From 6261518ebf383b709c4e8f4d6fee08aab3dcaa5a Mon Sep 17 00:00:00 2001 From: arsinspace <140083535+arsinspace@users.noreply.github.com> Date: Sun, 12 Oct 2025 17:47:42 +0300 Subject: [PATCH 083/140] fix(CORE/DBUpdater): Use stdin instead of -e SOURCE (#22949) --- src/server/database/Updater/DBUpdater.cpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/src/server/database/Updater/DBUpdater.cpp b/src/server/database/Updater/DBUpdater.cpp index 442b48bcb..d32fddd8c 100644 --- a/src/server/database/Updater/DBUpdater.cpp +++ b/src/server/database/Updater/DBUpdater.cpp @@ -496,17 +496,13 @@ void DBUpdater::ApplyFile(DatabaseWorkerPool& pool, std::string const& hos if (ssl == "ssl") args.emplace_back("--ssl-mode=REQUIRED"); - // Execute sql file - args.emplace_back("-e"); - args.emplace_back(Acore::StringFormat("BEGIN; SOURCE {}; COMMIT;", path.generic_string())); - // Database if (!database.empty()) args.emplace_back(database); // Invokes a mysql process which doesn't leak credentials to logs int const ret = Acore::StartProcess(DBUpdaterUtil::GetCorrectedMySQLExecutable(), args, - "sql.updates", "", true); + "sql.updates", path.generic_string(), true); if (ret != EXIT_SUCCESS) { From 951ea50caf04808fbaff9d7120cd95d588d59aec Mon Sep 17 00:00:00 2001 From: Benjamin Jackson <38561765+heyitsbench@users.noreply.github.com> Date: Sun, 12 Oct 2025 10:53:44 -0400 Subject: [PATCH 084/140] fix(DB/Creature): Verify creature models previously from build 10505. (#22928) --- .../updates/pending_db_world/ctm-10505.sql | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 data/sql/updates/pending_db_world/ctm-10505.sql diff --git a/data/sql/updates/pending_db_world/ctm-10505.sql b/data/sql/updates/pending_db_world/ctm-10505.sql new file mode 100644 index 000000000..fd556305c --- /dev/null +++ b/data/sql/updates/pending_db_world/ctm-10505.sql @@ -0,0 +1,39 @@ +DELETE FROM `creature_template_model` WHERE `CreatureID` IN (34382, 34383, 34435, 34476, 34477, 34478, 34479, 34480, 34481, 34482, 34483, 34484, 34644, 34653, 34654, 34675, 34676, 34677, 34678, 34679, 34708, 34710, 34711, 34712, 34713, 34714, 34744, 34768, 35254, 35256, 35260, 35261, 36479, 36506); +INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES +(34382, 0, 29203, 1, 1, 51831), +(34383, 0, 29204, 1, 1, 51831), +(34435, 0, 29226, 1, 1, 51831), +(34476, 0, 29228, 1, 1, 51831), +(34477, 0, 29229, 1, 1, 51831), +(34478, 0, 29230, 1, 1, 51831), +(34479, 0, 29231, 1, 1, 51831), +(34480, 0, 29232, 1, 1, 51831), +(34481, 0, 29233, 1, 1, 51831), +(34482, 0, 29234, 1, 1, 51831), +(34483, 0, 29235, 1, 1, 51831), +(34484, 0, 29236, 1, 1, 51831), +(34644, 0, 29392, 1, 0, 51831), +(34653, 0, 29341, 1, 0, 51831), +(34654, 0, 29330, 1, 0, 51831), +(34675, 0, 29337, 1, 0, 51831), +(34676, 0, 29391, 1, 0, 51831), +(34677, 0, 29338, 1, 0, 51831), +(34678, 0, 29339, 1, 0, 51831), +(34679, 0, 29395, 1, 0, 51831), +(34708, 0, 29324, 1, 0, 51831), +(34710, 0, 29400, 1, 0, 51831), +(34711, 0, 29388, 1, 0, 51831), +(34712, 0, 29365, 1, 0, 51831), +(34713, 0, 29401, 1, 0, 51831), +(34714, 0, 29399, 1, 0, 51831), +(34744, 0, 29444, 1, 0, 51831), +(34768, 0, 29403, 1, 0, 51831), +(35254, 0, 29717, 1, 3, 51831), +(35254, 1, 29718, 1, 3, 51831), +(35254, 2, 29720, 1, 1, 51831), +(35254, 3, 29721, 1, 1, 51831), +(35256, 0, 29719, 1, 1, 51831), +(35260, 0, 29732, 1, 1, 51831), +(35261, 0, 29733, 1, 1, 51831), +(36479, 0, 30120, 1, 1, 51831), +(36506, 0, 30156, 1, 1, 51831); From 868bb56582184226d9d2054db25aab42a367b059 Mon Sep 17 00:00:00 2001 From: Benjamin Jackson <38561765+heyitsbench@users.noreply.github.com> Date: Sun, 12 Oct 2025 10:54:45 -0400 Subject: [PATCH 085/140] fix(DB/Creature): Verify various creature models with no verified build. (#22927) --- data/sql/updates/pending_db_world/ctm-01.sql | 127 +++++++++++++++++++ 1 file changed, 127 insertions(+) create mode 100644 data/sql/updates/pending_db_world/ctm-01.sql diff --git a/data/sql/updates/pending_db_world/ctm-01.sql b/data/sql/updates/pending_db_world/ctm-01.sql new file mode 100644 index 000000000..e107eeb0c --- /dev/null +++ b/data/sql/updates/pending_db_world/ctm-01.sql @@ -0,0 +1,127 @@ +DELETE FROM `creature_template_model` WHERE `CreatureID` IN (15928, 19325, 20794, 26620, 26627, 26628, 26630, 26631, 26632, 26637, 26638, 26641, 26712, 26824, 27483, 27490, 27597, 27598, 27600, 27709, 27753, 27909, 27975, 27977, 27978, 27981, 27982, 27983, 27984, 27985, 28070, 28165, 28546, 28547, 28578, 28579, 28580, 28581, 28582, 28583, 28584, 28585, 28586, 28587, 28684, 28695, 28729, 28730, 28731, 28732, 28733, 28734, 28823, 28826, 28835, 28836, 28837, 28838, 28859, 28860, 28920, 28921, 28922, 28923, 28947, 28961, 28965, 29048, 29062, 29063, 29064, 29240, 29335, 30090, 30118, 30449, 30451, 30452, 30616, 30641, 30643, 30882, 30890, 30897, 30898, 30899, 31218, 31219, 31311, 31317, 31520, 31521, 31534, 31535, 31539, 31540, 31541, 31543, 31734, 31749, 31750, 31751, 31752, 32187); +INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES +(15928, 0, 16137, 1, 0, 51831), +(19325, 0, 18737, 1, 1, 51831), +(20794, 0, 20182, 1, 0, 51831), -- 19978 +(26620, 0, 27077, 1, 1, 51831), +(26620, 1, 27078, 1, 1, 51831), +(26627, 0, 24500, 1, 1, 51831), +(26628, 0, 19732, 1, 1, 51831), +(26630, 0, 26352, 1, 0, 51831), +(26631, 0, 26292, 1, 1, 51831), +(26632, 0, 27072, 1, 0, 51831), +(26637, 0, 26860, 1, 100, 51831), +(26638, 0, 27056, 1, 100, 51831), +(26641, 0, 19734, 1, 1, 51831), +(26712, 0, 169, 1, 0, 51831), -- 17188! +(26712, 1, 17188, 1, 1, 51831), +(26824, 0, 6469, 1, 1, 51831), +(27483, 0, 5240, 1, 1, 51831), +(27490, 0, 7897, 1, 0, 51831), +(27597, 0, 22337, 1, 0, 51831), +(27598, 0, 10978, 1, 1, 51831), +(27598, 1, 10972, 1, 1, 51831), +(27600, 0, 2606, 1, 0, 51831), +(27709, 0, 27079, 1, 1, 51831), +(27709, 1, 27080, 1, 1, 51831), +(27709, 2, 27081, 1, 1, 51831), +(27753, 0, 27079, 1, 1, 51831), +(27753, 1, 27080, 1, 1, 51831), +(27753, 2, 27081, 1, 1, 51831), +(27909, 0, 24925, 1, 0, 51831), +(27975, 0, 26657, 1, 0, 51831), +(27977, 0, 20909, 1, 100, 51831), +(27978, 0, 27483, 1, 100, 51831), +(27981, 0, 25177, 1, 100, 51831), +(27982, 0, 25754, 1, 0, 51831), +(27983, 0, 25991, 1, 1, 51831), +(27984, 0, 25987, 1, 1, 51831), +(27985, 0, 26148, 1, 0, 51831), +(28070, 0, 26353, 1, 100, 51831), +(28165, 0, 25176, 1, 100, 51831), +(28546, 0, 27484, 1, 0, 51831), +(28547, 0, 8715, 1, 0, 51831), +(28578, 0, 25984, 1, 0, 51831), +(28579, 0, 25982, 1, 0, 51831), +(28580, 0, 25985, 1, 0, 51831), +(28581, 0, 25759, 1, 0, 51831), +(28582, 0, 25754, 1, 0, 51831), +(28583, 0, 25654, 1, 0, 51831), +(28584, 0, 24905, 1, 0, 51831), +(28585, 0, 2170, 1, 0, 51831), +(28586, 0, 27301, 1, 1, 51831), -- scale 1.3! +(28587, 0, 27071, 1, 1, 51831), +(28684, 0, 27394, 1, 0, 51831), +(28695, 0, 25629, 1, 0, 51831), +(28729, 0, 23984, 1, 0, 51831), +(28730, 0, 23568, 1, 0, 51831), +(28731, 0, 25729, 1, 0, 51831), +(28732, 0, 23567, 1, 0, 51831), +(28733, 0, 25258, 1, 0, 51831), +(28734, 0, 25237, 1, 0, 51831), +(28823, 0, 1126, 1, 0, 51831), +(28823, 1, 11686, 1, 1, 51831), +(28826, 0, 26381, 1, 0, 51831), +(28835, 0, 26143, 1, 1, 51831), +(28836, 0, 25756, 1, 1, 51831), +(28837, 0, 25757, 1, 1, 51831), +(28838, 0, 26053, 1, 0, 51831), +(28859, 0, 26752, 1, 0, 51831), +(28860, 0, 27035, 1, 0, 51831), +(28920, 0, 27092, 1, 0, 51831), +(28921, 0, 26776, 1, 0, 51831), +(28922, 0, 27395, 1, 0, 51831), -- scale 1.15! +(28923, 0, 27485, 1, 1, 51831), +(28947, 0, 169, 1, 0, 51831), +(28947, 1, 11686, 1, 1, 51831), +(28961, 0, 25984, 1, 0, 51831), +(28965, 0, 25985, 1, 0, 51831), +(29048, 0, 26937, 1, 0, 51831), +(29062, 0, 25768, 1, 0, 51831), +(29063, 0, 3004, 1, 0, 51831), +(29064, 0, 23564, 1, 0, 51831), +(29240, 0, 26065, 1, 0, 51831), -- scale 1.3! +(29335, 0, 23565, 1, 0, 51831), +(30090, 0, 169, 1, 0, 51831), +(30090, 1, 11686, 1, 1, 51831), +(30118, 0, 169, 1, 0, 51831), +(30118, 1, 14501, 1, 1, 51831), -- 11686, scale 2! +(30449, 0, 27039, 1, 0, 51831), +(30451, 0, 27421, 1, 0, 51831), +(30452, 0, 27082, 1, 0, 51831), +(30616, 0, 1126, 1, 0, 51831), +(30616, 1, 11686, 1, 1, 51831), -- 16925 +(30641, 0, 15294, 1, 0, 51831), +(30643, 0, 2172, 1, 0, 51831), +(30882, 0, 28014, 1, 1, 51831), +(30890, 0, 19295, 1, 0, 51831), +(30897, 0, 18783, 1, 0, 51831), +(30897, 1, 27401, 1, 1, 51831), -- 11686 +(30898, 0, 18783, 1, 0, 51831), +(30898, 1, 27401, 1, 1, 51831), -- 11686 +(30899, 0, 18783, 1, 0, 51831), +(30899, 1, 16925, 1, 1, 51831), -- 11686 +(31218, 0, 8311, 1, 0, 51831), +(31219, 0, 12894, 1, 0, 51831), +(31311, 0, 27035, 1, 0, 51831), +(31317, 0, 2172, 1, 0, 51831), +(31520, 0, 27421, 1, 0, 51831), +(31521, 0, 15294, 1, 0, 51831), +(31534, 0, 27082, 1, 0, 51831), +(31535, 0, 27039, 1, 0, 51831), +(31539, 0, 28014, 1, 1, 51831), +(31540, 0, 19295, 1, 0, 51831), +(31541, 0, 8311, 1, 0, 51831), +(31543, 0, 12894, 1, 0, 51831), +(31734, 0, 26752, 1, 0, 51831), +(31749, 0, 26876, 1, 0, 51831), +(31750, 0, 24316, 1, 1, 51831), +(31750, 1, 24317, 1, 1, 51831), +(31750, 2, 24318, 1, 1, 51831), +(31750, 3, 24319, 1, 1, 51831), +(31751, 0, 24316, 1, 1, 51831), +(31751, 1, 24317, 1, 1, 51831), +(31751, 2, 24318, 1, 1, 51831), +(31751, 3, 24319, 1, 1, 51831), +(31752, 0, 25835, 1, 1, 51831), +(32187, 0, 26753, 1, 0, 51831); From ae380ab41afb9430eb9a67ecc4fbb97989b67e52 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 12 Oct 2025 14:54:52 +0000 Subject: [PATCH 086/140] chore(DB): import pending files Referenced commit(s): 951ea50caf04808fbaff9d7120cd95d588d59aec --- .../{pending_db_world/ctm-01.sql => db_world/2025_10_12_03.sql} | 1 + .../ctm-10505.sql => db_world/2025_10_12_04.sql} | 1 + 2 files changed, 2 insertions(+) rename data/sql/updates/{pending_db_world/ctm-01.sql => db_world/2025_10_12_03.sql} (99%) rename data/sql/updates/{pending_db_world/ctm-10505.sql => db_world/2025_10_12_04.sql} (97%) diff --git a/data/sql/updates/pending_db_world/ctm-01.sql b/data/sql/updates/db_world/2025_10_12_03.sql similarity index 99% rename from data/sql/updates/pending_db_world/ctm-01.sql rename to data/sql/updates/db_world/2025_10_12_03.sql index e107eeb0c..c6427ab5e 100644 --- a/data/sql/updates/pending_db_world/ctm-01.sql +++ b/data/sql/updates/db_world/2025_10_12_03.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_12_02 -> 2025_10_12_03 DELETE FROM `creature_template_model` WHERE `CreatureID` IN (15928, 19325, 20794, 26620, 26627, 26628, 26630, 26631, 26632, 26637, 26638, 26641, 26712, 26824, 27483, 27490, 27597, 27598, 27600, 27709, 27753, 27909, 27975, 27977, 27978, 27981, 27982, 27983, 27984, 27985, 28070, 28165, 28546, 28547, 28578, 28579, 28580, 28581, 28582, 28583, 28584, 28585, 28586, 28587, 28684, 28695, 28729, 28730, 28731, 28732, 28733, 28734, 28823, 28826, 28835, 28836, 28837, 28838, 28859, 28860, 28920, 28921, 28922, 28923, 28947, 28961, 28965, 29048, 29062, 29063, 29064, 29240, 29335, 30090, 30118, 30449, 30451, 30452, 30616, 30641, 30643, 30882, 30890, 30897, 30898, 30899, 31218, 31219, 31311, 31317, 31520, 31521, 31534, 31535, 31539, 31540, 31541, 31543, 31734, 31749, 31750, 31751, 31752, 32187); INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES (15928, 0, 16137, 1, 0, 51831), diff --git a/data/sql/updates/pending_db_world/ctm-10505.sql b/data/sql/updates/db_world/2025_10_12_04.sql similarity index 97% rename from data/sql/updates/pending_db_world/ctm-10505.sql rename to data/sql/updates/db_world/2025_10_12_04.sql index fd556305c..fa019496a 100644 --- a/data/sql/updates/pending_db_world/ctm-10505.sql +++ b/data/sql/updates/db_world/2025_10_12_04.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_12_03 -> 2025_10_12_04 DELETE FROM `creature_template_model` WHERE `CreatureID` IN (34382, 34383, 34435, 34476, 34477, 34478, 34479, 34480, 34481, 34482, 34483, 34484, 34644, 34653, 34654, 34675, 34676, 34677, 34678, 34679, 34708, 34710, 34711, 34712, 34713, 34714, 34744, 34768, 35254, 35256, 35260, 35261, 36479, 36506); INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES (34382, 0, 29203, 1, 1, 51831), From cbfd00a37c018005834e28ee3860306e56c465c5 Mon Sep 17 00:00:00 2001 From: Benjamin Jackson <38561765+heyitsbench@users.noreply.github.com> Date: Sun, 12 Oct 2025 10:57:36 -0400 Subject: [PATCH 087/140] fix(DB/Creature): Verify creature models previously from build 11723. (#22924) --- .../updates/pending_db_world/ctm-11723.sql | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 data/sql/updates/pending_db_world/ctm-11723.sql diff --git a/data/sql/updates/pending_db_world/ctm-11723.sql b/data/sql/updates/pending_db_world/ctm-11723.sql new file mode 100644 index 000000000..8075859e8 --- /dev/null +++ b/data/sql/updates/pending_db_world/ctm-11723.sql @@ -0,0 +1,22 @@ +DELETE FROM `creature_template_model` WHERE `CreatureID` IN (10184, 11262, 12758, 28681, 30084, 30161, 30245, 30248, 30249, 30282, 30592, 32295, 36561); +INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES +(10184, 0, 8570, 1, 0, 51831), +(11262, 0, 397, 1, 0, 51831), +(12758, 0, 11686, 1, 0, 51831), +(28681, 0, 26131, 1, 0, 51831), +(30084, 0, 26753, 1, 0, 51831), +(30161, 0, 25835, 1, 1, 51831), +(30245, 0, 24316, 1, 1, 51831), +(30245, 1, 24317, 1, 1, 51831), +(30245, 2, 24318, 1, 1, 51831), +(30245, 3, 24319, 1, 1, 51831), +(30248, 0, 26876, 1, 0, 51831), +(30249, 0, 24316, 1, 1, 51831), +(30249, 1, 24317, 1, 1, 51831), +(30249, 2, 24318, 1, 1, 51831), +(30249, 3, 24319, 1, 1, 51831), +(30282, 0, 14501, 1, 0, 51831), +(30592, 0, 169, 1, 0, 51831), +(30592, 1, 11686, 1, 1, 51831), +(32295, 0, 27569, 1, 1, 51831), +(36561, 0, 12891, 1, 0, 51831); From 717379628b96cf68845c41b46f88d1b2be36f21d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 12 Oct 2025 14:58:45 +0000 Subject: [PATCH 088/140] chore(DB): import pending files Referenced commit(s): cbfd00a37c018005834e28ee3860306e56c465c5 --- .../ctm-11723.sql => db_world/2025_10_12_05.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/ctm-11723.sql => db_world/2025_10_12_05.sql} (95%) diff --git a/data/sql/updates/pending_db_world/ctm-11723.sql b/data/sql/updates/db_world/2025_10_12_05.sql similarity index 95% rename from data/sql/updates/pending_db_world/ctm-11723.sql rename to data/sql/updates/db_world/2025_10_12_05.sql index 8075859e8..2bad910a8 100644 --- a/data/sql/updates/pending_db_world/ctm-11723.sql +++ b/data/sql/updates/db_world/2025_10_12_05.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_12_04 -> 2025_10_12_05 DELETE FROM `creature_template_model` WHERE `CreatureID` IN (10184, 11262, 12758, 28681, 30084, 30161, 30245, 30248, 30249, 30282, 30592, 32295, 36561); INSERT INTO `creature_template_model` (`CreatureID`, `Idx`, `CreatureDisplayID`, `DisplayScale`, `Probability`, `VerifiedBuild`) VALUES (10184, 0, 8570, 1, 0, 51831), From fc39bf67535dd8e59c9a841a7bc3df44c6f42c58 Mon Sep 17 00:00:00 2001 From: sogladev Date: Sun, 12 Oct 2025 17:12:54 +0200 Subject: [PATCH 089/140] fix(Core/Player): remove vendor icon if there is no gossip vendor option (#23026) --- .../rev_1758916393003655928.sql | 6 ++ src/server/game/Entities/Player/Player.cpp | 68 ++++++++++++++++++- src/server/game/Entities/Player/Player.h | 5 +- src/server/game/Entities/Unit/Unit.cpp | 3 + 4 files changed, 79 insertions(+), 3 deletions(-) create mode 100644 data/sql/updates/pending_db_world/rev_1758916393003655928.sql diff --git a/data/sql/updates/pending_db_world/rev_1758916393003655928.sql b/data/sql/updates/pending_db_world/rev_1758916393003655928.sql new file mode 100644 index 000000000..980a335d2 --- /dev/null +++ b/data/sql/updates/pending_db_world/rev_1758916393003655928.sql @@ -0,0 +1,6 @@ +-- +DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=23 AND `SourceEntry`=0 AND `SourceId`=0 AND `SourceGroup` IN (3443, 12919, 15471); + +DELETE FROM `conditions` WHERE (`SourceTypeOrReferenceId` = 15) AND (`SourceGroup` = 9087) AND (`SourceEntry` = 0) AND (`SourceId` = 0) AND (`ElseGroup` = 0) AND (`ConditionTypeOrReference` = 12) AND (`ConditionTarget` = 0) AND (`ConditionValue1` = 109) AND (`ConditionValue2` = 0) AND (`ConditionValue3` = 0); +INSERT INTO `conditions` (`SourceTypeOrReferenceId`, `SourceGroup`, `SourceEntry`, `SourceId`, `ElseGroup`, `ConditionTypeOrReference`, `ConditionTarget`, `ConditionValue1`, `ConditionValue2`, `ConditionValue3`, `NegativeCondition`, `ErrorType`, `ErrorTextId`, `ScriptName`, `Comment`) VALUES +(15, 9087, 0, 0, 0, 12, 0, 109, 0, 0, 0, 0, 0, '', 'event \'Sun\'s Reach Reclamation Phase Anvil\' must be active'); diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index d310563ce..a82d55eb8 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -90,6 +90,7 @@ #include "WorldStateDefines.h" #include "WorldStatePackets.h" #include +#include /// @todo: this import is not necessary for compilation and marked as unused by the IDE // however, for some reasons removing it would cause a damn linking issue @@ -14364,6 +14365,67 @@ bool Player::CanSeeSpellClickOn(Creature const* c) const return false; } +/** + * @brief Checks if any vendor option is available in the gossip menu tree for a given creature. + * + * @param menuId The starting gossip menu ID to check. + * @param creature Pointer to the creature whose gossip menus are being checked. + * @return true if a vendor option is available in any accessible menu; false otherwise. + */ +bool Player::AnyVendorOptionAvailable(uint32 menuId, Creature const* creature) const +{ + std::set visitedMenus; + std::queue menusToCheck; + menusToCheck.push(menuId); + + while (!menusToCheck.empty()) + { + uint32 const currentMenuId = menusToCheck.front(); + menusToCheck.pop(); + + if (visitedMenus.find(currentMenuId) != visitedMenus.end()) + continue; + + visitedMenus.insert(currentMenuId); + + GossipMenuItemsMapBounds menuItemBounds = sObjectMgr->GetGossipMenuItemsMapBounds(currentMenuId); + + if (menuItemBounds.first == menuItemBounds.second && currentMenuId != 0) + continue; + + for (auto itr = menuItemBounds.first; itr != menuItemBounds.second; ++itr) + { + if (!sConditionMgr->IsObjectMeetToConditions(const_cast(this), const_cast(creature), itr->second.Conditions)) + continue; + + if (itr->second.OptionType == GOSSIP_OPTION_VENDOR) + return true; + else if (itr->second.ActionMenuID) + { + GossipMenusMapBounds menuBounds = sObjectMgr->GetGossipMenusMapBounds(itr->second.ActionMenuID); + bool menuAccessible = false; + + if (menuBounds.first == menuBounds.second) + menuAccessible = true; + else + { + for (auto menuItr = menuBounds.first; menuItr != menuBounds.second; ++menuItr) + if (sConditionMgr->IsObjectMeetToConditions(const_cast(this), const_cast(creature), menuItr->second.Conditions)) + { + menuAccessible = true; + break; + } + } + + if (menuAccessible) + menusToCheck.push(itr->second.ActionMenuID); + } + } + } + + return false; +} + bool Player::CanSeeVendor(Creature const* creature) const { if (!creature->HasNpcFlag(UNIT_NPC_FLAG_VENDOR)) @@ -14371,9 +14433,11 @@ bool Player::CanSeeVendor(Creature const* creature) const ConditionList conditions = sConditionMgr->GetConditionsForNpcVendorEvent(creature->GetEntry(), 0); if (!sConditionMgr->IsObjectMeetToConditions(const_cast(this), const_cast(creature), conditions)) - { return false; - } + + uint32 const menuId = creature->GetCreatureTemplate()->GossipMenuId; + if (!AnyVendorOptionAvailable(menuId, creature)) + return false; return true; } diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 7cf536582..ea2cd277a 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -41,6 +41,7 @@ #include "TradeData.h" #include "Unit.h" #include "WorldSession.h" +#include #include #include @@ -2548,7 +2549,9 @@ public: //bool isActiveObject() const { return true; } bool CanSeeSpellClickOn(Creature const* creature) const; [[nodiscard]] bool CanSeeVendor(Creature const* creature) const; - +private: + [[nodiscard]] bool AnyVendorOptionAvailable(uint32 menuId, Creature const* creature) const; +public: [[nodiscard]] uint32 GetChampioningFaction() const { return m_ChampioningFaction; } void SetChampioningFaction(uint32 faction) { m_ChampioningFaction = faction; } Spell* m_spellModTakingSpell; diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index eb1a3f06b..1fbbf0d9c 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -20791,7 +20791,10 @@ void Unit::PatchValuesUpdate(ByteBuffer& valuesUpdateBuf, BuildValuesCachePosPoi appendValue &= ~UNIT_NPC_FLAG_SPELLCLICK; if (!target->CanSeeVendor(creature)) + { + appendValue &= ~UNIT_NPC_FLAG_REPAIR; appendValue &= ~UNIT_NPC_FLAG_VENDOR_MASK; + } if (!creature->IsValidTrainerForPlayer(target, &appendValue)) appendValue &= ~UNIT_NPC_FLAG_TRAINER; From 4a13535e37c8fe4d5a20def48547ae06c0fcc09d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Sun, 12 Oct 2025 15:14:18 +0000 Subject: [PATCH 090/140] chore(DB): import pending files Referenced commit(s): fc39bf67535dd8e59c9a841a7bc3df44c6f42c58 --- .../rev_1758916393003655928.sql => db_world/2025_10_12_06.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/rev_1758916393003655928.sql => db_world/2025_10_12_06.sql} (95%) diff --git a/data/sql/updates/pending_db_world/rev_1758916393003655928.sql b/data/sql/updates/db_world/2025_10_12_06.sql similarity index 95% rename from data/sql/updates/pending_db_world/rev_1758916393003655928.sql rename to data/sql/updates/db_world/2025_10_12_06.sql index 980a335d2..2bcb51541 100644 --- a/data/sql/updates/pending_db_world/rev_1758916393003655928.sql +++ b/data/sql/updates/db_world/2025_10_12_06.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_12_05 -> 2025_10_12_06 -- DELETE FROM `conditions` WHERE `SourceTypeOrReferenceId`=23 AND `SourceEntry`=0 AND `SourceId`=0 AND `SourceGroup` IN (3443, 12919, 15471); From c24c381bf5a2c654a6ea4a8ca4b716283dea3640 Mon Sep 17 00:00:00 2001 From: sogladev Date: Sun, 12 Oct 2025 18:35:16 +0200 Subject: [PATCH 091/140] fix(Core/Scripting): fix Defias Thug waypoint errors (#22994) --- src/server/game/Scripting/MapScripts.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/server/game/Scripting/MapScripts.cpp b/src/server/game/Scripting/MapScripts.cpp index 76e945a9c..e7389b4d1 100644 --- a/src/server/game/Scripting/MapScripts.cpp +++ b/src/server/game/Scripting/MapScripts.cpp @@ -880,7 +880,6 @@ void Map::ScriptsProcess() if (!cSource->IsAlive()) return; - cSource->GetMotionMaster()->MovementExpired(); cSource->GetMotionMaster()->MoveIdle(); switch (step.script->Movement.MovementType) From 9f732c8cea96a26f1eef699e1b2d00c69e73afc9 Mon Sep 17 00:00:00 2001 From: Yehonal Date: Sun, 12 Oct 2025 22:28:22 +0200 Subject: [PATCH 092/140] feat(Bash/ServiceManager): enhance path portability (#22982) --- .vscode/settings.json | 4 +- apps/startup-scripts/README.md | 34 + apps/startup-scripts/src/run-engine | 7 + apps/startup-scripts/src/service-manager.sh | 809 ++++++++++++++++-- .../test/test_startup_scripts.bats | 183 +++- 5 files changed, 966 insertions(+), 71 deletions(-) mode change 100644 => 100755 apps/startup-scripts/test/test_startup_scripts.bats diff --git a/.vscode/settings.json b/.vscode/settings.json index dcc292e7a..077d1618f 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -122,5 +122,7 @@ "C_Cpp.default.compileCommands": "${workspaceFolder}/build/compile_commands.json", "C_Cpp.default.cppStandard": "c++17", "C_Cpp.default.configurationProvider": "ms-vscode.cmake-tools", - "C_Cpp.default.compilerPath": "/usr/bin/clang" + "C_Cpp.default.compilerPath": "/usr/bin/clang", + "cmake.sourceDirectory": ["${workspaceFolder}"], + "cmake.buildDirectory": "${workspaceFolder}/var/build", } diff --git a/apps/startup-scripts/README.md b/apps/startup-scripts/README.md index 0c7cb0940..b99c38bd6 100644 --- a/apps/startup-scripts/README.md +++ b/apps/startup-scripts/README.md @@ -453,6 +453,40 @@ This is particularly useful for: - **Multiple Projects**: Separate service configurations per project - **Team Collaboration**: Share service setups across development teams +#### Service Configuration Portability + +The service manager automatically stores binary and configuration paths as relative paths when they are located under the `AC_SERVICE_CONFIG_DIR`, making service configurations portable across environments: + +```bash +# Set up a portable project structure +export AC_SERVICE_CONFIG_DIR="/opt/myproject/services" +mkdir -p "$AC_SERVICE_CONFIG_DIR"/{bin,etc} + +# Copy your binaries and configs +cp /path/to/compiled/authserver "$AC_SERVICE_CONFIG_DIR/bin/" +cp /path/to/authserver.conf "$AC_SERVICE_CONFIG_DIR/etc/" + +# Create service - paths under AC_SERVICE_CONFIG_DIR will be stored as relative +./service-manager.sh create auth authserver \ + --bin-path "$AC_SERVICE_CONFIG_DIR/bin" \ + --server-config "$AC_SERVICE_CONFIG_DIR/etc/authserver.conf" + +# Registry will contain relative paths like "bin/authserver" and "etc/authserver.conf" +# instead of absolute paths, making the entire directory portable +``` + +**Benefits:** +- **Environment Independence**: Move the entire services directory between machines +- **Container Friendly**: Perfect for Docker volumes and bind mounts +- **Backup/Restore**: Archive and restore complete service configurations +- **Development/Production Parity**: Same relative structure across environments + +**How it works:** +- Paths under `AC_SERVICE_CONFIG_DIR` are automatically stored as relative paths +- Paths outside `AC_SERVICE_CONFIG_DIR` are stored as absolute paths for safety +- When services are restored or started, relative paths are resolved from `AC_SERVICE_CONFIG_DIR` +- If `AC_SERVICE_CONFIG_DIR` is not set, all paths are stored as absolute paths (traditional behavior) + #### Migration from Legacy Format If you have existing services in the old format, use the migration script: diff --git a/apps/startup-scripts/src/run-engine b/apps/startup-scripts/src/run-engine index 761e51b3d..72a3f304c 100755 --- a/apps/startup-scripts/src/run-engine +++ b/apps/startup-scripts/src/run-engine @@ -219,6 +219,13 @@ function parse_arguments() { export PARSED_CONFIG_FILE="$config_file" export PARSED_SERVERCONFIG="$serverconfig" export PARSED_SESSION_MANAGER="$session_manager" + + echo "Parsed arguments:" + echo " Mode: $PARSED_MODE" + echo " Server Binary: $PARSED_SERVERBIN" + echo " Config File: $PARSED_CONFIG_FILE" + echo " Server Config: $PARSED_SERVERCONFIG" + echo " Session Manager: $PARSED_SESSION_MANAGER" } # Start service (single run or with simple-restarter) diff --git a/apps/startup-scripts/src/service-manager.sh b/apps/startup-scripts/src/service-manager.sh index ccc4e8e35..a71212ec2 100755 --- a/apps/startup-scripts/src/service-manager.sh +++ b/apps/startup-scripts/src/service-manager.sh @@ -16,6 +16,19 @@ ROOT_DIR="$(cd "$CURRENT_PATH/../../.." && pwd)" # Configuration directory (can be overridden with AC_SERVICE_CONFIG_DIR) CONFIG_DIR="${AC_SERVICE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/azerothcore/services}" REGISTRY_FILE="$CONFIG_DIR/service_registry.json" +export AC_SERVICE_CONFIG_DIR="${AC_SERVICE_CONFIG_DIR:-$CONFIG_DIR}" + +# Default values for variables that might be loaded from config files +# This prevents "unbound variable" errors when sourcing configuration files +RUN_ENGINE_CONFIG_FILE="${RUN_ENGINE_CONFIG_FILE:-}" +SESSION_MANAGER="${SESSION_MANAGER:-}" +SESSION_NAME="${SESSION_NAME:-}" +BINPATH="${BINPATH:-}" +SERVERBIN="${SERVERBIN:-}" +CONFIG="${CONFIG:-}" +RESTART_POLICY="${RESTART_POLICY:-}" +GDB_ENABLED="${GDB_ENABLED:-}" +SERVER_CONFIG="${SERVER_CONFIG:-}" # Colors for output readonly YELLOW='\033[1;33m' @@ -32,6 +45,114 @@ if [ ! -f "$REGISTRY_FILE" ]; then echo "[]" > "$REGISTRY_FILE" fi +# Path conversion utilities for portability +# When AC_SERVICE_CONFIG_DIR (hence CONFIG_DIR) is set, always store paths +# relative to it. Resolve relative paths back against CONFIG_DIR. +function make_path_relative() { + local input="$1" + + # Pass through empty or non-absolute inputs + if [ -z "$input" ] || [[ ! "$input" = /* ]]; then + echo "$input" + return + fi + + # If AC_SERVICE_CONFIG_DIR is explicitly set, check if path is under it + if [ -n "${AC_SERVICE_CONFIG_DIR:-}" ]; then + local config_dir_abs + config_dir_abs="$(realpath -m "$AC_SERVICE_CONFIG_DIR" 2>/dev/null || echo "$AC_SERVICE_CONFIG_DIR")" + local rel_path="" + + if command -v realpath >/dev/null 2>&1; then + rel_path="$(realpath --relative-to="$config_dir_abs" "$input" 2>/dev/null || true)" + if [ -z "$rel_path" ]; then + rel_path="$(realpath -m --relative-to="$config_dir_abs" "$input" 2>/dev/null || true)" + fi + fi + + if [ -z "$rel_path" ] && command -v python3 >/dev/null 2>&1; then + rel_path="$(python3 -c 'import os,sys; print(os.path.relpath(sys.argv[1], sys.argv[2]))' "$input" "$config_dir_abs" 2>/dev/null || true)" + fi + + if [ -n "$rel_path" ]; then + echo "$rel_path" + return + fi + fi + + # If not under AC_SERVICE_CONFIG_DIR or AC_SERVICE_CONFIG_DIR not set, return absolute path unchanged + echo "$input" +} + +function make_path_absolute() { + local input="$1" + + # Already absolute + if [[ "$input" = /* ]]; then + echo "$input" + return + fi + + # Resolve relative paths against AC_SERVICE_CONFIG_DIR when explicitly set + if [ -n "${AC_SERVICE_CONFIG_DIR:-}" ] && [ -n "$input" ]; then + local config_dir_abs + config_dir_abs="$(realpath "$AC_SERVICE_CONFIG_DIR" 2>/dev/null || echo "$AC_SERVICE_CONFIG_DIR")" + # Join and normalize; do not require the target to exist + realpath -m "$config_dir_abs/$input" 2>/dev/null || echo "$config_dir_abs/$input" + return + fi + + # Fallback: try to normalize relative to current directory + realpath -m "$input" 2>/dev/null || echo "$input" +} + +# Tokenize a shell command string without executing it. Supports basic quoting +# and escaping rules so paths with spaces remain intact. +# Serialize a command definition (binary + args) to JSON while converting paths +# to be relative to CONFIG_DIR when possible. +function serialize_exec_definition() { + local command_path="$1" + shift + local -a args=("$@") + local rel_command="$command_path" + + if [[ -n "$command_path" ]]; then + rel_command="$(make_path_relative "$command_path")" + fi + + local -a rel_args=() + local arg + for arg in "${args[@]}"; do + if [[ "$arg" == /* ]]; then + rel_args+=("$(make_path_relative "$arg")") + else + rel_args+=("$arg") + fi + done + + local args_json + args_json=$(printf '%s\0' "${rel_args[@]}" | jq -R -s 'split("\u0000")[:-1]') + + jq -n --arg command "$rel_command" --argjson args "$args_json" '{command: $command, args: $args}' +} + +# Combine command + args into a shell-safe string suitable for pm2/systemd +# ExecStart lines. Each token is bash-quoted to preserve spaces. +function render_exec_command() { + local command_path="$1" + shift + local -a args=("$@") + local parts=() + local token + + parts+=("$(printf '%q' "$command_path")") + for token in "${args[@]}"; do + parts+=("$(printf '%q' "$token")") + done + + (IFS=' '; printf '%s' "${parts[*]}") +} + # Check dependencies check_dependencies() { command -v jq >/dev/null 2>&1 || { @@ -53,6 +174,18 @@ function add_service_to_registry() { local gdb_enabled="$9" local pm2_opts="${10}" local server_config="${11}" + local exec_definition="${12:-}" # JSON payload describing command + args + + # Convert paths to relative if possible for portability + local relative_bin_path="$(make_path_relative "$bin_path")" + + # Convert server_config to relative if possible for portability + local relative_server_config="" + if [ -n "$server_config" ] && [ "$server_config" != "null" ]; then + relative_server_config="$(make_path_relative "$server_config")" + else + relative_server_config="$server_config" + fi # Remove any existing entry with the same service name to avoid duplicates local tmp_file @@ -61,10 +194,14 @@ function add_service_to_registry() { # Add the new entry to the registry tmp_file=$(mktemp) + local exec_json_payload="null" + if [ -n "$exec_definition" ]; then + exec_json_payload="$exec_definition" + fi jq --arg name "$service_name" \ --arg provider "$provider" \ --arg type "$service_type" \ - --arg bin_path "$bin_path" \ + --arg bin_path "$relative_bin_path" \ --arg args "$args" \ --arg created "$(date -Iseconds)" \ --arg systemd_type "$systemd_type" \ @@ -72,8 +209,9 @@ function add_service_to_registry() { --arg session_manager "$session_manager" \ --arg gdb_enabled "$gdb_enabled" \ --arg pm2_opts "$pm2_opts" \ - --arg server_config "$server_config" \ - '. += [{"name": $name, "provider": $provider, "type": $type, "bin_path": $bin_path, "args": $args, "created": $created, "status": "active", "systemd_type": $systemd_type, "restart_policy": $restart_policy, "session_manager": $session_manager, "gdb_enabled": $gdb_enabled, "pm2_opts": $pm2_opts, "server_config": $server_config}]' \ + --arg server_config "$relative_server_config" \ + --argjson exec "$exec_json_payload" \ + '. += [{"name": $name, "provider": $provider, "type": $type, "bin_path": $bin_path, "exec": $exec, "args": $args, "created": $created, "status": "active", "systemd_type": $systemd_type, "restart_policy": $restart_policy, "session_manager": $session_manager, "gdb_enabled": $gdb_enabled, "pm2_opts": $pm2_opts, "server_config": $server_config}]' \ "$REGISTRY_FILE" > "$tmp_file" && mv "$tmp_file" "$REGISTRY_FILE" echo -e "${GREEN}Service '$service_name' added to registry${NC}" @@ -117,7 +255,7 @@ function restore_missing_services() { local name=$(echo "$service" | jq -r '.name') local provider=$(echo "$service" | jq -r '.provider') local service_type=$(echo "$service" | jq -r '.type') - local bin_path=$(echo "$service" | jq -r '.bin_path // "unknown"') + local bin_path_raw=$(echo "$service" | jq -r '.bin_path // "unknown"') local args=$(echo "$service" | jq -r '.args // ""') local status=$(echo "$service" | jq -r '.status // "active"') local systemd_type=$(echo "$service" | jq -r '.systemd_type // "--user"') @@ -125,7 +263,16 @@ function restore_missing_services() { local session_manager=$(echo "$service" | jq -r '.session_manager // "none"') local gdb_enabled=$(echo "$service" | jq -r '.gdb_enabled // "0"') local pm2_opts=$(echo "$service" | jq -r '.pm2_opts // ""') - local server_config=$(echo "$service" | jq -r '.server_config // ""') + local server_config_raw=$(echo "$service" | jq -r '.server_config // ""') + + # Convert paths back to absolute for operation + local bin_path="$(make_path_absolute "$bin_path_raw")" + local server_config="" + if [ -n "$server_config_raw" ] && [ "$server_config_raw" != "null" ] && [ "$server_config_raw" != "" ]; then + server_config="$(make_path_absolute "$server_config_raw")" + else + server_config="$server_config_raw" + fi local service_exists=false @@ -166,14 +313,61 @@ function restore_missing_services() { local name=$(echo "$service" | jq -r '.name') local provider=$(echo "$service" | jq -r '.provider') local service_type=$(echo "$service" | jq -r '.type') - local bin_path=$(echo "$service" | jq -r '.bin_path') - local args=$(echo "$service" | jq -r '.args') local systemd_type=$(echo "$service" | jq -r '.systemd_type // "--user"') local restart_policy=$(echo "$service" | jq -r '.restart_policy // "always"') local session_manager=$(echo "$service" | jq -r '.session_manager // "none"') local gdb_enabled=$(echo "$service" | jq -r '.gdb_enabled // "0"') local pm2_opts=$(echo "$service" | jq -r '.pm2_opts // ""') - local server_config=$(echo "$service" | jq -r '.server_config // ""') + local status=$(echo "$service" | jq -r '.status // "active"') + local service_resolved="$(get_service_info_resolved "$name")" + local bin_path="$(echo "$service_resolved" | jq -r '.bin_path // "unknown"')" + local server_config="$(echo "$service_resolved" | jq -r '.server_config // ""')" + if [ "$server_config" = "null" ]; then + server_config="" + fi + local exec_definition_raw="$(echo "$service" | jq -c '.exec // null')" + local exec_command_abs="$(echo "$service_resolved" | jq -r '.exec.command // ""')" + local -a exec_args_abs=() + if [ -n "$exec_definition_raw" ] && [ "$exec_definition_raw" != "null" ]; then + while IFS= read -r arg; do + exec_args_abs+=("$arg") + done < <(echo "$service_resolved" | jq -r '.exec.args[]?') + fi + local exec_command_string="" + if [ -n "$exec_command_abs" ] && [ "$exec_command_abs" != "null" ]; then + exec_command_string="$(render_exec_command "$exec_command_abs" "${exec_args_abs[@]}")" + fi + local server_binary_path_for_configs="$bin_path" + local run_engine_config_path="" + if [ ${#exec_args_abs[@]} -gt 0 ]; then + if [ -n "${exec_args_abs[1]:-}" ] && [ "${exec_args_abs[1]}" != "null" ]; then + server_binary_path_for_configs="${exec_args_abs[1]}" + fi + local arg_index + for arg_index in "${!exec_args_abs[@]}"; do + if [ "${exec_args_abs[$arg_index]}" = "--config" ]; then + local next_index=$((arg_index + 1)) + if [ $next_index -lt ${#exec_args_abs[@]} ]; then + run_engine_config_path="${exec_args_abs[$next_index]}" + fi + break + fi + done + fi + if [ -n "$server_binary_path_for_configs" ] && [ "$server_binary_path_for_configs" != "unknown" ] && [ "$server_binary_path_for_configs" != "null" ]; then + server_binary_path_for_configs="$(make_path_absolute "$server_binary_path_for_configs")" + fi + if [ -z "$run_engine_config_path" ] || [ "$run_engine_config_path" = "null" ]; then + run_engine_config_path="$CONFIG_DIR/$name-run-engine.conf" + else + run_engine_config_path="$(make_path_absolute "$run_engine_config_path")" + fi + if [ -d "$run_engine_config_path" ]; then + run_engine_config_path="$CONFIG_DIR/$name-run-engine.conf" + fi + if [[ "$run_engine_config_path" != /* ]]; then + run_engine_config_path="$(make_path_absolute "$run_engine_config_path")" + fi echo "" echo -e "${YELLOW}Service '$name' ($provider) is missing${NC}" @@ -182,13 +376,20 @@ function restore_missing_services() { if [ "$bin_path" = "unknown" ] || [ "$bin_path" = "null" ] || [ "$status" = "migrated" ]; then echo " Binary: " - echo " Args: " + echo " Exec: " echo "" echo -e "${YELLOW}This service needs to be recreated manually:${NC}" echo " $0 create $service_type $name --provider $provider --bin-path /path/to/your/bin" else echo " Binary: $bin_path" - echo " Args: $args" + if [ -n "$exec_command_string" ]; then + echo " Exec: $exec_command_string" + else + echo " Exec: " + fi + if [ -n "$server_config" ]; then + echo " Server config: $server_config" + fi fi echo "" @@ -204,19 +405,30 @@ function restore_missing_services() { fi else echo -e "${BLUE}Recreating service '$name'...${NC}" + if ! ensure_service_configs_restored "$name" "$service_type" "$provider" "$server_binary_path_for_configs" "$server_config" "$restart_policy" "$session_manager" "$gdb_enabled" "$systemd_type" "$pm2_opts" "$run_engine_config_path" "false"; then + echo -e "${YELLOW}Warning: Unable to restore configuration files for '$name'${NC}" + fi if [ "$provider" = "pm2" ]; then - if [ "$args" != "null" ] && [ -n "$args" ]; then - pm2_create_service "$name" "$bin_path $args" "$restart_policy" $pm2_opts + if [ -z "$exec_command_string" ] || [ "$exec_definition_raw" = "null" ]; then + echo -e "${RED}Cannot recreate PM2 service automatically: missing exec definition${NC}" else - pm2_create_service "$name" "$bin_path" "$restart_policy" $pm2_opts + if [ -n "$pm2_opts" ]; then + pm2_create_service "$name" "$exec_command_string" "$restart_policy" "$bin_path" "$server_config" "$exec_definition_raw" $pm2_opts + else + pm2_create_service "$name" "$exec_command_string" "$restart_policy" "$bin_path" "$server_config" "$exec_definition_raw" + fi fi elif [ "$provider" = "systemd" ]; then echo -e "${BLUE}Attempting to recreate systemd service '$name' automatically...${NC}" - if systemd_create_service "$name" "$bin_path $args" "$restart_policy" "$systemd_type" "$session_manager" "$gdb_enabled" "$server_config"; then - echo -e "${GREEN}Systemd service '$name' recreated successfully${NC}" + if [ -z "$exec_command_string" ] || [ "$exec_definition_raw" = "null" ]; then + echo -e "${RED}Cannot recreate systemd service automatically: missing exec definition${NC}" else - echo -e "${RED}Failed to recreate systemd service '$name'. Please recreate manually.${NC}" - echo " $0 create $name $service_type --provider systemd --bin-path $bin_path" + if systemd_create_service "$name" "$exec_command_string" "$restart_policy" "$bin_path" "$server_config" "$exec_definition_raw" "$systemd_type"; then + echo -e "${GREEN}Systemd service '$name' recreated successfully${NC}" + else + echo -e "${RED}Failed to recreate systemd service '$name'. Please recreate manually.${NC}" + echo " $0 create $name $service_type --provider systemd --bin-path $bin_path" + fi fi fi fi @@ -275,7 +487,7 @@ function print_help() { echo " $base_name update [options]" echo " $base_name delete " echo " $base_name list [provider]" - echo " $base_name restore" + echo " $base_name restore [--sync-only]" echo " $base_name start|stop|restart|status " echo " $base_name logs [--follow]" echo " $base_name attach " @@ -342,6 +554,9 @@ function print_help() { echo " # Restore missing services from registry" echo " $base_name restore" echo "" + echo " # Normalize registry paths to be relative to AC_SERVICE_CONFIG_DIR" + echo " $base_name registry-normalize" + echo "" echo "Notes:" echo " - Configuration editing modifies run-engine settings (GDB, session manager, etc.)" echo " - Use --server-config for the actual server configuration file" @@ -353,10 +568,13 @@ function print_help() { echo " - attach command automatically detects the configured session manager and connects appropriately" echo " - attach always provides interactive access to the server console" echo " - Use 'logs' command to view service logs without interaction" - echo " - restore command checks registry and helps recreate missing services" + echo " - restore command first normalizes registry paths, syncs config files, and then recreates missing services" echo "" echo "Environment Variables:" echo " AC_SERVICE_CONFIG_DIR - Override default config directory for services registry" + echo " When set, binary and configuration paths under this directory" + echo " are stored as relative paths for improved portability." + echo " Use '$base_name registry-normalize' to rewrite existing entries." } @@ -442,19 +660,308 @@ function get_service_info() { jq --arg name "$service_name" '.[] | select(.name == $name)' "$REGISTRY_FILE" } +# Get service info with resolved paths (relative paths converted to absolute) +function get_service_info_resolved() { + local service_name="$1" + local service_info="$(get_service_info "$service_name")" + + if [ -z "$service_info" ] || [ "$service_info" = "null" ]; then + echo "" + return + fi + + # Extract paths and convert them + local bin_path_raw="$(echo "$service_info" | jq -r '.bin_path // ""')" + local server_config_raw="$(echo "$service_info" | jq -r '.server_config // ""')" + local exec_command_raw="$(echo "$service_info" | jq -r '.exec.command // ""')" + local exec_args_raw_json="$(echo "$service_info" | jq -c '.exec.args // []')" + + local bin_path_resolved="" + local server_config_resolved="" + local exec_command_resolved="" + local -a exec_args_resolved=() + + if [ -n "$bin_path_raw" ] && [ "$bin_path_raw" != "null" ] && [ "$bin_path_raw" != "" ]; then + bin_path_resolved="$(make_path_absolute "$bin_path_raw")" + else + bin_path_resolved="$bin_path_raw" + fi + + if [ -n "$exec_command_raw" ] && [ "$exec_command_raw" != "null" ]; then + exec_command_resolved="$(make_path_absolute "$exec_command_raw")" + else + exec_command_resolved="$exec_command_raw" + fi + + if [ -n "$exec_args_raw_json" ] && [ "$exec_args_raw_json" != "null" ]; then + while IFS= read -r arg; do + if [[ -z "$arg" ]]; then + exec_args_resolved+=("$arg") + elif [[ "$arg" == /* ]]; then + exec_args_resolved+=("$(make_path_absolute "$arg")") + else + exec_args_resolved+=("$arg") + fi + done < <(echo "$exec_args_raw_json" | jq -r '.[]?') + fi + + if [ -n "$server_config_raw" ] && [ "$server_config_raw" != "null" ] && [ "$server_config_raw" != "" ]; then + server_config_resolved="$(make_path_absolute "$server_config_raw")" + else + server_config_resolved="$server_config_raw" + fi + + local exec_args_resolved_json + exec_args_resolved_json=$(printf '%s\0' "${exec_args_resolved[@]}" | jq -R -s 'split("\u0000")[:-1]') + local exec_resolved_json + exec_resolved_json=$(jq -n --arg command "${exec_command_resolved:-}" --argjson args "$exec_args_resolved_json" '{command: $command, args: $args}') + + # Return the service info with resolved paths + echo "$service_info" | jq --arg bin_path "$bin_path_resolved" \ + --arg server_config "$server_config_resolved" \ + --argjson exec "$exec_resolved_json" \ + '.bin_path = $bin_path | .exec = $exec | .server_config = $server_config' +} + +function ensure_service_configs_restored() { + local service_name="$1" + local service_type="$2" + local provider="$3" + local server_binary_path="$4" + local server_config_path="$5" + local restart_policy="$6" + local session_manager="$7" + local gdb_enabled="$8" + local systemd_type="$9" + local pm2_opts="${10:-}" + local run_engine_config_path="${11:-}" + local force_rewrite="${12:-false}" + + if [ -z "$service_name" ]; then + return 1 + fi + + if [ -z "$server_binary_path" ] || [ "$server_binary_path" = "null" ] || [ "$server_binary_path" = "unknown" ]; then + return 0 + fi + + if [ "$server_config_path" = "null" ]; then + server_config_path="" + fi + + if [ -z "$restart_policy" ] || [ "$restart_policy" = "null" ]; then + restart_policy="always" + fi + + if [ -z "$session_manager" ] || [ "$session_manager" = "null" ]; then + session_manager="none" + fi + + if [ -z "$gdb_enabled" ] || [ "$gdb_enabled" = "null" ]; then + gdb_enabled="0" + fi + + if [ -z "$systemd_type" ] || [ "$systemd_type" = "null" ]; then + systemd_type="--user" + fi + + pm2_opts="${pm2_opts:-}" + pm2_opts="${pm2_opts//$'\n'/ }" + pm2_opts="${pm2_opts#"${pm2_opts%%[![:space:]]*}"}" + pm2_opts="${pm2_opts%"${pm2_opts##*[![:space:]]}"}" + + if [ -z "$run_engine_config_path" ] || [ "$run_engine_config_path" = "null" ]; then + run_engine_config_path="$CONFIG_DIR/$service_name-run-engine.conf" + fi + + local service_conf_path="$CONFIG_DIR/$service_name.conf" + local server_binary_dir + local server_binary_name + + server_binary_dir="$(dirname "$server_binary_path")" + server_binary_name="$(basename "$server_binary_path")" + + mkdir -p "$(dirname "$run_engine_config_path")" + + if [ "$force_rewrite" = "true" ] || [ ! -f "$run_engine_config_path" ]; then + echo -e "${BLUE}Restoring run-engine config: $run_engine_config_path${NC}" + cat > "$run_engine_config_path" << EOF +# run-engine configuration for service: $service_name +# Restored: $(date) + +# Enable/disable GDB execution +export GDB_ENABLED=$gdb_enabled + +# Session manager (none|auto|tmux|screen) +export SESSION_MANAGER="$session_manager" + +# Restart policy (on-failure|always) +export RESTART_POLICY="$restart_policy" + +# Service mode - indicates this is running under a service manager (systemd/pm2) +# When true, AC_DISABLE_INTERACTIVE will be set if no interactive session manager is used +export SERVICE_MODE="true" + +# Session name for tmux/screen (optional) +export SESSION_NAME="${service_name}" + +# Binary directory path +export BINPATH="$server_binary_dir" + +# Server binary name +export SERVERBIN="$server_binary_name" + +# Server configuration file path +export CONFIG="$server_config_path" + +# Show console output for easier debugging +export WITH_CONSOLE=1 +EOF + fi + + if [ "$force_rewrite" = "true" ] || [ ! -f "$service_conf_path" ]; then + echo -e "${BLUE}Restoring service metadata: $service_conf_path${NC}" + cat > "$service_conf_path" << EOF +# AzerothCore service configuration for $service_name +# Restored: $(date) +# Provider: $provider +# Service Type: $service_type + +# run-engine configuration file +RUN_ENGINE_CONFIG_FILE="$run_engine_config_path" + +# Restart policy +RESTART_POLICY="$restart_policy" + +# Provider-specific options +SYSTEMD_TYPE="$systemd_type" +PM2_OPTS="$pm2_opts" +EOF + fi + + return 0 +} + +function sync_service_configs_from_registry() { + echo -e "${BLUE}Syncing service configuration files from registry...${NC}" + + if [ ! -f "$REGISTRY_FILE" ] || [ ! -s "$REGISTRY_FILE" ]; then + echo -e "${YELLOW}No services registry found or empty${NC}" + return 0 + fi + + local services_count + services_count=$(jq length "$REGISTRY_FILE") + if [ "$services_count" -eq 0 ]; then + echo -e "${YELLOW}No services registered${NC}" + return 0 + fi + + local synced=0 + + for i in $(seq 0 $((services_count - 1))); do + local entry + entry=$(jq -c ".[$i]" "$REGISTRY_FILE") + [ -z "$entry" ] && continue + + local name + name=$(echo "$entry" | jq -r '.name // empty') + [ -z "$name" ] && continue + + local service_resolved + service_resolved="$(get_service_info_resolved "$name")" + [ -z "$service_resolved" ] && continue + + local service_type provider restart_policy session_manager gdb_enabled systemd_type pm2_opts + service_type=$(echo "$entry" | jq -r '.type // ""') + provider=$(echo "$entry" | jq -r '.provider // ""') + restart_policy=$(echo "$entry" | jq -r '.restart_policy // "always"') + session_manager=$(echo "$entry" | jq -r '.session_manager // "none"') + gdb_enabled=$(echo "$entry" | jq -r '.gdb_enabled // "0"') + systemd_type=$(echo "$entry" | jq -r '.systemd_type // "--user"') + pm2_opts=$(echo "$entry" | jq -r '.pm2_opts // ""') + + local server_binary_path + server_binary_path=$(echo "$service_resolved" | jq -r '.bin_path // ""') + if [ -z "$server_binary_path" ] || [ "$server_binary_path" = "null" ] || [ "$server_binary_path" = "unknown" ]; then + server_binary_path="" + fi + + local server_config_path + server_config_path=$(echo "$service_resolved" | jq -r '.server_config // ""') + if [ -n "$server_config_path" ] && [ "$server_config_path" != "null" ]; then + server_config_path="$(make_path_absolute "$server_config_path")" + else + server_config_path="" + fi + + local exec_definition + exec_definition=$(echo "$entry" | jq -c '.exec // null') + local -a exec_args=() + if [ -n "$exec_definition" ] && [ "$exec_definition" != "null" ]; then + while IFS= read -r arg; do + exec_args+=("$arg") + done < <(echo "$exec_definition" | jq -r '.args[]?') + fi + + if { [ -z "$server_binary_path" ] || [ "$server_binary_path" = "null" ]; } && [ ${#exec_args[@]} -ge 2 ]; then + server_binary_path="$(make_path_absolute "${exec_args[1]}")" + fi + + local run_engine_config_rel="" + for idx in "${!exec_args[@]}"; do + if [ "${exec_args[$idx]}" = "--config" ]; then + local next_idx=$((idx + 1)) + if [ $next_idx -lt ${#exec_args[@]} ]; then + run_engine_config_rel="${exec_args[$next_idx]}" + fi + break + fi + done + + if [ -z "$run_engine_config_rel" ] || [ "$run_engine_config_rel" = "null" ]; then + run_engine_config_rel="$name-run-engine.conf" + fi + + local run_engine_config_path + if [[ "$run_engine_config_rel" = /* ]]; then + run_engine_config_path="$run_engine_config_rel" + else + run_engine_config_path="$CONFIG_DIR/$run_engine_config_rel" + fi + run_engine_config_path="$(realpath -m "$run_engine_config_path" 2>/dev/null || echo "$run_engine_config_path")" + + if [ -n "$server_binary_path" ]; then + server_binary_path="$(make_path_absolute "$server_binary_path")" + fi + + ensure_service_configs_restored "$name" "$service_type" "$provider" "$server_binary_path" "$server_config_path" "$restart_policy" "$session_manager" "$gdb_enabled" "$systemd_type" "$pm2_opts" "$run_engine_config_path" "true" + synced=$((synced + 1)) + done + + if [ "$synced" -gt 0 ]; then + echo -e "${GREEN}Synchronized $synced service configuration file(s)${NC}" + else + echo -e "${YELLOW}No service configuration files required synchronization${NC}" + fi +} + # PM2 service management functions function pm2_create_service() { local service_name="$1" - local command="$2" + local command_string="$2" local restart_policy="$3" - shift 3 + local real_bin_path="$4" + local server_config_path="$5" + local exec_definition="$6" + shift 6 check_pm2 || return 1 # Parse additional PM2 options local max_memory="" local max_restarts="" - local additional_args="" + local -a extra_pm2_args=() while [[ $# -gt 0 ]]; do case "$1" in @@ -467,39 +974,75 @@ function pm2_create_service() { shift 2 ;; *) - additional_args+=" $1" + extra_pm2_args+=("$1") shift ;; esac done - + + if [ -z "$exec_definition" ] || [ "$exec_definition" = "null" ]; then + echo -e "${RED}Error: Missing exec definition for PM2 service '$service_name'${NC}" + return 1 + fi + + local exec_command_rel + exec_command_rel=$(echo "$exec_definition" | jq -r '.command // empty') + if [ -z "$exec_command_rel" ] || [ "$exec_command_rel" = "null" ]; then + echo -e "${RED}Error: Exec command not defined for service '$service_name'${NC}" + return 1 + fi + + local exec_command_abs + exec_command_abs="$(make_path_absolute "$exec_command_rel")" + local -a exec_args_abs=() + while IFS= read -r arg; do + if [[ -z "$arg" ]]; then + exec_args_abs+=("$arg") + elif [[ "$arg" == /* ]]; then + exec_args_abs+=("$(make_path_absolute "$arg")") + elif [[ "$arg" == */* && "$arg" != -* ]]; then + exec_args_abs+=("$(make_path_absolute "$arg")") + else + exec_args_abs+=("$arg") + fi + done < <(echo "$exec_definition" | jq -r '.args[]?') # Set stop exit codes based on restart policy - local stop_exit_codes="" + local -a pm2_args=(start "$exec_command_abs" --interpreter none --name "$service_name") if [ "$restart_policy" = "always" ]; then # PM2 will restart on any exit code (including 0) - stop_exit_codes="" + : else # PM2 will not restart on clean shutdown (exit code 0) - stop_exit_codes=" --stop-exit-codes 0" + pm2_args+=("--stop-exit-codes" "0") fi - # Build PM2 start command with AzerothCore environment variable - local pm2_cmd="AC_LAUNCHED_BY_PM2=1 pm2 start '$command$additional_args' --name '$service_name'$stop_exit_codes" # Add memory limit if specified if [ -n "$max_memory" ]; then - pm2_cmd+=" --max-memory-restart $max_memory" + pm2_args+=("--max-memory-restart" "$max_memory") fi # Add max restarts if specified if [ -n "$max_restarts" ]; then - pm2_cmd+=" --max-restarts $max_restarts" + pm2_args+=("--max-restarts" "$max_restarts") + fi + + if [ ${#extra_pm2_args[@]} -gt 0 ]; then + pm2_args+=("${extra_pm2_args[@]}") + fi + + if [ ${#exec_args_abs[@]} -gt 0 ]; then + pm2_args+=("--") + pm2_args+=("${exec_args_abs[@]}") fi # Execute command echo -e "${YELLOW}Creating PM2 service: $service_name${NC}" + if [ -n "$command_string" ]; then + echo " Exec: $command_string" + fi - if eval "$pm2_cmd"; then + if AC_LAUNCHED_BY_PM2=1 pm2 "${pm2_args[@]}"; then echo -e "${GREEN}PM2 service '$service_name' created successfully${NC}" pm2 save @@ -507,9 +1050,13 @@ function pm2_create_service() { echo -e "${BLUE}Configuring PM2 startup for persistence...${NC}" pm2 startup --auto >/dev/null 2>&1 || true - # Add to registry (extract command and args from the full command) - local clean_command="$command$additional_args" - add_service_to_registry "$service_name" "pm2" "executable" "$command" "$additional_args" "" "$restart_policy" "none" "0" "$max_memory $max_restarts" "" + # Add to registry (use real binary path instead of command for portability) + local extra_args_serialized="" + if [ ${#extra_pm2_args[@]} -gt 0 ]; then + extra_args_serialized="$(printf '%s ' "${extra_pm2_args[@]}")" + extra_args_serialized="${extra_args_serialized% }" + fi + add_service_to_registry "$service_name" "pm2" "executable" "$real_bin_path" "$extra_args_serialized" "" "$restart_policy" "none" "0" "$max_memory $max_restarts" "$server_config_path" "$exec_definition" return 0 else @@ -552,12 +1099,12 @@ function pm2_remove_service() { pm2 save echo -e "${GREEN}PM2 service '$service_name' stopped and removed${NC}" - # Remove from registry - remove_service_from_registry "$service_name" + # Note: Registry removal is handled by the caller (delete_service) + return 0 else - echo -e "${YELLOW}PM2 service '$service_name' not found or already removed${NC}" - # Still try to remove from registry in case it's orphaned - remove_service_from_registry "$service_name" + echo -e "${YELLOW}PM2 service '$service_name' not found${NC}" + # Service not found in PM2 - let caller decide about registry + return 0 fi return 0 @@ -602,11 +1149,14 @@ function systemd_create_service() { local service_name="$1" local command="$2" local restart_policy="$3" + local real_bin_path="$4" + local server_config_path="$5" + local exec_definition="$6" local systemd_type="--user" local bin_path="" local gdb_enabled="0" local server_config="" - shift 3 + shift 6 check_systemd || return 1 @@ -743,7 +1293,7 @@ EOF echo -e "${GREEN}Systemd service '$service_name' created successfully with session manager '$session_manager'${NC}" # Add to registry - add_service_to_registry "$service_name" "systemd" "service" "$command" "" "$systemd_type" "$restart_policy" "$session_manager" "$gdb_enabled" "" "$server_config" + add_service_to_registry "$service_name" "systemd" "service" "$real_bin_path" "" "$systemd_type" "$restart_policy" "$session_manager" "$gdb_enabled" "" "$server_config_path" "$exec_definition" return 0 } @@ -805,9 +1355,7 @@ function systemd_remove_service() { echo -e "${YELLOW}Note: Service may still be running but configuration was removed${NC}" fi - # Remove from registry - remove_service_from_registry "$service_name" - + # Note: Registry removal is handled by the caller (delete_service) return 0 else echo -e "${RED}Failed to remove systemd service file '$service_file'${NC}" @@ -1051,24 +1599,29 @@ SYSTEMD_TYPE="$systemd_type" PM2_OPTS="$pm2_opts" EOF - # Build run-engine command - local run_engine_cmd="$SCRIPT_DIR/run-engine start $server_binary_path --config $run_engine_config" + # Build run-engine command definition + local run_engine_path="$SCRIPT_DIR/run-engine" + local -a run_engine_args=("start" "$server_binary_path" "--config" "$run_engine_config") + local run_engine_cmd + run_engine_cmd="$(render_exec_command "$run_engine_path" "${run_engine_args[@]}")" + local exec_definition + exec_definition="$(serialize_exec_definition "$run_engine_path" "${run_engine_args[@]}")" # Create the actual service local service_creation_success=false if [ "$provider" = "pm2" ]; then if [ -n "$pm2_opts" ]; then - if pm2_create_service "$service_name" "$run_engine_cmd" "$restart_policy" $pm2_opts; then + if pm2_create_service "$service_name" "$run_engine_cmd" "$restart_policy" "$server_binary_path" "$server_config" "$exec_definition" $pm2_opts; then service_creation_success=true fi else - if pm2_create_service "$service_name" "$run_engine_cmd" "$restart_policy"; then + if pm2_create_service "$service_name" "$run_engine_cmd" "$restart_policy" "$server_binary_path" "$server_config" "$exec_definition"; then service_creation_success=true fi fi elif [ "$provider" = "systemd" ]; then - if systemd_create_service "$service_name" "$run_engine_cmd" "$restart_policy" "$systemd_type"; then + if systemd_create_service "$service_name" "$run_engine_cmd" "$restart_policy" "$server_binary_path" "$server_config" "$exec_definition" "$systemd_type"; then service_creation_success=true fi fi @@ -1124,10 +1677,10 @@ function update_service() { source "$config_file" # Load current run-engine configuration - if [ -f "$RUN_ENGINE_CONFIG_FILE" ]; then + if [ -n "${RUN_ENGINE_CONFIG_FILE:-}" ] && [ -f "$RUN_ENGINE_CONFIG_FILE" ]; then source "$RUN_ENGINE_CONFIG_FILE" else - echo -e "${YELLOW}Warning: Run-engine configuration file not found: $RUN_ENGINE_CONFIG_FILE${NC}" + echo -e "${YELLOW}Warning: Run-engine configuration file not found: ${RUN_ENGINE_CONFIG_FILE:-}${NC}" fi # Parse options to update @@ -1284,8 +1837,11 @@ function delete_service() { fi if [ "$removal_success" = "true" ]; then + # Remove from registry only after successful service removal + remove_service_from_registry "$service_name" + # Remove run-engine configuration file - if [ -n "$RUN_ENGINE_CONFIG_FILE" ] && [ -f "$RUN_ENGINE_CONFIG_FILE" ]; then + if [ -n "${RUN_ENGINE_CONFIG_FILE:-}" ] && [ -f "$RUN_ENGINE_CONFIG_FILE" ]; then rm -f "$RUN_ENGINE_CONFIG_FILE" echo -e "${GREEN}Removed run-engine config: $RUN_ENGINE_CONFIG_FILE${NC}" fi @@ -1296,6 +1852,7 @@ function delete_service() { echo -e "${GREEN}Service '$service_name' deleted successfully${NC}" else echo -e "${RED}Failed to remove service '$service_name' from $provider${NC}" + echo -e "${YELLOW}Registry entry preserved. Service may need manual cleanup.${NC}" return 1 fi } @@ -1416,7 +1973,11 @@ function edit_config() { # Open run-engine configuration file in editor echo -e "${YELLOW}Editing run-engine configuration for: $service_name${NC}" - echo -e "${BLUE}File: $RUN_ENGINE_CONFIG_FILE${NC}" + echo -e "${BLUE}File: ${RUN_ENGINE_CONFIG_FILE:-}${NC}" + if [ -z "${RUN_ENGINE_CONFIG_FILE:-}" ] || [ ! -f "$RUN_ENGINE_CONFIG_FILE" ]; then + echo -e "${RED}Error: Run-engine configuration file not found: ${RUN_ENGINE_CONFIG_FILE:-}${NC}" + return 1 + fi ${EDITOR:-nano} "$RUN_ENGINE_CONFIG_FILE" echo -e "${GREEN}Configuration updated. Run '$0 restart $service_name' to apply changes.${NC}" @@ -1445,16 +2006,12 @@ function attach_to_service() { source "$config_file" # Load run-engine configuration - if [ ! -f "$RUN_ENGINE_CONFIG_FILE" ]; then - echo -e "${RED}Error: Run-engine configuration file not found: $RUN_ENGINE_CONFIG_FILE${NC}" + if [ -z "${RUN_ENGINE_CONFIG_FILE:-}" ] || [ ! -f "$RUN_ENGINE_CONFIG_FILE" ]; then + echo -e "${RED}Error: Run-engine configuration file not found: ${RUN_ENGINE_CONFIG_FILE:-}${NC}" return 1 fi - if [ ! -f "$RUN_ENGINE_CONFIG_FILE" ]; then - echo -e "${RED}Error: Run-engine configuration file not found: $RUN_ENGINE_CONFIG_FILE${NC}" - return 1 - fi - + # Now safe to source source "$RUN_ENGINE_CONFIG_FILE" # Auto-detect session manager and attach accordingly @@ -1770,8 +2327,8 @@ function attach_interactive_shell() { source "$config_file" # Check if RUN_ENGINE_CONFIG_FILE exists before sourcing - if [ ! -f "$RUN_ENGINE_CONFIG_FILE" ]; then - echo -e "${RED}Error: Run-engine configuration file not found: $RUN_ENGINE_CONFIG_FILE${NC}" + if [ -z "${RUN_ENGINE_CONFIG_FILE:-}" ] || [ ! -f "$RUN_ENGINE_CONFIG_FILE" ]; then + echo -e "${RED}Error: Run-engine configuration file not found: ${RUN_ENGINE_CONFIG_FILE:-}${NC}" return 1 fi @@ -1796,6 +2353,96 @@ function attach_interactive_shell() { return 1 } +# Normalize existing registry entries to use relative paths for fields that +# represent filesystem paths (bin_path, server_config) and refresh exec command +# definitions to the new schema. +function normalize_registry_paths() { + if [ ! -f "$REGISTRY_FILE" ]; then + echo -e "${YELLOW}No registry file found at: $REGISTRY_FILE${NC}" + return 0 + fi + + # Validate JSON + if ! jq empty "$REGISTRY_FILE" >/dev/null 2>&1; then + echo -e "${RED}Error: Invalid JSON in $REGISTRY_FILE${NC}" + return 1 + fi + + local tmp_file + tmp_file=$(mktemp) + echo "[]" > "$tmp_file" + + local count=0 + while IFS= read -r entry; do + [ -z "$entry" ] && continue + + # Extract raw values (empty if null or missing) + local bin_path_raw server_config_raw + bin_path_raw=$(echo "$entry" | jq -r '.bin_path // empty') + server_config_raw=$(echo "$entry" | jq -r '.server_config // empty') + + # Compute normalized values + local bin_path_new server_config_new + if [ -n "$bin_path_raw" ]; then + bin_path_new="$(make_path_relative "$bin_path_raw")" + else + bin_path_new="" + fi + if [ -n "$server_config_raw" ]; then + server_config_new="$(make_path_relative "$server_config_raw")" + else + server_config_new="" + fi + + local exec_command_raw + exec_command_raw=$(echo "$entry" | jq -r '.exec.command // empty') + local exec_args_array=() + local exec_json_new="null" + if [ -n "$exec_command_raw" ]; then + while IFS= read -r arg; do + exec_args_array+=("$arg") + done < <(echo "$entry" | jq -r '.exec.args[]?') + exec_json_new="$(serialize_exec_definition "$exec_command_raw" "${exec_args_array[@]}")" + fi + + # Update entry (only override when non-empty; preserve nulls) + local updated + if [ "$exec_json_new" != "null" ]; then + updated=$(echo "$entry" | jq \ + --arg bin "$bin_path_new" \ + --arg srv "$server_config_new" \ + --argjson exec "$exec_json_new" \ + ' + (.bin_path) |= (if $bin != "" then $bin else . end) | + (.server_config) |= (if $srv != "" then $srv else . end) | + (.exec) = $exec | + del(.real_bin_path) + ') + else + updated=$(echo "$entry" | jq \ + --arg bin "$bin_path_new" \ + --arg srv "$server_config_new" \ + ' + (.bin_path) |= (if $bin != "" then $bin else . end) | + (.server_config) |= (if $srv != "" then $srv else . end) | + del(.real_bin_path) + ') + fi + + # Append to new array + if ! jq --argjson e "$updated" '. += [$e]' "$tmp_file" > "$tmp_file.new"; then + rm -f "$tmp_file" "$tmp_file.new" + echo -e "${RED}Error: Failed updating registry${NC}" + return 1 + fi + mv "$tmp_file.new" "$tmp_file" + count=$((count+1)) + done < <(jq -c '.[]?' "$REGISTRY_FILE") + + mv "$tmp_file" "$REGISTRY_FILE" + echo -e "${GREEN}Normalized $count registry entrie(s) to relative paths${NC}" +} + function attach_tmux_session() { local service_name="$1" local provider="$2" @@ -1852,10 +2499,12 @@ function attach_screen_session() { # Main execution -check_dependencies +# Only run the main logic if this script is executed directly (not sourced) +if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then + check_dependencies -# Main command processing -case "${1:-help}" in + # Main command processing + case "${1:-help}" in create) if [ $# -lt 3 ]; then echo -e "${RED}Error: Not enough arguments for create command${NC}" @@ -1884,7 +2533,26 @@ case "${1:-help}" in list_services "${2:-}" ;; restore) - restore_missing_services + sync_only=false + if [ $# -gt 1 ]; then + for opt in "${@:2}"; do + case "$opt" in + --sync-only) + sync_only=true + ;; + *) + echo -e "${RED}Error: Unknown option for restore command: $opt${NC}" + print_help + exit 1 + ;; + esac + done + fi + normalize_registry_paths + sync_service_configs_from_registry + if [ "$sync_only" = "false" ]; then + restore_missing_services + fi ;; start|stop|restart|status) if [ $# -lt 2 ]; then @@ -1900,12 +2568,15 @@ case "${1:-help}" in print_help exit 1 fi - if [ "$3" = "--follow" ]; then + if [ "${3:-}" = "--follow" ]; then service_logs "$2" "true" else service_logs "$2" "false" fi ;; + registry-normalize) + normalize_registry_paths + ;; edit-config) if [ $# -lt 2 ]; then echo -e "${RED}Error: Service name required for edit-config command${NC}" @@ -1977,3 +2648,5 @@ case "${1:-help}" in exit 1 ;; esac + +fi # End of main execution block diff --git a/apps/startup-scripts/test/test_startup_scripts.bats b/apps/startup-scripts/test/test_startup_scripts.bats old mode 100644 new mode 100755 index 119a8c80c..c7a90c7f6 --- a/apps/startup-scripts/test/test_startup_scripts.bats +++ b/apps/startup-scripts/test/test_startup_scripts.bats @@ -160,7 +160,19 @@ teardown() { # Create registry with pm2 provider service cat > "$AC_SERVICE_CONFIG_DIR/service_registry.json" << 'EOF' [ - {"name":"test-world","provider":"pm2","type":"service","bin_path":"/bin/worldserver","args":"","systemd_type":"--user","restart_policy":"always"} + { + "name":"test-world", + "provider":"pm2", + "type":"service", + "bin_path":"/bin/worldserver", + "args":"", + "systemd_type":"--user", + "restart_policy":"always", + "exec":{ + "command":"/bin/true", + "args":[] + } + } ] EOF # Create minimal service config and run-engine config files required by 'send' @@ -215,7 +227,19 @@ EOF # Create registry and config as in previous test cat > "$AC_SERVICE_CONFIG_DIR/service_registry.json" << 'EOF' [ - {"name":"test-world","provider":"pm2","type":"service","bin_path":"/bin/worldserver","args":"","systemd_type":"--user","restart_policy":"always"} + { + "name":"test-world", + "provider":"pm2", + "type":"service", + "bin_path":"/bin/worldserver", + "args":"", + "systemd_type":"--user", + "restart_policy":"always", + "exec":{ + "command":"/bin/true", + "args":[] + } + } ] EOF echo "RUN_ENGINE_CONFIG_FILE=\"$AC_SERVICE_CONFIG_DIR/test-world-run-engine.conf\"" > "$AC_SERVICE_CONFIG_DIR/test-world.conf" @@ -258,6 +282,31 @@ EOF [ "$status" -eq 0 ] } +@test "service-manager: restore helper recreates missing configs" { + command -v jq >/dev/null 2>&1 || skip "jq not installed" + export AC_SERVICE_CONFIG_DIR="$TEST_DIR/services" + mkdir -p "$AC_SERVICE_CONFIG_DIR" + source "$SCRIPT_DIR/service-manager.sh" + + local service_name="restore-test" + local run_engine_config="$AC_SERVICE_CONFIG_DIR/$service_name-run-engine.conf" + local service_conf="$AC_SERVICE_CONFIG_DIR/$service_name.conf" + rm -f "$run_engine_config" "$service_conf" + + mkdir -p "$TEST_DIR/bin" "$TEST_DIR/etc" + touch "$TEST_DIR/bin/worldserver" + touch "$TEST_DIR/etc/worldserver.conf" + + ensure_service_configs_restored "$service_name" "world" "systemd" "$TEST_DIR/bin/worldserver" "$TEST_DIR/etc/worldserver.conf" "always" "none" "0" "--user" "" "$run_engine_config" + + [ -f "$run_engine_config" ] + [ -f "$service_conf" ] + grep -Fq 'export SESSION_MANAGER="none"' "$run_engine_config" + grep -Fq 'export BINPATH="'$TEST_DIR'/bin"' "$run_engine_config" + grep -Fq "RUN_ENGINE_CONFIG_FILE=\"$run_engine_config\"" "$service_conf" + grep -Fq 'RESTART_POLICY="always"' "$service_conf" +} + @test "service-manager: wait-uptime times out for unknown service" { command -v jq >/dev/null 2>&1 || skip "jq not installed" export AC_SERVICE_CONFIG_DIR="$TEST_DIR/services" @@ -279,6 +328,136 @@ EOF [[ "$output" =~ "Configuration file not found" ]] } +# ===== PATH PORTABILITY TESTS ===== + +@test "service-manager: path conversion functions work correctly" { + # Source the service-manager script to access helper functions + source "$SCRIPT_DIR/service-manager.sh" + + # Test make_path_relative without AC_SERVICE_CONFIG_DIR + unset AC_SERVICE_CONFIG_DIR + result=$(make_path_relative "/absolute/path/test") + [[ "$result" == "/absolute/path/test" ]] + + # Test make_path_relative with AC_SERVICE_CONFIG_DIR + export AC_SERVICE_CONFIG_DIR="/tmp/test-config" + mkdir -p "$AC_SERVICE_CONFIG_DIR/subdir" + + result=$(make_path_relative "$AC_SERVICE_CONFIG_DIR/subdir/binary") + [[ "$result" == "subdir/binary" ]] + + result=$(make_path_relative "/opt/bin/authserver") + [[ "$result" == "../../opt/bin/authserver" ]] + + # Test make_path_absolute + result=$(make_path_absolute "subdir/binary") + [[ "$result" == "$AC_SERVICE_CONFIG_DIR/subdir/binary" ]] + + result=$(make_path_absolute "../../opt/bin/authserver") + [[ "$result" == "/opt/bin/authserver" ]] + + # Test absolute path stays absolute + result=$(make_path_absolute "/absolute/path") + [[ "$result" == "/absolute/path" ]] + + # Cleanup + rm -rf "$AC_SERVICE_CONFIG_DIR" + unset AC_SERVICE_CONFIG_DIR +} + +@test "service-manager: registry stores relative paths when possible" { + # Set up test environment + export AC_SERVICE_CONFIG_DIR="$TEST_DIR/service-config" + mkdir -p "$AC_SERVICE_CONFIG_DIR" + + # Create a temporary service registry in our test directory + local test_registry="$AC_SERVICE_CONFIG_DIR/test_registry.json" + echo "[]" > "$test_registry" + + # Source the service-manager and override REGISTRY_FILE + source "$SCRIPT_DIR/service-manager.sh" + REGISTRY_FILE="$test_registry" + + # Create test binary directory under config dir + mkdir -p "$AC_SERVICE_CONFIG_DIR/bin" + + # Test that paths under AC_SERVICE_CONFIG_DIR are stored as relative + add_service_to_registry "test-service" "pm2" "auth" "$AC_SERVICE_CONFIG_DIR/bin/authserver" "--config test.conf" "" "always" "none" "0" "" "$AC_SERVICE_CONFIG_DIR/etc/test.conf" + + # Check that paths were stored as relative + local stored_bin_path=$(jq -r '.[0].bin_path' "$test_registry") + local stored_config_path=$(jq -r '.[0].server_config' "$test_registry") + + [[ "$stored_bin_path" == "bin/authserver" ]] + [[ "$stored_config_path" == "etc/test.conf" ]] + + # Test that absolute paths outside config dir are stored as absolute + add_service_to_registry "test-service2" "pm2" "auth" "/opt/azerothcore/bin/authserver" "--config test.conf" "" "always" "none" "0" "" "/opt/azerothcore/etc/test.conf" + + local stored_bin_path2=$(jq -r '.[1].bin_path' "$test_registry") + local stored_config_path2=$(jq -r '.[1].server_config' "$test_registry") + + local expected_bin_rel=$(make_path_relative "/opt/azerothcore/bin/authserver") + local expected_cfg_rel=$(make_path_relative "/opt/azerothcore/etc/test.conf") + + [[ "$stored_bin_path2" == "$expected_bin_rel" ]] + [[ "$stored_config_path2" == "$expected_cfg_rel" ]] + + # Cleanup + rm -rf "$AC_SERVICE_CONFIG_DIR" + unset AC_SERVICE_CONFIG_DIR +} + +@test "service-manager: restore --sync-only recreates config files" { + command -v jq >/dev/null 2>&1 || skip "jq not installed" + export AC_SERVICE_CONFIG_DIR="$TEST_DIR/services" + mkdir -p "$AC_SERVICE_CONFIG_DIR" + + cat > "$AC_SERVICE_CONFIG_DIR/service_registry.json" <<'EOF' +[ + { + "name": "sync-test", + "provider": "pm2", + "type": "auth", + "bin_path": "bin/authserver", + "exec": { + "command": "../src/run-engine", + "args": [ + "start", + "bin/authserver", + "--config", + "sync-test-run-engine.conf" + ] + }, + "args": "", + "created": "2025-10-12T20:00:54+02:00", + "status": "active", + "systemd_type": "--user", + "restart_policy": "always", + "session_manager": "none", + "gdb_enabled": "0", + "pm2_opts": " ", + "server_config": "etc/authserver.conf" + } +] +EOF + + rm -f "$AC_SERVICE_CONFIG_DIR/sync-test.conf" "$AC_SERVICE_CONFIG_DIR/sync-test-run-engine.conf" + + mkdir -p "$AC_SERVICE_CONFIG_DIR/bin" "$AC_SERVICE_CONFIG_DIR/etc" + touch "$AC_SERVICE_CONFIG_DIR/bin/authserver" + touch "$AC_SERVICE_CONFIG_DIR/etc/authserver.conf" + + run "$SCRIPT_DIR/service-manager.sh" restore --sync-only + debug_on_failure + [ "$status" -eq 0 ] + + [ -f "$AC_SERVICE_CONFIG_DIR/sync-test.conf" ] + [ -f "$AC_SERVICE_CONFIG_DIR/sync-test-run-engine.conf" ] + grep -Fq "RUN_ENGINE_CONFIG_FILE=\"$AC_SERVICE_CONFIG_DIR/sync-test-run-engine.conf\"" "$AC_SERVICE_CONFIG_DIR/sync-test.conf" + grep -Fq "export BINPATH=\"$AC_SERVICE_CONFIG_DIR/bin\"" "$AC_SERVICE_CONFIG_DIR/sync-test-run-engine.conf" +} + @test "examples: restarter-auth should show configuration error" { run "$SCRIPT_DIR/examples/restarter-auth.sh" [[ "$output" =~ "Configuration file not found" ]] From 2717104dc4365d0165c5a34dc184831dc61df67f Mon Sep 17 00:00:00 2001 From: Yehonal Date: Mon, 13 Oct 2025 00:08:25 +0200 Subject: [PATCH 093/140] feat(ServiceManager): enhance path handling and add canonicalization function --- apps/startup-scripts/src/service-manager.sh | 63 +++++++++++++++++---- 1 file changed, 52 insertions(+), 11 deletions(-) diff --git a/apps/startup-scripts/src/service-manager.sh b/apps/startup-scripts/src/service-manager.sh index a71212ec2..40d0c8ea5 100755 --- a/apps/startup-scripts/src/service-manager.sh +++ b/apps/startup-scripts/src/service-manager.sh @@ -13,10 +13,57 @@ SCRIPT_DIR="$CURRENT_PATH" ROOT_DIR="$(cd "$CURRENT_PATH/../../.." && pwd)" +# Colors for output +readonly YELLOW='\033[1;33m' +readonly GREEN='\033[0;32m' +readonly RED='\033[0;31m' +readonly BLUE='\033[0;34m' +readonly NC='\033[0m' # No Color + +canonicalize_path() { + local input="$1" + + if [ -z "$input" ]; then + echo "" + return + fi + + if command -v realpath >/dev/null 2>&1; then + local resolved + resolved="$(realpath -m "$input" 2>/dev/null)" && { echo "$resolved"; return; } + fi + + if command -v python3 >/dev/null 2>&1; then + local py_resolved + py_resolved="$(python3 -c 'import os,sys; print(os.path.abspath(os.path.normpath(sys.argv[1])))' "$input" 2>/dev/null)" && { + echo "$py_resolved" + return + } + fi + + if [ -d "$input" ]; then + (cd "$input" 2>/dev/null && pwd) && return + fi + + local dir base + dir=$(dirname "$input") + base=$(basename "$input") + if [ -d "$dir" ]; then + (cd "$dir" 2>/dev/null && printf '%s/%s\n' "$(pwd)" "$base") && return + fi + + echo "$input" +} + # Configuration directory (can be overridden with AC_SERVICE_CONFIG_DIR) -CONFIG_DIR="${AC_SERVICE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/azerothcore/services}" +CONFIG_DIR_RAW="${AC_SERVICE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/azerothcore/services}" + +# Create config directory if it doesn't exist +mkdir -p "$CONFIG_DIR_RAW" + +CONFIG_DIR="$(canonicalize_path "$CONFIG_DIR_RAW")" +export AC_SERVICE_CONFIG_DIR="$CONFIG_DIR" REGISTRY_FILE="$CONFIG_DIR/service_registry.json" -export AC_SERVICE_CONFIG_DIR="${AC_SERVICE_CONFIG_DIR:-$CONFIG_DIR}" # Default values for variables that might be loaded from config files # This prevents "unbound variable" errors when sourcing configuration files @@ -30,14 +77,8 @@ RESTART_POLICY="${RESTART_POLICY:-}" GDB_ENABLED="${GDB_ENABLED:-}" SERVER_CONFIG="${SERVER_CONFIG:-}" -# Colors for output -readonly YELLOW='\033[1;33m' -readonly GREEN='\033[0;32m' -readonly RED='\033[0;31m' -readonly BLUE='\033[0;34m' -readonly NC='\033[0m' # No Color - # Create config directory if it doesn't exist +# (already ensured above), but keep for robustness mkdir -p "$CONFIG_DIR" # Initialize registry if it doesn't exist @@ -1534,10 +1575,10 @@ function create_service() { # Determine server binary based on service type local server_bin="${service_type}server" - local server_binary_path=$(realpath "$bin_path/$server_bin") + local server_binary_path="$(canonicalize_path "$bin_path/$server_bin")" local real_config_path="" if [ -n "$server_config" ]; then - real_config_path=$(realpath "$server_config") + real_config_path="$(canonicalize_path "$server_config")" fi # Check if binary exists From bca1cb716801f9433bd1dc4034cd3ece10c3f936 Mon Sep 17 00:00:00 2001 From: Yehonal Date: Mon, 13 Oct 2025 00:19:12 +0200 Subject: [PATCH 094/140] fix(ServiceManager): add sentinel to argument serialization in exec definition --- apps/startup-scripts/src/service-manager.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/startup-scripts/src/service-manager.sh b/apps/startup-scripts/src/service-manager.sh index 40d0c8ea5..902aa9d90 100755 --- a/apps/startup-scripts/src/service-manager.sh +++ b/apps/startup-scripts/src/service-manager.sh @@ -172,7 +172,7 @@ function serialize_exec_definition() { done local args_json - args_json=$(printf '%s\0' "${rel_args[@]}" | jq -R -s 'split("\u0000")[:-1]') + args_json=$(printf '%s\0' "${rel_args[@]}" "__AC_SENTINEL__" | jq -R -s 'split("\u0000")[:-1]') jq -n --arg command "$rel_command" --argjson args "$args_json" '{command: $command, args: $args}' } From 8d4fb5b4b44ac6368b41f82dad0c59d6358c02bf Mon Sep 17 00:00:00 2001 From: Yehonal Date: Mon, 13 Oct 2025 01:37:41 +0200 Subject: [PATCH 095/140] fix(bash/service-manager): pipeline errors (#23210) --- apps/startup-scripts/src/service-manager.sh | 73 ++++++--------------- 1 file changed, 21 insertions(+), 52 deletions(-) diff --git a/apps/startup-scripts/src/service-manager.sh b/apps/startup-scripts/src/service-manager.sh index 902aa9d90..ac9278c89 100755 --- a/apps/startup-scripts/src/service-manager.sh +++ b/apps/startup-scripts/src/service-manager.sh @@ -13,57 +13,10 @@ SCRIPT_DIR="$CURRENT_PATH" ROOT_DIR="$(cd "$CURRENT_PATH/../../.." && pwd)" -# Colors for output -readonly YELLOW='\033[1;33m' -readonly GREEN='\033[0;32m' -readonly RED='\033[0;31m' -readonly BLUE='\033[0;34m' -readonly NC='\033[0m' # No Color - -canonicalize_path() { - local input="$1" - - if [ -z "$input" ]; then - echo "" - return - fi - - if command -v realpath >/dev/null 2>&1; then - local resolved - resolved="$(realpath -m "$input" 2>/dev/null)" && { echo "$resolved"; return; } - fi - - if command -v python3 >/dev/null 2>&1; then - local py_resolved - py_resolved="$(python3 -c 'import os,sys; print(os.path.abspath(os.path.normpath(sys.argv[1])))' "$input" 2>/dev/null)" && { - echo "$py_resolved" - return - } - fi - - if [ -d "$input" ]; then - (cd "$input" 2>/dev/null && pwd) && return - fi - - local dir base - dir=$(dirname "$input") - base=$(basename "$input") - if [ -d "$dir" ]; then - (cd "$dir" 2>/dev/null && printf '%s/%s\n' "$(pwd)" "$base") && return - fi - - echo "$input" -} - # Configuration directory (can be overridden with AC_SERVICE_CONFIG_DIR) -CONFIG_DIR_RAW="${AC_SERVICE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/azerothcore/services}" - -# Create config directory if it doesn't exist -mkdir -p "$CONFIG_DIR_RAW" - -CONFIG_DIR="$(canonicalize_path "$CONFIG_DIR_RAW")" -export AC_SERVICE_CONFIG_DIR="$CONFIG_DIR" +CONFIG_DIR="${AC_SERVICE_CONFIG_DIR:-${XDG_CONFIG_HOME:-$HOME/.config}/azerothcore/services}" REGISTRY_FILE="$CONFIG_DIR/service_registry.json" +export AC_SERVICE_CONFIG_DIR="${AC_SERVICE_CONFIG_DIR:-$CONFIG_DIR}" # Default values for variables that might be loaded from config files # This prevents "unbound variable" errors when sourcing configuration files @@ -77,8 +30,14 @@ RESTART_POLICY="${RESTART_POLICY:-}" GDB_ENABLED="${GDB_ENABLED:-}" SERVER_CONFIG="${SERVER_CONFIG:-}" +# Colors for output +readonly YELLOW='\033[1;33m' +readonly GREEN='\033[0;32m' +readonly RED='\033[0;31m' +readonly BLUE='\033[0;34m' +readonly NC='\033[0m' # No Color + # Create config directory if it doesn't exist -# (already ensured above), but keep for robustness mkdir -p "$CONFIG_DIR" # Initialize registry if it doesn't exist @@ -735,14 +694,20 @@ function get_service_info_resolved() { fi if [ -n "$exec_args_raw_json" ] && [ "$exec_args_raw_json" != "null" ]; then + local prev_arg="" while IFS= read -r arg; do if [[ -z "$arg" ]]; then exec_args_resolved+=("$arg") + elif [ "$prev_arg" = "--config" ]; then + exec_args_resolved+=("$(make_path_absolute "$arg")") elif [[ "$arg" == /* ]]; then exec_args_resolved+=("$(make_path_absolute "$arg")") + elif [[ "$arg" == */* && "$arg" != -* ]]; then + exec_args_resolved+=("$(make_path_absolute "$arg")") else exec_args_resolved+=("$arg") fi + prev_arg="$arg" done < <(echo "$exec_args_raw_json" | jq -r '.[]?') fi @@ -1036,9 +1001,12 @@ function pm2_create_service() { local exec_command_abs exec_command_abs="$(make_path_absolute "$exec_command_rel")" local -a exec_args_abs=() + local prev_arg="" while IFS= read -r arg; do if [[ -z "$arg" ]]; then exec_args_abs+=("$arg") + elif [ "$prev_arg" = "--config" ]; then + exec_args_abs+=("$(make_path_absolute "$arg")") elif [[ "$arg" == /* ]]; then exec_args_abs+=("$(make_path_absolute "$arg")") elif [[ "$arg" == */* && "$arg" != -* ]]; then @@ -1046,6 +1014,7 @@ function pm2_create_service() { else exec_args_abs+=("$arg") fi + prev_arg="$arg" done < <(echo "$exec_definition" | jq -r '.args[]?') # Set stop exit codes based on restart policy @@ -1575,10 +1544,10 @@ function create_service() { # Determine server binary based on service type local server_bin="${service_type}server" - local server_binary_path="$(canonicalize_path "$bin_path/$server_bin")" + local server_binary_path=$(realpath "$bin_path/$server_bin") local real_config_path="" if [ -n "$server_config" ]; then - real_config_path="$(canonicalize_path "$server_config")" + real_config_path=$(realpath "$server_config") fi # Check if binary exists From 074d9ebca70c0dab2b99116ff32942372297e149 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A9=E9=B9=AD?= <18535853+PkllonG@users.noreply.github.com> Date: Mon, 13 Oct 2025 08:30:32 +0800 Subject: [PATCH 096/140] fix(Core/CreatureText): race conditions in CreatureTextMgr repeat group (#23153) Co-authored-by: Shauren Co-authored-by: Giacomo Pozzoni --- .../game/Entities/Creature/Creature.cpp | 27 +++++++ src/server/game/Entities/Creature/Creature.h | 10 +++ src/server/game/Texts/CreatureTextMgr.cpp | 81 ++----------------- src/server/game/Texts/CreatureTextMgr.h | 9 --- 4 files changed, 44 insertions(+), 83 deletions(-) diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index 877cfee68..fe39491c0 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -3713,6 +3713,33 @@ bool Creature::CanGeneratePickPocketLoot() const return (lootPickPocketRestoreTime == 0 || lootPickPocketRestoreTime < GameTime::GetGameTime().count()); } +void Creature::SetTextRepeatId(uint8 textGroup, uint8 id) +{ + CreatureTextRepeatIds& repeats = m_textRepeat[textGroup]; + if (std::find(repeats.begin(), repeats.end(), id) == repeats.end()) + repeats.push_back(id); + else + LOG_ERROR("sql.sql", "CreatureTextMgr: TextGroup {} for Creature({}) {}, id {} already added", uint32(textGroup), GetName(), GetGUID().ToString(), uint32(id)); +} + +CreatureTextRepeatIds const& Creature::GetTextRepeatGroup(uint8 textGroup) +{ + static CreatureTextRepeatIds const emptyIds; + + CreatureTextRepeatGroup::const_iterator groupItr = m_textRepeat.find(textGroup); + if (groupItr != m_textRepeat.end()) + return groupItr->second; + + return emptyIds; +} + +void Creature::ClearTextRepeatGroup(uint8 textGroup) +{ + CreatureTextRepeatGroup::iterator groupItr = m_textRepeat.find(textGroup); + if (groupItr != m_textRepeat.end()) + groupItr->second.clear(); +} + void Creature::SetRespawnTime(uint32 respawn) { m_respawnTime = respawn ? GameTime::GetGameTime().count() + respawn : 0; diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index e5ebcd45a..950bc5367 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -39,6 +39,10 @@ class CreatureGroup; #define MAX_VENDOR_ITEMS 150 // Limitation in 3.x.x item count in SMSG_LIST_INVENTORY +//used for handling non-repeatable random texts +typedef std::vector CreatureTextRepeatIds; +typedef std::unordered_map CreatureTextRepeatGroup; + class Creature : public Unit, public GridObject, public MovableMapObject, public UpdatableMapObject { public: @@ -388,6 +392,10 @@ public: void UpdateLeashExtensionTime(); uint8 GetLeashTimer() const; + CreatureTextRepeatIds const& GetTextRepeatGroup(uint8 textGroup); + void SetTextRepeatId(uint8 textGroup, uint8 id); + void ClearTextRepeatGroup(uint8 textGroup); + bool IsFreeToMove(); static constexpr uint32 MOVE_CIRCLE_CHECK_INTERVAL = 3000; static constexpr uint32 MOVE_BACKWARDS_CHECK_INTERVAL = 2000; @@ -519,6 +527,8 @@ private: Spell const* _focusSpell; ///> Locks the target during spell cast for proper facing + CreatureTextRepeatGroup m_textRepeat; + bool _isMissingSwimmingFlagOutOfCombat; uint32 m_assistanceTimer; diff --git a/src/server/game/Texts/CreatureTextMgr.cpp b/src/server/game/Texts/CreatureTextMgr.cpp index c471c7815..0a69981cd 100644 --- a/src/server/game/Texts/CreatureTextMgr.cpp +++ b/src/server/game/Texts/CreatureTextMgr.cpp @@ -83,7 +83,7 @@ void CreatureTextMgr::LoadCreatureTexts() uint32 oldMSTime = getMSTime(); mTextMap.clear(); // for reload case - mTextRepeatMap.clear(); //reset all currently used temp texts + //all currently used temp texts are NOT reset WorldDatabasePreparedStatement* stmt = WorldDatabase.GetPreparedStatement(WORLD_SEL_CREATURE_TEXT); PreparedQueryResult result = WorldDatabase.Query(stmt); @@ -218,7 +218,7 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject } CreatureTextGroup const& textGroupContainer = itr->second; //has all texts in the group - CreatureTextRepeatIds repeatGroup = GetRepeatGroup(source, textGroup);//has all textIDs from the group that were already said + CreatureTextRepeatIds repeatGroup = source->GetTextRepeatGroup(textGroup);//has all textIDs from the group that were already said CreatureTextGroup tempGroup;//will use this to talk after sorting repeatGroup for (CreatureTextGroup::const_iterator giter = textGroupContainer.begin(); giter != textGroupContainer.end(); ++giter) @@ -227,52 +227,14 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject if (tempGroup.empty()) { - CreatureTextRepeatMap::iterator mapItr = mTextRepeatMap.find(source->GetGUID()); - if (mapItr != mTextRepeatMap.end()) - { - CreatureTextRepeatGroup::iterator groupItr = mapItr->second.find(textGroup); - groupItr->second.clear(); - } - + source->ClearTextRepeatGroup(textGroup); tempGroup = textGroupContainer; } - uint8 count = 0; - float lastChance = -1; - bool isEqualChanced = true; - - float totalChance = 0; - - for (CreatureTextGroup::const_iterator iter = tempGroup.begin(); iter != tempGroup.end(); ++iter) + auto iter = Acore::Containers::SelectRandomWeightedContainerElement(tempGroup, [](CreatureTextEntry const& t) -> double { - if (lastChance >= 0 && lastChance != iter->probability) - isEqualChanced = false; - - lastChance = iter->probability; - totalChance += iter->probability; - ++count; - } - - int32 offset = -1; - if (!isEqualChanced) - { - for (CreatureTextGroup::const_iterator iter = tempGroup.begin(); iter != tempGroup.end(); ++iter) - { - uint32 chance = uint32(iter->probability); - uint32 r = urand(0, 100); - ++offset; - if (r <= chance) - break; - } - } - - uint32 pos = 0; - if (isEqualChanced || offset < 0) - pos = urand(0, count - 1); - else if (offset >= 0) - pos = offset; - - CreatureTextGroup::const_iterator iter = tempGroup.begin() + pos; + return t.probability; + }); ChatMsg finalType = (msgType == CHAT_MSG_ADDON) ? iter->type : msgType; Language finalLang = (language == LANG_ADDON) ? iter->lang : language; @@ -301,9 +263,8 @@ uint32 CreatureTextMgr::SendChat(Creature* source, uint8 textGroup, WorldObject CreatureTextBuilder builder(finalSource, finalSource->getGender(), finalType, iter->group, iter->id, finalLang, target); SendChatPacket(finalSource, builder, finalType, target, range, teamId, gmOnly); } - if (isEqualChanced || (!isEqualChanced && totalChance == 100.0f)) - SetRepeatId(source, textGroup, iter->id); + source->SetTextRepeatId(textGroup, iter->id); return iter->duration; } @@ -410,34 +371,6 @@ void CreatureTextMgr::SendEmote(Unit* source, uint32 emote) source->HandleEmoteCommand(emote); } -void CreatureTextMgr::SetRepeatId(Creature* source, uint8 textGroup, uint8 id) -{ - if (!source) - return; - - CreatureTextRepeatIds& repeats = mTextRepeatMap[source->GetGUID()][textGroup]; - if (std::find(repeats.begin(), repeats.end(), id) == repeats.end()) - repeats.push_back(id); - else - LOG_ERROR("sql.sql", "CreatureTextMgr: TextGroup {} for Creature {} ({}), id {} already added", - uint32(textGroup), source->GetName(), source->GetGUID().ToString(), uint32(id)); -} - -CreatureTextRepeatIds CreatureTextMgr::GetRepeatGroup(Creature* source, uint8 textGroup) -{ - ASSERT(source);//should never happen - CreatureTextRepeatIds ids; - - CreatureTextRepeatMap::const_iterator mapItr = mTextRepeatMap.find(source->GetGUID()); - if (mapItr != mTextRepeatMap.end()) - { - CreatureTextRepeatGroup::const_iterator groupItr = (*mapItr).second.find(textGroup); - if (groupItr != mapItr->second.end()) - ids = groupItr->second; - } - return ids; -} - bool CreatureTextMgr::TextExist(uint32 sourceEntry, uint8 textGroup) { if (!sourceEntry) diff --git a/src/server/game/Texts/CreatureTextMgr.h b/src/server/game/Texts/CreatureTextMgr.h index d84d91c8d..569de9586 100644 --- a/src/server/game/Texts/CreatureTextMgr.h +++ b/src/server/game/Texts/CreatureTextMgr.h @@ -77,11 +77,6 @@ typedef std::unordered_map CreatureTextMap; // a typedef std::map LocaleCreatureTextMap; -//used for handling non-repeatable random texts -typedef std::vector CreatureTextRepeatIds; -typedef std::unordered_map CreatureTextRepeatGroup; -typedef std::unordered_map CreatureTextRepeatMap;//guid based - class CreatureTextMgr { CreatureTextMgr() { } @@ -105,14 +100,10 @@ public: template void SendChatPacket(WorldObject* source, Builder const& builder, ChatMsg msgType, WorldObject const* target = nullptr, CreatureTextRange range = TEXT_RANGE_NORMAL, TeamId teamId = TEAM_NEUTRAL, bool gmOnly = false) const; private: - CreatureTextRepeatIds GetRepeatGroup(Creature* source, uint8 textGroup); - void SetRepeatId(Creature* source, uint8 textGroup, uint8 id); - void SendNonChatPacket(WorldObject* source, WorldPacket const* data, ChatMsg msgType, WorldObject const* target, CreatureTextRange range, TeamId teamId, bool gmOnly) const; float GetRangeForChatType(ChatMsg msgType) const; CreatureTextMap mTextMap; - CreatureTextRepeatMap mTextRepeatMap; LocaleCreatureTextMap mLocaleTextMap; }; From 8ac6019a67f0e22489b65b379850d6081619c043 Mon Sep 17 00:00:00 2001 From: Grimdhex Date: Mon, 13 Oct 2025 03:11:44 +0200 Subject: [PATCH 097/140] fix(Scripts/HallOfLightning): wrong stance when bjarngrim reset (#23207) --- .../Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp index 9435ba649..631242974 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp @@ -160,10 +160,12 @@ public: me->RemoveAllAuras(); me->CastSpell(me, SPELL_TEMPORARY_ELECTRICAL_CHARGE, true); - RollStance(0, STANCE_DEFENSIVE); if (m_pInstance) m_pInstance->SetData(TYPE_BJARNGRIM, NOT_STARTED); + + me->CastSpell(me, SPELL_BATTLE_STANCE, true); + SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SHIELD, EQUIP_NO_CHANGE); } void JustEngagedWith(Unit*) override @@ -171,6 +173,8 @@ public: me->SetInCombatWithZone(); Talk(SAY_AGGRO); + RollStance(STANCE_BATTLE); + events.ScheduleEvent(EVENT_BJARNGRIM_CHANGE_STANCE, 20s, 0); // DEFENSIVE STANCE From 8e1426c06a0136bf6a123ace69a883c789dcdf5b Mon Sep 17 00:00:00 2001 From: Grimdhex Date: Mon, 13 Oct 2025 03:12:07 +0200 Subject: [PATCH 098/140] fix(Script/HallOfLightning): wrong spell group with General Bjarngrim (#23205) --- .../Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp index 631242974..1d5a440df 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp @@ -179,17 +179,17 @@ public: // DEFENSIVE STANCE events.ScheduleEvent(EVENT_BJARNGRIM_REFLECTION, 8s, STANCE_DEFENSIVE); - events.ScheduleEvent(EVENT_BJARNGRIM_PUMMEL, 5s, STANCE_DEFENSIVE); events.ScheduleEvent(EVENT_BJARNGRIM_KNOCK, 16s, STANCE_DEFENSIVE); events.ScheduleEvent(EVENT_BJARNGRIM_IRONFORM, 12s, STANCE_DEFENSIVE); // BERSERKER STANCE - events.ScheduleEvent(EVENT_BJARNGRIM_MORTAL_STRIKE, 24s, STANCE_BERSERKER); + events.ScheduleEvent(EVENT_BJARNGRIM_INTERCEPT, 23s, STANCE_BERSERKER); + events.ScheduleEvent(EVENT_BJARNGRIM_CLEAVE, 25s, STANCE_BERSERKER); events.ScheduleEvent(EVENT_BJARNGRIM_WHIRLWIND, 26s, STANCE_BERSERKER); // BATTLE STANCE - events.ScheduleEvent(EVENT_BJARNGRIM_INTERCEPT, 23s, STANCE_BATTLE); - events.ScheduleEvent(EVENT_BJARNGRIM_CLEAVE, 25s, STANCE_BATTLE); + events.ScheduleEvent(EVENT_BJARNGRIM_PUMMEL, 5s, STANCE_BATTLE); + events.ScheduleEvent(EVENT_BJARNGRIM_MORTAL_STRIKE, 24s, STANCE_BATTLE); events.ScheduleEvent(EVENT_BJARNGRIM_SLAM, 30s, STANCE_BATTLE); if (m_pInstance) From 9c49349e1e25f81edd46547d693686ff8736d809 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A9=E9=B9=AD?= <18535853+PkllonG@users.noreply.github.com> Date: Mon, 13 Oct 2025 09:19:24 +0800 Subject: [PATCH 099/140] refactor(Core/EventMap): Refactor EventMap and related scripts (#23121) Co-authored-by: Kelno <3866946+kelno@users.noreply.github.com> Co-authored-by: Peter Keresztes Schmidt --- src/common/Utilities/EventMap.cpp | 181 +++++---------- src/common/Utilities/EventMap.h | 177 ++++++-------- src/server/game/AI/CoreAI/CombatAI.cpp | 8 +- .../Battlegrounds/Zones/BattlegroundAB.cpp | 6 +- .../game/Battlegrounds/Zones/BattlegroundAB.h | 7 +- .../Battlegrounds/Zones/BattlegroundEY.cpp | 8 +- .../game/Battlegrounds/Zones/BattlegroundEY.h | 11 +- .../Battlegrounds/Zones/BattlegroundWS.cpp | 12 +- .../game/Battlegrounds/Zones/BattlegroundWS.h | 10 +- .../AlteracValley/alterac_valley.cpp | 2 +- .../BlackrockDepths/blackrock_depths.cpp | 7 +- .../BlackrockDepths/boss_anubshiah.cpp | 31 ++- .../BlackrockDepths/boss_eviscerator.cpp | 19 +- .../boss_gorosh_the_dervish.cpp | 25 +- .../BlackrockDepths/boss_grizzle.cpp | 19 +- .../BlackrockDepths/boss_hedrum.cpp | 21 +- .../boss_moira_bronzebeard.cpp | 37 ++- .../BlackrockDepths/boss_okthor.cpp | 29 ++- .../BlackrockSpire/boss_gyth.cpp | 2 +- .../BlackrockSpire/boss_lord_valthalak.cpp | 8 +- .../boss_quartermaster_zigris.cpp | 6 +- .../BlackrockSpire/boss_rend_blackhand.cpp | 12 +- .../BlackrockSpire/boss_the_beast.cpp | 4 +- .../BlackrockSpire/boss_warmaster_voone.cpp | 14 +- .../instance_blackrock_spire.cpp | 5 +- .../BlackwingLair/instance_blackwing_lair.cpp | 6 +- .../MoltenCore/boss_baron_geddon.cpp | 6 +- .../MoltenCore/boss_garr.cpp | 4 +- .../MoltenCore/boss_gehennas.cpp | 6 +- .../MoltenCore/boss_lucifron.cpp | 6 +- .../MoltenCore/boss_magmadar.cpp | 8 +- .../MoltenCore/boss_majordomo_executus.cpp | 6 +- .../MoltenCore/boss_ragnaros.cpp | 10 +- .../MoltenCore/boss_shazzrah.cpp | 10 +- .../MoltenCore/boss_sulfuron_harbinger.cpp | 18 +- .../Deadmines/boss_mr_smite.cpp | 4 +- .../boss_felblood_kaelthas.cpp | 2 +- .../MagistersTerrace/boss_selin_fireheart.cpp | 2 +- .../ScarletEnclave/chapter1.cpp | 10 +- .../ScarletEnclave/chapter2.cpp | 36 +-- .../ScarletEnclave/chapter5.cpp | 10 +- .../Scholomance/boss_darkmaster_gandling.cpp | 23 +- .../Scholomance/instance_scholomance.cpp | 10 +- .../Stratholme/instance_stratholme.cpp | 22 +- .../SunwellPlateau/boss_brutallus.cpp | 58 ++--- .../SunwellPlateau/boss_kiljaeden.cpp | 54 ++--- .../EasternKingdoms/ZulAman/boss_hexlord.cpp | 80 +++---- .../EasternKingdoms/ZulAman/zulaman.cpp | 12 +- .../EasternKingdoms/ZulGurub/boss_arlokk.cpp | 2 +- .../ZulGurub/boss_mandokir.cpp | 2 +- .../zone_eastern_plaguelands.cpp | 4 +- .../EasternKingdoms/zone_eversong_woods.cpp | 2 +- .../zone_isle_of_queldanas.cpp | 94 ++++---- .../zone_silverpine_forest.cpp | 16 +- src/server/scripts/Events/brewfest.cpp | 12 +- src/server/scripts/Events/hallows_end.cpp | 20 +- .../BattleForMountHyjal/boss_archimonde.cpp | 2 +- .../BattleForMountHyjal/boss_azgalor.cpp | 2 +- .../BattleForMountHyjal/boss_kazrogal.cpp | 6 +- .../BattleForMountHyjal/instance_hyjal.cpp | 16 +- .../CullingOfStratholme/boss_epoch.cpp | 16 +- .../CullingOfStratholme/boss_infinite.cpp | 8 +- .../CullingOfStratholme/boss_mal_ganis.cpp | 16 +- .../CullingOfStratholme/boss_meathook.cpp | 12 +- .../CullingOfStratholme/boss_salramm.cpp | 20 +- .../culling_of_stratholme.cpp | 138 +++++------ .../instance_old_hillsbrad.cpp | 14 +- .../EscapeFromDurnholdeKeep/old_hillsbrad.cpp | 128 +++++----- .../TheBlackMorass/the_black_morass.cpp | 36 +-- .../Kalimdor/OnyxiasLair/boss_onyxia.cpp | 80 +++---- .../TempleOfAhnQiraj/boss_viscidus.cpp | 2 +- .../TempleOfAhnQiraj/temple_of_ahnqiraj.cpp | 6 +- src/server/scripts/Kalimdor/zone_desolace.cpp | 10 +- src/server/scripts/Kalimdor/zone_silithus.cpp | 2 +- .../AzjolNerub/AzjolNerub/boss_anubarak.cpp | 2 +- .../AzjolNerub/AzjolNerub/boss_hadronox.cpp | 2 +- .../ObsidianSanctum/boss_sartharion.cpp | 10 +- .../boss_baltharus_the_warborn.cpp | 2 +- .../RubySanctum/boss_general_zarithrian.cpp | 2 +- .../RubySanctum/boss_halion.cpp | 8 +- .../RubySanctum/boss_saviana_ragefire.cpp | 2 +- .../boss_argent_challenge.cpp | 4 +- .../TrialOfTheChampion/boss_black_knight.cpp | 4 +- .../boss_grand_champions.cpp | 10 +- .../instance_trial_of_the_champion.cpp | 11 +- .../boss_anubarak_trial.cpp | 2 +- .../boss_faction_champions.cpp | 218 +++++++++--------- .../boss_northrend_beasts.cpp | 2 +- .../TrialOfTheCrusader/boss_twin_valkyr.cpp | 4 +- .../instance_trial_of_the_crusader.cpp | 136 +++++------ .../Northrend/DraktharonKeep/boss_novos.cpp | 2 +- .../DraktharonKeep/boss_tharon_ja.cpp | 2 +- .../DraktharonKeep/boss_trollgore.cpp | 2 +- .../ForgeOfSouls/boss_bronjahm.cpp | 2 +- .../ForgeOfSouls/boss_devourer_of_souls.cpp | 6 +- .../HallsOfReflection/boss_falric.cpp | 2 +- .../HallsOfReflection/halls_of_reflection.cpp | 4 +- .../PitOfSaron/boss_forgemaster_garfrost.cpp | 4 +- .../PitOfSaron/boss_krickandick.cpp | 6 +- .../PitOfSaron/boss_scourgelord_tyrannus.cpp | 2 +- .../FrozenHalls/PitOfSaron/pit_of_saron.cpp | 2 +- .../Gundrak/boss_drakkari_colossus.cpp | 2 +- .../Northrend/Gundrak/boss_gal_darah.cpp | 2 +- .../Northrend/Gundrak/boss_moorabi.cpp | 2 +- .../Northrend/Gundrak/boss_slad_ran.cpp | 2 +- .../boss_deathbringer_saurfang.cpp | 10 +- .../IcecrownCitadel/boss_festergut.cpp | 2 +- .../boss_icecrown_gunship_battle.cpp | 4 +- .../IcecrownCitadel/boss_lord_marrowgar.cpp | 6 +- .../boss_professor_putricide.cpp | 12 +- .../IcecrownCitadel/boss_rotface.cpp | 10 +- .../IcecrownCitadel/boss_sindragosa.cpp | 20 +- .../IcecrownCitadel/boss_the_lich_king.cpp | 41 ++-- .../IcecrownCitadel/icecrown_citadel.cpp | 62 ++--- .../instance_icecrown_citadel.cpp | 2 +- .../Northrend/Naxxramas/boss_gluth.cpp | 6 +- .../Northrend/Naxxramas/boss_gothik.cpp | 4 +- .../Northrend/Naxxramas/boss_grobbulus.cpp | 4 +- .../Northrend/Naxxramas/boss_kelthuzad.cpp | 2 +- .../Northrend/Naxxramas/boss_sapphiron.cpp | 4 +- .../Nexus/EyeOfEternity/boss_malygos.cpp | 4 +- .../Northrend/Nexus/Nexus/boss_anomalus.cpp | 5 +- .../Nexus/Nexus/boss_keristrasza.cpp | 6 +- .../Nexus/Nexus/boss_magus_telestra.cpp | 2 +- .../Northrend/Nexus/Nexus/boss_ormorok.cpp | 2 +- .../Northrend/Nexus/Oculus/boss_eregos.cpp | 2 +- .../Northrend/Nexus/Oculus/boss_urom.cpp | 2 +- .../HallsOfLightning/boss_bjarngrim.cpp | 12 +- .../Ulduar/HallsOfStone/boss_sjonnir.cpp | 2 +- .../Ulduar/HallsOfStone/brann_bronzebeard.cpp | 20 +- .../Ulduar/boss_algalon_the_observer.cpp | 32 +-- .../Ulduar/Ulduar/boss_assembly_of_iron.cpp | 2 +- .../Northrend/Ulduar/Ulduar/boss_auriaya.cpp | 2 +- .../Ulduar/Ulduar/boss_general_vezax.cpp | 6 +- .../Northrend/Ulduar/Ulduar/boss_ignis.cpp | 4 +- .../Northrend/Ulduar/Ulduar/boss_mimiron.cpp | 4 +- .../Ulduar/Ulduar/boss_yoggsaron.cpp | 36 +-- .../UtgardeKeep/UtgardeKeep/utgarde_keep.cpp | 6 +- .../UtgardePinnacle/boss_svala.cpp | 4 +- .../UtgardePinnacle/boss_ymiron.cpp | 2 +- .../Northrend/VioletHold/boss_xevozz.cpp | 2 +- .../VioletHold/instance_violet_hold.cpp | 4 +- .../Northrend/VioletHold/violet_hold.cpp | 4 +- .../scripts/Northrend/zone_borean_tundra.cpp | 6 +- .../scripts/Northrend/zone_dragonblight.cpp | 6 +- .../scripts/Northrend/zone_icecrown.cpp | 4 +- .../boss_grandmaster_vorpil.cpp | 2 +- .../Outland/BlackTemple/boss_illidan.cpp | 2 +- .../BlackTemple/boss_illidari_council.cpp | 4 +- .../BlackTemple/boss_shade_of_akama.cpp | 2 +- .../SerpentShrine/boss_lurker_below.cpp | 4 +- .../SlavePens/boss_ahune.cpp | 40 ++-- .../scripts/Outland/GruulsLair/boss_gruul.cpp | 4 +- .../GruulsLair/boss_high_king_maulgar.cpp | 2 +- .../Outland/TempestKeep/Eye/boss_kaelthas.cpp | 42 ++-- .../Outland/TempestKeep/arcatraz/arcatraz.cpp | 100 ++++---- .../boss_wrath_scryer_soccothrates.cpp | 18 +- .../Outland/zone_blades_edge_mountains.cpp | 24 +- .../scripts/Outland/zone_netherstorm.cpp | 6 +- .../Outland/zone_shadowmoon_valley.cpp | 18 +- .../scripts/Outland/zone_terokkar_forest.cpp | 12 +- src/server/scripts/Pet/pet_generic.cpp | 4 +- src/server/scripts/Pet/pet_mage.cpp | 15 +- src/server/scripts/Pet/pet_shaman.cpp | 14 +- .../scripts/World/boss_emerald_dragons.cpp | 28 +-- src/server/scripts/World/go_scripts.cpp | 51 ++-- .../scripts/World/npc_stave_of_ancients.cpp | 104 ++++----- src/server/scripts/World/npcs_special.cpp | 4 +- 168 files changed, 1468 insertions(+), 1593 deletions(-) diff --git a/src/common/Utilities/EventMap.cpp b/src/common/Utilities/EventMap.cpp index 00dac4a6d..0d11d931f 100644 --- a/src/common/Utilities/EventMap.cpp +++ b/src/common/Utilities/EventMap.cpp @@ -21,113 +21,81 @@ void EventMap::Reset() { _eventMap.clear(); - _time = 0; - _phase = 0; + _time = TimePoint::min(); + _phaseMask = 0; } -void EventMap::SetPhase(uint8 phase) +void EventMap::SetPhase(PhaseIndex phase) { if (!phase) - { - _phase = 0; - } - else if (phase <= 8) - { - _phase = (1 << (phase - 1)); - } + _phaseMask = 0; + else if (phase <= sizeof(PhaseMask) * 8) + _phaseMask = PhaseMask(1u << (phase - 1u)); } -void EventMap::AddPhase(uint8 phase) +void EventMap::AddPhase(PhaseIndex phase) { - if (phase && phase <= 8) - { - _phase |= (1 << (phase - 1)); - } + if (phase && phase <= sizeof(PhaseMask) * 8) + _phaseMask |= PhaseMask(1u << (phase - 1u)); } -void EventMap::RemovePhase(uint8 phase) +void EventMap::RemovePhase(PhaseIndex phase) { - if (phase && phase <= 8) - { - _phase &= ~(1 << (phase - 1)); - } + if (phase && phase <= sizeof(PhaseMask) * 8) + _phaseMask &= PhaseMask(~(1u << (phase - 1u))); } -void EventMap::ScheduleEvent(uint32 eventId, uint32 time, uint32 group /*= 0*/, uint32 phase /*= 0*/) +void EventMap::ScheduleEvent(EventId eventId, Milliseconds time, GroupIndex group /*= 0u*/, PhaseIndex phase /*= 0u*/) { - if (group && group <= 8) - { - eventId |= (1 << (group + 15)); - } + if (group > sizeof(GroupMask) * 8) + return; - if (phase && phase <= 8) - { - eventId |= (1 << (phase + 23)); - } + if (phase > sizeof(PhaseMask) * 8) + return; - _eventMap.emplace(_time + time, eventId); + _eventMap.emplace(_time + time, Event(eventId, group, phase)); } -void EventMap::ScheduleEvent(uint32 eventId, Milliseconds time, uint32 group /*= 0*/, uint8 phase /* = 0*/) +void EventMap::ScheduleEvent(EventId eventId, Milliseconds minTime, Milliseconds maxTime, GroupIndex group /*= 0u*/, PhaseIndex phase /*= 0u*/) { - ScheduleEvent(eventId, time.count(), group, phase); + ScheduleEvent(eventId, randtime(minTime, maxTime), group, phase); } -void EventMap::ScheduleEvent(uint32 eventId, Milliseconds minTime, Milliseconds maxTime, uint32 group /*= 0*/, uint32 phase /*= 0*/) -{ - ScheduleEvent(eventId, randtime(minTime, maxTime).count(), group, phase); -} - -void EventMap::RescheduleEvent(uint32 eventId, uint32 time, uint32 groupId /*= 0*/, uint32 phase/* = 0*/) +void EventMap::RescheduleEvent(EventId eventId, Milliseconds minTime, Milliseconds maxTime, GroupIndex group /*= 0u*/, PhaseIndex phase /*= 0u*/) { CancelEvent(eventId); - ScheduleEvent(eventId, time, groupId, phase); + ScheduleEvent(eventId, randtime(minTime, maxTime), group, phase); } -void EventMap::RescheduleEvent(uint32 eventId, Milliseconds time, uint32 group /*= 0*/, uint8 phase /* = 0*/) +void EventMap::RescheduleEvent(EventId eventId, Milliseconds time, GroupIndex group /*= 0u*/, PhaseIndex phase /*= 0u*/) { CancelEvent(eventId); - ScheduleEvent(eventId, time.count(), group, phase); -} - -void EventMap::RescheduleEvent(uint32 eventId, Milliseconds minTime, Milliseconds maxTime, uint32 group /*= 0*/, uint32 phase /*= 0*/) -{ - CancelEvent(eventId); - ScheduleEvent(eventId, randtime(minTime, maxTime).count(), group, phase); -} - -void EventMap::RepeatEvent(uint32 time) -{ - _eventMap.emplace(_time + time, _lastEvent); + ScheduleEvent(eventId, time, group, phase); } void EventMap::Repeat(Milliseconds time) { - RepeatEvent(time.count()); + _eventMap.emplace(_time + time, _lastEvent); } void EventMap::Repeat(Milliseconds minTime, Milliseconds maxTime) { - RepeatEvent(randtime(minTime, maxTime).count()); + Repeat(randtime(minTime, maxTime)); } -uint32 EventMap::ExecuteEvent() +EventMap::EventId EventMap::ExecuteEvent() { while (!Empty()) { auto const& itr = _eventMap.begin(); if (itr->first > _time) - { return 0; - } - else if (_phase && (itr->second & 0xFF000000) && !((itr->second >> 24) & _phase)) - { + else if (_phaseMask && itr->second._phaseMask && !(itr->second._phaseMask & _phaseMask)) _eventMap.erase(itr); - } else { - uint32 eventId = (itr->second & 0x0000FFFF); + auto eventId = itr->second._id; _lastEvent = itr->second; _eventMap.erase(itr); return eventId; @@ -137,30 +105,32 @@ uint32 EventMap::ExecuteEvent() return 0; } -void EventMap::DelayEvents(uint32 delay) -{ - _time = delay < _time ? _time - delay : 0; -} - void EventMap::DelayEvents(Milliseconds delay) { - DelayEvents(delay.count()); + if (Empty()) + return; + + EventStore delayed = std::move(_eventMap); + for (auto itr = delayed.begin(); itr != delayed.end();) + { + auto node = delayed.extract(itr++); + node.key() = node.key() + delay; + _eventMap.insert(_eventMap.end(), std::move(node)); + } } -void EventMap::DelayEvents(uint32 delay, uint32 group) +void EventMap::DelayEvents(Milliseconds delay, GroupIndex group) { - if (group > 8 || Empty()) - { + if (group > sizeof(GroupMask) * 8 || Empty()) return; - } EventStore delayed; - for (EventStore::iterator itr = _eventMap.begin(); itr != _eventMap.end();) + for (auto itr = _eventMap.begin(); itr != _eventMap.end();) { - if (!group || (itr->second & (1 << (group + 15)))) + if (!group || (itr->second._groupMask & GroupMask(1u << (group - 1u)))) { - delayed.insert(EventStore::value_type(itr->first + delay, itr->second)); + delayed.emplace(itr->first + delay, itr->second); itr = _eventMap.erase(itr); continue; } @@ -171,13 +141,13 @@ void EventMap::DelayEvents(uint32 delay, uint32 group) _eventMap.insert(delayed.begin(), delayed.end()); } -void EventMap::DelayEventsToMax(uint32 delay, uint32 group) +void EventMap::DelayEventsToMax(Milliseconds delay, GroupIndex group) { for (auto itr = _eventMap.begin(); itr != _eventMap.end();) { - if (itr->first < _time + delay && (group == 0 || ((1 << (group + 15)) & itr->second))) + if (itr->first < _time + delay && (!group || (itr->second._groupMask & GroupMask(1u << (group - 1u))))) { - ScheduleEvent(itr->second, delay); + ScheduleEvent(itr->second._id, delay, group); _eventMap.erase(itr); itr = _eventMap.begin(); continue; @@ -187,16 +157,14 @@ void EventMap::DelayEventsToMax(uint32 delay, uint32 group) } } -void EventMap::CancelEvent(uint32 eventId) +void EventMap::CancelEvent(EventId eventId) { if (Empty()) - { return; - } for (auto itr = _eventMap.begin(); itr != _eventMap.end();) { - if (eventId == (itr->second & 0x0000FFFF)) + if (eventId == itr->second._id) { itr = _eventMap.erase(itr); continue; @@ -206,17 +174,14 @@ void EventMap::CancelEvent(uint32 eventId) } } -void EventMap::CancelEventGroup(uint32 group) +void EventMap::CancelEventGroup(GroupIndex group) { - if (!group || group > 8 || Empty()) - { + if (!group || group > sizeof(GroupMask) * 8 || Empty()) return; - } - uint32 groupMask = (1 << (group + 15)); - for (EventStore::iterator itr = _eventMap.begin(); itr != _eventMap.end();) + for (auto itr = _eventMap.begin(); itr != _eventMap.end();) { - if (itr->second & groupMask) + if (itr->second._groupMask & GroupMask(1u << (group - 1u))) { _eventMap.erase(itr); itr = _eventMap.begin(); @@ -227,39 +192,21 @@ void EventMap::CancelEventGroup(uint32 group) } } -uint32 EventMap::GetNextEventTime(uint32 eventId) const +bool EventMap::IsInPhase(PhaseIndex phase) const { - if (Empty()) - { - return 0; - } - - for (auto const& itr : _eventMap) - { - if (eventId == (itr.second & 0x0000FFFF)) - { - return itr.first; - } - } - - return 0; + return phase <= sizeof(PhaseIndex) * 8 && (!phase || _phaseMask & PhaseMask(1u << (phase - 1u))); } -uint32 EventMap::GetNextEventTime() const +Milliseconds EventMap::GetTimeUntilEvent(EventId eventId) const { - return Empty() ? 0 : _eventMap.begin()->first; -} - -bool EventMap::IsInPhase(uint8 phase) -{ - return phase <= 8 && (!phase || _phase & (1 << (phase - 1))); -} - -Milliseconds EventMap::GetTimeUntilEvent(uint32 eventId) const -{ - for (std::pair const& itr : _eventMap) - if (eventId == (itr.second & 0x0000FFFF)) - return std::chrono::duration_cast(Milliseconds(itr.first) - Milliseconds(_time)); + for (auto const& [time, event] : _eventMap) + if (eventId == event._id) + return std::chrono::duration_cast(time - _time); return Milliseconds::max(); } + +bool EventMap::HasTimeUntilEvent(EventId eventId) const +{ + return GetTimeUntilEvent(eventId) != Milliseconds::max(); +} diff --git a/src/common/Utilities/EventMap.h b/src/common/Utilities/EventMap.h index 1d3df6222..15d2e233d 100644 --- a/src/common/Utilities/EventMap.h +++ b/src/common/Utilities/EventMap.h @@ -24,18 +24,31 @@ class EventMap { + using EventId = uint16; + using GroupIndex = uint8; + using GroupMask = uint8; + using PhaseIndex = uint8; + using PhaseMask = uint8; + struct Event + { + Event() = default; + Event(EventId id, GroupIndex groupIndex, PhaseIndex phaseIndex) : + _id(id), + _groupMask(groupIndex ? GroupMask(1u << (groupIndex - 1u)) : 0u), + _phaseMask(phaseIndex ? PhaseMask(1u << (phaseIndex - 1u)) : 0u) + { + } + + EventId _id = 0u; + GroupMask _groupMask = 0u; + PhaseMask _phaseMask = 0u; + }; + /** - * Internal storage type. - * Key: Time as TimePoint when the event should occur. - * Value: The event data as uint32. - * - * Structure of event data: - * - Bit 0 - 15: Event Id. - * - Bit 16 - 23: Group - * - Bit 24 - 31: Phase - * - Pattern: 0xPPGGEEEE - */ - typedef std::multimap EventStore; + * Internal storage type. + * Key: Time as TimePoint when the event should occur. + */ + using EventStore = std::multimap; public: EventMap() { } @@ -47,13 +60,13 @@ public: void Reset(); /** - * @name Update - * @brief Updates the timer of the event map. - * @param time Value to be added to time. - */ + * @name Update + * @brief Updates the timer of the event map. + * @param time Value to be added to time. + */ void Update(uint32 time) { - _time += time; + Update(Milliseconds(time)); } /** @@ -63,37 +76,23 @@ public: */ void Update(Milliseconds time) { - _time += static_cast(time.count()); - } - - /** - * @name GetTimer - * @return Current timer value. - */ - [[nodiscard]] uint32 GetTimer() const - { - return _time; - } - - void SetTimer(uint32 time) - { - _time = time; + _time += time; } /** * @name GetPhaseMask * @return Active phases as mask. */ - [[nodiscard]] uint8 GetPhaseMask() const + PhaseMask GetPhaseMask() const { - return _phase; + return _phaseMask; } /** * @name Empty * @return True, if there are no events scheduled. */ - [[nodiscard]] bool Empty() const + bool Empty() const { return _eventMap.empty(); } @@ -103,31 +102,21 @@ public: * @brief Sets the phase of the map (absolute). * @param phase Phase which should be set. Values: 1 - 8. 0 resets phase. */ - void SetPhase(uint8 phase); + void SetPhase(PhaseIndex phase); /** * @name AddPhase - * @brief Activates the given phase (bitwise). + * @brief Activates the given phase (absolute). * @param phase Phase which should be activated. Values: 1 - 8 */ - void AddPhase(uint8 phase); + void AddPhase(PhaseIndex phase); /** * @name RemovePhase - * @brief Deactivates the given phase (bitwise). + * @brief Deactivates the given phase (absolute). * @param phase Phase which should be deactivated. Values: 1 - 8. */ - void RemovePhase(uint8 phase); - - /** - * @name ScheduleEvent - * @brief Creates new event entry in map. - * @param eventId The id of the new event. - * @param time The time in milliseconds until the event occurs. - * @param group The group which the event is associated to. Has to be between 1 and 8. 0 means it has no group. - * @param phase The phase in which the event can occur. Has to be between 1 and 8. 0 means it can occur in all phases. - */ - void ScheduleEvent(uint32 eventId, uint32 time, uint32 group = 0, uint32 phase = 0); + void RemovePhase(PhaseIndex phase); /** * @name ScheduleEvent @@ -137,7 +126,7 @@ public: * @param group The group which the event is associated to. Has to be between 1 and 8. 0 means it has no group. * @param phase The phase in which the event can occur. Has to be between 1 and 8. 0 means it can occur in all phases. */ - void ScheduleEvent(uint32 eventId, Milliseconds time, uint32 group = 0, uint8 phase = 0); + void ScheduleEvent(EventId eventId, Milliseconds time, GroupIndex group = 0u, PhaseIndex phase = 0u); /** * @name ScheduleEvent @@ -148,17 +137,7 @@ public: * @param group The group which the event is associated to. Has to be between 1 and 8. 0 means it has no group. * @param phase The phase in which the event can occur. Has to be between 1 and 8. 0 means it can occur in all phases. */ - void ScheduleEvent(uint32 eventId, Milliseconds minTime, Milliseconds maxTime, uint32 group = 0, uint32 phase = 0); - - /** - * @name RescheduleEvent - * @brief Cancels the given event and reschedules it. - * @param eventId The id of the event. - * @param time The time in milliseconds until the event occurs. - * @param group The group which the event is associated to. Has to be between 1 and 8. 0 means it has no group. - * @param phase The phase in which the event can occur. Has to be between 1 and 8. 0 means it can occur in all phases. - */ - void RescheduleEvent(uint32 eventId, uint32 time, uint32 groupId = 0, uint32 phase = 0); + void ScheduleEvent(EventId eventId, Milliseconds minTime, Milliseconds maxTime, GroupIndex group = 0u, PhaseIndex phase = 0u); /** * @name RescheduleEvent @@ -168,7 +147,7 @@ public: * @param group The group which the event is associated to. Has to be between 1 and 8. 0 means it has no group. * @param phase The phase in which the event can occur. Has to be between 1 and 8. 0 means it can occur in all phases. */ - void RescheduleEvent(uint32 eventId, Milliseconds time, uint32 group = 0, uint8 phase = 0); + void RescheduleEvent(EventId eventId, Milliseconds time, GroupIndex group = 0u, PhaseIndex phase = 0u); /** * @name RescheduleEvent @@ -179,25 +158,17 @@ public: * @param group The group which the event is associated to. Has to be between 1 and 8. 0 means it has no group. * @param phase The phase in which the event can occur. Has to be between 1 and 8. 0 means it can occur in all phases. */ - void RescheduleEvent(uint32 eventId, Milliseconds minTime, Milliseconds maxTime, uint32 group = 0, uint32 phase = 0); + void RescheduleEvent(EventId eventId, Milliseconds minTime, Milliseconds maxTime, GroupIndex group = 0u, PhaseIndex phase = 0u); /** - * @name RepeatEvent - * @brief Repeats the most recently executed event. - * @param time Time until the event occurs as std::chrono type. - */ - void RepeatEvent(uint32 time); - - /** - * @name RepeatEvent + * @name Repeat * @brief Repeats the most recently executed event. * @param time Time until the event occurs as std::chrono type. */ void Repeat(Milliseconds time); /** - - * @name RepeatEvent + * @name Repeat * @brief Repeats the most recently executed event. * @param minTime The minimum time until the event occurs as std::chrono type. * @param maxTime The maximum time until the event occurs as std::chrono type. @@ -209,14 +180,7 @@ public: * @brief Returns the next event to execute and removes it from map. * @return Id of the event to execute. */ - uint32 ExecuteEvent(); - - /** - * @name DelayEvents - * @brief Delays all events in the map. If delay is greater than or equal internal timer, delay will be 0. - * @param delay Amount of delay. - */ - void DelayEvents(uint32 delay); + EventId ExecuteEvent(); /** * @name DelayEvents @@ -228,62 +192,57 @@ public: /** * @name DelayEvents * @brief Delay all events of the same group. - * @param delay Amount of delay. + * @param delay Amount of delay as std::chrono type. * @param group Group of the events. */ - void DelayEvents(uint32 delay, uint32 group); + void DelayEvents(Milliseconds delay, GroupIndex group); /** * @name EventsEvents * @brief Delay all events of the same group. - * @param delay Amount of delay. + * @param delay Amount of delay as std::chrono type. * @param group Group of the events. */ - void DelayEventsToMax(uint32 delay, uint32 group); + void DelayEventsToMax(Milliseconds delay, GroupIndex group); /** * @name CancelEvent * @brief Cancels all events of the specified id. * @param eventId Event id to cancel. */ - void CancelEvent(uint32 eventId); + void CancelEvent(EventId eventId); /** * @name CancelEventGroup * @brief Cancel events belonging to specified group. * @param group Group to cancel. */ - void CancelEventGroup(uint32 group); - - /** - * @name GetNextEventTime - * @brief Returns closest occurence of specified event. - * @param eventId Wanted event id. - * @return Time of found event. - */ - [[nodiscard]] uint32 GetNextEventTime(uint32 eventId) const; - - /** - * @name GetNextEventTime - * @return Time of next event. - */ - [[nodiscard]] uint32 GetNextEventTime() const; + void CancelEventGroup(GroupIndex group); /** * @name IsInPhase - * @brief Returns wether event map is in specified phase or not. + * @brief Returns whether event map is in specified phase or not. * @param phase Wanted phase. * @return True, if phase of event map contains specified phase. */ - bool IsInPhase(uint8 phase); + bool IsInPhase(PhaseIndex phase) const; /** * @name GetTimeUntilEvent * @brief Returns time as std::chrono type until next event. - * @param eventId of the event. + * @param eventId The id of the event. * @return Time of next event. If event is not scheduled returns Milliseconds::max() + * @return Time of next event. */ - Milliseconds GetTimeUntilEvent(uint32 eventId) const; + Milliseconds GetTimeUntilEvent(EventId eventId) const; + + /** + * @name HasTimeUntilEvent + * @brief Returns whether an event is scheduled + * @param eventId The id of the event. + * @return True if event is scheduled + */ + bool HasTimeUntilEvent(EventId eventId) const; private: /** @@ -296,23 +255,23 @@ private: * has reached their time value. Its value is changed in the * Update method. */ - uint32 _time{ 0 }; + TimePoint _time{ TimePoint::min() }; /** - * @name _phase + * @name _phaseMask * @brief Phase mask of the event map. * * Contains the phases the event map is in. Multiple * phases from 1 to 8 can be set with SetPhase or * AddPhase. RemovePhase deactives a phase. */ - uint32 _phase{0}; + PhaseMask _phaseMask{ 0 }; /** * @name _lastEvent * @brief Stores information on the most recently executed event */ - uint32 _lastEvent{0}; + Event _lastEvent; /** * @name _eventMap diff --git a/src/server/game/AI/CoreAI/CombatAI.cpp b/src/server/game/AI/CoreAI/CombatAI.cpp index 13609a9b5..0e932e56d 100644 --- a/src/server/game/AI/CoreAI/CombatAI.cpp +++ b/src/server/game/AI/CoreAI/CombatAI.cpp @@ -80,7 +80,7 @@ void CombatAI::JustEngagedWith(Unit* who) if (AISpellInfo[*i].condition == AICOND_AGGRO) me->CastSpell(who, *i, false); else if (AISpellInfo[*i].condition == AICOND_COMBAT) - events.ScheduleEvent(*i, AISpellInfo[*i].cooldown + rand() % AISpellInfo[*i].cooldown); + events.ScheduleEvent(*i, Milliseconds(AISpellInfo[*i].cooldown + rand() % AISpellInfo[*i].cooldown)); } } @@ -97,7 +97,7 @@ void CombatAI::UpdateAI(uint32 diff) if (uint32 spellId = events.ExecuteEvent()) { DoCast(spellId); - events.ScheduleEvent(spellId, AISpellInfo[spellId].cooldown + rand() % AISpellInfo[spellId].cooldown); + events.ScheduleEvent(spellId, Milliseconds(AISpellInfo[spellId].cooldown + rand() % AISpellInfo[spellId].cooldown)); } else DoMeleeAttackIfReady(); @@ -143,7 +143,7 @@ void CasterAI::JustEngagedWith(Unit* who) DoCast(spells[spell]); cooldown += me->GetCurrentSpellCastTime(*itr); } - events.ScheduleEvent(*itr, cooldown); + events.ScheduleEvent(*itr, Milliseconds(cooldown)); } } } @@ -168,7 +168,7 @@ void CasterAI::UpdateAI(uint32 diff) { DoCast(spellId); uint32 casttime = me->GetCurrentSpellCastTime(spellId); - events.ScheduleEvent(spellId, (casttime ? casttime : 500) + GetAISpellInfo(spellId)->realCooldown); + events.ScheduleEvent(spellId, Milliseconds((casttime ? casttime : 500) + GetAISpellInfo(spellId)->realCooldown)); } } diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp index d1aa246ab..ab12f3634 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.cpp @@ -101,7 +101,7 @@ void BattlegroundAB::PostUpdateImpl(uint32 diff) uint8 controlledPoints = _controlledPoints[teamId]; if (controlledPoints == 0) { - _bgEvents.ScheduleEvent(eventId, 3000); + _bgEvents.ScheduleEvent(eventId, 3s); break; } @@ -170,8 +170,8 @@ void BattlegroundAB::StartingEventOpenDoors() DoorOpen(BG_AB_OBJECT_GATE_A); DoorOpen(BG_AB_OBJECT_GATE_H); StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, BG_AB_EVENT_START_BATTLE); - _bgEvents.ScheduleEvent(BG_AB_EVENT_ALLIANCE_TICK, 3000); - _bgEvents.ScheduleEvent(BG_AB_EVENT_HORDE_TICK, 3000); + _bgEvents.ScheduleEvent(BG_AB_EVENT_ALLIANCE_TICK, 3s); + _bgEvents.ScheduleEvent(BG_AB_EVENT_HORDE_TICK, 3s); } void BattlegroundAB::AddPlayer(Player* player) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h index 61aee582d..9c3bf400c 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundAB.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundAB.h @@ -170,12 +170,11 @@ enum BG_AB_Misc BG_AB_WARNING_NEAR_VICTORY_SCORE = 1400, BG_AB_MAX_TEAM_SCORE = 1600, - - BG_AB_FLAG_CAPTURING_TIME = 60000, - BG_AB_BANNER_UPDATE_TIME = 2000 }; +constexpr Milliseconds BG_AB_FLAG_CAPTURING_TIME = 60s; +constexpr Milliseconds BG_AB_BANNER_UPDATE_TIME = 2s; -const uint32 BG_AB_TickIntervals[BG_AB_DYNAMIC_NODES_COUNT + 1] = {0, 12000, 9000, 6000, 3000, 1000}; +const Milliseconds BG_AB_TickIntervals[BG_AB_DYNAMIC_NODES_COUNT + 1] = {0ms, 12s, 9s, 6s, 3s, 1s}; const uint32 BG_AB_TickPoints[BG_AB_DYNAMIC_NODES_COUNT + 1] = {0, 10, 10, 10, 10, 30}; const uint32 BG_AB_GraveyardIds[BG_AB_ALL_NODES_COUNT] = {895, 894, 893, 897, 896, 898, 899}; diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp index ed636bcf5..e646dd2e1 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.cpp @@ -68,7 +68,7 @@ void BattlegroundEY::PostUpdateImpl(uint32 diff) AddPoints(TEAM_ALLIANCE, BG_EY_TickPoints[_ownedPointsCount[TEAM_ALLIANCE] - 1]); if (_ownedPointsCount[TEAM_HORDE] > 0) AddPoints(TEAM_HORDE, BG_EY_TickPoints[_ownedPointsCount[TEAM_HORDE] - 1]); - _bgEvents.ScheduleEvent(BG_EY_EVENT_ADD_POINTS, BG_EY_FPOINTS_TICK_TIME - (GameTime::GetGameTimeMS().count() % BG_EY_FPOINTS_TICK_TIME)); + _bgEvents.ScheduleEvent(BG_EY_EVENT_ADD_POINTS, BG_EY_FPOINTS_TICK_TIME - (GameTime::GetGameTimeMS() % BG_EY_FPOINTS_TICK_TIME)); break; case BG_EY_EVENT_FLAG_ON_GROUND: RespawnFlagAfterDrop(); @@ -78,7 +78,7 @@ void BattlegroundEY::PostUpdateImpl(uint32 diff) break; case BG_EY_EVENT_CHECK_CPOINTS: UpdatePointsState(); - _bgEvents.ScheduleEvent(BG_EY_EVENT_CHECK_CPOINTS, BG_EY_FPOINTS_CHECK_TIME - (GameTime::GetGameTimeMS().count() % BG_EY_FPOINTS_CHECK_TIME)); + _bgEvents.ScheduleEvent(BG_EY_EVENT_CHECK_CPOINTS, BG_EY_FPOINTS_CHECK_TIME - (GameTime::GetGameTimeMS() % BG_EY_FPOINTS_CHECK_TIME)); break; } } @@ -106,8 +106,8 @@ void BattlegroundEY::StartingEventOpenDoors() // Achievement: Flurry StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, BG_EY_EVENT_START_BATTLE); - _bgEvents.ScheduleEvent(BG_EY_EVENT_ADD_POINTS, 0); - _bgEvents.ScheduleEvent(BG_EY_EVENT_CHECK_CPOINTS, 0); + _bgEvents.ScheduleEvent(BG_EY_EVENT_ADD_POINTS, 0ms); + _bgEvents.ScheduleEvent(BG_EY_EVENT_CHECK_CPOINTS, 0ms); } void BattlegroundEY::AddPoints(TeamId teamId, uint32 points) diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h index 1cdf29992..50a46ce41 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundEY.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundEY.h @@ -31,13 +31,10 @@ enum BG_EY_Events BG_EY_EVENT_CHECK_CPOINTS = 4 }; -enum BG_EY_Timers -{ - BG_EY_FLAG_RESPAWN_TIME = 10 * IN_MILLISECONDS, - BG_EY_FLAG_ON_GROUND_TIME = 10 * IN_MILLISECONDS, - BG_EY_FPOINTS_CHECK_TIME = 2 * IN_MILLISECONDS, - BG_EY_FPOINTS_TICK_TIME = 2 * IN_MILLISECONDS -}; +constexpr Milliseconds BG_EY_FLAG_RESPAWN_TIME = 10s; +constexpr Milliseconds BG_EY_FLAG_ON_GROUND_TIME = 10s; +constexpr Milliseconds BG_EY_FPOINTS_CHECK_TIME = 2s; +constexpr Milliseconds BG_EY_FPOINTS_TICK_TIME = 2s; enum BG_EY_ProgressBarConsts { diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp index 974e1d67a..0c450b483 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp +++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.cpp @@ -63,7 +63,7 @@ void BattlegroundWS::PostUpdateImpl(uint32 diff) { case BG_WS_EVENT_UPDATE_GAME_TIME: UpdateWorldState(WORLD_STATE_BATTLEGROUND_WS_STATE_TIMER, GetMatchTime()); - _bgEvents.ScheduleEvent(BG_WS_EVENT_UPDATE_GAME_TIME, ((BG_WS_TOTAL_GAME_TIME - GetStartTime()) % (MINUTE * IN_MILLISECONDS)) + 1); + _bgEvents.ScheduleEvent(BG_WS_EVENT_UPDATE_GAME_TIME, Milliseconds(((BG_WS_TOTAL_GAME_TIME - GetStartTime()) % (MINUTE * IN_MILLISECONDS)) + 1)); break; case BG_WS_EVENT_NO_TIME_LEFT: if (GetTeamScore(TEAM_ALLIANCE) == GetTeamScore(TEAM_HORDE)) @@ -137,8 +137,8 @@ void BattlegroundWS::StartingEventOpenDoors() StartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, WS_EVENT_START_BATTLE); UpdateWorldState(WORLD_STATE_BATTLEGROUND_WS_STATE_TIMER_ACTIVE, 1); - _bgEvents.ScheduleEvent(BG_WS_EVENT_UPDATE_GAME_TIME, 0); - _bgEvents.ScheduleEvent(BG_WS_EVENT_NO_TIME_LEFT, BG_WS_TOTAL_GAME_TIME - 2 * MINUTE * IN_MILLISECONDS); // 27 - 2 = 25 minutes + _bgEvents.ScheduleEvent(BG_WS_EVENT_UPDATE_GAME_TIME, 0ms); + _bgEvents.ScheduleEvent(BG_WS_EVENT_NO_TIME_LEFT, Milliseconds(BG_WS_TOTAL_GAME_TIME - 2 * MINUTE * IN_MILLISECONDS)); // 27 - 2 = 25 minutes _bgEvents.ScheduleEvent(BG_WS_EVENT_DESPAWN_DOORS, BG_WS_DOOR_DESPAWN_TIME); } @@ -229,7 +229,7 @@ void BattlegroundWS::EventPlayerCapturedFlag(Player* player) EndBattleground(GetTeamScore(TEAM_HORDE) == _configurableMaxTeamScore ? TEAM_HORDE : TEAM_ALLIANCE); } else - _bgEvents.ScheduleEvent(BG_WS_EVENT_RESPAWN_BOTH_FLAGS, BG_WS_FLAG_RESPAWN_TIME); + _bgEvents.ScheduleEvent(BG_WS_EVENT_RESPAWN_BOTH_FLAGS, Milliseconds(BG_WS_FLAG_RESPAWN_TIME)); _bgEvents.CancelEvent(BG_WS_EVENT_BOTH_FLAGS_KEPT10); _bgEvents.CancelEvent(BG_WS_EVENT_BOTH_FLAGS_KEPT15); @@ -580,10 +580,10 @@ uint32 BattlegroundWS::GetAssaultSpellId() const { if ((!GetFlagPickerGUID(TEAM_ALLIANCE) && GetFlagState(TEAM_ALLIANCE) != BG_WS_FLAG_STATE_ON_GROUND) || (!GetFlagPickerGUID(TEAM_HORDE) && GetFlagState(TEAM_HORDE) != BG_WS_FLAG_STATE_ON_GROUND) || - _bgEvents.GetNextEventTime(BG_WS_EVENT_BOTH_FLAGS_KEPT10) > 0) + _bgEvents.HasTimeUntilEvent(BG_WS_EVENT_BOTH_FLAGS_KEPT10)) return 0; - return _bgEvents.GetNextEventTime(BG_WS_EVENT_BOTH_FLAGS_KEPT15) > 0 ? BG_WS_SPELL_FOCUSED_ASSAULT : BG_WS_SPELL_BRUTAL_ASSAULT; + return _bgEvents.HasTimeUntilEvent(BG_WS_EVENT_BOTH_FLAGS_KEPT15) ? BG_WS_SPELL_FOCUSED_ASSAULT : BG_WS_SPELL_BRUTAL_ASSAULT; } void BattlegroundWS::RemoveAssaultAuras() diff --git a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h index 7aa897500..25df45ab6 100644 --- a/src/server/game/Battlegrounds/Zones/BattlegroundWS.h +++ b/src/server/game/Battlegrounds/Zones/BattlegroundWS.h @@ -39,12 +39,12 @@ enum BG_WS_TimerOrScore BG_WS_MAX_TEAM_SCORE = 3, BG_WS_TOTAL_GAME_TIME = 27 * MINUTE * IN_MILLISECONDS, - BG_WS_FLAG_RESPAWN_TIME = 23 * IN_MILLISECONDS, - BG_WS_FLAG_DROP_TIME = 10 * IN_MILLISECONDS, - BG_WS_SPELL_FORCE_TIME = 10 * MINUTE * IN_MILLISECONDS, - BG_WS_SPELL_BRUTAL_TIME = 15 * MINUTE * IN_MILLISECONDS, - BG_WS_DOOR_DESPAWN_TIME = 5 * IN_MILLISECONDS + BG_WS_FLAG_RESPAWN_TIME = 23 * IN_MILLISECONDS }; +constexpr Milliseconds BG_WS_FLAG_DROP_TIME = 10s; +constexpr Milliseconds BG_WS_SPELL_FORCE_TIME = 600s; +constexpr Milliseconds BG_WS_SPELL_BRUTAL_TIME = 900s; +constexpr Milliseconds BG_WS_DOOR_DESPAWN_TIME = 5s; enum BG_WS_BroadcastTexts { diff --git a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp index bd7109934..0b534612b 100644 --- a/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp +++ b/src/server/scripts/EasternKingdoms/AlteracValley/alterac_valley.cpp @@ -213,7 +213,7 @@ public: ScriptedAI::EnterEvadeMode(); return; } - events.ScheduleEvent(EVENT_CHECK_RESET, 5000); + events.ScheduleEvent(EVENT_CHECK_RESET, 5s); break; } } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp index 214b92355..4691fb367 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp @@ -27,12 +27,13 @@ enum IronhandData { - IRONHAND_FLAMES_TIMER = 16000, - IRONHAND_FLAMES_TIMER_RAND = 3000, IRONHAND_N_GROUPS = 3, SPELL_GOUT_OF_FLAMES = 15529 }; +constexpr Milliseconds IRONHAND_FLAMES_TIMER = 16s; +constexpr Milliseconds IRONHAND_FLAMES_TIMER_RAND = 3s; + class go_shadowforge_brazier : public GameObjectScript { public: @@ -110,7 +111,7 @@ public: { case SPELL_GOUT_OF_FLAMES: DoCast(SPELL_GOUT_OF_FLAMES); - events.RescheduleEvent(SPELL_GOUT_OF_FLAMES, urand(IRONHAND_FLAMES_TIMER - IRONHAND_FLAMES_TIMER_RAND, IRONHAND_FLAMES_TIMER + IRONHAND_FLAMES_TIMER_RAND)); + events.RescheduleEvent(SPELL_GOUT_OF_FLAMES, IRONHAND_FLAMES_TIMER - IRONHAND_FLAMES_TIMER_RAND, IRONHAND_FLAMES_TIMER + IRONHAND_FLAMES_TIMER_RAND); break; default: break; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp index dadfb58c6..df52818e4 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_anubshiah.cpp @@ -28,14 +28,11 @@ enum Spells SPELL_ENVELOPING_WEB = 15471 }; -enum Timers -{ - TIMER_SHADOWBOLT = 7000, - TIMER_CURSE_TONGUES = 24000, - TIMER_CURSE_WEAKNESS = 12000, - TIMER_DEMON_ARMOR = 3000, // virtually only cast once - TIMER_ENVELOPING_WEB = 16000 -}; +constexpr Milliseconds TIMER_SHADOWBOLT = 7s; +constexpr Milliseconds TIMER_CURSE_TONGUES = 24s; +constexpr Milliseconds TIMER_CURSE_WEAKNESS = 12s; +constexpr Milliseconds TIMER_DEMON_ARMOR = 3s; //virtually only cast once +constexpr Milliseconds TIMER_ENVELOPING_WEB = 16s; class boss_anubshiah : public CreatureScript { @@ -54,11 +51,11 @@ public: void JustEngagedWith(Unit* /*who*/) override { _JustEngagedWith(); - events.ScheduleEvent(SPELL_SHADOWBOLT, 0.2 * (int)TIMER_SHADOWBOLT); - events.ScheduleEvent(SPELL_CURSE_TONGUES, 0.2 * (int)TIMER_CURSE_TONGUES); - events.ScheduleEvent(SPELL_CURSE_WEAKNESS, 0.2 * (int)TIMER_CURSE_WEAKNESS); - events.ScheduleEvent(SPELL_DEMON_ARMOR, 0.2 * (int)TIMER_DEMON_ARMOR); - events.ScheduleEvent(SPELL_ENVELOPING_WEB, 0.2 * (int)TIMER_ENVELOPING_WEB); + events.ScheduleEvent(SPELL_SHADOWBOLT, TIMER_SHADOWBOLT / 5); + events.ScheduleEvent(SPELL_CURSE_TONGUES, TIMER_CURSE_TONGUES / 5); + events.ScheduleEvent(SPELL_CURSE_WEAKNESS, TIMER_CURSE_WEAKNESS / 5); + events.ScheduleEvent(SPELL_DEMON_ARMOR, TIMER_DEMON_ARMOR / 5); + events.ScheduleEvent(SPELL_ENVELOPING_WEB, TIMER_ENVELOPING_WEB / 5); } void UpdateAI(uint32 diff) override @@ -80,21 +77,21 @@ public: { case SPELL_SHADOWBOLT: DoCastVictim(SPELL_SHADOWBOLT); - events.ScheduleEvent(SPELL_SHADOWBOLT, urand(TIMER_SHADOWBOLT - 2000, TIMER_SHADOWBOLT + 2000)); + events.ScheduleEvent(SPELL_SHADOWBOLT, TIMER_SHADOWBOLT - 2s, TIMER_SHADOWBOLT + 2s); break; case SPELL_CURSE_TONGUES: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, true)) { DoCast(target, SPELL_CURSE_TONGUES); } - events.ScheduleEvent(SPELL_CURSE_TONGUES, urand(TIMER_CURSE_TONGUES - 2000, TIMER_CURSE_TONGUES + 2000)); + events.ScheduleEvent(SPELL_CURSE_TONGUES, TIMER_CURSE_TONGUES - 2s, TIMER_CURSE_TONGUES + 2s); break; case SPELL_CURSE_WEAKNESS: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, true)) { DoCast(target, SPELL_CURSE_WEAKNESS); } - events.ScheduleEvent(SPELL_CURSE_WEAKNESS, urand(TIMER_CURSE_WEAKNESS - 2000, TIMER_CURSE_WEAKNESS + 2000)); + events.ScheduleEvent(SPELL_CURSE_WEAKNESS, TIMER_CURSE_WEAKNESS - 2s, TIMER_CURSE_WEAKNESS + 2s); break; case SPELL_DEMON_ARMOR: DoCast(me, SPELL_DEMON_ARMOR); @@ -103,7 +100,7 @@ public: case SPELL_ENVELOPING_WEB: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 100, true)) DoCast(target, SPELL_ENVELOPING_WEB); - events.ScheduleEvent(SPELL_ENVELOPING_WEB, urand(TIMER_ENVELOPING_WEB - 2000, TIMER_ENVELOPING_WEB + 2000)); + events.ScheduleEvent(SPELL_ENVELOPING_WEB, TIMER_ENVELOPING_WEB - 2s, TIMER_ENVELOPING_WEB + 2s); break; default: break; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_eviscerator.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_eviscerator.cpp index 5d12ea5ac..dfebbcf11 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_eviscerator.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_eviscerator.cpp @@ -26,12 +26,9 @@ enum Spells SPELL_SHIELD = 7121 }; -enum Timers -{ - TIMER_SHADOWBOLT_VOLLEY = 7000, - TIMER_REND = 20000, - TIMER_SHIELD = 12000 -}; +constexpr Milliseconds TIMER_SHADOWBOLT_VOLLEY = 7s; +constexpr Milliseconds TIMER_REND = 20s; +constexpr Milliseconds TIMER_SHIELD = 12s; class boss_eviscerator : public CreatureScript { @@ -52,9 +49,9 @@ public: void JustEngagedWith(Unit* /*who*/) override { _JustEngagedWith(); - events.ScheduleEvent(SPELL_SHADOWBOLT_VOLLEY, 0.2 * (int)TIMER_SHADOWBOLT_VOLLEY); - events.ScheduleEvent(SPELL_REND, 0.2 * (int) TIMER_REND); - events.ScheduleEvent(SPELL_SHIELD, 0.2 * (int) TIMER_SHIELD); + events.ScheduleEvent(SPELL_SHADOWBOLT_VOLLEY, TIMER_SHADOWBOLT_VOLLEY / 5); + events.ScheduleEvent(SPELL_REND, TIMER_REND / 5); + events.ScheduleEvent(SPELL_SHIELD, TIMER_SHIELD / 5); } void DamageTaken(Unit* /* doneBy */, uint32& /* damage */, DamageEffectType /* damagetype */, SpellSchoolMask damageSchoolMask) override @@ -86,11 +83,11 @@ public: { case SPELL_SHADOWBOLT_VOLLEY: DoCastVictim(SPELL_SHADOWBOLT_VOLLEY); - events.ScheduleEvent(SPELL_SHADOWBOLT_VOLLEY, urand(TIMER_SHADOWBOLT_VOLLEY - 2000, TIMER_SHADOWBOLT_VOLLEY + 2000)); + events.ScheduleEvent(SPELL_SHADOWBOLT_VOLLEY, TIMER_SHADOWBOLT_VOLLEY - 2s, TIMER_SHADOWBOLT_VOLLEY + 2s); break; case SPELL_REND: DoCastVictim(SPELL_REND); - events.ScheduleEvent(SPELL_REND, urand(TIMER_REND - 2000, TIMER_REND + 2000)); + events.ScheduleEvent(SPELL_REND, TIMER_REND - 2s, TIMER_REND + 2s); break; case SPELL_SHIELD: SpellShieldReady = true; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp index 662182983..494730113 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_gorosh_the_dervish.cpp @@ -26,12 +26,9 @@ enum Spells SPELL_BLOODLUST = 21049 }; -enum Timers -{ - TIMER_WHIRLWIND = 12000, - TIMER_MORTAL = 22000, - TIMER_BLOODLUST = 30000 -}; +constexpr Milliseconds TIMER_WHIRLWIND = 12s; +constexpr Milliseconds TIMER_MORTAL = 22s; +constexpr Milliseconds TIMER_BLOODLUST = 30s; class boss_gorosh_the_dervish : public CreatureScript { @@ -47,14 +44,14 @@ public: { boss_gorosh_the_dervishAI(Creature* creature) : BossAI(creature, DATA_GOROSH) { } - uint32 nextWhirlwindTime; + Milliseconds nextWhirlwindTime; void JustEngagedWith(Unit* /*who*/) override { _JustEngagedWith(); - events.ScheduleEvent(SPELL_WHIRLWIND, 0.2 * (int) TIMER_WHIRLWIND); - events.ScheduleEvent(SPELL_MORTALSTRIKE, 0.2 * (int) TIMER_MORTAL); - events.ScheduleEvent(SPELL_BLOODLUST, 0.2 * (int) TIMER_BLOODLUST); + events.ScheduleEvent(SPELL_WHIRLWIND, TIMER_WHIRLWIND / 5); + events.ScheduleEvent(SPELL_MORTALSTRIKE, TIMER_MORTAL / 5); + events.ScheduleEvent(SPELL_BLOODLUST, TIMER_BLOODLUST / 5); } void UpdateAI(uint32 diff) override @@ -78,22 +75,22 @@ public: if (me->GetDistance2d(me->GetVictim()) < 10.0f) { DoCastVictim(SPELL_WHIRLWIND); - nextWhirlwindTime = urand(TIMER_WHIRLWIND - 2000, TIMER_WHIRLWIND + 2000); + nextWhirlwindTime = randtime(TIMER_WHIRLWIND - 2s, TIMER_WHIRLWIND + 2s); } else { // reschedule sooner - nextWhirlwindTime = 0.3 * urand(TIMER_WHIRLWIND - 2000, TIMER_WHIRLWIND + 2000); + nextWhirlwindTime = randtime(TIMER_WHIRLWIND - 2s, TIMER_WHIRLWIND + 2s) / 3; } events.ScheduleEvent(SPELL_WHIRLWIND, nextWhirlwindTime); break; case SPELL_MORTALSTRIKE: DoCastVictim(SPELL_MORTALSTRIKE); - events.ScheduleEvent(SPELL_MORTALSTRIKE, urand(TIMER_MORTAL - 2000, TIMER_MORTAL + 2000)); + events.ScheduleEvent(SPELL_MORTALSTRIKE, TIMER_MORTAL - 2s, TIMER_MORTAL + 2s); break; case SPELL_BLOODLUST: DoCastSelf(SPELL_BLOODLUST); - events.ScheduleEvent(SPELL_BLOODLUST, urand(TIMER_BLOODLUST - 2000, TIMER_BLOODLUST + 2000)); + events.ScheduleEvent(SPELL_BLOODLUST, TIMER_BLOODLUST - 2s, TIMER_BLOODLUST + 2s); break; default: break; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp index cbe77cd85..c9176385d 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_grizzle.cpp @@ -26,11 +26,8 @@ enum Grizzle EMOTE_FRENZY_KILL = 0 }; -enum Timer -{ - TIMER_GROUNDTREMOR = 10000, - TIMER_FRENZY = 15000 -}; +constexpr Milliseconds TIMER_GROUNDTREMOR = 10s; +constexpr Milliseconds TIMER_FRENZY = 15s; class boss_grizzle : public CreatureScript { @@ -46,13 +43,13 @@ public: { boss_grizzleAI(Creature* creature) : BossAI(creature, DATA_GRIZZLE) {} - uint32 nextTremorTime; + Milliseconds nextTremorTime; void JustEngagedWith(Unit* /*who*/) override { _JustEngagedWith(); - events.ScheduleEvent(SPELL_GROUNDTREMOR, 0.2 * (int) TIMER_GROUNDTREMOR); - events.ScheduleEvent(SPELL_FRENZY, 0.2 * (int) TIMER_FRENZY); + events.ScheduleEvent(SPELL_GROUNDTREMOR, TIMER_GROUNDTREMOR / 5); + events.ScheduleEvent(SPELL_FRENZY, TIMER_FRENZY / 5); } void UpdateAI(uint32 diff) override @@ -77,17 +74,17 @@ public: if (me->GetDistance2d(me->GetVictim()) < 10.0f) { DoCastVictim(SPELL_GROUNDTREMOR); - nextTremorTime = urand(TIMER_GROUNDTREMOR - 2000, TIMER_GROUNDTREMOR + 2000); + nextTremorTime = randtime(TIMER_GROUNDTREMOR - 2s, TIMER_GROUNDTREMOR + 2s); } else { - nextTremorTime = 0.3*urand(TIMER_GROUNDTREMOR - 2000, TIMER_GROUNDTREMOR + 2000); + nextTremorTime = randtime(TIMER_GROUNDTREMOR - 2s, TIMER_GROUNDTREMOR + 2s) / 3; } events.ScheduleEvent(SPELL_GROUNDTREMOR, nextTremorTime); break; case SPELL_FRENZY: DoCastSelf(SPELL_FRENZY); - events.ScheduleEvent(SPELL_FRENZY, urand(TIMER_FRENZY - 2000, TIMER_FRENZY + 2000)); + events.ScheduleEvent(SPELL_FRENZY, TIMER_FRENZY - 2s, TIMER_FRENZY + 2s); Talk(EMOTE_FRENZY_KILL); break; default: diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_hedrum.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_hedrum.cpp index 6861d1b89..8b2dfaaba 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_hedrum.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_hedrum.cpp @@ -26,12 +26,9 @@ enum Spells SPELL_WEB_EXPLOSION = 15474 }; -enum Timers -{ - TIMER_PARALYZING = 20000, - TIMER_BANEFUL = 24000, - TIMER_WEB_EXPLOSION = 20000 -}; +constexpr Milliseconds TIMER_PARALYZING = 20s; +constexpr Milliseconds TIMER_BANEFUL = 24s; +constexpr Milliseconds TIMER_WEB_EXPLOSION = 20s; class boss_hedrum : public CreatureScript { @@ -50,9 +47,9 @@ public: void JustEngagedWith(Unit* /*who*/) override { _JustEngagedWith(); - events.ScheduleEvent(SPELL_PARALYZING, 0.2 * (int) TIMER_PARALYZING); - events.ScheduleEvent(SPELL_BANEFUL, 0.2 * (int) TIMER_BANEFUL); - events.ScheduleEvent(SPELL_WEB_EXPLOSION, 0.2 * (int) TIMER_WEB_EXPLOSION); + events.ScheduleEvent(SPELL_PARALYZING, TIMER_PARALYZING / 5); + events.ScheduleEvent(SPELL_BANEFUL, TIMER_BANEFUL / 5); + events.ScheduleEvent(SPELL_WEB_EXPLOSION, TIMER_WEB_EXPLOSION / 5); } void UpdateAI(uint32 diff) override @@ -74,18 +71,18 @@ public: { case SPELL_PARALYZING: DoCastVictim(SPELL_PARALYZING); - events.ScheduleEvent(SPELL_PARALYZING, urand(TIMER_PARALYZING - 2000, TIMER_PARALYZING + 2000)); + events.ScheduleEvent(SPELL_PARALYZING, TIMER_PARALYZING - 2s, TIMER_PARALYZING + 2s); break; case SPELL_BANEFUL: DoCastVictim(SPELL_BANEFUL); - events.ScheduleEvent(SPELL_BANEFUL, urand(TIMER_BANEFUL - 2000, TIMER_BANEFUL + 2000)); + events.ScheduleEvent(SPELL_BANEFUL, TIMER_BANEFUL - 2s, TIMER_BANEFUL + 2s); break; case SPELL_WEB_EXPLOSION: if (me->GetDistance2d(me->GetVictim()) < 100.0f) { DoCast(SPELL_WEB_EXPLOSION); } - events.ScheduleEvent(SPELL_WEB_EXPLOSION, urand(TIMER_WEB_EXPLOSION - 2000, TIMER_WEB_EXPLOSION + 2000)); + events.ScheduleEvent(SPELL_WEB_EXPLOSION, TIMER_WEB_EXPLOSION - 2s, TIMER_WEB_EXPLOSION + 2s); break; default: break; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp index 5d2710493..a408472a0 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_moira_bronzebeard.cpp @@ -28,14 +28,11 @@ enum Spells SPELL_WORDPAIN = 15654, }; -enum SpellTimers -{ - TIMER_HEAL = 12000, - TIMER_MINDBLAST = 16000, - TIMER_RENEW = 12000, - TIMER_SHADOWBOLT = 16000, - TIMER_WORDPAIN = 12000, -}; +constexpr Milliseconds TIMER_HEAL = 12s; +constexpr Milliseconds TIMER_MINDBLAST = 16s; +constexpr Milliseconds TIMER_RENEW = 12s; +constexpr Milliseconds TIMER_SHADOWBOLT = 16s; +constexpr Milliseconds TIMER_WORDPAIN = 12s; struct boss_moira_bronzebeardAI : public BossAI { @@ -44,9 +41,9 @@ struct boss_moira_bronzebeardAI : public BossAI void JustEngagedWith(Unit* /*who*/) override { _JustEngagedWith(); - events.ScheduleEvent(SPELL_MINDBLAST, 0.5 * (int) TIMER_MINDBLAST); - events.ScheduleEvent(SPELL_HEAL, 0.5 * (int) TIMER_HEAL); - events.ScheduleEvent(SPELL_RENEW, 0.5 * (int) TIMER_RENEW); + events.ScheduleEvent(SPELL_MINDBLAST, TIMER_MINDBLAST / 2); + events.ScheduleEvent(SPELL_HEAL, TIMER_HEAL / 2); + events.ScheduleEvent(SPELL_RENEW, TIMER_RENEW / 2); } void UpdateAI(uint32 diff) override @@ -67,7 +64,7 @@ struct boss_moira_bronzebeardAI : public BossAI { case SPELL_MINDBLAST: DoCastVictim(SPELL_MINDBLAST); - events.ScheduleEvent(SPELL_MINDBLAST, urand(TIMER_MINDBLAST - 2000, TIMER_MINDBLAST + 2000)); + events.ScheduleEvent(SPELL_MINDBLAST, TIMER_MINDBLAST - 2s, TIMER_MINDBLAST + 2s); break; case SPELL_HEAL: CastOnEmperorIfPossible(SPELL_HEAL, TIMER_HEAL); @@ -82,7 +79,7 @@ struct boss_moira_bronzebeardAI : public BossAI DoMeleeAttackIfReady(); } - void CastOnEmperorIfPossible(uint32 spell, uint32 timer) + void CastOnEmperorIfPossible(uint32 spell, Milliseconds timer) { Creature* emperor = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_EMPEROR)); if (emperor && emperor->HealthBelowPct(90)) @@ -93,7 +90,7 @@ struct boss_moira_bronzebeardAI : public BossAI { DoCastSelf(spell); } - events.ScheduleEvent(spell, urand(timer - 2000, timer + 2000)); + events.ScheduleEvent(spell, timer - 2s, timer + 2s); } }; @@ -107,10 +104,10 @@ struct boss_high_priestess_thaurissanAI : public boss_moira_bronzebeardAI { _JustEngagedWith(); Talk(0); - events.ScheduleEvent(SPELL_WORDPAIN, 0.5 * (int)TIMER_WORDPAIN); - events.ScheduleEvent(SPELL_HEAL, 0.5 * (int) TIMER_HEAL); - events.ScheduleEvent(SPELL_RENEW, 0.5 * (int) TIMER_RENEW); - events.ScheduleEvent(SPELL_SHADOWBOLT, 0.5 * (int) TIMER_SHADOWBOLT); + events.ScheduleEvent(SPELL_WORDPAIN, TIMER_WORDPAIN / 2); + events.ScheduleEvent(SPELL_HEAL, TIMER_HEAL / 2); + events.ScheduleEvent(SPELL_RENEW, TIMER_RENEW / 2); + events.ScheduleEvent(SPELL_SHADOWBOLT, TIMER_SHADOWBOLT / 2); } void UpdateAI(uint32 diff) override @@ -131,7 +128,7 @@ struct boss_high_priestess_thaurissanAI : public boss_moira_bronzebeardAI { case SPELL_WORDPAIN: DoCastVictim(SPELL_WORDPAIN); - events.ScheduleEvent(SPELL_WORDPAIN, urand(TIMER_WORDPAIN - 2000, TIMER_WORDPAIN + 2000)); + events.ScheduleEvent(SPELL_WORDPAIN, TIMER_WORDPAIN - 2s, TIMER_WORDPAIN + 2s); break; case SPELL_HEAL: CastOnEmperorIfPossible(SPELL_HEAL, TIMER_HEAL); @@ -141,7 +138,7 @@ struct boss_high_priestess_thaurissanAI : public boss_moira_bronzebeardAI break; case SPELL_SHADOWBOLT: DoCastVictim(SPELL_SHADOWBOLT); - events.ScheduleEvent(SPELL_SHADOWBOLT, urand(TIMER_SHADOWBOLT - 2000, TIMER_SHADOWBOLT + 2000)); + events.ScheduleEvent(SPELL_SHADOWBOLT, TIMER_SHADOWBOLT - 2s, TIMER_SHADOWBOLT + 2s); break; default: break; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_okthor.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_okthor.cpp index c5168332a..1da1d30b0 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_okthor.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/boss_okthor.cpp @@ -27,13 +27,10 @@ enum Spells SPELL_SLOW = 19137 }; -enum Timers -{ - TIMER_ARCANE_BOLT = 7000, - TIMER_ARCANE_EXPLOSION = 24000, - TIMER_POLYMORPH = 12000, - TIMER_SLOW = 15000 -}; +constexpr Milliseconds TIMER_ARCANE_BOLT = 7s; +constexpr Milliseconds TIMER_ARCANE_EXPLOSION = 24s; +constexpr Milliseconds TIMER_POLYMORPH = 12s; +constexpr Milliseconds TIMER_SLOW = 15s; class boss_okthor : public CreatureScript { @@ -49,15 +46,15 @@ public: { boss_okthorAI(Creature* creature) : BossAI(creature, DATA_OKTHOR) {} - uint32 nextArcaneExplosionTime; + Milliseconds nextArcaneExplosionTime; void JustEngagedWith(Unit* /*who*/) override { _JustEngagedWith(); - events.ScheduleEvent(SPELL_ARCANE_BOLT, 0.2 * (int) TIMER_ARCANE_BOLT); - events.ScheduleEvent(SPELL_ARCANE_EXPLOSION, 0.2 * (int) TIMER_ARCANE_EXPLOSION); - events.ScheduleEvent(SPELL_POLYMORPH, 0.2 * (int) TIMER_POLYMORPH); - events.ScheduleEvent(SPELL_SLOW, 500); + events.ScheduleEvent(SPELL_ARCANE_BOLT, TIMER_ARCANE_BOLT / 5); + events.ScheduleEvent(SPELL_ARCANE_EXPLOSION, TIMER_ARCANE_EXPLOSION / 5); + events.ScheduleEvent(SPELL_POLYMORPH, TIMER_POLYMORPH / 5); + events.ScheduleEvent(SPELL_SLOW, 500ms); } void UpdateAI(uint32 diff) override @@ -82,17 +79,17 @@ public: { DoCast(target, SPELL_ARCANE_BOLT); } - events.ScheduleEvent(SPELL_ARCANE_BOLT, urand(TIMER_ARCANE_BOLT - 2000, TIMER_ARCANE_BOLT + 2000)); + events.ScheduleEvent(SPELL_ARCANE_BOLT, TIMER_ARCANE_BOLT - 2s, TIMER_ARCANE_BOLT + 2s); break; case SPELL_ARCANE_EXPLOSION: if (me->GetDistance2d(me->GetVictim()) < 50.0f) { DoCast(SPELL_ARCANE_EXPLOSION); - nextArcaneExplosionTime = urand(TIMER_ARCANE_EXPLOSION - 2000, TIMER_ARCANE_EXPLOSION + 2000); + nextArcaneExplosionTime = randtime(TIMER_ARCANE_EXPLOSION - 2s, TIMER_ARCANE_EXPLOSION + 2s); } else { - nextArcaneExplosionTime = 0.3*urand(TIMER_ARCANE_EXPLOSION - 2000, TIMER_ARCANE_EXPLOSION + 2000); + nextArcaneExplosionTime = randtime(TIMER_ARCANE_EXPLOSION - 2s, TIMER_ARCANE_EXPLOSION + 2s) / 3; } events.ScheduleEvent(SPELL_ARCANE_EXPLOSION, nextArcaneExplosionTime); break; @@ -101,7 +98,7 @@ public: { DoCast(target, SPELL_POLYMORPH); } - events.ScheduleEvent(SPELL_POLYMORPH, urand(TIMER_POLYMORPH - 2000, TIMER_POLYMORPH + 2000)); + events.ScheduleEvent(SPELL_POLYMORPH, TIMER_POLYMORPH - 2s, TIMER_POLYMORPH + 2s); break; case SPELL_SLOW: if (me->GetDistance2d(me->GetVictim()) < 50.0f) diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp index 2beaacff3..fc49d131f 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_gyth.cpp @@ -96,7 +96,7 @@ public: void IsSummonedBy(WorldObject* /*summoner*/) override { - events.ScheduleEvent(EVENT_SUMMONED_1, 1000); + events.ScheduleEvent(EVENT_SUMMONED_1, 1s); } void JustSummoned(Creature* summon) override diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp index 66ecf747e..d88c390b1 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_lord_valthalak.cpp @@ -71,7 +71,7 @@ public: void IsSummonedBy(WorldObject* /*summoner*/) override { - StartTalking(TALK_SUMMON, 8 * IN_MILLISECONDS); + StartTalking(TALK_SUMMON, 8s); } void JustEngagedWith(Unit* who) override @@ -92,7 +92,7 @@ public: instance->SetData(DATA_LORD_VALTHALAK, DONE); } - void StartTalking(uint32 talkGroupId, uint32 timer) + void StartTalking(uint32 talkGroupId, Milliseconds timer) { me->SetReactState(REACT_PASSIVE); me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_SELECTABLE); @@ -123,7 +123,7 @@ public: events.CancelEvent(EVENT_SUMMON_SPECTRAL_ASSASSIN); - StartTalking(TALK_40_HP, 5 * IN_MILLISECONDS); + StartTalking(TALK_40_HP, 5s); } if (!frenzy15 && me->HealthBelowPctDamaged(15, damage)) @@ -132,7 +132,7 @@ public: events.ScheduleEvent(EVENT_SHADOW_BOLT_VOLLEY, 12s, 19s, 0, EVENT_PHASE_FIGHT); - StartTalking(TALK_15_HP, 5 * IN_MILLISECONDS); + StartTalking(TALK_15_HP, 5s); } } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp index 45e6502eb..16c7f0db4 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp @@ -108,11 +108,11 @@ struct boss_quartermaster_zigris : public BossAI if (me->IsWithinMeleeRange(me->GetVictim())) { DoCastVictim(SPELL_HOOKEDNET); - events.RepeatEvent(16000); + events.Repeat(16s); } else { - events.RepeatEvent(3000); + events.Repeat(3s); } break; case EVENT_SHOOT: @@ -128,7 +128,7 @@ struct boss_quartermaster_zigris : public BossAI me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MoveChase(me->GetVictim()); } - events.RepeatEvent(2000); + events.Repeat(2s); break; } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp index 638368194..82e19a694 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_rend_blackhand.cpp @@ -222,7 +222,7 @@ public: if (GameObject* portcullis = me->FindNearestGameObject(GO_DR_PORTCULLIS, 50.0f)) waveDoorGUID = portcullis->GetGUID(); - events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0); + events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0ms); events.ScheduleEvent(EVENT_START_1, 1s); } } @@ -264,7 +264,7 @@ public: events.ScheduleEvent(EVENT_START_2, 4s); break; case EVENT_START_2: - events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0); + events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0ms); if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID)) victor->HandleEmoteCommand(EMOTE_ONESHOT_POINT); events.ScheduleEvent(EVENT_START_3, 4s); @@ -314,14 +314,14 @@ public: events.ScheduleEvent(EVENT_SPAWN_WAVE, 3s); break; case EVENT_WAVES_TEXT_2: - events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0); + events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0ms); if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID)) victor->AI()->Talk(SAY_NEFARIUS_3); events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4s); events.ScheduleEvent(EVENT_SPAWN_WAVE, 3s); break; case EVENT_WAVES_TEXT_3: - events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0); + events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0ms); if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID)) victor->AI()->Talk(SAY_NEFARIUS_4); events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4s); @@ -334,14 +334,14 @@ public: events.ScheduleEvent(EVENT_SPAWN_WAVE, 3s); break; case EVENT_WAVES_TEXT_5: - events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0); + events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0ms); if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID)) victor->AI()->Talk(SAY_NEFARIUS_5); events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4s); events.ScheduleEvent(EVENT_SPAWN_WAVE, 3s); break; case EVENT_WAVES_COMPLETE_TEXT_1: - events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0); + events.ScheduleEvent(EVENT_TURN_TO_PLAYER, 0ms); if (Creature* victor = ObjectAccessor::GetCreature(*me, victorGUID)) victor->AI()->Talk(SAY_NEFARIUS_6); events.ScheduleEvent(EVENT_TURN_TO_FACING_1, 4s); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp index 84d3c07ac..80b4a6776 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_the_beast.cpp @@ -227,7 +227,7 @@ public: case EVENT_FIREBALL: DoCastVictim(SPELL_FIREBALL); events.ScheduleEvent(EVENT_FIREBALL, 8s, 21s); - if (events.GetNextEventTime(EVENT_FIREBLAST) < 3 * IN_MILLISECONDS) + if (events.GetTimeUntilEvent(EVENT_FIREBLAST) < 3s) { events.RescheduleEvent(EVENT_FIREBLAST, 3s); } @@ -235,7 +235,7 @@ public: case EVENT_FIREBLAST: DoCastVictim(SPELL_FIREBLAST); events.ScheduleEvent(EVENT_FIREBLAST, 5s, 8s); - if (events.GetNextEventTime(EVENT_FIREBALL) < 3 * IN_MILLISECONDS) + if (events.GetTimeUntilEvent(EVENT_FIREBALL) < 3s) { events.RescheduleEvent(EVENT_FIREBALL, 3s); } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp index 55ac1f26e..33f37d083 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_warmaster_voone.cpp @@ -98,31 +98,31 @@ public: { case EVENT_SNAP_KICK: DoCastVictim(SPELL_SNAPKICK); - events.RepeatEvent(6 * IN_MILLISECONDS); + events.Repeat(6s); break; case EVENT_CLEAVE: DoCastVictim(SPELL_CLEAVE); - events.RepeatEvent(12 * IN_MILLISECONDS); + events.Repeat(12s); break; case EVENT_UPPERCUT: DoCastVictim(SPELL_UPPERCUT); - events.RepeatEvent(14 * IN_MILLISECONDS); + events.Repeat(14s); break; case EVENT_MORTAL_STRIKE: DoCastVictim(SPELL_MORTALSTRIKE); - events.RepeatEvent(10 * IN_MILLISECONDS); + events.Repeat(10s); break; case EVENT_PUMMEL: DoCastVictim(SPELL_PUMMEL); - events.RepeatEvent(16 * IN_MILLISECONDS); + events.Repeat(16s); break; case EVENT_THROW_AXE: DoCastRandomTarget(SPELL_THROWAXE); - events.RepeatEvent(8 * IN_MILLISECONDS); + events.Repeat(8s); break; case EVENT_THRASH: DoCastSelf(SPELL_THRASH); - events.RepeatEvent(10 * IN_MILLISECONDS); + events.Repeat(10s); break; } } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp index d9508f0b5..54809c6e5 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp @@ -39,10 +39,7 @@ enum EventIds EVENT_SOLAKAR_WAVE = 3 }; -enum Timers -{ - TIMER_SOLAKAR_WAVE = 30000 -}; +constexpr Milliseconds TIMER_SOLAKAR_WAVE = 30s; enum SolakarWaves { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp index de8d3ef6c..15f0f63f1 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/instance_blackwing_lair.cpp @@ -345,7 +345,7 @@ public: { case NPC_BLACKWING_DRAGON: --addsCount[0]; - if (EggEvent != DONE && _events.GetTimeUntilEvent(EVENT_RAZOR_SPAWN) == Milliseconds::max()) + if (EggEvent != DONE && !_events.HasTimeUntilEvent(EVENT_RAZOR_SPAWN)) { _events.ScheduleEvent(EVENT_RAZOR_SPAWN, 1s); } @@ -353,7 +353,7 @@ public: case NPC_BLACKWING_LEGIONAIRE: case NPC_BLACKWING_MAGE: --addsCount[1]; - if (EggEvent != DONE && _events.GetTimeUntilEvent(EVENT_RAZOR_SPAWN) == Milliseconds::max()) + if (EggEvent != DONE && !_events.HasTimeUntilEvent(EVENT_RAZOR_SPAWN)) { _events.ScheduleEvent(EVENT_RAZOR_SPAWN, 1s); } @@ -413,7 +413,7 @@ public: if (spawnMoreAdds) { - _events.ScheduleEvent(EVENT_RAZOR_SPAWN, 15000); + _events.ScheduleEvent(EVENT_RAZOR_SPAWN, 15s); } } break; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp index 9f6823b3b..0bf59bb34 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_baron_geddon.cpp @@ -91,7 +91,7 @@ public: case EVENT_INFERNO: { DoCastAOE(SPELL_INFERNO); - events.RepeatEvent(urand(21000, 26000)); + events.Repeat(21s, 26s); break; } case EVENT_IGNITE_MANA: @@ -101,7 +101,7 @@ public: DoCast(target, SPELL_IGNITE_MANA); } - events.RepeatEvent(urand(27000, 32000)); + events.Repeat(27s, 32s); break; } case EVENT_LIVING_BOMB: @@ -111,7 +111,7 @@ public: DoCast(target, SPELL_LIVING_BOMB); } - events.RepeatEvent(urand(11000, 16000)); + events.Repeat(11s, 16s); break; } } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp index 3682a67fd..9b6ec713a 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_garr.cpp @@ -111,13 +111,13 @@ public: case EVENT_ANTIMAGIC_PULSE: { DoCastSelf(SPELL_ANTIMAGIC_PULSE); - events.RepeatEvent(20000); + events.Repeat(20s); break; } case EVENT_MAGMA_SHACKLES: { DoCastSelf(SPELL_MAGMA_SHACKLES); - events.RepeatEvent(15000); + events.Repeat(15s); break; } } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp index a358bec9d..80a2bc1e8 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_gehennas.cpp @@ -58,7 +58,7 @@ public: case EVENT_GEHENNAS_CURSE: { DoCastVictim(SPELL_GEHENNAS_CURSE); - events.RepeatEvent(urand(25000, 30000)); + events.Repeat(25s, 30s); break; } case EVENT_RAIN_OF_FIRE: @@ -67,7 +67,7 @@ public: { DoCast(target, SPELL_RAIN_OF_FIRE, true); } - events.RepeatEvent(6000); + events.Repeat(6s); break; } case EVENT_SHADOW_BOLT: @@ -88,7 +88,7 @@ public: DoCastVictim(SPELL_SHADOW_BOLT_VICTIM); } - events.RepeatEvent(5000); + events.Repeat(5s); break; } } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp index 384b81897..1ddbabeef 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_lucifron.cpp @@ -57,19 +57,19 @@ public: case EVENT_IMPENDING_DOOM: { DoCastVictim(SPELL_IMPENDING_DOOM); - events.RepeatEvent(20000); + events.Repeat(20s); break; } case EVENT_LUCIFRON_CURSE: { DoCastVictim(SPELL_LUCIFRON_CURSE); - events.RepeatEvent(20000); + events.Repeat(20s); break; } case EVENT_SHADOW_SHOCK: { DoCastVictim(SPELL_SHADOW_SHOCK); - events.RepeatEvent(5000); + events.Repeat(5s); break; } } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp index 978cf2f80..460abdbd1 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_magmadar.cpp @@ -73,13 +73,13 @@ public: { Talk(EMOTE_FRENZY); DoCastSelf(SPELL_FRENZY); - events.RepeatEvent(urand(15000, 20000)); + events.Repeat(15s, 20s); break; } case EVENT_PANIC: { DoCastVictim(SPELL_PANIC); - events.RepeatEvent(urand(31000, 38000)); + events.Repeat(31s, 38s); break; } case EVENT_LAVA_BOMB: @@ -89,7 +89,7 @@ public: DoCast(target, SPELL_LAVA_BOMB); } - events.RepeatEvent(urand(12000, 15000)); + events.Repeat(12s, 15s); break; } case EVENT_LAVA_BOMB_RANGED: @@ -104,7 +104,7 @@ public: { DoCast(targets.front() , SPELL_LAVA_BOMB_RANGED); } - events.RepeatEvent(urand(12000, 15000)); + events.Repeat(12s, 15s); break; } } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp index ce586774f..0a51970c4 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp @@ -348,7 +348,7 @@ public: { DoCastSelf(SPELL_DAMAGE_REFLECTION); } - events.RepeatEvent(30000); + events.Repeat(30s); break; } case EVENT_TELEPORT_RANDOM: @@ -359,14 +359,14 @@ public: DoCast(target, SPELL_TELEPORT_RANDOM); } - events.RepeatEvent(30000); + events.Repeat(30s); break; } case EVENT_TELEPORT_TARGET: { DoCastSelf(SPELL_HATE_TO_ZERO, true); DoCastAOE(SPELL_TELEPORT_TARGET); - events.RepeatEvent(30000); + events.Repeat(30s); break; } } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp index 84dfa5378..1280914f4 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp @@ -189,7 +189,7 @@ public: { if (_lavaBurstGUIDS.empty()) { - extraEvents.ScheduleEvent(EVENT_LAVA_BURST_TRIGGER, 1); + extraEvents.ScheduleEvent(EVENT_LAVA_BURST_TRIGGER, 1ms); } _lavaBurstGUIDS.insert(guid); @@ -309,7 +309,7 @@ public: } _lavaBurstGUIDS.erase(lavaBurstGUID); - extraEvents.RepeatEvent(1000); + extraEvents.Repeat(1s); } else { @@ -350,7 +350,7 @@ public: { Talk(SAY_WRATH); } - events.RepeatEvent(25000); + events.Repeat(25s); break; } case EVENT_HAND_OF_RAGNAROS: @@ -362,7 +362,7 @@ public: _isKnockbackEmoteAllowed = false; extraEvents.RescheduleEvent(EVENT_RESET_KNOCKBACK_EMOTE, 5s); } - events.RepeatEvent(20000); + events.Repeat(20s); break; } case EVENT_LAVA_BURST: @@ -401,7 +401,7 @@ public: extraEvents.RescheduleEvent(EVENT_RESET_KNOCKBACK_EMOTE, 5s); } } - events.RepeatEvent(urand(11000, 30000)); + events.Repeat(11s, 30s); break; } case EVENT_SUBMERGE: diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp index fc135b281..08203f443 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_shazzrah.cpp @@ -67,7 +67,7 @@ public: case EVENT_ARCANE_EXPLOSION: { DoCastVictim(SPELL_ARCANE_EXPLOSION); - events.RepeatEvent(urand(4000, 5000)); + events.Repeat(4s, 5s); break; } case EVENT_SHAZZRAH_CURSE: @@ -76,26 +76,26 @@ public: { DoCast(target, SPELL_SHAZZRAH_CURSE); } - events.RepeatEvent(urand(23000, 26000)); + events.Repeat(23s, 26s); break; } case EVENT_MAGIC_GROUNDING: { DoCastSelf(SPELL_MAGIC_GROUNDING); - events.RepeatEvent(urand(7000, 9000)); + events.Repeat(7s, 9s); break; } case EVENT_COUNTERSPELL: { DoCastAOE(SPELL_COUNTERSPELL); - events.RepeatEvent(urand(15000, 18000)); + events.Repeat(15s, 18s); break; } case EVENT_SHAZZRAH_GATE: { DoCastAOE(SPELL_SHAZZRAH_GATE_DUMMY); events.RescheduleEvent(EVENT_ARCANE_EXPLOSION, 3s, 6s); - events.RepeatEvent(45000); + events.Repeat(45s); break; } } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp index 942a22f61..739a82d66 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_sulfuron_harbinger.cpp @@ -72,7 +72,7 @@ public: case EVENT_DEMORALIZING_SHOUT: { DoCastVictim(SPELL_DEMORALIZING_SHOUT); - events.RepeatEvent(urand(12000, 18000)); + events.Repeat(12s, 18s); break; } case EVENT_INSPIRE: @@ -84,19 +84,19 @@ public: } DoCastSelf(SPELL_INSPIRE); - events.RepeatEvent(urand(13000, 20000)); + events.Repeat(13s, 20s); break; } case EVENT_KNOCKDOWN: { DoCastVictim(SPELL_KNOCKDOWN); - events.RepeatEvent(urand(10000, 20000)); + events.Repeat(10s, 20s); break; } case EVENT_FLAMESPEAR: { DoCastRandomTarget(SPELL_FLAMESPEAR); - events.RepeatEvent(urand(12000, 16000)); + events.Repeat(12s, 16s); break; } } @@ -133,7 +133,7 @@ public: events.ScheduleEvent(EVENT_DARK_STRIKE, 4s, 7s); events.ScheduleEvent(EVENT_DARK_MENDING, 15s, 30s); events.ScheduleEvent(EVENT_SHADOW_WORD_PAIN, 2s, 4s); - events.ScheduleEvent(EVENT_IMMOLATE, 3500ms, 6000ms); + events.ScheduleEvent(EVENT_IMMOLATE, 3500ms, 6s); } void UpdateAI(uint32 diff) override @@ -157,7 +157,7 @@ public: case EVENT_DARK_STRIKE: { DoCastVictim(SPELL_DARK_STRIKE); - events.RepeatEvent(urand(4000, 7000)); + events.Repeat(4s, 7s); break; } case EVENT_DARK_MENDING: @@ -169,7 +169,7 @@ public: DoCast(target, SPELL_DARK_MENDING); } } - events.RepeatEvent(urand(15000, 20000)); + events.Repeat(15s, 20s); break; } case EVENT_SHADOW_WORD_PAIN: @@ -178,7 +178,7 @@ public: { DoCast(target, SPELL_SHADOW_WORD_PAIN); } - events.RepeatEvent(urand(2500, 5000)); + events.Repeat(2500ms, 5s); break; } case EVENT_IMMOLATE: @@ -187,7 +187,7 @@ public: { DoCast(target, SPELL_IMMOLATE); } - events.RepeatEvent(urand(5000, 7000)); + events.Repeat(5s, 7s); break; } } diff --git a/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp b/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp index 44c7b6839..d52d5bb34 100644 --- a/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp +++ b/src/server/scripts/EasternKingdoms/Deadmines/boss_mr_smite.cpp @@ -90,7 +90,7 @@ public: if (me->HealthBelowPct(67) && !health67) { me->CastSpell(me, SPELL_SMITE_STOMP, false); - events.DelayEvents(10000); + events.DelayEvents(10s); me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MovePoint(EQUIP_TWO_SWORDS, 1.859f, -780.72f, 9.831f); Talk(SAY_SWAP1); @@ -105,7 +105,7 @@ public: if (me->HealthBelowPct(34) && !health34) { me->CastSpell(me, SPELL_SMITE_STOMP, false); - events.DelayEvents(10000); + events.DelayEvents(10s); me->GetMotionMaster()->Clear(); me->GetMotionMaster()->MovePoint(EQUIP_MACE, 1.859f, -780.72f, 9.831f); Talk(SAY_SWAP2); diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp index 8feeadedc..91c2e40b0 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_felblood_kaelthas.cpp @@ -138,7 +138,7 @@ struct boss_felblood_kaelthas : public BossAI ScheduleTimedEvent(0ms, [&]{ DoCastVictim(SPELL_FIREBALL); - }, 3000ms, 4500ms); + }, 3s, 4500ms); ScheduleTimedEvent(15s, [&]{ Talk(SAY_PHOENIX); DoCastSelf(SPELL_PHOENIX); diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp index 66edbda08..e5535991f 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_selin_fireheart.cpp @@ -95,7 +95,7 @@ struct boss_selin_fireheart : public BossAI BossAI::JustEngagedWith(who); ScheduleTimedEvent(2500ms, [&]{ DoCastRandomTarget(SPELL_DRAIN_LIFE); - }, 10000ms); + }, 10s); ScheduleTimedEvent(2s, [&]{ me->RemoveAuraFromStack(SPELL_MANA_RAGE_TRIGGER); DoCastAOE(SPELL_FEL_EXPLOSION); diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index 4747e7765..b70c90063 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -438,7 +438,7 @@ public: if (owner->GetVictim()) AttackStart(owner->GetVictim()); - events.RepeatEvent(1000); + events.Repeat(1s); return; } @@ -760,22 +760,22 @@ public: { case EVENT_ICY_TOUCH: DoCastVictim(SPELL_ICY_TOUCH); - events.DelayEvents(1000, GCD_CAST); + events.DelayEvents(1s, GCD_CAST); events.ScheduleEvent(EVENT_ICY_TOUCH, 5s, GCD_CAST); break; case EVENT_PLAGUE_STRIKE: DoCastVictim(SPELL_PLAGUE_STRIKE); - events.DelayEvents(1000, GCD_CAST); + events.DelayEvents(1s, GCD_CAST); events.ScheduleEvent(EVENT_PLAGUE_STRIKE, 5s, GCD_CAST); break; case EVENT_BLOOD_STRIKE: DoCastVictim(SPELL_BLOOD_STRIKE); - events.DelayEvents(1000, GCD_CAST); + events.DelayEvents(1s, GCD_CAST); events.ScheduleEvent(EVENT_BLOOD_STRIKE, 5s, GCD_CAST); break; case EVENT_DEATH_COIL: DoCastVictim(SPELL_DEATH_COIL); - events.DelayEvents(1000, GCD_CAST); + events.DelayEvents(1s, GCD_CAST); events.ScheduleEvent(EVENT_DEATH_COIL, 5s, GCD_CAST); break; } diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp index 9c71aad73..5a1c4218b 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter2.cpp @@ -613,7 +613,7 @@ public: me->GetMotionMaster()->MovePath(pathId, true); // true = repeatable } // Schedule the first ritual after 20-30s - events.ScheduleEvent(EVENT_START_RITUAL, urand(20000, 30000)); + events.ScheduleEvent(EVENT_START_RITUAL, 20s, 30s); } void UpdateAI(uint32 diff) override @@ -628,7 +628,7 @@ public: { if (isOnRitual) // Already performing ritual { - events.ScheduleEvent(EVENT_START_RITUAL, urand(5000, 10000)); + events.ScheduleEvent(EVENT_START_RITUAL, 5s, 10s); break; } @@ -655,7 +655,7 @@ public: if (!nearestCorpse) { // No corpse found nearby: try again later - events.ScheduleEvent(EVENT_START_RITUAL, urand(5000, 10000)); + events.ScheduleEvent(EVENT_START_RITUAL, 5s, 10s); break; } // Start ritual @@ -702,7 +702,7 @@ public: // Resume paused waypoint movement me->ResumeMovement(); // Schedule next ritual in 20-30s - events.ScheduleEvent(EVENT_START_RITUAL, urand(20000, 30000)); + events.ScheduleEvent(EVENT_START_RITUAL, 20s, 30s); break; } } @@ -723,9 +723,9 @@ public: me->SetFacingToObject(geist); geistGUID = geist->GetGUID(); // Geist found: schedule Ghoulplosion at +3s, then raising at +6s, then resume at +9s - events.ScheduleEvent(EVENT_GHOULPLOSION, 3000); - events.ScheduleEvent(EVENT_RAISE_GHOUL, 6000); - events.ScheduleEvent(EVENT_RESUME_WP, 9000); + events.ScheduleEvent(EVENT_GHOULPLOSION, 3s); + events.ScheduleEvent(EVENT_RAISE_GHOUL, 6s); + events.ScheduleEvent(EVENT_RESUME_WP, 9s); } else { @@ -737,8 +737,8 @@ public: me->SetFacingToObject(corpse); } - events.ScheduleEvent(EVENT_RAISE_GHOUL, 3000); - events.ScheduleEvent(EVENT_RESUME_WP, 6000); + events.ScheduleEvent(EVENT_RAISE_GHOUL, 3s); + events.ScheduleEvent(EVENT_RESUME_WP, 6s); } } } @@ -800,7 +800,7 @@ public: me->GetMotionMaster()->MovePath(pathId, true); // true = repeatable } // Schedule the first ritual after 50-60s - events.ScheduleEvent(EVENT_START_RITUAL, urand(50000, 60000)); + events.ScheduleEvent(EVENT_START_RITUAL, 50s, 60s); } void UpdateAI(uint32 diff) override { @@ -814,7 +814,7 @@ public: { if (isOnRitual) // Already performing ritual { - events.ScheduleEvent(EVENT_START_RITUAL, urand(5000, 10000)); + events.ScheduleEvent(EVENT_START_RITUAL, 5s, 10s); break; } @@ -841,7 +841,7 @@ public: } if (!nearestCorpse) { - events.ScheduleEvent(EVENT_START_RITUAL, urand(5000, 10000)); + events.ScheduleEvent(EVENT_START_RITUAL, 5s, 10s); break; } // Start ritual @@ -894,7 +894,7 @@ public: // Resume paused waypoint movement me->ResumeMovement(); // Schedule next ritual in 50-60s - events.ScheduleEvent(EVENT_START_RITUAL, urand(50000, 60000)); + events.ScheduleEvent(EVENT_START_RITUAL, 50s, 60s); break; } } @@ -923,15 +923,15 @@ public: me->SetFacingToObject(geist); geistGUID = geist->GetGUID(); // Geist present: Ghoulplosion in 3s (with SAY_GEIST), raise in 6s, resume in 9s - events.ScheduleEvent(EVENT_GHOULPLOSION, 3000); - events.ScheduleEvent(EVENT_RAISE_DEAD, 6000); - events.ScheduleEvent(EVENT_RESUME_WP, 9000); + events.ScheduleEvent(EVENT_GHOULPLOSION, 3s); + events.ScheduleEvent(EVENT_RAISE_DEAD, 6s); + events.ScheduleEvent(EVENT_RESUME_WP, 9s); } else { // No Geist: raise in 3s, resume in 6s - events.ScheduleEvent(EVENT_RAISE_DEAD, 3000); - events.ScheduleEvent(EVENT_RESUME_WP, 6000); + events.ScheduleEvent(EVENT_RAISE_DEAD, 3s); + events.ScheduleEvent(EVENT_RESUME_WP, 6s); } } } diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp index bfd1d01b9..d77e5756e 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp @@ -526,11 +526,11 @@ public: if (battleStarted != ENCOUNTER_STATE_FIGHT) return; - events.RescheduleEvent(EVENT_SPELL_ANTI_MAGIC_ZONE, 15000); - events.RescheduleEvent(EVENT_SPELL_DEATH_STRIKE, 8000); - events.RescheduleEvent(EVENT_SPELL_DEATH_EMBRACE, 5000); - events.RescheduleEvent(EVENT_SPELL_UNHOLY_BLIGHT, 10000); - events.RescheduleEvent(EVENT_SPELL_DARION_MOD_DAMAGE, 500); + events.RescheduleEvent(EVENT_SPELL_ANTI_MAGIC_ZONE, 15s); + events.RescheduleEvent(EVENT_SPELL_DEATH_STRIKE, 8s); + events.RescheduleEvent(EVENT_SPELL_DEATH_EMBRACE, 5s); + events.RescheduleEvent(EVENT_SPELL_UNHOLY_BLIGHT, 10s); + events.RescheduleEvent(EVENT_SPELL_DARION_MOD_DAMAGE, 500ms); } void Reset() override diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp index 8b585920c..3392b3a95 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_darkmaster_gandling.cpp @@ -36,16 +36,13 @@ enum BossData GANDLING_ROOM_TO_USE }; -enum Timers -{ - TIMER_ARCANE_MIN = 8000, - TIMER_ARCANE_MAX = 14000, - TIMER_CURSE_MIN = 20000, - TIMER_CURSE_MAX = 30000, - TIMER_SHIELD_MIN = 30000, - TIMER_SHIELD_MAX = 40000, - TIMER_PORTAL = 25000 -}; +constexpr Milliseconds TIMER_ARCANE_MIN = 8s; +constexpr Milliseconds TIMER_ARCANE_MAX = 14s; +constexpr Milliseconds TIMER_CURSE_MIN = 20s; +//constexpr Milliseconds TIMER_CURSE_MAX = 30s; +constexpr Milliseconds TIMER_SHIELD_MIN = 30s; +//constexpr Milliseconds TIMER_SHIELD_MAX = 40s; +constexpr Milliseconds TIMER_PORTAL = 25s; enum IdPortalSpells { @@ -335,18 +332,18 @@ public: { case SPELL_ARCANE_MISSILES: DoCastVictim(SPELL_ARCANE_MISSILES); - events.ScheduleEvent(SPELL_ARCANE_MISSILES, urand(TIMER_ARCANE_MIN, TIMER_ARCANE_MAX)); + events.ScheduleEvent(SPELL_ARCANE_MISSILES, TIMER_ARCANE_MIN, TIMER_ARCANE_MAX); break; case SPELL_CURSE_DARKMASTER: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true)) { DoCast(target, SPELL_CURSE_DARKMASTER); } - events.ScheduleEvent(SPELL_ARCANE_MISSILES, urand(TIMER_ARCANE_MIN, TIMER_ARCANE_MAX)); + events.ScheduleEvent(SPELL_ARCANE_MISSILES, TIMER_ARCANE_MIN, TIMER_ARCANE_MAX); break; case SPELL_SHADOW_SHIELD: DoCastSelf(SPELL_SHADOW_SHIELD); - events.ScheduleEvent(SPELL_ARCANE_MISSILES, urand(TIMER_ARCANE_MIN, TIMER_ARCANE_MAX)); + events.ScheduleEvent(SPELL_ARCANE_MISSILES, TIMER_ARCANE_MIN, TIMER_ARCANE_MAX); break; case SPELL_SHADOW_PORTAL: diff --git a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp index 5363fac88..253608fd5 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/instance_scholomance.cpp @@ -399,17 +399,17 @@ public: { case 1: me->CastSpell(me, BONE_ARMOR_SPELL, false); - events.RepeatEvent(60000); + events.Repeat(60s); break; case 2: if (Unit* target = SelectUnitCasting()) { me->CastSpell(target, COUNTER_SPELL, false); - events.RepeatEvent(urand(10000, 20000)); + events.Repeat(10s, 20s); } else { - events.RepeatEvent(400); + events.Repeat(400ms); } break; case 3: @@ -417,11 +417,11 @@ public: { me->CastSpell(target, DRAIN_MANA_SPELL, false); } - events.RepeatEvent(urand(13000, 20000)); + events.Repeat(13s, 20s); break; case 4: me->CastSpell(me->GetVictim(), SHADOWBOLT_VOLLEY_SPELL, true); - events.RepeatEvent(urand(11000, 17000)); + events.Repeat(11s, 17s); break; } diff --git a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp index 9435fd194..affaef9dc 100644 --- a/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp +++ b/src/server/scripts/EasternKingdoms/Stratholme/instance_stratholme.cpp @@ -135,14 +135,14 @@ public: if (_slaughterProgress == 2) { for (uint32 i = 0; i < 33; ++i) - events.ScheduleEvent(EVENT_SPAWN_MINDLESS, 5000 + i * 210); + events.ScheduleEvent(EVENT_SPAWN_MINDLESS, Milliseconds(5000 + i * 210)); if (Creature* baron = instance->GetCreature(_baronRivendareGUID)) if (GameObject* gate = baron->FindNearestGameObject(GO_SLAUGHTER_GATE_SIDE, 200.0f)) gate->SetGoState(GO_STATE_ACTIVE); } if (_slaughterProgress == 3) { - events.ScheduleEvent(EVENT_SPAWN_BLACK_GUARD, 20000); + events.ScheduleEvent(EVENT_SPAWN_BLACK_GUARD, 20s); } if (_slaughterProgress == 4) { @@ -296,7 +296,7 @@ public: _baronRunProgress = DATA_BARON_RUN_GATE; _baronRunTime = 45; DoCastSpellOnPlayers(SPELL_BARON_ULTIMATUM); - events.ScheduleEvent(EVENT_BARON_TIME, 60000); + events.ScheduleEvent(EVENT_BARON_TIME, 60s); if (Creature* baron = instance->GetCreature(_baronRivendareGUID)) baron->AI()->Talk(SAY_BARON_INIT_YELL); @@ -379,12 +379,12 @@ public: data >> _barthilasrunProgress; if (_baronRunTime) { - events.ScheduleEvent(EVENT_BARON_TIME, 60000); + events.ScheduleEvent(EVENT_BARON_TIME, 60s); } if (_slaughterProgress > 0 && _slaughterProgress < 4) { - events.ScheduleEvent(EVENT_FORCE_SLAUGHTER_EVENT, 5000); + events.ScheduleEvent(EVENT_FORCE_SLAUGHTER_EVENT, 5s); } } @@ -455,20 +455,20 @@ public: if (i == 0) { // set timer to reset the trap - events.ScheduleEvent(EVENT_GATE1_TRAP, 30 * MINUTE * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_GATE1_TRAP, 1800s); // set timer to reopen gates - events.ScheduleEvent(EVENT_GATE1_DELAY, 20 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_GATE1_DELAY, 20s); // set timer to spawn the plagued critters - events.ScheduleEvent(EVENT_GATE1_CRITTER_DELAY, 2 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_GATE1_CRITTER_DELAY, 2s); } else if (i == 1) { // set timer to reset the trap - events.ScheduleEvent(EVENT_GATE2_TRAP, 30 * MINUTE * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_GATE2_TRAP, 1800s); // set timer to reopen gates - events.ScheduleEvent(EVENT_GATE2_DELAY, 20 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_GATE2_DELAY, 20s); // set timer to spawn the plagued critters - events.ScheduleEvent(EVENT_GATE2_CRITTER_DELAY, 2 * IN_MILLISECONDS); + events.ScheduleEvent(EVENT_GATE2_CRITTER_DELAY, 2s); } } } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp index e7937c622..b41f44548 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp @@ -196,10 +196,10 @@ struct npc_madrigosa : public NullCreatureAI me->RemoveDynamicFlag(UNIT_DYNFLAG_DEAD); me->SendMovementFlagUpdate(); - events.ScheduleEvent(EVENT_MAD_1, 2000); + events.ScheduleEvent(EVENT_MAD_1, 2s); } else if (param == ACTION_SPAWN_FELMYST) - events.ScheduleEvent(EVENT_SPAWN_FELMYST, 60000); + events.ScheduleEvent(EVENT_SPAWN_FELMYST, 60s); } void UpdateAI(uint32 diff) override @@ -217,27 +217,27 @@ struct npc_madrigosa : public NullCreatureAI } me->GetMotionMaster()->MoveTakeoff(1, 1477.94f, 643.22f, 21.21f); me->AddUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD); - events.ScheduleEvent(EVENT_MAD_2, 4000); + events.ScheduleEvent(EVENT_MAD_2, 4s); break; case EVENT_MAD_2: Talk(SAY_MAD_1); me->CastSpell(me, SPELL_MADRIGOSA_FREEZE, false); - events.ScheduleEvent(EVENT_MAD_2_1, 1000); + events.ScheduleEvent(EVENT_MAD_2_1, 1s); break; case EVENT_MAD_2_1: me->HandleEmoteCommand(EMOTE_ONESHOT_LAND); me->SetDisableGravity(false); me->CastSpell(me, SPELL_MADRIGOSA_FROST_BREATH, false); - events.ScheduleEvent(EVENT_MAD_3, 7000); + events.ScheduleEvent(EVENT_MAD_3, 7s); break; case EVENT_MAD_3: Talk(SAY_MAD_2); - events.ScheduleEvent(EVENT_MAD_4, 7000); + events.ScheduleEvent(EVENT_MAD_4, 7s); break; case EVENT_MAD_4: if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS)) brutallus->AI()->Talk(YELL_INTRO); - events.ScheduleEvent(EVENT_MAD_5, 5000); + events.ScheduleEvent(EVENT_MAD_5, 5s); break; case EVENT_MAD_5: if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS)) @@ -245,7 +245,7 @@ struct npc_madrigosa : public NullCreatureAI brutallus->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_ATTACK1H); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_ATTACK1H); } - events.ScheduleEvent(EVENT_MAD_6, 10000); + events.ScheduleEvent(EVENT_MAD_6, 10s); break; case EVENT_MAD_6: if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS)) @@ -255,21 +255,21 @@ struct npc_madrigosa : public NullCreatureAI } me->HandleEmoteCommand(EMOTE_ONESHOT_LIFTOFF); me->SetDisableGravity(true); - events.ScheduleEvent(EVENT_MAD_7, 4000); + events.ScheduleEvent(EVENT_MAD_7, 4s); break; case EVENT_MAD_7: Talk(SAY_MAD_3); me->CastSpell(me, SPELL_MADRIGOSA_FROST_BLAST, false); - events.ScheduleEvent(EVENT_MAD_8, 3000); - events.ScheduleEvent(EVENT_MAD_8, 5000); - events.ScheduleEvent(EVENT_MAD_8_1, 6000); - events.ScheduleEvent(EVENT_MAD_8, 6500); - events.ScheduleEvent(EVENT_MAD_8, 7500); - events.ScheduleEvent(EVENT_MAD_8, 8500); - events.ScheduleEvent(EVENT_MAD_8, 9500); - events.ScheduleEvent(EVENT_MAD_9, 11000); - events.ScheduleEvent(EVENT_MAD_8, 12000); - events.ScheduleEvent(EVENT_MAD_8, 14000); + events.ScheduleEvent(EVENT_MAD_8, 3s); + events.ScheduleEvent(EVENT_MAD_8, 5s); + events.ScheduleEvent(EVENT_MAD_8_1, 6s); + events.ScheduleEvent(EVENT_MAD_8, 6500ms); + events.ScheduleEvent(EVENT_MAD_8, 7500ms); + events.ScheduleEvent(EVENT_MAD_8, 8500ms); + events.ScheduleEvent(EVENT_MAD_8, 9500ms); + events.ScheduleEvent(EVENT_MAD_9, 11s); + events.ScheduleEvent(EVENT_MAD_8, 12s); + events.ScheduleEvent(EVENT_MAD_8, 14s); break; case EVENT_MAD_8: if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS)) @@ -286,19 +286,19 @@ struct npc_madrigosa : public NullCreatureAI brutallus->CastSpell(brutallus, SPELL_BRUTALLUS_FEL_FIREBALL, false); brutallus->AI()->Talk(YELL_INTRO_BREAK_ICE); } - events.ScheduleEvent(EVENT_MAD_11, 6000); + events.ScheduleEvent(EVENT_MAD_11, 6s); break; //case EVENT_MAD_10: case EVENT_MAD_11: me->SetDisableGravity(false); me->HandleEmoteCommand(EMOTE_ONESHOT_LAND); - events.ScheduleEvent(EVENT_MAD_13, 2500); + events.ScheduleEvent(EVENT_MAD_13, 2500ms); break; case EVENT_MAD_13: Talk(SAY_MAD_4); me->RemoveAllAuras(); me->CastSpell(me, SPELL_MADRIGOSA_ENCAPSULATE, false); - events.ScheduleEvent(EVENT_MAD_14, 2000); + events.ScheduleEvent(EVENT_MAD_14, 2s); break; case EVENT_MAD_14: if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS)) @@ -306,7 +306,7 @@ struct npc_madrigosa : public NullCreatureAI brutallus->SetDisableGravity(true); brutallus->GetMotionMaster()->MovePoint(0, brutallus->GetPositionX(), brutallus->GetPositionY() - 30.0f, brutallus->GetPositionZ() + 15.0f, false, true); } - events.ScheduleEvent(EVENT_MAD_15, 10000); + events.ScheduleEvent(EVENT_MAD_15, 10s); break; case EVENT_MAD_15: if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS)) @@ -316,28 +316,28 @@ struct npc_madrigosa : public NullCreatureAI brutallus->GetMotionMaster()->MoveFall(); brutallus->AI()->Talk(YELL_INTRO_CHARGE); } - events.ScheduleEvent(EVENT_MAD_16, 1400); + events.ScheduleEvent(EVENT_MAD_16, 1400ms); break; case EVENT_MAD_16: if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS)) brutallus->CastSpell(me, SPELL_BRUTALLUS_CHARGE, true); - events.ScheduleEvent(EVENT_MAD_17, 1200); + events.ScheduleEvent(EVENT_MAD_17, 1200ms); break; case EVENT_MAD_17: if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS)) brutallus->HandleEmoteCommand(EMOTE_ONESHOT_ATTACK1H); - events.ScheduleEvent(EVENT_MAD_18, 500); + events.ScheduleEvent(EVENT_MAD_18, 500ms); break; case EVENT_MAD_18: Talk(SAY_MAD_5); me->SetDynamicFlag(UNIT_DYNFLAG_DEAD); me->SetStandState(UNIT_STAND_STATE_DEAD); - events.ScheduleEvent(EVENT_MAD_19, 6000); + events.ScheduleEvent(EVENT_MAD_19, 6s); break; case EVENT_MAD_19: if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS)) brutallus->AI()->Talk(YELL_INTRO_KILL_MADRIGOSA); - events.ScheduleEvent(EVENT_MAD_20, 7000); + events.ScheduleEvent(EVENT_MAD_20, 7s); break; case EVENT_MAD_20: me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); @@ -347,7 +347,7 @@ struct npc_madrigosa : public NullCreatureAI brutallus->AI()->Talk(YELL_INTRO_TAUNT); brutallus->CastSpell(brutallus, SPELL_BRUTALLUS_BREAK_ICE, false); } - events.ScheduleEvent(EVENT_MAD_21, 4000); + events.ScheduleEvent(EVENT_MAD_21, 4s); break; case EVENT_MAD_21: if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS)) diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp index 221f15a23..40352f301 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp @@ -719,7 +719,7 @@ struct npc_kalecgos_kj : public NullCreatureAI me->SetCanFly(false); me->SetDisableGravity(false); me->CastSpell(me, SPELL_TELEPORT_AND_TRANSFORM, true); - events.ScheduleEvent(EVENT_SCENE_01, 35000); + events.ScheduleEvent(EVENT_SCENE_01, 35s); } } @@ -775,21 +775,21 @@ struct npc_kalecgos_kj : public NullCreatureAI { case EVENT_SCENE_01: Talk(SAY_KALECGOS_GOODBYE); - events.ScheduleEvent(eventId + 1, 15000); + events.ScheduleEvent(eventId + 1, 15s); break; case EVENT_SCENE_02: me->SummonCreature(NPC_SHATTERED_SUN_RIFTWAKER, 1688.42f, 641.82f, 27.60f, 0.67f); me->SummonCreature(NPC_SHATTERED_SUN_RIFTWAKER, 1712.58f, 616.29f, 27.78f, 0.76f); - events.ScheduleEvent(eventId + 1, 6000); + events.ScheduleEvent(eventId + 1, 6s); break; case EVENT_SCENE_03: me->SummonCreature(NPC_SHATTRATH_PORTAL_DUMMY, 1727.08f + cos(5.14f), 656.82f + std::sin(5.14f), 28.37f + 2.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 10000); me->SummonCreature(NPC_SHATTRATH_PORTAL_DUMMY, 1738.84f + cos(2.0f), 627.32f + std::sin(2.0f), 28.26f + 2.0f, 0.0f, TEMPSUMMON_TIMED_DESPAWN, 10000); - events.ScheduleEvent(eventId + 1, 11000); + events.ScheduleEvent(eventId + 1, 11s); break; case EVENT_SCENE_04: me->SummonCreature(NPC_INERT_PORTAL, 1734.96f, 642.43f, 28.06f, 3.49f); - events.ScheduleEvent(eventId + 1, 4000); + events.ScheduleEvent(eventId + 1, 4s); break; case EVENT_SCENE_05: if (Creature* first = me->SummonCreature(NPC_SHATTERED_SUN_SOLDIER, 1729.48f, 640.49f, 28.06f, 3.49f)) @@ -800,7 +800,7 @@ struct npc_kalecgos_kj : public NullCreatureAI if (Creature* follower = me->SummonCreature(NPC_SHATTERED_SUN_SOLDIER, 1729.48f + 5 * cos(i * 2.0f * M_PI / 9), 640.49f + 5 * std::sin(i * 2.0f * M_PI / 9), 28.06f, 3.49f)) follower->GetMotionMaster()->MoveFollow(first, 3.0f, follower->GetAngle(first)); } - events.ScheduleEvent(eventId + 1, 10000); + events.ScheduleEvent(eventId + 1, 10s); break; case EVENT_SCENE_06: if (Creature* first = me->SummonCreature(NPC_SHATTERED_SUN_SOLDIER, 1729.48f, 640.49f, 28.06f, 3.49f)) @@ -811,33 +811,33 @@ struct npc_kalecgos_kj : public NullCreatureAI if (Creature* follower = me->SummonCreature(NPC_SHATTERED_SUN_SOLDIER, 1729.48f + 5 * cos(i * 2.0f * M_PI / 9), 640.49f + 5 * std::sin(i * 2.0f * M_PI / 9), 28.06f, 3.49f)) follower->GetMotionMaster()->MoveFollow(first, 3.0f, follower->GetAngle(first)); } - events.ScheduleEvent(eventId + 1, 12000); + events.ScheduleEvent(eventId + 1, 12s); break; case EVENT_SCENE_07: me->SummonCreature(NPC_LADY_LIADRIN, 1719.87f, 644.265f, 28.06f, 3.83f); me->SummonCreature(NPC_PROPHET_VELEN, 1717.97f, 646.44f, 28.06f, 3.94f); - events.ScheduleEvent(eventId + 1, 7000); + events.ScheduleEvent(eventId + 1, 7s); break; case EVENT_SCENE_08: if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN)) velen->AI()->Talk(SAY_VELEN_01); - events.ScheduleEvent(eventId + 1, 25000); + events.ScheduleEvent(eventId + 1, 25s); break; case EVENT_SCENE_09: if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN)) velen->AI()->Talk(SAY_VELEN_02); - events.ScheduleEvent(eventId + 1, 14500); + events.ScheduleEvent(eventId + 1, 14500ms); break; case EVENT_SCENE_10: if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN)) velen->AI()->Talk(SAY_VELEN_03); - events.ScheduleEvent(eventId + 1, 12500); + events.ScheduleEvent(eventId + 1, 12500ms); break; case EVENT_SCENE_11: me->SummonCreature(NPC_THE_CORE_OF_ENTROPIUS, 1698.86f, 628.73f, 92.83f, 0.0f); if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN)) velen->CastSpell(velen, SPELL_CALL_ENTROPIUS, false); - events.ScheduleEvent(eventId + 1, 8000); + events.ScheduleEvent(eventId + 1, 8s); break; case EVENT_SCENE_12: if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN)) @@ -845,32 +845,32 @@ struct npc_kalecgos_kj : public NullCreatureAI velen->InterruptNonMeleeSpells(false); velen->AI()->Talk(SAY_VELEN_04); } - events.ScheduleEvent(eventId + 1, 20000); + events.ScheduleEvent(eventId + 1, 20s); break; case EVENT_SCENE_13: if (Creature* liadrin = summons.GetCreatureWithEntry(NPC_LADY_LIADRIN)) liadrin->GetMotionMaster()->MovePoint(0, 1711.28f, 637.29f, 27.29f); - events.ScheduleEvent(eventId + 1, 6000); + events.ScheduleEvent(eventId + 1, 6s); break; case EVENT_SCENE_14: if (Creature* liadrin = summons.GetCreatureWithEntry(NPC_LADY_LIADRIN)) liadrin->AI()->Talk(SAY_LIADRIN_01); - events.ScheduleEvent(eventId + 1, 10000); + events.ScheduleEvent(eventId + 1, 10s); break; case EVENT_SCENE_15: if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN)) velen->AI()->Talk(SAY_VELEN_05); - events.ScheduleEvent(eventId + 1, 14000); + events.ScheduleEvent(eventId + 1, 14s); break; case EVENT_SCENE_16: if (Creature* liadrin = summons.GetCreatureWithEntry(NPC_LADY_LIADRIN)) liadrin->AI()->Talk(SAY_LIADRIN_02); - events.ScheduleEvent(eventId + 1, 2000); + events.ScheduleEvent(eventId + 1, 2s); break; case EVENT_SCENE_17: if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN)) velen->AI()->Talk(SAY_VELEN_06); - events.ScheduleEvent(eventId + 1, 3000); + events.ScheduleEvent(eventId + 1, 3s); break; case EVENT_SCENE_18: if (Creature* core = summons.GetCreatureWithEntry(NPC_THE_CORE_OF_ENTROPIUS)) @@ -878,7 +878,7 @@ struct npc_kalecgos_kj : public NullCreatureAI core->RemoveAllAuras(); core->CastSpell(core, SPELL_BLAZE_TO_LIGHT, true); } - events.ScheduleEvent(eventId + 1, 8000); + events.ScheduleEvent(eventId + 1, 8s); break; case EVENT_SCENE_19: if (Creature* core = summons.GetCreatureWithEntry(NPC_THE_CORE_OF_ENTROPIUS)) @@ -886,34 +886,34 @@ struct npc_kalecgos_kj : public NullCreatureAI core->SetObjectScale(0.75f); core->GetMotionMaster()->MovePoint(0, core->GetPositionX(), core->GetPositionY(), 28.0f); } - events.ScheduleEvent(eventId + 1, 2000); + events.ScheduleEvent(eventId + 1, 2s); break; case EVENT_SCENE_20: if (Creature* core = summons.GetCreatureWithEntry(NPC_THE_CORE_OF_ENTROPIUS)) core->CastSpell(core, SPELL_SUNWELL_IGNITION, true); - events.ScheduleEvent(eventId + 1, 3000); + events.ScheduleEvent(eventId + 1, 3s); break; case EVENT_SCENE_21: if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN)) velen->AI()->Talk(SAY_VELEN_07); - events.ScheduleEvent(eventId + 1, 15000); + events.ScheduleEvent(eventId + 1, 15s); break; case EVENT_SCENE_22: if (Creature* liadrin = summons.GetCreatureWithEntry(NPC_LADY_LIADRIN)) liadrin->AI()->Talk(SAY_LIADRIN_03); - events.ScheduleEvent(eventId + 1, 20000); + events.ScheduleEvent(eventId + 1, 20s); break; case EVENT_SCENE_23: if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN)) velen->AI()->Talk(SAY_VELEN_08); if (Creature* liadrin = summons.GetCreatureWithEntry(NPC_LADY_LIADRIN)) liadrin->SetStandState(UNIT_STAND_STATE_KNEEL); - events.ScheduleEvent(eventId + 1, 8000); + events.ScheduleEvent(eventId + 1, 8s); break; case EVENT_SCENE_24: if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN)) velen->AI()->Talk(SAY_VELEN_09); - events.ScheduleEvent(eventId + 1, 5000); + events.ScheduleEvent(eventId + 1, 5s); break; case EVENT_SCENE_25: if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN)) @@ -921,7 +921,7 @@ struct npc_kalecgos_kj : public NullCreatureAI velen->GetMotionMaster()->MovePoint(0, 1739.38f, 643.79f, 28.06f); velen->DespawnOrUnsummon(5000); } - events.ScheduleEvent(eventId + 1, 3000); + events.ScheduleEvent(eventId + 1, 3s); break; case EVENT_SCENE_26: for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr) @@ -931,7 +931,7 @@ struct npc_kalecgos_kj : public NullCreatureAI summon->GetMotionMaster()->MovePoint(0, 1739.38f, 643.79f, 28.06f); summon->DespawnOrUnsummon(summon->GetExactDist2d(1734.96f, 642.43f) * 100); } - events.ScheduleEvent(eventId + 1, 7000); + events.ScheduleEvent(eventId + 1, 7s); break; case EVENT_SCENE_27: me->setActive(false); diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp index 065192bf7..863f4a244 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_hexlord.cpp @@ -161,72 +161,72 @@ static PlayerAbilityStruct PlayerAbility[13][3] = // 0 UNK class (should never be set) { // Warrior as fallback behavior if for some reason UNK class - { SPELL_WR_SPELL_REFLECT, ABILITY_TARGET_SELF, 10000ms }, - { SPELL_WR_WHIRLWIND, ABILITY_TARGET_SELF, 10000ms }, - { SPELL_WR_MORTAL_STRIKE, ABILITY_TARGET_VICTIM, 6000ms } + { SPELL_WR_SPELL_REFLECT, ABILITY_TARGET_SELF, 10s }, + { SPELL_WR_WHIRLWIND, ABILITY_TARGET_SELF, 10s }, + { SPELL_WR_MORTAL_STRIKE, ABILITY_TARGET_VICTIM, 6s } }, // 1 warrior - { { SPELL_WR_SPELL_REFLECT, ABILITY_TARGET_SELF, 10000ms }, - { SPELL_WR_WHIRLWIND, ABILITY_TARGET_SELF, 10000ms }, - { SPELL_WR_MORTAL_STRIKE, ABILITY_TARGET_VICTIM, 6000ms } + { { SPELL_WR_SPELL_REFLECT, ABILITY_TARGET_SELF, 10s }, + { SPELL_WR_WHIRLWIND, ABILITY_TARGET_SELF, 10s }, + { SPELL_WR_MORTAL_STRIKE, ABILITY_TARGET_VICTIM, 6s } }, // 2 paladin - { { SPELL_PA_CONSECRATION, ABILITY_TARGET_SELF, 10000ms }, - { SPELL_PA_HOLY_LIGHT, ABILITY_TARGET_HEAL, 10000ms }, - { SPELL_PA_AVENGING_WRATH, ABILITY_TARGET_SELF, 10000ms } + { { SPELL_PA_CONSECRATION, ABILITY_TARGET_SELF, 10s }, + { SPELL_PA_HOLY_LIGHT, ABILITY_TARGET_HEAL, 10s }, + { SPELL_PA_AVENGING_WRATH, ABILITY_TARGET_SELF, 10s } }, // 3 hunter - { { SPELL_HU_EXPLOSIVE_TRAP, ABILITY_TARGET_SELF, 10000ms }, - { SPELL_HU_FREEZING_TRAP, ABILITY_TARGET_SELF, 10000ms }, - { SPELL_HU_SNAKE_TRAP, ABILITY_TARGET_SELF, 10000ms } + { { SPELL_HU_EXPLOSIVE_TRAP, ABILITY_TARGET_SELF, 10s }, + { SPELL_HU_FREEZING_TRAP, ABILITY_TARGET_SELF, 10s }, + { SPELL_HU_SNAKE_TRAP, ABILITY_TARGET_SELF, 10s } }, // 4 rogue - { { SPELL_RO_WOUND_POISON, ABILITY_TARGET_VICTIM, 3000ms }, - { SPELL_RO_SLICE_DICE, ABILITY_TARGET_SELF, 10000ms }, - { SPELL_RO_BLIND, ABILITY_TARGET_ENEMY, 10000ms } + { { SPELL_RO_WOUND_POISON, ABILITY_TARGET_VICTIM, 3s }, + { SPELL_RO_SLICE_DICE, ABILITY_TARGET_SELF, 10s }, + { SPELL_RO_BLIND, ABILITY_TARGET_ENEMY, 10s } }, // 5 priest - { { SPELL_PR_PAIN_SUPP, ABILITY_TARGET_HEAL, 10000ms }, - { SPELL_PR_HEAL, ABILITY_TARGET_HEAL, 10000ms }, - { SPELL_PR_PSYCHIC_SCREAM, ABILITY_TARGET_SELF, 10000ms } + { { SPELL_PR_PAIN_SUPP, ABILITY_TARGET_HEAL, 10s }, + { SPELL_PR_HEAL, ABILITY_TARGET_HEAL, 10s }, + { SPELL_PR_PSYCHIC_SCREAM, ABILITY_TARGET_SELF, 10s } }, // 6 death knight { - { SPELL_DK_PLAGUE_STRIKE, ABILITY_TARGET_ENEMY, 2000ms }, - { SPELL_DK_DEATH_AND_DECAY, ABILITY_TARGET_SELF, 10000ms }, - { SPELL_DK_BLOOD_WORMS, ABILITY_TARGET_ENEMY, 5000ms } + { SPELL_DK_PLAGUE_STRIKE, ABILITY_TARGET_ENEMY, 2s }, + { SPELL_DK_DEATH_AND_DECAY, ABILITY_TARGET_SELF, 10s }, + { SPELL_DK_BLOOD_WORMS, ABILITY_TARGET_ENEMY, 5s } }, // 7 shaman - { { SPELL_SH_FIRE_NOVA, ABILITY_TARGET_SELF, 10000ms }, - { SPELL_SH_HEALING_WAVE, ABILITY_TARGET_HEAL, 10000ms }, - { SPELL_SH_CHAIN_LIGHT, ABILITY_TARGET_ENEMY, 8000ms } + { { SPELL_SH_FIRE_NOVA, ABILITY_TARGET_SELF, 10s }, + { SPELL_SH_HEALING_WAVE, ABILITY_TARGET_HEAL, 10s }, + { SPELL_SH_CHAIN_LIGHT, ABILITY_TARGET_ENEMY, 8s } }, // 8 mage - { { SPELL_MG_FIREBALL, ABILITY_TARGET_ENEMY, 5000ms }, - { SPELL_MG_FROSTBOLT, ABILITY_TARGET_ENEMY, 5000ms }, - { SPELL_MG_ICE_LANCE, ABILITY_TARGET_SPECIAL, 2000ms } + { { SPELL_MG_FIREBALL, ABILITY_TARGET_ENEMY, 5s }, + { SPELL_MG_FROSTBOLT, ABILITY_TARGET_ENEMY, 5s }, + { SPELL_MG_ICE_LANCE, ABILITY_TARGET_SPECIAL, 2s } }, // 9 warlock - { { SPELL_WL_CURSE_OF_DOOM, ABILITY_TARGET_ENEMY, 10000ms }, - { SPELL_WL_RAIN_OF_FIRE, ABILITY_TARGET_ENEMY, 10000ms }, - { SPELL_WL_UNSTABLE_AFFL, ABILITY_TARGET_ENEMY, 10000ms } + { { SPELL_WL_CURSE_OF_DOOM, ABILITY_TARGET_ENEMY, 10s }, + { SPELL_WL_RAIN_OF_FIRE, ABILITY_TARGET_ENEMY, 10s }, + { SPELL_WL_UNSTABLE_AFFL, ABILITY_TARGET_ENEMY, 10s } }, // 10 UNK class (should never be set) { // Warrior as fallback behavior if for some reason UNK class - { SPELL_WR_SPELL_REFLECT, ABILITY_TARGET_SELF, 10000ms }, - { SPELL_WR_WHIRLWIND, ABILITY_TARGET_SELF, 10000ms }, - { SPELL_WR_MORTAL_STRIKE, ABILITY_TARGET_VICTIM, 6000ms } + { SPELL_WR_SPELL_REFLECT, ABILITY_TARGET_SELF, 10s }, + { SPELL_WR_WHIRLWIND, ABILITY_TARGET_SELF, 10s }, + { SPELL_WR_MORTAL_STRIKE, ABILITY_TARGET_VICTIM, 6s } }, // 11 druid - { { SPELL_DR_LIFEBLOOM, ABILITY_TARGET_HEAL, 10000ms }, - { SPELL_DR_THORNS, ABILITY_TARGET_SELF, 10000ms }, - { SPELL_DR_MOONFIRE, ABILITY_TARGET_ENEMY, 8000ms } + { { SPELL_DR_LIFEBLOOM, ABILITY_TARGET_HEAL, 10s }, + { SPELL_DR_THORNS, ABILITY_TARGET_SELF, 10s }, + { SPELL_DR_MOONFIRE, ABILITY_TARGET_ENEMY, 8s } }, // MISC shadow priest - { { SPELL_PR_MIND_CONTROL, ABILITY_TARGET_ENEMY, 15000ms }, - { SPELL_PR_MIND_BLAST, ABILITY_TARGET_ENEMY, 5000ms }, - { SPELL_PR_SW_DEATH, ABILITY_TARGET_ENEMY, 10000ms } + { { SPELL_PR_MIND_CONTROL, ABILITY_TARGET_ENEMY, 15s }, + { SPELL_PR_MIND_BLAST, ABILITY_TARGET_ENEMY, 5s }, + { SPELL_PR_SW_DEATH, ABILITY_TARGET_ENEMY, 10s } } }; @@ -244,7 +244,7 @@ struct boss_hexlord_malacrass : public BossAI { BossAI::Reset(); _currentClass = CLASS_NONE; - _classAbilityTimer = 10000ms; + _classAbilityTimer = 10s; _timeUntilNextDrainPower = 0ms; SpawnAdds(); ScheduleHealthCheckEvent(80, [&] { diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp index 6dd4a8c9e..39fca29ff 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp @@ -103,7 +103,7 @@ struct npc_forest_frog : public ScriptedAI Talk(SAY_THANKS_FREED, player); eventTimer = 2; - events.ScheduleEvent(eventTimer, urand(4000, 5000)); + events.ScheduleEvent(eventTimer, 4s, 5s); break; case 2: if (me->GetEntry() != NPC_GUNTER && me->GetEntry() != NPC_KYREN) // vendors don't kneel? @@ -140,7 +140,7 @@ struct npc_forest_frog : public ScriptedAI break; } eventTimer = 3; - events.ScheduleEvent(eventTimer, urand(6000, 7000)); + events.ScheduleEvent(eventTimer, 6s, 7s); break; case 3: me->SetStandState(EMOTE_ONESHOT_NONE); @@ -152,9 +152,9 @@ struct npc_forest_frog : public ScriptedAI eventTimer = 4; if (me->GetEntry() == NPC_GUNTER || me->GetEntry() == NPC_KYREN) - events.ScheduleEvent(eventTimer, 5 * MINUTE * IN_MILLISECONDS); // vendors wait for 5 minutes before running away and despawning + events.ScheduleEvent(eventTimer, 300s); // vendors wait for 5 minutes before running away and despawning else - events.ScheduleEvent(eventTimer, 6000); + events.ScheduleEvent(eventTimer, 6s); break; case 4: me->HandleEmoteCommand(EMOTE_ONESHOT_WAVE); @@ -165,7 +165,7 @@ struct npc_forest_frog : public ScriptedAI Talk(SAY_GOODBYE, player); eventTimer = 5; - events.ScheduleEvent(eventTimer, 2000); + events.ScheduleEvent(eventTimer, 2s); break; case 5: @@ -205,7 +205,7 @@ struct npc_forest_frog : public ScriptedAI // start generic rp eventTimer = 1; - events.ScheduleEvent(eventTimer, 3000); + events.ScheduleEvent(eventTimer, 3s); me->UpdateEntry(cEntry); diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp index 5cabaf62c..7046c02a2 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp @@ -330,7 +330,7 @@ public: if (Unit* arlokk = ObjectAccessor::GetUnit(*me, _instance->GetGuidData(NPC_ARLOKK))) me->GetMotionMaster()->MovePoint(0, arlokk->GetPositionX(), arlokk->GetPositionY(), arlokk->GetPositionZ()); - _events.ScheduleEvent(EVENT_ATTACK, 6000); + _events.ScheduleEvent(EVENT_ATTACK, 6s); } void JustEngagedWith(Unit* /*who*/) override diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp index e02c69e0f..b455b71e8 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp @@ -156,7 +156,7 @@ public: killCount = 0; if (me->GetPositionZ() > 140.0f) { - events.ScheduleEvent(EVENT_CHECK_START, 1000); + events.ScheduleEvent(EVENT_CHECK_START, 1s); if (Creature* speaker = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_VILEBRANCH_SPEAKER))) { if (!speaker->IsAlive()) diff --git a/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp b/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp index c90d2d78b..6b5ff5937 100644 --- a/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp @@ -207,7 +207,7 @@ public: EnterEvadeMode(); return; } - events.RepeatEvent(2000); + events.Repeat(2s); break; } case EVENT_SUMMON_ARCHERS: @@ -217,7 +217,7 @@ public: _spoken = false; SummonPeasants(); _spoken = false; - events.RepeatEvent(60 * IN_MILLISECONDS); + events.Repeat(60s); break; } } diff --git a/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp b/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp index cd3612d4e..5c50dc91e 100644 --- a/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp +++ b/src/server/scripts/EasternKingdoms/zone_eversong_woods.cpp @@ -139,7 +139,7 @@ struct npc_partygoer : public ScriptedAI void Reset() override { - _events.ScheduleEvent(EVENT_RANDOM_ACTION, urand(1000, 20000)); + _events.ScheduleEvent(EVENT_RANDOM_ACTION, 1s, 20s); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp index 61e04b795..246a1246f 100644 --- a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp +++ b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp @@ -136,25 +136,25 @@ public: if (Creature* c = me->FindNearestCreature(NPC_THALORIEN_REMAINS, 100.0f, true)) c->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP); events.Reset(); - events.ScheduleEvent(EVENT_CHECK_PLAYER, 5000); - events.ScheduleEvent(EVENT_SUMMON_SOLDIERS, 0); - events.ScheduleEvent(EVENT_TALK_INTRO_0, 3000); - events.ScheduleEvent(EVENT_TALK_INTRO_1, 8000); - events.ScheduleEvent(EVENT_TALK_INTRO_2, 15000); - events.ScheduleEvent(EVENT_TALK_INTRO_3, 22000); - events.ScheduleEvent(EVENT_SALUTE, 24000); - events.ScheduleEvent(EVENT_SOLDIERS_RUN_AWAY, 30000); - events.ScheduleEvent(EVENT_GO_FIGHTPOINT, 31000); - events.ScheduleEvent(EVENT_TALK_SPAWN_0, 38000); - events.ScheduleEvent(EVENT_SUMMON_MORLEN, 44000); - events.ScheduleEvent(EVENT_TALK_SPAWN_1, 47000); - events.ScheduleEvent(EVENT_TALK_MORLEN_0, 52000); - events.ScheduleEvent(EVENT_TALK_MORLEN_1, 58000); - events.ScheduleEvent(EVENT_SPAWN_WAVE_1, 61000); + events.ScheduleEvent(EVENT_CHECK_PLAYER, 5s); + events.ScheduleEvent(EVENT_SUMMON_SOLDIERS, 0ms); + events.ScheduleEvent(EVENT_TALK_INTRO_0, 3s); + events.ScheduleEvent(EVENT_TALK_INTRO_1, 8s); + events.ScheduleEvent(EVENT_TALK_INTRO_2, 15s); + events.ScheduleEvent(EVENT_TALK_INTRO_3, 22s); + events.ScheduleEvent(EVENT_SALUTE, 24s); + events.ScheduleEvent(EVENT_SOLDIERS_RUN_AWAY, 30s); + events.ScheduleEvent(EVENT_GO_FIGHTPOINT, 31s); + events.ScheduleEvent(EVENT_TALK_SPAWN_0, 38s); + events.ScheduleEvent(EVENT_SUMMON_MORLEN, 44s); + events.ScheduleEvent(EVENT_TALK_SPAWN_1, 47s); + events.ScheduleEvent(EVENT_TALK_MORLEN_0, 52s); + events.ScheduleEvent(EVENT_TALK_MORLEN_1, 58s); + events.ScheduleEvent(EVENT_SPAWN_WAVE_1, 61s); - events.ScheduleEvent(EVENT_SPELL_BLADESTORM, urand(6000, 15000)); - events.ScheduleEvent(EVENT_SPELL_MORTAL_STRIKE, urand(3000, 7000)); - events.ScheduleEvent(EVENT_SPELL_HEROIC_STRIKE, urand(4000, 10000)); + events.ScheduleEvent(EVENT_SPELL_BLADESTORM, 6s, 15s); + events.ScheduleEvent(EVENT_SPELL_MORTAL_STRIKE, 3s, 7s); + events.ScheduleEvent(EVENT_SPELL_HEROIC_STRIKE, 4s, 10s); } void JustSummoned(Creature* summon) override @@ -172,10 +172,10 @@ public: me->RemoveAurasDueToSpell(67541); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); me->GetMotionMaster()->MoveCharge(11779.30f, -7065.43f, 24.92f, me->GetSpeed(MOVE_RUN), EVENT_CHARGE); - events.ScheduleEvent(EVENT_OUTRO_0, 0); - events.ScheduleEvent(EVENT_OUTRO_1, 5000); - events.ScheduleEvent(EVENT_OUTRO_2, 12000); - events.ScheduleEvent(EVENT_OUTRO_3, 19000); + events.ScheduleEvent(EVENT_OUTRO_0, 0ms); + events.ScheduleEvent(EVENT_OUTRO_1, 5s); + events.ScheduleEvent(EVENT_OUTRO_2, 12s); + events.ScheduleEvent(EVENT_OUTRO_3, 19s); } else if (summons.size() == 1) { @@ -184,13 +184,13 @@ public: switch (summon->GetEntry()) { case NPC_SCOURGE_ZOMBIE: - events.ScheduleEvent(EVENT_SPAWN_WAVE_2, 3000); + events.ScheduleEvent(EVENT_SPAWN_WAVE_2, 3s); break; case NPC_GHOUL_INVADER: - events.ScheduleEvent(EVENT_SPAWN_WAVE_3, 3000); + events.ScheduleEvent(EVENT_SPAWN_WAVE_3, 3s); break; case NPC_CRYPT_RAIDER: - events.ScheduleEvent(EVENT_SUMMONS_ATTACK, 3000); + events.ScheduleEvent(EVENT_SUMMONS_ATTACK, 3s); break; } } @@ -227,7 +227,7 @@ public: if (Player* p = ObjectAccessor::GetPlayer(*me, playerGUID)) if (p->GetExactDist(me) <= 50.0f) { - events.RepeatEvent(5000); + events.Repeat(5s); break; } me->setActive(false); @@ -266,7 +266,7 @@ public: { if (!summons.empty()) { - events.RepeatEvent(5000); + events.Repeat(5s); return; } else @@ -350,7 +350,7 @@ public: break; } } - events.ScheduleEvent(EVENT_SUMMONS_ATTACK, 3000); + events.ScheduleEvent(EVENT_SUMMONS_ATTACK, 3s); break; case EVENT_SUMMONS_ATTACK: for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr) @@ -370,13 +370,13 @@ public: case EVENT_OUTRO_3: Talk(SAY_OUTRO_0 + (evId - EVENT_OUTRO_0)); if (evId == EVENT_OUTRO_3) - events.ScheduleEvent(EVENT_OUTRO_KNEEL, 6000); + events.ScheduleEvent(EVENT_OUTRO_KNEEL, 6s); break; case EVENT_OUTRO_KNEEL: if (Player* p = ObjectAccessor::GetPlayer(*me, playerGUID)) p->KilledMonsterCredit(NPC_THALORIEN_KILL_CREDIT); me->SetStandState(UNIT_STAND_STATE_KNEEL); - events.ScheduleEvent(EVENT_DISAPPEAR, 6000); + events.ScheduleEvent(EVENT_DISAPPEAR, 6s); break; case EVENT_DISAPPEAR: me->SetVisible(false); @@ -390,17 +390,17 @@ public: case EVENT_SPELL_BLADESTORM: if (me->GetVictim() && me->IsWithinMeleeRange(me->GetVictim())) me->CastSpell(me->GetVictim(), 67541, false); - events.RepeatEvent(urand(25000, 35000)); + events.Repeat(25s, 35s); break; case EVENT_SPELL_MORTAL_STRIKE: if (me->GetVictim() && me->IsWithinMeleeRange(me->GetVictim())) me->CastSpell(me->GetVictim(), 67542, false); - events.RepeatEvent(urand(7000, 12000)); + events.Repeat(7s, 12s); break; case EVENT_SPELL_HEROIC_STRIKE: if (me->GetVictim() && me->IsWithinMeleeRange(me->GetVictim())) me->CastSpell(me->GetVictim(), 57846, false); - events.RepeatEvent(urand(5000, 10000)); + events.Repeat(5s, 10s); break; } @@ -410,7 +410,7 @@ public: void MovementInform(uint32 type, uint32 id) override { if (type == POINT_MOTION_TYPE && id == EVENT_CHARGE) - events.ScheduleEvent(EVENT_SET_FACING, 0); + events.ScheduleEvent(EVENT_SET_FACING, 0ms); } void EnterEvadeMode(EvadeReason why) override @@ -504,19 +504,19 @@ public: me->SummonCreature(NPC_SUNWELL_VISUAL_BUNNY, 1688.24f, 621.769f, 29.1745f, 0.523177f, TEMPSUMMON_MANUAL_DESPAWN); me->setActive(true); events.Reset(); - events.ScheduleEvent(1, 1000); // guard talk - events.ScheduleEvent(2, 4000); // theron talk - events.ScheduleEvent(3, 10000); // npcs walk - events.ScheduleEvent(4, 17000); // rommath talk - events.ScheduleEvent(5, 20000); // theron talk - events.ScheduleEvent(6, 28000); // theron talk - events.ScheduleEvent(7, 37000); // rommath talk - events.ScheduleEvent(8, 44000); // rommath talk - events.ScheduleEvent(9, 52000); // rommath talk - events.ScheduleEvent(10, 60000); // auric talk - events.ScheduleEvent(11, 66000); // auric talk - events.ScheduleEvent(12, 76000); // rommath talk - events.ScheduleEvent(13, 80000); // move home + events.ScheduleEvent(1, 1s); // guard talk + events.ScheduleEvent(2, 4s); // theron talk + events.ScheduleEvent(3, 10s); // npcs walk + events.ScheduleEvent(4, 17s); // rommath talk + events.ScheduleEvent(5, 20s); // theron talk + events.ScheduleEvent(6, 28s); // theron talk + events.ScheduleEvent(7, 37s); // rommath talk + events.ScheduleEvent(8, 44s); // rommath talk + events.ScheduleEvent(9, 52s); // rommath talk + events.ScheduleEvent(10, 60s); // auric talk + events.ScheduleEvent(11, 66s); // auric talk + events.ScheduleEvent(12, 76s); // rommath talk + events.ScheduleEvent(13, 80s); // move home } } diff --git a/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp b/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp index 5709c14b8..27abbc0b7 100644 --- a/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp +++ b/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp @@ -328,7 +328,7 @@ public: { HasEnded = false; TalkRNG = urand(0,1); - events.ScheduleEvent(EVENT_APPA_INTRO, 2000); + events.ScheduleEvent(EVENT_APPA_INTRO, 2s); summons.DespawnAll(); } @@ -387,31 +387,31 @@ public: case EVENT_APPA_INTRO: Talk(SAY_APPA_INTRO); SummonCrowd(); - events.ScheduleEvent(EVENT_APPA_SAY_1, 3000); + events.ScheduleEvent(EVENT_APPA_SAY_1, 3s); break; case EVENT_APPA_SAY_1: Talk(TalkRNG ? SAY_APPA_OPTION_1_1 : SAY_APPA_OPTION_2_1); - events.ScheduleEvent(EVENT_APPA_SAY_2, 5000); + events.ScheduleEvent(EVENT_APPA_SAY_2, 5s); break; case EVENT_APPA_SAY_2: Talk(TalkRNG ? SAY_APPA_OPTION_1_2 : SAY_APPA_OPTION_2_2); - events.ScheduleEvent(EVENT_APPA_SAY_3, 5000); + events.ScheduleEvent(EVENT_APPA_SAY_3, 5s); break; case EVENT_APPA_SAY_3: Talk(TalkRNG ? SAY_APPA_OPTION_1_3 : SAY_APPA_OPTION_2_3); - events.ScheduleEvent(EVENT_APPA_SAY_4, 5000); + events.ScheduleEvent(EVENT_APPA_SAY_4, 5s); break; case EVENT_APPA_SAY_4: Talk(TalkRNG ? SAY_APPA_OPTION_1_4 : SAY_APPA_OPTION_2_4); - events.ScheduleEvent(EVENT_APPA_OUTRO, 5000); + events.ScheduleEvent(EVENT_APPA_OUTRO, 5s); break; case EVENT_APPA_OUTRO: Talk(SAY_APPA_OUTRO); - events.ScheduleEvent(EVENT_APPA_OUTRO_CROWD, 3000); + events.ScheduleEvent(EVENT_APPA_OUTRO_CROWD, 3s); break; case EVENT_APPA_OUTRO_CROWD: EmoteCrowd(); - events.ScheduleEvent(EVENT_APPA_OUTRO_END, 5000); + events.ScheduleEvent(EVENT_APPA_OUTRO_END, 5s); break; case EVENT_APPA_OUTRO_END: // Despawn for Apparition is handled via Areatrigger SAI (5m) summons.DespawnAll(); diff --git a/src/server/scripts/Events/brewfest.cpp b/src/server/scripts/Events/brewfest.cpp index e0b01c49f..31d72e61a 100644 --- a/src/server/scripts/Events/brewfest.cpp +++ b/src/server/scripts/Events/brewfest.cpp @@ -367,10 +367,10 @@ struct npc_dark_iron_attack_generator : public ScriptedAI if (AllowStart()) { PrepareEvent(); - events.RepeatEvent(300000); + events.Repeat(300s); return; } - events.RepeatEvent(2000); + events.Repeat(2s); break; } case EVENT_SPAWN_MOLE_MACHINE: @@ -393,7 +393,7 @@ struct npc_dark_iron_attack_generator : public ScriptedAI if (Creature* cr = me->SummonCreature(NPC_MOLE_MACHINE_TRIGGER, x, y, 398.11f, 0.0f)) cr->CastSpell(cr, SPELL_SPAWN_MOLE_MACHINE, true); } - events.RepeatEvent(3000); + events.Repeat(3s); break; } case EVENT_PRE_FINISH_ATTACK: @@ -410,7 +410,7 @@ struct npc_dark_iron_attack_generator : public ScriptedAI } case EVENT_BARTENDER_SAY: { - events.RepeatEvent(12000); + events.Repeat(12s); Creature* sayer = GetRandomBartender(); if (!sayer) return; @@ -1714,12 +1714,12 @@ struct npc_coren_direbrew : public ScriptedAI case EVENT_SUMMON_MOLE_MACHINE: { me->CastCustomSpell(SPELL_MOLE_MACHINE_TARGET_PICKER, SPELLVALUE_MAX_TARGETS, 1, nullptr, true); - _events.RepeatEvent(15 * IN_MILLISECONDS); + _events.Repeat(15s); break; } case EVENT_DIREBREW_DISARM: DoCastSelf(SPELL_DIREBREW_DISARM_PRE_CAST, true); - _events.RepeatEvent(20 * IN_MILLISECONDS); + _events.Repeat(20s); break; default: break; diff --git a/src/server/scripts/Events/hallows_end.cpp b/src/server/scripts/Events/hallows_end.cpp index 06d649291..a7a2d2b64 100644 --- a/src/server/scripts/Events/hallows_end.cpp +++ b/src/server/scripts/Events/hallows_end.cpp @@ -763,7 +763,7 @@ struct npc_hallows_end_soh : public ScriptedAI } CastFires(false); - events.RepeatEvent(15000); + events.Repeat(15s); break; } case 4: @@ -868,7 +868,7 @@ struct npc_hallows_end_soh : public ScriptedAI me->RemoveAllAuras(); me->SetCanFly(false); me->SetDisableGravity(false); - events.ScheduleEvent(4, 2000); + events.ScheduleEvent(4, 2s); } } @@ -1202,7 +1202,7 @@ struct boss_headless_horseman : public ScriptedAI talkCount = 0; return; // pop and return, skip repeat } - events.RepeatEvent(2000); + events.Repeat(2s); break; } case EVENT_HORSEMAN_FOLLOW: @@ -1218,7 +1218,7 @@ struct boss_headless_horseman : public ScriptedAI case EVENT_HORSEMAN_CLEAVE: { me->CastSpell(me->GetVictim(), SPELL_HORSEMAN_CLEAVE, false); - events.RepeatEvent(8000); + events.Repeat(8s); break; } case EVENT_HORSEMAN_WHIRLWIND: @@ -1226,11 +1226,11 @@ struct boss_headless_horseman : public ScriptedAI if (me->HasAuraEffect(SPELL_HORSEMAN_WHIRLWIND, EFFECT_0)) { me->RemoveAura(SPELL_HORSEMAN_WHIRLWIND); - events.RepeatEvent(15000); + events.Repeat(15s); break; } me->CastSpell(me, SPELL_HORSEMAN_WHIRLWIND, true); - events.RepeatEvent(6000); + events.Repeat(6s); break; } case EVENT_HORSEMAN_CHECK_HEALTH: @@ -1241,7 +1241,7 @@ struct boss_headless_horseman : public ScriptedAI return; } - events.RepeatEvent(1000); + events.Repeat(1s); break; } case EVENT_HORSEMAN_CONFLAGRATION: @@ -1253,21 +1253,21 @@ struct boss_headless_horseman : public ScriptedAI Talk(TALK_CONFLAGRATION); } - events.RepeatEvent(12500); + events.Repeat(12500ms); break; } case EVENT_SUMMON_PUMPKIN: { if (talkCount < 4) { - events.RepeatEvent(1); + events.Repeat(1ms); talkCount++; me->CastSpell(me, SPELL_SUMMON_PUMPKIN, false); } else { Talk(TALK_SPROUTING_PUMPKINS); - events.RepeatEvent(15000); + events.Repeat(15s); talkCount = 0; } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp index 3d15d6cf7..6caa1ff95 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp @@ -297,7 +297,7 @@ struct boss_archimonde : public BossAI } } }, 5s); - ScheduleTimedEvent(5000ms, [&] + ScheduleTimedEvent(5s, [&] { bool noPlayersInRange = true; if (Map* map = me->GetMap()) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp index 82f86f1b5..4d0c1c3c9 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_azgalor.cpp @@ -110,7 +110,7 @@ public: if (Creature* archi = instance->GetCreature(DATA_ARCHIMONDE)) { archi->AI()->DoAction(ACTION_BECOME_ACTIVE_AND_CHANNEL); - archi->AI()->Talk(SAY_ARCHIMONDE_INTRO, 25000ms); + archi->AI()->Talk(SAY_ARCHIMONDE_INTRO, 25s); } BossAI::JustDied(killer); } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp index 42ad0d907..a4855f855 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_kazrogal.cpp @@ -94,9 +94,9 @@ public: Milliseconds GetMarkRepeatTimer() { ++_markCounter; - Milliseconds timer = 45000ms - (5000ms * _markCounter); - if (timer <= 10000ms) - return 10000ms; + Milliseconds timer = 45s - (5s * _markCounter); + if (timer <= 10s) + return 10s; else return timer; } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp index 1803000b9..5a120eaa0 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/instance_hyjal.cpp @@ -53,16 +53,16 @@ ObjectData const creatureData[] = Milliseconds hyjalWaveTimers[4][MAX_WAVES_STANDARD] { - { 130000ms, 130000ms, 130000ms, 130000ms, 130000ms, 130000ms, 130000ms, 190000ms, 0ms }, // Winterchill - { 130000ms, 130000ms, 130000ms, 130000ms, 130000ms, 130000ms, 130000ms, 190000ms, 0ms }, // Anetheron - { 130000ms, 155000ms, 130000ms, 155000ms, 130000ms, 130000ms, 155000ms, 225000ms, 0ms }, // Kaz'rogal - { 130000ms, 190000ms, 190000ms, 190000ms, 130000ms, 155000ms, 190000ms, 225000ms, 0ms } // Azgalor + { 130s, 130s, 130s, 130s, 130s, 130s, 130s, 190s, 0ms }, // Winterchill + { 130s, 130s, 130s, 130s, 130s, 130s, 130s, 190s, 0ms }, // Anetheron + { 130s, 155s, 130s, 155s, 130s, 130s, 155s, 225s, 0ms }, // Kaz'rogal + { 130s, 190s, 190s, 190s, 130s, 155s, 190s, 225s, 0ms } // Azgalor }; Milliseconds hyjalRetreatTimers[2][MAX_WAVES_RETREAT] { - { 10000ms, 6000ms , 0ms }, // Alliance - { 10000ms, 40000ms, 0ms } // Horde + { 10s, 6s , 0ms }, // Alliance + { 10s, 40s, 0ms } // Horde }; Milliseconds hyjalNightElfWaveTimers[1][MAX_WAVES_NIGHT_ELF] @@ -295,7 +295,7 @@ public: } // Despawn all alliance NPCs - scheduler.Schedule(21000ms, [this](TaskContext) + scheduler.Schedule(21s, [this](TaskContext) { for (ObjectGuid const& guid : _baseAlliance) if (Creature* creature = instance->GetCreature(guid)) @@ -343,7 +343,7 @@ public: } } - scheduler.Schedule(21000ms, [this](TaskContext) + scheduler.Schedule(21s, [this](TaskContext) { for (ObjectGuid const& guid : _baseHorde) if (Creature* creature = instance->GetCreature(guid)) diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp index f429e5a47..db6e61927 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_epoch.cpp @@ -77,12 +77,12 @@ public: { Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_SPELL_CURSE_OF_EXERTION, 9000); - events.ScheduleEvent(EVENT_SPELL_WOUNDING_STRIKE, 3000); - events.ScheduleEvent(EVENT_SPELL_TIME_WARP, 25000); + events.ScheduleEvent(EVENT_SPELL_CURSE_OF_EXERTION, 9s); + events.ScheduleEvent(EVENT_SPELL_WOUNDING_STRIKE, 3s); + events.ScheduleEvent(EVENT_SPELL_TIME_WARP, 25s); if (IsHeroic()) - events.ScheduleEvent(EVENT_SPELL_TIME_STOP, 20000); + events.ScheduleEvent(EVENT_SPELL_TIME_STOP, 20s); } void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override @@ -116,15 +116,15 @@ public: case EVENT_SPELL_CURSE_OF_EXERTION: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true)) me->CastSpell(target, SPELL_CURSE_OF_EXERTION, false); - events.RepeatEvent(9000); + events.Repeat(9s); break; case EVENT_SPELL_WOUNDING_STRIKE: me->CastSpell(me->GetVictim(), DUNGEON_MODE(SPELL_WOUNDING_STRIKE_N, SPELL_WOUNDING_STRIKE_H), false); - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_SPELL_TIME_STOP: me->CastSpell(me, SPELL_TIME_STOP, false); - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_SPELL_TIME_WARP: Talk(SAY_TIME_WARP); @@ -132,7 +132,7 @@ public: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true)) me->CastSpell(target, DUNGEON_MODE(SPELL_TIME_STEP_N, SPELL_TIME_STEP_H), true); - events.RepeatEvent(25000); + events.Repeat(25s); break; } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite.cpp index 7ec0d095c..d5983c7ea 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite.cpp @@ -79,8 +79,8 @@ public: void JustEngagedWith(Unit* /*who*/) override { me->InterruptNonMeleeSpells(false); - events.ScheduleEvent(EVENT_SPELL_VOID_STRIKE, 8000); - events.ScheduleEvent(EVENT_SPELL_CORRUPTING_BLIGHT, 12000); + events.ScheduleEvent(EVENT_SPELL_VOID_STRIKE, 8s); + events.ScheduleEvent(EVENT_SPELL_CORRUPTING_BLIGHT, 12s); Talk(SAY_AGGRO); } @@ -147,12 +147,12 @@ public: { case EVENT_SPELL_VOID_STRIKE: me->CastSpell(me->GetVictim(), SPELL_VOID_STRIKE, false); - events.RepeatEvent(8000); + events.Repeat(8s); break; case EVENT_SPELL_CORRUPTING_BLIGHT: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true)) me->CastSpell(target, SPELL_CORRUPTING_BLIGHT, false); - events.RepeatEvent(12000); + events.Repeat(12s); break; } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp index 065224bdc..bf7f18c2a 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp @@ -87,10 +87,10 @@ public: void JustEngagedWith(Unit* /*who*/) override { Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_SPELL_CARRION_SWARM, 6000); - events.ScheduleEvent(EVENT_SPELL_MIND_BLAST, 11000); - events.ScheduleEvent(EVENT_SPELL_SLEEP, 20000); - events.ScheduleEvent(EVENT_SPELL_VAMPIRIC_TOUCH, 15000); + events.ScheduleEvent(EVENT_SPELL_CARRION_SWARM, 6s); + events.ScheduleEvent(EVENT_SPELL_MIND_BLAST, 11s); + events.ScheduleEvent(EVENT_SPELL_SLEEP, 20s); + events.ScheduleEvent(EVENT_SPELL_VAMPIRIC_TOUCH, 15s); } void JustDied(Unit* /*killer*/) override @@ -146,22 +146,22 @@ public: { case EVENT_SPELL_CARRION_SWARM: me->CastSpell(me->GetVictim(), DUNGEON_MODE(SPELL_CARRION_SWARM_N, SPELL_CARRION_SWARM_H), false); - events.RepeatEvent(7000); + events.Repeat(7s); break; case EVENT_SPELL_MIND_BLAST: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true)) me->CastSpell(target, DUNGEON_MODE(SPELL_MIND_BLAST_N, SPELL_MIND_BLAST_H), false); - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_SPELL_SLEEP: Talk(SAY_SLEEP); if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 50.0f, true)) me->CastSpell(target, DUNGEON_MODE(SPELL_SLEEP_N, SPELL_SLEEP_H), false); - events.RepeatEvent(17000); + events.Repeat(17s); break; case EVENT_SPELL_VAMPIRIC_TOUCH: me->CastSpell(me, SPELL_VAMPIRIC_TOUCH, true); - events.RepeatEvent(30000); + events.Repeat(30s); break; } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp index 8a87485c1..e97fab363 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_meathook.cpp @@ -66,9 +66,9 @@ public: void JustEngagedWith(Unit* /*who*/) override { Talk(SAY_AGGRO); - events.RescheduleEvent(EVENT_SPELL_CONSTRICTING_CHAINS, 15000); - events.RescheduleEvent(EVENT_SPELL_DISEASE_EXPULSION, 4000); - events.RescheduleEvent(EVENT_SPELL_FRENZY, 20000); + events.RescheduleEvent(EVENT_SPELL_CONSTRICTING_CHAINS, 15s); + events.RescheduleEvent(EVENT_SPELL_DISEASE_EXPULSION, 4s); + events.RescheduleEvent(EVENT_SPELL_FRENZY, 20s); } void JustDied(Unit* /*killer*/) override @@ -98,16 +98,16 @@ public: { case EVENT_SPELL_DISEASE_EXPULSION: me->CastSpell(me, DUNGEON_MODE(SPELL_DISEASE_EXPULSION_N, SPELL_DISEASE_EXPULSION_H), false); - events.RepeatEvent(6000); + events.Repeat(6s); break; case EVENT_SPELL_FRENZY: me->CastSpell(me, SPELL_FRENZY, false); - events.RepeatEvent(20000); + events.Repeat(20s); break; case EVENT_SPELL_CONSTRICTING_CHAINS: if (Unit* pTarget = SelectTarget(SelectTargetMethod::MinThreat, 0, 50.0f, true)) me->CastSpell(pTarget, DUNGEON_MODE(SPELL_CONSTRICTING_CHAINS_N, SPELL_CONSTRICTING_CHAINS_H), false); - events.RepeatEvent(14000); + events.Repeat(14s); break; } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp index f0228eec2..9ea60c7b0 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_salramm.cpp @@ -84,12 +84,12 @@ public: void JustEngagedWith(Unit* /*who*/) override { Talk(SAY_AGGRO); - events.ScheduleEvent(EVENT_SPELL_SHADOW_BOLT, 7000); - events.ScheduleEvent(EVENT_SPELL_STEAL_FLESH, 11000); - events.ScheduleEvent(EVENT_SPELL_SUMMON_GHOULS, 16000); - events.ScheduleEvent(EVENT_EXPLODE_GHOUL, 22000); + events.ScheduleEvent(EVENT_SPELL_SHADOW_BOLT, 7s); + events.ScheduleEvent(EVENT_SPELL_STEAL_FLESH, 11s); + events.ScheduleEvent(EVENT_SPELL_SUMMON_GHOULS, 16s); + events.ScheduleEvent(EVENT_EXPLODE_GHOUL, 22s); if (IsHeroic()) - events.ScheduleEvent(EVENT_SPELL_CURSE, 25000); + events.ScheduleEvent(EVENT_SPELL_CURSE, 25s); } void JustDied(Unit* /*killer*/) override @@ -130,29 +130,29 @@ public: { case EVENT_SPELL_SHADOW_BOLT: me->CastSpell(me->GetVictim(), DUNGEON_MODE(SPELL_SHADOW_BOLT_N, SPELL_SHADOW_BOLT_H), false); - events.RepeatEvent(10000); + events.Repeat(10s); break; case EVENT_SPELL_STEAL_FLESH: if (!urand(0, 2)) Talk(SAY_STEAL_FLESH); me->CastSpell(me->GetVictim(), SPELL_STEAL_FLESH_CHANNEL, false); - events.RepeatEvent(12000); + events.Repeat(12s); break; case EVENT_SPELL_SUMMON_GHOULS: if (!urand(0, 2)) Talk(SAY_SUMMON_GHOULS); me->CastSpell(me, SPELL_SUMMON_GHOULS, false); - events.RepeatEvent(10000); + events.Repeat(10s); break; case EVENT_EXPLODE_GHOUL: if (!urand(0, 2)) Talk(SAY_EXPLODE_GHOUL); ExplodeGhoul(); - events.RepeatEvent(15000); + events.Repeat(15s); break; case EVENT_SPELL_CURSE: me->CastSpell(me->GetVictim(), SPELL_CURSE_OF_TWISTED_FAITH, false); - events.RepeatEvent(30000); + events.Repeat(30s); break; } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp index 5d1e9826a..b26ec632a 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp @@ -385,7 +385,7 @@ public: uint8 timeRiftId; Creature* GetEventNpc(uint32 entry); - void ScheduleNextEvent(uint32 currentEvent, uint32 time); + void ScheduleNextEvent(uint32 currentEvent, Milliseconds time); void SummonNextWave(); void ReorderInstance(uint32 data); void JustEngagedWith(Unit* /*who*/) override ; @@ -418,12 +418,12 @@ public: { // Event eventInRun = true; - actionEvents.ScheduleEvent(EVENT_ACTION_PHASE1, 0); + actionEvents.ScheduleEvent(EVENT_ACTION_PHASE1, 0ms); } else if (param == ACTION_START_CITY) { Talk(SAY_PHASE201); - actionEvents.ScheduleEvent(EVENT_ACTION_PHASE2, 12000); + actionEvents.ScheduleEvent(EVENT_ACTION_PHASE2, 12s); SetRun(false); eventInRun = true; @@ -435,7 +435,7 @@ public: waveGroupId = 10; eventInRun = true; SetRun(true); - actionEvents.ScheduleEvent(EVENT_ACTION_PHASE2 + 9, 10000); + actionEvents.ScheduleEvent(EVENT_ACTION_PHASE2 + 9, 10s); } else if (param == ACTION_START_TOWN_HALL) { @@ -486,7 +486,7 @@ public: { EnterEvadeMode(); eventInRun = true; - actionEvents.ScheduleEvent(EVENT_ACTION_PHASE5 + 1, 22000); + actionEvents.ScheduleEvent(EVENT_ACTION_PHASE5 + 1, 22s); me->SetFacingTo(1.84f); if (!me->GetMap()->GetPlayers().IsEmpty()) @@ -579,7 +579,7 @@ public: break; // Inside Town Hall first scene pos case 22: - actionEvents.ScheduleEvent(EVENT_ACTION_PHASE3, 0); + actionEvents.ScheduleEvent(EVENT_ACTION_PHASE3, 0ms); eventInRun = true; SetEscortPaused(true); break; @@ -652,7 +652,7 @@ public: // Infront of malganis case 55: Talk(SAY_PHASE502); - actionEvents.ScheduleEvent(EVENT_ACTION_PHASE5, 7000); + actionEvents.ScheduleEvent(EVENT_ACTION_PHASE5, 7s); SetEscortPaused(true); eventInRun = true; break; @@ -686,7 +686,7 @@ public: if (Creature* horse = me->SummonCreature(NPC_HORSE_ESCORT, EventPos[EVENT_SRC_HORSE1 + i], TEMPSUMMON_DEAD_DESPAWN, 180000)) horse->GetMotionMaster()->MovePoint(0, EventPos[EVENT_DST_HORSE1 + i], false); - ScheduleNextEvent(currentEvent, 4000); + ScheduleNextEvent(currentEvent, 4s); break; case EVENT_ACTION_PHASE1+1: // Start Event @@ -694,24 +694,24 @@ public: SetDespawnAtEnd(false); SetDespawnAtFar(false); - ScheduleNextEvent(currentEvent, 9000); + ScheduleNextEvent(currentEvent, 9s); break; // After waypoint 0 case EVENT_ACTION_PHASE1+2: Talk(SAY_PHASE101); - ScheduleNextEvent(currentEvent, 2000); + ScheduleNextEvent(currentEvent, 2s); break; case EVENT_ACTION_PHASE1+3: if (Creature* uther = GetEventNpc(NPC_UTHER)) uther->AI()->Talk(SAY_PHASE102); - ScheduleNextEvent(currentEvent, 8000); + ScheduleNextEvent(currentEvent, 8s); break; case EVENT_ACTION_PHASE1+4: SetEscortPaused(false); eventInRun = false; Talk(SAY_PHASE103); - ScheduleNextEvent(currentEvent, 2000); + ScheduleNextEvent(currentEvent, 2s); break; // After waypoint 1 case EVENT_ACTION_PHASE1+5: @@ -719,63 +719,63 @@ public: jaina->SetTarget(me->GetGUID()); Talk(SAY_PHASE104); - ScheduleNextEvent(currentEvent, 10000); + ScheduleNextEvent(currentEvent, 10s); break; case EVENT_ACTION_PHASE1+6: if (Creature* uther = GetEventNpc(NPC_UTHER)) uther->AI()->Talk(SAY_PHASE105); - ScheduleNextEvent(currentEvent, 1000); + ScheduleNextEvent(currentEvent, 1s); break; case EVENT_ACTION_PHASE1+7: Talk(SAY_PHASE106); - ScheduleNextEvent(currentEvent, 4000); + ScheduleNextEvent(currentEvent, 4s); break; case EVENT_ACTION_PHASE1+8: if (Creature* uther = GetEventNpc(NPC_UTHER)) uther->AI()->Talk(SAY_PHASE107); - ScheduleNextEvent(currentEvent, 6000); + ScheduleNextEvent(currentEvent, 6s); break; case EVENT_ACTION_PHASE1+9: Talk(SAY_PHASE108); - ScheduleNextEvent(currentEvent, 4000); + ScheduleNextEvent(currentEvent, 4s); break; case EVENT_ACTION_PHASE1+10: if (Creature* uther = GetEventNpc(NPC_UTHER)) uther->AI()->Talk(SAY_PHASE109); - ScheduleNextEvent(currentEvent, 8000); + ScheduleNextEvent(currentEvent, 8s); break; case EVENT_ACTION_PHASE1+11: Talk(SAY_PHASE110); - ScheduleNextEvent(currentEvent, 4000); + ScheduleNextEvent(currentEvent, 4s); break; case EVENT_ACTION_PHASE1+12: if (Creature* uther = GetEventNpc(NPC_UTHER)) uther->AI()->Talk(SAY_PHASE111); - ScheduleNextEvent(currentEvent, 4000); + ScheduleNextEvent(currentEvent, 4s); break; case EVENT_ACTION_PHASE1+13: Talk(SAY_PHASE112); - ScheduleNextEvent(currentEvent, 11000); + ScheduleNextEvent(currentEvent, 11s); break; case EVENT_ACTION_PHASE1+14: if (Creature* jaina = GetEventNpc(NPC_JAINA)) jaina->AI()->Talk(SAY_PHASE113); - ScheduleNextEvent(currentEvent, 2500); + ScheduleNextEvent(currentEvent, 2500ms); break; case EVENT_ACTION_PHASE1+15: Talk(SAY_PHASE114); - ScheduleNextEvent(currentEvent, 9000); + ScheduleNextEvent(currentEvent, 9s); break; case EVENT_ACTION_PHASE1+16: if (Creature* uther = GetEventNpc(NPC_UTHER)) uther->AI()->Talk(SAY_PHASE115); - ScheduleNextEvent(currentEvent, 4000); + ScheduleNextEvent(currentEvent, 4s); break; case EVENT_ACTION_PHASE1+17: for (SummonList::const_iterator i = summons.begin(); i != summons.end(); ++i) @@ -785,7 +785,7 @@ public: summon->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], false); } - ScheduleNextEvent(currentEvent, 1000); + ScheduleNextEvent(currentEvent, 1s); break; case EVENT_ACTION_PHASE1+18: if (Creature* uther = GetEventNpc(NPC_UTHER)) @@ -794,7 +794,7 @@ public: uther->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); uther->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], false); } - ScheduleNextEvent(currentEvent, 1000); + ScheduleNextEvent(currentEvent, 1s); break; case EVENT_ACTION_PHASE1+19: if (Creature* jaina = GetEventNpc(NPC_JAINA)) @@ -804,7 +804,7 @@ public: jaina->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], false); } Talk(SAY_PHASE116); - ScheduleNextEvent(currentEvent, 2000); + ScheduleNextEvent(currentEvent, 2s); break; case EVENT_ACTION_PHASE1+20: if (Creature* jaina = GetEventNpc(NPC_JAINA)) @@ -813,7 +813,7 @@ public: jaina->AI()->Talk(SAY_PHASE117); } - ScheduleNextEvent(currentEvent, 2000); + ScheduleNextEvent(currentEvent, 2s); break; case EVENT_ACTION_PHASE1+21: if (Creature* jaina = GetEventNpc(NPC_JAINA)) @@ -822,7 +822,7 @@ public: jaina->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], false); } summons.DespawnEntry(NPC_HORSE_ESCORT); - ScheduleNextEvent(currentEvent, 4000); + ScheduleNextEvent(currentEvent, 4s); break; case EVENT_ACTION_PHASE1+22: SetEscortPaused(false); @@ -836,7 +836,7 @@ public: me->SetTarget(); SetEscortPaused(false); eventInRun = false; - ScheduleNextEvent(currentEvent, 1000); + ScheduleNextEvent(currentEvent, 1s); break; // After waypoint 9 case EVENT_ACTION_PHASE2+1: @@ -848,13 +848,13 @@ public: cityman->GetMotionMaster()->MovePoint(0, EventPos[EVENT_DST_CITYMAN]); } - ScheduleNextEvent(currentEvent, 9000); + ScheduleNextEvent(currentEvent, 9s); break; case EVENT_ACTION_PHASE2+2: Talk(SAY_PHASE203); SetEscortPaused(false); eventInRun = false; - ScheduleNextEvent(currentEvent, 1500); + ScheduleNextEvent(currentEvent, 1500ms); break; // After waypoint 11 case EVENT_ACTION_PHASE2+3: @@ -864,7 +864,7 @@ public: stalker->DespawnOrUnsummon(500); } Talk(SAY_PHASE205); - ScheduleNextEvent(currentEvent, 4000); + ScheduleNextEvent(currentEvent, 4s); break; case EVENT_ACTION_PHASE2+4: if (Creature* malganis = me->SummonCreature(NPC_MAL_GANIS, EventPos[EVENT_SRC_MALGANIS], TEMPSUMMON_TIMED_DESPAWN, 60000)) @@ -889,13 +889,13 @@ public: unitList.clear(); } - ScheduleNextEvent(currentEvent, 12000); + ScheduleNextEvent(currentEvent, 12s); break; case EVENT_ACTION_PHASE2+5: if (Creature* malganis = GetEventNpc(NPC_MAL_GANIS)) malganis->AI()->Talk(SAY_PHASE207); - ScheduleNextEvent(currentEvent, 15000); + ScheduleNextEvent(currentEvent, 15s); break; case EVENT_ACTION_PHASE2+6: if (Creature* malganis = GetEventNpc(NPC_MAL_GANIS)) @@ -906,7 +906,7 @@ public: } Talk(SAY_PHASE208); - ScheduleNextEvent(currentEvent, 11000); + ScheduleNextEvent(currentEvent, 11s); break; case EVENT_ACTION_PHASE2+7: summons.DespawnEntry(NPC_MAL_GANIS); @@ -914,7 +914,7 @@ public: summons.DespawnEntry(NPC_CITY_MAN2); Talk(SAY_PHASE209); me->SetReactState(REACT_DEFENSIVE); - ScheduleNextEvent(currentEvent, 20000); + ScheduleNextEvent(currentEvent, 20s); if (pInstance) pInstance->SetData(DATA_ARTHAS_EVENT, COS_PROGRESS_FINISHED_CITY_INTRO); break; @@ -941,36 +941,36 @@ public: cr->SetTarget(me->GetGUID()); if (Creature* cr = GetEventNpc(NPC_CITY_MAN)) cr->SetTarget(me->GetGUID()); - ScheduleNextEvent(currentEvent, 1000); + ScheduleNextEvent(currentEvent, 1s); break; case EVENT_ACTION_PHASE3+1: me->SetReactState(REACT_AGGRESSIVE); if (Creature* cr = GetEventNpc(NPC_CITY_MAN3)) cr->AI()->Talk(SAY_PHASE302); - ScheduleNextEvent(currentEvent, 7000); + ScheduleNextEvent(currentEvent, 7s); break; case EVENT_ACTION_PHASE3+2: Talk(SAY_PHASE303); SetEscortPaused(false); eventInRun = false; - ScheduleNextEvent(currentEvent, 0); + ScheduleNextEvent(currentEvent, 0ms); break; // After waypoint 23 case EVENT_ACTION_PHASE3+3: SetRun(true); if (Creature* cr = GetEventNpc(NPC_CITY_MAN3)) me->CastSpell(cr, SPELL_ARTHAS_CRUSADER_STRIKE, true); - ScheduleNextEvent(currentEvent, 2000); + ScheduleNextEvent(currentEvent, 2s); break; case EVENT_ACTION_PHASE3+4: Talk(SAY_PHASE304); - ScheduleNextEvent(currentEvent, 2000); + ScheduleNextEvent(currentEvent, 2s); break; case EVENT_ACTION_PHASE3+5: if (Creature* cr = GetEventNpc(NPC_CITY_MAN3)) cr->AI()->Talk(SAY_PHASE305); - ScheduleNextEvent(currentEvent, 1000); + ScheduleNextEvent(currentEvent, 1s); break; // Trio citizen transformation right as we enter Town Hall case EVENT_ACTION_PHASE3+6: @@ -981,7 +981,7 @@ public: cr->SetImmuneToAll(true); cr->SetReactState(REACT_PASSIVE); } - ScheduleNextEvent(currentEvent, 2000); + ScheduleNextEvent(currentEvent, 2s); break; case EVENT_ACTION_PHASE3+7: if (Creature* cr = GetEventNpc(NPC_CITY_MAN4)) @@ -991,7 +991,7 @@ public: cr->SetImmuneToAll(true); cr->SetReactState(REACT_PASSIVE); } - ScheduleNextEvent(currentEvent, 2000); + ScheduleNextEvent(currentEvent, 2s); break; case EVENT_ACTION_PHASE3+8: if (Creature* cr = GetEventNpc(NPC_CITY_MAN3)) @@ -1016,35 +1016,35 @@ public: cr->SetInCombatWithZone(); cr->AddThreat(me, 0.0f); } - ScheduleNextEvent(currentEvent, 2000); + ScheduleNextEvent(currentEvent, 2s); break; case EVENT_ACTION_PHASE3+9: // Arthas is fighting infinites in town hall if (me->IsInCombat()) { - actionEvents.RepeatEvent(1000); + actionEvents.Repeat(1s); return; } summons.DespawnAll(); Talk(SAY_PHASE305_1); me->SetFacingTo(0.0f); - ScheduleNextEvent(currentEvent, 5000); + ScheduleNextEvent(currentEvent, 5s); break; case EVENT_ACTION_PHASE3+10: Talk(SAY_PHASE306); - ScheduleNextEvent(currentEvent, 5000); + ScheduleNextEvent(currentEvent, 5s); break; case EVENT_ACTION_PHASE3+11: SetEscortPaused(false); eventInRun = false; - ScheduleNextEvent(currentEvent, 1000); + ScheduleNextEvent(currentEvent, 1s); break; case EVENT_ACTION_PHASE3+12: // Arthas is fighting first chronos if (me->IsInCombat()) { - actionEvents.RepeatEvent(1000); + actionEvents.Repeat(1s); return; } @@ -1052,13 +1052,13 @@ public: SetEscortPaused(false); Talk(SAY_PHASE308); me->SetFacingTo(M_PI); - ScheduleNextEvent(currentEvent, 0); + ScheduleNextEvent(currentEvent, 0ms); break; case EVENT_ACTION_PHASE3+13: // Arthas is fighting second chronos if (me->IsInCombat()) { - actionEvents.RepeatEvent(1000); + actionEvents.Repeat(1s); return; } @@ -1066,18 +1066,18 @@ public: SetEscortPaused(false); Talk(SAY_PHASE311); me->SetFacingTo(M_PI * 3 / 2); - ScheduleNextEvent(currentEvent, 0); + ScheduleNextEvent(currentEvent, 0ms); break; case EVENT_ACTION_PHASE3+14: // Arthas is fighting third chronos if (me->IsInCombat()) { - actionEvents.RepeatEvent(1000); + actionEvents.Repeat(1s); return; } me->SetFacingTo(M_PI / 2); - ScheduleNextEvent(currentEvent, 8000); + ScheduleNextEvent(currentEvent, 8s); break; case EVENT_ACTION_PHASE3+15: Talk(SAY_PHASE313); @@ -1090,17 +1090,17 @@ public: cr->GetMotionMaster()->MovePoint(0, EventPos[EVENT_DST_EPOCH]); } - ScheduleNextEvent(currentEvent, 3000); + ScheduleNextEvent(currentEvent, 3s); break; case EVENT_ACTION_PHASE3+16: if (Creature* cr = GetEventNpc(NPC_EPOCH)) cr->AI()->Talk(SAY_PHASE314); - ScheduleNextEvent(currentEvent, 14000); + ScheduleNextEvent(currentEvent, 14s); break; case EVENT_ACTION_PHASE3+17: Talk(SAY_PHASE315); - ScheduleNextEvent(currentEvent, 7000); + ScheduleNextEvent(currentEvent, 7s); break; case EVENT_ACTION_PHASE3+18: if (Creature* cr = GetEventNpc(NPC_EPOCH)) @@ -1111,13 +1111,13 @@ public: cr->AddThreat(me, 0.0f); cr->SetInCombatWithZone(); } - ScheduleNextEvent(currentEvent, 1000); + ScheduleNextEvent(currentEvent, 1s); break; case EVENT_ACTION_PHASE3+19: // Arthas is fighting epoch chronos if (me->IsInCombat()) { - actionEvents.RepeatEvent(1000); + actionEvents.Repeat(1s); return; } @@ -1143,7 +1143,7 @@ public: Talk(SAY_PHASE503); SetEscortPaused(false); eventInRun = false; - ScheduleNextEvent(currentEvent, 5000); + ScheduleNextEvent(currentEvent, 5s); break; case EVENT_ACTION_PHASE5+2: me->SetFacingTo(5.28f); @@ -1156,7 +1156,7 @@ public: pInstance->instance->SummonGameObject(DUNGEON_MODE(GO_MALGANIS_CHEST_N, GO_MALGANIS_CHEST_H), 2288.35f, 1498.73f, 128.414f, -0.994837f, 0, 0, 0, 0, 7 * DAY * IN_MILLISECONDS); } - ScheduleNextEvent(currentEvent, 10000); + ScheduleNextEvent(currentEvent, 10s); break; case EVENT_ACTION_PHASE5+3: eventInRun = false; @@ -1179,13 +1179,13 @@ public: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0)) me->CastSpell(target, DUNGEON_MODE(SPELL_ARTHAS_EXORCISM_N, SPELL_ARTHAS_EXORCISM_H), false); - combatEvents.RepeatEvent(7300); + combatEvents.Repeat(7300ms); break; case EVENT_COMBAT_HEALTH_CHECK: if (HealthBelowPct(40)) me->CastSpell(me, SPELL_ARTHAS_HOLY_LIGHT, false); - combatEvents.RepeatEvent(1000); + combatEvents.Repeat(1s); break; } @@ -1210,7 +1210,7 @@ Creature* npc_arthas::npc_arthasAI::GetEventNpc(uint32 entry) return nullptr; } -void npc_arthas::npc_arthasAI::ScheduleNextEvent(uint32 currentEvent, uint32 time) +void npc_arthas::npc_arthasAI::ScheduleNextEvent(uint32 currentEvent, Milliseconds time) { actionEvents.ScheduleEvent(currentEvent + 1, time); } @@ -1236,8 +1236,8 @@ void npc_arthas::npc_arthasAI::JustEngagedWith(Unit* /*who*/) DoCast(me, SPELL_ARTHAS_AURA); // Fight - combatEvents.ScheduleEvent(EVENT_COMBAT_EXORCISM, 2000); - combatEvents.ScheduleEvent(EVENT_COMBAT_HEALTH_CHECK, 2000); + combatEvents.ScheduleEvent(EVENT_COMBAT_EXORCISM, 2s); + combatEvents.ScheduleEvent(EVENT_COMBAT_HEALTH_CHECK, 2s); } void npc_arthas::npc_arthasAI::ReorderInstance(uint32 data) @@ -1261,7 +1261,7 @@ void npc_arthas::npc_arthasAI::ReorderInstance(uint32 data) if (data == COS_PROGRESS_FINISHED_CITY_INTRO) { eventInRun = true; - actionEvents.RescheduleEvent(EVENT_ACTION_PHASE2 + 8, 10000); + actionEvents.RescheduleEvent(EVENT_ACTION_PHASE2 + 8, 10s); } else if (data == COS_PROGRESS_KILLED_MEATHOOK) { diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp index 6cb2b46da..0afbb1e50 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/instance_old_hillsbrad.cpp @@ -79,11 +79,11 @@ public: if (_encounterProgress == ENCOUNTER_PROGRESS_NONE) return; - _events.ScheduleEvent(EVENT_INITIAL_BARRELS_FLAME, 0); - _events.ScheduleEvent(EVENT_FINAL_BARRELS_FLAME, 0); + _events.ScheduleEvent(EVENT_INITIAL_BARRELS_FLAME, 0ms); + _events.ScheduleEvent(EVENT_FINAL_BARRELS_FLAME, 0ms); if (_encounterProgress == ENCOUNTER_PROGRESS_BARRELS) - _events.ScheduleEvent(EVENT_SUMMON_LIEUTENANT, 0); + _events.ScheduleEvent(EVENT_SUMMON_LIEUTENANT, 0ms); else SetData(DATA_THRALL_REPOSITION, 2); } @@ -138,7 +138,7 @@ public: { case DATA_THRALL_REPOSITION: if (data > 1) - _events.ScheduleEvent(EVENT_THRALL_REPOSITION, data == 2 ? 0 : 10000); + _events.ScheduleEvent(EVENT_THRALL_REPOSITION, data == 2 ? 0ms : 10s); else if (Creature* thrall = instance->GetCreature(_thrallGUID)) Reposition(thrall); return; @@ -157,9 +157,9 @@ public: DoUpdateWorldState(WORLD_STATE_OLD_HILLSBRAD_BARRELS_PLANTED, ++_barrelCount); if (_barrelCount == 5) { - _events.ScheduleEvent(EVENT_INITIAL_BARRELS_FLAME, 4000); - _events.ScheduleEvent(EVENT_FINAL_BARRELS_FLAME, 12000); - _events.ScheduleEvent(EVENT_SUMMON_LIEUTENANT, 18000); + _events.ScheduleEvent(EVENT_INITIAL_BARRELS_FLAME, 4s); + _events.ScheduleEvent(EVENT_FINAL_BARRELS_FLAME, 12s); + _events.ScheduleEvent(EVENT_SUMMON_LIEUTENANT, 18s); } break; } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp index 8745dc128..271cb6c22 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp @@ -258,8 +258,8 @@ public: switch (param) { case ENCOUNTER_PROGRESS_BARRELS: - events.ScheduleEvent(EVENT_OPEN_DOORS, 0); - events.ScheduleEvent(EVENT_START_WP, 3000); + events.ScheduleEvent(EVENT_OPEN_DOORS, 0ms); + events.ScheduleEvent(EVENT_START_WP, 3s); break; case ENCOUNTER_PROGRESS_THRALL_ARMORED: case ENCOUNTER_PROGRESS_AMBUSHES_1: @@ -268,27 +268,27 @@ public: SetEscortPaused(false); break; case ENCOUNTER_PROGRESS_TARETHA_MEET: - events.ScheduleEvent(EVENT_SUMMON_CHRONO, 0); - events.ScheduleEvent(EVENT_THRALL_TALK_2, 6000); - events.ScheduleEvent(EVENT_TARETHA_FALL, 11000); - events.ScheduleEvent(EVENT_THRALL_TALK_3, 15000); - events.ScheduleEvent(EVENT_THRALL_MOVE_DOWN, 17000); + events.ScheduleEvent(EVENT_SUMMON_CHRONO, 0ms); + events.ScheduleEvent(EVENT_THRALL_TALK_2, 6s); + events.ScheduleEvent(EVENT_TARETHA_FALL, 11s); + events.ScheduleEvent(EVENT_THRALL_TALK_3, 15s); + events.ScheduleEvent(EVENT_THRALL_MOVE_DOWN, 17s); break; case NPC_TARETHA: - events.ScheduleEvent(EVENT_THRALL_FACE_TARETHA, 0); - events.ScheduleEvent(EVENT_THRALL_TALK_4, 4000); - events.ScheduleEvent(EVENT_TARETHA_TALK_1, 13000); - events.ScheduleEvent(EVENT_THRALL_TALK_5, 17000); - events.ScheduleEvent(EVENT_SUMMON_EROZION, 17500); - events.ScheduleEvent(EVENT_EROZION_TALK_1, 18000); - events.ScheduleEvent(EVENT_EROZION_ACTION_1, 24000); - events.ScheduleEvent(EVENT_EROZION_TALK_2, 29000); - events.ScheduleEvent(EVENT_EROZION_TALK_3, 40000); - events.ScheduleEvent(EVENT_EROZION_ACTION_2, 46000); - events.ScheduleEvent(EVENT_THRALL_TALK_6, 48000); - events.ScheduleEvent(EVENT_THRALL_RUN_AWAY, 51000); - events.ScheduleEvent(EVENT_TARETHA_TALK_2, 53000); - events.ScheduleEvent(EVENT_EROZION_FLAGS, 56000); + events.ScheduleEvent(EVENT_THRALL_FACE_TARETHA, 0ms); + events.ScheduleEvent(EVENT_THRALL_TALK_4, 4s); + events.ScheduleEvent(EVENT_TARETHA_TALK_1, 13s); + events.ScheduleEvent(EVENT_THRALL_TALK_5, 17s); + events.ScheduleEvent(EVENT_SUMMON_EROZION, 17500ms); + events.ScheduleEvent(EVENT_EROZION_TALK_1, 18s); + events.ScheduleEvent(EVENT_EROZION_ACTION_1, 24s); + events.ScheduleEvent(EVENT_EROZION_TALK_2, 29s); + events.ScheduleEvent(EVENT_EROZION_TALK_3, 40s); + events.ScheduleEvent(EVENT_EROZION_ACTION_2, 46s); + events.ScheduleEvent(EVENT_THRALL_TALK_6, 48s); + events.ScheduleEvent(EVENT_THRALL_RUN_AWAY, 51s); + events.ScheduleEvent(EVENT_TARETHA_TALK_2, 53s); + events.ScheduleEvent(EVENT_EROZION_FLAGS, 56s); break; } } @@ -311,23 +311,23 @@ public: Talk(SAY_START_EVENT_PART1); break; case 8: - events.ScheduleEvent(EVENT_SET_FACING, 500); - events.ScheduleEvent(EVENT_ARMORER_SAY, 700); - events.ScheduleEvent(EVENT_THRALL_EMOTE, 1300); + events.ScheduleEvent(EVENT_SET_FACING, 500ms); + events.ScheduleEvent(EVENT_ARMORER_SAY, 700ms); + events.ScheduleEvent(EVENT_THRALL_EMOTE, 1300ms); break; case 9: SetRun(false); - events.ScheduleEvent(EVENT_KILL_ARMORER, 500); - events.ScheduleEvent(EVENT_TALK_KILL_ARMORER, 3000); + events.ScheduleEvent(EVENT_KILL_ARMORER, 500ms); + events.ScheduleEvent(EVENT_TALK_KILL_ARMORER, 3s); break; case 10: SetRun(true); - events.ScheduleEvent(EVENT_DRESSING_KNEEL, 500); - events.ScheduleEvent(EVENT_DRESSING_ARMOR, 3000); - events.ScheduleEvent(EVENT_DRESSING_STAND, 4000); - events.ScheduleEvent(EVENT_DRESSING_AXE, 7000); - events.ScheduleEvent(EVENT_DRESSING_SHIELD, 9000); - events.ScheduleEvent(EVENT_DRESSING_TALK, 12000); + events.ScheduleEvent(EVENT_DRESSING_KNEEL, 500ms); + events.ScheduleEvent(EVENT_DRESSING_ARMOR, 3s); + events.ScheduleEvent(EVENT_DRESSING_STAND, 4s); + events.ScheduleEvent(EVENT_DRESSING_AXE, 7s); + events.ScheduleEvent(EVENT_DRESSING_SHIELD, 9s); + events.ScheduleEvent(EVENT_DRESSING_TALK, 12s); break; case 18: if (Creature* warden = me->SummonCreature(NPC_DURNHOLDE_WARDEN, 2149.4634f, 104.97559f, 73.632385f, 1.9065f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS)) @@ -362,8 +362,8 @@ public: Talk(SAY_SKARLOC_MEET); break; case 30: - events.ScheduleEvent(EVENT_ENTER_MOUNT, 3000); - events.ScheduleEvent(EVENT_TALK_START_RIDE, 7000); + events.ScheduleEvent(EVENT_ENTER_MOUNT, 3s); + events.ScheduleEvent(EVENT_TALK_START_RIDE, 7s); break; case 59: instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_TARREN_MILL); @@ -394,20 +394,20 @@ public: SetRun(false); break; case 67: - events.ScheduleEvent(EVENT_LOOK_1, 1200); - events.ScheduleEvent(EVENT_MOVE_AROUND, 3500); - events.ScheduleEvent(EVENT_LOOK_2, 5000); - events.ScheduleEvent(EVENT_SUMMON_GUARDS, 5100); - events.ScheduleEvent(EVENT_LOOK_3, 7000); - events.ScheduleEvent(EVENT_SUMMON_TALK1, 12000); - events.ScheduleEvent(EVENT_LOOK_4, 17000); - events.ScheduleEvent(EVENT_SUMMON_TALK2, 19000); - events.ScheduleEvent(EVENT_GUARDS_MOVING, 21000); + events.ScheduleEvent(EVENT_LOOK_1, 1200ms); + events.ScheduleEvent(EVENT_MOVE_AROUND, 3500ms); + events.ScheduleEvent(EVENT_LOOK_2, 5s); + events.ScheduleEvent(EVENT_SUMMON_GUARDS, 5100ms); + events.ScheduleEvent(EVENT_LOOK_3, 7s); + events.ScheduleEvent(EVENT_SUMMON_TALK1, 12s); + events.ScheduleEvent(EVENT_LOOK_4, 17s); + events.ScheduleEvent(EVENT_SUMMON_TALK2, 19s); + events.ScheduleEvent(EVENT_GUARDS_MOVING, 21s); break; case 82: - events.ScheduleEvent(EVENT_LOOK_5, 500); - events.ScheduleEvent(EVENT_SUMMON_GUARDS_2, 1000); - events.ScheduleEvent(EVENT_SUMMON_TALK3, 1500); + events.ScheduleEvent(EVENT_LOOK_5, 500ms); + events.ScheduleEvent(EVENT_SUMMON_GUARDS_2, 1s); + events.ScheduleEvent(EVENT_SUMMON_TALK3, 1500ms); break; case 91: me->SummonCreature(NPC_TM_PROTECTOR, 2652.71f, 660.31f, 61.93f, 1.67f, TEMPSUMMON_MANUAL_DESPAWN); @@ -430,14 +430,14 @@ public: Taretha->HandleEmoteCommand(EMOTE_ONESHOT_CHEER); Taretha->AI()->Talk(SAY_TARETHA_ESCAPED); } - events.ScheduleEvent(EVENT_THRALL_TALK, 4000); + events.ScheduleEvent(EVENT_THRALL_TALK, 4s); break; case 101: SetEscortPaused(true); - events.ScheduleEvent(EVENT_EPOCH_INTRO, 500); - events.ScheduleEvent(EVENT_SUMMON_INFINITES, 1500); - events.ScheduleEvent(EVENT_TRANSFORM, 8000); - events.ScheduleEvent(EVENT_START_WAVE_1, 25000); + events.ScheduleEvent(EVENT_EPOCH_INTRO, 500ms); + events.ScheduleEvent(EVENT_SUMMON_INFINITES, 1500ms); + events.ScheduleEvent(EVENT_TRANSFORM, 8s); + events.ScheduleEvent(EVENT_START_WAVE_1, 25s); break; case 103: instance->SetData(DATA_ESCORT_PROGRESS, ENCOUNTER_PROGRESS_FINISHED); @@ -473,9 +473,9 @@ public: void JustEngagedWith(Unit*) override { combatEvents.Reset(); - combatEvents.ScheduleEvent(EVENT_CHECK_HEALTH, 500); - combatEvents.ScheduleEvent(EVENT_SPELL_SHIELD_BLOCK, 8000); - combatEvents.ScheduleEvent(EVENT_SPELL_STRIKE, 2000); + combatEvents.ScheduleEvent(EVENT_CHECK_HEALTH, 500ms); + combatEvents.ScheduleEvent(EVENT_SPELL_SHIELD_BLOCK, 8s); + combatEvents.ScheduleEvent(EVENT_SPELL_STRIKE, 2s); if (roll_chance_i(50)) Talk(SAY_RANDOM_AGGRO); @@ -766,7 +766,7 @@ public: summons.DoAction(ACTION_SET_IMMUNE_FLAG); break; case EVENT_START_WAVE_1: - events.ScheduleEvent(EVENT_CHECK_WAVE_1, 500); + events.ScheduleEvent(EVENT_CHECK_WAVE_1, 500ms); summons.DoAction(ACTION_REMOVE_IMMUNE_FLAG); summons.DoAction(ACTION_START_COMBAT); break; @@ -777,10 +777,10 @@ public: me->SummonCreature(NPC_INFINITE_SLAYER, 2599.57f, 677.0f, 55.975f, 0.05f, TEMPSUMMON_MANUAL_DESPAWN); me->SummonCreature(NPC_INFINITE_DEFILER, 2592.57f, 680.0f, 55.975f, 0.05f, TEMPSUMMON_MANUAL_DESPAWN); summons.DoAction(ACTION_START_COMBAT); - events.ScheduleEvent(EVENT_CHECK_WAVE_2, 500); + events.ScheduleEvent(EVENT_CHECK_WAVE_2, 500ms); break; } - events.ScheduleEvent(EVENT_CHECK_WAVE_1, 500); + events.ScheduleEvent(EVENT_CHECK_WAVE_1, 500ms); break; case EVENT_CHECK_WAVE_2: if (summons.size() == 1) @@ -790,20 +790,20 @@ public: me->SummonCreature(NPC_INFINITE_SABOTEUR, 2638.62f, 705.43f, 55.965f, 4.46f, TEMPSUMMON_MANUAL_DESPAWN); me->SummonCreature(NPC_INFINITE_DEFILER, 2642.62f, 705.43f, 55.965f, 4.46f, TEMPSUMMON_MANUAL_DESPAWN); summons.DoAction(ACTION_START_COMBAT); - events.ScheduleEvent(EVENT_CHECK_WAVE_3, 500); + events.ScheduleEvent(EVENT_CHECK_WAVE_3, 500ms); break; } - events.ScheduleEvent(EVENT_CHECK_WAVE_2, 500); + events.ScheduleEvent(EVENT_CHECK_WAVE_2, 500ms); break; case EVENT_CHECK_WAVE_3: if (summons.size() == 1) { me->SetHomePosition(2634.79f, 672.964f, 54.8577f, 1.33f); me->GetMotionMaster()->MoveTargetedHome(); - events.ScheduleEvent(EVENT_CALL_EPOCH, 8000); + events.ScheduleEvent(EVENT_CALL_EPOCH, 8s); break; } - events.ScheduleEvent(EVENT_CHECK_WAVE_3, 500); + events.ScheduleEvent(EVENT_CHECK_WAVE_3, 500ms); break; case EVENT_CALL_EPOCH: if (Creature* epoch = summons.GetCreatureWithEntry(NPC_EPOCH_HUNTER)) @@ -905,15 +905,15 @@ public: Talk(SAY_RANDOM_LOW_HP); break; } - events.ScheduleEvent(EVENT_CHECK_HEALTH, 500); + events.ScheduleEvent(EVENT_CHECK_HEALTH, 500ms); break; case EVENT_SPELL_STRIKE: me->CastSpell(me->GetVictim(), SPELL_STRIKE, false); - events.ScheduleEvent(EVENT_SPELL_STRIKE, 6000); + events.ScheduleEvent(EVENT_SPELL_STRIKE, 6s); break; case EVENT_SPELL_SHIELD_BLOCK: me->CastSpell(me, SPELL_SHIELD_BLOCK, false); - events.ScheduleEvent(EVENT_SPELL_SHIELD_BLOCK, 6000); + events.ScheduleEvent(EVENT_SPELL_SHIELD_BLOCK, 6s); break; } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp index f80ed1b28..0f08fb9be 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp @@ -137,13 +137,13 @@ struct npc_medivh_bm : public ScriptedAI me->CastSpell(me, SPELL_MEDIVH_CHANNEL, false); - events.ScheduleEvent(EVENT_CHECK_HEALTH_75, 500); - events.ScheduleEvent(EVENT_CHECK_HEALTH_50, 500); - events.ScheduleEvent(EVENT_CHECK_HEALTH_25, 500); - events.ScheduleEvent(EVENT_SUMMON_CRYSTAL, 2000); - events.ScheduleEvent(EVENT_SUMMON_CRYSTAL, 4000); - events.ScheduleEvent(EVENT_SUMMON_CRYSTAL, 6000); - events.ScheduleEvent(EVENT_SUMMON_FLYING_CRYSTAL, 8000); + events.ScheduleEvent(EVENT_CHECK_HEALTH_75, 500ms); + events.ScheduleEvent(EVENT_CHECK_HEALTH_50, 500ms); + events.ScheduleEvent(EVENT_CHECK_HEALTH_25, 500ms); + events.ScheduleEvent(EVENT_SUMMON_CRYSTAL, 2s); + events.ScheduleEvent(EVENT_SUMMON_CRYSTAL, 4s); + events.ScheduleEvent(EVENT_SUMMON_CRYSTAL, 6s); + events.ScheduleEvent(EVENT_SUMMON_FLYING_CRYSTAL, 8s); } } @@ -154,7 +154,7 @@ struct npc_medivh_bm : public ScriptedAI if (param == ACTION_OUTRO) { events.Reset(); - events.ScheduleEvent(EVENT_OUTRO_1, 4000); + events.ScheduleEvent(EVENT_OUTRO_1, 4s); me->InterruptNonMeleeSpells(true); me->SummonGameObject(GO_DARK_PORTAL, -2086.0f, 7125.6215f, 30.5f, 6.148f, 0.0f, 0.0f, 0.0f, 0.0f, 0); @@ -180,43 +180,43 @@ struct npc_medivh_bm : public ScriptedAI Talk(eventId + 1); break; } - events.ScheduleEvent(eventId, 500); + events.ScheduleEvent(eventId, 500ms); break; case EVENT_SUMMON_CRYSTAL: me->SummonCreature(NPC_DP_EMITTER_STALKER, me->GetPositionX() + 8.0f, me->GetPositionY(), me->GetPositionZ()); break; case EVENT_SUMMON_FLYING_CRYSTAL: me->CastSpell(me, SPELL_PORTAL_CRYSTALS, true); - events.ScheduleEvent(EVENT_SUMMON_FLYING_CRYSTAL, 1000); + events.ScheduleEvent(EVENT_SUMMON_FLYING_CRYSTAL, 1s); break; case EVENT_OUTRO_1: me->SetFacingTo(6.21f); Talk(SAY_MEDIVH_WIN); - events.ScheduleEvent(EVENT_OUTRO_2, 17000); + events.ScheduleEvent(EVENT_OUTRO_2, 17s); break; case EVENT_OUTRO_2: me->SetFacingTo(3.07f); - events.ScheduleEvent(EVENT_OUTRO_3, 2000); + events.ScheduleEvent(EVENT_OUTRO_3, 2s); break; case EVENT_OUTRO_3: SummonOrcs(-2046.158f, -3.0f, 37000, 30000, true); - events.ScheduleEvent(EVENT_OUTRO_4, 2000); + events.ScheduleEvent(EVENT_OUTRO_4, 2s); break; case EVENT_OUTRO_4: SummonOrcs(-2055.97f, -2.0f, 33000, 28000, false); - events.ScheduleEvent(EVENT_OUTRO_5, 2000); + events.ScheduleEvent(EVENT_OUTRO_5, 2s); break; case EVENT_OUTRO_5: SummonOrcs(-2064.0f, -1.5f, 29000, 26000, false); - events.ScheduleEvent(EVENT_OUTRO_6, 2000); + events.ScheduleEvent(EVENT_OUTRO_6, 2s); break; case EVENT_OUTRO_6: SummonOrcs(-2074.35f, -0.1f, 26000, 24000, false); - events.ScheduleEvent(EVENT_OUTRO_7, 7000); + events.ScheduleEvent(EVENT_OUTRO_7, 7s); break; case EVENT_OUTRO_7: Talk(SAY_MEDIVH_ORCS_ENTER); - events.ScheduleEvent(EVENT_OUTRO_8, 7000); + events.ScheduleEvent(EVENT_OUTRO_8, 7s); break; case EVENT_OUTRO_8: if (Creature* cr = me->FindNearestCreature(NPC_SHADOW_COUNCIL_ENFORCER, 20.0f)) @@ -368,7 +368,7 @@ struct npc_time_rift : public NullCreatureAI if (!_instance->GetCreature(DATA_AEONUS)) { DoSelectSummon(); - events.ScheduleEvent(EVENT_SUMMON_AT_RIFT, 15000); + events.ScheduleEvent(EVENT_SUMMON_AT_RIFT, 15s); } break; case EVENT_SUMMON_BOSS: diff --git a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp index 3564bc880..f51446e46 100644 --- a/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp +++ b/src/server/scripts/Kalimdor/OnyxiasLair/boss_onyxia.cpp @@ -138,16 +138,16 @@ public: switch (ph) { case PHASE_GROUNDED: - events.ScheduleEvent(EVENT_SPELL_WINGBUFFET, urand(10000, 20000)); - events.ScheduleEvent(EVENT_SPELL_FLAMEBREATH, urand(10000, 20000)); - events.ScheduleEvent(EVENT_SPELL_TAILSWEEP, urand(15000, 20000)); - events.ScheduleEvent(EVENT_SPELL_CLEAVE, urand(2000, 5000)); + events.ScheduleEvent(EVENT_SPELL_WINGBUFFET, 10s, 20s); + events.ScheduleEvent(EVENT_SPELL_FLAMEBREATH, 10s, 20s); + events.ScheduleEvent(EVENT_SPELL_TAILSWEEP, 15s, 20s); + events.ScheduleEvent(EVENT_SPELL_CLEAVE, 2s, 5s); break; case PHASE_AIRPHASE: - events.ScheduleEvent(EVENT_START_PHASE_2, 0); + events.ScheduleEvent(EVENT_START_PHASE_2, 0ms); break; case PHASE_LANDED: - events.ScheduleEvent(EVENT_START_PHASE_3, 5000); + events.ScheduleEvent(EVENT_START_PHASE_3, 5s); break; } } @@ -237,7 +237,7 @@ public: me->SetFacingTo(OnyxiaMoveData[id].o); me->SetSpeed(MOVE_RUN, 1.6f, false); CurrentWP = id; - events.ScheduleEvent(EVENT_SPELL_FIREBALL_FIRST, 1000); + events.ScheduleEvent(EVENT_SPELL_FIREBALL_FIRST, 1s); } } else @@ -246,21 +246,21 @@ public: { case 10: me->SetFacingTo(OnyxiaMoveData[0].o); - events.ScheduleEvent(EVENT_LIFTOFF, 0); + events.ScheduleEvent(EVENT_LIFTOFF, 0ms); break; case 11: me->SetFacingTo(OnyxiaMoveData[1].o); - events.ScheduleEvent(EVENT_FLY_S_TO_N, 0); + events.ScheduleEvent(EVENT_FLY_S_TO_N, 0ms); break; case 12: me->SetFacingTo(OnyxiaMoveData[1].o); - events.ScheduleEvent(EVENT_LAND, 0); + events.ScheduleEvent(EVENT_LAND, 0ms); break; case 13: me->SetCanFly(false); me->SetDisableGravity(false); me->SetSpeed(MOVE_RUN, me->GetCreatureTemplate()->speed_run, false); - events.ScheduleEvent(EVENT_PHASE_3_ATTACK, 0); + events.ScheduleEvent(EVENT_PHASE_3_ATTACK, 0ms); break; } } @@ -326,25 +326,25 @@ public: case EVENT_SPELL_WINGBUFFET: { DoCastAOE(SPELL_WINGBUFFET); - events.RepeatEvent(urand(15000, 30000)); + events.Repeat(15s, 30s); break; } case EVENT_SPELL_FLAMEBREATH: { DoCastAOE(SPELL_FLAMEBREATH); - events.RepeatEvent(urand(10000, 20000)); + events.Repeat(10s, 20s); break; } case EVENT_SPELL_TAILSWEEP: { DoCastAOE(SPELL_TAILSWEEP); - events.RepeatEvent(urand(15000, 20000)); + events.Repeat(15s, 20s); break; } case EVENT_SPELL_CLEAVE: { DoCastVictim(SPELL_CLEAVE); - events.RepeatEvent(urand(2000, 5000)); + events.Repeat(2s, 5s); break; } case EVENT_START_PHASE_2: @@ -369,7 +369,7 @@ public: me->GetMotionMaster()->MoveTakeoff(11, OnyxiaMoveData[1].x + 1.0f, OnyxiaMoveData[1].y, OnyxiaMoveData[1].z, 12.0f); bManyWhelpsAvailable = true; - events.RescheduleEvent(EVENT_END_MANY_WHELPS_TIME, 10000); + events.RescheduleEvent(EVENT_END_MANY_WHELPS_TIME, 10s); break; } case EVENT_END_MANY_WHELPS_TIME: @@ -381,20 +381,20 @@ public: me->GetMotionMaster()->MovePoint(5, OnyxiaMoveData[5].x, OnyxiaMoveData[5].y, OnyxiaMoveData[5].z); whelpSpam = true; - events.ScheduleEvent(EVENT_WHELP_SPAM, 90000); - events.ScheduleEvent(EVENT_SUMMON_LAIR_GUARD, 30000); + events.ScheduleEvent(EVENT_WHELP_SPAM, 90s); + events.ScheduleEvent(EVENT_SUMMON_LAIR_GUARD, 30s); break; } case EVENT_SUMMON_LAIR_GUARD: { me->CastSpell(-101.654f, -214.491f, -80.70f, SPELL_SUMMON_LAIR_GUARD, true); - events.RepeatEvent(30000); + events.Repeat(30s); break; } case EVENT_WHELP_SPAM: { whelpSpam = true; - events.RepeatEvent(90000); + events.Repeat(90s); break; } case EVENT_LAND: @@ -413,7 +413,7 @@ public: DoCast(v, SPELL_FIREBALL); } - events.ScheduleEvent(EVENT_SPELL_FIREBALL_SECOND, 4000); + events.ScheduleEvent(EVENT_SPELL_FIREBALL_SECOND, 4s); break; } case EVENT_SPELL_FIREBALL_SECOND: @@ -427,15 +427,15 @@ public: uint8 rand = urand(0, 99); if (rand < 33) { - events.ScheduleEvent(EVENT_PHASE_2_STEP_CW, 4000); + events.ScheduleEvent(EVENT_PHASE_2_STEP_CW, 4s); } else if (rand < 66) { - events.ScheduleEvent(EVENT_PHASE_2_STEP_ACW, 4000); + events.ScheduleEvent(EVENT_PHASE_2_STEP_ACW, 4s); } else { - events.ScheduleEvent(EVENT_PHASE_2_STEP_ACROSS, 4000); + events.ScheduleEvent(EVENT_PHASE_2_STEP_ACROSS, 4s); } break; } @@ -464,7 +464,7 @@ public: Talk(EMOTE_BREATH); me->SetFacingTo(OnyxiaMoveData[CurrentWP].o); DoCastAOE(OnyxiaMoveData[CurrentWP].spellId); - events.ScheduleEvent(EVENT_SPELL_BREATH, 8250); + events.ScheduleEvent(EVENT_SPELL_BREATH, 8250ms); break; } case EVENT_SPELL_BREATH: @@ -491,20 +491,20 @@ public: DoCastAOE(SPELL_BELLOWINGROAR); - events.ScheduleEvent(EVENT_ERUPTION, 0); - events.ScheduleEvent(EVENT_SPELL_WINGBUFFET, urand(10000, 20000)); - events.ScheduleEvent(EVENT_SPELL_FLAMEBREATH, urand(10000, 20000)); - events.ScheduleEvent(EVENT_SPELL_TAILSWEEP, urand(15000, 20000)); - events.ScheduleEvent(EVENT_SPELL_CLEAVE, urand(2000, 5000)); - events.ScheduleEvent(EVENT_SPELL_BELLOWINGROAR, 15000); - events.ScheduleEvent(EVENT_SUMMON_WHELP, 10000); + events.ScheduleEvent(EVENT_ERUPTION, 0ms); + events.ScheduleEvent(EVENT_SPELL_WINGBUFFET, 10s, 20s); + events.ScheduleEvent(EVENT_SPELL_FLAMEBREATH, 10s, 20s); + events.ScheduleEvent(EVENT_SPELL_TAILSWEEP, 15s, 20s); + events.ScheduleEvent(EVENT_SPELL_CLEAVE, 2s, 5s); + events.ScheduleEvent(EVENT_SPELL_BELLOWINGROAR, 15s); + events.ScheduleEvent(EVENT_SUMMON_WHELP, 10s); break; } case EVENT_SPELL_BELLOWINGROAR: { DoCastAOE(SPELL_BELLOWINGROAR); - events.RepeatEvent(22000); - events.ScheduleEvent(EVENT_ERUPTION, 0); + events.Repeat(22s); + events.ScheduleEvent(EVENT_ERUPTION, 0ms); break; } case EVENT_ERUPTION: @@ -521,7 +521,7 @@ public: float dist = rand_norm() * 4.0f; me->CastSpell(-33.18f + cos(angle) * dist, -258.80f + std::sin(angle) * dist, -89.0f, 17646, true); me->CastSpell(-32.535f + cos(angle) * dist, -170.190f + std::sin(angle) * dist, -89.0f, 17646, true); - events.RepeatEvent(30000); + events.Repeat(30s); break; } } @@ -555,8 +555,8 @@ public: void JustEngagedWith(Unit* /*who*/) override { events.Reset(); - events.ScheduleEvent(EVENT_OLG_SPELL_BLASTNOVA, 15000); - events.ScheduleEvent(EVENT_OLG_SPELL_IGNITEWEAPON, 10000); + events.ScheduleEvent(EVENT_OLG_SPELL_BLASTNOVA, 15s); + events.ScheduleEvent(EVENT_OLG_SPELL_IGNITEWEAPON, 10s); } void UpdateAI(uint32 diff) override @@ -577,17 +577,17 @@ public: { case EVENT_OLG_SPELL_BLASTNOVA: DoCastAOE(SPELL_OLG_BLASTNOVA); - events.RepeatEvent(15000); + events.Repeat(15s); break; case EVENT_OLG_SPELL_IGNITEWEAPON: if (me->HasUnitFlag(UNIT_FLAG_DISARMED)) { - events.RepeatEvent(5000); + events.Repeat(5s); } else { DoCastSelf(SPELL_OLG_IGNITEWEAPON); - events.RepeatEvent(urand(18000, 21000)); + events.Repeat(18s, 21s); } break; } diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp index a25435689..6f642d152 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_viscidus.cpp @@ -175,7 +175,7 @@ struct boss_viscidus : public BossAI { DoCastSelf(SPELL_EXPLODE_TRIGGER, true); }) - .Schedule(3000ms, [this](TaskContext /*context*/) + .Schedule(3s, [this](TaskContext /*context*/) { DoCastSelf(SPELL_INVIS_SELF, true); me->SetAuraStack(SPELL_VISCIDUS_SHRINKS, me, 20); diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.cpp index 2cc53521d..2d7cfb40b 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.cpp @@ -393,10 +393,10 @@ struct npc_obsidian_nullifier : public ScriptedAI context.Repeat(6s); }) - .Schedule(6000ms, 8400ms, [this](TaskContext context) + .Schedule(6s, 8400ms, [this](TaskContext context) { DoCastVictim(SPELL_CLEAVE, true); - context.Repeat(6000ms, 8400ms); + context.Repeat(6s, 8400ms); }); } @@ -447,7 +447,7 @@ struct npc_ahnqiraji_critter : public ScriptedAI } } - context.Repeat(3500ms, 4000ms); + context.Repeat(3500ms, 4s); }); } diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp index 396ee2295..276c37bd8 100644 --- a/src/server/scripts/Kalimdor/zone_desolace.cpp +++ b/src/server/scripts/Kalimdor/zone_desolace.cpp @@ -42,9 +42,6 @@ enum Caravan MAX_CARAVAN_SUMMONS = 3, - TIME_SHOP_STOP = 10 * MINUTE * IN_MILLISECONDS, - TIME_HIRE_STOP = 4 * MINUTE * IN_MILLISECONDS, - // Ambush NPC_KOLKAR_WAYLAYER = 12976, NPC_KOLKAR_AMBUSHER = 12977, @@ -53,6 +50,9 @@ enum Caravan NPC_NETHER = 4684, }; +constexpr Milliseconds TIME_SHOP_STOP = 600s; +constexpr Milliseconds TIME_HIRE_STOP = 240s; + class npc_cork_gizelton : public CreatureScript { public: @@ -264,14 +264,14 @@ public: { // Finished north path case 52: - me->SummonCreature(NPC_VENDOR_TRON, -694.61f, 1460.7f, 90.794f, 2.4f, TEMPSUMMON_TIMED_DESPAWN, TIME_SHOP_STOP + 15 * IN_MILLISECONDS); + me->SummonCreature(NPC_VENDOR_TRON, -694.61f, 1460.7f, 90.794f, 2.4f, TEMPSUMMON_TIMED_DESPAWN, 600000 + 15 * IN_MILLISECONDS); SetEscortPaused(true); events.ScheduleEvent(EVENT_RESUME_PATH, TIME_SHOP_STOP); CheckCaravan(); break; // Finished south path case 193: - me->SummonCreature(NPC_SUPER_SELLER, -1905.5f, 2463.3f, 61.52f, 5.87f, TEMPSUMMON_TIMED_DESPAWN, TIME_SHOP_STOP + 15 * IN_MILLISECONDS); + me->SummonCreature(NPC_SUPER_SELLER, -1905.5f, 2463.3f, 61.52f, 5.87f, TEMPSUMMON_TIMED_DESPAWN, 600000 + 15 * IN_MILLISECONDS); SetEscortPaused(true); events.ScheduleEvent(EVENT_RESUME_PATH, TIME_SHOP_STOP); CheckCaravan(); diff --git a/src/server/scripts/Kalimdor/zone_silithus.cpp b/src/server/scripts/Kalimdor/zone_silithus.cpp index 9a06054bb..dddcb2cf4 100644 --- a/src/server/scripts/Kalimdor/zone_silithus.cpp +++ b/src/server/scripts/Kalimdor/zone_silithus.cpp @@ -1145,7 +1145,7 @@ public: } } - me->DespawnOrUnsummon(5000ms, respawnTimer); // Despawn in 5 Seconds for respawnTimer value + me->DespawnOrUnsummon(5s, respawnTimer); // Despawn in 5 Seconds for respawnTimer value me->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE); CloseGossipMenuFor(player); return false; diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp index 3cdb5967f..ef3bebdfa 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_anubarak.cpp @@ -114,7 +114,7 @@ class boss_anub_arak : public CreatureScript void KilledUnit(Unit* /*victim*/) override { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) + if (!events.HasTimeUntilEvent(EVENT_KILL_TALK)) { Talk(SAY_SLAY); events.ScheduleEvent(EVENT_KILL_TALK, 6s); diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp index f3f9396ba..4aa00764c 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp @@ -111,7 +111,7 @@ public: uint32 GetData(uint32 data) const override { if (data == me->GetEntry()) - return !me->isActiveObject() || events.GetNextEventTime(EVENT_HADRONOX_MOVE4) != 0; + return !me->isActiveObject() || events.HasTimeUntilEvent(EVENT_HADRONOX_MOVE4) ? 1 : 0; return 0; } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp index e0c14e515..3b0c79d63 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp @@ -583,7 +583,7 @@ public: } } - events.RepeatEvent((below11PctReached ? urand(1400, 2000) : urand(5000, 20000))); + events.Repeat((below11PctReached ? randtime(1400ms, 2s) : randtime(5s, 20s))); break; } case EVENT_SARTHARION_BERSERK: @@ -1086,7 +1086,7 @@ public: Talk(SAY_TENEBRON_BREATH); } DoCastVictim(SPELL_SHADOW_BREATH, false); - events.RepeatEvent(17500); + events.Repeat(17500ms); break; } case EVENT_MINIBOSS_SHADOW_FISSURE: @@ -1095,7 +1095,7 @@ public: { DoCast(target, SPELL_SHADOW_FISSURE, false); } - events.RepeatEvent(22500); + events.Repeat(22500ms); break; } case EVENT_MINIBOSS_OPEN_PORTAL: @@ -1270,7 +1270,7 @@ public: } DoCastVictim(SPELL_SHADOW_BREATH, false); - events.RepeatEvent(17500); + events.Repeat(17500ms); break; } case EVENT_MINIBOSS_SHADOW_FISSURE: @@ -1279,7 +1279,7 @@ public: { DoCast(target, SPELL_SHADOW_FISSURE, false); } - events.RepeatEvent(22500); + events.Repeat(22500ms); break; } case EVENT_MINIBOSS_OPEN_PORTAL: diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp index 1e693b33a..ae4769284 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp @@ -191,7 +191,7 @@ public: void KilledUnit(Unit* /*victim*/) override { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) + if (!events.HasTimeUntilEvent(EVENT_KILL_TALK)) { Talk(SAY_KILL); events.ScheduleEvent(EVENT_KILL_TALK, 6s); diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp index ac9a9d734..f55d5f49a 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp @@ -136,7 +136,7 @@ public: void KilledUnit(Unit* /*victim*/) override { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) + if (!events.HasTimeUntilEvent(EVENT_KILL_TALK)) { Talk(SAY_KILL); events.ScheduleEvent(EVENT_KILL_TALK, 6s); diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index 6ff00560d..b5456dff7 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -310,7 +310,7 @@ public: void KilledUnit(Unit* victim) override { - if (victim->IsPlayer() && events.GetNextEventTime(EVENT_KILL_TALK) == 0) + if (victim->IsPlayer() && !events.HasTimeUntilEvent(EVENT_KILL_TALK)) { Talk(SAY_KILL); events.ScheduleEvent(EVENT_KILL_TALK, 6s); @@ -335,7 +335,7 @@ public: void DamageTaken(Unit* attacker, uint32& damage, DamageEffectType, SpellSchoolMask) override { - if (events.GetNextEventTime(EVENT_CHECK_HEALTH) != 0) + if (events.HasTimeUntilEvent(EVENT_CHECK_HEALTH)) return; if (!attacker || !me->InSamePhase(attacker)) @@ -477,7 +477,7 @@ public: void KilledUnit(Unit* victim) override { - if (victim->IsPlayer() && _events.GetNextEventTime(EVENT_KILL_TALK) == 0) + if (victim->IsPlayer() && !_events.HasTimeUntilEvent(EVENT_KILL_TALK)) { Talk(SAY_KILL); _events.ScheduleEvent(EVENT_KILL_TALK, 6s); @@ -598,7 +598,7 @@ public: void SetData(uint32 id, uint32 value) override { - if (_events.GetNextEventTime(EVENT_CHECK_CORPOREALITY) == 0) + if (!events.HasTimeUntilEvent(EVENT_CHECK_CORPOREALITY)) return; if (id == DATA_MATERIAL_DAMAGE_TAKEN) diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp index 539626595..26a0cf54d 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp @@ -121,7 +121,7 @@ public: void KilledUnit(Unit* /*victim*/) override { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) + if (!events.HasTimeUntilEvent(EVENT_KILL_TALK)) { Talk(SAY_KILL); events.ScheduleEvent(EVENT_KILL_TALK, 6s); diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp index 47f6266c6..cd4cf6eb8 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp @@ -125,8 +125,8 @@ public: void JustEngagedWith(Unit* /*who*/) override { events.Reset(); - events.ScheduleEvent(EVENT_SPELL_RADIANCE, 16000); - events.ScheduleEvent(EVENT_SPELL_HAMMER_RIGHTEOUS, 25000); + events.ScheduleEvent(EVENT_SPELL_RADIANCE, 16s); + events.ScheduleEvent(EVENT_SPELL_HAMMER_RIGHTEOUS, 25s); Talk(SAY_EADRIC_AGGRO); me->CastSpell(me, SPELL_VENGEANCE, false); if (pInstance) diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp index 47b89b162..95e711122 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp @@ -182,7 +182,7 @@ public: events.Reset(); events.ScheduleEvent(EVENT_ANNOUNCER_SAY_ZOMBIE, 2500ms); events.ScheduleEvent(EVENT_SPELL_PLAGUE_STRIKE, 7s, 9s); - events.ScheduleEvent(EVENT_SPELL_ICY_TOUCH, 3500ms, 7000ms); + events.ScheduleEvent(EVENT_SPELL_ICY_TOUCH, 3500ms, 7s); events.ScheduleEvent(EVENT_SPELL_DEATH_RESPITE, 13s, 15s); events.ScheduleEvent(EVENT_SPELL_OBLITERATE, 11s, 19s); } @@ -214,7 +214,7 @@ public: events.Reset(); events.ScheduleEvent(EVENT_SPELL_PLAGUE_STRIKE, 7s, 9s); - events.ScheduleEvent(EVENT_SPELL_ICY_TOUCH, 3500ms, 7000ms); + events.ScheduleEvent(EVENT_SPELL_ICY_TOUCH, 3500ms, 7s); events.ScheduleEvent(EVENT_SPELL_OBLITERATE, 11s, 19s); events.ScheduleEvent(EVENT_SPELL_DESECRATION, 2s, 3s); break; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp index 3ed2a5f79..68e8cb649 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp @@ -255,7 +255,7 @@ public: void JustEngagedWith(Unit* /*who*/) override { events.Reset(); - events.ScheduleEvent(EVENT_MOUNT_CHARGE, 2500ms, 4000ms); + events.ScheduleEvent(EVENT_MOUNT_CHARGE, 2500ms, 4s); events.ScheduleEvent(EVENT_SHIELD_BREAKER, 5s, 8s); events.ScheduleEvent(EVENT_THRUST, 3s, 5s); me->CastSpell(me, SPELL_TRAMPLE_AURA, true); @@ -311,7 +311,7 @@ public: me->CastSpell(target, SPELL_MINIONS_CHARGE, false); } } - events.Repeat(4500ms, 6000ms); + events.Repeat(4500ms, 6s); } break; case EVENT_SHIELD_BREAKER: @@ -372,7 +372,7 @@ public: me->CastSpell(me, SPELL_BOSS_DEFEND_PERIODIC, true); events.Reset(); - events.ScheduleEvent(EVENT_MOUNT_CHARGE, 2500ms, 4000ms); + events.ScheduleEvent(EVENT_MOUNT_CHARGE, 2500ms, 4s); events.ScheduleEvent(EVENT_SHIELD_BREAKER, 5s, 8s); events.ScheduleEvent(EVENT_THRUST, 3s, 5s); @@ -640,7 +640,7 @@ public: me->CastSpell(me, SPELL_BOSS_DEFEND_PERIODIC, true); me->SetRegeneratingHealth(true); events.Reset(); - events.ScheduleEvent(EVENT_MOUNT_CHARGE, 2500ms, 4000ms); + events.ScheduleEvent(EVENT_MOUNT_CHARGE, 2500ms, 4s); events.ScheduleEvent(EVENT_SHIELD_BREAKER, 5s, 8s); events.ScheduleEvent(EVENT_THRUST, 3s, 5s); me->SetReactState(REACT_AGGRESSIVE); @@ -766,7 +766,7 @@ public: me->CastSpell(target, SPELL_MINIONS_CHARGE, false); } } - events.Repeat(4500ms, 6000ms); + events.Repeat(4500ms, 6s); } break; case EVENT_SHIELD_BREAKER: diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp index 195d626a7..3342edfb0 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp @@ -23,7 +23,6 @@ #include "trial_of_the_champion.h" const Position SpawnPosition = {746.67f, 684.08f, 412.5f, 4.65f}; -#define CLEANUP_CHECK_INTERVAL 5000 /** * @todo: Missing dialog/RP (already populated in DB) && spawns (can use ToC25 locations?) for: @@ -88,7 +87,7 @@ public: VehicleList.clear(); CLEANED = false; events.Reset(); - events.RescheduleEvent(EVENT_CHECK_PLAYERS, 0); + events.RescheduleEvent(EVENT_CHECK_PLAYERS, 0ms); Counter = 0; temp1 = 0; temp2 = 0; @@ -268,7 +267,7 @@ public: if (DoNeedCleanup(player)) InstanceCleanup(); - events.RescheduleEvent(EVENT_CHECK_PLAYERS, CLEANUP_CHECK_INTERVAL); + events.RescheduleEvent(EVENT_CHECK_PLAYERS, 5s); } bool DoNeedCleanup(Player* ignoredPlayer = nullptr) @@ -443,7 +442,7 @@ public: Counter = 0; SaveToDB(); events.Reset(); - events.RescheduleEvent(EVENT_CHECK_PLAYERS, CLEANUP_CHECK_INTERVAL); + events.RescheduleEvent(EVENT_CHECK_PLAYERS, 5s); CLEANED = true; } @@ -785,7 +784,7 @@ public: { InstanceCleanup(); } - events.RepeatEvent(CLEANUP_CHECK_INTERVAL); + events.Repeat(5s); } break; case EVENT_SUMMON_GRAND_CHAMPION_1: @@ -812,7 +811,7 @@ public: while( number == temp1 || number == temp2 ); DoSummonGrandChampion(number, 2); HandleGameObject(GO_MainGateGUID, true); - events.ScheduleEvent(EVENT_CLOSE_GATE, 6000); + events.ScheduleEvent(EVENT_CLOSE_GATE, 6s); } break; case EVENT_CLOSE_GATE: diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp index e7762a71b..55410eea2 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp @@ -655,7 +655,7 @@ public: me->NearTeleportTo(target->GetPositionX() + cos(o) * 5.0f, target->GetPositionY() + std::sin(o) * 5.0f, target->GetPositionZ() + 0.6f, target->GetOrientation()); AttackStart(target); me->GetMotionMaster()->MoveChase(target); - events.DelayEvents(3000); + events.DelayEvents(3s); } } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp index 0a44e0f9d..4cc91611a 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_faction_champions.cpp @@ -119,7 +119,7 @@ struct boss_faction_championsAI : public ScriptedAI } /// @todo - Convert to std::chrono - void EventMapGCD(EventMap& e, uint32 delay, uint32 gcd = 0) + void EventMapGCD(EventMap& e, Milliseconds delay, uint32 gcd = 0) { e.DelayEventsToMax(delay, gcd); } @@ -316,43 +316,43 @@ public: if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_LIFEBLOOM, 40.0f)) me->CastSpell(target, SPELL_LIFEBLOOM, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_NOURISH: if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_NOURISH, 40.0f)) me->CastSpell(target, SPELL_NOURISH, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_REGROWTH: if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_REGROWTH, 40.0f)) me->CastSpell(target, SPELL_REGROWTH, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_REJUVENATION: if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_REJUVENATION, 40.0f)) me->CastSpell(target, SPELL_REJUVENATION, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_THORNS: if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_THORNS, 30.0f)) me->CastSpell(target, SPELL_THORNS, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_TRANQUILITY: me->CastSpell(me, SPELL_TRANQUILITY, false); events.Repeat(2min, 3min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_BARKSKIN: if (HealthBelowPct(50)) { me->CastSpell(me, SPELL_BARKSKIN, false); events.Repeat(1min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(6s); @@ -360,7 +360,7 @@ public: case EVENT_SPELL_NATURE_GRASP: me->CastSpell(me, SPELL_NATURE_GRASP, false); events.Repeat(1min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; } @@ -445,19 +445,19 @@ public: if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_HEALING_WAVE, 40.0f)) me->CastSpell(target, SPELL_HEALING_WAVE, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_RIPTIDE: if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_RIPTIDE, 40.0f)) me->CastSpell(target, SPELL_RIPTIDE, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_SPIRIT_CLEANSE: if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_SPIRIT_CLEANSE, 40.0f)) me->CastSpell(target, SPELL_SPIRIT_CLEANSE, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_HEROISM_OR_BLOODLUST: if (me->GetEntry() == NPC_ALLIANCE_SHAMAN_RESTORATION ) @@ -465,25 +465,25 @@ public: else me->CastSpell((Unit*)nullptr, SPELL_BLOODLUST, true); events.Repeat(10min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_HEX: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 20.0f, true)) me->CastSpell(target, SPELL_HEX, false); events.Repeat(45s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_EARTH_SHIELD: if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_EARTH_SHIELD, 40.0f)) me->CastSpell(target, SPELL_EARTH_SHIELD, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_EARTH_SHOCK: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_EARTH_SHOCK, false); events.Repeat(5s, 10s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; } @@ -568,14 +568,14 @@ public: if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_HAND_OF_FREEDOM, 30.0f)) me->CastSpell(target, SPELL_HAND_OF_FREEDOM, false); events.Repeat(25s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_BUBBLE: if (HealthBelowPct(25)) { me->CastSpell(me, SPELL_BUBBLE, false); events.Repeat(5min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(10s); @@ -584,32 +584,32 @@ public: if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_CLEANSE, 40.0f)) me->CastSpell(target, SPELL_CLEANSE, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_FLASH_OF_LIGHT: if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_FLASH_OF_LIGHT, 40.0f)) me->CastSpell(target, SPELL_FLASH_OF_LIGHT, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_HOLY_LIGHT: if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_HOLY_LIGHT, 40.0f)) me->CastSpell(target, SPELL_HOLY_LIGHT, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_HOLY_SHOCK: if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_HOLY_SHOCK, 40.0f)) me->CastSpell(target, SPELL_HOLY_SHOCK, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_HAND_OF_PROTECTION: if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_HAND_OF_PROTECTION, 40.0f)) { me->CastSpell(target, SPELL_HAND_OF_PROTECTION, false); events.Repeat(5min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(10s); @@ -619,7 +619,7 @@ public: { me->CastSpell(target, SPELL_HAMMER_OF_JUSTICE, false); events.Repeat(40s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(10s); @@ -701,32 +701,32 @@ public: if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_RENEW, 40.0f)) me->CastSpell(target, SPELL_RENEW, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_SHIELD: if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_SHIELD, 40.0f)) me->CastSpell(target, SPELL_SHIELD, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_FLASH_HEAL: if (Creature* target = SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_FLASH_HEAL, 40.0f)) me->CastSpell(target, SPELL_FLASH_HEAL, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_DISPEL: if (Unit* target = (urand(0, 1) ? SelectTarget(SelectTargetMethod::MaxThreat, 0, 30.0f, true) : SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_DISPEL, 40.0f))) me->CastSpell(target, SPELL_DISPEL, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_MANA_BURN: if (Unit* target = SelectEnemyCaster(false, 30.0f)) { me->CastSpell(target, SPELL_MANA_BURN, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(6s); @@ -736,7 +736,7 @@ public: { me->CastSpell((Unit*)nullptr, SPELL_PSYCHIC_SCREAM, false); events.Repeat(30s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(6s); @@ -825,7 +825,7 @@ public: { me->CastSpell(target, SPELL_SILENCE, false); events.Repeat(45s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; } else @@ -835,32 +835,32 @@ public: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_VAMPIRIC_TOUCH, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_SW_PAIN: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_SW_PAIN, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_MIND_FLAY: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_MIND_FLAY, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_MIND_BLAST: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_MIND_BLAST, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_HORROR: if (me->GetVictim() && me->GetExactDist2d(me->GetVictim()) <= 30.0f ) { me->CastSpell(me->GetVictim(), SPELL_HORROR, false); events.Repeat(2min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(10s); @@ -870,7 +870,7 @@ public: { me->CastSpell(me, SPELL_DISPERSION, false); events.Repeat(3min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(6s); @@ -879,14 +879,14 @@ public: if (Unit* target = (urand(0, 1) ? SelectTarget(SelectTargetMethod::MaxThreat, 0, 30.0f, true) : SelectTarget_MostHPLostFriendlyMissingBuff(SPELL_DISPEL, 40.0f))) me->CastSpell(target, SPELL_DISPEL, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_PSYCHIC_SCREAM: if (EnemiesInRange(8.0f) >= 3 ) { me->CastSpell((Unit*)nullptr, SPELL_PSYCHIC_SCREAM, false); events.Repeat(30s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(6s); @@ -989,7 +989,7 @@ public: { me->CastSpell((Unit*)nullptr, SPELL_HELLFIRE, false); events.Repeat(30s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(6s); @@ -998,43 +998,43 @@ public: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_CORRUPTION, false); events.Repeat(10s, 20s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_CURSE_OF_AGONY: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_CURSE_OF_AGONY, false); events.Repeat(10s, 20s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_CURSE_OF_EXHAUSTION: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_CURSE_OF_EXHAUSTION, false); events.Repeat(10s, 20s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_FEAR: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 20.0f, true)) me->CastSpell(target, SPELL_FEAR, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_SEARING_PAIN: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_SEARING_PAIN, false); events.Repeat(5s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_SHADOW_BOLT: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_SHADOW_BOLT, false); events.Repeat(5s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_UNSTABLE_AFFLICTION: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_UNSTABLE_AFFLICTION, false); events.Repeat(5s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; } @@ -1121,20 +1121,20 @@ public: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_ARCANE_BARRAGE, false); events.Repeat(5s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_ARCANE_BLAST: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_ARCANE_BLAST, false); events.Repeat(5s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_ARCANE_EXPLOSION: if (EnemiesInRange(9.0f) >= 3 ) { me->CastSpell((Unit*)nullptr, SPELL_ARCANE_EXPLOSION, false); events.Repeat(6s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(6s); @@ -1144,7 +1144,7 @@ public: { me->CastSpell((Unit*)nullptr, SPELL_FROST_NOVA, false); events.Repeat(15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); // blink disabled, movement not working } else @@ -1155,7 +1155,7 @@ public: { me->CastSpell(target, SPELL_COUNTERSPELL, false); events.Repeat(24s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(6s); @@ -1164,14 +1164,14 @@ public: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_FROSTBOLT, false); events.Repeat(5s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_ICE_BLOCK: if (HealthBelowPct(25)) { me->CastSpell(me, SPELL_ICE_BLOCK, false); events.Repeat(5min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(6s); @@ -1180,7 +1180,7 @@ public: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true)) me->CastSpell(target, SPELL_POLYMORPH, false); events.Repeat(15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; } @@ -1279,14 +1279,14 @@ public: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_AIMED_SHOT, false); events.Repeat(5s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_DETERRENCE: if (HealthBelowPct(25)) { me->CastSpell(me, SPELL_DETERRENCE, false); events.Repeat(90s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(6s); @@ -1296,7 +1296,7 @@ public: { me->CastSpell(me, SPELL_DISENGAGE, false); events.Repeat(20s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(6s); @@ -1305,31 +1305,31 @@ public: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_EXPLOSIVE_SHOT, false); events.Repeat(5s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_FROST_TRAP: me->CastSpell(me, SPELL_FROST_TRAP, false); events.Repeat(30s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_STEADY_SHOT: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_STEADY_SHOT, false); events.Repeat(5s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_WING_CLIP: if (me->GetVictim() && me->GetDistance2d(me->GetVictim()) <= 5.0f ) me->CastSpell(me->GetVictim(), SPELL_WING_CLIP, false); events.Repeat(8s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_WYVERN_STING: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 35.0f, true)) { me->CastSpell(target, SPELL_WYVERN_STING, false); events.Repeat(1min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; } events.Repeat(10s); @@ -1429,7 +1429,7 @@ public: { me->CastSpell(me, SPELL_BARKSKIN, false); events.Repeat(1min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(6s); @@ -1438,48 +1438,48 @@ public: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_WRATH, false); events.Repeat(5s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_MOONFIRE: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_MOONFIRE, false); events.Repeat(5s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_STARFIRE: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_STARFIRE, false); events.Repeat(5s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_INSECT_SWARM: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_INSECT_SWARM, false); events.Repeat(5s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_ENTANGLING_ROOTS: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 30.0f, true)) me->CastSpell(target, SPELL_ENTANGLING_ROOTS, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_FAERIE_FIRE: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_FAERIE_FIRE, false); events.Repeat(15s, 20s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_CYCLONE: if (Unit* target = SelectTarget(SelectTargetMethod::MaxDistance, 0, 20.0f, true)) me->CastSpell(target, SPELL_CYCLONE, false); events.Repeat(25s, 40s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_FORCE_OF_NATURE: me->CastSpell((Unit*)nullptr, SPELL_FORCE_OF_NATURE, false); events.Repeat(3min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; } @@ -1583,7 +1583,7 @@ public: { me->CastSpell((Unit*)nullptr, SPELL_INTIMIDATING_SHOUT, false); events.Repeat(2min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -1597,14 +1597,14 @@ public: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_MORTAL_STRIKE, false); events.Repeat(6s, 8s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_CHARGE: if (me->GetVictim() && me->GetDistance2d(me->GetVictim()) > 8.0f && me->GetDistance2d(me->GetVictim()) < 25.0f ) { me->CastSpell(me->GetVictim(), SPELL_CHARGE, false); events.Repeat(10s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -1614,7 +1614,7 @@ public: { me->CastSpell(me->GetVictim(), SPELL_DISARM, false); events.Repeat(1min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -1629,7 +1629,7 @@ public: { me->CastSpell(me->GetVictim(), SPELL_OVERPOWER, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -1644,7 +1644,7 @@ public: { me->CastSpell(me->GetVictim(), SPELL_SUNDER_ARMOR, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -1659,7 +1659,7 @@ public: { me->CastSpell(me->GetVictim(), SPELL_SHATTERING_THROW, false); events.Repeat(5min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(6s); @@ -1674,7 +1674,7 @@ public: { me->CastSpell(me, SPELL_RETALIATION, false); events.Repeat(5min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -1760,7 +1760,7 @@ public: { me->CastSpell(me->GetVictim(), SPELL_CHAINS_OF_ICE, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -1770,7 +1770,7 @@ public: { me->CastSpell(me->GetVictim(), SPELL_DEATH_COIL, false); events.Repeat(5s, 8s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -1785,7 +1785,7 @@ public: pos.Relocate(x, y, z); me->GetVictim()->CastSpell(pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), 49575, true); events.Repeat(35s); - EventMapGCD(events, 2000); + EventMapGCD(events, 2s); } else events.Repeat(5s); @@ -1800,7 +1800,7 @@ public: { me->CastSpell(me->GetVictim(), SPELL_FROST_STRIKE, false); events.Repeat(6s, 10s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -1810,7 +1810,7 @@ public: { me->CastSpell(me, SPELL_ICEBOUND_FORTITUDE, false); events.Repeat(1min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(6s); @@ -1820,7 +1820,7 @@ public: { me->CastSpell(me->GetVictim(), SPELL_ICY_TOUCH, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -1830,7 +1830,7 @@ public: { me->CastSpell(me->GetVictim(), SPELL_STRANGULATE, false); events.Repeat(2min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -1922,7 +1922,7 @@ public: { me->CastSpell(me->GetVictim(), SPELL_FAN_OF_KNIVES, false); events.Repeat(6s, 10s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -1932,7 +1932,7 @@ public: { me->CastSpell(target, SPELL_BLIND, false); events.Repeat(2min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -1942,7 +1942,7 @@ public: { me->CastSpell(me, SPELL_CLOAK, false); events.Repeat(90s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(6s); @@ -1954,7 +1954,7 @@ public: { me->CastSpell(me, SPELL_BLADE_FLURRY, false); events.Repeat(2min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } break; case EVENT_SPELL_SHADOWSTEP: @@ -1962,7 +1962,7 @@ public: { me->CastSpell(me->GetVictim(), SPELL_SHADOWSTEP, false); events.Repeat(30s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -1977,7 +1977,7 @@ public: { me->CastSpell(me->GetVictim(), SPELL_HEMORRHAGE, false); events.Repeat(5s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -1992,7 +1992,7 @@ public: { me->CastSpell(me->GetVictim(), SPELL_EVISCERATE, false); events.Repeat(15s, 25s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -2080,7 +2080,7 @@ public: { me->CastSpell(target, SPELL_EARTH_SHOCK_ENH, false); events.Repeat(6s, 8s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -2095,7 +2095,7 @@ public: { me->CastSpell(target, SPELL_LAVA_LASH, false); events.Repeat(6s, 8s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -2110,7 +2110,7 @@ public: { me->CastSpell(target, SPELL_STORMSTRIKE, false); events.Repeat(8s, 9s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -2121,12 +2121,12 @@ public: else me->CastSpell((Unit*)nullptr, SPELL_BLOODLUST, true); events.Repeat(10min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SUMMON_TOTEM: me->CastSpell((Unit*)nullptr, RAND(SPELL_GROUNDING_TOTEM, SPELL_WINDFURY_TOTEM, SPELL_TREMOR_TOTEM), false); events.Repeat(30s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; } @@ -2211,7 +2211,7 @@ public: case EVENT_SPELL_AVENGING_WRATH: me->CastSpell(me, SPELL_AVENGING_WRATH, false); events.Repeat(3min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_CRUSADER_STRIKE: if (me->HasUnitFlag(UNIT_FLAG_DISARMED)) @@ -2223,7 +2223,7 @@ public: { me->CastSpell(target, SPELL_CRUSADER_STRIKE, false); events.Repeat(6s, 8s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -2233,7 +2233,7 @@ public: { me->CastSpell(me, SPELL_DIVINE_SHIELD, false); events.Repeat(5min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -2248,7 +2248,7 @@ public: { me->CastSpell((Unit*)nullptr, SPELL_DIVINE_STORM, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -2258,7 +2258,7 @@ public: { me->CastSpell(target, SPELL_HAMMER_OF_JUSTICE_RET, false); events.Repeat(40s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -2268,7 +2268,7 @@ public: { me->CastSpell(target, SPELL_HAND_OF_PROTECTION_RET, false); events.Repeat(5min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -2278,7 +2278,7 @@ public: { me->CastSpell(target, SPELL_JUDGEMENT_OF_COMMAND, false); events.Repeat(10s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -2288,7 +2288,7 @@ public: { me->CastSpell(target, SPELL_REPENTANCE, false); events.Repeat(1min); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); } else events.Repeat(5s); @@ -2357,13 +2357,13 @@ public: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_DEVOUR_MAGIC, false); events.Repeat(8s, 15s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; case EVENT_SPELL_SPELL_LOCK: if (me->GetVictim()) me->CastSpell(me->GetVictim(), SPELL_SPELL_LOCK, false); events.Repeat(24s); - EventMapGCD(events, 1500); + EventMapGCD(events, 1500ms); break; } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp index 9ad8b6230..5e99f2353 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_northrend_beasts.cpp @@ -848,7 +848,7 @@ public: me->CastSpell(me, SPELL_STAGGERED_DAZE, true); me->CastSpell((Unit*)nullptr, SPELL_TRAMPLE, true); Talk(EMOTE_TRAMPLE_CRASH); - events.DelayEvents(15000); + events.DelayEvents(15s); } else { diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp index 372081fe0..2eb540e02 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp @@ -384,7 +384,7 @@ struct boss_twin_valkyrAI : public ScriptedAI /* if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true, essenceId)) me->CastSpell(target, me->GetEntry()==NPC_LIGHTBANE ? SPELL_LIGHT_TOUCH : SPELL_DARK_TOUCH, false); - events.RepeatEvent(urand(45000,50000)); + events.Repeat(45s,50s); */ GuidVector tList; @@ -458,7 +458,7 @@ struct boss_twin_valkyrAI : public ScriptedAI if ((SpecialMask & 0xF) == 0xF ) SpecialMask = 0; events.Repeat(45s); - events.DelayEventsToMax(15000, 1); // no touch of light/darkness during special abilities! + events.DelayEventsToMax(15s, 1); // no touch of light/darkness during special abilities! } break; case EVENT_REMOVE_DUAL_WIELD: diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp index 7dc9c0c59..71dcb5e85 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp @@ -175,7 +175,7 @@ public: bSwitcher = false; bNooneDied = true; events.Reset(); - events.RescheduleEvent(EVENT_CHECK_PLAYERS, 0); + events.RescheduleEvent(EVENT_CHECK_PLAYERS, 0ms); NPC_ChampionGUIDs.clear(); } @@ -295,22 +295,22 @@ public: switch (InstanceProgress) { case INSTANCE_PROGRESS_INITIAL: - events.RescheduleEvent(EVENT_SCENE_001, 0); + events.RescheduleEvent(EVENT_SCENE_001, 0ms); break; case INSTANCE_PROGRESS_INTRO_DONE: - events.RescheduleEvent(EVENT_SCENE_004, 0); + events.RescheduleEvent(EVENT_SCENE_004, 0ms); break; case INSTANCE_PROGRESS_BEASTS_DEAD: - events.RescheduleEvent(EVENT_SCENE_101, 0); + events.RescheduleEvent(EVENT_SCENE_101, 0ms); break; case INSTANCE_PROGRESS_JARAXXUS_DEAD: - events.RescheduleEvent(EVENT_SCENE_201, 0); + events.RescheduleEvent(EVENT_SCENE_201, 0ms); break; case INSTANCE_PROGRESS_FACTION_CHAMPIONS_DEAD: - events.RescheduleEvent(EVENT_SCENE_301, 0); + events.RescheduleEvent(EVENT_SCENE_301, 0ms); break; case INSTANCE_PROGRESS_VALKYR_DEAD: - events.RescheduleEvent(EVENT_SCENE_401, 0); + events.RescheduleEvent(EVENT_SCENE_401, 0ms); break; } break; @@ -331,7 +331,7 @@ public: if ((northrendBeastsMask & 7) == 7) SetData(TYPE_NORTHREND_BEASTS_ALL, DONE); else if ((northrendBeastsMask & 16) == 0) - events.RescheduleEvent(EVENT_SCENE_005, 2500); + events.RescheduleEvent(EVENT_SCENE_005, 2500ms); } break; case TYPE_JORMUNGAR: @@ -363,7 +363,7 @@ public: else if ((northrendBeastsMask & 32) == 0) { Counter = 0; - events.RescheduleEvent(EVENT_SCENE_006, 2500); + events.RescheduleEvent(EVENT_SCENE_006, 2500ms); } } else // first one died, start timer for achievement @@ -390,7 +390,7 @@ public: InstanceProgress = INSTANCE_PROGRESS_BEASTS_DEAD; HandleGameObject(GO_EnterGateGUID, true); events.CancelEvent(EVENT_NORTHREND_BEASTS_ENRAGE); - events.RescheduleEvent(EVENT_SCENE_BEASTS_DONE, 2500); + events.RescheduleEvent(EVENT_SCENE_BEASTS_DONE, 2500ms); SaveToDB(); } break; @@ -402,7 +402,7 @@ public: { HandleGameObject(GO_EnterGateGUID, true); InstanceProgress = INSTANCE_PROGRESS_JARAXXUS_DEAD; - events.RescheduleEvent(EVENT_SCENE_110, 2500); + events.RescheduleEvent(EVENT_SCENE_110, 2500ms); SaveToDB(); } break; @@ -416,7 +416,7 @@ public: Counter = 0; EncounterStatus = NOT_STARTED; InstanceProgress = INSTANCE_PROGRESS_FACTION_CHAMPIONS_DEAD; - events.RescheduleEvent(EVENT_SCENE_FACTION_CHAMPIONS_DEAD, 2500); + events.RescheduleEvent(EVENT_SCENE_FACTION_CHAMPIONS_DEAD, 2500ms); for (ObjectGuid const& guid : NPC_ChampionGUIDs) if (Creature* c = instance->GetCreature(guid)) @@ -491,7 +491,7 @@ public: InstanceProgress = INSTANCE_PROGRESS_VALKYR_DEAD; DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE, 34497, 1); // Lightbane DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_KILL_CREATURE, 34496, 1); // Darkbane - events.RescheduleEvent(EVENT_SCENE_VALKYR_DEAD, 2500); + events.RescheduleEvent(EVENT_SCENE_VALKYR_DEAD, 2500ms); HandleGameObject(GO_EnterGateGUID, true); SaveToDB(); } @@ -516,7 +516,7 @@ public: c->UpdatePosition(Locs[LOC_TIRION_FINAL], true); c->StopMovingOnCurrentPos(); c->SetFacingTo(Locs[LOC_TIRION_FINAL].GetOrientation()); - events.RescheduleEvent(EVENT_SCENE_501, 20000); + events.RescheduleEvent(EVENT_SCENE_501, 20s); } if (GameObject* floor = instance->GetGameObject(GO_FloorGUID)) floor->SetDestructibleState(GO_DESTRUCTIBLE_REBUILDING, nullptr, true); @@ -591,7 +591,7 @@ public: if (Creature* c = instance->GetCreature(NPC_TirionGUID)) c->AI()->Talk(SAY_STAGE_0_01); - events.RescheduleEvent(EVENT_SCENE_002, 22000); + events.RescheduleEvent(EVENT_SCENE_002, 22s); } break; case EVENT_SCENE_002: @@ -599,7 +599,7 @@ public: if (Creature* c = instance->GetCreature(NPC_VarianGUID)) c->AI()->Talk(SAY_STAGE_0_03a); - events.RescheduleEvent(EVENT_SCENE_003, 5000); + events.RescheduleEvent(EVENT_SCENE_003, 5s); } break; case EVENT_SCENE_003: @@ -607,7 +607,7 @@ public: if (Creature* c = instance->GetCreature(NPC_GarroshGUID)) c->AI()->Talk(SAY_STAGE_0_03h); - events.RescheduleEvent(EVENT_SCENE_004, 8000); + events.RescheduleEvent(EVENT_SCENE_004, 8s); } break; case EVENT_SCENE_004: @@ -620,12 +620,12 @@ public: HandleGameObject(GO_MainGateGUID, true); HandleGameObject(GO_EnterGateGUID, false); - events.RescheduleEvent(EVENT_SUMMON_GORMOK, 1000); + events.RescheduleEvent(EVENT_SUMMON_GORMOK, 1s); if (instance->IsHeroic()) { - events.RescheduleEvent(EVENT_SCENE_005, 150000); - events.RescheduleEvent(EVENT_SCENE_006, 340000); - events.RescheduleEvent(EVENT_NORTHREND_BEASTS_ENRAGE, 520000); + events.RescheduleEvent(EVENT_SCENE_005, 150s); + events.RescheduleEvent(EVENT_SCENE_006, 340s); + events.RescheduleEvent(EVENT_NORTHREND_BEASTS_ENRAGE, 520s); } } break; @@ -650,8 +650,8 @@ public: if (Creature* gormok = c->SummonCreature(NPC_GORMOK, Locs[LOC_BEHIND_GATE].GetPositionX(), Locs[LOC_BEHIND_GATE].GetPositionY(), Locs[LOC_BEHIND_GATE].GetPositionZ(), Locs[LOC_BEHIND_GATE].GetOrientation(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30000)) gormok->GetMotionMaster()->MovePoint(0, Locs[LOC_GATE_FRONT].GetPositionX(), Locs[LOC_GATE_FRONT].GetPositionY(), Locs[LOC_GATE_FRONT].GetPositionZ()); - events.RescheduleEvent(EVENT_GORMOK_ATTACK, 10000); - events.RescheduleEvent(EVENT_CLOSE_GATE, 6000); + events.RescheduleEvent(EVENT_GORMOK_ATTACK, 10s); + events.RescheduleEvent(EVENT_CLOSE_GATE, 6s); } break; case EVENT_GORMOK_ATTACK: @@ -676,8 +676,8 @@ public: if (Creature* c = instance->GetCreature(NPC_TirionGUID)) c->AI()->Talk(SAY_STAGE_0_04); - events.RescheduleEvent(EVENT_OPEN_GATE, 3000); - events.RescheduleEvent(EVENT_SUMMON_ACIDMAW_AND_DREADSCALE, 4000); + events.RescheduleEvent(EVENT_OPEN_GATE, 3s); + events.RescheduleEvent(EVENT_SUMMON_ACIDMAW_AND_DREADSCALE, 4s); break; } case EVENT_SUMMON_ACIDMAW_AND_DREADSCALE: @@ -690,7 +690,7 @@ public: acidmaw->AddAura(53421, acidmaw); } - events.RescheduleEvent(EVENT_SCENE_005_2, 4000); + events.RescheduleEvent(EVENT_SCENE_005_2, 4s); break; } @@ -699,7 +699,7 @@ public: if (Creature* dreadscale = instance->GetCreature(NPC_DreadscaleGUID)) dreadscale->GetMotionMaster()->MovePoint(0, Locs[LOC_DREADSCALE].GetPositionX(), Locs[LOC_DREADSCALE].GetPositionY(), Locs[LOC_DREADSCALE].GetPositionZ()); - events.RescheduleEvent(EVENT_ACIDMAW_AND_DREADSCALE_ATTACK, 7000); + events.RescheduleEvent(EVENT_ACIDMAW_AND_DREADSCALE_ATTACK, 7s); break; } case EVENT_ACIDMAW_AND_DREADSCALE_ATTACK: @@ -737,8 +737,8 @@ public: if (Creature* c = instance->GetCreature(NPC_TirionGUID)) c->AI()->Talk(SAY_STAGE_0_05); - events.RescheduleEvent(EVENT_OPEN_GATE, 2000); - events.RescheduleEvent(EVENT_SUMMON_ICEHOWL, 3000); + events.RescheduleEvent(EVENT_OPEN_GATE, 2s); + events.RescheduleEvent(EVENT_SUMMON_ICEHOWL, 3s); break; } case EVENT_SUMMON_ICEHOWL: @@ -747,8 +747,8 @@ public: if (Creature* icehowl = c->SummonCreature(NPC_ICEHOWL, Locs[LOC_BEHIND_GATE].GetPositionX(), Locs[LOC_BEHIND_GATE].GetPositionY(), Locs[LOC_BEHIND_GATE].GetPositionZ(), Locs[LOC_BEHIND_GATE].GetOrientation(), TEMPSUMMON_CORPSE_TIMED_DESPAWN, 630000000)) icehowl->GetMotionMaster()->MovePoint(0, Locs[LOC_GATE_FRONT].GetPositionX(), Locs[LOC_GATE_FRONT].GetPositionY(), Locs[LOC_GATE_FRONT].GetPositionZ()); - events.RescheduleEvent(EVENT_ICEHOWL_ATTACK, 10000); - events.RescheduleEvent(EVENT_CLOSE_GATE, 6000); + events.RescheduleEvent(EVENT_ICEHOWL_ATTACK, 10s); + events.RescheduleEvent(EVENT_CLOSE_GATE, 6s); break; } case EVENT_ICEHOWL_ATTACK: @@ -785,7 +785,7 @@ public: fizzlebang->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); fizzlebang->GetMotionMaster()->MovePoint(0, Locs[LOC_BEHIND_GATE].GetPositionX(), Locs[LOC_BEHIND_GATE].GetPositionY() - 65.0f, Locs[LOC_BEHIND_GATE].GetPositionZ() - 1.0f); } - events.RescheduleEvent(EVENT_SCENE_102, 20000); + events.RescheduleEvent(EVENT_SCENE_102, 20s); // move Icehowl to side, can't remove corpse because of loot! if (Creature* icehowl = instance->GetCreature(NPC_IcehowlGUID)) @@ -803,7 +803,7 @@ public: if (Creature* c = instance->GetCreature(NPC_FizzlebangGUID)) c->AI()->Talk(SAY_STAGE_1_02); - events.RescheduleEvent(EVENT_SCENE_103, 11000); + events.RescheduleEvent(EVENT_SCENE_103, 11s); break; } case EVENT_SCENE_103: @@ -816,7 +816,7 @@ public: NPC_PurpleGroundGUID = trigger->GetGUID(); } - events.RescheduleEvent(EVENT_SCENE_104, 5000); + events.RescheduleEvent(EVENT_SCENE_104, 5s); break; } case EVENT_SCENE_104: @@ -833,7 +833,7 @@ public: c->HandleEmoteCommand(EMOTE_STATE_SPELL_PRECAST); } - events.RescheduleEvent(EVENT_SUMMON_JARAXXUS, 5000); + events.RescheduleEvent(EVENT_SUMMON_JARAXXUS, 5s); break; } case EVENT_SUMMON_JARAXXUS: @@ -846,7 +846,7 @@ public: c->AI()->Talk(SAY_STAGE_1_04); } - events.RescheduleEvent(EVENT_SCENE_105, 3000); + events.RescheduleEvent(EVENT_SCENE_105, 3s); break; } case EVENT_SCENE_105: @@ -860,7 +860,7 @@ public: c->DespawnOrUnsummon(); NPC_PortalGUID.Clear(); - events.RescheduleEvent(EVENT_SCENE_106, 10000); + events.RescheduleEvent(EVENT_SCENE_106, 10s); break; } case EVENT_SCENE_106: @@ -868,7 +868,7 @@ public: if (Creature* c = instance->GetCreature(NPC_JaraxxusGUID)) c->AI()->Talk(SAY_STAGE_1_05); - events.RescheduleEvent(EVENT_SCENE_107, 5000); + events.RescheduleEvent(EVENT_SCENE_107, 5s); break; } case EVENT_SCENE_107: @@ -876,7 +876,7 @@ public: if (Creature* c = instance->GetCreature(NPC_FizzlebangGUID)) c->AI()->Talk(SAY_STAGE_1_06); - events.RescheduleEvent(EVENT_SCENE_108, 800); + events.RescheduleEvent(EVENT_SCENE_108, 800ms); break; } case EVENT_SCENE_108: @@ -891,7 +891,7 @@ public: } } - events.RescheduleEvent(EVENT_SCENE_109, 5000); + events.RescheduleEvent(EVENT_SCENE_109, 5s); break; } case EVENT_SCENE_109: @@ -901,7 +901,7 @@ public: if (Creature* c = instance->GetCreature(NPC_TirionGUID)) c->AI()->Talk(SAY_STAGE_1_07); - events.RescheduleEvent(EVENT_JARAXXUS_ATTACK, 6000); + events.RescheduleEvent(EVENT_JARAXXUS_ATTACK, 6s); break; } case EVENT_JARAXXUS_ATTACK: @@ -925,7 +925,7 @@ public: if (Creature* c = instance->GetCreature(NPC_TirionGUID)) c->AI()->Talk(SAY_STAGE_1_08); - events.RescheduleEvent(EVENT_SCENE_111, 18000); + events.RescheduleEvent(EVENT_SCENE_111, 18s); break; } case EVENT_SCENE_111: @@ -933,7 +933,7 @@ public: if (Creature* c = instance->GetCreature(NPC_GarroshGUID)) c->AI()->Talk(SAY_STAGE_1_09); - events.RescheduleEvent(EVENT_SCENE_112, 9000); + events.RescheduleEvent(EVENT_SCENE_112, 9s); break; } case EVENT_SCENE_112: @@ -941,7 +941,7 @@ public: if (Creature* c = instance->GetCreature(NPC_VarianGUID)) c->AI()->Talk(SAY_STAGE_1_10); - events.RescheduleEvent(EVENT_SCENE_113, 5000); + events.RescheduleEvent(EVENT_SCENE_113, 5s); break; } case EVENT_SCENE_113: @@ -965,7 +965,7 @@ public: if (Creature* c = instance->GetCreature(NPC_TirionGUID)) c->AI()->Talk(SAY_STAGE_2_01); - events.RescheduleEvent(EVENT_SCENE_202, 9000); + events.RescheduleEvent(EVENT_SCENE_202, 9s); break; } case EVENT_SCENE_202: @@ -974,13 +974,13 @@ public: { if (Creature* c = instance->GetCreature(NPC_GarroshGUID)) c->AI()->Talk(SAY_STAGE_2_02h); - events.RescheduleEvent(EVENT_SCENE_203, 15000); + events.RescheduleEvent(EVENT_SCENE_203, 15s); } else { if (Creature* c = instance->GetCreature(NPC_VarianGUID)) c->AI()->Talk(SAY_STAGE_2_02a); - events.RescheduleEvent(EVENT_SCENE_203, 18000); + events.RescheduleEvent(EVENT_SCENE_203, 18s); } break; } @@ -989,7 +989,7 @@ public: if (Creature* c = instance->GetCreature(NPC_TirionGUID)) c->AI()->Talk(SAY_STAGE_2_03); - events.RescheduleEvent(EVENT_SCENE_204, 5000); + events.RescheduleEvent(EVENT_SCENE_204, 5s); break; } case EVENT_SCENE_204: @@ -998,16 +998,16 @@ public: { if (Creature* c = instance->GetCreature(NPC_GarroshGUID)) c->AI()->Talk(SAY_STAGE_2_04h); - events.RescheduleEvent(EVENT_SCENE_205, 6000); + events.RescheduleEvent(EVENT_SCENE_205, 6s); } else { if (Creature* c = instance->GetCreature(NPC_VarianGUID)) c->AI()->Talk(SAY_STAGE_2_04a); - events.RescheduleEvent(EVENT_SCENE_205, 5000); + events.RescheduleEvent(EVENT_SCENE_205, 5s); } - events.RescheduleEvent(EVENT_SUMMON_CHAMPIONS, 2500); + events.RescheduleEvent(EVENT_SUMMON_CHAMPIONS, 2500ms); break; } case EVENT_SCENE_205: @@ -1089,7 +1089,7 @@ public: } HandleGameObject(GO_EnterGateGUID, false); - events.RescheduleEvent(EVENT_CHAMPIONS_ATTACK, 4000); + events.RescheduleEvent(EVENT_CHAMPIONS_ATTACK, 4s); break; } case EVENT_CHAMPIONS_ATTACK: @@ -1122,7 +1122,7 @@ public: if (Creature* c = instance->GetCreature(NPC_TirionGUID)) c->AI()->Talk(SAY_STAGE_3_01); - events.RescheduleEvent(EVENT_SCENE_302, 13000); + events.RescheduleEvent(EVENT_SCENE_302, 13s); break; } case EVENT_SCENE_302: @@ -1130,7 +1130,7 @@ public: if (Creature* c = instance->GetCreature(NPC_TirionGUID)) c->AI()->Talk(SAY_STAGE_3_02); - events.RescheduleEvent(EVENT_SCENE_303, 3000); + events.RescheduleEvent(EVENT_SCENE_303, 3s); break; } case EVENT_SCENE_303: @@ -1145,7 +1145,7 @@ public: t->GetMotionMaster()->MovePoint(0, Locs[LOC_VALKYR_DEST_LEFT].GetPositionX(), Locs[LOC_VALKYR_DEST_LEFT].GetPositionY(), Locs[LOC_VALKYR_DEST_LEFT].GetPositionZ()); } - events.RescheduleEvent(EVENT_SCENE_304, 6250); + events.RescheduleEvent(EVENT_SCENE_304, 6250ms); break; } case EVENT_SCENE_304: @@ -1157,7 +1157,7 @@ public: if (Creature* c = instance->GetCreature(NPC_DarkbaneGUID)) c->GetMotionMaster()->MovePoint(0, Locs[LOC_VALKYR_DEST_2_LEFT].GetPositionX(), Locs[LOC_VALKYR_DEST_2_LEFT].GetPositionY(), Locs[LOC_VALKYR_DEST_2_LEFT].GetPositionZ()); - events.RescheduleEvent(EVENT_VALKYRIES_ATTACK, 3250); + events.RescheduleEvent(EVENT_VALKYRIES_ATTACK, 3250ms); break; } case EVENT_VALKYRIES_ATTACK: @@ -1189,7 +1189,7 @@ public: if (Creature* c = instance->GetCreature(GetTeamIdInInstance() == TEAM_ALLIANCE ? NPC_VarianGUID : NPC_GarroshGUID)) c->AI()->Talk((GetTeamIdInInstance() == TEAM_ALLIANCE ? SAY_STAGE_3_03a : SAY_STAGE_3_03h)); - events.RescheduleEvent(EVENT_SCENE_401, 60000); + events.RescheduleEvent(EVENT_SCENE_401, 60s); break; } case EVENT_SCENE_401: @@ -1197,7 +1197,7 @@ public: if (Creature* c = instance->GetCreature(NPC_TirionGUID)) c->AI()->Talk(SAY_STAGE_4_01); - events.RescheduleEvent(EVENT_SCENE_402, 20000); + events.RescheduleEvent(EVENT_SCENE_402, 20s); break; } case EVENT_SCENE_402: @@ -1214,7 +1214,7 @@ public: t->SetVisible(false); } - events.RescheduleEvent(EVENT_SCENE_403, 2000); + events.RescheduleEvent(EVENT_SCENE_403, 2s); break; } case EVENT_SCENE_403: @@ -1226,7 +1226,7 @@ public: t->CastSpell(t, 51807, true); } - events.RescheduleEvent(EVENT_SCENE_404, 2000); + events.RescheduleEvent(EVENT_SCENE_404, 2s); break; } case EVENT_SCENE_404: @@ -1238,7 +1238,7 @@ public: c->GetMotionMaster()->MovePoint(0, Locs[LOC_ARTHAS]); } - events.RescheduleEvent(EVENT_SCENE_405, 3000); + events.RescheduleEvent(EVENT_SCENE_405, 3s); break; } case EVENT_SCENE_405: @@ -1246,7 +1246,7 @@ public: if (Creature* c = instance->GetCreature(NPC_TirionGUID)) c->AI()->Talk(SAY_STAGE_4_03); - events.RescheduleEvent(EVENT_SCENE_406, 7000); + events.RescheduleEvent(EVENT_SCENE_406, 7s); break; } case EVENT_SCENE_406: @@ -1257,8 +1257,8 @@ public: c->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH); } - events.RescheduleEvent(EVENT_SCENE_406_2, 2500); - events.RescheduleEvent(EVENT_SCENE_407, 12000); + events.RescheduleEvent(EVENT_SCENE_406_2, 2500ms); + events.RescheduleEvent(EVENT_SCENE_407, 12s); break; } case EVENT_SCENE_406_2: @@ -1276,7 +1276,7 @@ public: if (Creature* c = instance->GetCreature(NPC_LichKingGUID)) c->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); - events.RescheduleEvent(EVENT_SCENE_408, 4000); + events.RescheduleEvent(EVENT_SCENE_408, 4s); break; } case EVENT_SCENE_408: @@ -1286,7 +1286,7 @@ public: c->HandleEmoteCommand(EMOTE_ONESHOT_KNEEL); } - events.RescheduleEvent(EVENT_SCENE_409, 1500); + events.RescheduleEvent(EVENT_SCENE_409, 1500ms); break; } case EVENT_SCENE_409: @@ -1305,7 +1305,7 @@ public: SpawnAnubArak(); } - events.RescheduleEvent(EVENT_SCENE_410, 2000); + events.RescheduleEvent(EVENT_SCENE_410, 2s); break; } case EVENT_SCENE_410: @@ -1328,7 +1328,7 @@ public: c->SummonGameObject(195682, 668.15f, 134.57f, 142.12f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 630000000); } - events.RescheduleEvent(EVENT_SCENE_502, 20000); + events.RescheduleEvent(EVENT_SCENE_502, 20s); break; } case EVENT_SCENE_502: diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp index b4bbcfc56..a1e01ee32 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_novos.cpp @@ -167,7 +167,7 @@ public: void KilledUnit(Unit* /*victim*/) override { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) + if (!events.HasTimeUntilEvent(EVENT_KILL_TALK)) { Talk(SAY_KILL); events.ScheduleEvent(EVENT_KILL_TALK, 6s); diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp index ac241e409..94e9f2dfa 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_tharon_ja.cpp @@ -104,7 +104,7 @@ public: void KilledUnit(Unit* /*victim*/) override { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) + if (!events.HasTimeUntilEvent(EVENT_KILL_TALK)) { Talk(SAY_KILL); events.ScheduleEvent(EVENT_KILL_TALK, 6s); diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp index 1de17ba57..809896977 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp @@ -102,7 +102,7 @@ public: void KilledUnit(Unit* /*victim*/) override { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) + if (!events.HasTimeUntilEvent(EVENT_KILL_TALK)) { Talk(SAY_KILL); events.ScheduleEvent(EVENT_KILL_TALK, 6s); diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp index c8d14deaa..7feed77da 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp @@ -115,7 +115,7 @@ public: me->GetMotionMaster()->MoveIdle(); me->CastSpell(me, SPELL_TELEPORT, false); events.CancelEvent(EVENT_SPELL_CORRUPT_SOUL); - events.DelayEvents(6000); + events.DelayEvents(6s); events.RescheduleEvent(EVENT_SPELL_FEAR, 8s, 14s); } } diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp index b848dd285..c4160dd52 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_devourer_of_souls.cpp @@ -225,14 +225,14 @@ public: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true)) me->CastSpell(target, SPELL_WELL_OF_SOULS, false); events.Repeat(25s, 30s); - events.DelayEventsToMax(4000, 0); + events.DelayEventsToMax(4s, 0); break; case EVENT_SPELL_UNLEASHED_SOULS: me->CastSpell(me, SPELL_UNLEASHED_SOULS, false); Talk(SAY_FACE_UNLEASH_SOUL); Talk(EMOTE_UNLEASH_SOUL); events.Repeat(30s, 40s); - events.DelayEventsToMax(5000, 0); + events.DelayEventsToMax(5s, 0); me->setAttackTimer(BASE_ATTACK, 5500); break; case EVENT_SPELL_WAILING_SOULS: @@ -241,7 +241,7 @@ public: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true)) me->CastCustomSpell(SPELL_WAILING_SOULS_TARGETING, SPELLVALUE_MAX_TARGETS, 1, target, false); events.Repeat(80s); - events.DelayEventsToMax(20000, 0); + events.DelayEventsToMax(20s, 0); break; } diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp index d5e01c2da..33c5167f2 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/boss_falric.cpp @@ -131,7 +131,7 @@ public: Talk(SAY_DEFILING_HORROR); me->CastSpell((Unit*)nullptr, SPELL_DEFILING_HORROR, false); me->SetControlled(true, UNIT_STATE_ROOT); - events.DelayEventsToMax(5000, 0); + events.DelayEventsToMax(5s, 0); events.ScheduleEvent(EVENT_UNROOT, 4s); events.ScheduleEvent(EVENT_DEFILING_HORROR, 20s); break; diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index c4b0bdcc7..66e3444e7 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -658,7 +658,7 @@ public: pLichKing->SendMovementFlagUpdate(); pLichKing->CastSpell(pLichKing, SPELL_FROSTMOURNE_EQUIP, false); pInstance->HandleGameObject(pInstance->GetGuidData(GO_FROSTMOURNE), false); - events.ScheduleEvent(EVENT_INTRO_LK_4_3, 1750); + events.ScheduleEvent(EVENT_INTRO_LK_4_3, 1750ms); } events.ScheduleEvent(EVENT_INTRO_LK_5, 6s); break; @@ -1732,7 +1732,7 @@ public: { ++reqKillCount; - if (events.GetNextEventTime(EVENT_DECREASE_REQ_COUNT_BY_100)) + if (events.HasTimeUntilEvent(EVENT_DECREASE_REQ_COUNT_BY_100)) events.RescheduleEvent(EVENT_DECREASE_REQ_COUNT_BY_100, 10s); summons.Summon(s); s->SetHomePosition(PathWaypoints[WP_STOP[currentWall + 1]]); diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp index 8d6028025..081190882 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_forgemaster_garfrost.cpp @@ -112,7 +112,7 @@ public: Talk(SAY_AGGRO); DoZoneInCombat(); - events.RescheduleEvent(EVENT_SPELL_THROW_SARONITE, 5000ms, 7500ms); + events.RescheduleEvent(EVENT_SPELL_THROW_SARONITE, 5s, 7500ms); if (pInstance) pInstance->SetData(DATA_GARFROST, IN_PROGRESS); @@ -178,7 +178,7 @@ public: } if (spell->Id == uint32(SPELL_FORGE_BLADE)) { - events.RescheduleEvent(EVENT_SPELL_CHILLING_WAVE, 10000); + events.RescheduleEvent(EVENT_SPELL_CHILLING_WAVE, 10s); SetEquipmentSlots(false, EQUIP_ID_SWORD); me->SetReactState(REACT_AGGRESSIVE); me->SetControlled(false, UNIT_STATE_ROOT); diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp index c5d341dc9..21e50018b 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp @@ -298,7 +298,7 @@ public: if (a == 1) { me->setActive(true); - events.RescheduleEvent(20, 0); + events.RescheduleEvent(20, 0ms); } } @@ -404,7 +404,7 @@ public: case 8: Talk(SAY_OUTRO_KRICK_4); - events.RescheduleEvent(9, 1500); + events.RescheduleEvent(9, 1500ms); break; case 9: if (pInstance) @@ -430,7 +430,7 @@ public: if (Creature* c = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_TYRANNUS_EVENT_GUID))) c->AI()->Talk(SAY_TYRANNUS_KRICK_2); - events.RescheduleEvent(11, 9000); + events.RescheduleEvent(11, 9s); break; case 11: if (pInstance) diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp index 1ea12a831..4ff7de00c 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_scourgelord_tyrannus.cpp @@ -161,7 +161,7 @@ public: events.RescheduleEvent(EVENT_SPELL_UNHOLY_POWER, 1s); break; } - events.RepeatEvent(3000); + events.Repeat(3s); break; case EVENT_SPELL_UNHOLY_POWER: Talk(SAY_DARK_MIGHT); diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp index a83777d45..a432db0e2 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp @@ -1082,7 +1082,7 @@ public: s->AddThreat(c, 0.0f); } } - events.RescheduleEvent(10, 3000); + events.RescheduleEvent(10, 3s); break; } diff --git a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp index e4260080f..7b11623c5 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp @@ -161,7 +161,7 @@ public: summon->SetRegeneratingHealth(false); summon->SetReactState(REACT_PASSIVE); summon->m_Events.AddEvent(new RestoreFight(summon), summon->m_Events.CalculateTime(3000)); - if (events.GetNextEventTime(EVENT_COLOSSUS_HEALTH_2) == 0) + if (!events.HasTimeUntilEvent(EVENT_COLOSSUS_HEALTH_2)) { summon->SetHealth(summon->GetMaxHealth() / 2); summon->LowerPlayerDamageReq(summon->GetMaxHealth() / 2); diff --git a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp index 2a56ce887..3df618cd4 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp @@ -149,7 +149,7 @@ public: void KilledUnit(Unit*) override { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) + if (!events.HasTimeUntilEvent(EVENT_KILL_TALK)) { Talk(SAY_SLAY); events.ScheduleEvent(EVENT_KILL_TALK, 6s); diff --git a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp index 5e6fd02aa..a9b989e6e 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_moorabi.cpp @@ -125,7 +125,7 @@ public: void KilledUnit(Unit*) override { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) + if (!events.HasTimeUntilEvent(EVENT_KILL_TALK)) { Talk(SAY_SLAY); events.ScheduleEvent(EVENT_KILL_TALK, 6s); diff --git a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp index 5bf51b7c9..0229bab9e 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_slad_ran.cpp @@ -137,7 +137,7 @@ public: void KilledUnit(Unit*) override { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) + if (!events.HasTimeUntilEvent(EVENT_KILL_TALK)) { Talk(SAY_SLAY); events.ScheduleEvent(EVENT_KILL_TALK, 6s); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index f0172727b..8610c2e34 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -588,9 +588,9 @@ public: (*itr)->AI()->DoAction(ACTION_DESPAWN); /*Talk(SAY_OUTRO_HORDE_1); - _events.ScheduleEvent(EVENT_OUTRO_HORDE_1, 10000); - _events.ScheduleEvent(EVENT_OUTRO_HORDE_2, 18000); - _events.ScheduleEvent(EVENT_OUTRO_HORDE_3, 24000);*/ + _events.ScheduleEvent(EVENT_OUTRO_HORDE_1, 10s); + _events.ScheduleEvent(EVENT_OUTRO_HORDE_2, 18s); + _events.ScheduleEvent(EVENT_OUTRO_HORDE_3, 24s);*/ } break; case ACTION_EVADE: @@ -651,8 +651,8 @@ public: deathbringer->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); deathbringer->setDeathState(DeathState::Alive); } - _events.ScheduleEvent(EVENT_OUTRO_HORDE_4, 1000); - _events.ScheduleEvent(EVENT_OUTRO_HORDE_5, 4000); + _events.ScheduleEvent(EVENT_OUTRO_HORDE_4, 1s); + _events.ScheduleEvent(EVENT_OUTRO_HORDE_5, 4s); break; case POINT_FINAL: if (Creature* deathbringer = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_DEATHBRINGER_SAURFANG))) diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp index 923b9a341..11d0142ce 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_festergut.cpp @@ -233,7 +233,7 @@ public: Talk(EMOTE_GAS_SPORE); me->CastCustomSpell(SPELL_GAS_SPORE, SPELLVALUE_MAX_TARGETS, RAID_MODE(2, 3, 2, 3), me); events.ScheduleEvent(EVENT_GAS_SPORE, 40s, 45s); - events.DelayEventsToMax(20000, 1); // delay EVENT_VILE_GAS + events.DelayEventsToMax(20s, 1); // delay EVENT_VILE_GAS break; case EVENT_VILE_GAS: { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp index 51969299b..f4bd5ff7b 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp @@ -847,7 +847,7 @@ public: { time_t now = GameTime::GetGameTime().count(); if (_firstMageCooldown > now) - _events.ScheduleEvent(EVENT_SUMMON_MAGE, (_firstMageCooldown - now) * IN_MILLISECONDS); + _events.ScheduleEvent(EVENT_SUMMON_MAGE, Seconds(_firstMageCooldown - now)); else _events.ScheduleEvent(EVENT_SUMMON_MAGE, 1ms); } @@ -1183,7 +1183,7 @@ public: { time_t now = GameTime::GetGameTime().count(); if (_firstMageCooldown > now) - _events.ScheduleEvent(EVENT_SUMMON_MAGE, (_firstMageCooldown - now) * IN_MILLISECONDS); + _events.ScheduleEvent(EVENT_SUMMON_MAGE, Seconds(_firstMageCooldown - now)); else _events.ScheduleEvent(EVENT_SUMMON_MAGE, 1ms); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp index 7faa41fd2..509ff92fb 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp @@ -206,8 +206,8 @@ public: if (Aura* pStorm = me->GetAura(SPELL_BONE_STORM)) pStorm->SetDuration(int32(_boneStormDuration)); events.ScheduleEvent(EVENT_BONE_STORM_MOVE, 0ms); - events.ScheduleEvent(EVENT_END_BONE_STORM, _boneStormDuration + 1); - } + events.ScheduleEvent(EVENT_END_BONE_STORM, Milliseconds(_boneStormDuration + 1)); + } break; case EVENT_BONE_STORM_MOVE: { @@ -429,7 +429,7 @@ public: summonerUnit->SetPetGUID(petGUID); summonerUnit->GetMotionMaster()->Clear(); summonerUnit->StopMoving(); - events.ScheduleEvent(1, 8000); + events.ScheduleEvent(1, 8s); hasTrappedUnit = true; } } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index cb93c1bf6..165e8e77e 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -566,14 +566,14 @@ public: { SpellInfo const* spell = sSpellMgr->GetSpellInfo(SPELL_CREATE_CONCOCTION); me->CastSpell(me, SPELL_CREATE_CONCOCTION, false); - events.ScheduleEvent(EVENT_PHASE_TRANSITION, sSpellMgr->GetSpellForDifficultyFromSpell(spell, me)->CalcCastTime() + 2250); + events.ScheduleEvent(EVENT_PHASE_TRANSITION, Milliseconds(sSpellMgr->GetSpellForDifficultyFromSpell(spell, me)->CalcCastTime() + 2250)); break; } case 3: { SpellInfo const* spell = sSpellMgr->GetSpellInfo(SPELL_GUZZLE_POTIONS); me->CastSpell(me, SPELL_GUZZLE_POTIONS, false); - events.ScheduleEvent(EVENT_PHASE_TRANSITION, sSpellMgr->GetSpellForDifficultyFromSpell(spell, me)->CalcCastTime() + 2250); + events.ScheduleEvent(EVENT_PHASE_TRANSITION, Milliseconds(sSpellMgr->GetSpellForDifficultyFromSpell(spell, me)->CalcCastTime() + 2250)); break; } default: @@ -670,8 +670,8 @@ public: void ChangePhase() { - uint32 heroicDelay = (IsHeroic() ? 25000 : 0); - events.DelayEvents(24000 + heroicDelay, EVENT_GROUP_ABILITIES); + Milliseconds heroicDelay = (IsHeroic() ? 25s : 0ms); + events.DelayEvents(24s + heroicDelay, EVENT_GROUP_ABILITIES); me->AttackStop(); if (!IsHeroic()) { @@ -715,8 +715,8 @@ public: { case 1: _phase = 2; - events.ScheduleEvent(EVENT_MALLEABLE_GOO, urand(25000, 28000) + heroicDelay, EVENT_GROUP_ABILITIES); - events.ScheduleEvent(EVENT_CHOKING_GAS_BOMB, urand(35000, 40000) + heroicDelay, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_MALLEABLE_GOO, randtime(25s, 28s) + heroicDelay, EVENT_GROUP_ABILITIES); + events.ScheduleEvent(EVENT_CHOKING_GAS_BOMB, randtime(35s, 40s) + heroicDelay, EVENT_GROUP_ABILITIES); break; case 2: _phase = 3; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp index e9e7acfbd..cd3a73fdf 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp @@ -131,13 +131,13 @@ public: { } - uint32 infectionCooldown; + Milliseconds infectionCooldown; ObjectGuid _oozeFloodDummyGUIDs[4][2]; uint8 _oozeFloodStage; void Reset() override { - infectionCooldown = 14000; + infectionCooldown = 14s; for (uint8 i = 0; i < 4; ++i) for (uint8 j = 0; j < 2; ++j) @@ -283,14 +283,14 @@ public: DoCastSelf(SPELL_SLIME_SPRAY); } } - events.DelayEvents(1); + events.DelayEvents(1ms); events.ScheduleEvent(EVENT_SLIME_SPRAY, 20s); events.ScheduleEvent(EVENT_UNROOT, 0ms); break; case EVENT_HASTEN_INFECTIONS: - if (infectionCooldown >= 8000) + if (infectionCooldown >= 8s) { - infectionCooldown -= 2000; + infectionCooldown -= 2s; events.ScheduleEvent(EVENT_HASTEN_INFECTIONS, 90s); } break; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index 884cda64a..f64788381 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -523,7 +523,7 @@ public: me->SetControlled(true, UNIT_STATE_ROOT); me->SendMovementFlagUpdate(); me->CastSpell(me->GetVictim(), SPELL_TAIL_SMASH, false); - events.DelayEventsToMax(1, 0); + events.DelayEventsToMax(1ms, 0); events.ScheduleEvent(EVENT_UNROOT, 0ms); events.ScheduleEvent(EVENT_TAIL_SMASH, 22s, 27s, EVENT_GROUP_LAND_PHASE); break; @@ -532,7 +532,7 @@ public: me->SetControlled(true, UNIT_STATE_ROOT); me->SendMovementFlagUpdate(); me->CastSpell(me->GetVictim(), _isThirdPhase ? SPELL_FROST_BREATH_P2 : SPELL_FROST_BREATH_P1, false); - events.DelayEventsToMax(1, 0); + events.DelayEventsToMax(1ms, 0); events.ScheduleEvent(EVENT_UNROOT, 0ms); events.ScheduleEvent(EVENT_FROST_BREATH, 20s, 25s, EVENT_GROUP_LAND_PHASE); break; @@ -547,11 +547,10 @@ public: break; case EVENT_ICY_GRIP: me->CastSpell((Unit*)nullptr, SPELL_ICY_GRIP, false); - events.DelayEventsToMax(1001, 0); + events.DelayEventsToMax(1001ms, 0); events.ScheduleEvent(EVENT_BLISTERING_COLD, 1s, EVENT_GROUP_LAND_PHASE); - if (uint32 evTime = events.GetNextEventTime(EVENT_ICE_TOMB)) - if (events.GetTimer() > evTime || evTime - events.GetTimer() < 7000) - events.RescheduleEvent(EVENT_ICE_TOMB, 7s); + if (events.GetTimeUntilEvent(EVENT_ICE_TOMB) < 7s) + events.RescheduleEvent(EVENT_ICE_TOMB, 7s); break; case EVENT_BLISTERING_COLD: Talk(EMOTE_WARN_BLISTERING_COLD); @@ -652,9 +651,8 @@ public: Talk(EMOTE_WARN_FROZEN_ORB, target); me->CastSpell(target, SPELL_ICE_TOMB_DUMMY, true); me->CastSpell(target, SPELL_FROST_BEACON, true); - if (uint32 evTime = events.GetNextEventTime(EVENT_ICY_GRIP)) - if (events.GetTimer() > evTime || evTime - events.GetTimer() < 8000) - events.RescheduleEvent(EVENT_ICY_GRIP, 8s, EVENT_GROUP_LAND_PHASE); + if (events.GetTimeUntilEvent(EVENT_ICY_GRIP) < 8s) + events.RescheduleEvent(EVENT_ICY_GRIP, 8s, EVENT_GROUP_LAND_PHASE); } events.ScheduleEvent(EVENT_ICE_TOMB, 18s, 22s); break; @@ -1451,8 +1449,8 @@ public: else destZ = me->GetPositionZ() + 25.0f; me->GetMotionMaster()->MoveTakeoff(0, me->GetPositionX(), me->GetPositionY(), destZ, me->GetSpeed(MOVE_RUN)); float moveTime = std::fabs(destZ - me->GetPositionZ()) / (me->GetSpeed(MOVE_RUN) * 0.001f); - _events.ScheduleEvent(EVENT_ICY_BLAST, uint32(moveTime) + urand(60000, 70000)); - _events.ScheduleEvent(EVENT_ICY_BLAST_CAST, uint32(moveTime) + 250); + _events.Repeat(Milliseconds(uint32(moveTime) + urand(60000, 70000))); + _events.ScheduleEvent(EVENT_ICY_BLAST_CAST, Milliseconds(uint32(moveTime) + 250)); break; } case EVENT_ICY_BLAST_CAST: diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index d74698910..ecaf28219 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -885,7 +885,7 @@ public: summon->StopMovingOnCurrentPos(); break; case NPC_VALKYR_SHADOWGUARD: - if (_phase == PHASE_THREE || events.GetNextEventTime(EVENT_QUAKE_2)) + if (_phase == PHASE_THREE || events.HasTimeUntilEvent(EVENT_QUAKE_2)) summon->DespawnOrUnsummon(1); break; default: @@ -944,7 +944,7 @@ public: Talk(SAY_LK_REMORSELESS_WINTER); me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL); me->CastSpell(me, SPELL_REMORSELESS_WINTER_1, false); - //events.DelayEvents(62500, EVENT_GROUP_BERSERK); // delay berserk timer, its not ticking during phase transitions, 15mins on movies + //events.DelayEvents(62500ms, EVENT_GROUP_BERSERK); // delay berserk timer, its not ticking during phase transitions, 15mins on movies events.ScheduleEvent(EVENT_QUAKE, 62s + 500ms); events.ScheduleEvent(EVENT_PAIN_AND_SUFFERING, 3500ms, EVENT_GROUP_ABILITIES); events.ScheduleEvent(EVENT_SUMMON_ICE_SPHERE, 8s, EVENT_GROUP_ABILITIES); @@ -956,7 +956,7 @@ public: me->GetMap()->SetZoneMusic(AREA_THE_FROZEN_THRONE, MUSIC_SPECIAL); me->CastSpell(me, SPELL_REMORSELESS_WINTER_2, false); summons.DespawnEntry(NPC_VALKYR_SHADOWGUARD); - //events.DelayEvents(62500, EVENT_GROUP_BERSERK); // delay berserk timer, its not ticking during phase transitions, 15 mins on movies + //events.DelayEvents(62500ms, EVENT_GROUP_BERSERK); // delay berserk timer, its not ticking during phase transitions, 15 mins on movies events.ScheduleEvent(EVENT_QUAKE_2, 62s + 500ms); events.ScheduleEvent(EVENT_PAIN_AND_SUFFERING, 3500ms, EVENT_GROUP_ABILITIES); events.ScheduleEvent(EVENT_SUMMON_ICE_SPHERE, 8s, EVENT_GROUP_ABILITIES); @@ -1081,11 +1081,11 @@ public: case EVENT_PAIN_AND_SUFFERING: if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 0.0f, true)) { - //events.DelayEventsToMax(500, EVENT_GROUP_ABILITIES); + //events.DelayEventsToMax(500ms, EVENT_GROUP_ABILITIES); me->SetFacingTo(me->GetAngle(target)); me->CastSpell(target, SPELL_PAIN_AND_SUFFERING, false); } - events.ScheduleEvent(EVENT_PAIN_AND_SUFFERING, (IsHeroic() ? urand(1250, 1750) : urand(1750, 2250)), EVENT_GROUP_ABILITIES); + events.Repeat((IsHeroic() ? randtime(1250ms, 1750ms) : randtime(1750ms, 2250ms))); break; case EVENT_SUMMON_ICE_SPHERE: me->CastSpell((Unit*)nullptr, SPELL_SUMMON_ICE_SPHERE, false); @@ -1098,21 +1098,21 @@ public: break; case EVENT_DEFILE: { - uint32 evTime = events.GetNextEventTime(EVENT_SUMMON_VALKYR); + Milliseconds evTime = events.GetTimeUntilEvent(EVENT_SUMMON_VALKYR); // if defile (cast time 2sec) is less than 3 before valkyr appears // we've to decide - if (evTime && (events.GetTimer() > evTime || evTime - events.GetTimer() < 5000)) + if (evTime < 5s) { // if valkyr is less than 1.5 secs after defile (cast time 2 sec) then we've a sync issue, so // we need to cancel it (break) and schedule a defile to be casted 5 or 4 seconds after valkyr - if (events.GetTimer() > evTime || evTime - events.GetTimer() < 3500) + if (evTime < 3500ms) { - uint32 t = events.GetTimer() > evTime ? 0 : evTime - events.GetTimer(); - events.ScheduleEvent(EVENT_DEFILE, t + (Is25ManRaid() ? 5000 : 4000), EVENT_GROUP_ABILITIES); + Milliseconds t = evTime > 0ms ? evTime : 0ms; + events.ScheduleEvent(EVENT_DEFILE, t + (Is25ManRaid() ? 5s : 4s), EVENT_GROUP_ABILITIES); break; } - // if valkyr is coming between 1.5 and 3 seconds after defile then we've to + // if valkyr is coming within 2,5 seconds after defile then we've to // delay valkyr just a bit events.RescheduleEvent(EVENT_SUMMON_VALKYR, 5s, EVENT_GROUP_ABILITIES); } @@ -1150,12 +1150,9 @@ public: // schedule a defile (or reschedule it) if next defile event // doesn't exist ( now > next defile ) or defile is coming too soon - uint32 minTime = (Is25ManRaid() ? 5000 : 4000); - if (uint32 evTime = events.GetNextEventTime(EVENT_DEFILE)) - if (events.GetTimer() > evTime || evTime - events.GetTimer() < minTime) - { - events.RescheduleEvent(EVENT_DEFILE, minTime, EVENT_GROUP_ABILITIES); - } + Milliseconds minTime = (Is25ManRaid() ? 5s : 4s); + if (events.GetTimeUntilEvent(EVENT_DEFILE) < minTime) + events.RescheduleEvent(EVENT_DEFILE, minTime, EVENT_GROUP_ABILITIES); } break; case EVENT_VILE_SPIRITS: @@ -1180,7 +1177,7 @@ public: me->SetReactState(REACT_PASSIVE); me->AttackStop(); events.ScheduleEvent(EVENT_START_ATTACK, 55s); - events.DelayEvents(52500, EVENT_GROUP_VILE_SPIRITS); + events.DelayEvents(52500ms, EVENT_GROUP_VILE_SPIRITS); events.CancelEvent(EVENT_DEFILE); events.CancelEvent(EVENT_SOUL_REAPER); events.ScheduleEvent(EVENT_FROSTMOURNE_HEROIC, 6s, EVENT_GROUP_ABILITIES); @@ -1508,9 +1505,9 @@ public: theLichKing->GetMotionMaster()->MovePoint(0, CenterPosition); uint32 travelTime = 1000 * theLichKing->GetExactDist(&CenterPosition) / theLichKing->GetSpeed(MOVE_WALK) + 1000; - _events.ScheduleEvent(EVENT_OUTRO_LK_TALK_4, 1 + travelTime); - _events.ScheduleEvent(EVENT_OUTRO_LK_RAISE_DEAD, 1000 + travelTime); - _events.ScheduleEvent(EVENT_OUTRO_LK_TALK_5, 29000 + travelTime); + _events.ScheduleEvent(EVENT_OUTRO_LK_TALK_4, Milliseconds(1 + travelTime)); + _events.ScheduleEvent(EVENT_OUTRO_LK_RAISE_DEAD, Milliseconds(1000 + travelTime)); + _events.ScheduleEvent(EVENT_OUTRO_LK_TALK_5, Milliseconds(29000 + travelTime)); } break; case EVENT_OUTRO_LK_TALK_4: @@ -2620,7 +2617,7 @@ public: me->GetMotionMaster()->Clear(); me->StopMovingOnCurrentPos(); - _events.ScheduleEvent(EVENT_MOVE_TO_DROP_POS, 0); + _events.ScheduleEvent(EVENT_MOVE_TO_DROP_POS, 0ms); } }; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index 5c6e30831..64d616b5d 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -679,7 +679,7 @@ public: { case 1000: case 11000: - _events.ScheduleEvent(EVENT_ACTIVATE_TRAP, uint32(action)); + _events.ScheduleEvent(EVENT_ACTIVATE_TRAP, Milliseconds(action)); break; default: break; @@ -2796,38 +2796,38 @@ class SeveredEssenceSpellInfo public: uint8 Class; uint32 id; - uint32 cooldown_ms; + Milliseconds cooldown_ms; uint8 targetType; float range; }; SeveredEssenceSpellInfo sesi_spells[] = { - {CLASS_SHAMAN, 71938, 5000, 1, 0.0f}, - {CLASS_PALADIN, 57767, 8000, 2, 30.0f}, - {CLASS_WARLOCK, 71937, 10000, 1, 0.0f}, - {CLASS_DEATH_KNIGHT, 49576, 15000, 1, 30.0f}, - {CLASS_ROGUE, 71933, 8000, 1, 0.0f}, - {CLASS_MAGE, 71928, 4000, 1, 40.0f}, - {CLASS_PALADIN, 71930, 5000, 2, 40.0f}, - {CLASS_ROGUE, 71955, 40000, 1, 30.0f}, - {CLASS_PRIEST, 71931, 5000, 2, 40.0f}, - {CLASS_SHAMAN, 71934, 7000, 1, 0.0f}, - {CLASS_DRUID, 71925, 5000, 1, 0.0f}, - {CLASS_DEATH_KNIGHT, 71951, 8000, 1, 0.0f}, - {CLASS_DEATH_KNIGHT, 71924, 8000, 1, 0.0f}, - {CLASS_WARLOCK, 71965, 20000, 0, 0.0f}, - {CLASS_PRIEST, 71932, 8000, 2, 40.0f}, - {CLASS_DRUID, 71926, 10000, 1, 0.0f}, - {CLASS_WARLOCK, 71936, 9000, 1, 0.0f}, - {CLASS_ROGUE, 57640, 3000, 1, 0.0f}, - {CLASS_WARRIOR, 71961, 5000, 1, 0.0f}, - {CLASS_MAGE, 71929, 10000, 1, 0.0f}, - {CLASS_WARRIOR, 53395, 5000, 1, 0.0f}, - {CLASS_WARRIOR, 71552, 5000, 1, 0.0f}, - {CLASS_HUNTER, 36984, 7000, 1, 0.0f}, - {CLASS_HUNTER, 29576, 5000, 1, 0.0f}, - {0, 0, 0, 0, 0.0f}, + { CLASS_SHAMAN, 71938, 5s, 1, 0.0f }, + { CLASS_PALADIN, 57767, 8s, 2, 30.0f }, + { CLASS_WARLOCK, 71937, 10s, 1, 0.0f }, + { CLASS_DEATH_KNIGHT, 49576, 15s, 1, 30.0f }, + { CLASS_ROGUE, 71933, 8s, 1, 0.0f }, + { CLASS_MAGE, 71928, 4s, 1, 40.0f }, + { CLASS_PALADIN, 71930, 5s, 2, 40.0f }, + { CLASS_ROGUE, 71955, 40s, 1, 30.0f }, + { CLASS_PRIEST, 71931, 5s, 2, 40.0f }, + { CLASS_SHAMAN, 71934, 7s, 1, 0.0f }, + { CLASS_DRUID, 71925, 5s, 1, 0.0f }, + { CLASS_DEATH_KNIGHT, 71951, 8s, 1, 0.0f }, + { CLASS_DEATH_KNIGHT, 71924, 8s, 1, 0.0f }, + { CLASS_WARLOCK, 71965, 20s, 0, 0.0f }, + { CLASS_PRIEST, 71932, 8s, 2, 40.0f }, + { CLASS_DRUID, 71926, 10s, 1, 0.0f }, + { CLASS_WARLOCK, 71936, 9s, 1, 0.0f }, + { CLASS_ROGUE, 57640, 3s, 1, 0.0f }, + { CLASS_WARRIOR, 71961, 5s, 1, 0.0f }, + { CLASS_MAGE, 71929, 10s, 1, 0.0f }, + { CLASS_WARRIOR, 53395, 5s, 1, 0.0f }, + { CLASS_WARRIOR, 71552, 5s, 1, 0.0f }, + { CLASS_HUNTER, 36984, 7s, 1, 0.0f }, + { CLASS_HUNTER, 29576, 5s, 1, 0.0f }, + { 0, 0, 0ms, 0, 0.0f } }; class npc_icc_severed_essence : public CreatureScript @@ -2862,7 +2862,7 @@ public: if (sesi_spells[i].id) { if (Class == sesi_spells[i].Class) - events.ScheduleEvent(i + 1, sesi_spells[i].cooldown_ms / 4); + events.ScheduleEvent(i + 1, Milliseconds(sesi_spells[i].cooldown_ms / 4)); } else break; @@ -2895,7 +2895,7 @@ public: if (target) me->CastSpell(target, sesi_spells[e - 1].id, TRIGGERED_IGNORE_SHAPESHIFT); - events.RepeatEvent(sesi_spells[e - 1].cooldown_ms); + events.Repeat(sesi_spells[e - 1].cooldown_ms); } if (Class == CLASS_HUNTER) @@ -3337,7 +3337,7 @@ public: void ScheduleBroodlings() { for (uint8 i = 0; i < 30; ++i) - events.ScheduleEvent(EVENT_SUMMON_BROODLING, 10000 + i * 350); + events.ScheduleEvent(EVENT_SUMMON_BROODLING, Milliseconds(10000 + i * 350)); } void SummonBroodling() @@ -3521,7 +3521,7 @@ public: me->CastSpell(me, SPELL_GIANT_INSECT_SWARM, true); for (uint8 i = 0; i < 60; ++i) - events.ScheduleEvent(EVENT_GAUNTLET_PHASE1, i * 1000); + events.ScheduleEvent(EVENT_GAUNTLET_PHASE1, Seconds(i)); events.ScheduleEvent(EVENT_GAUNTLET_PHASE2, 1min); } } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 394225e21..667a92218 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -268,7 +268,7 @@ public: if (GetBossState(DATA_LADY_DEATHWHISPER) == DONE && GetBossState(DATA_ICECROWN_GUNSHIP_BATTLE) != DONE) SpawnGunship(); - if (GetBossState(DATA_SINDRAGOSA) != DONE && IsSindragosaIntroDone && !GetCreature(DATA_SINDRAGOSA) && Events.GetTimeUntilEvent(EVENT_RESPAWN_SINDRAGOSA) == Milliseconds::max()) + if (GetBossState(DATA_SINDRAGOSA) != DONE && IsSindragosaIntroDone && !GetCreature(DATA_SINDRAGOSA) && !Events.HasTimeUntilEvent(EVENT_RESPAWN_SINDRAGOSA)) { Events.ScheduleEvent(EVENT_RESPAWN_SINDRAGOSA, 30s); } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp index 30b678a87..7451caa1a 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gluth.cpp @@ -115,7 +115,7 @@ public: me->SetInCombatWithZone(); events.ScheduleEvent(EVENT_MORTAL_WOUND, 10s); events.ScheduleEvent(EVENT_ENRAGE, 22s); - events.ScheduleEvent(EVENT_DECIMATE, RAID_MODE(110000, 90000)); + events.ScheduleEvent(EVENT_DECIMATE, RAID_MODE(110s, 90s)); events.ScheduleEvent(EVENT_BERSERK, 6min); events.ScheduleEvent(EVENT_SUMMON_ZOMBIE, 10s); events.ScheduleEvent(EVENT_CAN_EAT_ZOMBIE, 1s); @@ -194,7 +194,7 @@ public: case EVENT_DECIMATE: Talk(EMOTE_DECIMATE); me->CastSpell(me, RAID_MODE(SPELL_DECIMATE_10, SPELL_DECIMATE_25), false); - events.RepeatEvent(RAID_MODE(110000, 90000)); + events.Repeat(RAID_MODE(110s, 90s)); break; case EVENT_SUMMON_ZOMBIE: { @@ -218,7 +218,7 @@ public: break; } case EVENT_CAN_EAT_ZOMBIE: - events.RepeatEvent(1000); + events.Repeat(1s); if (me->GetVictim()->GetEntry() == NPC_ZOMBIE_CHOW && me->IsWithinMeleeRange(me->GetVictim())) { me->CastCustomSpell(SPELL_CHOW_SEARCHER, SPELLVALUE_RADIUS_MOD, 20000, me, true); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp index 939f0bf19..3e2ae759c 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_gothik.cpp @@ -440,7 +440,7 @@ public: if (gothikWaves[waveCount][0]) { SummonHelpers(gothikWaves[waveCount][0]); - events.RepeatEvent(gothikWaves[waveCount][1]); + events.Repeat(Milliseconds(gothikWaves[waveCount][1])); } else { @@ -522,7 +522,7 @@ public: events.ScheduleEvent(EVENT_SHADOW_BOLT_VOLLEY, 3s); break; case NPC_DEAD_RIDER: - events.ScheduleEvent(EVENT_DRAIN_LIFE, 2000ms, 3500ms); + events.ScheduleEvent(EVENT_DRAIN_LIFE, 2s, 3500ms); events.ScheduleEvent(EVENT_UNHOLY_FRENZY, 5s, 9s); break; case NPC_DEAD_HORSE: diff --git a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp index 9a88b24a7..7be64fe00 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_grobbulus.cpp @@ -102,7 +102,7 @@ public: events.ScheduleEvent(EVENT_POISON_CLOUD, 15s); events.ScheduleEvent(EVENT_MUTATING_INJECTION, 20s); events.ScheduleEvent(EVENT_SLIME_SPRAY, 10s); - events.ScheduleEvent(EVENT_BERSERK, RAID_MODE(720000, 540000)); + events.ScheduleEvent(EVENT_BERSERK, RAID_MODE(720s, 540s)); } void SpellHitTarget(Unit* target, SpellInfo const* spellInfo) override @@ -177,7 +177,7 @@ public: { me->CastSpell(target, SPELL_MUTATING_INJECTION, false); } - events.RepeatEvent(6000 + uint32(120 * me->GetHealthPct())); + events.Repeat(Milliseconds(6000 + uint32(120 * me->GetHealthPct()))); break; } DoMeleeAttackIfReady(); diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp index 57866c7b0..7cf70c4b4 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp @@ -451,7 +451,7 @@ public: cr->AI()->Talk(SAY_ANSWER_REQUEST); for (uint8 i = 0 ; i < RAID_MODE(2, 4); ++i) - events.ScheduleEvent(EVENT_SUMMON_GUARDIAN_OF_ICECROWN, 10000 + (i * 5000)); + events.ScheduleEvent(EVENT_SUMMON_GUARDIAN_OF_ICECROWN, Milliseconds(10000 + (i * 5000))); break; } diff --git a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp index 98717dcbb..22de0dac7 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_sapphiron.cpp @@ -280,7 +280,7 @@ public: { cr->GetMotionMaster()->MoveRandom(40); } - events.RepeatEvent(RAID_MODE(8000, 6500)); + events.Repeat(RAID_MODE(8000ms, 6500ms)); return; } case EVENT_FLIGHT_START: @@ -349,7 +349,7 @@ public: blockList.push_back((*itr)->GetGUID()); currentTarget = (*itr)->GetGUID(); --iceboltCount; - events.ScheduleEvent(EVENT_FLIGHT_ICEBOLT, (me->GetExactDist(*itr) / 13.0f)*IN_MILLISECONDS); + events.ScheduleEvent(EVENT_FLIGHT_ICEBOLT, Seconds(uint32(me->GetExactDist(*itr) / 13.0f))); } else { diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp index eb39ef71b..39c3faf62 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -471,7 +471,7 @@ public: me->SetDisableGravity(true); me->GetMotionMaster()->MoveTakeoff(MI_POINT_VORTEX_TAKEOFF, me->GetPositionX(), me->GetPositionY(), CenterPos.GetPositionZ() + 20.0f, 7.0f); - events.DelayEvents(25000, 1); // don't delay berserk (group 0) + events.DelayEvents(25s, 1); // don't delay berserk (group 0) } break; case EVENT_VORTEX_FLY_TO_CENTER: @@ -674,7 +674,7 @@ public: case EVENT_CHECK_TRASH_DEAD: { if (me->FindNearestCreature(NPC_SCION_OF_ETERNITY, 250.0f, true) || me->FindNearestCreature(NPC_NEXUS_LORD, 250.0f, true)) - events.RepeatEvent(3000); + events.Repeat(3s); else { me->SendMeleeAttackStop(); diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp index 397f9ec8b..1be23abf8 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_anomalus.cpp @@ -94,7 +94,7 @@ struct boss_anomalus : public BossAI { if (activeRifts > 0 && --activeRifts == 0 && me->HasAura(SPELL_RIFT_SHIELD)) { - events.DelayEvents(me->GetAura(SPELL_RIFT_SHIELD)->GetDuration() - 46000); + events.DelayEvents(Milliseconds(me->GetAura(SPELL_RIFT_SHIELD)->GetDuration() - 46000)); me->RemoveAura(SPELL_RIFT_SHIELD); me->InterruptNonMeleeSpells(false); } @@ -114,7 +114,6 @@ struct boss_anomalus : public BossAI BossAI::JustEngagedWith(who); activeRifts = 0; - events.SetTimer(45000); events.ScheduleEvent(EVENT_ANOMALUS_SPARK, 5s); events.ScheduleEvent(EVENT_ANOMALUS_HEALTH, 1s); events.ScheduleEvent(EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15s : 25s); @@ -164,7 +163,7 @@ struct boss_anomalus : public BossAI Talk(EMOTE_RIFT); me->CastSpell(me, SPELL_CREATE_RIFT, false); //Once we hit 51% hp mark, after each rift we spawn an empowered - events.ScheduleEvent(me->HealthBelowPct(51) ? EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED : EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15000 : 25000); + events.ScheduleEvent(me->HealthBelowPct(51) ? EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED : EVENT_ANOMALUS_SPAWN_RIFT, IsHeroic() ? 15s : 25s); break; case EVENT_ANOMALUS_SPAWN_RIFT_EMPOWERED: Talk(SAY_RIFT); diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp index a367d6059..eb4842098 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_keristrasza.cpp @@ -75,7 +75,7 @@ struct boss_keristrasza : public BossAI me->CastSpell(me, SPELL_INTENSE_COLD, true); events.ScheduleEvent(EVENT_CRYSTALFIRE_BREATH, 14s); - events.ScheduleEvent(EVENT_CRYSTAL_CHAINS, DUNGEON_MODE(20000, 11000)); + events.ScheduleEvent(EVENT_CRYSTAL_CHAINS, DUNGEON_MODE(20s, 11s)); events.ScheduleEvent(EVENT_TAIL_SWEEP, 5s); events.ScheduleEvent(EVENT_HEALTH_CHECK, 1s); events.ScheduleEvent(EVENT_ACHIEVEMENT_CHECK, 1s); @@ -89,7 +89,7 @@ struct boss_keristrasza : public BossAI void KilledUnit(Unit*) override { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) + if (!events.HasTimeUntilEvent(EVENT_KILL_TALK)) { Talk(SAY_SLAY); events.ScheduleEvent(EVENT_KILL_TALK, 6s); @@ -174,7 +174,7 @@ struct boss_keristrasza : public BossAI me->CastSpell(me, SPELL_CRYSTALIZE, false); else if (Unit* target = SelectTarget(SelectTargetMethod::Random, 0, 40.0f, true)) me->CastSpell(target, SPELL_CRYSTAL_CHAINS, false); - events.ScheduleEvent(EVENT_CRYSTAL_CHAINS, DUNGEON_MODE(20000, 11000)); + events.ScheduleEvent(EVENT_CRYSTAL_CHAINS, DUNGEON_MODE(20s, 11s)); break; } diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp index 90781cfbc..5926c11b6 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp @@ -132,7 +132,7 @@ struct boss_magus_telestra : public BossAI void KilledUnit(Unit*) override { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) + if (!events.HasTimeUntilEvent(EVENT_KILL_TALK)) { Talk(SAY_KILL); events.ScheduleEvent(EVENT_KILL_TALK, 6s); diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp index 82b36095d..982750c2b 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_ormorok.cpp @@ -93,7 +93,7 @@ struct boss_ormorok : public BossAI void KilledUnit(Unit* /*victim*/) override { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) + if (!events.HasTimeUntilEvent(EVENT_KILL_TALK)) { Talk(SAY_KILL); events.ScheduleEvent(EVENT_KILL_TALK, 6s); diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp index 4b491b156..db9d41b63 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_eregos.cpp @@ -208,7 +208,7 @@ public: break; case EVENT_SUMMON_WHELPS: for( uint8 i = 0; i < 5; ++i ) - events.ScheduleEvent(EVENT_SUMMON_SINGLE_WHELP, urand(0, 8000)); + events.ScheduleEvent(EVENT_SUMMON_SINGLE_WHELP, 0ms, 8s); events.Repeat(40s); break; case EVENT_SUMMON_SINGLE_WHELP: diff --git a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp index 6793cc050..129df1e67 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/boss_urom.cpp @@ -300,7 +300,7 @@ public: me->ClearUnitState(UNIT_STATE_CASTING); DoCastAOE(DUNGEON_MODE(SPELL_EMPOWERED_ARCANE_EXPLOSION_N, SPELL_EMPOWERED_ARCANE_EXPLOSION_H)); me->AddUnitState(UNIT_STATE_CASTING); - events.RescheduleEvent(EVENT_TELE_BACK, DUNGEON_MODE(9000, 7000)); + events.RescheduleEvent(EVENT_TELE_BACK, DUNGEON_MODE(9s, 7s)); default: break; } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp index 1d5a440df..f4d8c5719 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp @@ -252,8 +252,8 @@ public: me->CastSpell(me, SPELL_DEFENSIVE_STANCE, true); me->CastSpell(me, SPELL_DEFENSIVE_AURA, true); - events.DelayEvents(20000, STANCE_BERSERKER); - events.DelayEvents(20000, STANCE_BATTLE); + events.DelayEvents(20s, STANCE_BERSERKER); + events.DelayEvents(20s, STANCE_BATTLE); SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SHIELD, EQUIP_NO_CHANGE); break; @@ -263,8 +263,8 @@ public: me->CastSpell(me, SPELL_BERSERKER_STANCE, true); me->CastSpell(me, SPELL_BERSERKER_AURA, true); - events.DelayEvents(20000, STANCE_DEFENSIVE); - events.DelayEvents(20000, STANCE_BATTLE); + events.DelayEvents(20s, STANCE_DEFENSIVE); + events.DelayEvents(20s, STANCE_BATTLE); SetEquipmentSlots(false, EQUIP_SWORD, EQUIP_SWORD, EQUIP_NO_CHANGE); break; @@ -274,8 +274,8 @@ public: me->CastSpell(me, SPELL_BATTLE_STANCE, true); me->CastSpell(me, SPELL_BATTLE_AURA, true); - events.DelayEvents(20000, STANCE_BERSERKER); - events.DelayEvents(20000, STANCE_DEFENSIVE); + events.DelayEvents(20s, STANCE_BERSERKER); + events.DelayEvents(20s, STANCE_DEFENSIVE); SetEquipmentSlots(false, EQUIP_MACE, EQUIP_UNEQUIP, EQUIP_NO_CHANGE); break; diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp index d51461f6a..5292e69e4 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/boss_sjonnir.cpp @@ -426,7 +426,7 @@ public: void JustEngagedWith(Unit*) override { - events.ScheduleEvent(EVENT_TOXIC_VOLLEY, 5000); + events.ScheduleEvent(EVENT_TOXIC_VOLLEY, 5s); } void JustDied(Unit* /*killer*/) override { diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp index 8202f673a..b0dd3d79f 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp @@ -443,8 +443,8 @@ public: me->ReplaceAllNpcFlags(UNIT_NPC_FLAG_GOSSIP | UNIT_NPC_FLAG_QUESTGIVER); me->SetOrientation(3.132660f); me->SendMovementFlagUpdate(); - events.ScheduleEvent(EVENT_SJONNIR_END_BRANN_YELL, 10000ms); - events.ScheduleEvent(EVENT_SJONNIR_END_BRANN_LAST_YELL, 22000ms); + events.ScheduleEvent(EVENT_SJONNIR_END_BRANN_YELL, 10s); + events.ScheduleEvent(EVENT_SJONNIR_END_BRANN_LAST_YELL, 22s); break; case ACTION_SJONNIR_WIPE_START: Reset(); @@ -508,7 +508,7 @@ public: kaddrak->CastSpell(plr, DUNGEON_MODE(SPELL_GLARE_OF_THE_TRIBUNAL, SPELL_GLARE_OF_THE_TRIBUNAL_H), true); } - events.RescheduleEvent(EVENT_KADDRAK_SWITCH_EYE, 1000ms); + events.RescheduleEvent(EVENT_KADDRAK_SWITCH_EYE, 1s); events.Repeat(1500ms); break; } @@ -550,7 +550,7 @@ public: darkMatterTargetGUID = cr->GetGUID(); - events.RescheduleEvent(EVENT_DARK_MATTER_START, 5000ms); + events.RescheduleEvent(EVENT_DARK_MATTER_START, 5s); } } events.Repeat(30s); @@ -575,7 +575,7 @@ public: if (darkMatterTarget->GetDistance(plr) < 15.0f) { - events.RescheduleEvent(EVENT_DARK_MATTER_END, 3000ms); + events.RescheduleEvent(EVENT_DARK_MATTER_END, 3s); } else if (darkMatterTarget->GetDistance(plr) < 30.0f) { @@ -625,12 +625,12 @@ public: uint32 Time = 40000 - (2500 * WaveNum); SummonCreatures(NPC_DARK_RUNE_PROTECTOR, 3, 0); if (WaveNum > 2) - events.ScheduleEvent(EVENT_SUMMON_STORMCALLER, urand(10 - WaveNum, 15 - WaveNum) * 1000); + events.ScheduleEvent(EVENT_SUMMON_STORMCALLER, Seconds(urand(10 - WaveNum, 15 - WaveNum))); if (WaveNum > 5) - events.ScheduleEvent(EVENT_SUMMON_CUSTODIAN, urand(10 - WaveNum, 15 - WaveNum) * 1000); + events.ScheduleEvent(EVENT_SUMMON_CUSTODIAN, Seconds(urand(10 - WaveNum, 15 - WaveNum))); WaveNum++; - events.RepeatEvent(Time); + events.Repeat(Milliseconds(Time)); break; } case EVENT_SUMMON_STORMCALLER: @@ -931,10 +931,10 @@ void brann_bronzebeard::brann_bronzebeardAI::WaypointReached(uint32 id) SetEscortPaused(true); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_USE_STANDING); me->SendMovementFlagUpdate(); - events.ScheduleEvent(EVENT_DOOR_OPEN, 1500); + events.ScheduleEvent(EVENT_DOOR_OPEN, 1500ms); me->SetWalk(false); me->SetSpeed(MOVE_RUN, 1.0f, false); - events.ScheduleEvent(EVENT_RESUME_ESCORT, 3500); + events.ScheduleEvent(EVENT_RESUME_ESCORT, 3500ms); break; //Brann stops in front of Sjonnir and awaits the start of the battle. case 36: diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp index 9eec77e62..a11c0e291 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp @@ -484,7 +484,7 @@ public: return; } - uint32 introDelay = 0; + Milliseconds introDelay = 0ms; me->setActive(true); me->SetInCombatWithZone(); me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); @@ -495,27 +495,27 @@ public: if (!_firstPull) { events.ScheduleEvent(EVENT_START_COMBAT, 0ms); - introDelay = 8000; + introDelay = 8s; } else { summons.DespawnEntry(NPC_AZEROTH); _firstPull = false; Talk(SAY_ALGALON_START_TIMER); - introDelay = 22000; + introDelay = 22s; events.ScheduleEvent(EVENT_START_COMBAT, 14s); m_pInstance->SetData(DATA_DESPAWN_ALGALON, 0); } - events.ScheduleEvent(EVENT_REMOVE_UNNATTACKABLE, introDelay - 500); + events.ScheduleEvent(EVENT_REMOVE_UNNATTACKABLE, introDelay - 500ms); events.ScheduleEvent(EVENT_INTRO_TIMER_DONE, introDelay); - events.ScheduleEvent(EVENT_QUANTUM_STRIKE, 3500 + introDelay); - events.ScheduleEvent(EVENT_PHASE_PUNCH, 15500 + introDelay); - events.ScheduleEvent(EVENT_SUMMON_COLLAPSING_STAR, 16500 + introDelay); - events.ScheduleEvent(EVENT_COSMIC_SMASH, 25000 + introDelay); - events.ScheduleEvent(EVENT_ACTIVATE_LIVING_CONSTELLATION, 50500 + introDelay); - events.ScheduleEvent(EVENT_BIG_BANG, 90000 + introDelay); - events.ScheduleEvent(EVENT_ASCEND_TO_THE_HEAVENS, 360000 + introDelay); + events.ScheduleEvent(EVENT_QUANTUM_STRIKE, 3500ms + introDelay); + events.ScheduleEvent(EVENT_PHASE_PUNCH, 15500ms + introDelay); + events.ScheduleEvent(EVENT_SUMMON_COLLAPSING_STAR, 16500ms + introDelay); + events.ScheduleEvent(EVENT_COSMIC_SMASH, 25s + introDelay); + events.ScheduleEvent(EVENT_ACTIVATE_LIVING_CONSTELLATION, 50500ms + introDelay); + events.ScheduleEvent(EVENT_BIG_BANG, 90s + introDelay); + events.ScheduleEvent(EVENT_ASCEND_TO_THE_HEAVENS, 360s + introDelay); events.ScheduleEvent(EVENT_CHECK_HERALD_ITEMS, 5s); DoCheckHeraldOfTheTitans(); @@ -688,7 +688,7 @@ public: break; case EVENT_QUANTUM_STRIKE: me->CastSpell(me->GetVictim(), SPELL_QUANTUM_STRIKE, false); - events.Repeat(3000ms, 4500ms); + events.Repeat(3s, 4500ms); break; case EVENT_PHASE_PUNCH: me->CastSpell(me->GetVictim(), SPELL_PHASE_PUNCH, false); @@ -871,12 +871,12 @@ public: if (movementType != POINT_MOTION_TYPE) return; - uint32 delay = 1; + Milliseconds delay = 1ms; _currentPoint = pointId + 1; switch (pointId) { case 2: - delay = 8000; + delay = 8s; me->SetWalk(true); break; case 6: @@ -1010,7 +1010,7 @@ public: break; case ACTION_BIG_BANG: events.SetPhase(PHASE_BIG_BANG); - events.DelayEvents(9500); + events.DelayEvents(9500ms); events.ScheduleEvent(EVENT_RESUME_UPDATING, 9500ms); break; } @@ -1146,7 +1146,7 @@ public: _locked = true; // Start Algalon event me->SetGameObjectFlag(GO_FLAG_IN_USE); - events.ScheduleEvent(EVENT_DESPAWN_CONSOLE, 5000ms); + events.ScheduleEvent(EVENT_DESPAWN_CONSOLE, 5s); if (Creature* brann = me->SummonCreature(NPC_BRANN_BRONZBEARD_ALG, BrannIntroSpawnPos)) brann->AI()->DoAction(ACTION_START_INTRO); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp index c56188547..9df9798ec 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp @@ -355,7 +355,7 @@ public: case EVENT_OVERWHELMING_POWER: Talk(SAY_STEELBREAKER_POWER); me->CastSpell(me->GetVictim(), SPELL_OVERWHELMING_POWER, true); - events.RepeatEvent(RAID_MODE(61000, 36000)); + events.Repeat(RAID_MODE(61s, 36s)); break; case EVENT_ENRAGE: Talk(SAY_STEELBREAKER_BERSERK); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp index 101116798..3a30bbc84 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp @@ -255,7 +255,7 @@ public: case EVENT_SENTINEL_BLAST: me->CastSpell(me, SPELL_SENTINEL_BLAST, false); events.Repeat(35s); - events.DelayEvents(5000, 0); + events.DelayEvents(5s, 0); break; case EVENT_RESPAWN_FERAL_DEFENDER: { diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp index a4351a818..664565e88 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp @@ -266,7 +266,7 @@ public: Talk(SAY_EMOTE_SURGE_OF_DARKNESS); me->CastSpell(me, SPELL_SURGE_OF_DARKNESS, false); events.Repeat(63s); - events.DelayEvents(10000, 1); + events.DelayEvents(10s, 1); break; case EVENT_SPELL_MARK_OF_THE_FACELESS: { @@ -312,8 +312,8 @@ public: sv->GetMotionMaster()->MoveCharge(1852.78f, 81.38f, 342.461f, 28.0f); } - events.DelayEvents(12000, 0); - events.DelayEvents(12000, 1); + events.DelayEvents(12s, 0); + events.DelayEvents(12s, 1); events.ScheduleEvent(EVENT_SARONITE_VAPORS_SWIRL, 6s); } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp index cda5a3629..133868f33 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_ignis.cpp @@ -247,7 +247,7 @@ public: bShattered = false; lastShatterMSTime = 0; events.Reset(); - events.ScheduleEvent(EVENT_ACTIVATE_CONSTRUCT, RAID_MODE(40000, 30000)); + events.ScheduleEvent(EVENT_ACTIVATE_CONSTRUCT, RAID_MODE(40s, 30s)); events.ScheduleEvent(EVENT_SPELL_SCORCH, 10s); events.ScheduleEvent(EVENT_SPELL_FLAME_JETS, 32s); events.ScheduleEvent(EVENT_GRAB, 25s); @@ -347,7 +347,7 @@ public: me->CastSpell(me, SPELL_BERSERK, true); break; } - events.RepeatEvent(RAID_MODE(40000, 30000)); + events.Repeat(RAID_MODE(40s, 30s)); break; case EVENT_SPELL_SCORCH: Talk(SAY_SCORCH); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index 9823a3d9e..f9497a46b 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -378,8 +378,8 @@ public: events.ScheduleEvent(EVENT_COMPUTER_SAY_MINUTES, 3s); minutesTalkNum = Is25ManRaid() ? TALK_COMPUTER_TEN : TALK_COMPUTER_EIGHT; for (uint32 i = 0; i < uint32(TALK_COMPUTER_ZERO - minutesTalkNum - 1); ++i) - events.ScheduleEvent(EVENT_COMPUTER_SAY_MINUTES, (i + 1)*MINUTE * IN_MILLISECONDS); - events.ScheduleEvent(EVENT_COMPUTER_SAY_MINUTES, (TALK_COMPUTER_ZERO - minutesTalkNum)*MINUTE * IN_MILLISECONDS + 6000); + events.ScheduleEvent(EVENT_COMPUTER_SAY_MINUTES, Milliseconds((i + 1) * 60000)); + events.ScheduleEvent(EVENT_COMPUTER_SAY_MINUTES, Milliseconds((TALK_COMPUTER_ZERO - minutesTalkNum) * 60000)); } // ensure LMK2 is at proper position diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp index e2c684870..00e44dfe9 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp @@ -696,11 +696,11 @@ public: yoggb->AI()->Talk(EMOTE_YOGG_SARON_BRAIN_SHATTERED); } - uint32 timer = events.GetNextEventTime(EVENT_SARA_P2_OPEN_PORTALS); - uint32 portalTime = (timer > events.GetTimer() ? timer - events.GetTimer() : 0); - events.DelayEvents(param + 100); + Milliseconds timer = events.GetTimeUntilEvent(EVENT_SARA_P2_OPEN_PORTALS); + Milliseconds portalTime = (timer > 0ms ? timer : 0ms); + events.DelayEvents(Milliseconds(param + 100)); events.RescheduleEvent(EVENT_SARA_P2_OPEN_PORTALS, portalTime, 0, EVENT_PHASE_TWO); - events.ScheduleEvent(EVENT_SARA_P2_REMOVE_STUN, param, 0, EVENT_PHASE_TWO); + events.ScheduleEvent(EVENT_SARA_P2_REMOVE_STUN, Milliseconds(param), 0, EVENT_PHASE_TWO); me->CastSpell(me, SPELL_SHATTERED_ILLUSION, true); } @@ -804,7 +804,7 @@ public: events.ScheduleEvent(EVENT_SARA_P1_SPELLS, 0ms, 1, EVENT_PHASE_ONE); break; case EVENT_SARA_P1_SUMMON: - events.RepeatEvent(20000 - (std::min(_summonedGuardiansCount, (uint8)5) * 2000)); + events.Repeat(Milliseconds(20000 - (std::min(_summonedGuardiansCount, (uint8)5) * 2000))); ++_summonedGuardiansCount; InformCloud(); break; @@ -824,14 +824,14 @@ public: } me->CastCustomSpell(spell, SPELLVALUE_MAX_TARGETS, 1, nullptr, false); - events.RepeatEvent(me->GetMap()->Is25ManRaid() ? urand(0, 3000) : 4000 + urand(0, 2000)); + events.Repeat(me->GetMap()->Is25ManRaid() ? randtime(0ms, 3s) : randtime(4s, 6s)); break; } case EVENT_SARA_P2_START: { EntryCheckPredicate pred(NPC_YOGG_SARON); summons.DoAction(ACTION_YOGG_SARON_APPEAR, pred); - events.RescheduleEvent(EVENT_SARA_P2_SPAWN_START_TENTACLES, 500, 0, EVENT_PHASE_TWO); + events.RescheduleEvent(EVENT_SARA_P2_SPAWN_START_TENTACLES, 500ms, 0, EVENT_PHASE_TWO); // Spawn Brain! me->SummonCreature(NPC_BRAIN_OF_YOGG_SARON, 1981.3f, -25.43f, 265); @@ -856,15 +856,15 @@ public: break; case EVENT_SARA_P2_SUMMON_T1: // CRUSHER SpawnTentacle(NPC_CRUSHER_TENTACLE); - events.RepeatEvent((50000 + urand(0, 10000)) * _summonSpeed); + events.Repeat(Milliseconds(uint32((50000 + urand(0, 10000)) * _summonSpeed))); break; case EVENT_SARA_P2_SUMMON_T2: // CONSTRICTOR SpawnTentacle(NPC_CONSTRICTOR_TENTACLE); - events.RepeatEvent((15000 + urand(0, 5000)) * _summonSpeed); + events.Repeat(Milliseconds(uint32((15000 + urand(0, 5000))* _summonSpeed))); break; case EVENT_SARA_P2_SUMMON_T3: // CORRUPTOR SpawnTentacle(NPC_CORRUPTOR_TENTACLE); - events.RepeatEvent((30000 + urand(0, 10000)) * _summonSpeed); + events.Repeat(Milliseconds(uint32((30000 + urand(0, 10000))* _summonSpeed))); break; case EVENT_SARA_P2_BRAIN_LINK: me->CastCustomSpell(SPELL_BRAIN_LINK, SPELLVALUE_MAX_TARGETS, 1, me, false); @@ -901,9 +901,9 @@ public: events.ScheduleEvent(EVENT_SARA_P2_DEATH_RAY, 15s, 0, EVENT_PHASE_TWO); events.ScheduleEvent(EVENT_SARA_P2_SUMMON_T1, 50s, 60s, 0, EVENT_PHASE_TWO); events.ScheduleEvent(EVENT_SARA_P2_SUMMON_T2, 15s, 20s, 0, EVENT_PHASE_TWO); - events.ScheduleEvent(EVENT_SARA_P2_SUMMON_T3, 30000 + urand(0, 10000), 0, EVENT_PHASE_TWO); - events.ScheduleEvent(EVENT_SARA_P2_BRAIN_LINK, 0, 0, EVENT_PHASE_TWO); - events.ScheduleEvent(EVENT_SARA_P2_OPEN_PORTALS, 60000, 0, EVENT_PHASE_TWO); + events.ScheduleEvent(EVENT_SARA_P2_SUMMON_T3, 30s + randtime(0ms, 10s), 0, EVENT_PHASE_TWO); + events.ScheduleEvent(EVENT_SARA_P2_BRAIN_LINK, 0ms, 0, EVENT_PHASE_TWO); + events.ScheduleEvent(EVENT_SARA_P2_OPEN_PORTALS, 60s, 0, EVENT_PHASE_TWO); break; case EVENT_SARA_P1_BERSERK: if (me->GetInstanceScript()) @@ -1167,20 +1167,20 @@ public: me->RemoveAura(SPELL_SHADOW_BARRIER); - events.ScheduleEvent(EVENT_YS_LUNATIC_GAZE, 7000); - events.ScheduleEvent(EVENT_YS_SHADOW_BEACON, 20000); - events.ScheduleEvent(EVENT_YS_SUMMON_GUARDIAN, 0); + events.ScheduleEvent(EVENT_YS_LUNATIC_GAZE, 7s); + events.ScheduleEvent(EVENT_YS_SHADOW_BEACON, 20s); + events.ScheduleEvent(EVENT_YS_SUMMON_GUARDIAN, 0ms); _thirdPhase = true; Talk(SAY_YOGG_SARON_PHASE_3); } else if (param == ACTION_YOGG_SARON_HARD_MODE) { - events.ScheduleEvent(EVENT_YS_DEAFENING_ROAR, 50000); + events.ScheduleEvent(EVENT_YS_DEAFENING_ROAR, 50s); } else if (param == ACTION_YOGG_SARON_SHADOW_BEACON) { - events.RescheduleEvent(EVENT_YS_SHADOW_BEACON, 40000); + events.RescheduleEvent(EVENT_YS_SHADOW_BEACON, 40s); } else if (param == ACTION_REMOVE_STUN) { diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp index 62263725b..825efd969 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/utgarde_keep.cpp @@ -111,8 +111,8 @@ struct npc_enslaved_proto_drake : public ScriptedAI { _events.Reset(); _events.ScheduleEvent(EVENT_REND, 2s, 3s); - _events.ScheduleEvent(EVENT_FLAME_BREATH, 5500ms, 7000ms); - _events.ScheduleEvent(EVENT_KNOCKAWAY, 3500ms, 6000ms); + _events.ScheduleEvent(EVENT_FLAME_BREATH, 5500ms, 7s); + _events.ScheduleEvent(EVENT_KNOCKAWAY, 3500ms, 6s); } void MovementInform(uint32 type, uint32 id) override @@ -167,7 +167,7 @@ struct npc_enslaved_proto_drake : public ScriptedAI break; case EVENT_KNOCKAWAY: DoCast(SPELL_KNOCK_AWAY); - _events.ScheduleEvent(EVENT_KNOCKAWAY, 7000ms, 8500ms); + _events.ScheduleEvent(EVENT_KNOCKAWAY, 7s, 8500ms); break; default: break; diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp index 92fc069d4..32054ef60 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_svala.cpp @@ -157,7 +157,7 @@ public: me->SetImmuneToAll(true); Started = true; me->setActive(true); - events2.ScheduleEvent(EVENT_SVALA_START, 5000); + events2.ScheduleEvent(EVENT_SVALA_START, 5s); if (Creature* pArthas = me->SummonCreature(NPC_ARTHAS, 295.81f, -366.16f, 92.57f, 1.58f, TEMPSUMMON_TIMED_OR_CORPSE_DESPAWN, 59000)) ArthasGUID = pArthas->GetGUID(); @@ -339,7 +339,7 @@ public: me->SetControlled(true, UNIT_STATE_ROOT); } - events.DelayEvents(25001); // +1 just to be sure + events.DelayEvents(25001ms); // +1 just to be sure events.ScheduleEvent(EVENT_SORROWGRAVE_RITUAL_SPELLS, 0ms); events.ScheduleEvent(EVENT_SORROWGRAVE_FINISH_RITUAL, 25s); return; diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp index 0a1487f15..363188614 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardePinnacle/boss_ymiron.cpp @@ -217,7 +217,7 @@ public: { if (me->GetHealth() < std::max(0.0f, float(me->GetMaxHealth() * (1.0f - (IsHeroic() ? 0.2f : 0.334f)*float(BoatNum + 1))))) { - events.DelayEvents(12000); + events.DelayEvents(12s); me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->InterruptNonMeleeSpells(true); me->CastSpell(me, SPELL_SCREAMS_OF_THE_DEAD, true); diff --git a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp index 27b354bee..f372215ff 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp @@ -121,7 +121,7 @@ public: while (entry1 == entry2); me->CastSpell((Unit*)nullptr, entry2, true); } - events.RepeatEvent(45000); + events.Repeat(45s); events.RescheduleEvent(EVENT_SPELL_ARCANE_BUFFET, 5s); events.RescheduleEvent(EVENT_CHECK_DISTANCE, 6s); } diff --git a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp index 8406b3527..4fa7bb52c 100644 --- a/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/instance_violet_hold.cpp @@ -92,7 +92,7 @@ public: uiFirstBoss = 0; uiSecondBoss = 0; events.Reset(); - events.RescheduleEvent(EVENT_CHECK_PLAYERS, 0); + events.RescheduleEvent(EVENT_CHECK_PLAYERS, 0ms); GateHealth = 100; WaveCount = 0; PortalLocation = 0; @@ -666,7 +666,7 @@ public: EncounterStatus = NOT_STARTED; CLEANED = false; events.Reset(); - events.RescheduleEvent(EVENT_CHECK_PLAYERS, 0); + events.RescheduleEvent(EVENT_CHECK_PLAYERS, 0ms); data >> m_auiEncounter[0]; data >> m_auiEncounter[1]; diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp index 1332cf672..812bbe05c 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp @@ -1198,11 +1198,11 @@ struct npc_violet_hold_defense_system : public ScriptedAI { case EVENT_ARCANE_LIGHTNING: DoCastAOE(RAND(SPELL_ARCANE_LIGHTNING, SPELL_ARCANE_LIGHTNING_VISUAL)); - events.RepeatEvent(2000); + events.Repeat(2s); break; case EVENT_ARCANE_LIGHTNING_INSTAKILL: DoCastAOE(SPELL_ARCANE_LIGHTNING_INSTAKILL); - events.RepeatEvent(1000); + events.Repeat(1s); break; } } diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 8f352e893..03d0df839 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -609,7 +609,7 @@ struct npc_beryl_sorcererAI : public CreatureAI AttackStart(who); } - _events.ScheduleEvent(EVENT_FROSTBOLT, 3000, 4000); + _events.ScheduleEvent(EVENT_FROSTBOLT, 3s, 4s); } void SpellHit(Unit* unit, SpellInfo const* spell) override @@ -1431,7 +1431,7 @@ public: if (Player* player = ObjectAccessor::GetPlayer(*me, _playerGUID)) me->SetFacingToObject(player); - _events.ScheduleEvent(EVENT_TALK, 1000); + _events.ScheduleEvent(EVENT_TALK, 1s); } void UpdateAI(uint32 diff) override @@ -1557,7 +1557,7 @@ public: void Reset() override { me->SetImmuneToAll(true); - _events.ScheduleEvent(EVENT_THASSARIAN_CAST, 1000); + _events.ScheduleEvent(EVENT_THASSARIAN_CAST, 1s); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index 52aac2193..a7eab2215 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -1095,7 +1095,7 @@ public: void SetGUID(ObjectGuid guid, int32 /*id*/) override { - if (playerGUID || events.GetNextEventTime(998) || events.GetNextEventTime(2)) + if (playerGUID || events.HasTimeUntilEvent(998) || events.HasTimeUntilEvent(2)) return; me->setActive(true); @@ -2114,8 +2114,8 @@ public: void JustEngagedWith(Unit* who) override { - _events.ScheduleEvent(EVENT_HEMORRHAGE, urand(5000, 8000)); - _events.ScheduleEvent(EVENT_KIDNEY_SHOT, urand(12000, 15000)); + _events.ScheduleEvent(EVENT_HEMORRHAGE, 5s, 8s); + _events.ScheduleEvent(EVENT_KIDNEY_SHOT, 12s, 15s); if (Player* player = who->ToPlayer()) Talk (SAY_AGGRO, player); diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp index 7db4f389c..d9b5d1ab5 100644 --- a/src/server/scripts/Northrend/zone_icecrown.cpp +++ b/src/server/scripts/Northrend/zone_icecrown.cpp @@ -1257,8 +1257,8 @@ public: player->CastSpell(player, SPELL_WAITING_FOR_A_BOMBER, true); player->CastSpell(player, SPELL_FLIGHT_ORDERS, true); - events.ScheduleEvent(EVENT_START_FLIGHT, 0); - events.ScheduleEvent(EVENT_TAKE_PASSENGER, 3000); + events.ScheduleEvent(EVENT_START_FLIGHT, 0ms); + events.ScheduleEvent(EVENT_TAKE_PASSENGER, 3s); me->SetCanFly(true); me->AddUnitMovementFlag(MOVEMENTFLAG_FLYING); me->SetSpeed(MOVE_FLIGHT, 0.1f); diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp index 1717a518d..76c3d86ef 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_grandmaster_vorpil.cpp @@ -111,7 +111,7 @@ struct boss_grandmaster_vorpil : public BossAI case 8: return 7200ms; case 9: - return 6000ms; + return 6s; default: return 4800ms; } diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp index da92628e0..2941b05da 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp @@ -923,7 +923,7 @@ struct npc_akama_illidan : public ScriptedAI me->m_Events.AddEventAtOffset([&] { Talk(SAY_AKAMA_COUNCIL_2); me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP); - }, 8000ms); // 7800ms + }, 8s); // 7800ms } break; // Reached Door diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp index 8c22b8d04..c318e3871 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidari_council.cpp @@ -262,7 +262,7 @@ struct boss_illidari_council_memberAI : public ScriptedAI void KilledUnit(Unit*) override { - if (events.GetNextEventTime(EVENT_KILL_TALK) == 0) + if (!events.HasTimeUntilEvent(EVENT_KILL_TALK)) { Talk(SAY_COUNCIL_SLAY); events.ScheduleEvent(EVENT_KILL_TALK, 6s); @@ -582,7 +582,7 @@ struct boss_veras_darkshadow : public boss_illidari_council_memberAI break; } - if (events.GetNextEventTime(EVENT_SPELL_VANISH_OUT) == 0) + if (!events.HasTimeUntilEvent(EVENT_SPELL_VANISH_OUT)) DoMeleeAttackIfReady(); } }; diff --git a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp index 1cc778b25..39e772386 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp @@ -251,7 +251,7 @@ struct npc_akama_shade : public ScriptedAI { Talk(SAY_BROKEN_FREE_2); }, 3); - ScheduleUniqueTimedEvent(52000ms, [&] + ScheduleUniqueTimedEvent(52s, [&] { std::list brokens; me->GetCreatureListWithEntryInGrid(brokens, NPC_ASHTONGUE_BROKEN, 40.0f); diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp index 08bdae70a..7ac8263d3 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp @@ -129,7 +129,7 @@ struct boss_the_lurker_below : public BossAI { BossAI::JustEngagedWith(who); - SchedulerPhaseOne(38800ms, 91000ms); + SchedulerPhaseOne(38800ms, 91s); } void SummonedCreatureDies(Creature* /*summon*/, Unit* /*killer*/) override @@ -191,7 +191,7 @@ struct boss_the_lurker_below : public BossAI me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); scheduler.CancelAll(); - SchedulerPhaseOne(10000ms, 90750ms); + SchedulerPhaseOne(10s, 90750ms); }); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp index 95bba3d49..c1d2c7d42 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp @@ -188,7 +188,7 @@ struct boss_ahune : public BossAI { BossAI::JustEngagedWith(who); events.ScheduleEvent(EVENT_INITIAL_EMERGE, 4ms); - events.ScheduleEvent(EVENT_SYNCH_HEALTH, 3000); + events.ScheduleEvent(EVENT_SYNCH_HEALTH, 3s); } void EnterEvadeMode(EvadeReason /*why*/) override @@ -318,7 +318,7 @@ struct npc_frozen_core : public ScriptedAI me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetImmuneToPC(false); me->RemoveAurasDueToSpell(SPELL_ICE_SPEAR_CONTROL_AURA); - _events.ScheduleEvent(EVENT_SYNCH_HEALTH, 3000, 0, PHASE_TWO); + _events.ScheduleEvent(EVENT_SYNCH_HEALTH, 3s, 0, PHASE_TWO); } else if (action == ACTION_AHUNE_RESURFACE) { @@ -342,7 +342,7 @@ struct npc_frozen_core : public ScriptedAI DoCast(ahune, SPELL_SYNCH_HEALTH, true); else DoCastSelf(SPELL_SUICIDE); - _events.Repeat(3000ms, 3000ms); + _events.Repeat(3s, 3s); break; default: break; @@ -394,11 +394,11 @@ struct npc_ahune_bunny : public ScriptedAI _submerged = false; _events.Reset(); _events.SetPhase(PHASE_ONE); - _events.ScheduleEvent(EVENT_SUMMON_AHUNE, 10000); - _events.ScheduleEvent(EVENT_START_LOOKING_FOR_OPENING, 14000, 0, PHASE_ONE); - _events.ScheduleEvent(EVENT_SUMMON_COLDWEAVE, 22000, 0, PHASE_ONE); - _events.ScheduleEvent(EVENT_SUMMON_HAILSTONE, 14000, 0, PHASE_ONE); - _events.ScheduleEvent(EVENT_AHUNE_PHASE_TWO, 108000, 0, PHASE_ONE); + _events.ScheduleEvent(EVENT_SUMMON_AHUNE, 10s); + _events.ScheduleEvent(EVENT_START_LOOKING_FOR_OPENING, 14s, 0, PHASE_ONE); + _events.ScheduleEvent(EVENT_SUMMON_COLDWEAVE, 22s, 0, PHASE_ONE); + _events.ScheduleEvent(EVENT_SUMMON_HAILSTONE, 14s, 0, PHASE_ONE); + _events.ScheduleEvent(EVENT_AHUNE_PHASE_TWO, 108s, 0, PHASE_ONE); } else if (action == ACTION_STOP_EVENT) { @@ -430,9 +430,9 @@ struct npc_ahune_bunny : public ScriptedAI case EVENT_SUMMON_COLDWEAVE: DoCast(SPELL_SUMMON_COLDWEAVE); DoCast(SPELL_SUMMON_COLDWEAVE); - _events.Repeat(8000ms); + _events.Repeat(8s); if (_submerged) - _events.ScheduleEvent(EVENT_SUMMON_FROSTWIND, 4000, 0, PHASE_ONE); + _events.ScheduleEvent(EVENT_SUMMON_FROSTWIND, 4s, 0, PHASE_ONE); break; case EVENT_SUMMON_FROSTWIND: DoCast(SPELL_SUMMON_FROSTWIND); @@ -458,17 +458,17 @@ struct npc_ahune_bunny : public ScriptedAI ahune->AI()->DoAction(ACTION_AHUNE_RETREAT); _events.Reset(); _events.SetPhase(PHASE_TWO); - _events.ScheduleEvent(EVENT_CLOSE_OPENING, 25000, 0, PHASE_TWO); - _events.ScheduleEvent(EVENT_AHUNE_PHASE_ONE, 35000, 0, PHASE_TWO); + _events.ScheduleEvent(EVENT_CLOSE_OPENING, 25s, 0, PHASE_TWO); + _events.ScheduleEvent(EVENT_AHUNE_PHASE_ONE, 35s, 0, PHASE_TWO); break; case EVENT_AHUNE_PHASE_ONE: _submerged = true; _events.Reset(); _events.SetPhase(PHASE_ONE); - _events.ScheduleEvent(EVENT_SUMMON_COLDWEAVE, 8000, 0, PHASE_ONE); - _events.ScheduleEvent(EVENT_SUMMON_HAILSTONE, 5000, 0, PHASE_ONE); - _events.ScheduleEvent(EVENT_START_LOOKING_FOR_OPENING, 5000, 0, PHASE_ONE); - _events.ScheduleEvent(EVENT_AHUNE_PHASE_TWO, 100000, 0, PHASE_ONE); + _events.ScheduleEvent(EVENT_SUMMON_COLDWEAVE, 8s, 0, PHASE_ONE); + _events.ScheduleEvent(EVENT_SUMMON_HAILSTONE, 5s, 0, PHASE_ONE); + _events.ScheduleEvent(EVENT_START_LOOKING_FOR_OPENING, 5s, 0, PHASE_ONE); + _events.ScheduleEvent(EVENT_AHUNE_PHASE_TWO, 100s, 0, PHASE_ONE); break; default: break; @@ -534,7 +534,7 @@ struct npc_earthen_ring_flamecaller : public ScriptedAI switch (spellInfo->Id) { case SPELL_SHAMANS_LOOK_FOR_OPENING: - _events.ScheduleEvent(EVENT_LOOKFOROPENING_0, 17000); + _events.ScheduleEvent(EVENT_LOOKFOROPENING_0, 17s); break; case SPELL_FOUND_OPENING: Talk(EMOTE_RETREAT); @@ -560,15 +560,15 @@ struct npc_earthen_ring_flamecaller : public ScriptedAI { case EVENT_LOOKFOROPENING_0: LookOpening(true, 0); - _events.ScheduleEvent(EVENT_LOOKFOROPENING_1, 26000); + _events.ScheduleEvent(EVENT_LOOKFOROPENING_1, 26s); break; case EVENT_LOOKFOROPENING_1: LookOpening(true, 1); - _events.ScheduleEvent(EVENT_LOOKFOROPENING_2, 25000); + _events.ScheduleEvent(EVENT_LOOKFOROPENING_2, 25s); break; case EVENT_LOOKFOROPENING_2: LookOpening(true, 2); - _events.ScheduleEvent(EVENT_STOP_LOOKING_FOR_OPENING, 27000); + _events.ScheduleEvent(EVENT_STOP_LOOKING_FOR_OPENING, 27s); break; case EVENT_STOP_LOOKING_FOR_OPENING: LookOpening(false, _mySpot); diff --git a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp index dfbdf0d91..355f2abad 100644 --- a/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp +++ b/src/server/scripts/Outland/GruulsLair/boss_gruul.cpp @@ -68,7 +68,7 @@ struct boss_gruul : public BossAI { _Reset(); _recentlySpoken = false; - _caveInTimer = 29000ms; + _caveInTimer = 29s; } void JustEngagedWith(Unit* /*who*/) override @@ -84,7 +84,7 @@ struct boss_gruul : public BossAI }).Schedule(_caveInTimer, [this](TaskContext context) { DoCastRandomTarget(SPELL_CAVE_IN); - if (_caveInTimer > 4000ms) + if (_caveInTimer > 4s) { _caveInTimer = _caveInTimer - 1500ms; } diff --git a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp index c6624521f..c7397da3e 100644 --- a/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp +++ b/src/server/scripts/Outland/GruulsLair/boss_high_king_maulgar.cpp @@ -146,7 +146,7 @@ struct boss_high_king_maulgar : public BossAI { DoCastVictim(SPELL_MIGHTY_BLOW); context.Repeat(16200ms, 19s); - }).Schedule(67000ms, [this](TaskContext context) + }).Schedule(67s, [this](TaskContext context) { scheduler.DelayAll(15s); DoCastSelf(SPELL_WHIRLWIND); diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp index 117712e48..ba032cb9e 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp @@ -269,7 +269,7 @@ struct boss_kaelthas : public BossAI void AttackStart(Unit* who) override { - if (_phase == PHASE_FINAL /* check is scheduled&& events.GetNextEventTime(EVENT_GRAVITY_LAPSE_END) == 0*/) + if (_phase == PHASE_FINAL /* check is scheduled&& !events.HasTimeUntilEvent(EVENT_GRAVITY_LAPSE_END)*/) BossAI::AttackStart(who); } @@ -364,11 +364,11 @@ struct boss_kaelthas : public BossAI { DoCastVictim(SPELL_FIREBALL); }, 2400ms, 7500ms); - ScheduleTimedEvent(10000ms, [&] + ScheduleTimedEvent(10s, [&] { DoCastRandomTarget(SPELL_FLAME_STRIKE, 0, 100.0f); }, 30250ms, 50650ms); - ScheduleTimedEvent(50000ms, [&] + ScheduleTimedEvent(50s, [&] { Talk(SAY_SUMMON_PHOENIX); DoCastSelf(SPELL_PHOENIX); @@ -429,7 +429,7 @@ struct boss_kaelthas : public BossAI DoCastSelf(SPELL_KAEL_EXPLODES1, true); DoCastSelf(SPELL_KAEL_GAINING_POWER); }, EVENT_SCENE_2); - ScheduleUniqueTimedEvent(4000ms, [&] + ScheduleUniqueTimedEvent(4s, [&] { me->SetTarget(); for (uint8 i = 0; i < 2; ++i) @@ -440,7 +440,7 @@ struct boss_kaelthas : public BossAI me->GetMotionMaster()->MoveTakeoff(POINT_AIR, me->GetPositionX(), me->GetPositionY(), 75.0f, 2.99, true); // AnimType Movement::ToFly does not exist for Kael DoCastSelf(SPELL_GROW, true); }, EVENT_SCENE_3); - ScheduleUniqueTimedEvent(7000ms, [&] + ScheduleUniqueTimedEvent(7s, [&] { me->SetTarget(); DoCastSelf(SPELL_GROW, true); @@ -450,7 +450,7 @@ struct boss_kaelthas : public BossAI if (Creature* trigger = me->SummonCreature(WORLD_TRIGGER, triggersPos[i + 2], TEMPSUMMON_TIMED_DESPAWN, 60000)) trigger->CastSpell(me, SPELL_NETHERBEAM1 + i, false); }, EVENT_SCENE_4); - ScheduleUniqueTimedEvent(10000ms, [&] + ScheduleUniqueTimedEvent(10s, [&] { me->SetTarget(); DoCastSelf(SPELL_GROW, true); @@ -460,7 +460,7 @@ struct boss_kaelthas : public BossAI if (Creature* trigger = me->SummonCreature(WORLD_TRIGGER, triggersPos[i + 4], TEMPSUMMON_TIMED_DESPAWN, 60000)) trigger->CastSpell(me, SPELL_NETHERBEAM1 + i, false); }, EVENT_SCENE_5); - ScheduleUniqueTimedEvent(14000ms, [&] + ScheduleUniqueTimedEvent(14s, [&] { DoCastSelf(SPELL_GROW, true); DoCastSelf(SPELL_KAEL_EXPLODES4, true); @@ -470,7 +470,7 @@ struct boss_kaelthas : public BossAI { SetRoomState(GO_STATE_ACTIVE); }, EVENT_SCENE_7); - ScheduleUniqueTimedEvent(19000ms, [&] + ScheduleUniqueTimedEvent(19s, [&] { summons.DespawnEntry(WORLD_TRIGGER); me->RemoveAurasDueToSpell(SPELL_NETHERBEAM_AURA1); @@ -478,7 +478,7 @@ struct boss_kaelthas : public BossAI me->RemoveAurasDueToSpell(SPELL_NETHERBEAM_AURA3); DoCastSelf(SPELL_KAEL_EXPLODES5, true); }, EVENT_SCENE_8); - ScheduleUniqueTimedEvent(22000ms, [&] + ScheduleUniqueTimedEvent(22s, [&] { DoCastSelf(SPELL_DARK_BANISH_STATE, true); DoCastSelf(SPELL_ARCANE_EXPLOSION_VISUAL, true); @@ -528,14 +528,14 @@ struct boss_kaelthas : public BossAI me->CastStop(); DoCastSelf(SPELL_KAEL_FULL_POWER); }, EVENT_SCENE_16); - ScheduleUniqueTimedEvent(32000ms, [&] + ScheduleUniqueTimedEvent(32s, [&] { DoCastSelf(SPELL_KAEL_PHASE_TWO, true); DoCastSelf(SPELL_PURE_NETHER_BEAM4, true); DoCastSelf(SPELL_PURE_NETHER_BEAM5, true); DoCastSelf(SPELL_PURE_NETHER_BEAM6, true); }, EVENT_SCENE_17); - ScheduleUniqueTimedEvent(36000ms, [&] + ScheduleUniqueTimedEvent(36s, [&] { summons.DespawnEntry(WORLD_TRIGGER); me->CastStop(); @@ -559,7 +559,7 @@ struct boss_kaelthas : public BossAI switch (kaelAction) { case ACTION_START_THALADRED: - attackStartTimer = 7000ms; + attackStartTimer = 7s; advisorNPCId = NPC_THALADRED; break; case ACTION_START_SANGUINAR: @@ -567,7 +567,7 @@ struct boss_kaelthas : public BossAI advisorNPCId = NPC_LORD_SANGUINAR; break; case ACTION_START_CAPERNIAN: - attackStartTimer = 9000ms; + attackStartTimer = 9s; advisorNPCId = NPC_CAPERNIAN; break; case ACTION_START_TELONICUS: @@ -658,15 +658,15 @@ struct boss_kaelthas : public BossAI me->GetMotionMaster()->MovePoint(POINT_MIDDLE, me->GetHomePosition(), true, true); } }); - ScheduleTimedEvent(1000ms, [&] + ScheduleTimedEvent(1s, [&] { DoCastVictim(SPELL_FIREBALL); }, 2400ms, 7500ms); - ScheduleTimedEvent(15000ms, [&] + ScheduleTimedEvent(15s, [&] { DoCastRandomTarget(SPELL_FLAME_STRIKE, 0, 100.0f); }, 30250ms, 50650ms); - ScheduleTimedEvent(50000ms, [&] + ScheduleTimedEvent(50s, [&] { Talk(SAY_SUMMON_PHOENIX); DoCastSelf(SPELL_PHOENIX); @@ -855,7 +855,7 @@ struct npc_capernian : public advisor_baseAI DoCastVictim(SPELL_CAPERNIAN_FIREBALL); } }, 2500ms); - ScheduleTimedEvent(7000ms, 10000ms, [&]{ + ScheduleTimedEvent(7s, 10s, [&]{ DoCastRandomTarget(SPELL_CONFLAGRATION, 0, 30.0f); }, 18500ms, 20500ms); ScheduleTimedEvent(3s, [&]{ @@ -893,16 +893,16 @@ struct npc_thaladred : public advisor_baseAI me->AddThreat(target, 10000000.0f); Talk(EMOTE_THALADRED_FIXATE, target); } - }, 10000ms); - ScheduleTimedEvent(4000ms, 19350ms, [&] + }, 10s); + ScheduleTimedEvent(4s, 19350ms, [&] { DoCastVictim(SPELL_PSYCHIC_BLOW); }, 15700ms, 48900ms); - ScheduleTimedEvent(3000ms, 6050ms, [&] + ScheduleTimedEvent(3s, 6050ms, [&] { DoCastVictim(SPELL_REND); }, 15700ms, 48900ms); - ScheduleTimedEvent(3000ms, 6050ms, [&] + ScheduleTimedEvent(3s, 6050ms, [&] { if (Unit* victim = me->GetVictim()) { diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp index 1aa95aa7d..8c992b880 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/arcatraz.cpp @@ -97,8 +97,8 @@ public: me->SetReactState(REACT_PASSIVE); me->SetImmuneToAll(true); events2.Reset(); - events2.ScheduleEvent(EVENT_TELEPORT_VISUAL, 0); - events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO1, 3000); + events2.ScheduleEvent(EVENT_TELEPORT_VISUAL, 0ms); + events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO1, 3s); } void Reset() override @@ -125,9 +125,9 @@ public: void JustEngagedWith(Unit*) override { - events.ScheduleEvent(EVENT_MILL_CHECK_HEALTH, 1000); - events.ScheduleEvent(EVENT_MILL_PYROBLAST, 30000); - events.ScheduleEvent(EVENT_MILL_BASE_SPELL, 2000); + events.ScheduleEvent(EVENT_MILL_CHECK_HEALTH, 1s); + events.ScheduleEvent(EVENT_MILL_PYROBLAST, 30s); + events.ScheduleEvent(EVENT_MILL_BASE_SPELL, 2s); } void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*type*/, SpellSchoolMask /*school*/) override @@ -150,52 +150,52 @@ public: break; case EVENT_MILLHOUSE_INTRO1: Talk(SAY_INTRO_1); - events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO2, 18000); + events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO2, 18s); break; case EVENT_MILLHOUSE_INTRO2: Talk(SAY_INTRO_2); - events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO3, 8000); + events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO3, 8s); break; case EVENT_MILLHOUSE_INTRO3: Talk(SAY_INTRO_3); - events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO4, 6000); + events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO4, 6s); break; case EVENT_MILLHOUSE_INTRO4: Talk(SAY_INTRO_4); - events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO5, 8000); + events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO5, 8s); break; case EVENT_MILLHOUSE_INTRO5: Talk(SAY_WATER); me->CastSpell(me, SPELL_CONJURE_WATER, false); - events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO6, 7000); + events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO6, 7s); break; case EVENT_MILLHOUSE_INTRO6: Talk(SAY_BUFFS); me->CastSpell(me, SPELL_ICE_ARMOR, false); - events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO7, 7000); + events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO7, 7s); break; case EVENT_MILLHOUSE_INTRO7: Talk(SAY_DRINK); me->CastSpell(me, SPELL_ARCANE_INTELLECT, false); - events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO8, 7000); + events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO8, 7s); break; case EVENT_MILLHOUSE_INTRO8: Talk(SAY_READY); me->GetMotionMaster()->MovePoint(1, 445.82f, -158.38f, 43.067f); - events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO9, 5000); + events2.ScheduleEvent(EVENT_MILLHOUSE_INTRO9, 5s); break; case EVENT_MILLHOUSE_INTRO9: me->SetFacingTo(M_PI * 1.5f); me->SetHomePosition(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), M_PI * 1.5f); me->SetImmuneToAll(false); me->SetReactState(REACT_AGGRESSIVE); - events2.ScheduleEvent(EVENT_SEARCH_FIGHT, 1000); + events2.ScheduleEvent(EVENT_SEARCH_FIGHT, 1s); break; case EVENT_SEARCH_FIGHT: if (!me->IsInCombat() && !me->IsInEvadeMode()) if (Unit* target = me->SelectNearbyTarget(nullptr, 30.0f)) AttackStart(target); - events2.ScheduleEvent(EVENT_SEARCH_FIGHT, 1000); + events2.ScheduleEvent(EVENT_SEARCH_FIGHT, 1s); break; } @@ -214,27 +214,27 @@ public: Talk(SAY_LOWHP); break; } - events.ScheduleEvent(EVENT_MILL_CHECK_HEALTH, 1000); + events.ScheduleEvent(EVENT_MILL_CHECK_HEALTH, 1s); break; case EVENT_MILL_PYROBLAST: Talk(SAY_PYRO); me->CastSpell(me->GetVictim(), SPELL_PYROBLAST, false); - events.ScheduleEvent(EVENT_MILL_PYROBLAST, 30000); + events.ScheduleEvent(EVENT_MILL_PYROBLAST, 30s); break; case EVENT_MILL_BASE_SPELL: switch (RAND(SPELL_FIREBALL, SPELL_ARCANE_MISSILES, SPELL_FROSTBOLT)) { case SPELL_FIREBALL: me->CastSpell(me->GetVictim(), SPELL_FIREBALL, false); - events.ScheduleEvent(EVENT_MILL_BASE_SPELL, 4000); + events.ScheduleEvent(EVENT_MILL_BASE_SPELL, 4s); break; case SPELL_ARCANE_MISSILES: me->CastSpell(me->GetVictim(), SPELL_ARCANE_MISSILES, false); - events.ScheduleEvent(EVENT_MILL_BASE_SPELL, 9000); + events.ScheduleEvent(EVENT_MILL_BASE_SPELL, 9s); break; case SPELL_FROSTBOLT: me->CastSpell(me->GetVictim(), SPELL_FROSTBOLT, false); - events.ScheduleEvent(EVENT_MILL_BASE_SPELL, 4000); + events.ScheduleEvent(EVENT_MILL_BASE_SPELL, 4s); break; default: break; @@ -390,8 +390,8 @@ public: me->setActive(true); me->InterruptNonMeleeSpells(false); me->SetImmuneToAll(true); - events.ScheduleEvent(EVENT_WARDEN_INTRO1, 1500); - events.ScheduleEvent(EVENT_WARDEN_CHECK_PLAYERS, 1000); + events.ScheduleEvent(EVENT_WARDEN_INTRO1, 1500ms); + events.ScheduleEvent(EVENT_WARDEN_CHECK_PLAYERS, 1s); instance->SetBossState(DATA_WARDEN_MELLICHAR, IN_PROGRESS); } damage = 0; @@ -410,13 +410,13 @@ public: switch (type) { case DATA_WARDEN_1: - events.ScheduleEvent(EVENT_WARDEN_INTRO8, 2000); + events.ScheduleEvent(EVENT_WARDEN_INTRO8, 2s); break; case DATA_WARDEN_3: - events.ScheduleEvent(EVENT_WARDEN_INTRO19, 2000); + events.ScheduleEvent(EVENT_WARDEN_INTRO19, 2s); break; case DATA_WARDEN_4: - events.ScheduleEvent(EVENT_WARDEN_INTRO24, 2000); + events.ScheduleEvent(EVENT_WARDEN_INTRO24, 2s); break; } } @@ -432,35 +432,35 @@ public: CreatureAI::EnterEvadeMode(); return; } - events.ScheduleEvent(EVENT_WARDEN_CHECK_PLAYERS, 1000); + events.ScheduleEvent(EVENT_WARDEN_CHECK_PLAYERS, 1s); break; case EVENT_WARDEN_INTRO1: Talk(YELL_INTRO1); me->SetFacingTo(M_PI / 2.0f); me->CastSpell(me, SPELL_BUBBLE_VISUAL, false); - events.ScheduleEvent(EVENT_WARDEN_INTRO2, 1400); + events.ScheduleEvent(EVENT_WARDEN_INTRO2, 1400ms); break; case EVENT_WARDEN_INTRO2: instance->HandleGameObject(instance->GetGuidData(DATA_WARDENS_SHIELD), false); - events.ScheduleEvent(EVENT_WARDEN_INTRO3, 20000); + events.ScheduleEvent(EVENT_WARDEN_INTRO3, 20s); break; case EVENT_WARDEN_INTRO3: Talk(YELL_INTRO2); - events.ScheduleEvent(EVENT_WARDEN_INTRO4, 5000); + events.ScheduleEvent(EVENT_WARDEN_INTRO4, 5s); break; case EVENT_WARDEN_INTRO4: me->SetFacingTo(0.5f); me->CastSpell((Unit*)nullptr, SPELL_TARGET_ALPHA, false); - events.ScheduleEvent(EVENT_WARDEN_INTRO5, 2000); + events.ScheduleEvent(EVENT_WARDEN_INTRO5, 2s); break; case EVENT_WARDEN_INTRO5: instance->SetData(DATA_WARDEN_1, IN_PROGRESS); - events.ScheduleEvent(EVENT_WARDEN_INTRO6, 3000); + events.ScheduleEvent(EVENT_WARDEN_INTRO6, 3s); break; case EVENT_WARDEN_INTRO6: me->SetFacingTo(M_PI * 1.5f); me->CastSpell((Unit*)nullptr, SPELL_TARGET_OMEGA, false); - events.ScheduleEvent(EVENT_WARDEN_INTRO7, 5000); + events.ScheduleEvent(EVENT_WARDEN_INTRO7, 5s); break; case EVENT_WARDEN_INTRO7: me->SummonCreature(RAND(NPC_TRICKSTER, NPC_PH_HUNTER), 478.326f, -148.505f, 42.56f, 3.19f, TEMPSUMMON_MANUAL_DESPAWN); @@ -470,44 +470,44 @@ public: Talk(YELL_RELEASE1); me->InterruptNonMeleeSpells(false); me->SetFacingTo(2.6f); - events.ScheduleEvent(EVENT_WARDEN_INTRO10, 4000); + events.ScheduleEvent(EVENT_WARDEN_INTRO10, 4s); break; case EVENT_WARDEN_INTRO10: me->CastSpell((Unit*)nullptr, SPELL_TARGET_BETA, false); - events.ScheduleEvent(EVENT_WARDEN_INTRO11, 2000); + events.ScheduleEvent(EVENT_WARDEN_INTRO11, 2s); break; case EVENT_WARDEN_INTRO11: Talk(YELL_RELEASE2A); instance->SetData(DATA_WARDEN_2, IN_PROGRESS); - events.ScheduleEvent(EVENT_WARDEN_INTRO12, 2000); + events.ScheduleEvent(EVENT_WARDEN_INTRO12, 2s); break; case EVENT_WARDEN_INTRO12: me->SetFacingTo(M_PI * 1.5f); me->CastSpell((Unit*)nullptr, SPELL_TARGET_OMEGA, false); - events.ScheduleEvent(EVENT_WARDEN_INTRO13, 6000); + events.ScheduleEvent(EVENT_WARDEN_INTRO13, 6s); break; case EVENT_WARDEN_INTRO13: me->SummonCreature(NPC_MILLHOUSE, 413.292f, -148.378f, 42.56f, 6.27f, TEMPSUMMON_MANUAL_DESPAWN); - events.ScheduleEvent(EVENT_WARDEN_INTRO14, 14000); + events.ScheduleEvent(EVENT_WARDEN_INTRO14, 14s); break; case EVENT_WARDEN_INTRO14: Talk(YELL_RELEASE2B); me->InterruptNonMeleeSpells(false); me->SetFacingTo(3.3f); - events.ScheduleEvent(EVENT_WARDEN_INTRO15, 5000); + events.ScheduleEvent(EVENT_WARDEN_INTRO15, 5s); break; case EVENT_WARDEN_INTRO15: me->CastSpell((Unit*)nullptr, SPELL_TARGET_DELTA, false); - events.ScheduleEvent(EVENT_WARDEN_INTRO16, 2000); + events.ScheduleEvent(EVENT_WARDEN_INTRO16, 2s); break; case EVENT_WARDEN_INTRO16: instance->SetData(DATA_WARDEN_3, IN_PROGRESS); - events.ScheduleEvent(EVENT_WARDEN_INTRO17, 2000); + events.ScheduleEvent(EVENT_WARDEN_INTRO17, 2s); break; case EVENT_WARDEN_INTRO17: me->SetFacingTo(M_PI * 1.5f); me->CastSpell((Unit*)nullptr, SPELL_TARGET_OMEGA, false); - events.ScheduleEvent(EVENT_WARDEN_INTRO18, 6000); + events.ScheduleEvent(EVENT_WARDEN_INTRO18, 6s); break; case EVENT_WARDEN_INTRO18: me->SummonCreature(RAND(NPC_AKKIRIS, NPC_SULFURON), 420.179f, -174.396f, 42.58f, 0.02f, TEMPSUMMON_MANUAL_DESPAWN); @@ -517,20 +517,20 @@ public: Talk(YELL_RELEASE3); me->InterruptNonMeleeSpells(false); me->SetFacingTo(6.05f); - events.ScheduleEvent(EVENT_WARDEN_INTRO20, 4000); + events.ScheduleEvent(EVENT_WARDEN_INTRO20, 4s); break; case EVENT_WARDEN_INTRO20: me->CastSpell((Unit*)nullptr, SPELL_TARGET_GAMMA, false); - events.ScheduleEvent(EVENT_WARDEN_INTRO21, 2000); + events.ScheduleEvent(EVENT_WARDEN_INTRO21, 2s); break; case EVENT_WARDEN_INTRO21: instance->SetData(DATA_WARDEN_4, IN_PROGRESS); - events.ScheduleEvent(EVENT_WARDEN_INTRO22, 2000); + events.ScheduleEvent(EVENT_WARDEN_INTRO22, 2s); break; case EVENT_WARDEN_INTRO22: me->SetFacingTo(M_PI * 1.5f); me->CastSpell((Unit*)nullptr, SPELL_TARGET_OMEGA, false); - events.ScheduleEvent(EVENT_WARDEN_INTRO23, 6000); + events.ScheduleEvent(EVENT_WARDEN_INTRO23, 6s); break; case EVENT_WARDEN_INTRO23: me->SummonCreature(RAND(NPC_TW_DRAK, NPC_BL_DRAK), 471.795f, -174.58f, 42.58f, 3.06f, TEMPSUMMON_MANUAL_DESPAWN); @@ -540,7 +540,7 @@ public: instance->SetData(DATA_WARDEN_5, IN_PROGRESS); Talk(YELL_RELEASE4); me->InterruptNonMeleeSpells(false); - events.ScheduleEvent(EVENT_WARDEN_INTRO25, 8000); + events.ScheduleEvent(EVENT_WARDEN_INTRO25, 8s); break; case EVENT_WARDEN_INTRO25: if (Creature* cr = me->SummonCreature(NPC_HARBINGER_SKYRISS, 445.763f, -191.639f, 44.64f, 1.60f, TEMPSUMMON_MANUAL_DESPAWN)) @@ -548,22 +548,22 @@ public: cr->SetImmuneToAll(true); cr->CastSpell(cr, SPELL_TELEPORT_VISUAL, true); } - events.ScheduleEvent(EVENT_WARDEN_INTRO26, 1000); + events.ScheduleEvent(EVENT_WARDEN_INTRO26, 1s); break; case EVENT_WARDEN_INTRO26: if (Creature* creature = summons.GetCreatureWithEntry(NPC_HARBINGER_SKYRISS)) creature->AI()->Talk(SAY_HARBINGER_INTRO); - events.ScheduleEvent(EVENT_WARDEN_INTRO27, 23000); + events.ScheduleEvent(EVENT_WARDEN_INTRO27, 23s); break; case EVENT_WARDEN_INTRO27: Talk(YELL_WELCOME); - events.ScheduleEvent(EVENT_WARDEN_INTRO28, 5000); + events.ScheduleEvent(EVENT_WARDEN_INTRO28, 5s); break; case EVENT_WARDEN_INTRO28: instance->HandleGameObject(instance->GetGuidData(DATA_WARDENS_SHIELD), true); if (Creature* creature = summons.GetCreatureWithEntry(NPC_HARBINGER_SKYRISS)) creature->CastSpell((Unit*)nullptr, SPELL_MIND_REND, false); - events.ScheduleEvent(EVENT_WARDEN_INTRO29, 4000); + events.ScheduleEvent(EVENT_WARDEN_INTRO29, 4s); break; case EVENT_WARDEN_INTRO29: diff --git a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp index 799272204..4d5329ac0 100644 --- a/src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp +++ b/src/server/scripts/Outland/TempestKeep/arcatraz/boss_wrath_scryer_soccothrates.cpp @@ -165,7 +165,7 @@ struct boss_wrath_scryer_soccothrates : public BossAI if (!preFight && who->IsPlayer() && me->IsWithinDistInMap(who, 70.0f)) { Talk(SAY_SOCCOTHRATES_CONVO_1); - events2.ScheduleEvent(EVENT_PREFIGHT_1, 2000); + events2.ScheduleEvent(EVENT_PREFIGHT_1, 2s); preFight = true; } } @@ -178,38 +178,38 @@ struct boss_wrath_scryer_soccothrates : public BossAI case EVENT_PREFIGHT_1: if (Creature* dalliah = instance->GetCreature(DATA_DALLIAH)) dalliah->AI()->Talk(SAY_DALLIAH_CONVO_1); - events2.ScheduleEvent(EVENT_PREFIGHT_2, 3000); + events2.ScheduleEvent(EVENT_PREFIGHT_2, 3s); break; case EVENT_PREFIGHT_2: Talk(SAY_SOCCOTHRATES_CONVO_2); - events2.ScheduleEvent(EVENT_PREFIGHT_3, 3000); + events2.ScheduleEvent(EVENT_PREFIGHT_3, 3s); break; case EVENT_PREFIGHT_3: if (Creature* dalliah = instance->GetCreature(DATA_DALLIAH)) dalliah->AI()->Talk(SAY_DALLIAH_CONVO_2); - events2.ScheduleEvent(EVENT_PREFIGHT_4, 6000); + events2.ScheduleEvent(EVENT_PREFIGHT_4, 6s); break; case EVENT_PREFIGHT_4: Talk(SAY_SOCCOTHRATES_CONVO_3); - events2.ScheduleEvent(EVENT_PREFIGHT_5, 2000); + events2.ScheduleEvent(EVENT_PREFIGHT_5, 2s); break; case EVENT_PREFIGHT_5: if (Creature* dalliah = instance->GetCreature(DATA_DALLIAH)) dalliah->AI()->Talk(SAY_DALLIAH_CONVO_3); - events2.ScheduleEvent(EVENT_PREFIGHT_6, 3000); + events2.ScheduleEvent(EVENT_PREFIGHT_6, 3s); break; case EVENT_PREFIGHT_6: Talk(SAY_SOCCOTHRATES_CONVO_4); - events2.ScheduleEvent(EVENT_PREFIGHT_7, 2000); + events2.ScheduleEvent(EVENT_PREFIGHT_7, 2s); break; case EVENT_PREFIGHT_7: if (Creature* dalliah = instance->GetCreature(DATA_DALLIAH)) dalliah->GetMotionMaster()->MovePoint(0, 118.6048f, 96.84852f, 22.44115f); - events2.ScheduleEvent(EVENT_PREFIGHT_8, 4000); + events2.ScheduleEvent(EVENT_PREFIGHT_8, 4s); break; case EVENT_PREFIGHT_8: me->GetMotionMaster()->MovePoint(0, 122.1035f, 192.7203f, 22.44115f); - events2.ScheduleEvent(EVENT_PREFIGHT_9, 4000); + events2.ScheduleEvent(EVENT_PREFIGHT_9, 4s); break; case EVENT_PREFIGHT_9: if (Creature* dalliah = instance->GetCreature(DATA_DALLIAH)) diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp index 16e37a698..e024541c8 100644 --- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp +++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp @@ -98,7 +98,7 @@ public: CannonGUID = caster->GetGUID(); PartyTime = true; - events.ScheduleEvent(EVENT_PARTY_TIMER, 3000); + events.ScheduleEvent(EVENT_PARTY_TIMER, 3s); } if (count >= 3) @@ -160,7 +160,7 @@ public: me->SummonCreature(NPC_HOUND, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); else me->SummonCreature(NPC_FEL_IMP, 0, 0, 0, 0, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 10000); - events.ScheduleEvent(EVENT_PARTY_TIMER, 3000); + events.ScheduleEvent(EVENT_PARTY_TIMER, 3s); break; } } @@ -577,18 +577,18 @@ public: if (!CheckPlayer()) ResetNode(); else - _events.ScheduleEvent(EVENT_SIMON_PERIODIC_PLAYER_CHECK, 2000); + _events.ScheduleEvent(EVENT_SIMON_PERIODIC_PLAYER_CHECK, 2s); break; case EVENT_SIMON_SETUP_PRE_GAME: SetUpPreGame(); _events.CancelEvent(EVENT_SIMON_GAME_TICK); - _events.ScheduleEvent(EVENT_SIMON_PLAY_SEQUENCE, 1000); + _events.ScheduleEvent(EVENT_SIMON_PLAY_SEQUENCE, 1s); break; case EVENT_SIMON_PLAY_SEQUENCE: if (!playableSequence.empty()) { PlayNextColor(); - _events.ScheduleEvent(EVENT_SIMON_PLAY_SEQUENCE, 1500); + _events.ScheduleEvent(EVENT_SIMON_PLAY_SEQUENCE, 1500ms); } else { @@ -597,16 +597,16 @@ public: playerSequence.clear(); PrepareClusters(); gameTicks = 0; - _events.ScheduleEvent(EVENT_SIMON_GAME_TICK, 3000); + _events.ScheduleEvent(EVENT_SIMON_GAME_TICK, 3s); } break; case EVENT_SIMON_GAME_TICK: DoCast(SPELL_AUDIBLE_GAME_TICK); if (gameTicks > gameLevel) - _events.ScheduleEvent(EVENT_SIMON_TOO_LONG_TIME, 500); + _events.ScheduleEvent(EVENT_SIMON_TOO_LONG_TIME, 500ms); else - _events.ScheduleEvent(EVENT_SIMON_GAME_TICK, 3000); + _events.ScheduleEvent(EVENT_SIMON_GAME_TICK, 3s); gameTicks++; break; case EVENT_SIMON_RESET_CLUSTERS: @@ -633,7 +633,7 @@ public: if (gameLevel == 10) ResetNode(); else - _events.ScheduleEvent(EVENT_SIMON_SETUP_PRE_GAME, 1000); + _events.ScheduleEvent(EVENT_SIMON_SETUP_PRE_GAME, 1s); break; case ACTION_SIMON_CORRECT_FULL_SEQUENCE: gameLevel++; @@ -665,7 +665,7 @@ public: PlayColor(pressedColor); playerSequence.push_back(pressedColor); - _events.ScheduleEvent(EVENT_SIMON_RESET_CLUSTERS, 500); + _events.ScheduleEvent(EVENT_SIMON_RESET_CLUSTERS, 500ms); CheckPlayerSequence(); } @@ -752,8 +752,8 @@ public: } _events.Reset(); - _events.ScheduleEvent(EVENT_SIMON_ROUND_FINISHED, 1000); - _events.ScheduleEvent(EVENT_SIMON_PERIODIC_PLAYER_CHECK, 2000); + _events.ScheduleEvent(EVENT_SIMON_ROUND_FINISHED, 1s); + _events.ScheduleEvent(EVENT_SIMON_PERIODIC_PLAYER_CHECK, 2s); if (GameObject* relic = me->FindNearestGameObject(large ? GO_APEXIS_MONUMENT : GO_APEXIS_RELIC, searchDistance)) relic->SetGameObjectFlag(GO_FLAG_NOT_SELECTABLE); diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp index ceb94b60e..c014ab876 100644 --- a/src/server/scripts/Outland/zone_netherstorm.cpp +++ b/src/server/scripts/Outland/zone_netherstorm.cpp @@ -126,7 +126,7 @@ public: me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_ACTIVE); Talk(SAY_SAEED_0); - events.ScheduleEvent(EVENT_START_WALK, 3000); + events.ScheduleEvent(EVENT_START_WALK, 3s); } else if (type == DATA_START_FIGHT) { @@ -178,7 +178,7 @@ public: SetEscortPaused(true); break; case 18: - events.ScheduleEvent(EVENT_START_FIGHT1, 0); + events.ScheduleEvent(EVENT_START_FIGHT1, 0ms); SetEscortPaused(true); break; case 19: @@ -227,7 +227,7 @@ public: break; case EVENT_START_FIGHT1: Talk(SAY_SAEED_3); - events.ScheduleEvent(EVENT_START_FIGHT2, 3000); + events.ScheduleEvent(EVENT_START_FIGHT2, 3s); break; case EVENT_START_FIGHT2: if (Creature* dimensius = me->FindNearestCreature(NPC_DIMENSIUS, 50.0f)) diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index 3e78e17db..41acc4612 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -133,7 +133,7 @@ public: { ground = me->GetMapHeight(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()); SummonInfernal(); - events.ScheduleEvent(EVENT_CAST_SUMMON_INFERNAL, urand(1000, 3000)); + events.ScheduleEvent(EVENT_CAST_SUMMON_INFERNAL, 1s, 3s); } void SetData(uint32 id, uint32 data) override @@ -161,7 +161,7 @@ public: if (Unit* infernal = ObjectAccessor::GetUnit(*me, infernalGUID)) if (infernal->GetDisplayId() == MODEL_INVISIBLE) me->CastSpell(infernal, SPELL_SUMMON_INFERNAL, true); - events.ScheduleEvent(EVENT_CAST_SUMMON_INFERNAL, 12000); + events.ScheduleEvent(EVENT_CAST_SUMMON_INFERNAL, 12s); break; } default: @@ -566,8 +566,8 @@ public: void JustEngagedWith(Unit* /*who*/) override { - events.ScheduleEvent(EVENT_KICK, urand(5000, 10000)); - events.ScheduleEvent(EVENT_SUNDER, urand(5000, 10000)); + events.ScheduleEvent(EVENT_KICK, 5s, 10s); + events.ScheduleEvent(EVENT_SUNDER, 5s, 10s); } void SpellHit(Unit* caster, SpellInfo const* spell) override @@ -582,7 +582,7 @@ public: Tapped = true; caster->GetClosePoint(x, y, z, me->GetObjectSize()); Talk(SAY_1); - events.ScheduleEvent(EVENT_WALK_TO_MUTTON, 0); + events.ScheduleEvent(EVENT_WALK_TO_MUTTON, 0ms); } } @@ -593,7 +593,7 @@ public: if (GameObject* food = me->FindNearestGameObject(DELICIOUS_MUTTON, 5.0f)) me->SetFacingToObject(food); me->HandleEmoteCommand(EMOTE_ONESHOT_EAT); - events.ScheduleEvent(EVENT_POISONED, 5000); + events.ScheduleEvent(EVENT_POISONED, 5s); } } @@ -628,7 +628,7 @@ public: Talk(SAY_POISONED_1); CreditPlayer(); me->CastSpell(me, SPELL_VOMIT); - events.ScheduleEvent(EVENT_KILL, 5000); + events.ScheduleEvent(EVENT_KILL, 5s); break; case EVENT_KILL: Unit::DealDamage(me, me, me->GetHealth(), nullptr, DIRECT_DAMAGE, SPELL_SCHOOL_MASK_NORMAL, nullptr, false); @@ -642,11 +642,11 @@ public: case EVENT_KICK: if (me->GetVictim()->HasUnitState(SPELL_STATE_CASTING)) DoCastVictim(SPELL_KICK); - events.RepeatEvent(urand(5000, 10000)); + events.Repeat(5s, 10s); break; case EVENT_SUNDER: DoCastVictim(SPELL_SUNDER); - events.RepeatEvent(urand(5000, 10000)); + events.Repeat(5s, 10s); break; } diff --git a/src/server/scripts/Outland/zone_terokkar_forest.cpp b/src/server/scripts/Outland/zone_terokkar_forest.cpp index ffbed2ade..d44d7f506 100644 --- a/src/server/scripts/Outland/zone_terokkar_forest.cpp +++ b/src/server/scripts/Outland/zone_terokkar_forest.cpp @@ -433,9 +433,9 @@ public: void JustEngagedWith(Unit*) override { events.Reset(); - events.ScheduleEvent(EVENT_SPELL_WRATH, 0); - events.ScheduleEvent(EVENT_SPELL_MOONFIRE, 4000); - events.ScheduleEvent(EVENT_SPELL_ENTANGLING_ROOTS, 10000); + events.ScheduleEvent(EVENT_SPELL_WRATH, 0ms); + events.ScheduleEvent(EVENT_SPELL_MOONFIRE, 4s); + events.ScheduleEvent(EVENT_SPELL_ENTANGLING_ROOTS, 10s); } void UpdateEscortAI(uint32 diff) override @@ -451,15 +451,15 @@ public: { case EVENT_SPELL_WRATH: me->CastSpell(me->GetVictim(), SPELL_WRATH, false); - events.ScheduleEvent(EVENT_SPELL_WRATH, 3000); + events.ScheduleEvent(EVENT_SPELL_WRATH, 3s); break; case EVENT_SPELL_MOONFIRE: me->CastSpell(me->GetVictim(), SPELL_MOONFIRE, false); - events.ScheduleEvent(EVENT_SPELL_MOONFIRE, 12000); + events.ScheduleEvent(EVENT_SPELL_MOONFIRE, 12s); break; case EVENT_SPELL_ENTANGLING_ROOTS: me->CastSpell(me->GetVictim(), SPELL_ENTANGLING_ROOTS, false); - events.ScheduleEvent(EVENT_SPELL_ENTANGLING_ROOTS, 20000); + events.ScheduleEvent(EVENT_SPELL_ENTANGLING_ROOTS, 20s); break; } diff --git a/src/server/scripts/Pet/pet_generic.cpp b/src/server/scripts/Pet/pet_generic.cpp index 165ccb0f5..805e50000 100644 --- a/src/server/scripts/Pet/pet_generic.cpp +++ b/src/server/scripts/Pet/pet_generic.cpp @@ -49,7 +49,7 @@ struct npc_pet_gen_soul_trader_beacon : public ScriptedAI npc_pet_gen_soul_trader_beacon(Creature* c) : ScriptedAI(c) { events.Reset(); - events.ScheduleEvent(EVENT_INITIAL_TALK, 0); + events.ScheduleEvent(EVENT_INITIAL_TALK, 0ms); if (me->ToTempSummon()) if (Unit* owner = me->ToTempSummon()->GetOwner()) { @@ -65,7 +65,7 @@ struct npc_pet_gen_soul_trader_beacon : public ScriptedAI if (spellInfo->Id == SPELL_STEAL_ESSENCE_VISUAL && target == me) { Talk(1); - events.ScheduleEvent(EVENT_ADD_TOKEN, 3000); + events.ScheduleEvent(EVENT_ADD_TOKEN, 3s); me->CastSpell(me, SPELL_EMOTE_STATE_SWIM_RUN, true); } } diff --git a/src/server/scripts/Pet/pet_mage.cpp b/src/server/scripts/Pet/pet_mage.cpp index 72ab586ec..56a6c0ac5 100644 --- a/src/server/scripts/Pet/pet_mage.cpp +++ b/src/server/scripts/Pet/pet_mage.cpp @@ -62,10 +62,18 @@ struct npc_pet_mage_mirror_image : CasterAI ObjectGuid _ebonGargoyleGUID; uint32 checktarget; uint32 dist = urand(1, 5); + bool _delayAttack; void InitializeAI() override { CasterAI::InitializeAI(); + + _delayAttack = true; + me->m_Events.AddEventAtOffset([this]() + { + _delayAttack = false; + }, 1200ms); + Unit* owner = me->GetOwner(); if (!owner) return; @@ -185,10 +193,11 @@ struct npc_pet_mage_mirror_image : CasterAI void UpdateAI(uint32 diff) override { - events.Update(diff); - if (events.GetTimer() < 1200) + if (_delayAttack) return; + events.Update(diff); + if (!me->IsInCombat() || !me->GetVictim()) { MySelectNextTarget(); @@ -212,7 +221,7 @@ struct npc_pet_mage_mirror_image : CasterAI if (uint32 spellId = events.ExecuteEvent()) { - events.RescheduleEvent(spellId, spellId == 59637 ? 6500 : 2500); + events.RescheduleEvent(spellId, spellId == 59637 ? 6500ms : 2500ms); me->CastSpell(me->GetVictim(), spellId, false); } } diff --git a/src/server/scripts/Pet/pet_shaman.cpp b/src/server/scripts/Pet/pet_shaman.cpp index d5266ea04..286571a82 100644 --- a/src/server/scripts/Pet/pet_shaman.cpp +++ b/src/server/scripts/Pet/pet_shaman.cpp @@ -49,7 +49,7 @@ struct npc_pet_shaman_earth_elemental : public ScriptedAI void JustEngagedWith(Unit*) override { _events.Reset(); - _events.ScheduleEvent(EVENT_SHAMAN_ANGEREDEARTH, 0); + _events.ScheduleEvent(EVENT_SHAMAN_ANGEREDEARTH, 0ms); } void InitializeAI() override { } @@ -74,7 +74,7 @@ struct npc_pet_shaman_earth_elemental : public ScriptedAI if (_events.ExecuteEvent() == EVENT_SHAMAN_ANGEREDEARTH) { DoCastVictim(SPELL_SHAMAN_ANGEREDEARTH); - _events.ScheduleEvent(EVENT_SHAMAN_ANGEREDEARTH, urand(5000, 20000)); + _events.ScheduleEvent(EVENT_SHAMAN_ANGEREDEARTH, 5s, 20s); } DoMeleeAttackIfReady(); @@ -94,9 +94,9 @@ struct npc_pet_shaman_fire_elemental : public ScriptedAI void JustEngagedWith(Unit*) override { _events.Reset(); - _events.ScheduleEvent(EVENT_SHAMAN_FIRENOVA, urand(5000, 20000)); - _events.ScheduleEvent(EVENT_SHAMAN_FIREBLAST, urand(5000, 20000)); - //_events.ScheduleEvent(EVENT_SHAMAN_FIRESHIELD, 0); + _events.ScheduleEvent(EVENT_SHAMAN_FIRENOVA, 5s, 20s); + _events.ScheduleEvent(EVENT_SHAMAN_FIREBLAST, 5s, 20s); + //_events.ScheduleEvent(EVENT_SHAMAN_FIRESHIELD, 0ms); me->RemoveAurasDueToSpell(SPELL_SHAMAN_FIRESHIELD); me->CastSpell(me, SPELL_SHAMAN_FIRESHIELD, true); @@ -124,11 +124,11 @@ struct npc_pet_shaman_fire_elemental : public ScriptedAI { case EVENT_SHAMAN_FIRENOVA: me->CastSpell(me, SPELL_SHAMAN_FIRENOVA, false); - _events.ScheduleEvent(EVENT_SHAMAN_FIRENOVA, urand(8000, 15000)); + _events.ScheduleEvent(EVENT_SHAMAN_FIRENOVA, 8s, 15s); break; case EVENT_SHAMAN_FIREBLAST: me->CastSpell(me->GetVictim(), SPELL_SHAMAN_FIREBLAST, false); - _events.ScheduleEvent(EVENT_SHAMAN_FIREBLAST, urand(4000, 8000)); + _events.ScheduleEvent(EVENT_SHAMAN_FIREBLAST, 4s, 8s); break; default: break; diff --git a/src/server/scripts/World/boss_emerald_dragons.cpp b/src/server/scripts/World/boss_emerald_dragons.cpp index 814871ee1..2bd68ffcd 100644 --- a/src/server/scripts/World/boss_emerald_dragons.cpp +++ b/src/server/scripts/World/boss_emerald_dragons.cpp @@ -105,9 +105,9 @@ struct emerald_dragonAI : public WorldBossAI me->RemoveUnitFlag(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE); me->SetReactState(REACT_AGGRESSIVE); DoCast(me, SPELL_MARK_OF_NATURE_AURA, true); - events.ScheduleEvent(EVENT_TAIL_SWEEP, 4000); - events.ScheduleEvent(EVENT_NOXIOUS_BREATH, urand(7500, 15000)); - events.ScheduleEvent(EVENT_SEEPING_FOG, urand(12500, 20000)); + events.ScheduleEvent(EVENT_TAIL_SWEEP, 4s); + events.ScheduleEvent(EVENT_NOXIOUS_BREATH, 7500ms, 15s); + events.ScheduleEvent(EVENT_SEEPING_FOG, 12500ms, 20s); events.ScheduleEvent(EVENT_SUMMON_PLAYER, 1s); } @@ -128,17 +128,17 @@ struct emerald_dragonAI : public WorldBossAI // Despawntime is 2 minutes, so reschedule it for new cast after 2 minutes + a minor "random time" (30 seconds at max) DoCast(me, SPELL_SEEPING_FOG_LEFT, true); DoCast(me, SPELL_SEEPING_FOG_RIGHT, true); - events.ScheduleEvent(EVENT_SEEPING_FOG, urand(120000, 150000)); + events.ScheduleEvent(EVENT_SEEPING_FOG, 120s, 150s); break; case EVENT_NOXIOUS_BREATH: // Noxious Breath is cast on random intervals, no less than 7.5 seconds between DoCast(me, SPELL_NOXIOUS_BREATH); - events.ScheduleEvent(EVENT_NOXIOUS_BREATH, urand(7500, 15000)); + events.ScheduleEvent(EVENT_NOXIOUS_BREATH, 7500ms, 15s); break; case EVENT_TAIL_SWEEP: // Tail Sweep is cast every two seconds, no matter what goes on in front of the dragon DoCast(me, SPELL_TAIL_SWEEP); - events.ScheduleEvent(EVENT_TAIL_SWEEP, 2000); + events.ScheduleEvent(EVENT_TAIL_SWEEP, 2s); break; case EVENT_SUMMON_PLAYER: if (Unit* target = me->GetVictim()) @@ -304,7 +304,7 @@ public: { _stage = 1; emerald_dragonAI::Reset(); - events.ScheduleEvent(EVENT_LIGHTNING_WAVE, 12000); + events.ScheduleEvent(EVENT_LIGHTNING_WAVE, 12s); } void JustEngagedWith(Unit* who) override @@ -344,7 +344,7 @@ public: { case EVENT_LIGHTNING_WAVE: DoCastVictim(SPELL_LIGHTNING_WAVE); - events.ScheduleEvent(EVENT_LIGHTNING_WAVE, urand(10000, 20000)); + events.ScheduleEvent(EVENT_LIGHTNING_WAVE, 10s, 20s); break; default: emerald_dragonAI::ExecuteEvent(eventId); @@ -524,7 +524,7 @@ public: { _stage = 1; emerald_dragonAI::Reset(); - events.ScheduleEvent(EVENT_VOLATILE_INFECTION, 12000); + events.ScheduleEvent(EVENT_VOLATILE_INFECTION, 12s); } void KilledUnit(Unit* who) override @@ -559,7 +559,7 @@ public: { case EVENT_VOLATILE_INFECTION: DoCastVictim(SPELL_VOLATILE_INFECTION); - events.ScheduleEvent(EVENT_VOLATILE_INFECTION, 120000); + events.ScheduleEvent(EVENT_VOLATILE_INFECTION, 120s); break; default: emerald_dragonAI::ExecuteEvent(eventId); @@ -624,8 +624,8 @@ public: _banishedTimer = 0; emerald_dragonAI::Reset(); - events.ScheduleEvent(EVENT_ARCANE_BLAST, 12000); - events.ScheduleEvent(EVENT_BELLOWING_ROAR, 30000); + events.ScheduleEvent(EVENT_ARCANE_BLAST, 12s); + events.ScheduleEvent(EVENT_BELLOWING_ROAR, 30s); } void JustEngagedWith(Unit* who) override @@ -671,11 +671,11 @@ public: { case EVENT_ARCANE_BLAST: DoCast(SPELL_ARCANE_BLAST); - events.ScheduleEvent(EVENT_ARCANE_BLAST, urand(7000, 12000)); + events.ScheduleEvent(EVENT_ARCANE_BLAST, 7s, 12s); break; case EVENT_BELLOWING_ROAR: DoCast(SPELL_BELLOWING_ROAR); - events.ScheduleEvent(EVENT_BELLOWING_ROAR, urand(20000, 30000)); + events.ScheduleEvent(EVENT_BELLOWING_ROAR, 20s, 30s); break; default: emerald_dragonAI::ExecuteEvent(eventId); diff --git a/src/server/scripts/World/go_scripts.cpp b/src/server/scripts/World/go_scripts.cpp index a190384b2..8b92bed07 100644 --- a/src/server/scripts/World/go_scripts.cpp +++ b/src/server/scripts/World/go_scripts.cpp @@ -412,7 +412,7 @@ public: void Initialize() { - _events.ScheduleEvent(EVENT_CHECK, 1000); + _events.ScheduleEvent(EVENT_CHECK, 1s); } void UpdateAI(uint32 const diff) override @@ -432,7 +432,7 @@ public: } else { - _events.ScheduleEvent(EVENT_CHECK, 1000); + _events.ScheduleEvent(EVENT_CHECK, 1s); } break; } @@ -474,7 +474,7 @@ public: { go_l70_etc_musicAI(GameObject* go) : GameObjectAI(go) { - _events.ScheduleEvent(EVENT_ETC_START_MUSIC, 1600); + _events.ScheduleEvent(EVENT_ETC_START_MUSIC, 1600ms); } void UpdateAI(uint32 diff) override @@ -489,7 +489,7 @@ public: me->PlayDirectMusic(MUSIC_L70_ETC_MUSIC_LOUD); else me->PlayDirectMusic(MUSIC_L70_ETC_MUSIC); - _events.ScheduleEvent(EVENT_ETC_START_MUSIC, 1600); // Every 1.6 seconds SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client (sniffed value) + _events.ScheduleEvent(EVENT_ETC_START_MUSIC, 1600ms); // Every 1.6 seconds SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client (sniffed value) break; default: break; @@ -521,15 +521,12 @@ enum BrewfestMusic }; // These are in seconds -enum BrewfestMusicTime -{ - EVENT_BREWFESTDWARF01_TIME = 95000, - EVENT_BREWFESTDWARF02_TIME = 155000, - EVENT_BREWFESTDWARF03_TIME = 23000, - EVENT_BREWFESTGOBLIN01_TIME = 68000, - EVENT_BREWFESTGOBLIN02_TIME = 93000, - EVENT_BREWFESTGOBLIN03_TIME = 28000 -}; +constexpr Milliseconds EVENT_BREWFESTDWARF01_TIME = 95s; +constexpr Milliseconds EVENT_BREWFESTDWARF02_TIME = 155s; +constexpr Milliseconds EVENT_BREWFESTDWARF03_TIME = 23s; +constexpr Milliseconds EVENT_BREWFESTGOBLIN01_TIME = 68s; +constexpr Milliseconds EVENT_BREWFESTGOBLIN02_TIME = 93s; +constexpr Milliseconds EVENT_BREWFESTGOBLIN03_TIME = 28s; enum BrewfestMusicEvents { @@ -546,8 +543,8 @@ public: { go_brewfest_musicAI(GameObject* go) : GameObjectAI(go) { - _events.ScheduleEvent(EVENT_BM_SELECT_MUSIC, 1000); - _events.ScheduleEvent(EVENT_BM_START_MUSIC, 1500); + _events.ScheduleEvent(EVENT_BM_SELECT_MUSIC, 1s); + _events.ScheduleEvent(EVENT_BM_START_MUSIC, 1500ms); _currentMusicEvent = EVENT_BREWFESTGOBLIN01; } @@ -564,7 +561,7 @@ public: break; // Select random music sample uint32 rnd = urand(0, 2); - uint32 musicTime = 1000; + Milliseconds musicTime = 1s; //Restart the current selected music _currentMusicEvent = 0; //Check zone to play correct music @@ -652,7 +649,7 @@ public: { me->PlayDirectMusic(_currentMusicEvent); } - _events.ScheduleEvent(EVENT_BM_START_MUSIC, 5000); // Every 5 second's SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client + _events.ScheduleEvent(EVENT_BM_START_MUSIC, 5s); // Every 5 second's SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client break; default: break; @@ -695,7 +692,7 @@ public: go_pirate_day_musicAI(GameObject* go) : GameObjectAI(go) { - _events.ScheduleEvent(EVENT_PDM_START_MUSIC, 1000); + _events.ScheduleEvent(EVENT_PDM_START_MUSIC, 1s); } void UpdateAI(uint32 diff) override @@ -709,7 +706,7 @@ public: if (!IsHolidayActive(HOLIDAY_PIRATES_DAY)) break; me->PlayDirectMusic(MUSIC_PIRATE_DAY_MUSIC); - _events.ScheduleEvent(EVENT_PDM_START_MUSIC, 5000); // Every 5 second's SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client (sniffed value) + _events.ScheduleEvent(EVENT_PDM_START_MUSIC, 5s); // Every 5 second's SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client (sniffed value) break; default: break; @@ -750,7 +747,7 @@ public: go_darkmoon_faire_musicAI(GameObject* go) : GameObjectAI(go) { - _events.ScheduleEvent(EVENT_DFM_START_MUSIC, 1000); + _events.ScheduleEvent(EVENT_DFM_START_MUSIC, 1s); } void UpdateAI(uint32 diff) override @@ -764,7 +761,7 @@ public: if (!IsHolidayActive(HOLIDAY_DARKMOON_FAIRE_ELWYNN) || !IsHolidayActive(HOLIDAY_DARKMOON_FAIRE_THUNDER) || !IsHolidayActive(HOLIDAY_DARKMOON_FAIRE_SHATTRATH)) break; me->PlayDirectMusic(MUSIC_DARKMOON_FAIRE_MUSIC); - _events.ScheduleEvent(EVENT_DFM_START_MUSIC, 5000); // Every 5 second's SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client (sniffed value) + _events.ScheduleEvent(EVENT_DFM_START_MUSIC, 5s); // Every 5 second's SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client (sniffed value) break; default: break; @@ -805,7 +802,7 @@ public: { go_midsummer_musicAI(GameObject* go) : GameObjectAI(go) { - _events.ScheduleEvent(EVENT_MM_START_MUSIC, 1000); + _events.ScheduleEvent(EVENT_MM_START_MUSIC, 1s); } void UpdateAI(uint32 diff) override @@ -836,7 +833,7 @@ public: } } - _events.ScheduleEvent(EVENT_MM_START_MUSIC, 5000); // Every 5 second's SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client (sniffed value) + _events.ScheduleEvent(EVENT_MM_START_MUSIC, 5s); // Every 5 second's SMSG_PLAY_MUSIC packet (PlayDirectMusic) is pushed to the client (sniffed value) break; } default: @@ -895,7 +892,7 @@ public: _playerGUID = player->GetGUID(); me->SetGameObjectFlag((GameObjectFlags)1); me->RemoveByteFlag(GAMEOBJECT_BYTES_1, 0, 1); - _events.ScheduleEvent(EVENT_STILLBLADE_SPAWN, 1000); + _events.ScheduleEvent(EVENT_STILLBLADE_SPAWN, 1s); } } return true; @@ -914,7 +911,7 @@ public: if (Player* player = ObjectAccessor::GetPlayer(*me, _playerGUID)) { player->SummonCreature(NPC_STILLBLADE, 8032.587f, -7524.518f, 149.68073f, 6.161012172698974609f, TEMPSUMMON_DEAD_DESPAWN, 60000); - _events.ScheduleEvent(EVENT_RESET_BRAZIER, 4000); + _events.ScheduleEvent(EVENT_RESET_BRAZIER, 4s); } break; } @@ -1822,7 +1819,7 @@ public: { // Reset once = false; - _events.ScheduleEvent(EVENT_TIME, 1000); + _events.ScheduleEvent(EVENT_TIME, 1s); } while (uint32 eventId = _events.ExecuteEvent()) @@ -1845,7 +1842,7 @@ public: // Schedule ring event for (auto i = 0; i < _rings; ++i) { - _events.ScheduleEvent(EVENT_RING_BELL, (i * 4 + 1) * 1000); + _events.ScheduleEvent(EVENT_RING_BELL, Seconds(i * 4 + 1)); } break; } diff --git a/src/server/scripts/World/npc_stave_of_ancients.cpp b/src/server/scripts/World/npc_stave_of_ancients.cpp index 20c64c492..2c318f274 100644 --- a/src/server/scripts/World/npc_stave_of_ancients.cpp +++ b/src/server/scripts/World/npc_stave_of_ancients.cpp @@ -306,11 +306,11 @@ public: me->CastSpell(who, SPELL_FOOLS_PLIGHT, true); } - events.ScheduleEvent(EVENT_FOOLS_PLIGHT, urand(2000, 3000)); - events.ScheduleEvent(EVENT_RANGE_CHECK, 1000); - events.ScheduleEvent(EVENT_UNFAIR_FIGHT, 1000); - events.ScheduleEvent(ARTORIUS_EVENT_DEMONIC_DOOM, urand(3000, 5000)); - events.ScheduleEvent(ARTORIUS_EVENT_DEMONIC_ENRAGE, urand(6000, 8000)); + events.ScheduleEvent(EVENT_FOOLS_PLIGHT, 2s, 3s); + events.ScheduleEvent(EVENT_RANGE_CHECK, 1s); + events.ScheduleEvent(EVENT_UNFAIR_FIGHT, 1s); + events.ScheduleEvent(ARTORIUS_EVENT_DEMONIC_DOOM, 3s, 5s); + events.ScheduleEvent(ARTORIUS_EVENT_DEMONIC_ENRAGE, 6s, 8s); } void UpdateAI(uint32 diff) override @@ -325,7 +325,7 @@ public: me->Say(ARTORIUS_SAY); me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - events.ScheduleEvent(EVENT_REVEAL, 5000); + events.ScheduleEvent(EVENT_REVEAL, 5s); break; case EVENT_REVEAL: RevealForm(); @@ -355,7 +355,7 @@ public: { me->CastSpell(me->GetVictim(), SPELL_FOOLS_PLIGHT, true); } - events.RepeatEvent(urand(3000, 6000)); + events.Repeat(3s, 6s); break; case EVENT_RANGE_CHECK: if (!me->GetVictim() || !me->GetVictim()->IsWithinDist2d(me, 60.0f)) @@ -364,7 +364,7 @@ public: } else { - events.RepeatEvent(2000); + events.Repeat(2s); } break; case EVENT_UNFAIR_FIGHT: @@ -376,18 +376,18 @@ public: me->DespawnOrUnsummon(5000); break; } - events.RepeatEvent(2000); + events.Repeat(2s); break; case ARTORIUS_EVENT_DEMONIC_DOOM: if (!me->GetVictim()->HasAura(ARTORIUS_SPELL_DEMONIC_DOOM)) { me->CastSpell(me->GetVictim(), ARTORIUS_SPELL_DEMONIC_DOOM, false); } - events.RepeatEvent(urand(5000, 10000)); + events.Repeat(5s, 10s); break; case ARTORIUS_EVENT_DEMONIC_ENRAGE: me->CastSpell(me, SPELL_DEMONIC_ENRAGE, false); - events.RepeatEvent(urand(22000, 39000)); + events.Repeat(22s, 39s); break; } @@ -423,7 +423,7 @@ public: if (action == EVENT_ENCOUNTER_START) { PrepareForEncounter(); - events.ScheduleEvent(EVENT_ENCOUNTER_START, 5000); + events.ScheduleEvent(EVENT_ENCOUNTER_START, 5s); } } }; @@ -649,7 +649,7 @@ public: ResetState(SIMONE_SPELL_SILENCE); events.Reset(); - events.ScheduleEvent(SIMONE_EVENT_CHECK_PET_STATE, 2000); + events.ScheduleEvent(SIMONE_EVENT_CHECK_PET_STATE, 2s); } void JustEngagedWith(Unit* who) override @@ -664,13 +664,13 @@ public: me->CastSpell(who, SPELL_FOOLS_PLIGHT, true); } - events.ScheduleEvent(EVENT_RANGE_CHECK, 1000); - events.ScheduleEvent(EVENT_UNFAIR_FIGHT, 1000); - events.ScheduleEvent(SIMONE_EVENT_CHAIN_LIGHTNING, 3000); - events.ScheduleEvent(SIMONE_EVENT_TEMPTRESS_KISS, 1000); + events.ScheduleEvent(EVENT_RANGE_CHECK, 1s); + events.ScheduleEvent(EVENT_UNFAIR_FIGHT, 1s); + events.ScheduleEvent(SIMONE_EVENT_CHAIN_LIGHTNING, 3s); + events.ScheduleEvent(SIMONE_EVENT_TEMPTRESS_KISS, 1s); } - events.ScheduleEvent(EVENT_FOOLS_PLIGHT, urand(2000, 3000)); + events.ScheduleEvent(EVENT_FOOLS_PLIGHT, 2s, 3s); } void UpdateAI(uint32 diff) override @@ -685,7 +685,7 @@ public: me->TextEmote(SIMONE_EMOTE, GetGossipPlayer()); me->HandleEmoteCommand(EMOTE_ONESHOT_NONE); me->HandleEmoteCommand(EMOTE_ONESHOT_LAUGH); - events.ScheduleEvent(SIMONE_EVENT_TALK, 4000); + events.ScheduleEvent(SIMONE_EVENT_TALK, 4s); break; case SIMONE_EVENT_TALK: me->Say(SIMONE_SAY, GetGossipPlayer()); @@ -695,7 +695,7 @@ public: { Precious()->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); } - events.ScheduleEvent(EVENT_REVEAL, 5000); + events.ScheduleEvent(EVENT_REVEAL, 5s); break; case EVENT_REVEAL: RevealForm(); @@ -713,7 +713,7 @@ public: HandlePetRespawn(); } - events.ScheduleEvent(SIMONE_EVENT_CHECK_PET_STATE, 1000); + events.ScheduleEvent(SIMONE_EVENT_CHECK_PET_STATE, 1s); } break; } @@ -730,7 +730,7 @@ public: if (me->HasUnitState(UNIT_STATE_CASTING) && eventId != EVENT_RANGE_CHECK && eventId != EVENT_UNFAIR_FIGHT) { - events.RepeatEvent(1000); + events.Repeat(1s); return; } @@ -742,7 +742,7 @@ public: { me->CastSpell(me->GetVictim(), SPELL_FOOLS_PLIGHT, true); } - events.RepeatEvent(urand(3000, 6000)); + events.Repeat(3s, 6s); break; case EVENT_RANGE_CHECK: if (!me->GetVictim()->IsWithinDist2d(me, 60.0f)) @@ -751,7 +751,7 @@ public: } else { - events.RepeatEvent(2000); + events.Repeat(2s); } break; case EVENT_UNFAIR_FIGHT: @@ -770,15 +770,15 @@ public: me->DespawnOrUnsummon(5000); break; } - events.RepeatEvent(2000); + events.Repeat(2s); break; case SIMONE_EVENT_CHAIN_LIGHTNING: me->CastSpell(me->GetVictim(), SIMONE_SPELL_CHAIN_LIGHTNING, false); - events.RepeatEvent(7000); + events.Repeat(7s); break; case SIMONE_EVENT_TEMPTRESS_KISS: me->CastSpell(me->GetVictim(), SIMONE_SPELL_TEMPTRESS_KISS, false); - events.RepeatEvent(45000); + events.Repeat(45s); break; } @@ -805,7 +805,7 @@ public: PreciousAI()->PrepareForEncounter(); } gossipPlayerGUID = playerGUID; - events.ScheduleEvent(EVENT_ENCOUNTER_START, 1000); + events.ScheduleEvent(EVENT_ENCOUNTER_START, 1s); } }; @@ -906,11 +906,11 @@ public: me->CastSpell(who, SPELL_FOOLS_PLIGHT, true); } - events.ScheduleEvent(EVENT_FOOLS_PLIGHT, urand(2000, 3000)); - events.ScheduleEvent(EVENT_RANGE_CHECK, 1000); - events.ScheduleEvent(EVENT_UNFAIR_FIGHT, 1000); - events.ScheduleEvent(NELSON_EVENT_DREADFUL_FRIGHT, 10000); - events.ScheduleEvent(NELSON_EVENT_CREEPING_DOOM, 5000); + events.ScheduleEvent(EVENT_FOOLS_PLIGHT, 2s, 3s); + events.ScheduleEvent(EVENT_RANGE_CHECK, 1s); + events.ScheduleEvent(EVENT_UNFAIR_FIGHT, 1s); + events.ScheduleEvent(NELSON_EVENT_DREADFUL_FRIGHT, 10s); + events.ScheduleEvent(NELSON_EVENT_CREEPING_DOOM, 5s); } void UpdateAI(uint32 diff) override @@ -925,7 +925,7 @@ public: me->Say(NELSON_SAY); me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - events.ScheduleEvent(EVENT_REVEAL, 5000); + events.ScheduleEvent(EVENT_REVEAL, 5s); break; case EVENT_REVEAL: RevealForm(); @@ -944,7 +944,7 @@ public: if (me->HasUnitState(UNIT_STATE_CASTING)) { - events.RepeatEvent(1000); + events.Repeat(1s); return; } @@ -956,7 +956,7 @@ public: { me->CastSpell(me->GetVictim(), SPELL_FOOLS_PLIGHT, true); } - events.RepeatEvent(urand(3000, 6000)); + events.Repeat(3s, 6s); break; case EVENT_RANGE_CHECK: if (!me->GetVictim()->IsWithinDist2d(me, 60.0f)) @@ -965,7 +965,7 @@ public: } else { - events.RepeatEvent(2000); + events.Repeat(2s); } break; case EVENT_UNFAIR_FIGHT: @@ -981,15 +981,15 @@ public: me->DespawnOrUnsummon(5000); break; } - events.RepeatEvent(2000); + events.Repeat(2s); break; case NELSON_EVENT_DREADFUL_FRIGHT: me->CastSpell(me->GetVictim(), NELSON_SPELL_DREADFUL_FRIGHT, false); - events.RepeatEvent(urand(12000, 19000)); + events.Repeat(12s, 19s); break; case NELSON_EVENT_CREEPING_DOOM: me->CastSpell(me->GetVictim(), NELSON_SPELL_CREEPING_DOOM, false); - events.RepeatEvent(urand(10000, 12000)); + events.Repeat(10s, 12s); break; } @@ -1016,7 +1016,7 @@ public: if (action == EVENT_ENCOUNTER_START) { PrepareForEncounter(); - events.ScheduleEvent(EVENT_ENCOUNTER_START, 5000); + events.ScheduleEvent(EVENT_ENCOUNTER_START, 5s); } } }; @@ -1077,12 +1077,12 @@ public: me->CastSpell(who, SPELL_FOOLS_PLIGHT, true); } - events.ScheduleEvent(FRANKLIN_EVENT_DEMONIC_ENRAGE, urand(9000, 13000)); - events.ScheduleEvent(EVENT_RANGE_CHECK, 1000); - events.ScheduleEvent(EVENT_UNFAIR_FIGHT, 1000); + events.ScheduleEvent(FRANKLIN_EVENT_DEMONIC_ENRAGE, 9s, 13s); + events.ScheduleEvent(EVENT_RANGE_CHECK, 1s); + events.ScheduleEvent(EVENT_UNFAIR_FIGHT, 1s); } - events.ScheduleEvent(EVENT_FOOLS_PLIGHT, urand(2000, 3000)); + events.ScheduleEvent(EVENT_FOOLS_PLIGHT, 2s, 3s); } void UpdateAI(uint32 diff) override @@ -1097,7 +1097,7 @@ public: me->Say(FRANKLIN_SAY, GetGossipPlayer()); me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); - events.ScheduleEvent(EVENT_REVEAL, 5000); + events.ScheduleEvent(EVENT_REVEAL, 5s); break; case EVENT_REVEAL: RevealForm(); @@ -1116,7 +1116,7 @@ public: if (me->HasUnitState(UNIT_STATE_CASTING)) { - events.RepeatEvent(1000); + events.Repeat(1s); return; } @@ -1128,7 +1128,7 @@ public: { me->CastSpell(me->GetVictim(), SPELL_FOOLS_PLIGHT, true); } - events.RepeatEvent(urand(3000, 6000)); + events.Repeat(3s, 6s); break; case EVENT_RANGE_CHECK: if (!me->GetVictim()->IsWithinDist2d(me, 60.0f)) @@ -1137,7 +1137,7 @@ public: } else { - events.RepeatEvent(2000); + events.Repeat(2s); } break; case EVENT_UNFAIR_FIGHT: @@ -1152,12 +1152,12 @@ public: me->DespawnOrUnsummon(5000); break; } - events.RepeatEvent(2000); + events.Repeat(2s); break; case FRANKLIN_EVENT_DEMONIC_ENRAGE: me->CastSpell(me, SPELL_DEMONIC_ENRAGE, false); me->TextEmote(FRANKLIN_ENRAGE_EMOTE); - events.RepeatEvent(urand(9000, 22000)); + events.Repeat(9s, 22s); break; } @@ -1189,7 +1189,7 @@ public: { PrepareForEncounter(); gossipPlayerGUID = playerGUID; - events.ScheduleEvent(EVENT_ENCOUNTER_START, 5000); + events.ScheduleEvent(EVENT_ENCOUNTER_START, 5s); } }; diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index 6612f6dc0..6e7e5a578 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -68,7 +68,7 @@ public: npc_elder_clearwaterAI(Creature* c) : ScriptedAI(c) { events.Reset(); - events.ScheduleEvent(EVENT_CLEARWATER_ANNOUNCE, 1000, 1, 0); + events.ScheduleEvent(EVENT_CLEARWATER_ANNOUNCE, 1s, 1, 0); finished = false; preWarning = false; startWarning = false; @@ -126,7 +126,7 @@ public: } } - events.RepeatEvent(1000); + events.Repeat(1s); break; } } From 8e2e30328f2b48349fb4fc76d9922c4fe3fa8dfe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A9=E9=B9=AD?= <18535853+PkllonG@users.noreply.github.com> Date: Mon, 13 Oct 2025 10:13:12 +0800 Subject: [PATCH 100/140] refactor(Core): Make ObjectGuid const (#23170) * cherry-pick commit (https://github.com/TrinityCore/TrinityCore/commit/a7883380ce4c827db103b0c43faca6632c3d1f66) Co-Authored-By: Lucas Nascimento --- src/server/game/AI/CoreAI/GameObjectAI.h | 2 +- src/server/game/AI/CoreAI/UnitAI.h | 2 +- .../game/AI/ScriptedAI/ScriptedGossip.cpp | 2 +- .../game/AI/ScriptedAI/ScriptedGossip.h | 2 +- src/server/game/AI/SmartScripts/SmartAI.cpp | 2 +- src/server/game/AI/SmartScripts/SmartAI.h | 2 +- src/server/game/Battlefield/Battlefield.cpp | 4 +-- src/server/game/Battlefield/Battlefield.h | 4 +-- src/server/game/Entities/Corpse/Corpse.cpp | 2 +- src/server/game/Entities/Corpse/Corpse.h | 2 +- .../game/Entities/GameObject/GameObject.cpp | 4 +-- .../game/Entities/GameObject/GameObject.h | 4 +-- src/server/game/Entities/Object/ObjectGuid.h | 2 +- src/server/game/Entities/Player/Player.cpp | 6 ++--- src/server/game/Entities/Player/Player.h | 6 ++--- src/server/game/Entities/Player/SocialMgr.cpp | 20 +++++++------- src/server/game/Entities/Player/SocialMgr.h | 26 +++++++++---------- src/server/game/Globals/ObjectAccessor.cpp | 24 ++++++++--------- src/server/game/Globals/ObjectAccessor.h | 24 ++++++++--------- src/server/game/Maps/Map.cpp | 14 +++++----- src/server/game/Maps/Map.h | 14 +++++----- src/server/game/World/WorldState.cpp | 2 +- .../BlackwingLair/boss_chromaggus.cpp | 2 +- .../BlackwingLair/boss_razorgore.cpp | 2 +- .../MoltenCore/boss_ragnaros.cpp | 2 +- .../Gnomeregan/instance_gnomeregan.cpp | 2 +- .../Karazhan/boss_shade_of_aran.cpp | 2 +- .../ScarletEnclave/chapter1.cpp | 6 ++--- .../ZulGurub/boss_mandokir.cpp | 6 ++--- .../zone_eastern_plaguelands.cpp | 2 +- .../EasternKingdoms/zone_undercity.cpp | 2 +- src/server/scripts/Events/brewfest.cpp | 2 +- .../BattleForMountHyjal/boss_archimonde.cpp | 2 +- .../RuinsOfAhnQiraj/boss_ossirian.cpp | 4 +-- .../scripts/Kalimdor/zone_darkshore.cpp | 2 +- src/server/scripts/Kalimdor/zone_desolace.cpp | 2 +- .../boss_blood_prince_council.cpp | 2 +- .../boss_blood_queen_lana_thel.cpp | 2 +- .../boss_icecrown_gunship_battle.cpp | 2 +- .../boss_professor_putricide.cpp | 2 +- .../IcecrownCitadel/boss_sindragosa.cpp | 2 +- .../IcecrownCitadel/boss_the_lich_king.cpp | 2 +- .../IcecrownCitadel/icecrown_citadel.cpp | 2 +- .../scripts/Northrend/zone_borean_tundra.cpp | 2 +- .../scripts/Northrend/zone_dragonblight.cpp | 2 +- .../AuchenaiCrypts/boss_exarch_maladaar.cpp | 2 +- .../ShadowLabyrinth/boss_murmur.cpp | 2 +- .../Outland/zone_blades_edge_mountains.cpp | 2 +- src/server/scripts/Outland/zone_nagrand.cpp | 2 +- .../scripts/Outland/zone_netherstorm.cpp | 2 +- .../scripts/World/boss_emerald_dragons.cpp | 2 +- 51 files changed, 119 insertions(+), 119 deletions(-) diff --git a/src/server/game/AI/CoreAI/GameObjectAI.h b/src/server/game/AI/CoreAI/GameObjectAI.h index b366d3c2b..80e034cf4 100644 --- a/src/server/game/AI/CoreAI/GameObjectAI.h +++ b/src/server/game/AI/CoreAI/GameObjectAI.h @@ -46,7 +46,7 @@ public: // Pass parameters between AI virtual void DoAction(int32 /*param = 0 */) {} - virtual void SetGUID(ObjectGuid /*guid*/, int32 /*id = 0 */) {} + virtual void SetGUID(ObjectGuid const& /*guid*/, int32 /*id = 0 */) {} virtual ObjectGuid GetGUID(int32 /*id = 0 */) const { return ObjectGuid::Empty; } static int32 Permissible(GameObject const* go); diff --git a/src/server/game/AI/CoreAI/UnitAI.h b/src/server/game/AI/CoreAI/UnitAI.h index 17533d4e4..71cfe8d5b 100644 --- a/src/server/game/AI/CoreAI/UnitAI.h +++ b/src/server/game/AI/CoreAI/UnitAI.h @@ -217,7 +217,7 @@ public: virtual void DoAction(int32 /*param*/) {} virtual uint32 GetData(uint32 /*id = 0*/) const { return 0; } virtual void SetData(uint32 /*id*/, uint32 /*value*/) {} - virtual void SetGUID(ObjectGuid /*guid*/, int32 /*id*/ = 0) {} + virtual void SetGUID(ObjectGuid const& /*guid*/, int32 /*id*/ = 0) {} virtual ObjectGuid GetGUID(int32 /*id*/ = 0) const { return ObjectGuid::Empty; } // Select the best target (in order) from the threat list that fulfill the following: diff --git a/src/server/game/AI/ScriptedAI/ScriptedGossip.cpp b/src/server/game/AI/ScriptedAI/ScriptedGossip.cpp index 120a75582..12d5a6368 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedGossip.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedGossip.cpp @@ -42,7 +42,7 @@ void AddGossipItemFor(Player* player, uint32 gossipMenuID, uint32 gossipMenuItem player->PlayerTalkClass->GetGossipMenu().AddMenuItem(gossipMenuID, gossipMenuItemID, sender, action, boxMoney); } -void SendGossipMenuFor(Player* player, uint32 npcTextID, ObjectGuid const guid) +void SendGossipMenuFor(Player* player, uint32 npcTextID, ObjectGuid const& guid) { player->PlayerTalkClass->SendGossipMenu(npcTextID, guid); } diff --git a/src/server/game/AI/ScriptedAI/ScriptedGossip.h b/src/server/game/AI/ScriptedAI/ScriptedGossip.h index eee841148..b88aea5c4 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedGossip.h +++ b/src/server/game/AI/ScriptedAI/ScriptedGossip.h @@ -94,7 +94,7 @@ void AddGossipItemFor(Player* player, uint32 icon, std::string const& text, uint void AddGossipItemFor(Player* player, uint32 gossipMenuID, uint32 gossipMenuItemID, uint32 sender, uint32 action, uint32 boxMoney = 0); // Send menu text -void SendGossipMenuFor(Player* player, uint32 npcTextID, ObjectGuid const guid); +void SendGossipMenuFor(Player* player, uint32 npcTextID, ObjectGuid const& guid); void SendGossipMenuFor(Player* player, uint32 npcTextID, Creature const* creature); // Close menu diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index cb4067e0c..c1dead666 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -993,7 +993,7 @@ void SmartAI::SetData(uint32 id, uint32 value, WorldObject* invoker) GetScript()->ProcessEventsFor(SMART_EVENT_DATA_SET, unit, id, value, false, nullptr, gob); } -void SmartAI::SetGUID(ObjectGuid /*guid*/, int32 /*id*/) +void SmartAI::SetGUID(ObjectGuid const& /*guid*/, int32 /*id*/) { } diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index 5bd9fcd8b..48d0eda37 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -164,7 +164,7 @@ public: void SetData(uint32 id, uint32 value, WorldObject* invoker); // Used in scripts to share variables - void SetGUID(ObjectGuid guid, int32 id = 0) override; + void SetGUID(ObjectGuid const& guid, int32 id = 0) override; // Used in scripts to share variables ObjectGuid GetGUID(int32 id = 0) const override; diff --git a/src/server/game/Battlefield/Battlefield.cpp b/src/server/game/Battlefield/Battlefield.cpp index f74aebff2..2adb61047 100644 --- a/src/server/game/Battlefield/Battlefield.cpp +++ b/src/server/game/Battlefield/Battlefield.cpp @@ -855,7 +855,7 @@ GameObject* Battlefield::SpawnGameObject(uint32 entry, float x, float y, float z return go; } -Creature* Battlefield::GetCreature(ObjectGuid const guid) +Creature* Battlefield::GetCreature(ObjectGuid const& guid) { if (!m_Map) return nullptr; @@ -863,7 +863,7 @@ Creature* Battlefield::GetCreature(ObjectGuid const guid) return m_Map->GetCreature(guid); } -GameObject* Battlefield::GetGameObject(ObjectGuid const guid) +GameObject* Battlefield::GetGameObject(ObjectGuid const& guid) { if (!m_Map) return nullptr; diff --git a/src/server/game/Battlefield/Battlefield.h b/src/server/game/Battlefield/Battlefield.h index 6b2abdfc5..c4f94f071 100644 --- a/src/server/game/Battlefield/Battlefield.h +++ b/src/server/game/Battlefield/Battlefield.h @@ -303,8 +303,8 @@ public: Creature* SpawnCreature(uint32 entry, Position pos, TeamId teamId); GameObject* SpawnGameObject(uint32 entry, float x, float y, float z, float o); - Creature* GetCreature(ObjectGuid const guid); - GameObject* GetGameObject(ObjectGuid const guid); + Creature* GetCreature(ObjectGuid const& guid); + GameObject* GetGameObject(ObjectGuid const& guid); // Script-methods diff --git a/src/server/game/Entities/Corpse/Corpse.cpp b/src/server/game/Entities/Corpse/Corpse.cpp index 249ac7adb..1971a3dc7 100644 --- a/src/server/game/Entities/Corpse/Corpse.cpp +++ b/src/server/game/Entities/Corpse/Corpse.cpp @@ -121,7 +121,7 @@ void Corpse::DeleteFromDB(CharacterDatabaseTransaction trans) DeleteFromDB(GetOwnerGUID(), trans); } -void Corpse::DeleteFromDB(ObjectGuid const ownerGuid, CharacterDatabaseTransaction trans) +void Corpse::DeleteFromDB(ObjectGuid const& ownerGuid, CharacterDatabaseTransaction trans) { CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_DEL_CORPSE); stmt->SetData(0, ownerGuid.GetCounter()); diff --git a/src/server/game/Entities/Corpse/Corpse.h b/src/server/game/Entities/Corpse/Corpse.h index e74f2c943..9027a608a 100644 --- a/src/server/game/Entities/Corpse/Corpse.h +++ b/src/server/game/Entities/Corpse/Corpse.h @@ -63,7 +63,7 @@ public: bool LoadCorpseFromDB(ObjectGuid::LowType guid, Field* fields); void DeleteFromDB(CharacterDatabaseTransaction trans); - static void DeleteFromDB(ObjectGuid const ownerGuid, CharacterDatabaseTransaction trans); + static void DeleteFromDB(ObjectGuid const& ownerGuid, CharacterDatabaseTransaction trans); [[nodiscard]] ObjectGuid GetOwnerGUID() const { return GetGuidValue(CORPSE_FIELD_OWNER); } diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index d8897ab12..4bad8703e 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -3051,13 +3051,13 @@ SpellInfo const* GameObject::GetSpellForLock(Player const* player) const return nullptr; } -void GameObject::AddToSkillupList(ObjectGuid playerGuid) +void GameObject::AddToSkillupList(ObjectGuid const& playerGuid) { int32 timer = GetMap()->IsDungeon() ? -1 : 10 * MINUTE * IN_MILLISECONDS; m_SkillupList[playerGuid] = timer; } -bool GameObject::IsInSkillupList(ObjectGuid playerGuid) const +bool GameObject::IsInSkillupList(ObjectGuid const& playerGuid) const { for (auto const& itr : m_SkillupList) { diff --git a/src/server/game/Entities/GameObject/GameObject.h b/src/server/game/Entities/GameObject/GameObject.h index 1b8ccd047..5ca9ad61e 100644 --- a/src/server/game/Entities/GameObject/GameObject.h +++ b/src/server/game/Entities/GameObject/GameObject.h @@ -231,8 +231,8 @@ public: void RemoveLootMode(uint16 lootMode) { m_LootMode &= ~lootMode; } void ResetLootMode() { m_LootMode = LOOT_MODE_DEFAULT; } - void AddToSkillupList(ObjectGuid playerGuid); - [[nodiscard]] bool IsInSkillupList(ObjectGuid playerGuid) const; + void AddToSkillupList(ObjectGuid const& playerGuid); + [[nodiscard]] bool IsInSkillupList(ObjectGuid const& playerGuid) const; void AddUniqueUse(Player* player); void AddUse() { ++m_usetimes; } diff --git a/src/server/game/Entities/Object/ObjectGuid.h b/src/server/game/Entities/Object/ObjectGuid.h index a8d99fe80..5a3deff9e 100644 --- a/src/server/game/Entities/Object/ObjectGuid.h +++ b/src/server/game/Entities/Object/ObjectGuid.h @@ -269,7 +269,7 @@ class PackedGuid explicit PackedGuid(ObjectGuid guid) : _packedGuid(PACKED_GUID_MIN_BUFFER_SIZE) { _packedGuid.appendPackGUID(guid.GetRawValue()); } void Set(uint64 guid) { _packedGuid.wpos(0); _packedGuid.appendPackGUID(guid); } - void Set(ObjectGuid guid) { _packedGuid.wpos(0); _packedGuid.appendPackGUID(guid.GetRawValue()); } + void Set(ObjectGuid const& guid) { _packedGuid.wpos(0); _packedGuid.appendPackGUID(guid.GetRawValue()); } [[nodiscard]] std::size_t size() const { return _packedGuid.size(); } diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index a82d55eb8..a8cb733de 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -2088,7 +2088,7 @@ bool Player::CanInteractWithQuestGiver(Object* questGiver) return false; } -Creature* Player::GetNPCIfCanInteractWith(ObjectGuid guid, uint32 npcflagmask) +Creature* Player::GetNPCIfCanInteractWith(ObjectGuid const& guid, uint32 npcflagmask) { // unit checks if (!guid) @@ -2145,7 +2145,7 @@ Creature* Player::GetNPCIfCanInteractWith(ObjectGuid guid, uint32 npcflagmask) return creature; } -GameObject* Player::GetGameObjectIfCanInteractWith(ObjectGuid guid, GameobjectTypes type) const +GameObject* Player::GetGameObjectIfCanInteractWith(ObjectGuid const& guid, GameobjectTypes type) const { if (GameObject* go = GetMap()->GetGameObject(guid)) { @@ -4616,7 +4616,7 @@ void Player::KillPlayer() //UpdateObjectVisibility(); // pussywizard: not needed } -void Player::OfflineResurrect(ObjectGuid const guid, CharacterDatabaseTransaction trans) +void Player::OfflineResurrect(ObjectGuid const& guid, CharacterDatabaseTransaction trans) { Corpse::DeleteFromDB(guid, trans); CharacterDatabasePreparedStatement* stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_ADD_AT_LOGIN_FLAG); diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index ea2cd277a..1e57a5649 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1128,8 +1128,8 @@ public: void SendInstanceResetWarning(uint32 mapid, Difficulty difficulty, uint32 time, bool onEnterMap); bool CanInteractWithQuestGiver(Object* questGiver); - Creature* GetNPCIfCanInteractWith(ObjectGuid guid, uint32 npcflagmask); - [[nodiscard]] GameObject* GetGameObjectIfCanInteractWith(ObjectGuid guid, GameobjectTypes type) const; + Creature* GetNPCIfCanInteractWith(ObjectGuid const& guid, uint32 npcflagmask); + [[nodiscard]] GameObject* GetGameObjectIfCanInteractWith(ObjectGuid const& guid, GameobjectTypes type) const; void ToggleAFK(); void ToggleDND(); @@ -2033,7 +2033,7 @@ public: Corpse* CreateCorpse(); void RemoveCorpse(); void KillPlayer(); - static void OfflineResurrect(ObjectGuid const guid, CharacterDatabaseTransaction trans); + static void OfflineResurrect(ObjectGuid const& guid, CharacterDatabaseTransaction trans); [[nodiscard]] bool HasCorpse() const { return _corpseLocation.GetMapId() != MAPID_INVALID; } [[nodiscard]] WorldLocation GetCorpseLocation() const { return _corpseLocation; } uint32 GetResurrectionSpellId(); diff --git a/src/server/game/Entities/Player/SocialMgr.cpp b/src/server/game/Entities/Player/SocialMgr.cpp index d5b5fdf59..8ace05873 100644 --- a/src/server/game/Entities/Player/SocialMgr.cpp +++ b/src/server/game/Entities/Player/SocialMgr.cpp @@ -37,7 +37,7 @@ uint32 PlayerSocial::GetNumberOfSocialsWithFlag(SocialFlag flag) const return counter; } -bool PlayerSocial::AddToSocialList(ObjectGuid friendGuid, SocialFlag flag) +bool PlayerSocial::AddToSocialList(ObjectGuid const& friendGuid, SocialFlag flag) { // check client limits if (GetNumberOfSocialsWithFlag(flag) >= (((flag & SOCIAL_FLAG_FRIEND) != 0) ? SOCIALMGR_FRIEND_LIMIT : SOCIALMGR_IGNORE_LIMIT)) @@ -71,7 +71,7 @@ bool PlayerSocial::AddToSocialList(ObjectGuid friendGuid, SocialFlag flag) return true; } -void PlayerSocial::RemoveFromSocialList(ObjectGuid friendGuid, SocialFlag flag) +void PlayerSocial::RemoveFromSocialList(ObjectGuid const& friendGuid, SocialFlag flag) { auto itr = m_playerSocialMap.find(friendGuid); if (itr == m_playerSocialMap.end()) // not exist @@ -102,7 +102,7 @@ void PlayerSocial::RemoveFromSocialList(ObjectGuid friendGuid, SocialFlag flag) } } -void PlayerSocial::SetFriendNote(ObjectGuid friendGuid, std::string note) +void PlayerSocial::SetFriendNote(ObjectGuid const& friendGuid, std::string note) { auto itr = m_playerSocialMap.find(friendGuid); if (itr == m_playerSocialMap.end()) // not exist @@ -176,7 +176,7 @@ void PlayerSocial::SendSocialList(Player* player, uint32 flags) LOG_DEBUG("network", "WORLD: Sent SMSG_CONTACT_LIST"); } -bool PlayerSocial::_checkContact(ObjectGuid guid, SocialFlag flags) const +bool PlayerSocial::_checkContact(ObjectGuid const& guid, SocialFlag flags) const { auto const& itr = m_playerSocialMap.find(guid); if (itr != m_playerSocialMap.end()) @@ -185,12 +185,12 @@ bool PlayerSocial::_checkContact(ObjectGuid guid, SocialFlag flags) const return false; } -bool PlayerSocial::HasFriend(ObjectGuid friend_guid) const +bool PlayerSocial::HasFriend(ObjectGuid const& friend_guid) const { return _checkContact(friend_guid, SOCIAL_FLAG_FRIEND); } -bool PlayerSocial::HasIgnore(ObjectGuid ignore_guid) const +bool PlayerSocial::HasIgnore(ObjectGuid const& ignore_guid) const { return _checkContact(ignore_guid, SOCIAL_FLAG_IGNORED); } @@ -209,7 +209,7 @@ SocialMgr* SocialMgr::instance() return &instance; } -void SocialMgr::GetFriendInfo(Player* player, ObjectGuid friendGUID, FriendInfo& friendInfo) +void SocialMgr::GetFriendInfo(Player* player, ObjectGuid const& friendGUID, FriendInfo& friendInfo) { if (!player) return; @@ -247,14 +247,14 @@ void SocialMgr::GetFriendInfo(Player* player, ObjectGuid friendGUID, FriendInfo& } } -void SocialMgr::MakeFriendStatusPacket(FriendsResult result, ObjectGuid guid, WorldPacket* data) +void SocialMgr::MakeFriendStatusPacket(FriendsResult result, ObjectGuid const& guid, WorldPacket* data) { data->Initialize(SMSG_FRIEND_STATUS, 9); *data << uint8(result); *data << guid; } -void SocialMgr::SendFriendStatus(Player* player, FriendsResult result, ObjectGuid friendGuid, bool broadcast) +void SocialMgr::SendFriendStatus(Player* player, FriendsResult result, ObjectGuid const& friendGuid, bool broadcast) { FriendInfo fi; GetFriendInfo(player, friendGuid, fi); @@ -316,7 +316,7 @@ void SocialMgr::BroadcastToFriendListers(Player* player, WorldPacket* packet) } } -PlayerSocial* SocialMgr::LoadFromDB(PreparedQueryResult result, ObjectGuid guid) +PlayerSocial* SocialMgr::LoadFromDB(PreparedQueryResult result, ObjectGuid const& guid) { PlayerSocial* social = &m_socialMap[guid]; social->SetPlayerGUID(guid); diff --git a/src/server/game/Entities/Player/SocialMgr.h b/src/server/game/Entities/Player/SocialMgr.h index a35187b6f..5995f05e9 100644 --- a/src/server/game/Entities/Player/SocialMgr.h +++ b/src/server/game/Entities/Player/SocialMgr.h @@ -104,19 +104,19 @@ class PlayerSocial public: PlayerSocial(); // adding/removing - bool AddToSocialList(ObjectGuid friend_guid, SocialFlag flag); - void RemoveFromSocialList(ObjectGuid friend_guid, SocialFlag flag); - void SetFriendNote(ObjectGuid friendGuid, std::string note); + bool AddToSocialList(ObjectGuid const& friend_guid, SocialFlag flag); + void RemoveFromSocialList(ObjectGuid const& friend_guid, SocialFlag flag); + void SetFriendNote(ObjectGuid const& friendGuid, std::string note); // Packet send's void SendSocialList(Player* player, uint32 flags); // Misc - bool HasFriend(ObjectGuid friend_guid) const; - bool HasIgnore(ObjectGuid ignore_guid) const; - ObjectGuid GetPlayerGUID() const { return m_playerGUID; } - void SetPlayerGUID(ObjectGuid guid) { m_playerGUID = guid; } + bool HasFriend(ObjectGuid const& friend_guid) const; + bool HasIgnore(ObjectGuid const& ignore_guid) const; + ObjectGuid const& GetPlayerGUID() const { return m_playerGUID; } + void SetPlayerGUID(ObjectGuid const& guid) { m_playerGUID = guid; } uint32 GetNumberOfSocialsWithFlag(SocialFlag flag) const; private: - bool _checkContact(ObjectGuid guid, SocialFlag flags) const; + bool _checkContact(ObjectGuid const& guid, SocialFlag flags) const; typedef std::map PlayerSocialMap; PlayerSocialMap m_playerSocialMap; ObjectGuid m_playerGUID; @@ -131,14 +131,14 @@ class SocialMgr public: static SocialMgr* instance(); // Misc - void RemovePlayerSocial(ObjectGuid guid) { m_socialMap.erase(guid); } - static void GetFriendInfo(Player* player, ObjectGuid friendGUID, FriendInfo& friendInfo); + void RemovePlayerSocial(ObjectGuid const& guid) { m_socialMap.erase(guid); } + static void GetFriendInfo(Player* player, ObjectGuid const& friendGUID, FriendInfo& friendInfo); // Packet management - void MakeFriendStatusPacket(FriendsResult result, ObjectGuid friend_guid, WorldPacket* data); - void SendFriendStatus(Player* player, FriendsResult result, ObjectGuid friend_guid, bool broadcast); + void MakeFriendStatusPacket(FriendsResult result, ObjectGuid const& friend_guid, WorldPacket* data); + void SendFriendStatus(Player* player, FriendsResult result, ObjectGuid const& friend_guid, bool broadcast); void BroadcastToFriendListers(Player* player, WorldPacket* packet); // Loading - PlayerSocial* LoadFromDB(PreparedQueryResult result, ObjectGuid guid); + PlayerSocial* LoadFromDB(PreparedQueryResult result, ObjectGuid const& guid); private: typedef std::map SocialMap; SocialMap m_socialMap; diff --git a/src/server/game/Globals/ObjectAccessor.cpp b/src/server/game/Globals/ObjectAccessor.cpp index f9a4cb01e..22a9d39b1 100644 --- a/src/server/game/Globals/ObjectAccessor.cpp +++ b/src/server/game/Globals/ObjectAccessor.cpp @@ -112,7 +112,7 @@ namespace PlayerNameMapHolder } // namespace PlayerNameMapHolder -WorldObject* ObjectAccessor::GetWorldObject(WorldObject const& p, ObjectGuid const guid) +WorldObject* ObjectAccessor::GetWorldObject(WorldObject const& p, ObjectGuid const& guid) { switch (guid.GetHigh()) { @@ -138,7 +138,7 @@ WorldObject* ObjectAccessor::GetWorldObject(WorldObject const& p, ObjectGuid con return nullptr; } -Object* ObjectAccessor::GetObjectByTypeMask(WorldObject const& p, ObjectGuid const guid, uint32 typemask) +Object* ObjectAccessor::GetObjectByTypeMask(WorldObject const& p, ObjectGuid const& guid, uint32 typemask) { switch (guid.GetHigh()) { @@ -176,27 +176,27 @@ Object* ObjectAccessor::GetObjectByTypeMask(WorldObject const& p, ObjectGuid con return nullptr; } -Corpse* ObjectAccessor::GetCorpse(WorldObject const& u, ObjectGuid const guid) +Corpse* ObjectAccessor::GetCorpse(WorldObject const& u, ObjectGuid const& guid) { return u.GetMap()->GetCorpse(guid); } -GameObject* ObjectAccessor::GetGameObject(WorldObject const& u, ObjectGuid const guid) +GameObject* ObjectAccessor::GetGameObject(WorldObject const& u, ObjectGuid const& guid) { return u.GetMap()->GetGameObject(guid); } -Transport* ObjectAccessor::GetTransport(WorldObject const& u, ObjectGuid const guid) +Transport* ObjectAccessor::GetTransport(WorldObject const& u, ObjectGuid const& guid) { return u.GetMap()->GetTransport(guid); } -DynamicObject* ObjectAccessor::GetDynamicObject(WorldObject const& u, ObjectGuid const guid) +DynamicObject* ObjectAccessor::GetDynamicObject(WorldObject const& u, ObjectGuid const& guid) { return u.GetMap()->GetDynamicObject(guid); } -Unit* ObjectAccessor::GetUnit(WorldObject const& u, ObjectGuid const guid) +Unit* ObjectAccessor::GetUnit(WorldObject const& u, ObjectGuid const& guid) { if (guid.IsPlayer()) return GetPlayer(u, guid); @@ -207,17 +207,17 @@ Unit* ObjectAccessor::GetUnit(WorldObject const& u, ObjectGuid const guid) return GetCreature(u, guid); } -Creature* ObjectAccessor::GetCreature(WorldObject const& u, ObjectGuid const guid) +Creature* ObjectAccessor::GetCreature(WorldObject const& u, ObjectGuid const& guid) { return u.GetMap()->GetCreature(guid); } -Pet* ObjectAccessor::GetPet(WorldObject const& u, ObjectGuid const guid) +Pet* ObjectAccessor::GetPet(WorldObject const& u, ObjectGuid const& guid) { return u.GetMap()->GetPet(guid); } -Player* ObjectAccessor::GetPlayer(Map const* m, ObjectGuid const guid) +Player* ObjectAccessor::GetPlayer(Map const* m, ObjectGuid const& guid) { if (Player * player = HashMapHolder::Find(guid)) if (player->IsInWorld() && player->GetMap() == m) @@ -226,12 +226,12 @@ Player* ObjectAccessor::GetPlayer(Map const* m, ObjectGuid const guid) return nullptr; } -Player* ObjectAccessor::GetPlayer(WorldObject const& u, ObjectGuid const guid) +Player* ObjectAccessor::GetPlayer(WorldObject const& u, ObjectGuid const& guid) { return GetPlayer(u.GetMap(), guid); } -Creature* ObjectAccessor::GetCreatureOrPetOrVehicle(WorldObject const& u, ObjectGuid const guid) +Creature* ObjectAccessor::GetCreatureOrPetOrVehicle(WorldObject const& u, ObjectGuid const& guid) { if (guid.IsPet()) return GetPet(u, guid); diff --git a/src/server/game/Globals/ObjectAccessor.h b/src/server/game/Globals/ObjectAccessor.h index 2fbe70bf5..2a78eee0d 100644 --- a/src/server/game/Globals/ObjectAccessor.h +++ b/src/server/game/Globals/ObjectAccessor.h @@ -60,18 +60,18 @@ public: namespace ObjectAccessor { // these functions return objects only if in map of specified object - WorldObject* GetWorldObject(WorldObject const&, ObjectGuid const guid); - Object* GetObjectByTypeMask(WorldObject const&, ObjectGuid const guid, uint32 typemask); - Corpse* GetCorpse(WorldObject const& u, ObjectGuid const guid); - GameObject* GetGameObject(WorldObject const& u, ObjectGuid const guid); - Transport* GetTransport(WorldObject const& u, ObjectGuid const guid); - DynamicObject* GetDynamicObject(WorldObject const& u, ObjectGuid const guid); - Unit* GetUnit(WorldObject const&, ObjectGuid const guid); - Creature* GetCreature(WorldObject const& u, ObjectGuid const guid); - Pet* GetPet(WorldObject const&, ObjectGuid const guid); - Player* GetPlayer(Map const*, ObjectGuid const guid); - Player* GetPlayer(WorldObject const&, ObjectGuid const guid); - Creature* GetCreatureOrPetOrVehicle(WorldObject const&, ObjectGuid const); + WorldObject* GetWorldObject(WorldObject const&, ObjectGuid const& guid); + Object* GetObjectByTypeMask(WorldObject const&, ObjectGuid const& guid, uint32 typemask); + Corpse* GetCorpse(WorldObject const& u, ObjectGuid const& guid); + GameObject* GetGameObject(WorldObject const& u, ObjectGuid const& guid); + Transport* GetTransport(WorldObject const& u, ObjectGuid const& guid); + DynamicObject* GetDynamicObject(WorldObject const& u, ObjectGuid const& guid); + Unit* GetUnit(WorldObject const&, ObjectGuid const& guid); + Creature* GetCreature(WorldObject const& u, ObjectGuid const& guid); + Pet* GetPet(WorldObject const&, ObjectGuid const& guid); + Player* GetPlayer(Map const*, ObjectGuid const& guid); + Player* GetPlayer(WorldObject const&, ObjectGuid const& guid); + Creature* GetCreatureOrPetOrVehicle(WorldObject const&, ObjectGuid const&); // these functions return objects if found in whole world // ACCESS LIKE THAT IS NOT THREAD SAFE diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index de0e4a9bd..85f8275e8 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -2358,27 +2358,27 @@ void BattlegroundMap::RemoveAllPlayers() player->TeleportTo(player->GetEntryPoint()); } -Corpse* Map::GetCorpse(ObjectGuid const guid) +Corpse* Map::GetCorpse(ObjectGuid const& guid) { return _objectsStore.Find(guid); } -Creature* Map::GetCreature(ObjectGuid const guid) +Creature* Map::GetCreature(ObjectGuid const& guid) { return _objectsStore.Find(guid); } -GameObject* Map::GetGameObject(ObjectGuid const guid) +GameObject* Map::GetGameObject(ObjectGuid const& guid) { return _objectsStore.Find(guid); } -Pet* Map::GetPet(ObjectGuid const guid) +Pet* Map::GetPet(ObjectGuid const& guid) { return dynamic_cast(_objectsStore.Find(guid)); } -Transport* Map::GetTransport(ObjectGuid guid) +Transport* Map::GetTransport(ObjectGuid const& guid) { if (guid.GetHigh() != HighGuid::Mo_Transport && guid.GetHigh() != HighGuid::Transport) return nullptr; @@ -2387,7 +2387,7 @@ Transport* Map::GetTransport(ObjectGuid guid) return go ? go->ToTransport() : nullptr; } -DynamicObject* Map::GetDynamicObject(ObjectGuid guid) +DynamicObject* Map::GetDynamicObject(ObjectGuid const& guid) { return _objectsStore.Find(guid); } @@ -2679,7 +2679,7 @@ void Map::RemoveCorpse(Corpse* corpse) _corpseBones.erase(corpse); } -Corpse* Map::ConvertCorpseToBones(ObjectGuid const ownerGuid, bool insignia /*= false*/) +Corpse* Map::ConvertCorpseToBones(ObjectGuid const& ownerGuid, bool insignia /*= false*/) { Corpse* corpse = GetCorpseByPlayer(ownerGuid); if (!corpse) diff --git a/src/server/game/Maps/Map.h b/src/server/game/Maps/Map.h index 20551da8a..06451fb1d 100644 --- a/src/server/game/Maps/Map.h +++ b/src/server/game/Maps/Map.h @@ -338,12 +338,12 @@ public: GameObject* SummonGameObject(uint32 entry, Position const& pos, float rotation0 = 0.0f, float rotation1 = 0.0f, float rotation2 = 0.0f, float rotation3 = 0.0f, uint32 respawnTime = 100, bool checkTransport = true); void SummonCreatureGroup(uint8 group, std::list* list = nullptr); - Corpse* GetCorpse(ObjectGuid const guid); - Creature* GetCreature(ObjectGuid const guid); - GameObject* GetGameObject(ObjectGuid const guid); - Transport* GetTransport(ObjectGuid const guid); - DynamicObject* GetDynamicObject(ObjectGuid const guid); - Pet* GetPet(ObjectGuid const guid); + Corpse* GetCorpse(ObjectGuid const& guid); + Creature* GetCreature(ObjectGuid const& guid); + GameObject* GetGameObject(ObjectGuid const& guid); + Transport* GetTransport(ObjectGuid const& guid); + DynamicObject* GetDynamicObject(ObjectGuid const& guid); + Pet* GetPet(ObjectGuid const& guid); MapStoredObjectTypesContainer& GetObjectsStore() { return _objectsStore; } @@ -438,7 +438,7 @@ public: void DeleteCorpseData(); void AddCorpse(Corpse* corpse); void RemoveCorpse(Corpse* corpse); - Corpse* ConvertCorpseToBones(ObjectGuid const ownerGuid, bool insignia = false); + Corpse* ConvertCorpseToBones(ObjectGuid const& ownerGuid, bool insignia = false); void RemoveOldCorpses(); static void DeleteRespawnTimesInDB(uint16 mapId, uint32 instanceId); diff --git a/src/server/game/World/WorldState.cpp b/src/server/game/World/WorldState.cpp index ebb11b8bf..b22c0de6a 100644 --- a/src/server/game/World/WorldState.cpp +++ b/src/server/game/World/WorldState.cpp @@ -852,7 +852,7 @@ void WorldState::HandleSunsReachSubPhaseTransition(int32 subPhaseMask, bool init if (!initial) { std::lock_guard guard(m_sunsReachData.m_sunsReachReclamationMutex); - for (ObjectGuid& guid : m_sunsReachData.m_sunsReachReclamationPlayers) + for (ObjectGuid const& guid : m_sunsReachData.m_sunsReachReclamationPlayers) if (Player* player = ObjectAccessor::FindPlayer(guid)) { if (start) diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp index cf39b53a1..873cfdc74 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_chromaggus.cpp @@ -118,7 +118,7 @@ public: return !victim->HasAura(SPELL_TIMELAPSE); } - void SetGUID(ObjectGuid guid, int32 id) override + void SetGUID(ObjectGuid const& guid, int32 id) override { if (id == GUID_LEVER_USER) { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp index 4b82654fb..de984f635 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_razorgore.cpp @@ -152,7 +152,7 @@ public: } } - void SetGUID(ObjectGuid const guid, int32 /*id*/) override + void SetGUID(ObjectGuid const& guid, int32 /*id*/) override { _charmerGUID = guid; } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp index 1280914f4..6cde45bdd 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_ragnaros.cpp @@ -183,7 +183,7 @@ public: } } - void SetGUID(ObjectGuid guid, int32 index) override + void SetGUID(ObjectGuid const& guid, int32 index) override { if (index == GO_LAVA_BURST) { diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp index e4125d70d..b1afd209a 100644 --- a/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp +++ b/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp @@ -131,7 +131,7 @@ public: uint32 checkTimer; ObjectGuid playerGUID; - void SetGUID(ObjectGuid guid, int32) override + void SetGUID(ObjectGuid const& guid, int32) override { playerGUID = guid; } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp index f804a2878..15e175dde 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_shade_of_aran.cpp @@ -151,7 +151,7 @@ struct boss_shade_of_aran : public BossAI return me->GetDistance2d(roomCenter.GetPositionX(), roomCenter.GetPositionY()) < 45.0f; } - void SetGUID(ObjectGuid guid, int32 id) override + void SetGUID(ObjectGuid const& guid, int32 id) override { if (id == ACTION_ATIESH_REACT && !_atieshReaction) { diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index b70c90063..c8244d493 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -396,7 +396,7 @@ public: AttackStart(attacker); } - void SetGUID(ObjectGuid guid, int32) override + void SetGUID(ObjectGuid const& guid, int32) override { gothikGUID = guid; events.ScheduleEvent(EVENT_GHOUL_MOVE_TO_PIT, 3s); @@ -806,7 +806,7 @@ public: ObjectGuid prisonerGUID; - void SetGUID(ObjectGuid guid, int32 /*id*/) override + void SetGUID(ObjectGuid const& guid, int32 /*id*/) override { if (!prisonerGUID) prisonerGUID = guid; @@ -866,7 +866,7 @@ public: ObjectGuid minerGUID; - void SetGUID(ObjectGuid guid, int32 /*id*/) override + void SetGUID(ObjectGuid const& guid, int32 /*id*/) override { minerGUID = guid; } diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp index b455b71e8..ad623291f 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp @@ -250,7 +250,7 @@ public: } } - void SetGUID(ObjectGuid const guid, int32 type) override + void SetGUID(ObjectGuid const& guid, int32 type) override { if (type == ACTION_CHARGE) { @@ -564,7 +564,7 @@ public: RevivePlayer(victim, reviveGUID); } - void SetGUID(ObjectGuid const guid, int32 /*type = 0 */) override + void SetGUID(ObjectGuid const& guid, int32 /*type = 0 */) override { reviveGUID = guid; } @@ -612,7 +612,7 @@ public: revivePlayerGUID.Clear(); } - void SetGUID(ObjectGuid const guid, int32 /*id*/) override + void SetGUID(ObjectGuid const& guid, int32 /*id*/) override { revivePlayerGUID = guid; } diff --git a/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp b/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp index 6b5ff5937..6f9246e3f 100644 --- a/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp @@ -93,7 +93,7 @@ public: _faction = faction; } - void SetGUID(ObjectGuid guid, int32) override + void SetGUID(ObjectGuid const& guid, int32) override { _playerGUID = guid; me->ReplaceAllNpcFlags(UNIT_NPC_FLAG_NONE); diff --git a/src/server/scripts/EasternKingdoms/zone_undercity.cpp b/src/server/scripts/EasternKingdoms/zone_undercity.cpp index dcfd61342..efd608da0 100644 --- a/src/server/scripts/EasternKingdoms/zone_undercity.cpp +++ b/src/server/scripts/EasternKingdoms/zone_undercity.cpp @@ -118,7 +118,7 @@ public: _events.ScheduleEvent(EVENT_MULTI_SHOT, 10s); } - void SetGUID(ObjectGuid guid, int32 type) override + void SetGUID(ObjectGuid const& guid, int32 type) override { if (type == GUID_EVENT_INVOKER) { diff --git a/src/server/scripts/Events/brewfest.cpp b/src/server/scripts/Events/brewfest.cpp index 31d72e61a..84138e5d3 100644 --- a/src/server/scripts/Events/brewfest.cpp +++ b/src/server/scripts/Events/brewfest.cpp @@ -1743,7 +1743,7 @@ struct npc_coren_direbrew_sisters : public ScriptedAI { npc_coren_direbrew_sisters(Creature* creature) : ScriptedAI(creature) { } - void SetGUID(ObjectGuid guid, int32 id) override + void SetGUID(ObjectGuid const& guid, int32 id) override { if (id == DATA_TARGET_GUID) { diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp index 6caa1ff95..7b1ccf257 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/BattleForMountHyjal/boss_archimonde.cpp @@ -335,7 +335,7 @@ struct boss_archimonde : public BossAI Talk(SAY_SLAY); } - void SetGUID(ObjectGuid guid, int32 type) override + void SetGUID(ObjectGuid const& guid, int32 type) override { if (type == GUID_GAIN_SOUL_CHARGE_PLAYER) { diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp index 7b56c464d..10141d57c 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_ossirian.cpp @@ -154,7 +154,7 @@ struct boss_ossirian : public BossAI } } - void SetGUID(ObjectGuid guid, int32 action) override + void SetGUID(ObjectGuid const& guid, int32 action) override { if (action == ACTION_TRIGGER_WEAKNESS && guid != _firstCrystalGUID) { @@ -317,7 +317,7 @@ public: { go_ossirian_crystalAI(GameObject* go) : GameObjectAI(go), _instance(go->GetInstanceScript()) { } - void SetGUID(ObjectGuid guid, int32 type) override + void SetGUID(ObjectGuid const& guid, int32 type) override { if (type == GUID_TRIGGER_PAIR) { diff --git a/src/server/scripts/Kalimdor/zone_darkshore.cpp b/src/server/scripts/Kalimdor/zone_darkshore.cpp index c3a76fc63..0efe73836 100644 --- a/src/server/scripts/Kalimdor/zone_darkshore.cpp +++ b/src/server/scripts/Kalimdor/zone_darkshore.cpp @@ -552,7 +552,7 @@ public: } } - void SetGUID(ObjectGuid /*guid*/, int32 type) override + void SetGUID(ObjectGuid const& /*guid*/, int32 type) override { if (type == GUID_SCRIPT_INVOKER && _scriptRunning == false) { diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp index 276c37bd8..94fb1505f 100644 --- a/src/server/scripts/Kalimdor/zone_desolace.cpp +++ b/src/server/scripts/Kalimdor/zone_desolace.cpp @@ -129,7 +129,7 @@ public: ImmuneFlagSet(false, _faction); } - void SetGUID(ObjectGuid playerGUID, int32 faction) override + void SetGUID(ObjectGuid const& playerGUID, int32 faction) override { _playerGUID = playerGUID; _faction = faction; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp index 7f18b8474..afc11c5cc 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp @@ -1293,7 +1293,7 @@ public: } } - void SetGUID(ObjectGuid guid, int32 /*type*/) override + void SetGUID(ObjectGuid const& guid, int32 /*type*/) override { _chaseGUID = guid; } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp index 5deccbc0b..599477698 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_queen_lana_thel.cpp @@ -533,7 +533,7 @@ public: return _bloodboltedPlayers.count(guid) != 0; } - void SetGUID(ObjectGuid guid, int32 type = 0) override + void SetGUID(ObjectGuid const& guid, int32 type = 0) override { switch (type) { diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp index f4bd5ff7b..c9cfe56d4 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp @@ -703,7 +703,7 @@ public: } } - void SetGUID(ObjectGuid guid, int32 id/* = 0*/) override + void SetGUID(ObjectGuid const& guid, int32 id/* = 0*/) override { if (id != ACTION_SHIP_VISITS_ENEMY && id != ACTION_SHIP_VISITS_SELF) return; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index 165e8e77e..a7f0794fa 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -745,7 +745,7 @@ public: ObjectGuid targetGUID; - void SetGUID(ObjectGuid guid, int32 type) override + void SetGUID(ObjectGuid const& guid, int32 type) override { if (type == -1) targetGUID = guid; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index f64788381..2dc55ae95 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -698,7 +698,7 @@ public: uint32 _existenceCheckTimer; uint16 _asphyxiationTimer; - void SetGUID(ObjectGuid guid, int32 type) override + void SetGUID(ObjectGuid const& guid, int32 type) override { if (type == DATA_TRAPPED_PLAYER) _trappedPlayerGUID = guid; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index ecaf28219..b33567ca0 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -2536,7 +2536,7 @@ public: } } - void SetGUID(ObjectGuid guid, int32 /* = 0*/) override + void SetGUID(ObjectGuid const& guid, int32 /* = 0*/) override { _grabbedPlayer = guid; } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index 64d616b5d..74221610a 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -772,7 +772,7 @@ public: } } - void SetGUID(ObjectGuid guid, int32 type/* = 0*/) override + void SetGUID(ObjectGuid const& guid, int32 type/* = 0*/) override { if (type == ACTION_VRYKUL_DEATH) { diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 03d0df839..2ff4dc6d2 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -1421,7 +1421,7 @@ public: _playerGUID.Clear(); } - void SetGUID(ObjectGuid guid, int32 /*action*/) override + void SetGUID(ObjectGuid const& guid, int32 /*action*/) override { if (_playerGUID) return; diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index a7eab2215..b8e657602 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -1093,7 +1093,7 @@ public: me->GetMotionMaster()->Clear(); } - void SetGUID(ObjectGuid guid, int32 /*id*/) override + void SetGUID(ObjectGuid const& guid, int32 /*id*/) override { if (playerGUID || events.HasTimeUntilEvent(998) || events.HasTimeUntilEvent(2)) return; diff --git a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp index 3b7a60e26..df5dd8c7d 100644 --- a/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp +++ b/src/server/scripts/Outland/Auchindoun/AuchenaiCrypts/boss_exarch_maladaar.cpp @@ -241,7 +241,7 @@ struct npc_stolen_soul : public ScriptedAI }); } - void SetGUID(ObjectGuid guid, int32 /*id*/) override + void SetGUID(ObjectGuid const& guid, int32 /*id*/) override { _targetGuid = guid; } diff --git a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp index fcf8f38c5..a4c40812f 100644 --- a/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp +++ b/src/server/scripts/Outland/Auchindoun/ShadowLabyrinth/boss_murmur.cpp @@ -114,7 +114,7 @@ struct boss_murmur : public BossAI return true; } - void SetGUID(ObjectGuid guid, int32 index) override + void SetGUID(ObjectGuid const& guid, int32 index) override { if (index == GUID_MURMUR_NPCS) { diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp index e024541c8..81e4b4b5a 100644 --- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp +++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp @@ -670,7 +670,7 @@ public: } // Used for getting involved player guid. Parameter id is used for defining if is a large(Monument) or small(Relic) node - void SetGUID(ObjectGuid guid, int32 id) override + void SetGUID(ObjectGuid const& guid, int32 id) override { me->SetCanFly(true); diff --git a/src/server/scripts/Outland/zone_nagrand.cpp b/src/server/scripts/Outland/zone_nagrand.cpp index d0c6df380..7f462f79e 100644 --- a/src/server/scripts/Outland/zone_nagrand.cpp +++ b/src/server/scripts/Outland/zone_nagrand.cpp @@ -303,7 +303,7 @@ public: uint32 HealTimer; uint32 FrostShockTimer; - void SetGUID(ObjectGuid guid, int32 /*questId*/) override + void SetGUID(ObjectGuid const& guid, int32 /*questId*/) override { me->SetStandState(UNIT_STAND_STATE_STAND); Start(true, false, guid); diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp index c014ab876..71cb5064b 100644 --- a/src/server/scripts/Outland/zone_netherstorm.cpp +++ b/src/server/scripts/Outland/zone_netherstorm.cpp @@ -99,7 +99,7 @@ public: npc_escortAI::MoveInLineOfSight(who); } - void SetGUID(ObjectGuid playerGUID, int32 type) override + void SetGUID(ObjectGuid const& playerGUID, int32 type) override { if (type == DATA_START_ENCOUNTER) { diff --git a/src/server/scripts/World/boss_emerald_dragons.cpp b/src/server/scripts/World/boss_emerald_dragons.cpp index 2bd68ffcd..458984900 100644 --- a/src/server/scripts/World/boss_emerald_dragons.cpp +++ b/src/server/scripts/World/boss_emerald_dragons.cpp @@ -219,7 +219,7 @@ public: }); } - void SetGUID(ObjectGuid guid, int32 type) override + void SetGUID(ObjectGuid const& guid, int32 type) override { if (type == GUID_DRAGON) { From 53238a68d312edbc8977ad760474129d75a07d6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=A4=A9=E9=B9=AD?= <18535853+PkllonG@users.noreply.github.com> Date: Mon, 13 Oct 2025 14:36:23 +0800 Subject: [PATCH 101/140] refactor(Core): DespawnOrUnsummon (#23141) --- src/server/game/AI/CreatureAI.cpp | 4 +-- src/server/game/AI/CreatureAI.h | 2 +- .../game/AI/ScriptedAI/ScriptedCreature.cpp | 8 ++--- .../game/AI/ScriptedAI/ScriptedCreature.h | 10 +++--- src/server/game/AI/SmartScripts/SmartAI.cpp | 2 +- .../game/Battlefield/Zones/BattlefieldWG.cpp | 2 +- .../game/Entities/Creature/Creature.cpp | 8 ++--- src/server/game/Entities/Creature/Creature.h | 3 +- .../game/Entities/GameObject/GameObject.cpp | 2 +- src/server/game/Entities/Pet/Pet.cpp | 6 ++-- src/server/game/Entities/Pet/Pet.h | 2 +- src/server/game/Entities/Player/Player.cpp | 6 ++-- src/server/game/Entities/Player/Player.h | 2 +- src/server/game/Entities/Unit/Unit.cpp | 2 +- src/server/game/Entities/Vehicle/Vehicle.h | 4 +-- src/server/game/Scripting/MapScripts.cpp | 2 +- src/server/game/Spells/SpellEffects.cpp | 2 +- src/server/game/Time/UpdateTime.cpp | 2 +- .../instance_blackrock_spire.cpp | 2 +- .../BlackwingLair/boss_nefarian.cpp | 2 +- .../MoltenCore/molten_core.cpp | 2 +- .../Gnomeregan/instance_gnomeregan.cpp | 2 +- .../Karazhan/boss_terestian_illhoof.cpp | 2 +- .../EasternKingdoms/Karazhan/karazhan.cpp | 4 +-- .../MagistersTerrace/boss_vexallus.cpp | 2 +- .../ScarletEnclave/chapter1.cpp | 4 +-- .../ScarletEnclave/chapter5.cpp | 10 +++--- .../Scholomance/boss_kirtonos_the_herald.cpp | 2 +- .../SunwellPlateau/boss_brutallus.cpp | 2 +- .../SunwellPlateau/boss_felmyst.cpp | 2 +- .../SunwellPlateau/boss_kiljaeden.cpp | 8 ++--- .../SunwellPlateau/boss_muru.cpp | 2 +- .../EasternKingdoms/ZulAman/boss_zuljin.cpp | 5 +-- .../EasternKingdoms/ZulAman/zulaman.cpp | 2 +- .../EasternKingdoms/ZulGurub/boss_arlokk.cpp | 2 +- .../ZulGurub/boss_mandokir.cpp | 2 +- .../scripts/EasternKingdoms/zone_duskwood.cpp | 2 +- .../zone_eastern_plaguelands.cpp | 2 +- .../zone_isle_of_queldanas.cpp | 2 +- .../EasternKingdoms/zone_undercity.cpp | 12 +++---- src/server/scripts/Events/brewfest.cpp | 2 +- src/server/scripts/Events/hallows_end.cpp | 6 ++-- src/server/scripts/Events/love_in_air.cpp | 2 +- src/server/scripts/Events/winter_veil.cpp | 2 +- .../CullingOfStratholme/boss_infinite.cpp | 8 ++--- .../CullingOfStratholme/boss_mal_ganis.cpp | 2 +- .../culling_of_stratholme.cpp | 8 ++--- .../instance_culling_of_stratholme.cpp | 2 +- .../EscapeFromDurnholdeKeep/old_hillsbrad.cpp | 2 +- .../instance_the_black_morass.cpp | 2 +- .../TheBlackMorass/the_black_morass.cpp | 16 ++++----- .../Kalimdor/DireMaul/instance_dire_maul.cpp | 2 +- .../Kalimdor/RazorfenDowns/razorfen_downs.cpp | 2 +- .../Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp | 2 +- .../TempleOfAhnQiraj/boss_bug_trio.cpp | 2 +- .../Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp | 6 ++-- .../TempleOfAhnQiraj/boss_twinemperors.cpp | 2 +- .../TempleOfAhnQiraj/temple_of_ahnqiraj.cpp | 2 +- .../scripts/Kalimdor/ZulFarrak/zulfarrak.cpp | 12 +++---- .../scripts/Kalimdor/zone_darkshore.cpp | 2 +- src/server/scripts/Kalimdor/zone_desolace.cpp | 2 +- .../scripts/Kalimdor/zone_the_barrens.cpp | 4 +-- .../scripts/Kalimdor/zone_winterspring.cpp | 8 ++--- .../ObsidianSanctum/boss_sartharion.cpp | 2 +- .../boss_baltharus_the_warborn.cpp | 2 +- .../RubySanctum/boss_halion.cpp | 2 +- .../boss_argent_challenge.cpp | 4 +-- .../TrialOfTheChampion/boss_black_knight.cpp | 2 +- .../boss_grand_champions.cpp | 2 +- .../instance_trial_of_the_champion.cpp | 2 +- .../boss_anubarak_trial.cpp | 2 +- .../TrialOfTheCrusader/boss_lord_jaraxxus.cpp | 4 +-- .../TrialOfTheCrusader/boss_twin_valkyr.cpp | 4 +-- .../instance_trial_of_the_crusader.cpp | 8 ++--- .../DraktharonKeep/boss_trollgore.cpp | 2 +- .../instance_drak_tharon_keep.cpp | 2 +- .../ForgeOfSouls/boss_bronjahm.cpp | 2 +- .../HallsOfReflection/halls_of_reflection.cpp | 2 +- .../PitOfSaron/boss_krickandick.cpp | 2 +- .../FrozenHalls/PitOfSaron/pit_of_saron.cpp | 6 ++-- .../Gundrak/boss_drakkari_colossus.cpp | 4 +-- .../Northrend/Gundrak/boss_gal_darah.cpp | 2 +- .../boss_blood_prince_council.cpp | 8 ++--- .../boss_deathbringer_saurfang.cpp | 2 +- .../boss_icecrown_gunship_battle.cpp | 6 ++-- .../boss_lady_deathwhisper.cpp | 6 ++-- .../IcecrownCitadel/boss_lord_marrowgar.cpp | 6 ++-- .../boss_professor_putricide.cpp | 8 ++--- .../IcecrownCitadel/boss_rotface.cpp | 6 ++-- .../IcecrownCitadel/boss_sindragosa.cpp | 2 +- .../IcecrownCitadel/boss_the_lich_king.cpp | 32 ++++++++--------- .../boss_valithria_dreamwalker.cpp | 22 ++++++------ .../IcecrownCitadel/icecrown_citadel.cpp | 8 ++--- .../instance_icecrown_citadel.cpp | 4 +-- .../Northrend/Naxxramas/boss_kelthuzad.cpp | 2 +- .../Nexus/EyeOfEternity/boss_malygos.cpp | 10 +++--- .../instance_eye_of_eternity.cpp | 2 +- .../Nexus/Nexus/boss_magus_telestra.cpp | 2 +- .../scripts/Northrend/Nexus/Oculus/oculus.cpp | 6 ++-- .../Ulduar/HallsOfLightning/boss_ionar.cpp | 2 +- .../Ulduar/HallsOfLightning/boss_volkhan.cpp | 2 +- .../Ulduar/HallsOfStone/brann_bronzebeard.cpp | 2 +- .../Ulduar/boss_algalon_the_observer.cpp | 14 ++++---- .../Ulduar/Ulduar/boss_assembly_of_iron.cpp | 6 ++-- .../Northrend/Ulduar/Ulduar/boss_auriaya.cpp | 2 +- .../Ulduar/Ulduar/boss_flame_leviathan.cpp | 8 ++--- .../Northrend/Ulduar/Ulduar/boss_freya.cpp | 8 ++--- .../Ulduar/Ulduar/boss_general_vezax.cpp | 2 +- .../Northrend/Ulduar/Ulduar/boss_hodir.cpp | 6 ++-- .../Northrend/Ulduar/Ulduar/boss_kologarn.cpp | 4 +-- .../Northrend/Ulduar/Ulduar/boss_mimiron.cpp | 18 +++++----- .../Northrend/Ulduar/Ulduar/boss_thorim.cpp | 4 +-- .../Northrend/Ulduar/Ulduar/boss_xt002.cpp | 4 +-- .../Ulduar/Ulduar/boss_yoggsaron.cpp | 2 +- .../UtgardeKeep/UtgardeKeep/boss_keleseth.cpp | 2 +- .../Northrend/VioletHold/boss_ichoron.cpp | 2 +- .../Northrend/VioletHold/boss_xevozz.cpp | 2 +- .../Northrend/VioletHold/boss_zuramat.cpp | 2 +- .../Northrend/VioletHold/violet_hold.cpp | 4 +-- .../scripts/Northrend/zone_borean_tundra.cpp | 2 +- .../Northrend/zone_crystalsong_forest.cpp | 4 +-- .../scripts/Northrend/zone_dragonblight.cpp | 28 +++++++-------- .../scripts/Northrend/zone_grizzly_hills.cpp | 34 +++++++++---------- .../scripts/Northrend/zone_howling_fjord.cpp | 4 +-- .../scripts/Northrend/zone_icecrown.cpp | 20 +++++------ .../scripts/Northrend/zone_storm_peaks.cpp | 6 ++-- src/server/scripts/Northrend/zone_zuldrak.cpp | 6 ++-- .../Outland/BlackTemple/boss_illidan.cpp | 4 +-- .../BlackTemple/boss_reliquary_of_souls.cpp | 2 +- .../BlackTemple/boss_shade_of_akama.cpp | 2 +- .../boss_fathomlord_karathress.cpp | 6 ++-- .../SerpentShrine/boss_lurker_below.cpp | 2 +- .../SerpentShrine/instance_serpent_shrine.cpp | 2 +- .../SlavePens/boss_ahune.cpp | 2 +- .../underbog/boss_hungarfen.cpp | 2 +- .../boss_vazruden_the_herald.cpp | 4 +-- .../MagtheridonsLair/boss_magtheridon.cpp | 2 +- .../Outland/TempestKeep/Eye/boss_kaelthas.cpp | 2 +- .../Outland/zone_blades_edge_mountains.cpp | 8 ++--- src/server/scripts/Outland/zone_nagrand.cpp | 2 +- src/server/scripts/Pet/pet_generic.cpp | 6 ++-- src/server/scripts/Spells/spell_generic.cpp | 2 +- src/server/scripts/Spells/spell_hunter.cpp | 2 +- src/server/scripts/Spells/spell_item.cpp | 6 ++-- src/server/scripts/Spells/spell_quest.cpp | 21 ++++++------ .../scripts/World/boss_emerald_dragons.cpp | 2 +- src/server/scripts/World/go_scripts.cpp | 4 +-- .../scripts/World/npc_stave_of_ancients.cpp | 16 ++++----- 148 files changed, 363 insertions(+), 366 deletions(-) diff --git a/src/server/game/AI/CreatureAI.cpp b/src/server/game/AI/CreatureAI.cpp index 12698c35d..f338e7789 100644 --- a/src/server/game/AI/CreatureAI.cpp +++ b/src/server/game/AI/CreatureAI.cpp @@ -50,9 +50,9 @@ AISpellInfoType* GetAISpellInfo(uint32 i) { return &CreatureAI::AISpellInfo[i]; * @param WorldObject target The target of the speech, in case it has elements such as $n, where the target's name will be referrenced. * @param Milliseconds delay Delay until the creature says the text line. Creatures will talk immediately by default. */ -void CreatureAI::Talk(uint8 id, WorldObject const* target /*= nullptr*/, Milliseconds delay /*= 0s*/) +void CreatureAI::Talk(uint8 id, WorldObject const* target /*= nullptr*/, Milliseconds delay /*= 0ms*/) { - if (delay > Seconds::zero()) + if (delay > 0ms) { ObjectGuid targetGuid; diff --git a/src/server/game/AI/CreatureAI.h b/src/server/game/AI/CreatureAI.h index cadd3b9f4..72686bf6a 100644 --- a/src/server/game/AI/CreatureAI.h +++ b/src/server/game/AI/CreatureAI.h @@ -94,7 +94,7 @@ public: EVADE_REASON_OTHER }; - void Talk(uint8 id, WorldObject const* whisperTarget = nullptr, Milliseconds delay = 0s); + void Talk(uint8 id, WorldObject const* whisperTarget = nullptr, Milliseconds delay = 0ms); void Talk(uint8 id, Milliseconds delay) { Talk(id, nullptr, delay); } WorldObject* GetSummoner() const; diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index 30373f2f6..7a009d0ae 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -68,7 +68,7 @@ void SummonList::DespawnEntry(uint32 entry) } } -void SummonList::DespawnAll(uint32 delay /*= 0*/) +void SummonList::DespawnAll(Milliseconds delay /*= 0ms*/) { while (!storage_.empty()) { @@ -325,13 +325,13 @@ void ScriptedAI::ScheduleTimedEvent(Milliseconds timerMin, Milliseconds timerMax return; } - scheduler.Schedule(timerMin == 0s ? timerMax : timerMin, timerMax, [exec, repeatMin, repeatMax, uniqueId](TaskContext context) + scheduler.Schedule(timerMin == 0ms ? timerMax : timerMin, timerMax, [exec, repeatMin, repeatMax, uniqueId](TaskContext context) { exec(); if (!uniqueId) { - repeatMax > 0s ? context.Repeat(repeatMin, repeatMax) : context.Repeat(repeatMin); + repeatMax > 0ms ? context.Repeat(repeatMin, repeatMax) : context.Repeat(repeatMin); } }); @@ -654,7 +654,7 @@ void BossAI::_JustEngagedWith() ScheduleTasks(); if (callForHelpRange) { - ScheduleTimedEvent(0s, [&] + ScheduleTimedEvent(0ms, [&] { me->CallForHelp(callForHelpRange); }, 2s); diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h index f3d9e11a5..c5c71af9f 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h @@ -88,7 +88,7 @@ public: void Summon(Creature const* summon) { storage_.push_back(summon->GetGUID()); } void Despawn(Creature const* summon) { storage_.remove(summon->GetGUID()); } void DespawnEntry(uint32 entry); - void DespawnAll(uint32 delay = 0); + void DespawnAll(Milliseconds delay = 0ms); bool IsAnyCreatureAlive() const; bool IsAnyCreatureWithEntryAlive(uint32 entry) const; bool IsAnyCreatureInCombat() const; @@ -355,11 +355,11 @@ struct ScriptedAI : public CreatureAI void ClearUniqueTimedEventsDone() { _uniqueTimedEvents.clear(); } // Schedules a timed event using task scheduler. - void ScheduleTimedEvent(Milliseconds timerMin, Milliseconds timerMax, std::function exec, Milliseconds repeatMin, Milliseconds repeatMax = 0s, uint32 uniqueId = 0); - void ScheduleTimedEvent(Milliseconds timerMax, std::function exec, Milliseconds repeatMin, Milliseconds repeatMax = 0s, uint32 uniqueId = 0) { ScheduleTimedEvent(0s, timerMax, exec, repeatMin, repeatMax, uniqueId); }; + void ScheduleTimedEvent(Milliseconds timerMin, Milliseconds timerMax, std::function exec, Milliseconds repeatMin, Milliseconds repeatMax = 0ms, uint32 uniqueId = 0); + void ScheduleTimedEvent(Milliseconds timerMax, std::function exec, Milliseconds repeatMin, Milliseconds repeatMax = 0ms, uint32 uniqueId = 0) { ScheduleTimedEvent(0ms, timerMax, exec, repeatMin, repeatMax, uniqueId); }; // Schedules a timed event using task scheduler that never repeats. Requires an unique non-zero ID. - void ScheduleUniqueTimedEvent(Milliseconds timer, std::function exec, uint32 uniqueId) { ScheduleTimedEvent(0s, timer, exec, 0s, 0s, uniqueId); }; + void ScheduleUniqueTimedEvent(Milliseconds timer, std::function exec, uint32 uniqueId) { ScheduleTimedEvent(0ms, timer, exec, 0ms, 0ms, uniqueId); }; bool HealthBelowPct(uint32 pct) const { return me->HealthBelowPct(pct); } bool HealthAbovePct(uint32 pct) const { return me->HealthAbovePct(pct); } @@ -463,7 +463,7 @@ enum HealthCheckStatus struct HealthCheckEventData { - HealthCheckEventData(uint8 healthPct, std::function exec, uint8 status = HEALTH_CHECK_SCHEDULED, bool allowedWhileCasting = true, Milliseconds Delay = 0s) : _healthPct(healthPct), _exec(exec), _status(status), _allowedWhileCasting(allowedWhileCasting), _delay(Delay) { }; + HealthCheckEventData(uint8 healthPct, std::function exec, uint8 status = HEALTH_CHECK_SCHEDULED, bool allowedWhileCasting = true, Milliseconds Delay = 0ms) : _healthPct(healthPct), _exec(exec), _status(status), _allowedWhileCasting(allowedWhileCasting), _delay(Delay) { }; uint8 _healthPct; std::function _exec; diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index c1dead666..fc130cca4 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -410,7 +410,7 @@ void SmartAI::UpdatePath(const uint32 diff) // Xinef: allow to properly hook out of range despawn action, which in most cases should perform the same operation as dying GetScript()->ProcessEventsFor(SMART_EVENT_DEATH, me); - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); return; } mEscortInvokerCheckTimer = 1000; diff --git a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp index c0a4f5536..89eef49ae 100644 --- a/src/server/game/Battlefield/Zones/BattlefieldWG.cpp +++ b/src/server/game/Battlefield/Zones/BattlefieldWG.cpp @@ -415,7 +415,7 @@ void BattlefieldWG::OnBattleEnd(bool endByTimer) { for (GuidUnorderedSet::const_iterator itr = m_vehicles[team].begin(); itr != m_vehicles[team].end(); ++itr) if (Creature* creature = GetCreature(*itr)) - creature->DespawnOrUnsummon(1); + creature->DespawnOrUnsummon(1ms); m_vehicles[team].clear(); } diff --git a/src/server/game/Entities/Creature/Creature.cpp b/src/server/game/Entities/Creature/Creature.cpp index fe39491c0..451975e1b 100644 --- a/src/server/game/Entities/Creature/Creature.cpp +++ b/src/server/game/Entities/Creature/Creature.cpp @@ -251,7 +251,7 @@ CreatureBaseStats const* CreatureBaseStats::GetBaseStats(uint8 level, uint8 unit bool ForcedDespawnDelayEvent::Execute(uint64 /*e_time*/, uint32 /*p_time*/) { - m_owner.DespawnOrUnsummon(0s, m_respawnTimer); // since we are here, we are not TempSummon as object type cannot change during runtime + m_owner.DespawnOrUnsummon(0ms, m_respawnTimer); // since we are here, we are not TempSummon as object type cannot change during runtime return true; } @@ -2174,12 +2174,12 @@ void Creature::ForcedDespawn(uint32 timeMSToDespawn, Seconds forceRespawnTimer) // Xinef: Set new respawn time, ignore corpse decay time... RemoveCorpse(true); - if (forceRespawnTimer > Seconds::zero()) + if (forceRespawnTimer > 0s) if (GetMap()) GetMap()->ScheduleCreatureRespawn(GetGUID(), forceRespawnTimer); } -void Creature::DespawnOrUnsummon(Milliseconds msTimeToDespawn /*= 0*/, Seconds forcedRespawnTimer) +void Creature::DespawnOrUnsummon(Milliseconds msTimeToDespawn /*= 0ms*/, Seconds forcedRespawnTimer /*= 0s*/) { if (TempSummon* summon = this->ToTempSummon()) summon->UnSummon(msTimeToDespawn.count()); @@ -2204,7 +2204,7 @@ void Creature::DespawnOnEvade(Seconds respawnDelay) return; } - DespawnOrUnsummon(Milliseconds(0), respawnDelay); + DespawnOrUnsummon(0ms, respawnDelay); } void Creature::InitializeReactState() diff --git a/src/server/game/Entities/Creature/Creature.h b/src/server/game/Entities/Creature/Creature.h index 950bc5367..93baba17a 100644 --- a/src/server/game/Entities/Creature/Creature.h +++ b/src/server/game/Entities/Creature/Creature.h @@ -283,8 +283,7 @@ public: void RemoveCorpse(bool setSpawnTime = true, bool skipVisibility = false); - void DespawnOrUnsummon(Milliseconds msTimeToDespawn, Seconds forcedRespawnTimer); - void DespawnOrUnsummon(uint32 msTimeToDespawn = 0) { DespawnOrUnsummon(Milliseconds(msTimeToDespawn), 0s); }; + void DespawnOrUnsummon(Milliseconds msTimeToDespawn = 0ms, Seconds forcedRespawnTimer = 0s); void DespawnOnEvade(Seconds respawnDelay = 20s); [[nodiscard]] time_t const& GetRespawnTime() const { return m_respawnTime; } diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 4bad8703e..08d2abdc5 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -929,7 +929,7 @@ void GameObject::AddUniqueUse(Player* player) m_unique_users.insert(player->GetGUID()); } -void GameObject::DespawnOrUnsummon(Milliseconds delay, Seconds forceRespawnTime) +void GameObject::DespawnOrUnsummon(Milliseconds delay /*= 0ms*/, Seconds forceRespawnTime /*= 0s*/) { if (delay > 0ms) { diff --git a/src/server/game/Entities/Pet/Pet.cpp b/src/server/game/Entities/Pet/Pet.cpp index dc3316226..f730f99e2 100644 --- a/src/server/game/Entities/Pet/Pet.cpp +++ b/src/server/game/Entities/Pet/Pet.cpp @@ -692,7 +692,7 @@ void Pet::Update(uint32 diff) } } - if (m_duration > 0s) + if (m_duration > 0ms) { if (m_duration > _diff) m_duration -= _diff; @@ -708,7 +708,7 @@ void Pet::Update(uint32 diff) if (getPowerType() == POWER_FOCUS) { m_petRegenTimer -= _diff; - if (m_petRegenTimer <= 0s) + if (m_petRegenTimer <= 0ms) { m_petRegenTimer += PET_FOCUS_REGEN_INTERVAL; Regenerate(POWER_FOCUS); @@ -1026,7 +1026,7 @@ bool Guardian::InitStatsForLevel(uint8 petlevel) Unit* owner = GetOwner(); if (!owner) // just to be sure, asynchronous now { - DespawnOrUnsummon(1000); + DespawnOrUnsummon(1s); return false; } diff --git a/src/server/game/Entities/Pet/Pet.h b/src/server/game/Entities/Pet/Pet.h index e737bab11..9190202d4 100644 --- a/src/server/game/Entities/Pet/Pet.h +++ b/src/server/game/Entities/Pet/Pet.h @@ -52,7 +52,7 @@ public: PetType getPetType() const { return m_petType; } void setPetType(PetType type) { m_petType = type; } bool isControlled() const { return getPetType() == SUMMON_PET || getPetType() == HUNTER_PET; } - bool isTemporarySummoned() const { return m_duration > 0s; } + bool isTemporarySummoned() const { return m_duration > 0ms; } bool IsPermanentPetFor(Player* owner) const; // pet have tab in character windows and set UNIT_FIELD_PETNUMBER diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index a8cb733de..6823182dd 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -9014,7 +9014,7 @@ Pet* Player::GetPet() const return nullptr; } -Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetType petType, Milliseconds duration /*= 0s*/, uint32 healthPct /*= 0*/) +Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetType petType, Milliseconds duration /*= 0ms*/, uint32 healthPct /*= 0*/) { PetStable& petStable = GetOrInitPetStable(); @@ -9035,7 +9035,7 @@ Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetTy ++itr; } - if (duration > 0s) + if (duration > 0ms) pet->SetDuration(duration); // Generate a new name for the newly summoned ghoul @@ -9129,7 +9129,7 @@ Pet* Player::SummonPet(uint32 entry, float x, float y, float z, float ang, PetTy } } - if (duration > 0s) + if (duration > 0ms) pet->SetDuration(duration); if (NeedSendSpectatorData() && pet->GetCreatureTemplate()->family) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 1e57a5649..ef7ca602d 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1210,7 +1210,7 @@ public: [[nodiscard]] PetStable const* GetPetStable() const { return m_petStable.get(); } [[nodiscard]] Pet* GetPet() const; - Pet* SummonPet(uint32 entry, float x, float y, float z, float ang, PetType petType, Milliseconds duration = 0s, uint32 healthPct = 0); + Pet* SummonPet(uint32 entry, float x, float y, float z, float ang, PetType petType, Milliseconds duration = 0ms, uint32 healthPct = 0); void RemovePet(Pet* pet, PetSaveMode mode, bool returnreagent = false); bool CanPetResurrect(); bool IsExistPet(); diff --git a/src/server/game/Entities/Unit/Unit.cpp b/src/server/game/Entities/Unit/Unit.cpp index 1fbbf0d9c..0495dd9e8 100644 --- a/src/server/game/Entities/Unit/Unit.cpp +++ b/src/server/game/Entities/Unit/Unit.cpp @@ -19681,7 +19681,7 @@ void Unit::_ExitVehicle(Position const* exitPosition) else if (vehicleBase->IsCreature()) { vehicle->Uninstall(); - vehicleBase->m_Events.AddEvent(new VehicleDespawnEvent(*vehicleBase, 2000), vehicleBase->m_Events.CalculateTime(2000)); + vehicleBase->m_Events.AddEventAtOffset(new VehicleDespawnEvent(*vehicleBase, 2s), 2s); } // xinef: ugly hack, no appripriate hook later to cast spell diff --git a/src/server/game/Entities/Vehicle/Vehicle.h b/src/server/game/Entities/Vehicle/Vehicle.h index 3d5115e7f..efc2d7aac 100644 --- a/src/server/game/Entities/Vehicle/Vehicle.h +++ b/src/server/game/Entities/Vehicle/Vehicle.h @@ -100,12 +100,12 @@ private: class VehicleDespawnEvent : public BasicEvent { public: - VehicleDespawnEvent(Unit& self, uint32 duration) : _self(self), _duration(duration) { } + VehicleDespawnEvent(Unit& self, Milliseconds duration) : _self(self), _duration(duration) { } bool Execute(uint64 e_time, uint32 p_time) override; protected: Unit& _self; - uint32 _duration; + Milliseconds _duration; }; #endif diff --git a/src/server/game/Scripting/MapScripts.cpp b/src/server/game/Scripting/MapScripts.cpp index e7389b4d1..f09223b75 100644 --- a/src/server/game/Scripting/MapScripts.cpp +++ b/src/server/game/Scripting/MapScripts.cpp @@ -757,7 +757,7 @@ void Map::ScriptsProcess() case SCRIPT_COMMAND_DESPAWN_SELF: // Target or source must be Creature. if (Creature* cSource = _GetScriptCreatureSourceOrTarget(source, target, step.script, true)) - cSource->DespawnOrUnsummon(step.script->DespawnSelf.DespawnDelay); + cSource->DespawnOrUnsummon(Milliseconds(step.script->DespawnSelf.DespawnDelay)); break; case SCRIPT_COMMAND_LOAD_PATH: diff --git a/src/server/game/Spells/SpellEffects.cpp b/src/server/game/Spells/SpellEffects.cpp index a95f99367..7c0cd6c45 100644 --- a/src/server/game/Spells/SpellEffects.cpp +++ b/src/server/game/Spells/SpellEffects.cpp @@ -5213,7 +5213,7 @@ void Spell::EffectResurrectPet(SpellEffIndex /*effIndex*/) { // Position passed to SummonPet is irrelevant with current implementation, // pet will be relocated without using these coords in Pet::LoadPetFromDB - player->SummonPet(0, 0.0f, 0.0f, 0.0f, 0.0f, SUMMON_PET, 0s, damage); + player->SummonPet(0, 0.0f, 0.0f, 0.0f, 0.0f, SUMMON_PET, 0ms, damage); return; } diff --git a/src/server/game/Time/UpdateTime.cpp b/src/server/game/Time/UpdateTime.cpp index 3b584a615..cebb105df 100644 --- a/src/server/game/Time/UpdateTime.cpp +++ b/src/server/game/Time/UpdateTime.cpp @@ -162,7 +162,7 @@ void WorldUpdateTime::SetRecordUpdateTimeInterval(Milliseconds t) void WorldUpdateTime::RecordUpdateTime(Milliseconds gameTimeMs, uint32 diff, uint32 sessionCount) { - if (_recordUpdateTimeInverval > 0s && diff > _recordUpdateTimeMin.count()) + if (_recordUpdateTimeInverval > 0ms && diff > _recordUpdateTimeMin.count()) { if (GetMSTimeDiff(_lastRecordTime, gameTimeMs) > _recordUpdateTimeInverval) { diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp index 54809c6e5..8c5af306e 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/instance_blackrock_spire.cpp @@ -1046,7 +1046,7 @@ public: break; case EVENT_VAEL_3_DESPAWN: DoCast(me, SPELL_VAELASTRASZ_SPAWN); - me->DespawnOrUnsummon(1500); + me->DespawnOrUnsummon(1500ms); break; default: break; diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp index 614976c5a..712f9c5a2 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackwingLair/boss_nefarian.cpp @@ -435,7 +435,7 @@ public: break; case EVENT_SUCCESS_2: DoCast(me, SPELL_VAELASTRASZZ_SPAWN); - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); break; case EVENT_PATH_3: me->GetMotionMaster()->MovePath(NEFARIUS_PATH_3, false); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.cpp index 9d1d0033e..73afa5f04 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/molten_core.cpp @@ -199,7 +199,7 @@ class spell_mc_play_dead_aura : public AuraScript else { Unit::Kill(creatureTarget, creatureTarget); - creatureTarget->DespawnOrUnsummon(14000); + creatureTarget->DespawnOrUnsummon(14s); } } diff --git a/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp b/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp index b1afd209a..bfc418d00 100644 --- a/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp +++ b/src/server/scripts/EasternKingdoms/Gnomeregan/instance_gnomeregan.cpp @@ -146,7 +146,7 @@ public: { if (Player* player = ObjectAccessor::GetPlayer(*me, playerGUID)) player->GroupEventHappens(QUEST_A_FINE_MESS, me); - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); } } } diff --git a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp index 3b5092fab..fa32df818 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/boss_terestian_illhoof.cpp @@ -88,7 +88,7 @@ struct npc_kilrek : public ScriptedAI DoCast(Terestian, SPELL_BROKEN_PACT, true); } } - me->DespawnOrUnsummon(15000); + me->DespawnOrUnsummon(15s); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp index cf45992a8..955b26e4c 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp @@ -523,9 +523,9 @@ public: } } - me->DespawnOrUnsummon(100); + me->DespawnOrUnsummon(100ms); if (Creature* arca = ObjectAccessor::GetCreature((*me), ArcanagosGUID)) - arca->DespawnOrUnsummon(100); + arca->DespawnOrUnsummon(100ms); return 5000; default: diff --git a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp index 403782eed..0e04c702c 100644 --- a/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp +++ b/src/server/scripts/EasternKingdoms/MagistersTerrace/boss_vexallus.cpp @@ -141,7 +141,7 @@ struct boss_vexallus : public BossAI void SummonedCreatureDies(Creature* summon, Unit* killer) override { summons.Despawn(summon); - summon->DespawnOrUnsummon(1); + summon->DespawnOrUnsummon(1ms); if (killer) killer->CastSpell(killer, SPELL_ENERGY_FEEDBACK, true, 0, 0, summon->GetGUID()); } diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index c8244d493..13ebb5664 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -230,7 +230,7 @@ public: me->RemoveAllAuras(); me->CastSpell(attacker, SPELL_DUEL_VICTORY, true); me->RestoreFaction(); - me->DespawnOrUnsummon(10000); + me->DespawnOrUnsummon(10s); } } } @@ -407,7 +407,7 @@ public: { if (type == POINT_MOTION_TYPE && point == 1) { - me->DespawnOrUnsummon(1500); + me->DespawnOrUnsummon(1500ms); me->CastSpell(me, SPELL_GHOUL_SUBMERGE, true); } } diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp index d77e5756e..54a367f8f 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp @@ -692,7 +692,7 @@ public: orbaz->SetReactState(REACT_PASSIVE); orbaz->AI()->Talk(EMOTE_LIGHT_OF_DAWN04); orbaz->GetMotionMaster()->MovePoint(2, LightOfDawnPos[2], true, true); - orbaz->DespawnOrUnsummon(7000); + orbaz->DespawnOrUnsummon(7s); } for (SummonList::const_iterator itr = summons.begin(); itr != summons.end(); ++itr) @@ -839,7 +839,7 @@ public: alex->AI()->Talk(SAY_LIGHT_OF_DAWN41); if (Creature* darion = GetEntryFromSummons(NPC_DARION_MOGRAINE)) - darion->DespawnOrUnsummon(3000); + darion->DespawnOrUnsummon(3s); break; case EVENT_OUTRO_SCENE_19: if (Creature* alex = GetEntryFromSummons(NPC_HIGHLORD_ALEXANDROS_MOGRAINE)) @@ -886,7 +886,7 @@ public: case EVENT_OUTRO_SCENE_23: if (Creature* alex = GetEntryFromSummons(NPC_HIGHLORD_ALEXANDROS_MOGRAINE)) { - alex->DespawnOrUnsummon(5000); + alex->DespawnOrUnsummon(5s); alex->SetVisible(false); } break; @@ -1055,7 +1055,7 @@ public: if (Creature* lk = GetEntryFromSummons(NPC_THE_LICH_KING)) { lk->CastSpell(lk, SPELL_EXIT_TELEPORT_VISUAL, true); - lk->DespawnOrUnsummon(1500); + lk->DespawnOrUnsummon(1500ms); } if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING)) @@ -1145,7 +1145,7 @@ public: } case EVENT_OUTRO_SCENE_61: summons.DespawnAll(); - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); events.Reset(); return; } diff --git a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp index b58ad2de3..4634ead0e 100644 --- a/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp +++ b/src/server/scripts/EasternKingdoms/Scholomance/boss_kirtonos_the_herald.cpp @@ -103,7 +103,7 @@ public: void EnterEvadeMode(EvadeReason /*why*/) override { instance->SetData(DATA_KIRTONOS_THE_HERALD, FAIL); - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } void MovementInform(uint32 type, uint32 id) override diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp index b41f44548..bcfc6b6b8 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp @@ -360,7 +360,7 @@ struct npc_madrigosa : public NullCreatureAI break; case EVENT_SPAWN_FELMYST: DoCastAOE(SPELL_SUMMON_FELBLAZE, true); - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); break; } } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp index c9b0ad3f1..241ec277a 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp @@ -425,7 +425,7 @@ struct npc_demonic_vapor_trail : public NullCreatureAI void Reset() override { me->CastSpell(me, SPELL_DEMONIC_VAPOR_TRAIL_PERIODIC, true); - me->DespawnOrUnsummon(20000); + me->DespawnOrUnsummon(20s); } void SpellHitTarget(Unit* /*unit*/, SpellInfo const* spellInfo) override diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp index 40352f301..d331a9658 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp @@ -387,7 +387,7 @@ struct boss_kiljaeden : public BossAI { anveena->RemoveAllAuras(); anveena->CastSpell(anveena, SPELL_SACRIFICE_OF_ANVEENA, true); - anveena->DespawnOrUnsummon(1500); + anveena->DespawnOrUnsummon(1500ms); DoCastSelf(SPELL_CUSTOM_08_STATE, true); me->SetUnitFlag(UNIT_FLAG_PACIFIED); scheduler.CancelAll(); @@ -555,7 +555,7 @@ struct boss_kiljaeden : public BossAI summon->CastSpell(summon, SPELL_ARMAGEDDON_VISUAL, true); summon->SetPosition(summon->GetPositionX(), summon->GetPositionY(), summon->GetPositionZ() + 20.0f, 0.0f); summon->m_Events.AddEvent(new CastArmageddon(summon), summon->m_Events.CalculateTime(6000)); - summon->DespawnOrUnsummon(urand(8000, 10000)); + summon->DespawnOrUnsummon(randtime(8s, 10s)); } } @@ -919,7 +919,7 @@ struct npc_kalecgos_kj : public NullCreatureAI if (Creature* velen = summons.GetCreatureWithEntry(NPC_PROPHET_VELEN)) { velen->GetMotionMaster()->MovePoint(0, 1739.38f, 643.79f, 28.06f); - velen->DespawnOrUnsummon(5000); + velen->DespawnOrUnsummon(5s); } events.ScheduleEvent(eventId + 1, 3s); break; @@ -929,7 +929,7 @@ struct npc_kalecgos_kj : public NullCreatureAI if (summon->GetEntry() == NPC_SHATTERED_SUN_SOLDIER) { summon->GetMotionMaster()->MovePoint(0, 1739.38f, 643.79f, 28.06f); - summon->DespawnOrUnsummon(summon->GetExactDist2d(1734.96f, 642.43f) * 100); + summon->DespawnOrUnsummon(Milliseconds(uint32(summon->GetExactDist2d(1734.96f, 642.43f) * 100))); } events.ScheduleEvent(eventId + 1, 7s); break; diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp index 863954f0f..d2cc53486 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_muru.cpp @@ -274,7 +274,7 @@ struct npc_singularity : public NullCreatureAI void Reset() override { - me->DespawnOrUnsummon(18000); + me->DespawnOrUnsummon(18s); me->m_Events.AddEventAtOffset([&] { DoCastSelf(SPELL_BLACK_HOLE_SUMMON_VISUAL, true); diff --git a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp index b33a057db..7add91965 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/boss_zuljin.cpp @@ -285,10 +285,7 @@ struct boss_zuljin : public BossAI instance->SetBossState(DATA_ZULJIN, DONE); Talk(SAY_DEATH); summons.DespawnEntry(CREATURE_COLUMN_OF_FIRE); - - me->m_Events.AddEventAtOffset( [this] { - summons.DespawnAll(); - }, 3s); + summons.DespawnAll(3s); } void SpawnAdds() diff --git a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp index 39fca29ff..4b28c85fe 100644 --- a/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp +++ b/src/server/scripts/EasternKingdoms/ZulAman/zulaman.cpp @@ -78,7 +78,7 @@ struct npc_forest_frog : public ScriptedAI void MovementInform(uint32 type, uint32 data) override { if (type == POINT_MOTION_TYPE && data == POINT_DESPAWN) - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp index 7046c02a2..4b90e0ea2 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_arlokk.cpp @@ -355,7 +355,7 @@ public: if (arlokk->IsAlive()) arlokk->GetAI()->SetData(_sideData, 0); } - me->DespawnOrUnsummon(4000); + me->DespawnOrUnsummon(4s); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp index ad623291f..7ba24407f 100644 --- a/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp +++ b/src/server/scripts/EasternKingdoms/ZulGurub/boss_mandokir.cpp @@ -641,7 +641,7 @@ public: { DoCast(target, SPELL_REVIVE); } - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); } } diff --git a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp index d7d06ac3f..14a1aa6b7 100644 --- a/src/server/scripts/EasternKingdoms/zone_duskwood.cpp +++ b/src/server/scripts/EasternKingdoms/zone_duskwood.cpp @@ -64,7 +64,7 @@ struct boss_twilight_corrupter : public ScriptedAI { if (creature->IsAlive() && me->GetGUID() != creature->GetGUID()) { - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); break; } } diff --git a/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp b/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp index 6f9246e3f..5357b8e14 100644 --- a/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_eastern_plaguelands.cpp @@ -262,7 +262,7 @@ public: if (Unit* creature = summon->GetSummonerUnit()) creature->GetAI()->DoAction(1); - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } void JustDied(Unit*) override diff --git a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp index 246a1246f..c3d7edd07 100644 --- a/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp +++ b/src/server/scripts/EasternKingdoms/zone_isle_of_queldanas.cpp @@ -586,7 +586,7 @@ public: case 13: me->setActive(false); if (Creature* c = me->FindNearestCreature(NPC_SUNWELL_VISUAL_BUNNY, 60.0f, true)) - c->DespawnOrUnsummon(1); + c->DespawnOrUnsummon(1ms); if (GameObject* go = me->FindNearestGameObject(GO_QUEL_DELAR, 60.0f)) go->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE); me->SetWalk(true); diff --git a/src/server/scripts/EasternKingdoms/zone_undercity.cpp b/src/server/scripts/EasternKingdoms/zone_undercity.cpp index efd608da0..6931fa59c 100644 --- a/src/server/scripts/EasternKingdoms/zone_undercity.cpp +++ b/src/server/scripts/EasternKingdoms/zone_undercity.cpp @@ -3054,10 +3054,10 @@ public: if (Creature* valimathras = ObjectAccessor::GetCreature(*me, ValimathrasGUID)) { valimathras->GetMotionMaster()->MovePoint(0, 1804.559f, 235.504f, 62.753f); - valimathras->DespawnOrUnsummon(3 * IN_MILLISECONDS); + valimathras->DespawnOrUnsummon(3s); } if (Creature* valimathrasportal = ObjectAccessor::GetCreature(*me, ValimathrasPortalGUID)) - valimathrasportal->DespawnOrUnsummon(6 * IN_MILLISECONDS); + valimathrasportal->DespawnOrUnsummon(6s); JumpToNextStep(1 * IN_MILLISECONDS); break; case 26: @@ -3332,10 +3332,10 @@ public: if (Creature* valimathras = ObjectAccessor::GetCreature(*me, ValimathrasGUID)) { valimathras->GetMotionMaster()->MovePoint(0, 1596.642f, 429.811f, -46.3429f); - valimathras->DespawnOrUnsummon(3 * IN_MILLISECONDS); + valimathras->DespawnOrUnsummon(3s); } if (Creature* valimathrasportal = ObjectAccessor::GetCreature(*me, ValimathrasPortalGUID)) - valimathrasportal->DespawnOrUnsummon(3 * IN_MILLISECONDS); + valimathrasportal->DespawnOrUnsummon(3s); JumpToNextStep(2 * IN_MILLISECONDS); break; // KHANOK - Trashspawn @@ -3865,8 +3865,8 @@ public: me->GetCreatureListWithEntryInGrid(HelperList, NPC_OVERLORD_SAURFANG, 100.0f); if (!HelperList.empty()) for (std::list::iterator itr = HelperList.begin(); itr != HelperList.end(); itr++) - (*itr)->DespawnOrUnsummon(120 * IN_MILLISECONDS); - me->DespawnOrUnsummon(120 * IN_MILLISECONDS); + (*itr)->DespawnOrUnsummon(120s); + me->DespawnOrUnsummon(120s); bStepping = false; JumpToNextStep(0 * IN_MILLISECONDS); break; diff --git a/src/server/scripts/Events/brewfest.cpp b/src/server/scripts/Events/brewfest.cpp index 84138e5d3..c743ed245 100644 --- a/src/server/scripts/Events/brewfest.cpp +++ b/src/server/scripts/Events/brewfest.cpp @@ -603,7 +603,7 @@ struct npc_dark_iron_attack_mole_machine : public ScriptedAI { me->SummonCreature(NPC_DARK_IRON_GUZZLER, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0.0f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 6000); summonTimer = 0; - me->DespawnOrUnsummon(3000); + me->DespawnOrUnsummon(3s); } } } diff --git a/src/server/scripts/Events/hallows_end.cpp b/src/server/scripts/Events/hallows_end.cpp index a7a2d2b64..5bda46f13 100644 --- a/src/server/scripts/Events/hallows_end.cpp +++ b/src/server/scripts/Events/hallows_end.cpp @@ -697,7 +697,7 @@ struct npc_hallows_end_soh : public ScriptedAI void EnterEvadeMode(EvadeReason /* why */) override { - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } uint32 GetData(uint32 /*type*/) const override @@ -848,7 +848,7 @@ struct npc_hallows_end_soh : public ScriptedAI if (Unit* c = ObjectAccessor::GetUnit(*me, guid)) c->RemoveAllAuras(); - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } else { @@ -1029,7 +1029,7 @@ struct boss_headless_horseman : public ScriptedAI std::list unitList; me->GetCreaturesWithEntryInRange(unitList, 100.0f, NPC_PUMPKIN_FIEND); for (std::list::iterator itr = unitList.begin(); itr != unitList.end(); ++itr) - (*itr)->ToCreature()->DespawnOrUnsummon(500); + (*itr)->ToCreature()->DespawnOrUnsummon(500ms); Map::PlayerList const& players = me->GetMap()->GetPlayers(); if (!players.IsEmpty() && players.begin()->GetSource() && players.begin()->GetSource()->GetGroup()) diff --git a/src/server/scripts/Events/love_in_air.cpp b/src/server/scripts/Events/love_in_air.cpp index 6c5a2aedb..6a22e8e83 100644 --- a/src/server/scripts/Events/love_in_air.cpp +++ b/src/server/scripts/Events/love_in_air.cpp @@ -247,7 +247,7 @@ struct npc_love_in_air_snivel_real : public ScriptedAI if (Unit* owner = me->ToTempSummon()->GetSummonerUnit()) me->CastSpell(owner, SPELL_SNIVEL_GUN, true); - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); } } } diff --git a/src/server/scripts/Events/winter_veil.cpp b/src/server/scripts/Events/winter_veil.cpp index 6a66ed29e..a1a53a042 100644 --- a/src/server/scripts/Events/winter_veil.cpp +++ b/src/server/scripts/Events/winter_veil.cpp @@ -192,7 +192,7 @@ class spell_winter_veil_racer_slam_hit : public SpellScript return; target->CastSpell(target->GetPositionX() + irand(-10, 10), target->GetPositionY() + irand(-10, 10), target->GetPositionZ(), SPELL_RACER_DEATH_VISUAL, true); - target->DespawnOrUnsummon(3000); + target->DespawnOrUnsummon(3s); target->CastSpell(target, SPELL_RACER_FLAMES, true); caster->CastSpell(caster, SPELL_RACER_KILL_COUNTER, true); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite.cpp index d5983c7ea..854b43b38 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_infinite.cpp @@ -67,7 +67,7 @@ public: summons.DespawnAll(); if (InstanceScript* pInstance = me->GetInstanceScript()) if (pInstance->GetData(DATA_GUARDIANTIME_EVENT) == 0) - me->DespawnOrUnsummon(500); + me->DespawnOrUnsummon(500ms); me->SummonCreature(NPC_TIME_RIFT, 2337.6f, 1270.0f, 132.95f, 2.79f); me->SummonCreature(NPC_GUARDIAN_OF_TIME, 2319.3f, 1267.7f, 132.8f, 1.0f); @@ -93,11 +93,11 @@ public: { if (cr->GetEntry() == NPC_TIME_RIFT) { - cr->DespawnOrUnsummon(1000); + cr->DespawnOrUnsummon(1s); } else { - cr->DespawnOrUnsummon(5000); + cr->DespawnOrUnsummon(5s); cr->RemoveAllAuras(); cr->AI()->Talk(SAY_THANKS); } @@ -120,7 +120,7 @@ public: { Talk(SAY_FAIL); summons.DespawnAll(); - me->DespawnOrUnsummon(500); + me->DespawnOrUnsummon(500ms); } } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp index bf7f18c2a..bc066fd1f 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/boss_mal_ganis.cpp @@ -80,7 +80,7 @@ public: if (finished) { Talk(SAY_OUTRO); - me->DespawnOrUnsummon(20000); + me->DespawnOrUnsummon(20s); } } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp index b26ec632a..f3a825a37 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp @@ -547,7 +547,7 @@ public: if (Creature* stalker = me->SummonCreature(NPC_INVIS_TARGET, 2026.469f, 1287.088f, 143.596f, 1.37f, TEMPSUMMON_TIMED_DESPAWN, 14000)) { me->SetFacingToObject(stalker); - stalker->DespawnOrUnsummon(500); + stalker->DespawnOrUnsummon(500ms); } break; // Reached first cityman @@ -861,7 +861,7 @@ public: if (Creature* stalker = me->SummonCreature(NPC_INVIS_TARGET, 2081.447f, 1287.770f, 141.3241f, 1.37f, TEMPSUMMON_TIMED_DESPAWN, 10000)) { me->SetFacingToObject(stalker); - stalker->DespawnOrUnsummon(500); + stalker->DespawnOrUnsummon(500ms); } Talk(SAY_PHASE205); ScheduleNextEvent(currentEvent, 4s); @@ -1343,7 +1343,7 @@ void npc_arthas::npc_arthasAI::SpawnTimeRift() if (Creature* cr = me->SummonCreature(/*entry*/(uint32)RiftAndSpawnsLocations[timeRiftId][i][0], RiftAndSpawnsLocations[timeRiftId][0][1], RiftAndSpawnsLocations[timeRiftId][0][2], RiftAndSpawnsLocations[timeRiftId][0][3], RiftAndSpawnsLocations[timeRiftId][0][4])) { if (cr->GetEntry() == NPC_TIME_RIFT) - cr->DespawnOrUnsummon(10000); + cr->DespawnOrUnsummon(10s); else // x, y, z (0 is entry) { // first infinite @@ -1538,7 +1538,7 @@ public: if (me->GetDistance(2400, 1200, 135) > 20.0f && data >= COS_PROGRESS_FINISHED_CITY_INTRO) { if (data >= COS_PROGRESS_KILLED_SALRAMM) - me->DespawnOrUnsummon(500); + me->DespawnOrUnsummon(500ms); else InfectMe(3000); } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp index 961ec2c7b..dbb18cf28 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/instance_culling_of_stratholme.cpp @@ -307,7 +307,7 @@ public: if (Creature* cr = instance->SummonCreature(NPC_CHROMIE_MIDDLE, pos)) { cr->SetVisible(false); - cr->DespawnOrUnsummon(1000); + cr->DespawnOrUnsummon(1s); sCreatureTextMgr->SendChat(cr, textId, player, CHAT_MSG_ADDON, LANG_ADDON, TEXT_RANGE_MAP); } } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp index 271cb6c22..9cca30b58 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp @@ -382,7 +382,7 @@ public: if (Creature* horse = me->FindNearestCreature(NPC_SKARLOC_MOUNT, 10.0f)) { horse->GetMotionMaster()->MovePoint(0, 2501.15f, 572.14f, 54.13f); - horse->DespawnOrUnsummon(30 * IN_MILLISECONDS); + horse->DespawnOrUnsummon(30s); } Talk(SAY_EMOTE_HORSE); SetEscortPaused(true); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp index 21f51ca78..bde93d514 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/instance_the_black_morass.cpp @@ -143,7 +143,7 @@ public: case NPC_INFINITE_EXECUTIONER_2: case NPC_INFINITE_VANQUISHER: case NPC_INFINITE_VANQUISHER_2: - creature->DespawnOrUnsummon(1); + creature->DespawnOrUnsummon(1ms); break; default: break; diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp index 0f08fb9be..72895bb9f 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp @@ -109,7 +109,7 @@ struct npc_medivh_bm : public ScriptedAI { if (summon->GetEntry() == NPC_DP_CRYSTAL_STALKER) { - summon->DespawnOrUnsummon(25000); + summon->DespawnOrUnsummon(25s); summon->CastSpell(summon, RAND(SPELL_BANISH_PURPLE, SPELL_BANISH_GREEN), true); summon->GetMotionMaster()->MoveSplinePath(&_airArray); } @@ -199,19 +199,19 @@ struct npc_medivh_bm : public ScriptedAI events.ScheduleEvent(EVENT_OUTRO_3, 2s); break; case EVENT_OUTRO_3: - SummonOrcs(-2046.158f, -3.0f, 37000, 30000, true); + SummonOrcs(-2046.158f, -3.0f, 37s, 30000, true); events.ScheduleEvent(EVENT_OUTRO_4, 2s); break; case EVENT_OUTRO_4: - SummonOrcs(-2055.97f, -2.0f, 33000, 28000, false); + SummonOrcs(-2055.97f, -2.0f, 33s, 28000, false); events.ScheduleEvent(EVENT_OUTRO_5, 2s); break; case EVENT_OUTRO_5: - SummonOrcs(-2064.0f, -1.5f, 29000, 26000, false); + SummonOrcs(-2064.0f, -1.5f, 29s, 26000, false); events.ScheduleEvent(EVENT_OUTRO_6, 2s); break; case EVENT_OUTRO_6: - SummonOrcs(-2074.35f, -0.1f, 26000, 24000, false); + SummonOrcs(-2074.35f, -0.1f, 26s, 24000, false); events.ScheduleEvent(EVENT_OUTRO_7, 7s); break; case EVENT_OUTRO_7: @@ -228,7 +228,7 @@ struct npc_medivh_bm : public ScriptedAI } } - void SummonOrcs(float x, float y, uint32 duration, uint32 homeTime, bool first) + void SummonOrcs(float x, float y, Milliseconds duration, uint32 homeTime, bool first) { for (uint8 i = 0; i < 6; ++i) { @@ -236,7 +236,7 @@ struct npc_medivh_bm : public ScriptedAI { cr->GetMotionMaster()->MovePoint(0, (first && i == 3) ? x + 2.0f : x, cr->GetPositionY() + y, cr->GetMapHeight(x, cr->GetPositionY() + y, cr->GetPositionZ(), true)); cr->m_Events.AddEvent(new NpcRunToHome(*cr), cr->m_Events.CalculateTime(homeTime + urand(0, 2000))); - cr->DespawnOrUnsummon(duration + urand(0, 2000)); + cr->DespawnOrUnsummon(duration + randtime(0ms, 2s)); } } } @@ -355,7 +355,7 @@ struct npc_time_rift : public NullCreatureAI { if (creature->GetGUID() == _riftKeeperGUID) { - me->DespawnOrUnsummon(0); + me->DespawnOrUnsummon(0ms); } } diff --git a/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp b/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp index 398bc8764..bd741c248 100644 --- a/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp +++ b/src/server/scripts/Kalimdor/DireMaul/instance_dire_maul.cpp @@ -58,7 +58,7 @@ public: case NPC_HIGHBORNE_SUMMONER: if (_pylonsState == ALL_PYLONS_OFF) { - creature->DespawnOrUnsummon(5000); + creature->DespawnOrUnsummon(5s); } else { diff --git a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp index 2dfebf46b..0bd0febc7 100644 --- a/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp +++ b/src/server/scripts/Kalimdor/RazorfenDowns/razorfen_downs.cpp @@ -115,7 +115,7 @@ public: void JustDied(Unit* /*killer*/) override { - me->DespawnOrUnsummon(5000); + me->DespawnOrUnsummon(5s); } void sQuestAccept(Player* /*player*/, Quest const* quest) override diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp index fa7c56048..9c5669d50 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_buru.cpp @@ -231,7 +231,7 @@ struct npc_buru_egg : public ScriptedAI } } - me->DespawnOrUnsummon(5000); + me->DespawnOrUnsummon(5s); } void UpdateAI(uint32 /*diff*/) override { } diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp index f7ec9c838..2d97ba3da 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_bug_trio.cpp @@ -310,7 +310,7 @@ public: me->RemoveDynamicFlag(UNIT_DYNFLAG_LOOTABLE); DoFinalSpell(); Talk(EMOTE_DEVOURED); - me->DespawnOrUnsummon(3000); + me->DespawnOrUnsummon(3s); return; } diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp index 43d741174..40019ccc0 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_ouro.cpp @@ -170,7 +170,7 @@ struct boss_ouro : public BossAI } } - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); } void CastGroundRupture() @@ -273,7 +273,7 @@ struct boss_ouro : public BossAI if (me->GetThreatMgr().GetThreatList().empty()) { DoCastSelf(SPELL_OURO_SUBMERGE_VISUAL); - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); instance->SetBossState(DATA_OURO, FAIL); if (GameObject* base = me->FindNearestGameObject(GO_SANDWORM_BASE, 200.f)) base->DespawnOrUnsummon(); @@ -334,7 +334,7 @@ struct npc_dirt_mound : ScriptedAI scheduler.Schedule(30s, [this](TaskContext /*context*/) { DoCastSelf(SPELL_SUMMON_SCARABS, true); - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); }) .Schedule(100ms, [this](TaskContext context) { diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp index eab24db58..cdad23d67 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/boss_twinemperors.cpp @@ -418,7 +418,7 @@ public: if (Creature* mastersEye = instance->GetCreature(DATA_MASTERS_EYE)) { mastersEye->AI()->Talk(EMOTE_MASTERS_EYE_AT, player); - mastersEye->DespawnOrUnsummon(11000); + mastersEye->DespawnOrUnsummon(11s); mastersEye->m_Events.AddEventAtOffset([mastersEye, player]() { mastersEye->SetFacingToObject(player); diff --git a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.cpp b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.cpp index 2d7cfb40b..ca26d56cc 100644 --- a/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.cpp +++ b/src/server/scripts/Kalimdor/TempleOfAhnQiraj/temple_of_ahnqiraj.cpp @@ -474,7 +474,7 @@ struct npc_ahnqiraji_critter : public ScriptedAI { if (me->GetEntry() == NPC_QIRAJI_SCORPION) { - me->DespawnOrUnsummon(5 * IN_MILLISECONDS); + me->DespawnOrUnsummon(5s); } } diff --git a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp index bd6543ffb..f24a4592b 100644 --- a/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp +++ b/src/server/scripts/Kalimdor/ZulFarrak/zulfarrak.cpp @@ -176,25 +176,25 @@ public: if (Creature* weegli = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_WEEGLI))) { weegli->CastSpell(weegli, SPELL_BLYS_BAND_ESCAPE); - weegli->DespawnOrUnsummon(10000); + weegli->DespawnOrUnsummon(10s); } if (Creature* raven = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_RAVEN))) { raven->CastSpell(raven, SPELL_BLYS_BAND_ESCAPE); - raven->DespawnOrUnsummon(10000); + raven->DespawnOrUnsummon(10s); } if (Creature* oro = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_ORO))) { oro->CastSpell(oro, SPELL_BLYS_BAND_ESCAPE); - oro->DespawnOrUnsummon(10000); + oro->DespawnOrUnsummon(10s); } if (Creature* murta = ObjectAccessor::GetCreature(*me, instance->GetGuidData(NPC_MURTA))) { murta->CastSpell(murta, SPELL_BLYS_BAND_ESCAPE); - murta->DespawnOrUnsummon(10000); + murta->DespawnOrUnsummon(10s); } DoCastSelf(SPELL_BLYS_BAND_ESCAPE); - me->DespawnOrUnsummon(10000); + me->DespawnOrUnsummon(10s); Porthome_Timer = 156000; //set timer back so that the event doesn't keep triggering } else @@ -436,7 +436,7 @@ public: case 1: me->GetMotionMaster()->MovePoint(2, 1871.18f, 1100.f, 8.88f); Talk(SAY_WEEGLI_OUT_OF_HERE); - me->DespawnOrUnsummon(8000); + me->DespawnOrUnsummon(8s); instance->SetData(DATA_PYRAMID, PYRAMID_GATES_DESTROYED); destroyingDoor = false; break; diff --git a/src/server/scripts/Kalimdor/zone_darkshore.cpp b/src/server/scripts/Kalimdor/zone_darkshore.cpp index 0efe73836..f0b5791e7 100644 --- a/src/server/scripts/Kalimdor/zone_darkshore.cpp +++ b/src/server/scripts/Kalimdor/zone_darkshore.cpp @@ -463,7 +463,7 @@ public: _events.Reset(); _events.ScheduleEvent(EVENT_CHECK_FOLLOWING, 1s); player->KilledMonsterCredit(NPC_CAPTURED_RABID_THISTLE_BEAR); - me->DespawnOrUnsummon(240000); + me->DespawnOrUnsummon(240s); } } } diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp index 94fb1505f..782e25034 100644 --- a/src/server/scripts/Kalimdor/zone_desolace.cpp +++ b/src/server/scripts/Kalimdor/zone_desolace.cpp @@ -474,7 +474,7 @@ public: else if (spell->Id == SPELL_KODO_KOMBO_GOSSIP) { me->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP); - me->DespawnOrUnsummon(60000); + me->DespawnOrUnsummon(60s); } } }; diff --git a/src/server/scripts/Kalimdor/zone_the_barrens.cpp b/src/server/scripts/Kalimdor/zone_the_barrens.cpp index 2624709fc..7cd22ac07 100644 --- a/src/server/scripts/Kalimdor/zone_the_barrens.cpp +++ b/src/server/scripts/Kalimdor/zone_the_barrens.cpp @@ -300,11 +300,11 @@ public: for (uint8 i = 0; i < 6; ++i) // unsummon challengers if (AffrayChallenger[i]) if (Creature* creature = ObjectAccessor::GetCreature((*me), AffrayChallenger[i])) - creature->DespawnOrUnsummon(1); + creature->DespawnOrUnsummon(1ms); if (BigWill) // unsummon bigWill if (Creature* creature = ObjectAccessor::GetCreature((*me), BigWill)) - creature->DespawnOrUnsummon(1); + creature->DespawnOrUnsummon(1ms); } void MoveInLineOfSight(Unit* who) override diff --git a/src/server/scripts/Kalimdor/zone_winterspring.cpp b/src/server/scripts/Kalimdor/zone_winterspring.cpp index d1e516fe0..e3a14d203 100644 --- a/src/server/scripts/Kalimdor/zone_winterspring.cpp +++ b/src/server/scripts/Kalimdor/zone_winterspring.cpp @@ -486,7 +486,7 @@ public: if (Creature* guard = me->GetMap()->GetCreature(_guardEluneGUID)) { guard->GetMotionMaster()->MovePoint(0, wingThicketLocations[2].m_positionX, wingThicketLocations[2].m_positionY, wingThicketLocations[2].m_positionZ); - guard->DespawnOrUnsummon(4000); + guard->DespawnOrUnsummon(4s); } break; case SAY_PRIESTESS_ALTAR_20: @@ -494,7 +494,7 @@ public: if (Creature* priestess = me->GetMap()->GetCreature(_firstPriestessGUID)) { priestess->GetMotionMaster()->MovePoint(0, wingThicketLocations[0].m_positionX, wingThicketLocations[0].m_positionY, wingThicketLocations[0].m_positionZ); - priestess->DespawnOrUnsummon(4000); + priestess->DespawnOrUnsummon(4s); } break; case SAY_PRIESTESS_ALTAR_21: @@ -502,7 +502,7 @@ public: if (Creature* priestess = me->GetMap()->GetCreature(_secondPriestessGUID)) { priestess->GetMotionMaster()->MovePoint(0, wingThicketLocations[1].m_positionX, wingThicketLocations[1].m_positionY, wingThicketLocations[1].m_positionZ); - priestess->DespawnOrUnsummon(4000); + priestess->DespawnOrUnsummon(4s); } break; case DATA_EVENT_END: @@ -526,7 +526,7 @@ public: player->GroupEventHappens(QUEST_GUARDIANS_ALTAR, me); Talk(SAY_RANSHALLA_END_2, player); } - me->DespawnOrUnsummon(4000); + me->DespawnOrUnsummon(4s); break; } } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp index 3b0c79d63..51f872bb7 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/ObsidianSanctum/boss_sartharion.cpp @@ -1480,7 +1480,7 @@ public: { if (param == ACTION_SWITCH_PHASE) { - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } } diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp index ae4769284..56f0cc672 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_baltharus_the_warborn.cpp @@ -379,7 +379,7 @@ public: // Xinef: after soft reset npc is no longer present if (me->GetInstanceScript()->GetBossState(DATA_BALTHARUS_THE_WARBORN) == DONE) - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } void DoAction(int32 action) override diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp index b5456dff7..d3107d148 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_halion.cpp @@ -1322,7 +1322,7 @@ public: void JustDied(Unit* /*killer*/) override { - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } }; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp index cd4cf6eb8..2386bdd34 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp @@ -409,7 +409,7 @@ public: void JustDied(Unit* /*killer*/) override { - me->DespawnOrUnsummon(20000); + me->DespawnOrUnsummon(20s); if (pInstance) if (Creature* paletress = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(DATA_PALETRESS))) paletress->AI()->DoAction(1); @@ -722,7 +722,7 @@ public: void JustDied(Unit* /*pKiller*/) override { - me->DespawnOrUnsummon(10000); + me->DespawnOrUnsummon(10s); if (pInstance) pInstance->SetData(DATA_ARGENT_SOLDIER_DEFEATED, 0); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp index 95e711122..aa99e4da4 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp @@ -131,7 +131,7 @@ public: void EnterEvadeMode(EvadeReason why) override { - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); ScriptedAI::EnterEvadeMode(why); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp index 68e8cb649..6f1a3620f 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp @@ -347,7 +347,7 @@ public: void JustDied(Unit* /*pKiller*/) override { me->SetUInt32Value(UNIT_FIELD_MOUNTDISPLAYID, 0); - me->DespawnOrUnsummon(10000); + me->DespawnOrUnsummon(10s); if (pInstance) pInstance->SetData(DATA_MOUNT_DIED, 0); } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp index 3342edfb0..1f3cc4eaf 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/instance_trial_of_the_champion.cpp @@ -1128,7 +1128,7 @@ public: if (Creature* boss = instance->GetCreature(NPC_ArgentChampionGUID)) { boss->GetMotionMaster()->MovePoint(0, SpawnPosition); - boss->DespawnOrUnsummon(3000); + boss->DespawnOrUnsummon(3s); } } break; diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp index 55410eea2..54b33f2b6 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_anubarak_trial.cpp @@ -574,7 +574,7 @@ public: if (spell->Id == SPELL_SPIKE_FAIL) { me->RemoveAllAuras(); - me->DespawnOrUnsummon(1500); + me->DespawnOrUnsummon(1500ms); } } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp index 67cd96d41..8e82e9cb4 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_lord_jaraxxus.cpp @@ -353,7 +353,7 @@ public: void JustDied(Unit* /*killer*/) override { - me->DespawnOrUnsummon(10000); + me->DespawnOrUnsummon(10s); } void EnterEvadeMode(EvadeReason /*why*/) override @@ -434,7 +434,7 @@ public: void JustDied(Unit* /*killer*/) override { - me->DespawnOrUnsummon(10000); + me->DespawnOrUnsummon(10s); } void EnterEvadeMode(EvadeReason /*why*/) override diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp index 2eb540e02..aa2028a22 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/boss_twin_valkyr.cpp @@ -710,7 +710,7 @@ public: return; if (urand(0, 2)) - me->DespawnOrUnsummon(0); + me->DespawnOrUnsummon(0ms); } void MoveToNextPoint() @@ -884,7 +884,7 @@ class spell_valkyr_ball_periodic_dummy_aura : public AuraScript creature->GetMotionMaster()->MoveIdle(); creature->CastSpell((Unit*)nullptr, creature->GetEntry() == NPC_CONCENTRATED_LIGHT ? SPELL_UNLEASHED_LIGHT : SPELL_UNLEASHED_DARK, false); creature->SetDisplayId(11686); - creature->DespawnOrUnsummon(1500); + creature->DespawnOrUnsummon(1500ms); } } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp index 71dcb5e85..ad3c4cdb4 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheCrusader/instance_trial_of_the_crusader.cpp @@ -348,9 +348,9 @@ public: } if (Creature* c = instance->GetCreature(NPC_AcidmawGUID)) - c->DespawnOrUnsummon(10000); + c->DespawnOrUnsummon(10s); if (Creature* c = instance->GetCreature(NPC_DreadscaleGUID)) - c->DespawnOrUnsummon(10000); + c->DespawnOrUnsummon(10s); if (AchievementTimer + 10 >= GameTime::GetGameTime().count()) DoUpdateAchievementCriteria(ACHIEVEMENT_CRITERIA_TYPE_BE_SPELL_TARGET, SPELL_JORMUNGAR_ACHIEV); AchievementTimer = 0; @@ -420,7 +420,7 @@ public: for (ObjectGuid const& guid : NPC_ChampionGUIDs) if (Creature* c = instance->GetCreature(guid)) - c->DespawnOrUnsummon(15000); + c->DespawnOrUnsummon(15s); NPC_ChampionGUIDs.clear(); if (Creature* c = instance->GetCreature(NPC_TirionGUID)) @@ -1314,7 +1314,7 @@ public: { c->SetVisible(true); c->AI()->Talk(SAY_STAGE_4_05); - c->DespawnOrUnsummon(0); + c->DespawnOrUnsummon(0ms); } break; diff --git a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp index 809896977..78defb706 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/boss_trollgore.cpp @@ -214,7 +214,7 @@ class spell_trollgore_corpse_explode_aura : public AuraScript void HandleRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { if (Creature* target = GetTarget()->ToCreature()) - target->DespawnOrUnsummon(1); + target->DespawnOrUnsummon(1ms); } void Register() override diff --git a/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp b/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp index a8f22adf8..e5190c5ed 100644 --- a/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp +++ b/src/server/scripts/Northrend/DraktharonKeep/instance_drak_tharon_keep.cpp @@ -89,7 +89,7 @@ class spell_dtk_raise_dead_aura : public AuraScript void HandleEffectRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { - GetUnitOwner()->ToCreature()->DespawnOrUnsummon(1); + GetUnitOwner()->ToCreature()->DespawnOrUnsummon(1ms); GetUnitOwner()->SummonCreature(NPC_RISEN_DRAKKARI_WARRIOR, *GetUnitOwner()); } diff --git a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp index 7feed77da..80d04808d 100644 --- a/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/ForgeOfSouls/boss_bronjahm.cpp @@ -242,7 +242,7 @@ public: { me->GetMotionMaster()->MoveIdle(); me->CastSpell(b, SPELL_CONSUME_SOUL, true); - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); return; } diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index 66e3444e7..f3ba31fc2 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -1153,7 +1153,7 @@ public: ScriptedAI::EnterEvadeMode(why); if (me->IsSummon()) - me->ToTempSummon()->DespawnOrUnsummon(1); + me->ToTempSummon()->DespawnOrUnsummon(1ms); } }; }; diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp index 21e50018b..f18fecfa2 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/boss_krickandick.cpp @@ -506,7 +506,7 @@ class spell_exploding_orb_auto_grow_aura : public AuraScript target->RemoveAurasDueToSpell(SPELL_AUTO_GROW); target->RemoveAurasDueToSpell(SPELL_EXPLODING_ORB_VISUAL); if (target->IsCreature()) - target->ToCreature()->DespawnOrUnsummon(2000); + target->ToCreature()->DespawnOrUnsummon(2s); } } diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp index a432db0e2..bebf2da81 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp @@ -341,7 +341,7 @@ public: Unit::Kill(c, c, false); } - c->DespawnOrUnsummon(10000); + c->DespawnOrUnsummon(10s); } pInstance->SetData(DATA_INSTANCE_PROGRESS, INSTANCE_PROGRESS_FINISHED_INTRO); } @@ -1381,7 +1381,7 @@ class spell_pos_slave_trigger_closest : public SpellScript target->SetUInt32Value(UNIT_NPC_EMOTESTATE, 0); if (Creature* c = target->ToCreature()) { - c->DespawnOrUnsummon(7000); + c->DespawnOrUnsummon(7s); c->AI()->Talk(0, p); c->m_Events.AddEvent(new SlaveRunEvent(*c), c->m_Events.CalculateTime(3000)); } @@ -1406,7 +1406,7 @@ class spell_pos_rimefang_frost_nova : public SpellScript { Unit::Kill(caster, target); if (target->IsCreature()) - target->ToCreature()->DespawnOrUnsummon(30000); + target->ToCreature()->DespawnOrUnsummon(30s); } } diff --git a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp index 7b11623c5..c9caba5eb 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_drakkari_colossus.cpp @@ -308,7 +308,7 @@ public: me->CastSpell(me, SPELL_FACE_ME, true); me->CastSpell(me, SPELL_SURGE_VISUAL, true); me->CastSpell(me, SPELL_MERGE, false); - me->DespawnOrUnsummon(2000); + me->DespawnOrUnsummon(2s); events.Reset(); break; } @@ -382,7 +382,7 @@ public: { me->SetReactState(REACT_PASSIVE); me->GetMotionMaster()->MoveCharge(1672.96f, 743.488f, 143.338f, 7.0f, POINT_MERGE); - me->DespawnOrUnsummon(1200); + me->DespawnOrUnsummon(1200ms); } } diff --git a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp index 3df618cd4..492ceb008 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_gal_darah.cpp @@ -133,7 +133,7 @@ public: despawnTime = (summon->GetDistance(target) / 40.0f * 1000) + 500; } - summon->DespawnOrUnsummon(despawnTime); + summon->DespawnOrUnsummon(Milliseconds(despawnTime)); } uint32 GetData(uint32 /*type*/) const override diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp index afc11c5cc..78baeb7eb 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_blood_prince_council.cpp @@ -1213,7 +1213,7 @@ public: void JustDied(Unit* /*killer*/) override { - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } void UpdateAI(uint32 diff) override @@ -1287,7 +1287,7 @@ public: me->SetControlled(true, UNIT_STATE_ROOT); me->StopMoving(); me->CastSpell(me, SPELL_FLAMES, true); - me->DespawnOrUnsummon(999); + me->DespawnOrUnsummon(999ms); me->CastSpell(me, SPELL_FLAME_SPHERE_DEATH_EFFECT, true); _exploded = true; } @@ -1331,7 +1331,7 @@ public: me->SetInCombatWithZone(); return; } - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } void DamageDealt(Unit* target, uint32& damage, DamageEffectType /*damageType*/, SpellSchoolMask /*damageSchoolMask*/) override @@ -1424,7 +1424,7 @@ public: case EVENT_BOMB_DESPAWN: me->RemoveAllAuras(); me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - me->DespawnOrUnsummon(exploded ? 5000 : 0); + me->DespawnOrUnsummon(exploded ? 5s : 0ms); break; case EVENT_CONTINUE_FALLING: me->GetMotionMaster()->MovementExpired(false); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index 8610c2e34..b6915138c 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -1030,7 +1030,7 @@ public: me->GetMotionMaster()->MoveCharge(chargePos[_index].GetPositionX(), chargePos[_index].GetPositionY(), chargePos[_index].GetPositionZ(), 13.0f, POINT_CHARGE); } else if (action == ACTION_DESPAWN) - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } private: diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp index c9cfe56d4..fd4f2208d 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp @@ -668,7 +668,7 @@ public: continue; Creature* c = (*itr)->ToCreature(); if (c->GetEntry() == NPC_SKYBREAKER_MARINE || c->GetEntry() == NPC_SKYBREAKER_SERGEANT || c->GetEntry() == NPC_KOR_KRON_REAVER || c->GetEntry() == NPC_KOR_KRON_SERGEANT) - c->DespawnOrUnsummon(1); + c->DespawnOrUnsummon(1ms); } } } @@ -880,7 +880,7 @@ public: init.DisableTransportPathTransformations(); init.MovebyPath(path, 0); init.Launch(); - me->DespawnOrUnsummon(18000); + me->DespawnOrUnsummon(18s); } } @@ -1216,7 +1216,7 @@ public: init.DisableTransportPathTransformations(); init.MovebyPath(path, 0); init.Launch(); - me->DespawnOrUnsummon(18000); + me->DespawnOrUnsummon(18s); } } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp index 54b279510..45dc33219 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lady_deathwhisper.cpp @@ -482,7 +482,7 @@ public: minrange = summon->GetExactDist(p); } - summon->ToTempSummon()->DespawnOrUnsummon(30000); + summon->ToTempSummon()->DespawnOrUnsummon(30s); } else { @@ -949,7 +949,7 @@ public: me->GetMotionMaster()->MovementExpired(); me->StopMoving(); me->SetControlled(true, UNIT_STATE_STUNNED); - me->DespawnOrUnsummon(500); + me->DespawnOrUnsummon(500ms); break; default: break; @@ -977,7 +977,7 @@ public: if (!me->GetVictim() || me->GetVictim()->GetGUID() != targetGUID) { - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); return; } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp index 509ff92fb..53a73a8fe 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_lord_marrowgar.cpp @@ -397,7 +397,7 @@ public: trapped->NearTeleportTo(exitPos.GetPositionX(), exitPos.GetPositionY(), exitPos.GetPositionZ(), exitPos.GetOrientation(), false); } - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } void JustDied(Unit* /*killer*/) override @@ -451,13 +451,13 @@ public: } else { - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); return; } } else { - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); return; } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp index a7f0794fa..cdcc90960 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_professor_putricide.cpp @@ -352,7 +352,7 @@ public: { if (summon->GetEntry() != 38308 && summon->GetEntry() != 38309 && (!me->IsInCombat() || me->IsInEvadeMode())) { - summon->DespawnOrUnsummon(1); + summon->DespawnOrUnsummon(1ms); return; } @@ -757,7 +757,7 @@ public: if (Creature* professor = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_PROFESSOR_PUTRICIDE))) { if (!professor->IsInCombat()) - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); else professor->AI()->JustSummoned(me); } @@ -1056,7 +1056,7 @@ class spell_putricide_ooze_channel : public SpellScript if (targets.empty()) { FinishCast(SPELL_FAILED_NO_VALID_TARGETS); - GetCaster()->ToCreature()->DespawnOrUnsummon(1); // despawn next update + GetCaster()->ToCreature()->DespawnOrUnsummon(1ms); // despawn next update return; } @@ -1491,7 +1491,7 @@ class spell_putricide_eat_ooze : public SpellScript { target->RemoveAurasDueToSpell(SPELL_GROW_STACKER); target->RemoveAura(grow); - target->DespawnOrUnsummon(1); + target->DespawnOrUnsummon(1ms); } else grow->ModStackAmount(-4); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp index cd3a73fdf..ef366c707 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_rotface.cpp @@ -211,7 +211,7 @@ public: if (me->IsAlive() && me->IsInCombat() && !me->IsInEvadeMode()) summons.Summon(summon); else - summon->DespawnOrUnsummon(1); + summon->DespawnOrUnsummon(1ms); } void KilledUnit(Unit* victim) override @@ -373,7 +373,7 @@ public: { if (Creature* rotface = ObjectAccessor::GetCreature(*me, instance->GetGuidData(DATA_ROTFACE))) rotface->AI()->SummonedCreatureDespawn(me); - me->DespawnOrUnsummon(0); + me->DespawnOrUnsummon(0ms); } void UpdateAI(uint32 diff) override @@ -798,7 +798,7 @@ class spell_rotface_unstable_ooze_explosion_suicide_aura : public AuraScript target->SetVisible(false); target->RemoveAllAuras(); //target->ToCreature()->DespawnOrUnsummon(); - target->ToCreature()->DespawnOrUnsummon(60000); + target->ToCreature()->DespawnOrUnsummon(60s); } void Register() override diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp index 2dc55ae95..82ae8c8d3 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_sindragosa.cpp @@ -720,7 +720,7 @@ public: player->RemoveAurasDueToSpell(SPELL_ICE_TOMB_DAMAGE); player->RemoveAurasDueToSpell(SPELL_ASPHYXIATION); player->RemoveAurasDueToSpell(SPELL_ICE_TOMB_UNTARGETABLE); - me->DespawnOrUnsummon(5000); + me->DespawnOrUnsummon(5s); } } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index b33567ca0..5a88d28a4 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -826,9 +826,9 @@ public: me->SetDisableGravity(false); me->GetMotionMaster()->MoveFall(); if (Creature* frostmourne = me->FindNearestCreature(NPC_FROSTMOURNE_TRIGGER, 50.0f)) - frostmourne->DespawnOrUnsummon(1); + frostmourne->DespawnOrUnsummon(1ms); if (Creature* terenas = me->FindNearestCreature(NPC_TERENAS_MENETHIL_OUTRO, 50.0f)) - terenas->DespawnOrUnsummon(1); + terenas->DespawnOrUnsummon(1ms); me->m_Events.AddEvent(new LichKingDeathEvent(*me), me->m_Events.CalculateTime(2500)); // die after spinning anim is over, so death anim is visible me->m_Events.AddEvent(new LichKingMovieEvent(*me), me->m_Events.CalculateTime(11500)); @@ -886,7 +886,7 @@ public: break; case NPC_VALKYR_SHADOWGUARD: if (_phase == PHASE_THREE || events.HasTimeUntilEvent(EVENT_QUAKE_2)) - summon->DespawnOrUnsummon(1); + summon->DespawnOrUnsummon(1ms); break; default: break; @@ -2078,7 +2078,7 @@ class spell_the_lich_king_shadow_trap_periodic : public SpellScript if (Aura* a = GetCaster()->GetAura(SPELL_SHADOW_TRAP_AURA)) a->SetDuration(0); if (GetCaster()->IsCreature()) - GetCaster()->ToCreature()->DespawnOrUnsummon(3000); + GetCaster()->ToCreature()->DespawnOrUnsummon(3s); } void Register() override @@ -2134,7 +2134,7 @@ public: { me->RemoveAllAuras(); me->CastSpell(me, SPELL_ICE_BURST, true); - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); targetGUID.Clear(); timer = 9999; me->InterruptNonMeleeSpells(true); @@ -2238,7 +2238,7 @@ public: if (Player* plr = ScriptedAI::SelectTargetFromPlayerList(100.0f, 0, true)) plr->CastSpell(me, SPELL_RAGING_SPIRIT_VISUAL_CLONE, true); else - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } } @@ -2449,7 +2449,7 @@ public: if (IsHeroic()) GoSiphon(); else - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); } void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override @@ -2519,7 +2519,7 @@ public: if (IsHeroic()) GoSiphon(); else - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); } break; case POINT_START_SIPHON: @@ -2883,7 +2883,7 @@ class spell_the_lich_king_vile_spirit_damage_target_search : public SpellScript c->GetMotionMaster()->Clear(true); c->StopMoving(); c->CastSpell((Unit*)nullptr, SPELL_SPIRIT_BURST, true); - c->DespawnOrUnsummon(3000); + c->DespawnOrUnsummon(3s); c->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); } } @@ -2999,7 +2999,7 @@ public: _events.Reset(); me->RemoveAllAuras(); - me->DespawnOrUnsummon(500); + me->DespawnOrUnsummon(500ms); if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING))) lichKing->AI()->SummonedCreatureDespawn(me); @@ -3050,7 +3050,7 @@ public: case EVENT_DESPAWN_SELF: if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_THE_LICH_KING))) lichKing->AI()->SummonedCreatureDespawn(me); - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); break; default: break; @@ -3098,7 +3098,7 @@ public: { _events.Reset(); me->CastSpell((Unit*)nullptr, SPELL_RESTORE_SOUL, false); - me->DespawnOrUnsummon(3000); + me->DespawnOrUnsummon(3s); } break; } @@ -3118,14 +3118,14 @@ public: if (Creature* warden = me->FindNearestCreature(NPC_SPIRIT_WARDEN, 20.0f)) { warden->CastSpell((Unit*)nullptr, SPELL_DESTROY_SOUL, false); - warden->DespawnOrUnsummon(2000); + warden->DespawnOrUnsummon(2s); } me->CastSpell(me, SPELL_TERENAS_LOSES_INSIDE, false); me->SetDisplayId(16946); me->SetReactState(REACT_PASSIVE); me->AttackStop(); me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - me->DespawnOrUnsummon(2000); + me->DespawnOrUnsummon(2s); } } } @@ -3414,7 +3414,7 @@ public: npc_lk_spirit_bombAI(Creature* creature) : NullCreatureAI(creature) { me->SetReactState(REACT_PASSIVE); - me->DespawnOrUnsummon(45000); // for safety + me->DespawnOrUnsummon(45s); // for safety timer = 0; } @@ -3447,7 +3447,7 @@ public: timer = 0; me->RemoveAllAuras(); me->CastSpell((Unit*)nullptr, SPELL_EXPLOSION, false); - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); } else timer -= diff; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp index 75bdea092..4fa36acac 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_valithria_dreamwalker.cpp @@ -177,14 +177,14 @@ private: class DelayedCastEvent : public BasicEvent { public: - DelayedCastEvent(Creature* trigger, uint32 spellId, ObjectGuid originalCaster, uint32 despawnTime) : _trigger(trigger), _originalCaster(originalCaster), _spellId(spellId), _despawnTime(despawnTime) + DelayedCastEvent(Creature* trigger, uint32 spellId, ObjectGuid originalCaster, Milliseconds despawnTime) : _trigger(trigger), _originalCaster(originalCaster), _spellId(spellId), _despawnTime(despawnTime) { } bool Execute(uint64 /*time*/, uint32 /*diff*/) override { _trigger->CastSpell(_trigger, _spellId, false, nullptr, nullptr, _originalCaster); - if (_despawnTime) + if (_despawnTime > 0ms) _trigger->DespawnOrUnsummon(_despawnTime); return true; } @@ -193,7 +193,7 @@ private: Creature* _trigger; ObjectGuid _originalCaster; uint32 _spellId; - uint32 _despawnTime; + Milliseconds _despawnTime; }; class AuraRemoveEvent : public BasicEvent @@ -406,7 +406,7 @@ public: // this display id was found in sniff instead of the one on aura me->SetDisplayId(11686); me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - me->DespawnOrUnsummon(4000); + me->DespawnOrUnsummon(4s); if (Creature* lichKing = ObjectAccessor::GetCreature(*me, _instance->GetGuidData(DATA_VALITHRIA_LICH_KING))) lichKing->CastSpell(lichKing, SPELL_SPAWN_CHEST, false); _instance->SetData(DATA_WEEKLY_QUEST_ID, 0); // show hidden npc if necessary @@ -417,12 +417,12 @@ public: { if (summon->GetEntry() == NPC_DREAM_PORTAL_PRE_EFFECT) { - summon->m_Events.AddEvent(new DelayedCastEvent(summon, SPELL_SUMMON_DREAM_PORTAL, me->GetGUID(), 6000), summon->m_Events.CalculateTime(15000)); + summon->m_Events.AddEvent(new DelayedCastEvent(summon, SPELL_SUMMON_DREAM_PORTAL, me->GetGUID(), 6s), summon->m_Events.CalculateTime(15000)); summon->m_Events.AddEvent(new AuraRemoveEvent(summon, SPELL_DREAM_PORTAL_VISUAL_PRE), summon->m_Events.CalculateTime(15000)); } else if (summon->GetEntry() == NPC_NIGHTMARE_PORTAL_PRE_EFFECT) { - summon->m_Events.AddEvent(new DelayedCastEvent(summon, SPELL_SUMMON_NIGHTMARE_PORTAL, me->GetGUID(), 6000), summon->m_Events.CalculateTime(15000)); + summon->m_Events.AddEvent(new DelayedCastEvent(summon, SPELL_SUMMON_NIGHTMARE_PORTAL, me->GetGUID(), 6s), summon->m_Events.CalculateTime(15000)); summon->m_Events.AddEvent(new AuraRemoveEvent(summon, SPELL_NIGHTMARE_PORTAL_VISUAL_PRE), summon->m_Events.CalculateTime(15000)); } } @@ -750,9 +750,9 @@ public: void JustSummoned(Creature* summon) override { if (summon->GetEntry() == NPC_COLUMN_OF_FROST) - summon->m_Events.AddEvent(new DelayedCastEvent(summon, SPELL_COLUMN_OF_FROST_DAMAGE, ObjectGuid::Empty, 8000), summon->m_Events.CalculateTime(2000)); + summon->m_Events.AddEvent(new DelayedCastEvent(summon, SPELL_COLUMN_OF_FROST_DAMAGE, ObjectGuid::Empty, 8s), summon->m_Events.CalculateTime(2000)); else if (summon->GetEntry() == NPC_MANA_VOID) - summon->DespawnOrUnsummon(36000); + summon->DespawnOrUnsummon(36s); } void UpdateAI(uint32 diff) override @@ -886,7 +886,7 @@ public: me->GetMotionMaster()->MoveIdle(); // must use originalCaster the same for all clouds to allow stacking me->CastSpell(me, EMERALD_VIGOR, false, nullptr, nullptr, _instance->GetGuidData(DATA_VALITHRIA_DREAMWALKER)); - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); break; default: break; @@ -1054,7 +1054,7 @@ public: timer = 0; me->SetDisplayId(11686); me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); - me->DespawnOrUnsummon(2000); + me->DespawnOrUnsummon(2s); } else timer -= diff; @@ -1096,7 +1096,7 @@ public: void JustSummoned(Creature* summon) override { if (me->GetInstanceScript() && me->GetInstanceScript()->GetBossState(DATA_VALITHRIA_DREAMWALKER) == DONE) - summon->DespawnOrUnsummon(1); + summon->DespawnOrUnsummon(1ms); else if (Unit* target = SelectTargetFromPlayerList(200.0f)) summon->AI()->AttackStart(target); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index 74221610a..cac4c599f 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -534,12 +534,12 @@ public: if (Creature* factionNPC = ObjectAccessor::GetCreature(*me, _factionNPC)) { factionNPC->GetMotionMaster()->MovePath(factionNPC->GetSpawnId() * 10, false); - factionNPC->DespawnOrUnsummon(46500); + factionNPC->DespawnOrUnsummon(46500ms); std::list followers; factionNPC->GetCreaturesWithEntryInRange(followers, 30, _instance->GetData(DATA_TEAMID_IN_INSTANCE) == TEAM_HORDE ? NPC_KOR_KRON_GENERAL : NPC_ALLIANCE_COMMANDER); for (Creature* follower : followers) { - follower->DespawnOrUnsummon(46500); + follower->DespawnOrUnsummon(46500ms); } } me->setActive(false); @@ -1810,7 +1810,7 @@ public: { _vehicleCheckTimer = 500; if (!me->GetVehicle()) - me->DespawnOrUnsummon(100); + me->DespawnOrUnsummon(100ms); } else _vehicleCheckTimer -= diff; @@ -2151,7 +2151,7 @@ class spell_svalna_remove_spear : public SpellScript { if (Unit* vehicle = target->GetVehicleBase()) vehicle->RemoveAurasDueToSpell(SPELL_IMPALING_SPEAR); - target->DespawnOrUnsummon(1); + target->DespawnOrUnsummon(1ms); } } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp index 667a92218..dbc3974ee 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/instance_icecrown_citadel.cpp @@ -499,7 +499,7 @@ public: break; case NPC_INFILTRATOR_MINCHAR_BQ: if (BloodQuickeningState == DONE) - creature->DespawnOrUnsummon(1); + creature->DespawnOrUnsummon(1ms); break; case NPC_MINCHAR_BEAM_STALKER: if (BloodQuickeningState != DONE) @@ -661,7 +661,7 @@ public: { c->CastSpell(c, VOID_ZONE_VISUAL, true); unit->SummonCreature(NPC_RISEN_DEATHSPEAKER_SERVANT, *unit, TEMPSUMMON_MANUAL_DESPAWN); - unit->ToCreature()->DespawnOrUnsummon(3000); + unit->ToCreature()->DespawnOrUnsummon(3s); } break; default: diff --git a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp index 7cf70c4b4..384ffda0f 100644 --- a/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp +++ b/src/server/scripts/Northrend/Naxxramas/boss_kelthuzad.cpp @@ -507,7 +507,7 @@ public: { if (!me->IsInCombat()) { - me->DespawnOrUnsummon(500); + me->DespawnOrUnsummon(500ms); } } if (param == ACTION_GUARDIANS_OFF) diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp index 39c3faf62..3ac5974b5 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -803,10 +803,10 @@ public: { case NPC_ARCANE_OVERLOAD: summon->CastSpell(summon, SPELL_ARCANE_OVERLOAD_DMG, true); - summon->DespawnOrUnsummon(45000); + summon->DespawnOrUnsummon(45s); break; case NPC_STATIC_FIELD: - summon->DespawnOrUnsummon(20000); + summon->DespawnOrUnsummon(20s); break; } } @@ -1018,7 +1018,7 @@ public: me->ReplaceAllUnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE); me->RemoveAura(SPELL_POWER_SPARK_VISUAL); me->CastSpell(me, SPELL_POWER_SPARK_GROUND_BUFF, true); - me->DespawnOrUnsummon(60000); + me->DespawnOrUnsummon(60s); } } } @@ -1459,14 +1459,14 @@ public: else if (pass && pass->IsPlayer() && me->IsAlive()) { me->SetDisplayId(11686); // prevents nasty falling animation at despawn - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } } void JustDied(Unit* /*killer*/) override { me->SetDisplayId(11686); // prevents nasty falling animation at despawn - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } }; }; diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp index 4f4b09b75..17de5127f 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/instance_eye_of_eternity.cpp @@ -29,7 +29,7 @@ bool EoEDrakeEnterVehicleEvent::Execute(uint64 /*eventTime*/, uint32 /*updateTim p->CastCustomSpell(60683, SPELLVALUE_BASE_POINT0, 1, &_owner, true); return true; } - _owner.DespawnOrUnsummon(1); + _owner.DespawnOrUnsummon(1ms); return true; } diff --git a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp index 5926c11b6..e41c190ae 100644 --- a/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp +++ b/src/server/scripts/Northrend/Nexus/Nexus/boss_magus_telestra.cpp @@ -150,7 +150,7 @@ struct boss_magus_telestra : public BossAI if (spellInfo->Id >= SPELL_FIRE_MAGUS_DEATH && spellInfo->Id <= SPELL_ARCANE_MAGUS_DEATH && caster->ToCreature()) { events.ScheduleEvent(EVENT_MAGUS_FAIL_ACHIEVEMENT, 5s); - caster->ToCreature()->DespawnOrUnsummon(1000); + caster->ToCreature()->DespawnOrUnsummon(1s); if (++copiesDied >= 3) { diff --git a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp index 01cdb73fb..87d4b4b80 100644 --- a/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp +++ b/src/server/scripts/Northrend/Nexus/Oculus/oculus.cpp @@ -387,7 +387,7 @@ public: } else { - me->DespawnOrUnsummon(2050); + me->DespawnOrUnsummon(2050ms); me->SetOrientation(2.5f); me->SetSpeedRate(MOVE_FLIGHT, 1.0f); Position pos = me->GetPosition(); @@ -444,7 +444,7 @@ public: } else { - me->DespawnOrUnsummon(2050); + me->DespawnOrUnsummon(2050ms); me->SetOrientation(2.5f); me->SetSpeedRate(MOVE_FLIGHT, 1.0f); Position pos = me->GetPosition(); @@ -461,7 +461,7 @@ public: { if (despawnTimer >= 5000) { - me->DespawnOrUnsummon(2050); + me->DespawnOrUnsummon(2050ms); me->SetOrientation(2.5f); Position pos = me->GetPosition(); Position offset = { 10.0f, 10.0f, 12.0f, 0.0f }; diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp index 752ef36a3..e19997426 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_ionar.cpp @@ -269,7 +269,7 @@ public: me->RemoveAllAuras(); me->CastSpell(me, SPELL_SPARK_DESPAWN, true); - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); } } }; diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp index c64594b11..8d7c3dfdd 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_volkhan.cpp @@ -378,7 +378,7 @@ public: volkhan->AI()->DoAction(ACTION_DESTROYED); me->CastSpell(me, me->GetMap()->IsHeroic() ? SPELL_SHATTER_H : SPELL_SHATTER_N, true); - me->DespawnOrUnsummon(500); + me->DespawnOrUnsummon(500ms); } } diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp index b0dd3d79f..51cd73619 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp @@ -594,7 +594,7 @@ public: if (Creature* darkMatterTarget = ObjectAccessor::GetCreature(*me, darkMatterTargetGUID)) { darkMatterTarget->CastSpell(darkMatterTarget, darkMatterTarget->GetMap()->IsHeroic() ? SPELL_DARK_MATTER_H : SPELL_DARK_MATTER, true); - darkMatterTarget->DespawnOrUnsummon(500); + darkMatterTarget->DespawnOrUnsummon(500ms); } break; } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp index a11c0e291..8a7db94e6 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_algalon_the_observer.cpp @@ -443,7 +443,7 @@ public: if (me->IsInCombat()) events.ScheduleEvent(EVENT_DESPAWN_ALGALON_4, 26s); events.ScheduleEvent(EVENT_DESPAWN_ALGALON_5, 32s); - me->DespawnOrUnsummon(39000); + me->DespawnOrUnsummon(39s); me->SetReactState(REACT_PASSIVE); me->AttackStop(); @@ -795,7 +795,7 @@ public: case EVENT_OUTRO_11: me->SetStandState(UNIT_STAND_STATE_STAND); me->CastSpell(me, SPELL_TELEPORT, false); - me->DespawnOrUnsummon(3000); + me->DespawnOrUnsummon(3s); break; case EVENT_DESPAWN_ALGALON_1: Talk(SAY_ALGALON_DESPAWN_1); @@ -812,7 +812,7 @@ public: case EVENT_DESPAWN_ALGALON_5: me->SetStandState(UNIT_STAND_STATE_STAND); me->CastSpell(me, SPELL_TELEPORT, false); - me->DespawnOrUnsummon(3000); + me->DespawnOrUnsummon(3s); break; case EVENT_CHECK_HERALD_ITEMS: if (!DoCheckHeraldOfTheTitans()) @@ -886,7 +886,7 @@ public: events.ScheduleEvent(EVENT_SUMMON_ALGALON, 7500ms); return; case 10: - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); return; case POINT_BRANN_OUTRO: case POINT_BRANN_OUTRO_END: @@ -1025,10 +1025,10 @@ public: instance->DoStartTimedAchievement(ACHIEVEMENT_TIMED_TYPE_EVENT, EVENT_ID_SUPERMASSIVE_START); caster->CastSpell((Unit*)nullptr, SPELL_BLACK_HOLE_CREDIT, TRIGGERED_FULL_MASK); - caster->ToCreature()->DespawnOrUnsummon(1); - me->DespawnOrUnsummon(1); + caster->ToCreature()->DespawnOrUnsummon(1ms); + me->DespawnOrUnsummon(1ms); if (Creature* voidZone = caster->FindNearestCreature(NPC_ALGALON_VOID_ZONE_VISUAL_STALKER, 10.0f)) - voidZone->DespawnOrUnsummon(1); + voidZone->DespawnOrUnsummon(1ms); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp index 9df9798ec..29eb6cb58 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp @@ -579,7 +579,7 @@ public: if (Player* target = SelectTargetFromPlayerList(150)) me->GetMotionMaster()->MoveFollow(target, 0.0f, 0.0f); else - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } void MovementInform(uint32 type, uint32 /*id*/) override @@ -588,7 +588,7 @@ public: { _boomed = true; me->CastSpell(me, SPELL_LIGHTNING_BLAST, true); - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); } } }; @@ -902,7 +902,7 @@ class spell_assembly_rune_of_summoning_aura : public AuraScript void OnRemove(AuraEffect const* /*aurEff*/, AuraEffectHandleModes /*mode*/) { if (TempSummon* summ = GetTarget()->ToTempSummon()) - summ->DespawnOrUnsummon(1); + summ->DespawnOrUnsummon(1ms); } void Register() override diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp index 3a30bbc84..a4b1ef675 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_auriaya.cpp @@ -393,7 +393,7 @@ public: else { summons.DespawnAll(); - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } if (_feralEssenceStack) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp index 77d1053fc..a0a17863e 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -748,7 +748,7 @@ public: _despawnTimer = 0; if (Vehicle* veh = me->GetVehicle()) if (veh->GetPassenger(0) == me || veh->GetPassenger(1) == me) - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } } @@ -1157,7 +1157,7 @@ public: _beamTimer = 0; _removeTimer = 1; - me->DespawnOrUnsummon(5 * IN_MILLISECONDS); + me->DespawnOrUnsummon(5s); } } if (_removeTimer) @@ -1364,7 +1364,7 @@ public: liquid->CastSpell(liquid, SPELL_DUST_CLOUD_IMPACT, true); } - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } } @@ -1750,7 +1750,7 @@ class spell_vehicle_grab_pyrite : public SpellScript target->CastSpell(seat, GetEffectValue()); if (target->IsCreature()) - target->ToCreature()->DespawnOrUnsummon(1300); + target->ToCreature()->DespawnOrUnsummon(1300ms); } } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp index df194ce32..9bb1d122a 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_freya.cpp @@ -1024,7 +1024,7 @@ public: { me->RemoveAurasDueToSpell(SPELL_AUTO_GROW); me->CastSpell(me, me->GetMap()->Is25ManRaid() ? SPELL_LIFEBINDER_HEAL_25 : SPELL_LIFEBINDER_HEAL_10, true); - me->DespawnOrUnsummon(2000); + me->DespawnOrUnsummon(2s); _healTimer = 0; } } @@ -1063,7 +1063,7 @@ public: if (_despawnTimer >= 22000) { me->RemoveAurasDueToSpell(SPELL_AUTO_GROW); - me->DespawnOrUnsummon(2200); + me->DespawnOrUnsummon(2200ms); _despawnTimer = 0; } } @@ -1203,7 +1203,7 @@ public: if (Unit* target = SelectTargetFromPlayerList(80)) AttackStart(target); else - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); events.Repeat(10s); break; } @@ -1250,7 +1250,7 @@ public: if (_explodeTimer >= 11000) { me->CastSpell(me, me->GetMap()->Is25ManRaid() ? SPELL_NATURE_BOMB_DAMAGE_25 : SPELL_NATURE_BOMB_DAMAGE_10, false); - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); _explodeTimer = 0; } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp index 664565e88..cb7d6c500 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_general_vezax.cpp @@ -450,7 +450,7 @@ public: void JustDied(Unit* /*killer*/) override { - me->DespawnOrUnsummon(3000); + me->DespawnOrUnsummon(3s); if (pInstance) if (Creature* vezax = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(TYPE_VEZAX))) diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp index b318a0920..013418f22 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_hodir.cpp @@ -704,18 +704,18 @@ public: if (Unit* s = me->ToTempSummon()->GetSummonerUnit()) { if ((s->IsPlayer() && !s->HasAura(SPELL_FLASH_FREEZE_TRAPPED_PLAYER)) || (s->IsCreature() && !s->HasAura(SPELL_FLASH_FREEZE_TRAPPED_NPC))) - me->DespawnOrUnsummon(2000); + me->DespawnOrUnsummon(2s); else if (s->IsPlayer()) if (InstanceScript* instanceScript = me->GetInstanceScript()) if (instanceScript->GetData(TYPE_HODIR) == NOT_STARTED) { s->CastSpell(s, SPELL_FLASH_FREEZE_INSTAKILL, true); - me->DespawnOrUnsummon(2000); + me->DespawnOrUnsummon(2s); } } else { - me->DespawnOrUnsummon(2000); + me->DespawnOrUnsummon(2s); } } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp index 34f5cf155..b9a12638b 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_kologarn.cpp @@ -339,9 +339,9 @@ public: go->SetLootRecipient(me); } if (Creature* arm = ObjectAccessor::GetCreature(*me, _left)) - arm->DespawnOrUnsummon(3000); // visual + arm->DespawnOrUnsummon(3s); // visual if (Creature* arm = ObjectAccessor::GetCreature(*me, _right)) - arm->DespawnOrUnsummon(3000); // visual + arm->DespawnOrUnsummon(3s); // visual me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetDisableGravity(true); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index f9497a46b..7a157ba5a 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -740,17 +740,17 @@ public: LMK2->InterruptNonMeleeSpells(false); LMK2->AttackStop(); LMK2->AI()->SetData(1, 0); - LMK2->DespawnOrUnsummon(7000); + LMK2->DespawnOrUnsummon(7s); LMK2->SetReactState(REACT_PASSIVE); VX001->InterruptNonMeleeSpells(false); VX001->AttackStop(); VX001->AI()->SetData(1, 0); - VX001->DespawnOrUnsummon(7000); + VX001->DespawnOrUnsummon(7s); VX001->SetReactState(REACT_PASSIVE); ACU->InterruptNonMeleeSpells(false); ACU->AttackStop(); ACU->AI()->SetData(1, 0); - ACU->DespawnOrUnsummon(7000); + ACU->DespawnOrUnsummon(7s); ACU->SetReactState(REACT_PASSIVE); Position exitPos = me->GetPosition(); @@ -1221,7 +1221,7 @@ public: if (p->GetEntry() == NPC_LEVIATHAN_MKII_CANNON && !apply) { Unit::Kill(p, p); - p->ToCreature()->DespawnOrUnsummon(6000); + p->ToCreature()->DespawnOrUnsummon(6s); } } @@ -1343,7 +1343,7 @@ public: for (uint8 i = 0; i < 2; ++i) if (Unit* r = vk->GetPassenger(5 + i)) if (r->IsCreature()) - r->ToCreature()->DespawnOrUnsummon(1); + r->ToCreature()->DespawnOrUnsummon(1ms); } void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override @@ -1555,7 +1555,7 @@ public: void PassengerBoarded(Unit* p, int8 /*seat*/, bool apply) override { if (p->GetEntry() == NPC_ROCKET_VISUAL && !apply) - p->ToCreature()->DespawnOrUnsummon(8000); + p->ToCreature()->DespawnOrUnsummon(8s); } void SpellHit(Unit* /*caster*/, SpellInfo const* spell) override @@ -2015,7 +2015,7 @@ public: if (despawnTimer <= diff) { despawnTimer = 60000; - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } else despawnTimer -= diff; @@ -2081,7 +2081,7 @@ public: bot->CastSpell(bot, SPELL_EMERGENCY_MODE, true); } - me->DespawnOrUnsummon(500); + me->DespawnOrUnsummon(500ms); timer = 99999; } else @@ -2346,7 +2346,7 @@ public: CAST_AI(npc_ulduar_flames_initial::npc_ulduar_flames_initialAI, c->AI())->RemoveFlame(me->GetGUID()); me->RemoveAllAuras(); - me->DespawnOrUnsummon(2500); + me->DespawnOrUnsummon(2500ms); } break; case SPELL_VX001_FROST_BOMB: diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp index d2b1aee4c..88fa0c12e 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp @@ -859,7 +859,7 @@ public: else if (param == ACTION_SIF_TRANSFORM) { me->CastSpell(me, SPELL_SIF_TRANSFORM, true); - me->DespawnOrUnsummon(5000); + me->DespawnOrUnsummon(5s); events.Reset(); _allowCast = false; } @@ -875,7 +875,7 @@ public: { case EVENT_SIF_FINISH_DOMINION: Talk(SAY_SIF_HM_MISSED); - me->DespawnOrUnsummon(5000); + me->DespawnOrUnsummon(5s); break; case EVENT_SIF_START_TALK: Talk(SAY_SIF_AGGRO); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp index 750df991f..1286139c3 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_xt002.cpp @@ -611,7 +611,7 @@ public: if (!urand(0, 2)) pXT002->AI()->Talk(EMOTE_SCRAPBOT); - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } } @@ -657,7 +657,7 @@ public: if (Unit* target = SelectTargetFromPlayerList(200)) AttackStart(target); else - me->DespawnOrUnsummon(500); + me->DespawnOrUnsummon(500ms); } void UpdateAI(uint32 diff) override diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp index 00e44dfe9..a944101a1 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp @@ -1807,7 +1807,7 @@ public: } me->ReplaceAllNpcFlags(UNIT_NPC_FLAG_NONE); - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); } private: diff --git a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp index a3d0626fa..41a35a583 100644 --- a/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp +++ b/src/server/scripts/Northrend/UtgardeKeep/UtgardeKeep/boss_keleseth.cpp @@ -80,7 +80,7 @@ struct npc_frost_tomb : public NullCreatureAI if (PrisonerGUID) if (Unit* p = ObjectAccessor::GetUnit(*me, PrisonerGUID)) p->RemoveAurasDueToSpell(SPELL_FROST_TOMB_AURA); - me->DespawnOrUnsummon(5000); + me->DespawnOrUnsummon(5s); } void UpdateAI(uint32 /*diff*/) override diff --git a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp index 6ac9bdbf3..326ac6e7a 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_ichoron.cpp @@ -344,7 +344,7 @@ public: if (Creature* pIchoron = pInstance->instance->GetCreature(pInstance->GetGuidData(DATA_ICHORON_GUID))) if (pIchoron->AI()) pIchoron->AI()->DoAction(ACTION_WATER_ELEMENT_KILLED); - me->DespawnOrUnsummon(2500); + me->DespawnOrUnsummon(2500ms); } void AttackStart(Unit* /*who*/) override {} diff --git a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp index f372215ff..7cfab3ed2 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_xevozz.cpp @@ -135,7 +135,7 @@ public: if (me->GetDistance(c) < 3.0f) { c->CastSpell(me, SPELL_ARCANE_POWER, false); - c->DespawnOrUnsummon(8000); + c->DespawnOrUnsummon(8s); found = true; } if (found) diff --git a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp index f7ec86e1b..65263e655 100644 --- a/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp +++ b/src/server/scripts/Northrend/VioletHold/boss_zuramat.cpp @@ -222,7 +222,7 @@ public: if (Creature* c = pInstance->instance->GetCreature(SummonedGUID)) c->DespawnOrUnsummon(); } - me->DespawnOrUnsummon(5000); + me->DespawnOrUnsummon(5s); } void SummonedCreatureDespawn(Creature* pSummoned) override diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp index 812bbe05c..12165fbac 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp @@ -205,7 +205,7 @@ public: break; case EVENT_SUMMON_SABOTEOUR: DoSummon(NPC_SABOTEOUR, me, 2.0f, 0, TEMPSUMMON_CORPSE_DESPAWN); - me->DespawnOrUnsummon(3000); + me->DespawnOrUnsummon(3s); break; } @@ -1136,7 +1136,7 @@ public: me->SetUnitFlag(UNIT_FLAG_NOT_SELECTABLE); me->SetDisplayId(11686); me->CastSpell(me, SPELL_TELEPORT_VISUAL, true); - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); } ++count; } diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index 2ff4dc6d2..eefd5f448 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -63,7 +63,7 @@ class spell_q11919_q11940_drake_hunt_aura : public AuraScript GetCaster()->CastSpell(GetCaster(), SPELL_DRAKE_HATCHLING_SUBDUED, true); owner->SetFaction(FACTION_FRIENDLY); owner->SetImmuneToAll(true); - owner->DespawnOrUnsummon(3 * MINUTE * IN_MILLISECONDS); + owner->DespawnOrUnsummon(180s); } void Register() override diff --git a/src/server/scripts/Northrend/zone_crystalsong_forest.cpp b/src/server/scripts/Northrend/zone_crystalsong_forest.cpp index a211b2202..1fb9ff67b 100644 --- a/src/server/scripts/Northrend/zone_crystalsong_forest.cpp +++ b/src/server/scripts/Northrend/zone_crystalsong_forest.cpp @@ -44,7 +44,7 @@ struct npc_preparations_for_war_vehicle : public NullCreatureAI WPPath* path = sSmartWaypointMgr->GetPath(me->GetEntry()); if (!path || path->empty()) { - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); return; } @@ -108,7 +108,7 @@ struct npc_preparations_for_war_vehicle : public NullCreatureAI if (me->GetDistance2d(x, y) < 10.0f) { - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); if (Vehicle* vehicle = me->GetVehicleKit()) if (Unit* passenger = vehicle->GetPassenger(0)) { diff --git a/src/server/scripts/Northrend/zone_dragonblight.cpp b/src/server/scripts/Northrend/zone_dragonblight.cpp index b8e657602..b406df171 100644 --- a/src/server/scripts/Northrend/zone_dragonblight.cpp +++ b/src/server/scripts/Northrend/zone_dragonblight.cpp @@ -491,9 +491,9 @@ public: HideNozdormu(); if (Creature* cr = GetCopy()) cr->AI()->Talk(SAY_HOURGLASS_END_2, GetPlayer()); - me->DespawnOrUnsummon(500); + me->DespawnOrUnsummon(500ms); if (GetCopy()) - GetCopy()->DespawnOrUnsummon(500); + GetCopy()->DespawnOrUnsummon(500ms); break; } } @@ -626,7 +626,7 @@ public: { Talk(0); me->RemoveAllAuras(); - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); if (TempSummon* summon = me->ToTempSummon()) if (Unit* owner = summon->GetSummonerUnit()) if (Player* player = owner->ToPlayer()) @@ -726,7 +726,7 @@ public: } case EVENT_TAKE_OFF: { - me->DespawnOrUnsummon(4050); + me->DespawnOrUnsummon(4050ms); me->SetOrientation(2.5f); me->SetSpeedRate(MOVE_FLIGHT, 1.0f); Position pos = me->GetPosition(); @@ -1055,12 +1055,12 @@ public: if (fromReset) { if (Creature* c = me->FindNearestCreature(NPC_SAC_LIGHTS_VENGEANCE, 150.0f, true)) - c->DespawnOrUnsummon(1); + c->DespawnOrUnsummon(1ms); if (Creature* c = me->FindNearestCreature(NPC_SAC_LIGHTS_VENGEANCE_VEH_1, 150.0f, true)) c->RemoveAllAuras(); } if (Creature* c = me->FindNearestCreature(NPC_SAC_LIGHTS_VENGEANCE_VEH_2, 150.0f, true)) - c->DespawnOrUnsummon(1); + c->DespawnOrUnsummon(1ms); if (GameObject* go = me->FindNearestGameObject(GO_SAC_LIGHTS_VENGEANCE_1, 150.0f)) go->Delete(); if (GameObject* go = me->FindNearestGameObject(GO_SAC_LIGHTS_VENGEANCE_2, 150.0f)) @@ -1289,18 +1289,18 @@ public: { c->CastSpell(v, SPELL_SAC_KILL_VEGARD, true); v->SetDisplayId(11686); - v->DespawnOrUnsummon(1000); + v->DespawnOrUnsummon(1s); b->CastSpell(b, SPELL_SAC_HOLY_BOMB_EXPLOSION, true); b->CastSpell(b, SPELL_SAC_SUMMON_GO_2, true); if (Unit* vb = c->GetVehicleBase()) { if (Unit* pass = vb->GetVehicleKit()->GetPassenger(0)) if (pass->IsCreature()) - pass->ToCreature()->DespawnOrUnsummon(1); + pass->ToCreature()->DespawnOrUnsummon(1ms); vb->RemoveAllAuras(); - vb->ToCreature()->DespawnOrUnsummon(1); + vb->ToCreature()->DespawnOrUnsummon(1ms); } - c->ToCreature()->DespawnOrUnsummon(1); + c->ToCreature()->DespawnOrUnsummon(1ms); } } break; @@ -1325,7 +1325,7 @@ public: if (spell->Id == SPELL_SAC_REPEL_HAMMER && target->IsCreature()) { target->CastSpell((Unit*)nullptr, SPELL_SAC_THROW_HAMMER, true); - target->ToCreature()->DespawnOrUnsummon(1); + target->ToCreature()->DespawnOrUnsummon(1ms); if (Unit* c = target->GetVehicleBase()) c->RemoveAurasDueToSpell(SPELL_SAC_HOLY_ZONE_AURA); } @@ -1559,7 +1559,7 @@ public: void JustDied(Unit* /*killer*/) override { Talk(1); - me->DespawnOrUnsummon(10000); + me->DespawnOrUnsummon(10s); if (Creature* c = me->FindNearestCreature(NPC_SAC_LICH_KING, 200.0f, true)) c->AI()->SetData(3, 3); } @@ -2062,7 +2062,7 @@ class spell_q12096_q12092_dummy : public SpellScript { tree->CastSpell(player, SPELL_CREATE_ITEM_BARK); tree->AI()->Talk(SAY_WALKER_FRIENDLY, player); - tree->DespawnOrUnsummon(1000); + tree->DespawnOrUnsummon(1s); } else if (roll == 0) // enemy version { @@ -2321,7 +2321,7 @@ class spell_dragonblight_devour_ghoul_periodic : public AuraScript if (GetUnitOwner() && GetUnitOwner()->ToCreature()) { GetUnitOwner()->ExitVehicle(); - GetUnitOwner()->ToCreature()->DespawnOrUnsummon(2000); + GetUnitOwner()->ToCreature()->DespawnOrUnsummon(2s); } } diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index 1084acac0..c6354f6d3 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -590,77 +590,77 @@ public: if (me->GetPositionY() == -2835.11f) { me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false); - me->DespawnOrUnsummon(20000); + me->DespawnOrUnsummon(20s); } if (me->GetPositionY() == -2981.89f) { me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false); - me->DespawnOrUnsummon(18000); + me->DespawnOrUnsummon(18s); } if (me->GetPositionY() == -2934.44f) { me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false); - me->DespawnOrUnsummon(9000); + me->DespawnOrUnsummon(9s); } if (me->GetPositionY() == -3020.99f) { me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false); - me->DespawnOrUnsummon(22000); + me->DespawnOrUnsummon(22s); } if (me->GetPositionY() == -2964.73f) { me->GetMotionMaster()->MovePath(WOUNDED_MOVE_2, false); - me->DespawnOrUnsummon(15000); + me->DespawnOrUnsummon(15s); } if (me->GetPositionY() == -2940.50f) { me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false); - me->DespawnOrUnsummon(20000); + me->DespawnOrUnsummon(20s); } if (me->GetPositionY() == -2847.93f) { me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false); - me->DespawnOrUnsummon(30000); + me->DespawnOrUnsummon(30s); } if (me->GetPositionY() == -2835.31f) { me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false); - me->DespawnOrUnsummon(27000); + me->DespawnOrUnsummon(27s); } if (me->GetPositionY() == -2822.20f) { me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false); - me->DespawnOrUnsummon(25000); + me->DespawnOrUnsummon(25s); } if (me->GetPositionY() == -2846.31f) { me->GetMotionMaster()->MovePath(WOUNDED_MOVE_1, false); - me->DespawnOrUnsummon(21000); + me->DespawnOrUnsummon(21s); } if (me->GetPositionY() == -2897.23f) { me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false); - me->DespawnOrUnsummon(15000); + me->DespawnOrUnsummon(15s); } if (me->GetPositionY() == -2886.01f) { me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false); - me->DespawnOrUnsummon(25000); + me->DespawnOrUnsummon(25s); } if (me->GetPositionY() == -2906.89f) { me->GetMotionMaster()->MovePath(WOUNDED_MOVE_3, false); - me->DespawnOrUnsummon(25000); + me->DespawnOrUnsummon(25s); } if (me->GetPositionY() == -3048.94f) { me->GetMotionMaster()->MovePath(WOUNDED_MOVE_2, false); - me->DespawnOrUnsummon(30000); + me->DespawnOrUnsummon(30s); } if (me->GetPositionY() == -2961.08f) { me->GetMotionMaster()->MovePath(WOUNDED_MOVE_2, false); - me->DespawnOrUnsummon(25000); + me->DespawnOrUnsummon(25s); } break; case EVENT_CLEAVE: @@ -871,7 +871,7 @@ public: { if (_following) if (!me->HasAura(SPELL_FROG_LOVE)) - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); _events.Update(diff); @@ -898,7 +898,7 @@ public: break; case EVENT_LAKEFROG_5: Talk(SAY_MAIDEN_1); - me->DespawnOrUnsummon(4000); + me->DespawnOrUnsummon(4s); break; default: break; diff --git a/src/server/scripts/Northrend/zone_howling_fjord.cpp b/src/server/scripts/Northrend/zone_howling_fjord.cpp index 6022af4bc..ddcd03de7 100644 --- a/src/server/scripts/Northrend/zone_howling_fjord.cpp +++ b/src/server/scripts/Northrend/zone_howling_fjord.cpp @@ -44,9 +44,9 @@ public: if (Creature* cow = me->FindNearestCreature(24797, 5.0f, true)) { me->CastSpell(me, 44460, true); - me->DespawnOrUnsummon(10000); + me->DespawnOrUnsummon(10s); cow->CastSpell(cow, 44460, true); - cow->DespawnOrUnsummon(10000); + cow->DespawnOrUnsummon(10s); if (me->IsSummon()) if (Unit* owner = me->ToTempSummon()->GetSummonerUnit()) owner->CastSpell(owner, 44463, true); diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp index d9b5d1ab5..fce6523ee 100644 --- a/src/server/scripts/Northrend/zone_icecrown.cpp +++ b/src/server/scripts/Northrend/zone_icecrown.cpp @@ -501,7 +501,7 @@ public: events.RescheduleEvent(EVENT_SOUL_COAX, 5s); } else - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); break; case EVENT_SOUL_COAX: Talk(SAY_ARETE_1); @@ -580,14 +580,14 @@ public: if (Creature* soul = ObjectAccessor::GetCreature(*me, _landgrenSoulGUID)) { soul->AI()->Talk(SAY_SOUL_4); - soul->DespawnOrUnsummon(2000); + soul->DespawnOrUnsummon(2s); } events.ScheduleEvent(EVENT_SCENE_10, 3s); break; case EVENT_SCENE_10: me->ReplaceAllNpcFlags(UNIT_NPC_FLAG_QUESTGIVER); Talk(SAY_ARETE_6); - me->DespawnOrUnsummon(60000); + me->DespawnOrUnsummon(60s); break; } } @@ -796,7 +796,7 @@ public: summon->SetUInt32Value(UNIT_NPC_EMOTESTATE, param); break; case ACTION_SUMMON_DESPAWN: - summon->DespawnOrUnsummon(param); + summon->DespawnOrUnsummon(Milliseconds(param)); break; case ACTION_SUMMON_ORIENTATION: summon->SetFacingTo(param / 100.0f); @@ -1022,9 +1022,9 @@ public: { if (summon->GetEntry() == NPC_TIRION_LICH_KING) summon->CastSpell(summon, SPELL_LICH_KINGS_FURY, false); - summon->DespawnOrUnsummon(summon->GetEntry() == NPC_TIRION_LICH_KING ? 10000 : 4000); + summon->DespawnOrUnsummon(summon->GetEntry() == NPC_TIRION_LICH_KING ? 10s : 4s); } - me->DespawnOrUnsummon(10000); + me->DespawnOrUnsummon(10s); break; } } @@ -1310,14 +1310,14 @@ public: turret->HandleSpellClick(owner, 0); return; } - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); break; case EVENT_START_FLIGHT: { WPPath* path = sSmartWaypointMgr->GetPath(me->GetEntry()); if (!path || path->empty()) { - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); return; } @@ -1342,7 +1342,7 @@ public: // Check if path is finished if (me->GetMotionMaster()->GetCurrentMovementGeneratorType() != ESCORT_MOTION_TYPE) { - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); return; } @@ -1381,7 +1381,7 @@ public: station->RemoveAurasDueToSpell(SPELL_INFRA_GREEN_SHIELD); } if (!playerPresent) - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } events.ScheduleEvent(EVENT_SYNCHRONIZE_SHIELDS, 1s); break; diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index d43a29a5e..16bfe5925 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -159,7 +159,7 @@ public: me->RemoveAllAurasExceptType(SPELL_AURA_MECHANIC_IMMUNITY); Talk(1); caster->ToPlayer()->KilledMonsterCredit(me->GetEntry()); - me->DespawnOrUnsummon(8000); + me->DespawnOrUnsummon(8s); me->GetMotionMaster()->MoveJump(8721.94f, -1955, 963, 70.0f, 30.0f); } } @@ -1149,13 +1149,13 @@ public: } else { - me->DespawnOrUnsummon(100); + me->DespawnOrUnsummon(100ms); } break; case 24: if (me->GetEntry() == NPC_PROPELLED_DEVICE_1) { - me->DespawnOrUnsummon(100); + me->DespawnOrUnsummon(100ms); } break; default: diff --git a/src/server/scripts/Northrend/zone_zuldrak.cpp b/src/server/scripts/Northrend/zone_zuldrak.cpp index 8b36a3106..3a91af290 100644 --- a/src/server/scripts/Northrend/zone_zuldrak.cpp +++ b/src/server/scripts/Northrend/zone_zuldrak.cpp @@ -591,7 +591,7 @@ public: // pointer check not needed DoCast(rageclaw, SPELL_FREE_RAGECLAW, true); _rageclawGUID.Clear(); - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } void SpellHit(Unit* caster, SpellInfo const* spell) override @@ -660,7 +660,7 @@ public: DoCast(me, SPELL_UNSHACKLED, true); Talk(SAY_RAGECLAW); me->GetMotionMaster()->MoveRandom(10); - me->DespawnOrUnsummon(10000); + me->DespawnOrUnsummon(10s); } } }; @@ -755,7 +755,7 @@ public: case EVENT_RECRUIT_2: me->SetWalk(true); me->GetMotionMaster()->MovePoint(0, me->GetPositionX() + (cos(_heading) * 10), me->GetPositionY() + (std::sin(_heading) * 10), me->GetPositionZ()); - me->DespawnOrUnsummon(5000); + me->DespawnOrUnsummon(5s); break; default: break; diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp index 2941b05da..93ae31450 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp @@ -1436,7 +1436,7 @@ class spell_illidan_parasitic_shadowfiend_trigger : public SpellScript { PreventHitDefaultEffect(effIndex); if (Creature* target = GetHitCreature()) - target->DespawnOrUnsummon(1); + target->DespawnOrUnsummon(1ms); } void Register() override @@ -1692,7 +1692,7 @@ class spell_illidan_cage_trap : public SpellScript if (GetCaster()->GetExactDist2d(target) < 4.0f) { target->AI()->DoAction(ACTION_ILLIDAN_CAGED); - GetCaster()->ToCreature()->DespawnOrUnsummon(1); + GetCaster()->ToCreature()->DespawnOrUnsummon(1ms); if (GameObject* gobject = GetCaster()->FindNearestGameObject(GO_CAGE_TRAP, 10.0f)) gobject->SetLootState(GO_JUST_DEACTIVATED); } diff --git a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp index 79d68ebfa..70e52726a 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp @@ -107,7 +107,7 @@ public: { summoner->GetAI()->DoAction(_action); _owner.SetStandState(UNIT_STAND_STATE_SUBMERGED); - _owner.DespawnOrUnsummon(200); + _owner.DespawnOrUnsummon(200ms); } return true; } diff --git a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp index 39e772386..a8c18e4aa 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_shade_of_akama.cpp @@ -391,7 +391,7 @@ struct npc_creature_generator_akama : public ScriptedAI void SummonedCreatureDies(Creature* summon, Unit*) override { spawnCounter--; - summon->DespawnOrUnsummon(10000); + summon->DespawnOrUnsummon(10s); summons.Despawn(summon); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp index 8ec98b72f..a9cd28a60 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp @@ -269,7 +269,7 @@ struct boss_fathomguard_sharkkis : public ScriptedAI { me->CastSpell(karathress, SPELL_POWER_OF_SHARKKIS, true); karathress->AI()->Talk(SAY_GAIN_ABILITY2); - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); } } @@ -452,7 +452,7 @@ struct boss_fathomguard_tidalvess : public ScriptedAI { me->CastSpell(karathress, SPELL_POWER_OF_TIDALVESS, true); karathress->AI()->Talk(SAY_GAIN_ABILITY1); - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); } } @@ -546,7 +546,7 @@ struct boss_fathomguard_caribdis : public ScriptedAI { me->CastSpell(karathress, SPELL_POWER_OF_CARIBDIS, true); karathress->AI()->Talk(SAY_GAIN_ABILITY3); - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); } } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp index 7ac8263d3..9d25ba77d 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lurker_below.cpp @@ -88,7 +88,7 @@ struct boss_the_lurker_below : public BossAI pool->SetRespawnTime(10); pool->SaveRespawnTime(10); } - me->DespawnOrUnsummon(2000); + me->DespawnOrUnsummon(2s); } void DamageTaken(Unit* /*attacker*/, uint32& damage, DamageEffectType /*type*/, SpellSchoolMask /*school*/) override diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp index 1551d7c81..15b91e685 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/instance_serpent_shrine.cpp @@ -234,7 +234,7 @@ class spell_serpentshrine_cavern_serpentshrine_parasite_trigger : public SpellSc { PreventHitDefaultEffect(effIndex); if (Creature* target = GetHitCreature()) - target->DespawnOrUnsummon(1); + target->DespawnOrUnsummon(1ms); } void Register() override diff --git a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp index c1d2c7d42..9f837911c 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SlavePens/boss_ahune.cpp @@ -619,7 +619,7 @@ struct npc_ahune_ice_spear_bunny : public ScriptedAI _scheduler.Schedule(2500ms, [this](TaskContext /*task*/) { DoCastSelf(SPELL_ICE_SPEAR_DELAY); - me->DespawnOrUnsummon(3500); + me->DespawnOrUnsummon(3500ms); }); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_hungarfen.cpp b/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_hungarfen.cpp index 73beb4eb0..a8b98b64c 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_hungarfen.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/underbog/boss_hungarfen.cpp @@ -123,7 +123,7 @@ struct npc_underbog_mushroom : public ScriptedAI context.Schedule(4s, [this](TaskContext /*context*/) { me->RemoveAurasDueToSpell(SPELL_GROW); - me->DespawnOrUnsummon(2000); + me->DespawnOrUnsummon(2s); }); } else diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp index 26a0c780b..b95e01b3e 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp @@ -155,7 +155,7 @@ struct boss_nazan : public ScriptedAI void EnterEvadeMode(EvadeReason /*why*/) override { - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } void JustEngagedWith(Unit*) override @@ -262,7 +262,7 @@ struct boss_vazruden : public ScriptedAI void EnterEvadeMode(EvadeReason /*why*/) override { Talk(SAY_WIPE); - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); } void JustEngagedWith(Unit*) override diff --git a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp index e37234663..df645e4ec 100644 --- a/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/MagtheridonsLair/boss_magtheridon.cpp @@ -284,7 +284,7 @@ struct npc_target_trigger : public ScriptedAI _scheduler.Schedule(5s, [this](TaskContext /*context*/) { DoCastSelf(SPELL_DEBRIS_DAMAGE); - me->DespawnOrUnsummon(6000); + me->DespawnOrUnsummon(6s); }); } } diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp index ba032cb9e..c12b5af84 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp @@ -1013,7 +1013,7 @@ class spell_kaelthas_flame_strike : public AuraScript { GetUnitOwner()->RemoveAllAuras(); GetUnitOwner()->CastSpell(GetUnitOwner(), SPELL_FLAME_STRIKE_DAMAGE, true); - GetUnitOwner()->ToCreature()->DespawnOrUnsummon(2000); + GetUnitOwner()->ToCreature()->DespawnOrUnsummon(2s); } void Register() override diff --git a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp index 81e4b4b5a..f9f862fd3 100644 --- a/src/server/scripts/Outland/zone_blades_edge_mountains.cpp +++ b/src/server/scripts/Outland/zone_blades_edge_mountains.cpp @@ -116,7 +116,7 @@ public: if (Creature* bunny = GetClosestCreatureWithEntry(me, NPC_EXPLOSION_BUNNY, 200.0f)) bunny->CastSpell(nullptr, SPELL_EXPLOSION, TRIGGERED_NONE); if (Creature* cannon = ObjectAccessor::GetCreature(*me, CannonGUID)) - cannon->DespawnOrUnsummon(5000); + cannon->DespawnOrUnsummon(5s); } me->SummonGameObject(GO_BIG_FIRE, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 60); @@ -460,7 +460,7 @@ public: Talk(SAY_SPELL_INFLUENCE, who); /// @todo Move the below to updateAI and run if this statement == true DoCast(who, SPELL_DISPELLING_ANALYSIS, true); - bird->DespawnOrUnsummon(2000); + bird->DespawnOrUnsummon(2s); } } } @@ -775,7 +775,7 @@ public: if (GameObject* relic = me->FindNearestGameObject(large ? GO_APEXIS_MONUMENT : GO_APEXIS_RELIC, searchDistance)) relic->RemoveGameObjectFlag(GO_FLAG_NOT_SELECTABLE); - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); } /* @@ -1086,7 +1086,7 @@ public: // Spell 37392 does not exist in dbc, manually spawning me->SummonCreature(NPC_OSCILLATING_FREQUENCY_SCANNER_TOP_BUNNY, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation(), TEMPSUMMON_TIMED_OR_DEAD_DESPAWN, 50000); me->SummonGameObject(GO_OSCILLATING_FREQUENCY_SCANNER, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), me->GetOrientation(), 0, 0, 0, 0, 50); - me->DespawnOrUnsummon(50000); + me->DespawnOrUnsummon(50s); } timer = 500; diff --git a/src/server/scripts/Outland/zone_nagrand.cpp b/src/server/scripts/Outland/zone_nagrand.cpp index 7f462f79e..863ed3eb2 100644 --- a/src/server/scripts/Outland/zone_nagrand.cpp +++ b/src/server/scripts/Outland/zone_nagrand.cpp @@ -464,7 +464,7 @@ public: player->KilledMonsterCredit(NPC_MAGHAR_PRISONER); prisoner->AI()->Talk(SAY_FREE, player); - prisoner->DespawnOrUnsummon(6000); + prisoner->DespawnOrUnsummon(6s); } return true; diff --git a/src/server/scripts/Pet/pet_generic.cpp b/src/server/scripts/Pet/pet_generic.cpp index 805e50000..40c92b673 100644 --- a/src/server/scripts/Pet/pet_generic.cpp +++ b/src/server/scripts/Pet/pet_generic.cpp @@ -327,7 +327,7 @@ struct npc_pet_gen_argent_pony_bridle : public ScriptedAI creature->CastSpell(creature, spellId, true); player->AddSpellCooldown(spellId, 0, 3 * MINUTE * IN_MILLISECONDS); player->AddSpellCooldown(player->GetTeamId(true) ? SPELL_AURA_TIRED_G : SPELL_AURA_TIRED_S, 0, 3 * MINUTE * IN_MILLISECONDS + 4 * HOUR * IN_MILLISECONDS); - creature->DespawnOrUnsummon(3 * MINUTE * IN_MILLISECONDS); + creature->DespawnOrUnsummon(180s); } return true; } @@ -388,7 +388,7 @@ struct npc_pet_gen_target_following_bomb : public NullCreatureAI if (me->GetDistance(target) < 3.0f) { me->CastSpell(me, bombSpellId, false); - me->DespawnOrUnsummon(500); + me->DespawnOrUnsummon(500ms); } } else if (!me->HasUnitState(UNIT_STATE_FOLLOW)) @@ -557,7 +557,7 @@ struct npc_pet_gen_imp_in_a_bottle : public NullCreatureAI if (_talkTimer >= 5000) { _talkTimer = 0; - me->DespawnOrUnsummon(1); + me->DespawnOrUnsummon(1ms); if (!_hasParty) Talk(0, ObjectAccessor::GetPlayer(*me, _ownerGUID)); else if (Player* player = ObjectAccessor::GetPlayer(*me, _ownerGUID)) diff --git a/src/server/scripts/Spells/spell_generic.cpp b/src/server/scripts/Spells/spell_generic.cpp index fcd58e2f7..a3a62ae7e 100644 --- a/src/server/scripts/Spells/spell_generic.cpp +++ b/src/server/scripts/Spells/spell_generic.cpp @@ -3706,7 +3706,7 @@ class spell_gen_despawn_self : public SpellScript void HandleDummy(SpellEffIndex effIndex) { if (GetSpellInfo()->Effects[effIndex].Effect == SPELL_EFFECT_DUMMY || GetSpellInfo()->Effects[effIndex].Effect == SPELL_EFFECT_SCRIPT_EFFECT) - GetCaster()->ToCreature()->DespawnOrUnsummon(1); + GetCaster()->ToCreature()->DespawnOrUnsummon(1ms); } void Register() override diff --git a/src/server/scripts/Spells/spell_hunter.cpp b/src/server/scripts/Spells/spell_hunter.cpp index d3325403a..8ec480ca0 100644 --- a/src/server/scripts/Spells/spell_hunter.cpp +++ b/src/server/scripts/Spells/spell_hunter.cpp @@ -302,7 +302,7 @@ class spell_hun_taming_the_beast : public AuraScript { if (Unit* target = GetTarget()) if (Creature* creature = target->ToCreature()) - creature->DespawnOrUnsummon(1); + creature->DespawnOrUnsummon(1ms); } void Register() override diff --git a/src/server/scripts/Spells/spell_item.cpp b/src/server/scripts/Spells/spell_item.cpp index 5b458f44c..e99d56478 100644 --- a/src/server/scripts/Spells/spell_item.cpp +++ b/src/server/scripts/Spells/spell_item.cpp @@ -347,7 +347,7 @@ class spell_item_rocket_chicken : public AuraScript { if (roll_chance_i(5)) { - GetTarget()->ToCreature()->DespawnOrUnsummon(8000); + GetTarget()->ToCreature()->DespawnOrUnsummon(8s); GetTarget()->Kill(GetTarget(), GetTarget()); } else if (roll_chance_i(50)) @@ -468,7 +468,7 @@ class spell_item_toxic_wasteling : public SpellScript GetCaster()->GetMotionMaster()->MoveIdle(); GetCaster()->ToCreature()->SetHomePosition(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 0.0f); GetCaster()->GetMotionMaster()->MoveJump(target->GetPositionX(), target->GetPositionY(), target->GetPositionZ(), 12.0f, 3.0f, 1); - target->DespawnOrUnsummon(1500); + target->DespawnOrUnsummon(1500ms); } } @@ -505,7 +505,7 @@ class spell_item_lil_xt : public SpellScript return; if (GetCaster()->IsCreature() && GetCaster()->ToCreature()->AI()) GetCaster()->ToCreature()->AI()->Talk(2); - target->DespawnOrUnsummon(500); + target->DespawnOrUnsummon(500ms); } void Register() override diff --git a/src/server/scripts/Spells/spell_quest.cpp b/src/server/scripts/Spells/spell_quest.cpp index 704a35424..9020cb991 100644 --- a/src/server/scripts/Spells/spell_quest.cpp +++ b/src/server/scripts/Spells/spell_quest.cpp @@ -68,7 +68,7 @@ class spell_q11065_wrangle_some_aether_rays_aura : public AuraScript { cr->CastSpell(player, 40926, true); cr->GetMotionMaster()->MoveFollow(player, 5.0f, 2 * M_PI * rand_norm()); - ar->ToCreature()->DespawnOrUnsummon(500); + ar->ToCreature()->DespawnOrUnsummon(500ms); } } } @@ -756,10 +756,10 @@ private: uint32 _originalEntry; uint32 _newEntry; bool _shouldAttack; - uint32 _despawnTime; + Milliseconds _despawnTime; public: - spell_generic_quest_update_entry_SpellScript(uint16 spellEffect, uint8 effIndex, uint32 originalEntry, uint32 newEntry, bool shouldAttack, uint32 despawnTime = 0) : + spell_generic_quest_update_entry_SpellScript(uint16 spellEffect, uint8 effIndex, uint32 originalEntry, uint32 newEntry, bool shouldAttack, Milliseconds despawnTime = 0ms) : SpellScript(), _spellEffect(spellEffect), _effIndex(effIndex), _originalEntry(originalEntry), _newEntry(newEntry), _shouldAttack(shouldAttack), _despawnTime(despawnTime) { } @@ -772,7 +772,7 @@ public: if (_shouldAttack && creatureTarget->IsAIEnabled) creatureTarget->AI()->AttackStart(GetCaster()); - if (_despawnTime) + if (_despawnTime > 0ms) creatureTarget->DespawnOrUnsummon(_despawnTime); } } @@ -900,10 +900,11 @@ enum Quests6124_6129Data NPC_SICKLY_GAZELLE = 12296, NPC_CURED_GAZELLE = 12297, NPC_SICKLY_DEER = 12298, - NPC_CURED_DEER = 12299, - DESPAWN_TIME = 30000 + NPC_CURED_DEER = 12299 }; +constexpr Milliseconds DESPAWN_TIME = 30s; + class spell_q6124_6129_apply_salve : public SpellScript { PrepareSpellScript(spell_q6124_6129_apply_salve); @@ -1372,7 +1373,7 @@ class spell_q12937_relief_for_the_fallen : public AuraScript if (target && target->ToCreature()) { caster->KilledMonsterCredit(NPC_FALLEN_EARTHEN_DEFENDER); - target->ToCreature()->DespawnOrUnsummon(5000); + target->ToCreature()->DespawnOrUnsummon(5s); target->SetStandState(UNIT_STAND_STATE_STAND); target->ToCreature()->AI()->Talk(TALK_FALLEN_EARTHEN_HEALED); @@ -1513,7 +1514,7 @@ class spell_q9874_liquid_fire : public SpellScript { caster->KilledMonsterCredit(NPC_VILLAGER_KILL_CREDIT); target->CastSpell(target, SPELL_FLAMES, true); - target->DespawnOrUnsummon(20000); + target->DespawnOrUnsummon(20s); } } @@ -1560,7 +1561,7 @@ class spell_q12805_lifeblood_dummy : public SpellScript caster->KilledMonsterCredit(NPC_SHARD_KILL_CREDIT); target->CastSpell(target, uint32(GetEffectValue()), true); - target->DespawnOrUnsummon(2000); + target->DespawnOrUnsummon(2s); } void Register() override @@ -2144,7 +2145,7 @@ class spell_q12690_burst_at_the_seams : public SpellScript void HandleScript(SpellEffIndex /*effIndex*/) { - GetCaster()->ToCreature()->DespawnOrUnsummon(2 * IN_MILLISECONDS); + GetCaster()->ToCreature()->DespawnOrUnsummon(2s); } void Register() override diff --git a/src/server/scripts/World/boss_emerald_dragons.cpp b/src/server/scripts/World/boss_emerald_dragons.cpp index 458984900..6caf5982d 100644 --- a/src/server/scripts/World/boss_emerald_dragons.cpp +++ b/src/server/scripts/World/boss_emerald_dragons.cpp @@ -476,7 +476,7 @@ public: if (moveType == FOLLOW_MOTION_TYPE && data == _summonerGuid.GetCounter()) { me->CastSpell((Unit*)nullptr, SPELL_DARK_OFFERING, false); - me->DespawnOrUnsummon(1000); + me->DespawnOrUnsummon(1s); } } diff --git a/src/server/scripts/World/go_scripts.cpp b/src/server/scripts/World/go_scripts.cpp index 8b92bed07..b28ffaade 100644 --- a/src/server/scripts/World/go_scripts.cpp +++ b/src/server/scripts/World/go_scripts.cpp @@ -283,7 +283,7 @@ public: for (std::list::const_iterator itr = cList.begin(); itr != cList.end(); ++itr) { player->KilledMonsterCredit(NPC_WINTERFIN_TADPOLE); - (*itr)->DespawnOrUnsummon(urand(45000, 60000)); + (*itr)->DespawnOrUnsummon(randtime(45s, 60s)); (*itr)->GetMotionMaster()->MoveFollow(player, 1.0f, frand(0.0f, 2 * M_PI), MOTION_SLOT_CONTROLLED); } } @@ -1694,7 +1694,7 @@ public: for (std::list::const_iterator itr = childrenList.begin(); itr != childrenList.end(); ++itr) { player->KilledMonsterCredit(NPC_CAPTIVE_CHILD, (*itr)->GetGUID()); - (*itr)->DespawnOrUnsummon(5000); + (*itr)->DespawnOrUnsummon(5s); (*itr)->GetMotionMaster()->MovePoint(1, go->GetPositionX() + 5, go->GetPositionY(), go->GetPositionZ()); (*itr)->AI()->Talk(SAY_FREE_0); (*itr)->GetMotionMaster()->Clear(); diff --git a/src/server/scripts/World/npc_stave_of_ancients.cpp b/src/server/scripts/World/npc_stave_of_ancients.cpp index 2c318f274..159ff1e72 100644 --- a/src/server/scripts/World/npc_stave_of_ancients.cpp +++ b/src/server/scripts/World/npc_stave_of_ancients.cpp @@ -42,7 +42,7 @@ void NPCStaveQuestAI::RevealForm() { me->UpdateEntry(GetFormEntry("evil")); me->SetFullHealth(); - me->DespawnOrUnsummon(900000); + me->DespawnOrUnsummon(900s); } } @@ -373,7 +373,7 @@ public: SetHomePosition(); me->SetUnitFlag(UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_ATTACKABLE_1); me->SetImmuneToAll(true); - me->DespawnOrUnsummon(5000); + me->DespawnOrUnsummon(5s); break; } events.Repeat(2s); @@ -476,7 +476,7 @@ public: { if (flaggedForDespawn) { - me->DespawnOrUnsummon(0); + me->DespawnOrUnsummon(0ms); flaggedForDespawn = false; } } @@ -640,7 +640,7 @@ public: } else { - Precious()->DespawnOrUnsummon(0); + Precious()->DespawnOrUnsummon(0ms); } } @@ -765,9 +765,9 @@ public: me->SetUnitFlag(UNIT_FLAG_DISABLE_MOVE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_NOT_ATTACKABLE_1); me->SetImmuneToAll(true); - Precious()->DespawnOrUnsummon(5000); + Precious()->DespawnOrUnsummon(5s); - me->DespawnOrUnsummon(5000); + me->DespawnOrUnsummon(5s); break; } events.Repeat(2s); @@ -978,7 +978,7 @@ public: me->CombatStop(true); me->Say(NELSON_DESPAWN_SAY); me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); - me->DespawnOrUnsummon(5000); + me->DespawnOrUnsummon(5s); break; } events.Repeat(2s); @@ -1149,7 +1149,7 @@ public: me->CombatStop(true); me->Say(FRANKLIN_DESPAWN_SAY); me->HandleEmoteCommand(EMOTE_ONESHOT_TALK); - me->DespawnOrUnsummon(5000); + me->DespawnOrUnsummon(5s); break; } events.Repeat(2s); From 8560c4825acfa14566bfd28f6d04f1912302c743 Mon Sep 17 00:00:00 2001 From: killerwife Date: Mon, 13 Oct 2025 13:05:03 +0200 Subject: [PATCH 102/140] fix(Scripts/Commands): inverted display in chat for gm fly (#23222) --- src/server/scripts/Commands/cs_gm.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/scripts/Commands/cs_gm.cpp b/src/server/scripts/Commands/cs_gm.cpp index 69fec5a02..3680aea36 100644 --- a/src/server/scripts/Commands/cs_gm.cpp +++ b/src/server/scripts/Commands/cs_gm.cpp @@ -100,8 +100,8 @@ public: } else { - canFly = handler->GetSession()->GetPlayer()->CanFly(); - target->SetCanFly(!canFly); + canFly = !handler->GetSession()->GetPlayer()->CanFly(); + target->SetCanFly(canFly); } handler->PSendSysMessage(LANG_COMMAND_FLYMODE_STATUS, handler->GetNameLink(target), canFly ? "on" : "off"); From 9ff1d3f06ade75202ac7fd315c041398db8349aa Mon Sep 17 00:00:00 2001 From: Andrew <47818697+Nyeriah@users.noreply.github.com> Date: Mon, 13 Oct 2025 09:56:17 -0300 Subject: [PATCH 103/140] fix(Core/Map): Fix zone player count update on player removal (#23211) --- src/server/game/Maps/Map.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 85f8275e8..21652342a 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -422,7 +422,9 @@ void Map::UpdatePlayerZoneStats(uint32 oldZone, uint32 newZone) else --oldZoneCount; } - ++_zonePlayerCountMap[newZone]; + + if (newZone != MAP_INVALID_ZONE) + ++_zonePlayerCountMap[newZone]; } void Map::Update(const uint32 t_diff, const uint32 s_diff, bool /*thread*/) @@ -696,8 +698,8 @@ struct ResetNotifier void Map::RemovePlayerFromMap(Player* player, bool remove) { - // Before leaving map, update zone/area for stats - player->UpdateZone(MAP_INVALID_ZONE, 0); + UpdatePlayerZoneStats(player->GetZoneId(), MAP_INVALID_ZONE); + player->getHostileRefMgr().deleteReferences(true); // pussywizard: multithreading crashfix player->RemoveFromWorld(); From 5aa31618856ad552c402a17b31f57dc5c57b88aa Mon Sep 17 00:00:00 2001 From: Takenbacon Date: Mon, 13 Oct 2025 08:36:42 -0700 Subject: [PATCH 104/140] fix(Core/Object): Improve safety of visibility override containers (#23219) --- src/server/game/Entities/Object/Object.cpp | 54 ++++++++++++++++------ src/server/game/Entities/Object/Object.h | 3 ++ src/server/game/Maps/Map.cpp | 2 - 3 files changed, 42 insertions(+), 17 deletions(-) diff --git a/src/server/game/Entities/Object/Object.cpp b/src/server/game/Entities/Object/Object.cpp index a183d1467..d39645bb4 100644 --- a/src/server/game/Entities/Object/Object.cpp +++ b/src/server/game/Entities/Object/Object.cpp @@ -1095,23 +1095,45 @@ void WorldObject::SetVisibilityDistanceOverride(VisibilityDistanceType type) if (type == GetVisibilityOverrideType()) return; - if (IsPlayer()) + if (!IsCreature() && !IsGameObject() && !IsDynamicObject()) return; - if (IsVisibilityOverridden()) - { - if (IsFarVisible()) - GetMap()->RemoveWorldObjectFromFarVisibleMap(this); - else if (IsZoneWideVisible()) - GetMap()->RemoveWorldObjectFromZoneWideVisibleMap(GetZoneId(), this); - } - - if (type == VisibilityDistanceType::Large || type == VisibilityDistanceType::Gigantic) - GetMap()->AddWorldObjectToFarVisibleMap(this); - else if (type == VisibilityDistanceType::Infinite) - GetMap()->AddWorldObjectToZoneWideVisibleMap(GetZoneId(), this); + // Important to remove from old visibility override containers first + RemoveFromMapVisibilityOverrideContainers(); + // Always update _visibilityDistanceOverrideType, even when not in world _visibilityDistanceOverrideType = type; + + // Finally, add to new visibility override containers + AddToMapVisibilityOverrideContainers(); +} + +void WorldObject::RemoveFromMapVisibilityOverrideContainers() +{ + if (!IsVisibilityOverridden()) + return; + + if (!IsInWorld()) + return; + + if (IsFarVisible()) + GetMap()->RemoveWorldObjectFromFarVisibleMap(this); + else if (IsZoneWideVisible()) + GetMap()->RemoveWorldObjectFromZoneWideVisibleMap(_zoneId, this); +} + +void WorldObject::AddToMapVisibilityOverrideContainers() +{ + if (!IsVisibilityOverridden()) + return; + + if (!IsInWorld()) + return; + + if (IsFarVisible()) + GetMap()->AddWorldObjectToFarVisibleMap(this); + else if (IsZoneWideVisible()) + GetMap()->AddWorldObjectToZoneWideVisibleMap(_zoneId, this); } void WorldObject::CleanupsBeforeDelete(bool /*finalCleanup*/) @@ -1177,6 +1199,9 @@ void WorldObject::AddToWorld() Object::AddToWorld(); GetMap()->GetZoneAndAreaId(GetPhaseMask(), _zoneId, _areaId, GetPositionX(), GetPositionY(), GetPositionZ()); GetMap()->AddObjectToPendingUpdateList(this); + + if (IsZoneWideVisible()) + GetMap()->AddWorldObjectToZoneWideVisibleMap(_zoneId, this); } void WorldObject::RemoveFromWorld() @@ -1184,8 +1209,7 @@ void WorldObject::RemoveFromWorld() if (!IsInWorld()) return; - if (IsZoneWideVisible()) - GetMap()->RemoveWorldObjectFromZoneWideVisibleMap(GetZoneId(), this); + RemoveFromMapVisibilityOverrideContainers(); DestroyForVisiblePlayers(); diff --git a/src/server/game/Entities/Object/Object.h b/src/server/game/Entities/Object/Object.h index 23784c9c6..141a7cf73 100644 --- a/src/server/game/Entities/Object/Object.h +++ b/src/server/game/Entities/Object/Object.h @@ -780,6 +780,9 @@ private: //bool CanDetectStealthOf(WorldObject const* obj) const; bool CanDetectStealthOf(WorldObject const* obj, bool checkAlert = false) const; + void RemoveFromMapVisibilityOverrideContainers(); + void AddToMapVisibilityOverrideContainers(); + GuidUnorderedSet _allowedLooters; ObjectVisibilityContainer _objectVisibilityContainer; diff --git a/src/server/game/Maps/Map.cpp b/src/server/game/Maps/Map.cpp index 21652342a..906b3b966 100644 --- a/src/server/game/Maps/Map.cpp +++ b/src/server/game/Maps/Map.cpp @@ -727,8 +727,6 @@ void Map::RemoveFromMap(T* obj, bool remove) obj->RemoveFromWorld(); obj->RemoveFromGrid(); - if (obj->IsFarVisible()) - RemoveWorldObjectFromFarVisibleMap(obj); obj->ResetMap(); From b8042b7a733ee844f30bb4da6cc7c958421d9c4d Mon Sep 17 00:00:00 2001 From: Rocco Silipo <108557877+Rorschach91@users.noreply.github.com> Date: Tue, 14 Oct 2025 22:14:37 +0200 Subject: [PATCH 105/140] fix(DB/SAI): Move Westfall Infantries waypoints to Waypoint_Data table. (#23232) --- .../pending_db_world/Westfall_Infantry.sql | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 data/sql/updates/pending_db_world/Westfall_Infantry.sql diff --git a/data/sql/updates/pending_db_world/Westfall_Infantry.sql b/data/sql/updates/pending_db_world/Westfall_Infantry.sql new file mode 100644 index 000000000..bb3f53997 --- /dev/null +++ b/data/sql/updates/pending_db_world/Westfall_Infantry.sql @@ -0,0 +1,19 @@ + +-- Move Waypoint from 'waypoints' to 'waypoint_data' +DELETE FROM `waypoints` WHERE `entry` = 27482; +DELETE FROM `waypoint_data` WHERE `id` = 2748200; +INSERT INTO `waypoint_data` (`id`, `point`, `position_x`, `position_y`, `position_z`, `orientation`, `delay`, `move_type`, `action`, `action_chance`, `wpguid`) VALUES +(2748200, 1, 4105.28, -2917.96, 280.32, NULL, 0, 1, 0, 100, 0), +(2748200, 2, 4048.68, -2936.74, 275.192, NULL, 0, 1, 0, 100, 0); + +-- Edit SmartAI +UPDATE `creature_template` SET `AIName` = 'SmartAI' WHERE `entry` = 27482; + +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 27482) AND (`source_type` = 0) AND (`id` IN (5)); +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 +(27482, 0, 5, 0, 109, 0, 100, 0, 0, 2748200, 0, 0, 0, 0, 41, 2000, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Wounded Westfall Infantry - On Path 2748200 Finished - Despawn In 2000 ms'); + +-- Edit Action List +DELETE FROM `smart_scripts` WHERE (`entryorguid` = 2748200) AND (`source_type` = 9) AND (`id` IN (5)); +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 +(2748200, 9, 5, 0, 0, 0, 100, 0, 4000, 4000, 0, 0, 0, 0, 232, 2748200, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 'Wounded Westfall Infantry - Actionlist - Start Path 2748200'); From c28f6354087a96a152b2bbde9240df4baf1b0062 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 14 Oct 2025 20:16:23 +0000 Subject: [PATCH 106/140] chore(DB): import pending files Referenced commit(s): b8042b7a733ee844f30bb4da6cc7c958421d9c4d --- .../Westfall_Infantry.sql => db_world/2025_10_14_00.sql} | 1 + 1 file changed, 1 insertion(+) rename data/sql/updates/{pending_db_world/Westfall_Infantry.sql => db_world/2025_10_14_00.sql} (97%) diff --git a/data/sql/updates/pending_db_world/Westfall_Infantry.sql b/data/sql/updates/db_world/2025_10_14_00.sql similarity index 97% rename from data/sql/updates/pending_db_world/Westfall_Infantry.sql rename to data/sql/updates/db_world/2025_10_14_00.sql index bb3f53997..7d8e03c18 100644 --- a/data/sql/updates/pending_db_world/Westfall_Infantry.sql +++ b/data/sql/updates/db_world/2025_10_14_00.sql @@ -1,3 +1,4 @@ +-- DB update 2025_10_12_06 -> 2025_10_14_00 -- Move Waypoint from 'waypoints' to 'waypoint_data' DELETE FROM `waypoints` WHERE `entry` = 27482; From 10d5a3c553d8610e5e7fea72f2a298bcbdc11d10 Mon Sep 17 00:00:00 2001 From: killerwife Date: Tue, 14 Oct 2025 22:54:19 +0200 Subject: [PATCH 107/140] fix(Core/Unit): rework Walk/Run mode (#22988) Co-authored-by: sudlud Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- .../game/AI/ScriptedAI/ScriptedCreature.cpp | 5 ++ .../game/AI/ScriptedAI/ScriptedCreature.h | 2 + .../game/AI/ScriptedAI/ScriptedEscortAI.cpp | 38 ++--------- .../game/AI/ScriptedAI/ScriptedEscortAI.h | 4 +- src/server/game/AI/SmartScripts/SmartAI.cpp | 31 ++------- src/server/game/AI/SmartScripts/SmartAI.h | 6 +- .../game/AI/SmartScripts/SmartScript.cpp | 28 ++++----- .../game/AI/SmartScripts/SmartScriptMgr.cpp | 15 +++-- .../game/AI/SmartScripts/SmartScriptMgr.h | 4 +- .../game/Entities/Creature/CreatureData.h | 12 ++-- src/server/game/Entities/Unit/Unit.h | 4 +- src/server/game/Movement/MotionMaster.cpp | 45 +++++++------ src/server/game/Movement/MotionMaster.h | 19 ++++-- .../ConfusedMovementGenerator.cpp | 1 + .../EscortMovementGenerator.cpp | 10 +++ .../EscortMovementGenerator.h | 3 +- .../HomeMovementGenerator.cpp | 2 - .../PointMovementGenerator.cpp | 15 +++++ .../PointMovementGenerator.h | 19 +++--- .../RandomMovementGenerator.cpp | 17 ++++- .../TargetedMovementGenerator.cpp | 1 - .../WaypointMovementGenerator.cpp | 1 - src/server/game/Scripting/MapScripts.cpp | 2 +- .../BlackrockDepths/blackrock_depths.cpp | 4 +- .../boss_quartermaster_zigris.cpp | 4 +- .../MoltenCore/boss_majordomo_executus.cpp | 2 +- .../EasternKingdoms/Karazhan/karazhan.cpp | 2 +- .../ScarletEnclave/chapter1.cpp | 2 +- .../ScarletEnclave/chapter5.cpp | 8 +-- .../SunwellPlateau/boss_brutallus.cpp | 2 +- .../SunwellPlateau/boss_felmyst.cpp | 14 ++--- .../SunwellPlateau/boss_kiljaeden.cpp | 17 ++--- .../EasternKingdoms/zone_arathi_highlands.cpp | 4 +- .../EasternKingdoms/zone_elwynn_forest.cpp | 4 +- .../EasternKingdoms/zone_ghostlands.cpp | 2 +- .../EasternKingdoms/zone_hinterlands.cpp | 4 +- .../zone_redridge_mountains.cpp | 2 +- .../zone_silverpine_forest.cpp | 2 +- .../EasternKingdoms/zone_stormwind_city.cpp | 4 +- .../EasternKingdoms/zone_undercity.cpp | 63 ++++++++++--------- .../scripts/EasternKingdoms/zone_westfall.cpp | 4 +- .../scripts/EasternKingdoms/zone_wetlands.cpp | 6 +- .../culling_of_stratholme.cpp | 17 ++--- .../EscapeFromDurnholdeKeep/old_hillsbrad.cpp | 11 ++-- .../TheBlackMorass/the_black_morass.cpp | 2 +- .../Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp | 3 +- .../scripts/Kalimdor/zone_ashenvale.cpp | 2 +- .../scripts/Kalimdor/zone_azuremyst_isle.cpp | 2 +- .../scripts/Kalimdor/zone_darkshore.cpp | 2 +- src/server/scripts/Kalimdor/zone_desolace.cpp | 3 +- .../scripts/Kalimdor/zone_moonglade.cpp | 2 +- .../Kalimdor/zone_stonetalon_mountains.cpp | 2 +- src/server/scripts/Kalimdor/zone_tanaris.cpp | 2 +- .../scripts/Kalimdor/zone_the_barrens.cpp | 6 +- .../Kalimdor/zone_thousand_needles.cpp | 4 +- .../scripts/Kalimdor/zone_ungoro_crater.cpp | 2 +- .../scripts/Kalimdor/zone_winterspring.cpp | 2 +- .../AzjolNerub/AzjolNerub/boss_hadronox.cpp | 2 +- .../ahnkahet/boss_jedoga_shadowseeker.cpp | 10 +-- .../RubySanctum/boss_general_zarithrian.cpp | 3 +- .../RubySanctum/boss_saviana_ragefire.cpp | 6 +- .../boss_argent_challenge.cpp | 3 +- .../TrialOfTheChampion/boss_black_knight.cpp | 3 +- .../boss_grand_champions.cpp | 3 +- .../HallsOfReflection/halls_of_reflection.cpp | 16 ++--- .../FrozenHalls/PitOfSaron/pit_of_saron.cpp | 8 +-- .../scripts/Northrend/Gundrak/boss_eck.cpp | 2 +- .../boss_deathbringer_saurfang.cpp | 4 +- .../boss_icecrown_gunship_battle.cpp | 12 ++-- .../IcecrownCitadel/boss_the_lich_king.cpp | 2 +- .../IcecrownCitadel/icecrown_citadel.cpp | 5 +- .../Naxxramas/instance_naxxramas.cpp | 2 +- .../Nexus/EyeOfEternity/boss_malygos.cpp | 11 ++-- .../HallsOfLightning/boss_bjarngrim.cpp | 2 +- .../Ulduar/HallsOfStone/brann_bronzebeard.cpp | 8 ++- .../Ulduar/Ulduar/boss_assembly_of_iron.cpp | 2 +- .../Ulduar/Ulduar/boss_flame_leviathan.cpp | 5 +- .../Northrend/Ulduar/Ulduar/boss_mimiron.cpp | 16 ++--- .../Ulduar/Ulduar/boss_razorscale.cpp | 2 +- .../Northrend/Ulduar/Ulduar/boss_thorim.cpp | 6 +- .../Ulduar/Ulduar/boss_yoggsaron.cpp | 3 +- .../Northrend/VioletHold/violet_hold.cpp | 6 +- .../scripts/Northrend/zone_borean_tundra.cpp | 9 +-- .../Northrend/zone_crystalsong_forest.cpp | 2 +- src/server/scripts/Northrend/zone_dalaran.cpp | 2 +- .../scripts/Northrend/zone_grizzly_hills.cpp | 2 +- .../scripts/Northrend/zone_howling_fjord.cpp | 4 +- .../scripts/Northrend/zone_icecrown.cpp | 7 +-- .../scripts/Northrend/zone_sholazar_basin.cpp | 2 +- .../scripts/Northrend/zone_storm_peaks.cpp | 11 +++- .../Outland/BlackTemple/boss_illidan.cpp | 4 +- .../BlackTemple/boss_reliquary_of_souls.cpp | 4 +- .../boss_fathomlord_karathress.cpp | 2 +- .../SerpentShrine/boss_lady_vashj.cpp | 2 +- .../boss_vazruden_the_herald.cpp | 6 +- .../Outland/TempestKeep/Eye/boss_alar.cpp | 6 +- .../Outland/TempestKeep/Eye/boss_kaelthas.cpp | 2 +- .../Outland/zone_hellfire_peninsula.cpp | 8 +-- src/server/scripts/Outland/zone_nagrand.cpp | 8 +-- .../scripts/Outland/zone_netherstorm.cpp | 7 ++- .../Outland/zone_shadowmoon_valley.cpp | 2 +- .../scripts/Outland/zone_shattrath_city.cpp | 2 +- .../scripts/Outland/zone_terokkar_forest.cpp | 2 +- src/server/scripts/World/npcs_special.cpp | 3 +- 104 files changed, 373 insertions(+), 362 deletions(-) diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp index 7a009d0ae..bbef2c4a7 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.cpp @@ -552,6 +552,11 @@ void ScriptedAI::SetEquipmentSlots(bool loadDefault, int32 mainHand /*= EQUIP_NO } } +void ScriptedAI::SetRun(bool run) +{ + me->SetWalk(!run); +} + enum eNPCs { NPC_BROODLORD = 12017, diff --git a/src/server/game/AI/ScriptedAI/ScriptedCreature.h b/src/server/game/AI/ScriptedAI/ScriptedCreature.h index c5c71af9f..d3a13f300 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedCreature.h +++ b/src/server/game/AI/ScriptedAI/ScriptedCreature.h @@ -227,6 +227,8 @@ struct ScriptedAI : public CreatureAI // Called when AI is temporarily replaced or put back when possess is applied or removed void OnPossess(bool /*apply*/) {} + void SetRun(bool run); + enum class Axis { AXIS_X, diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp index ddabc130f..7fe07cf1e 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp +++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.cpp @@ -33,7 +33,6 @@ npc_escortAI::npc_escortAI(Creature* creature) : ScriptedAI(creature), MaxPlayerDistance(DEFAULT_MAX_PLAYER_DISTANCE), m_pQuestForEscort(nullptr), m_bIsActiveAttacker(true), - m_bIsRunning(false), m_bCanInstantRespawn(false), m_bCanReturnToStart(false), DespawnAtEnd(true), @@ -186,9 +185,8 @@ void npc_escortAI::JustRespawned() void npc_escortAI::ReturnToLastPoint() { float x, y, z, o; - me->SetWalk(false); me->GetHomePosition(x, y, z, o); - me->GetMotionMaster()->MovePoint(POINT_LAST_POINT, x, y, z); + me->GetMotionMaster()->MovePoint(POINT_LAST_POINT, x, y, z, FORCED_MOVEMENT_RUN); } void npc_escortAI::EnterEvadeMode(EvadeReason /*why*/) @@ -329,7 +327,6 @@ void npc_escortAI::MovementInform(uint32 moveType, uint32 pointId) { LOG_DEBUG("scripts.ai", "EscortAI has returned to original position before combat"); - me->SetWalk(!m_bIsRunning); RemoveEscortState(STATE_ESCORT_RETURNING); if (!m_uiWPWaitTimer) @@ -418,28 +415,8 @@ void npc_escortAI::FillPointMovementListForCreature() } } -void npc_escortAI::SetRun(bool on) -{ - if (on) - { - if (!m_bIsRunning) - me->SetWalk(false); - else - LOG_DEBUG("scripts.ai", "EscortAI attempt to set run mode, but is already running."); - } - else - { - if (m_bIsRunning) - me->SetWalk(true); - else - LOG_DEBUG("scripts.ai", "EscortAI attempt to set walk mode, but is already walking."); - } - - m_bIsRunning = on; -} - //TODO: get rid of this many variables passed in function. -void npc_escortAI::Start(bool isActiveAttacker /* = true*/, bool run /* = false */, ObjectGuid playerGUID /* = ObjectGuid::Empty */, Quest const* quest /* = nullptr */, bool instantRespawn /* = false */, bool canLoopPath /* = false */, bool resetWaypoints /* = true */) +void npc_escortAI::Start(bool isActiveAttacker /* = true*/, ObjectGuid playerGUID /* = ObjectGuid::Empty */, Quest const* quest /* = nullptr */, bool instantRespawn /* = false */, bool canLoopPath /* = false */, bool resetWaypoints /* = true */) { if (me->GetVictim()) { @@ -469,7 +446,6 @@ void npc_escortAI::Start(bool isActiveAttacker /* = true*/, bool run /* = false //set variables m_bIsActiveAttacker = isActiveAttacker; - m_bIsRunning = run; m_uiPlayerGUID = playerGUID; m_pQuestForEscort = quest; @@ -495,17 +471,11 @@ void npc_escortAI::Start(bool isActiveAttacker /* = true*/, bool run /* = false me->SetImmuneToNPC(false); } - LOG_DEBUG("scripts.ai", "EscortAI started with {} waypoints. ActiveAttacker = {}, Run = {}, PlayerGUID = {}", - uint64(WaypointList.size()), m_bIsActiveAttacker, m_bIsRunning, m_uiPlayerGUID.ToString()); + LOG_DEBUG("scripts.ai", "EscortAI started with {} waypoints. ActiveAttacker = {}, PlayerGUID = {}", + uint64(WaypointList.size()), m_bIsActiveAttacker, m_uiPlayerGUID.ToString()); CurrentWP = WaypointList.begin(); - //Set initial speed - if (m_bIsRunning) - me->SetWalk(false); - else - me->SetWalk(true); - AddEscortState(STATE_ESCORT_ESCORTING); if (me->GetMotionMaster()->GetMotionSlotType(MOTION_SLOT_ACTIVE) == ESCORT_MOTION_TYPE) me->GetMotionMaster()->MovementExpired(); diff --git a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h index 1332837ff..32b51126d 100644 --- a/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h +++ b/src/server/game/AI/ScriptedAI/ScriptedEscortAI.h @@ -90,9 +90,8 @@ public: virtual void WaypointReached(uint32 pointId) = 0; virtual void WaypointStart(uint32 /*pointId*/) {} - void Start(bool isActiveAttacker = true, bool run = false, ObjectGuid playerGUID = ObjectGuid::Empty, Quest const* quest = nullptr, bool instantRespawn = false, bool canLoopPath = false, bool resetWaypoints = true); + void Start(bool isActiveAttacker = true, ObjectGuid playerGUID = ObjectGuid::Empty, Quest const* quest = nullptr, bool instantRespawn = false, bool canLoopPath = false, bool resetWaypoints = true); - void SetRun(bool on = true); void SetEscortPaused(bool on); bool HasEscortState(uint32 escortState) { return (m_uiEscortState & escortState); } @@ -130,7 +129,6 @@ private: std::list::iterator CurrentWP; bool m_bIsActiveAttacker; //obsolete, determined by faction. - bool m_bIsRunning; //all creatures are walking by default (has flag MOVEMENTFLAG_WALK) bool m_bCanInstantRespawn; //if creature should respawn instantly after escort over (if not, database respawntime are used) bool m_bCanReturnToStart; //if creature can walk same path (loop) without despawn. Not for regular escort quests. bool DespawnAtEnd; diff --git a/src/server/game/AI/SmartScripts/SmartAI.cpp b/src/server/game/AI/SmartScripts/SmartAI.cpp index fc130cca4..b9a78c6d9 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.cpp +++ b/src/server/game/AI/SmartScripts/SmartAI.cpp @@ -43,9 +43,6 @@ SmartAI::SmartAI(Creature* c) : CreatureAI(c) mCanRepeatPath = false; - // spawn in run mode - // Xinef: spawn in run mode and set mRun to run... this overrides SetWalk EVERYWHERE - mRun = true; mEvadeDisabled = false; mCanAutoAttack = true; @@ -190,7 +187,7 @@ void SmartAI::GenerateWayPointArray(Movement::PointsArray* points) } } -void SmartAI::StartPath(bool run, uint32 path, bool repeat, Unit* invoker) +void SmartAI::StartPath(ForcedMovement forcedMovement, uint32 path, bool repeat, Unit* invoker) { if (HasEscortState(SMART_ESCORT_ESCORTING)) StopPath(); @@ -208,7 +205,6 @@ void SmartAI::StartPath(bool run, uint32 path, bool repeat, Unit* invoker) { AddEscortState(SMART_ESCORT_ESCORTING); mCanRepeatPath = repeat; - SetRun(run); if (invoker && invoker->IsPlayer()) { @@ -219,7 +215,7 @@ void SmartAI::StartPath(bool run, uint32 path, bool repeat, Unit* invoker) Movement::PointsArray pathPoints; GenerateWayPointArray(&pathPoints); - me->GetMotionMaster()->MoveSplinePath(&pathPoints); + me->GetMotionMaster()->MoveSplinePath(&pathPoints, forcedMovement); GetScript()->ProcessEventsFor(SMART_EVENT_WAYPOINT_START, nullptr, wp->id, GetScript()->GetPathId()); } } @@ -256,7 +252,6 @@ void SmartAI::PausePath(uint32 delay, bool forced) if (forced && !mWPReached) { mForcedPaused = forced; - SetRun(mRun); if (me->GetMotionMaster()->GetMotionSlotType(MOTION_SLOT_ACTIVE) == ESCORT_MOTION_TYPE) me->GetMotionMaster()->MovementExpired(); @@ -362,7 +357,7 @@ void SmartAI::EndPath(bool fail) if (mCanRepeatPath) { if (IsAIControlled()) - StartPath(mRun, GetScript()->GetPathId(), true); + StartPath(FORCED_MOVEMENT_NONE, GetScript()->GetPathId(), true); } else GetScript()->SetPathId(0); @@ -373,8 +368,6 @@ void SmartAI::EndPath(bool fail) void SmartAI::ResumePath() { - SetRun(mRun); - if (mLastWP) { Movement::PointsArray pathPoints; @@ -389,10 +382,9 @@ void SmartAI::ReturnToLastOOCPos() if (!IsAIControlled()) return; - me->SetWalk(false); float x, y, z, o; me->GetHomePosition(x, y, z, o); - me->GetMotionMaster()->MovePoint(SMART_ESCORT_LAST_OOC_POINT, x, y, z); + me->GetMotionMaster()->MovePoint(SMART_ESCORT_LAST_OOC_POINT, x, y, z, FORCED_MOVEMENT_RUN); } void SmartAI::UpdatePath(const uint32 diff) @@ -469,7 +461,6 @@ void SmartAI::UpdatePath(const uint32 diff) EndPath(); else if (GetNextWayPoint()) { - SetRun(mRun); // xinef: if we have reached waypoint, and there is no working spline movement it means our splitted array has ended, make new one if (me->movespline->Finalized()) ResumePath(); @@ -629,7 +620,6 @@ void SmartAI::MovepointReached(uint32 id) EndPath(); else if (GetNextWayPoint()) { - SetRun(mRun); // xinef: if we have reached waypoint, and there is no working spline movement it means our splitted array has ended, make new one if (me->movespline->Finalized()) ResumePath(); @@ -675,7 +665,6 @@ void SmartAI::EnterEvadeMode(EvadeReason /*why*/) GetScript()->ProcessEventsFor(SMART_EVENT_EVADE); //must be after aura clear so we can cast spells from db - SetRun(mRun); if (HasEscortState(SMART_ESCORT_ESCORTING)) { AddEscortState(SMART_ESCORT_RETURNING); @@ -850,7 +839,6 @@ void SmartAI::AttackStart(Unit* who) { if (!me->HasUnitState(UNIT_STATE_NO_COMBAT_MOVEMENT)) { - SetRun(mRun); MovementGeneratorType type = me->GetMotionMaster()->GetMotionSlotType(MOTION_SLOT_ACTIVE); if (type == ESCORT_MOTION_TYPE || type == POINT_MOTION_TYPE) { @@ -952,9 +940,7 @@ void SmartAI::OnCharmed(bool /* apply */) if (!charmed && !me->IsInEvadeMode()) { if (mCanRepeatPath) - StartPath(mRun, GetScript()->GetPathId(), true); - else - me->SetWalk(!mRun); + StartPath(FORCED_MOVEMENT_NONE, GetScript()->GetPathId(), true); if (Unit* charmer = me->GetCharmer()) AttackStart(charmer); @@ -1002,12 +988,6 @@ ObjectGuid SmartAI::GetGUID(int32 /*id*/) const return ObjectGuid::Empty; } -void SmartAI::SetRun(bool run) -{ - me->SetWalk(!run); - mRun = run; -} - void SmartAI::SetFly(bool fly) { // xinef: set proper flag! @@ -1108,7 +1088,6 @@ void SmartAI::SetFollow(Unit* target, float dist, float angle, uint32 credit, ui mFollowArrivedEntry = end; mFollowArrivedAlive = !aliveState; // negate - 0 is alive mFollowCreditType = creditType; - SetRun(mRun); me->GetMotionMaster()->MoveFollow(target, mFollowDist, mFollowAngle); } diff --git a/src/server/game/AI/SmartScripts/SmartAI.h b/src/server/game/AI/SmartScripts/SmartAI.h index 48d0eda37..d8ac699dc 100644 --- a/src/server/game/AI/SmartScripts/SmartAI.h +++ b/src/server/game/AI/SmartScripts/SmartAI.h @@ -52,7 +52,7 @@ public: bool IsAIControlled() const; // Start moving to the desired MovePoint - void StartPath(bool run = false, uint32 path = 0, bool repeat = false, Unit* invoker = nullptr); + void StartPath(ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE, uint32 path = 0, bool repeat = false, Unit* invoker = nullptr); bool LoadPath(uint32 entry); void PausePath(uint32 delay, bool forced = false); void StopPath(uint32 DespawnTime = 0, uint32 quest = 0, bool fail = false); @@ -175,9 +175,6 @@ public: // Called at movepoint reached void MovepointReached(uint32 id); - // Makes the creature run/walk - void SetRun(bool run = true); - void SetFly(bool fly = true); void SetSwim(bool swim = true); @@ -240,7 +237,6 @@ private: uint32 mEscortNPCFlags; uint32 GetWPCount() { return mWayPoints ? mWayPoints->size() : 0; } bool mCanRepeatPath; - bool mRun; bool mEvadeDisabled; bool mCanAutoAttack; bool mForcedPaused; diff --git a/src/server/game/AI/SmartScripts/SmartScript.cpp b/src/server/game/AI/SmartScripts/SmartScript.cpp index 1a64641e9..38febbc9f 100644 --- a/src/server/game/AI/SmartScripts/SmartScript.cpp +++ b/src/server/game/AI/SmartScripts/SmartScript.cpp @@ -1683,10 +1683,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u { if (IsCreature(target)) { - if (IsSmart(target->ToCreature())) - CAST_AI(SmartAI, target->ToCreature()->AI())->SetRun(e.action.setRun.run); - else - target->ToCreature()->SetWalk(e.action.setRun.run ? false : true); // Xinef: reversed + target->ToCreature()->SetWalk(e.action.setRun.run ? false : true); } } @@ -1731,7 +1728,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (!IsSmart()) break; - bool run = e.action.wpStart.run != 0; + ForcedMovement forcedMovement = static_cast(e.action.wpStart.forcedMovement); uint32 entry = e.action.wpStart.pathID; bool repeat = e.action.wpStart.repeat != 0; @@ -1745,7 +1742,7 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u } me->SetReactState((ReactStates)e.action.wpStart.reactState); - CAST_AI(SmartAI, me->AI())->StartPath(run, entry, repeat, unit); + CAST_AI(SmartAI, me->AI())->StartPath(forcedMovement, entry, repeat, unit); uint32 quest = e.action.wpStart.quest; uint32 DespawnTime = e.action.wpStart.despawnTime; @@ -1854,8 +1851,8 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (TransportBase* trans = me->GetDirectTransport()) trans->CalculatePassengerPosition(dest.x, dest.y, dest.z); - me->GetMotionMaster()->MovePoint(e.action.moveToPos.pointId, dest.x, dest.y, dest.z, true, isForced, - isControlled ? MOTION_SLOT_CONTROLLED : MOTION_SLOT_ACTIVE, e.target.o); + me->GetMotionMaster()->MovePoint(e.action.moveToPos.pointId, dest.x, dest.y, dest.z, FORCED_MOVEMENT_NONE, + 0.f, e.target.o, true, isForced, isControlled ? MOTION_SLOT_CONTROLLED : MOTION_SLOT_ACTIVE); break; } @@ -1871,9 +1868,8 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u randomPoint.m_positionX, randomPoint.m_positionY, randomPoint.m_positionZ, - true, - isForced, - isControlled ? MOTION_SLOT_CONTROLLED : MOTION_SLOT_ACTIVE + FORCED_MOVEMENT_NONE, + 0.f, 0.f, true, isForced, isControlled ? MOTION_SLOT_CONTROLLED : MOTION_SLOT_ACTIVE ); } @@ -1897,7 +1893,8 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u else if (e.action.moveToPos.ContactDistance) target->GetNearPoint(me, x, y, z, e.action.moveToPos.ContactDistance, 0, target->GetAngle(me)); - me->GetMotionMaster()->MovePoint(e.action.moveToPos.pointId, x + e.target.x, y + e.target.y, z + e.target.z, true, isForced, isControlled ? MOTION_SLOT_CONTROLLED : MOTION_SLOT_ACTIVE); + me->GetMotionMaster()->MovePoint(e.action.moveToPos.pointId, x + e.target.x, y + e.target.y, z + e.target.z, FORCED_MOVEMENT_NONE, + 0.f, 0.f, true, isForced, isControlled ? MOTION_SLOT_CONTROLLED : MOTION_SLOT_ACTIVE); break; } @@ -1914,7 +1911,8 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u SAIBool isForced = !e.action.moveToPosTarget.disableForceDestination; Creature* ctarget = target->ToCreature(); - ctarget->GetMotionMaster()->MovePoint(e.action.moveToPosTarget.pointId, e.target.x, e.target.y, e.target.z, true, isForced, isControlled ? MOTION_SLOT_CONTROLLED : MOTION_SLOT_ACTIVE); + ctarget->GetMotionMaster()->MovePoint(e.action.moveToPosTarget.pointId, e.target.x, e.target.y, e.target.z, FORCED_MOVEMENT_NONE, + 0.f, 0.f, true, isForced, isControlled ? MOTION_SLOT_CONTROLLED : MOTION_SLOT_ACTIVE); } } @@ -2543,9 +2541,9 @@ void SmartScript::ProcessAction(SmartScriptHolder& e, Unit* unit, uint32 var0, u if (closestWpId) { bool repeat = e.action.startClosestWaypoint.repeat; - bool run = e.action.startClosestWaypoint.run; + ForcedMovement forcedMovement = static_cast(e.action.startClosestWaypoint.forcedMovement); - CAST_AI(SmartAI, creature->AI())->StartPath(repeat, closestWpId, run); + CAST_AI(SmartAI, creature->AI())->StartPath(forcedMovement, closestWpId, repeat); } } } diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp index 59490f556..47c5c9166 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.cpp @@ -1564,11 +1564,11 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType()); return false; } - if (e.action.startClosestWaypoint.repeat > 1 || e.action.startClosestWaypoint.run > 1) + if (e.action.startClosestWaypoint.repeat > 1 || e.action.startClosestWaypoint.forcedMovement >= FORCED_MOVEMENT_MAX) { - LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} has invalid run ({}) or repeat ({}) parameter, must be 0 or 1.", + LOG_ERROR("sql.sql", "SmartAIMgr: Entry {} SourceType {} Event {} Action {} has invalid forcedMovement ({}) or repeat ({}) parameter, must be 0 or 1.", e.entryOrGuid, e.GetScriptType(), e.event_id, e.GetActionType(), - e.action.startClosestWaypoint.repeat, e.action.startClosestWaypoint.run); + e.action.startClosestWaypoint.repeat, e.action.startClosestWaypoint.forcedMovement); return false; } break; @@ -1745,8 +1745,13 @@ bool SmartAIMgr::IsEventValid(SmartScriptHolder& e) return false; } - return IsSAIBoolValid(e, e.action.wpStart.run) && - IsSAIBoolValid(e, e.action.wpStart.repeat); + if (e.action.wpStart.forcedMovement >= FORCED_MOVEMENT_MAX) + { + LOG_ERROR("sql.sql", "SmartAIMgr: Creature {} Event {} Action {} uses invalid forcedMovement {}, skipped.", e.entryOrGuid, e.event_id, e.GetActionType(), e.action.wpStart.forcedMovement); + return false; + } + + return IsSAIBoolValid(e, e.action.wpStart.repeat); } case SMART_ACTION_CREATE_TIMED_EVENT: { diff --git a/src/server/game/AI/SmartScripts/SmartScriptMgr.h b/src/server/game/AI/SmartScripts/SmartScriptMgr.h index 47b0d4796..9e6c15522 100644 --- a/src/server/game/AI/SmartScripts/SmartScriptMgr.h +++ b/src/server/game/AI/SmartScripts/SmartScriptMgr.h @@ -1041,7 +1041,7 @@ struct SmartAction struct { - SAIBool run; + uint32 forcedMovement; uint32 pathID; SAIBool repeat; uint32 quest; @@ -1295,7 +1295,7 @@ struct SmartAction uint32 pathId1; uint32 pathId2; uint32 repeat; - uint32 run; + uint32 forcedMovement; } startClosestWaypoint; struct diff --git a/src/server/game/Entities/Creature/CreatureData.h b/src/server/game/Entities/Creature/CreatureData.h index 4ca6cda4a..be5216698 100644 --- a/src/server/game/Entities/Creature/CreatureData.h +++ b/src/server/game/Entities/Creature/CreatureData.h @@ -99,18 +99,18 @@ enum class CreatureFlightMovementType : uint8 enum class CreatureChaseMovementType : uint8 { - Run, - CanWalk, - AlwaysWalk, + Run = 0, + CanWalk = 1, + AlwaysWalk = 2, Max }; enum class CreatureRandomMovementType : uint8 { - Walk, - CanRun, - AlwaysRun, + Walk = 0, + CanRun = 1, + AlwaysRun = 2, Max }; diff --git a/src/server/game/Entities/Unit/Unit.h b/src/server/game/Entities/Unit/Unit.h index 290282510..78c2dddce 100644 --- a/src/server/game/Entities/Unit/Unit.h +++ b/src/server/game/Entities/Unit/Unit.h @@ -1677,9 +1677,7 @@ public: void propagateSpeedChange() { GetMotionMaster()->propagateSpeedChange(); } void SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint32 TransitTime, SplineFlags sf = SPLINEFLAG_WALK_MODE); // pussywizard: need to just send packet, with no movement/spline - void MonsterMoveWithSpeed(float x, float y, float z, float speed); - //void SetFacing(float ori, WorldObject* obj = nullptr); - //void SendMonsterMove(float NewPosX, float NewPosY, float NewPosZ, uint8 type, uint32 MovementFlags, uint32 Time, Player* player = nullptr); + void MonsterMoveWithSpeed(float x, float y, float z, float speed); // Not to be used outside of cinematics virtual bool SetWalk(bool enable); virtual bool SetDisableGravity(bool disable, bool packetOnly = false, bool updateAnimationTier = true); diff --git a/src/server/game/Movement/MotionMaster.cpp b/src/server/game/Movement/MotionMaster.cpp index 2b2aba6ef..c229abdbc 100644 --- a/src/server/game/Movement/MotionMaster.cpp +++ b/src/server/game/Movement/MotionMaster.cpp @@ -387,6 +387,7 @@ void MotionMaster::MoveBackwards(Unit* target, float dist) Movement::MoveSplineInit init(_owner); init.MoveTo(point.x, point.y, point.z, false); + init.SetWalk(true); init.SetFacing(target); init.SetOrientationInversed(); init.Launch(); @@ -469,7 +470,7 @@ void MotionMaster::MoveFollow(Unit* target, float dist, float angle, MovementSlo * * For transition movement between the ground and the air, use MoveLand or MoveTakeoff instead. */ -void MotionMaster::MovePoint(uint32 id, float x, float y, float z, bool generatePath, bool forceDestination, MovementSlot slot, float orientation /* = 0.0f*/) +void MotionMaster::MovePoint(uint32 id, float x, float y, float z, ForcedMovement forcedMovement, float speed, float orientation, bool generatePath, bool forceDestination, MovementSlot slot) { if (_owner->HasUnitFlag(UNIT_FLAG_DISABLE_MOVE)) return; @@ -477,16 +478,16 @@ void MotionMaster::MovePoint(uint32 id, float x, float y, float z, bool generate if (_owner->IsPlayer()) { LOG_DEBUG("movement.motionmaster", "Player ({}) targeted point (Id: {} X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), id, x, y, z); - Mutate(new PointMovementGenerator(id, x, y, z, 0.0f, orientation, nullptr, generatePath, forceDestination), slot); + Mutate(new PointMovementGenerator(id, x, y, z, forcedMovement, speed, orientation, nullptr, generatePath, forceDestination), slot); } else { LOG_DEBUG("movement.motionmaster", "Creature ({}) targeted point (ID: {} X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), id, x, y, z); - Mutate(new PointMovementGenerator(id, x, y, z, 0.0f, orientation, nullptr, generatePath, forceDestination), slot); + Mutate(new PointMovementGenerator(id, x, y, z, forcedMovement, speed, orientation, nullptr, generatePath, forceDestination), slot); } } -void MotionMaster::MoveSplinePath(Movement::PointsArray* path) +void MotionMaster::MoveSplinePath(Movement::PointsArray* path, ForcedMovement forcedMovement) { // Xinef: do not allow to move with UNIT_FLAG_DISABLE_MOVE if (_owner->HasUnitFlag(UNIT_FLAG_DISABLE_MOVE)) @@ -494,15 +495,15 @@ void MotionMaster::MoveSplinePath(Movement::PointsArray* path) if (_owner->IsPlayer()) { - Mutate(new EscortMovementGenerator(path), MOTION_SLOT_ACTIVE); + Mutate(new EscortMovementGenerator(forcedMovement, path), MOTION_SLOT_ACTIVE); } else { - Mutate(new EscortMovementGenerator(path), MOTION_SLOT_ACTIVE); + Mutate(new EscortMovementGenerator(forcedMovement, path), MOTION_SLOT_ACTIVE); } } -void MotionMaster::MoveSplinePath(uint32 path_id) +void MotionMaster::MoveSplinePath(uint32 path_id, ForcedMovement forcedMovement) { // convert the path id to a Movement::PointsArray* Movement::PointsArray* points = new Movement::PointsArray(); @@ -514,7 +515,7 @@ void MotionMaster::MoveSplinePath(uint32 path_id) } // pass the new PointsArray* to the appropriate MoveSplinePath function - MoveSplinePath(points); + MoveSplinePath(points, forcedMovement); } /** @@ -539,8 +540,8 @@ void MotionMaster::MoveLand(uint32 id, Position const& pos, float speed /* = 0.0 } init.SetAnimation(Movement::ToGround); - init.Launch(); - Mutate(new EffectMovementGenerator(id), MOTION_SLOT_ACTIVE); + + Mutate(new EffectMovementGenerator(init, id), MOTION_SLOT_ACTIVE); } /** @@ -569,16 +570,12 @@ void MotionMaster::MoveTakeoff(uint32 id, Position const& pos, float speed /* = init.MoveTo(x, y, z); if (speed > 0.0f) - { init.SetVelocity(speed); - } if (!skipAnimation) - { init.SetAnimation(Movement::ToFly); - } - init.Launch(); - Mutate(new EffectMovementGenerator(id), MOTION_SLOT_ACTIVE); + + Mutate(new EffectMovementGenerator(init, id), MOTION_SLOT_ACTIVE); } /** @@ -612,8 +609,8 @@ void MotionMaster::MoveKnockbackFrom(float srcX, float srcY, float speedXY, floa init.SetParabolic(max_height, 0); init.SetOrientationFixed(true); init.SetVelocity(speedXY); - init.Launch(); - Mutate(new EffectMovementGenerator(0), MOTION_SLOT_CONTROLLED); + + Mutate(new EffectMovementGenerator(init, 0), MOTION_SLOT_CONTROLLED); } /** @@ -652,8 +649,8 @@ void MotionMaster::MoveJump(float x, float y, float z, float speedXY, float spee init.SetVelocity(speedXY); if (target) init.SetFacing(target); - init.Launch(); - Mutate(new EffectMovementGenerator(id), MOTION_SLOT_CONTROLLED); + + Mutate(new EffectMovementGenerator(init, id), MOTION_SLOT_CONTROLLED); } /** @@ -695,8 +692,8 @@ void MotionMaster::MoveFall(uint32 id /*=0*/, bool addFlagForNPC) Movement::MoveSplineInit init(_owner); init.MoveTo(_owner->GetPositionX(), _owner->GetPositionY(), tz + _owner->GetHoverHeight()); init.SetFall(); - init.Launch(); - Mutate(new EffectMovementGenerator(id), MOTION_SLOT_CONTROLLED); + + Mutate(new EffectMovementGenerator(init, id), MOTION_SLOT_CONTROLLED); } /** @@ -713,12 +710,12 @@ void MotionMaster::MoveCharge(float x, float y, float z, float speed, uint32 id, if (_owner->IsPlayer()) { LOG_DEBUG("movement.motionmaster", "Player ({}) charge point (X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), x, y, z); - Mutate(new PointMovementGenerator(id, x, y, z, speed, orientation, path, generatePath, generatePath, targetGUID), MOTION_SLOT_CONTROLLED); + Mutate(new PointMovementGenerator(id, x, y, z, FORCED_MOVEMENT_NONE, speed, orientation, path, generatePath, generatePath, targetGUID), MOTION_SLOT_CONTROLLED); } else { LOG_DEBUG("movement.motionmaster", "Creature ({}) charge point (X: {} Y: {} Z: {})", _owner->GetGUID().ToString(), x, y, z); - Mutate(new PointMovementGenerator(id, x, y, z, speed, orientation, path, generatePath, generatePath, targetGUID), MOTION_SLOT_CONTROLLED); + Mutate(new PointMovementGenerator(id, x, y, z, FORCED_MOVEMENT_NONE, speed, orientation, path, generatePath, generatePath, targetGUID), MOTION_SLOT_CONTROLLED); } } diff --git a/src/server/game/Movement/MotionMaster.h b/src/server/game/Movement/MotionMaster.h index 0fcf5abae..bc4cc996b 100644 --- a/src/server/game/Movement/MotionMaster.h +++ b/src/server/game/Movement/MotionMaster.h @@ -80,6 +80,15 @@ enum RotateDirection ROTATE_DIRECTION_RIGHT }; +enum ForcedMovement +{ + FORCED_MOVEMENT_NONE = 0, + FORCED_MOVEMENT_WALK = 1, + FORCED_MOVEMENT_RUN = 2, + + FORCED_MOVEMENT_MAX +}; + struct ChaseRange { ChaseRange(float range); @@ -210,11 +219,11 @@ public: void MoveForwards(Unit* target, float dist); void MoveConfused(); void MoveFleeing(Unit* enemy, uint32 time = 0); - void MovePoint(uint32 id, const Position& pos, bool generatePath = true, bool forceDestination = true) - { MovePoint(id, pos.m_positionX, pos.m_positionY, pos.m_positionZ, generatePath, forceDestination, MOTION_SLOT_ACTIVE, pos.GetOrientation()); } - void MovePoint(uint32 id, float x, float y, float z, bool generatePath = true, bool forceDestination = true, MovementSlot slot = MOTION_SLOT_ACTIVE, float orientation = 0.0f); - void MoveSplinePath(Movement::PointsArray* path); - void MoveSplinePath(uint32 path_id); + void MovePoint(uint32 id, const Position& pos, ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE, float speed = 0.f, bool generatePath = true, bool forceDestination = true) + { MovePoint(id, pos.m_positionX, pos.m_positionY, pos.m_positionZ, forcedMovement, speed, pos.GetOrientation(), generatePath, forceDestination, MOTION_SLOT_ACTIVE); } + void MovePoint(uint32 id, float x, float y, float z, ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE, float speed = 0.f, float orientation = 0.0f, bool generatePath = true, bool forceDestination = true, MovementSlot slot = MOTION_SLOT_ACTIVE); + void MoveSplinePath(Movement::PointsArray* path, ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE); + void MoveSplinePath(uint32 path_id, ForcedMovement forcedMovement = FORCED_MOVEMENT_NONE); // These two movement types should only be used with creatures having landing/takeoff animations void MoveLand(uint32 id, Position const& pos, float speed = 0.0f); diff --git a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp index 6d3d1007c..e650ed63a 100644 --- a/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/ConfusedMovementGenerator.cpp @@ -146,6 +146,7 @@ bool ConfusedMovementGenerator::DoUpdate(T* unit, uint32 diff) float z = i_waypoints[i_nextMove][2]; Movement::MoveSplineInit init(unit); init.MoveTo(x, y, z, true); + init.SetWalk(true); init.Launch(); } } diff --git a/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.cpp index 14133dbe2..3fcfa93d3 100644 --- a/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.cpp @@ -36,6 +36,11 @@ void EscortMovementGenerator::DoInitialize(T* unit) else if (m_precomputedPath.size()) init.MovebyPath(m_precomputedPath); + if (_forcedMovement == FORCED_MOVEMENT_WALK) + init.SetWalk(true); + else if (_forcedMovement == FORCED_MOVEMENT_RUN) + init.SetWalk(false); + init.Launch(); _splineId = unit->movespline->GetId(); @@ -79,6 +84,11 @@ bool EscortMovementGenerator::DoUpdate(T* unit, uint32 /*diff*/) init.MoveTo(m_precomputedPath[1].x, m_precomputedPath[1].y, m_precomputedPath[1].z, true); } + if (_forcedMovement == FORCED_MOVEMENT_WALK) + init.SetWalk(true); + else if (_forcedMovement == FORCED_MOVEMENT_RUN) + init.SetWalk(false); + init.Launch(); // Xinef: Override spline Id on recalculate launch _splineId = unit->movespline->GetId(); diff --git a/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.h b/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.h index edb410b8a..7a175ed8f 100644 --- a/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/EscortMovementGenerator.h @@ -24,7 +24,7 @@ template class EscortMovementGenerator : public MovementGeneratorMedium< T, EscortMovementGenerator > { public: - EscortMovementGenerator(Movement::PointsArray* _path = nullptr) : i_recalculateSpeed(false) + EscortMovementGenerator(ForcedMovement forcedMovement, Movement::PointsArray* _path = nullptr) : i_recalculateSpeed(false), _forcedMovement(forcedMovement) { if (_path) m_precomputedPath = *_path; @@ -46,6 +46,7 @@ private: Movement::PointsArray m_precomputedPath; uint32 _splineId; + ForcedMovement _forcedMovement; }; #endif diff --git a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp index be1667e5b..60cf4f41e 100644 --- a/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/HomeMovementGenerator.cpp @@ -31,8 +31,6 @@ void HomeMovementGenerator::DoFinalize(Creature* owner) owner->ClearUnitState(UNIT_STATE_EVADE); if (arrived) { - // Xinef: npc run by default - //owner->SetWalk(true); owner->LoadCreaturesAddon(true); owner->AI()->JustReachedHome(); } diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp index fdce94248..ab8f85009 100644 --- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.cpp @@ -84,6 +84,11 @@ void PointMovementGenerator::DoInitialize(T* unit) if (speed > 0.0f) init.SetVelocity(speed); + if (_forcedMovement == FORCED_MOVEMENT_WALK) + init.SetWalk(true); + else if (_forcedMovement == FORCED_MOVEMENT_RUN) + init.SetWalk(false); + if (i_orientation > 0.0f) { init.SetFacing(i_orientation); @@ -142,6 +147,11 @@ bool PointMovementGenerator::DoUpdate(T* unit, uint32 /*diff*/) if (speed > 0.0f) // Default value for point motion type is 0.0, if 0.0 spline will use GetSpeed on unit init.SetVelocity(speed); + if (_forcedMovement == FORCED_MOVEMENT_WALK) + init.SetWalk(true); + else if (_forcedMovement == FORCED_MOVEMENT_RUN) + init.SetWalk(false); + if (i_orientation > 0.0f) { init.SetFacing(i_orientation); @@ -228,6 +238,11 @@ bool EffectMovementGenerator::Update(Unit* unit, uint32) return !unit->movespline->Finalized(); } +void EffectMovementGenerator::Initialize(Unit*) +{ + i_spline.Launch(); +} + void EffectMovementGenerator::Finalize(Unit* unit) { if (!unit->IsCreature()) diff --git a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h index f19e04d42..f9941e9b8 100644 --- a/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h +++ b/src/server/game/Movement/MovementGenerators/PointMovementGenerator.h @@ -20,15 +20,16 @@ #include "Creature.h" #include "MovementGenerator.h" +#include "MoveSplineInit.h" template class PointMovementGenerator : public MovementGeneratorMedium< T, PointMovementGenerator > { public: - PointMovementGenerator(uint32 _id, float _x, float _y, float _z, float _speed = 0.0f, float orientation = 0.0f, const Movement::PointsArray* _path = nullptr, - bool generatePath = false, bool forceDestination = false, ObjectGuid chargeTargetGUID = ObjectGuid::Empty) - : id(_id), i_x(_x), i_y(_y), i_z(_z), speed(_speed), i_orientation(orientation), _generatePath(generatePath), _forceDestination(forceDestination), - _chargeTargetGUID(chargeTargetGUID) + PointMovementGenerator(uint32 _id, float _x, float _y, float _z, ForcedMovement forcedMovement, float _speed = 0.0f, float orientation = 0.0f, const Movement::PointsArray* _path = nullptr, + bool generatePath = false, bool forceDestination = false, ObjectGuid chargeTargetGUID = ObjectGuid::Empty, bool reverseOrientation = false, ObjectGuid facingTargetGuid = ObjectGuid()) + : id(_id), i_x(_x), i_y(_y), i_z(_z), speed(_speed), i_orientation(orientation), _generatePath(generatePath), _forceDestination(forceDestination), _reverseOrientation(reverseOrientation), + _chargeTargetGUID(chargeTargetGUID), _forcedMovement(forcedMovement), _facingTargetGuid(facingTargetGuid) { if (_path) m_precomputedPath = *_path; @@ -55,14 +56,17 @@ private: Movement::PointsArray m_precomputedPath; bool _generatePath; bool _forceDestination; + bool _reverseOrientation; ObjectGuid _chargeTargetGUID; + ForcedMovement _forcedMovement; + ObjectGuid _facingTargetGuid; }; class AssistanceMovementGenerator : public PointMovementGenerator { public: AssistanceMovementGenerator(float _x, float _y, float _z) : - PointMovementGenerator(0, _x, _y, _z) {} + PointMovementGenerator(0, _x, _y, _z, FORCED_MOVEMENT_NONE) {} MovementGeneratorType GetMovementGeneratorType() { return ASSISTANCE_MOTION_TYPE; } void Finalize(Unit*); @@ -72,14 +76,15 @@ public: class EffectMovementGenerator : public MovementGenerator { public: - explicit EffectMovementGenerator(uint32 Id) : m_Id(Id) {} - void Initialize(Unit*) override {} + explicit EffectMovementGenerator(Movement::MoveSplineInit& spline, uint32 Id) : m_Id(Id), i_spline(spline) {} + void Initialize(Unit*) override; void Finalize(Unit*) override; void Reset(Unit*) override {} bool Update(Unit*, uint32) override; MovementGeneratorType GetMovementGeneratorType() override { return EFFECT_MOTION_TYPE; } private: uint32 m_Id; + Movement::MoveSplineInit i_spline; }; #endif diff --git a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp index 5d904d31a..239117d4a 100644 --- a/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/RandomMovementGenerator.cpp @@ -51,7 +51,21 @@ void RandomMovementGenerator::_setRandomLocation(Creature* creature) creature->AddUnitState(UNIT_STATE_ROAMING_MOVE); Movement::MoveSplineInit init(creature); init.MoveTo(_currDestPosition.GetPositionX(), _currDestPosition.GetPositionY(), _currDestPosition.GetPositionZ()); - init.SetWalk(true); + + bool walk = true; + switch (creature->GetMovementTemplate().GetRandom()) + { + case CreatureRandomMovementType::CanRun: + walk = creature->IsWalking(); + break; + case CreatureRandomMovementType::AlwaysRun: + walk = false; + break; + default: + break; + } + + init.SetWalk(walk); init.Launch(); if (creature->GetFormation() && creature->GetFormation()->GetLeader() == creature) creature->GetFormation()->LeaderMoveTo(_currDestPosition.GetPositionX(), _currDestPosition.GetPositionY(), _currDestPosition.GetPositionZ(), 0); @@ -270,7 +284,6 @@ template<> void RandomMovementGenerator::DoFinalize(Creature* creature) { creature->ClearUnitState(UNIT_STATE_ROAMING | UNIT_STATE_ROAMING_MOVE); - creature->SetWalk(false); } template<> diff --git a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp index 4dfc68828..b8ee76d29 100644 --- a/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/TargetedMovementGenerator.cpp @@ -365,7 +365,6 @@ void ChaseMovementGenerator::DoInitialize(Creature* owner) _lastTargetPosition.reset(); i_recheckDistance.Reset(0); i_leashExtensionTimer.Reset(owner->GetAttackTime(BASE_ATTACK)); - owner->SetWalk(false); owner->AddUnitState(UNIT_STATE_CHASE); } diff --git a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp index be3c0d57f..ce93e485b 100644 --- a/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp +++ b/src/server/game/Movement/MovementGenerators/WaypointMovementGenerator.cpp @@ -56,7 +56,6 @@ void WaypointMovementGenerator::DoInitialize(Creature* creature) void WaypointMovementGenerator::DoFinalize(Creature* creature) { creature->ClearUnitState(UNIT_STATE_ROAMING | UNIT_STATE_ROAMING_MOVE); - creature->SetWalk(false); } void WaypointMovementGenerator::DoReset(Creature* creature) diff --git a/src/server/game/Scripting/MapScripts.cpp b/src/server/game/Scripting/MapScripts.cpp index f09223b75..8f9184da9 100644 --- a/src/server/game/Scripting/MapScripts.cpp +++ b/src/server/game/Scripting/MapScripts.cpp @@ -442,7 +442,7 @@ void Map::ScriptsProcess() if (step.script->MoveTo.TravelTime != 0) { float speed = unit->GetDistance(step.script->MoveTo.DestX, step.script->MoveTo.DestY, step.script->MoveTo.DestZ) / ((float)step.script->MoveTo.TravelTime * 0.001f); - unit->MonsterMoveWithSpeed(step.script->MoveTo.DestX, step.script->MoveTo.DestY, step.script->MoveTo.DestZ, speed); + unit->GetMotionMaster()->MovePoint(0, step.script->MoveTo.DestX, step.script->MoveTo.DestY, step.script->MoveTo.DestZ, FORCED_MOVEMENT_NONE, speed); } else unit->NearTeleportTo(step.script->MoveTo.DestX, step.script->MoveTo.DestY, step.script->MoveTo.DestZ, unit->GetOrientation()); diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp index 4691fb367..d95e3b124 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockDepths/blackrock_depths.cpp @@ -359,7 +359,7 @@ public: case 0: Talk(SAY_TEXT5); HandleGameObject(DATA_ARENA4, false); - Start(false, false); + Start(false); eventTimer = 0; break; case 1: @@ -604,7 +604,7 @@ public: creature->CastSpell(creature, SPELL_DRUNKEN_RAGE, false); if (npc_escortAI* escortAI = CAST_AI(npc_rocknot::npc_rocknotAI, creature->AI())) - escortAI->Start(false, false); + escortAI->Start(false); } } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp index 16c7f0db4..45af53d9b 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/BlackrockSpire/boss_quartermaster_zigris.cpp @@ -77,7 +77,9 @@ struct boss_quartermaster_zigris : public BossAI { if (me->IsWithinMeleeRange(me->GetVictim())) { - me->GetMotionMaster()->MoveBackwards(me->GetVictim(), 10.0f); + float x, y, z; + me->GetNearPoint(me->GetVictim(), x, y, z, me->GetVictim()->GetBoundaryRadius(), 10.0f, me->GetAngle(me->GetVictim())); + me->GetMotionMaster()->MovePoint(0, x, y, z, FORCED_MOVEMENT_RUN); // TODO: Implement generic distancing on npc on target root } } } diff --git a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp index 0a51970c4..769a43deb 100644 --- a/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp +++ b/src/server/scripts/EasternKingdoms/BlackrockMountain/MoltenCore/boss_majordomo_executus.cpp @@ -430,7 +430,7 @@ public: Talk(SAY_RAG_SUM_2); // Next event will get triggered in MovementInform me->SetWalk(true); - me->GetMotionMaster()->MovePoint(POINT_RAGNAROS_SUMMON, MajordomoMoveRagPos, true, false); + me->GetMotionMaster()->MovePoint(POINT_RAGNAROS_SUMMON, MajordomoMoveRagPos, FORCED_MOVEMENT_NONE, 0.f, true, false); break; } case EVENT_RAGNAROS_SUMMON_2: diff --git a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp index 955b26e4c..dcb58c365 100644 --- a/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp +++ b/src/server/scripts/EasternKingdoms/Karazhan/karazhan.cpp @@ -170,7 +170,7 @@ public: if (m_uiEventId == EVENT_OZ) instance->SetData(DATA_OPERA_OZ_DEATHCOUNT, IN_PROGRESS); - Start(false, false); + Start(false); } void JustEngagedWith(Unit* /*who*/) override { } diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp index 13ebb5664..eebdc7b9f 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter1.cpp @@ -980,7 +980,7 @@ public: { carGUID = who->GetVehicleBase()->GetGUID(); InitWaypoint(); - Start(false, false, who->GetGUID()); + Start(false, who->GetGUID()); SetDespawnAtFar(false); } diff --git a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp index 54a367f8f..60a91416b 100644 --- a/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp +++ b/src/server/scripts/EasternKingdoms/ScarletEnclave/chapter5.cpp @@ -660,14 +660,14 @@ public: { Position pos = LightOfDawnPos[first]; summon->SetHomePosition(pos); - summon->GetMotionMaster()->MovePoint(1, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), true, false); + summon->GetMotionMaster()->MovePoint(1, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, 0.f, true, false); } first = first == 0 ? 1 : 0; } Position pos = LightOfDawnPos[first]; me->SetHomePosition(pos); me->SetWalk(false); - me->GetMotionMaster()->MovePoint(1, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), true, true); + me->GetMotionMaster()->MovePoint(1, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, 0.f, true, true); DoCastSelf(SPELL_THE_MIGHT_OF_MOGRAINE, true); break; } @@ -691,7 +691,7 @@ public: { orbaz->SetReactState(REACT_PASSIVE); orbaz->AI()->Talk(EMOTE_LIGHT_OF_DAWN04); - orbaz->GetMotionMaster()->MovePoint(2, LightOfDawnPos[2], true, true); + orbaz->GetMotionMaster()->MovePoint(2, LightOfDawnPos[2], FORCED_MOVEMENT_NONE, 0.f, true, true); orbaz->DespawnOrUnsummon(7s); } @@ -1061,7 +1061,7 @@ public: if (Creature* tirion = GetEntryFromSummons(NPC_HIGHLORD_TIRION_FORDRING)) { float o = me->GetAngle(tirion); - tirion->GetMotionMaster()->MovePoint(4, me->GetPositionX() + 2.0f * cos(o), me->GetPositionY() + 2.0f * std::sin(o), me->GetPositionZ(), false); + tirion->GetMotionMaster()->MovePoint(4, me->GetPositionX() + 2.0f * cos(o), me->GetPositionY() + 2.0f * std::sin(o), me->GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, 0.f, false); tirion->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_ONESHOT_NONE); tirion->SetFaction(FACTION_FRIENDLY); } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp index bcfc6b6b8..3034bb96e 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_brutallus.cpp @@ -304,7 +304,7 @@ struct npc_madrigosa : public NullCreatureAI if (Creature* brutallus = instance->GetCreature(DATA_BRUTALLUS)) { brutallus->SetDisableGravity(true); - brutallus->GetMotionMaster()->MovePoint(0, brutallus->GetPositionX(), brutallus->GetPositionY() - 30.0f, brutallus->GetPositionZ() + 15.0f, false, true); + brutallus->GetMotionMaster()->MovePoint(0, brutallus->GetPositionX(), brutallus->GetPositionY() - 30.0f, brutallus->GetPositionZ() + 15.0f, FORCED_MOVEMENT_NONE, 0.f, 0.f, false, true); } events.ScheduleEvent(EVENT_MAD_15, 10s); break; diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp index 241ec277a..29bf02409 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_felmyst.cpp @@ -205,7 +205,7 @@ struct boss_felmyst : public BossAI // Summon Kalecgos (human form of kalecgos fight) if (Creature* kalec = me->SummonCreature(NPC_KALECGOS_FELMYST, 1573.1461f, 755.20245f, 99.524956f, 3.595378f)) - kalec->GetMotionMaster()->MovePoint(POINT_KALECGOS, 1474.2347f, 624.0703f, 29.32589f, false, true); + kalec->GetMotionMaster()->MovePoint(POINT_KALECGOS, 1474.2347f, 624.0703f, 29.32589f, FORCED_MOVEMENT_NONE, 0.f, 0.f, false, true); } void ScheduleGroundAbilities() @@ -312,9 +312,9 @@ struct boss_felmyst : public BossAI ++_strafeCount; _currentLane = urand(0, 2); if (isRightSide) - me->GetMotionMaster()->MovePoint(POINT_LANE, RightSideLanes[_currentLane], false); + me->GetMotionMaster()->MovePoint(POINT_LANE, RightSideLanes[_currentLane], FORCED_MOVEMENT_NONE, 0.f, false); else - me->GetMotionMaster()->MovePoint(POINT_LANE, LeftSideLanes[_currentLane], false); + me->GetMotionMaster()->MovePoint(POINT_LANE, LeftSideLanes[_currentLane], FORCED_MOVEMENT_NONE, 0.f, false); }, 5s); break; case POINT_LANE: @@ -328,9 +328,9 @@ struct boss_felmyst : public BossAI DoCastSelf(SPELL_FELMYST_SPEED_BURST, true); if (me->FindNearestCreature(NPC_WORLD_TRIGGER_RIGHT, 30.0f)) - me->GetMotionMaster()->MovePoint(POINT_AIR_BREATH_END, LeftSideLanes[_currentLane], false); + me->GetMotionMaster()->MovePoint(POINT_AIR_BREATH_END, LeftSideLanes[_currentLane], FORCED_MOVEMENT_NONE, 0.f, false); else - me->GetMotionMaster()->MovePoint(POINT_AIR_BREATH_END, RightSideLanes[_currentLane], false); + me->GetMotionMaster()->MovePoint(POINT_AIR_BREATH_END, RightSideLanes[_currentLane], FORCED_MOVEMENT_NONE, 0.f, false); }, 5s); break; case POINT_AIR_BREATH_END: @@ -338,9 +338,9 @@ struct boss_felmyst : public BossAI me->m_Events.AddEventAtOffset([&] { if (me->FindNearestCreature(NPC_WORLD_TRIGGER_RIGHT, 30.0f)) - me->GetMotionMaster()->MovePoint(POINT_AIR_UP, RightSide, false); + me->GetMotionMaster()->MovePoint(POINT_AIR_UP, RightSide, FORCED_MOVEMENT_NONE, 0.f, false); else - me->GetMotionMaster()->MovePoint(POINT_AIR_UP, LeftSide, false); + me->GetMotionMaster()->MovePoint(POINT_AIR_UP, LeftSide, FORCED_MOVEMENT_NONE, 0.f, false); }, 2s); break; } diff --git a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp index d331a9658..f48af4456 100644 --- a/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp +++ b/src/server/scripts/EasternKingdoms/SunwellPlateau/boss_kiljaeden.cpp @@ -729,25 +729,18 @@ struct npc_kalecgos_kj : public NullCreatureAI if (summon->GetEntry() == NPC_SHATTERED_SUN_RIFTWAKER) { summon->CastSpell(summon, SPELL_TELEPORT_VISUAL, true); - Movement::MoveSplineInit init(summon); + if (summons.size() == 1) - { - init.MoveTo(1727.08f, 656.82f, 28.37f, false, true); - init.SetFacing(5.14f); - } + summon->GetMotionMaster()->MovePoint(0, 1727.08f, 656.82f, 28.37f, FORCED_MOVEMENT_NONE, 0.f, 5.14f, false, true); else - { - init.MoveTo(1738.84f, 627.32f, 28.26f, false, true); - init.SetFacing(2.0f); - } - init.Launch(); + summon->GetMotionMaster()->MovePoint(0, 1738.84f, 627.32f, 28.26f, FORCED_MOVEMENT_NONE, 0.f, 2.0f, false, true); } else if (summon->GetEntry() == NPC_SHATTRATH_PORTAL_DUMMY) { if (Creature* riftwaker = summon->FindNearestCreature(NPC_SHATTERED_SUN_RIFTWAKER, 10.0f)) riftwaker->CastSpell(summon, SPELL_OPEN_PORTAL_FROM_SHATTRATH, false); summon->SetWalk(true); - summon->GetMotionMaster()->MovePoint(0, summon->GetPositionX(), summon->GetPositionY(), summon->GetPositionZ() + 30.0f, false, true); + summon->GetMotionMaster()->MovePoint(0, summon->GetPositionX(), summon->GetPositionY(), summon->GetPositionZ() + 30.0f, FORCED_MOVEMENT_NONE, 0.f, 0.f, false, true); } else if (summon->GetEntry() == NPC_INERT_PORTAL) summon->CastSpell(summon, SPELL_BOSS_ARCANE_PORTAL_STATE, true); @@ -762,7 +755,7 @@ struct npc_kalecgos_kj : public NullCreatureAI { summon->CastSpell(summon, SPELL_TELEPORT_VISUAL, true); summon->SetWalk(true); - summon->GetMotionMaster()->MovePoint(0, 1710.15f, 639.23f, 27.311f, false, true); + summon->GetMotionMaster()->MovePoint(0, 1710.15f, 639.23f, 27.311f, FORCED_MOVEMENT_NONE, 0.f, 0.f, false, true); } else if (summon->GetEntry() == NPC_THE_CORE_OF_ENTROPIUS) summon->GetMotionMaster()->MovePoint(0, summon->GetPositionX(), summon->GetPositionY(), 30.0f); diff --git a/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp b/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp index 376e74667..a7162ffc8 100644 --- a/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_arathi_highlands.cpp @@ -78,7 +78,7 @@ public: break; case 11: Talk(SAY_PROGRESS_6, player); - SetRun(); + SetRun(true); break; case 19: Talk(SAY_PROGRESS_7, player); @@ -106,7 +106,7 @@ public: if (quest->GetQuestId() == QUEST_SUNKEN_TREASURE) { Talk(SAY_PROGRESS_1, player); - npc_escortAI::Start(false, false, player->GetGUID(), quest); + npc_escortAI::Start(false, player->GetGUID(), quest); me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE); } } diff --git a/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp b/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp index 45184f838..b92bcb616 100644 --- a/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp +++ b/src/server/scripts/EasternKingdoms/zone_elwynn_forest.cpp @@ -112,11 +112,11 @@ struct npc_cameron : public ScriptedAI if (Creature* children = ObjectAccessor::GetCreature(*me, _childrenGUIDs[i])) { children->SetWalk(true); - children->GetMotionMaster()->MovePoint(0, MovePosPositions[i], true, MovePosPositions[i].GetOrientation()); + children->GetMotionMaster()->MovePoint(0, MovePosPositions[i]); } } me->SetWalk(true); - me->GetMotionMaster()->MovePoint(0, MovePosPositions.back(), true, MovePosPositions.back().GetOrientation()); + me->GetMotionMaster()->MovePoint(0, MovePosPositions.back()); } void PathEndReached(uint32 pathId) override diff --git a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp index da2cb493e..09eaaed42 100644 --- a/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_ghostlands.cpp @@ -113,7 +113,7 @@ struct npc_ranger_lilatha : public npc_escortAI if (quest->GetQuestId() == QUEST_ESCAPE_FROM_THE_CATACOMBS) { me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE); - npc_escortAI::Start(true, false, player->GetGUID()); + npc_escortAI::Start(true, player->GetGUID()); } } }; diff --git a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp index 4659c2b79..dc1326932 100644 --- a/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_hinterlands.cpp @@ -132,7 +132,7 @@ public: if (GameObject* go = me->FindNearestGameObject(GO_RINJI_CAGE, INTERACTION_DISTANCE)) go->UseDoorOrButton(); - npc_escortAI::Start(false, false, player->GetGUID(), quest); + npc_escortAI::Start(false, player->GetGUID(), quest); } } @@ -156,7 +156,7 @@ public: case 17: Talk(SAY_RIN_COMPLETE, player); player->GroupEventHappens(QUEST_RINJI_TRAPPED, me); - SetRun(); + SetRun(true); postEventCount = 1; break; } diff --git a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp index bbf103752..b0783d371 100644 --- a/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp +++ b/src/server/scripts/EasternKingdoms/zone_redridge_mountains.cpp @@ -61,7 +61,7 @@ public: if (quest->GetQuestId() == QUEST_MISSING_IN_ACTION) { Talk(SAY_CORPORAL_1, player); - npc_escortAI::Start(true, false, player->GetGUID(), quest); + npc_escortAI::Start(true, player->GetGUID(), quest); me->SetImmuneToNPC(false); me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_ACTIVE); } diff --git a/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp b/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp index 27abbc0b7..12f120398 100644 --- a/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp +++ b/src/server/scripts/EasternKingdoms/zone_silverpine_forest.cpp @@ -111,7 +111,7 @@ public: creature->AI()->Talk(SAY_QUESTACCEPT, player); if (npc_escortAI* pEscortAI = CAST_AI(npc_deathstalker_erland::npc_deathstalker_erlandAI, creature->AI())) - pEscortAI->Start(true, false, player->GetGUID()); + pEscortAI->Start(true, player->GetGUID()); } return true; diff --git a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp index cbf88ba9a..d8203ed9f 100644 --- a/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp +++ b/src/server/scripts/EasternKingdoms/zone_stormwind_city.cpp @@ -406,7 +406,7 @@ public: { if (Player* player = GetPlayerForEscort()) { - CAST_AI(npc_lord_gregor_lescovar::npc_lord_gregor_lescovarAI, pLescovar->AI())->Start(false, false, player->GetGUID()); + CAST_AI(npc_lord_gregor_lescovar::npc_lord_gregor_lescovarAI, pLescovar->AI())->Start(false, player->GetGUID()); CAST_AI(npc_lord_gregor_lescovar::npc_lord_gregor_lescovarAI, pLescovar->AI())->SetMaxPlayerDistance(200.0f); } } @@ -448,7 +448,7 @@ public: { if (Creature* pSpybot = creature->FindNearestCreature(NPC_TYRION_SPYBOT, 5.0f, true)) { - CAST_AI(npc_tyrion_spybot::npc_tyrion_spybotAI, pSpybot->AI())->Start(false, false, player->GetGUID()); + CAST_AI(npc_tyrion_spybot::npc_tyrion_spybotAI, pSpybot->AI())->Start(false, player->GetGUID()); CAST_AI(npc_tyrion_spybot::npc_tyrion_spybotAI, pSpybot->AI())->SetMaxPlayerDistance(200.0f); } return true; diff --git a/src/server/scripts/EasternKingdoms/zone_undercity.cpp b/src/server/scripts/EasternKingdoms/zone_undercity.cpp index 6931fa59c..ad627959f 100644 --- a/src/server/scripts/EasternKingdoms/zone_undercity.cpp +++ b/src/server/scripts/EasternKingdoms/zone_undercity.cpp @@ -142,7 +142,7 @@ public: { summoned->SetDisableGravity(true); float speed = summoned->GetDistance(summoned->GetPositionX(), summoned->GetPositionY(), me->GetPositionZ() + 15.0f) / (1000.0f * 0.001f); - summoned->MonsterMoveWithSpeed(summoned->GetPositionX(), summoned->GetPositionY(), me->GetPositionZ() + 15.0f, speed); + summoned->GetMotionMaster()->MovePoint(0, summoned->GetPositionX(), summoned->GetPositionY(), me->GetPositionZ() + 15.0f, FORCED_MOVEMENT_NONE, speed); summoned->CastSpell(summoned, SPELL_RIBBON_OF_SOULS, false); } } @@ -270,8 +270,7 @@ public: if (EventMoveTimer <= diff) { me->SetDisableGravity(true); - me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), HIGHBORNE_LOC_Y_NEW, me->GetDistance(me->GetPositionX(), me->GetPositionY(), HIGHBORNE_LOC_Y_NEW) / (5000 * 0.001f)); - me->SetPosition(me->GetPositionX(), me->GetPositionY(), HIGHBORNE_LOC_Y_NEW, me->GetOrientation()); + me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), HIGHBORNE_LOC_Y_NEW, FORCED_MOVEMENT_NONE, me->GetDistance(me->GetPositionX(), me->GetPositionY(), HIGHBORNE_LOC_Y_NEW) / (5000 * 0.001f)); EventMove = false; } else EventMoveTimer -= diff; @@ -917,7 +916,8 @@ public: if (auto ai = CAST_AI(npc_varian_wrynn::npc_varian_wrynnAI, creature->AI())) { - ai->Start(true, true, player->GetGUID()); + creature->SetWalk(false); + ai->Start(true, player->GetGUID()); if (Creature* jaina = GetClosestCreatureWithEntry(creature, NPC_JAINA, 50.0f)) ai->jainaGUID = jaina->GetGUID(); else @@ -1218,27 +1218,27 @@ public: { case 0: if (Unit* temp = me->SummonCreature(NPC_DOCTOR, AllianceSpawn[4].x - rand32() % 5, AllianceSpawn[4].y - rand32() % 5, AllianceSpawn[4].z, TEMPSUMMON_DEAD_DESPAWN)) - temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), false); + temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, 0.f, false); break; case 1: if (Unit* temp = me->SummonCreature(NPC_CHEMIST, AllianceSpawn[4].x - rand32() % 5, AllianceSpawn[4].y - rand32() % 5, AllianceSpawn[4].z, TEMPSUMMON_DEAD_DESPAWN)) - temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), false); + temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, 0.f, false); break; case 2: if (Unit* temp = me->SummonCreature(NPC_BETRAYER, AllianceSpawn[4].x - rand32() % 5, AllianceSpawn[4].y - rand32() % 5, AllianceSpawn[4].z, TEMPSUMMON_DEAD_DESPAWN)) - temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), false); + temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, 0.f, false); break; case 3: if (Unit* temp = me->SummonCreature(NPC_DOCTOR, AllianceSpawn[5].x - rand32() % 5, AllianceSpawn[5].y - rand32() % 5, AllianceSpawn[5].z, TEMPSUMMON_DEAD_DESPAWN)) - temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), false); + temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, 0.f, false); break; case 4: if (Unit* temp = me->SummonCreature(NPC_CHEMIST, AllianceSpawn[5].x - rand32() % 5, AllianceSpawn[5].y - rand32() % 5, AllianceSpawn[5].z, TEMPSUMMON_DEAD_DESPAWN)) - temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), false); + temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, 0.f, false); break; case 5: if (Unit* temp = me->SummonCreature(NPC_BETRAYER, AllianceSpawn[5].x - rand32() % 5, AllianceSpawn[5].y - rand32() % 5, AllianceSpawn[5].z, TEMPSUMMON_DEAD_DESPAWN)) - temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), false); + temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, 0.f, false); break; } } @@ -1246,7 +1246,7 @@ public: case 5: for (uint8 i = 0; i < WAVE_MAXCOUNT; ++i) if (Unit* temp = me->SummonCreature(NPC_GUARDIAN, AllianceSpawn[6].x - rand32() % 5, AllianceSpawn[6].y - rand32() % 5, AllianceSpawn[6].z, TEMPSUMMON_DEAD_DESPAWN)) - temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), false); + temp->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, 0.f, false); break; case 6: if (Unit* temp = me->SummonCreature(NPC_BLIGHTWORM, AllianceSpawn[7].x, AllianceSpawn[7].y, AllianceSpawn[7].z, TEMPSUMMON_MANUAL_DESPAWN)) @@ -1614,7 +1614,7 @@ public: break; case 22: Talk(WRYNN_SAY_SEWERS_4); - SetRun(false); + me->SetWalk(true); if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID)) { jaina->GetMotionMaster()->Clear(); @@ -1665,7 +1665,7 @@ public: JumpToNextStep(3 * IN_MILLISECONDS); break; case 31: - SetRun(true); + me->SetWalk(false); if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID)) jaina->GetMotionMaster()->MoveFollow(me, 1, 0); SetEscortPaused(false); @@ -1727,7 +1727,7 @@ public: if (Creature* jaina = ObjectAccessor::GetCreature(*me, jainaGUID)) { jaina->GetMotionMaster()->Clear(); - jaina->GetMotionMaster()->MovePoint(0, AllianceWP[7].x, AllianceWP[7].y, AllianceWP[7].z, false); + jaina->GetMotionMaster()->MovePoint(0, AllianceWP[7].x, AllianceWP[7].y, AllianceWP[7].z, FORCED_MOVEMENT_NONE, 0.f, 0.f, false); } JumpToNextStep(5 * IN_MILLISECONDS); break; @@ -1789,7 +1789,7 @@ public: break; case 54: Talk(WRYNN_SAY_APO_7); - SetRun(false); + me->SetWalk(true); JumpToNextStep(4 * IN_MILLISECONDS); break; case 55: @@ -1845,7 +1845,7 @@ public: JumpToNextStep(1.5 * IN_MILLISECONDS); break; case 65: - SetRun(true); + me->SetWalk(false); SetEscortPaused(false); JumpToNextStep(0.25 * IN_MILLISECONDS); break; @@ -2236,7 +2236,8 @@ public: if (Creature* sylvannas = GetClosestCreatureWithEntry(creature, NPC_SYLVANAS, 50.0f)) { thrall_ai->sylvanasfollowGUID = sylvannas->GetGUID(); - thrall_ai->Start(true, true, player->GetGUID()); + creature->SetWalk(false); + thrall_ai->Start(true, player->GetGUID()); thrall_ai->SetDespawnAtEnd(false); thrall_ai->SetDespawnAtFar(false); } @@ -2477,7 +2478,7 @@ public: for (std::list::iterator itr = ThroneList.begin(); itr != ThroneList.end(); itr++) (*itr)->DespawnOrUnsummon(); SetEscortPaused(false); - SetRun(false); + me->SetWalk(true); break; } default: @@ -2972,7 +2973,7 @@ public: SetEscortPaused(false); bStepping = false; JumpToNextStep(0); - SetRun(true); + me->SetWalk(false); if (Creature* sylvanas = ObjectAccessor::GetCreature(*me, sylvanasfollowGUID)) { sylvanas->GetMotionMaster()->MovePath(NPC_SYLVANAS * 100, false); @@ -3005,7 +3006,7 @@ public: for (std::list::iterator itr = PlagueList.begin(); itr != PlagueList.end(); itr++) (*itr)->DespawnOrUnsummon(); SetEscortPaused(false); - SetRun(false); + me->SetWalk(true); if (Creature* sylvanas = ObjectAccessor::GetCreature(*me, sylvanasfollowGUID)) sylvanas->GetMotionMaster()->MovePath(NPC_SYLVANAS * 1000, false); JumpToNextStep(3 * IN_MILLISECONDS); @@ -3077,7 +3078,7 @@ public: FollowThrall(); SetEscortPaused(false); bStepping = false; - SetRun(true); + me->SetWalk(false); Talk(THRALL_SAY_COURTYARD_4); UpdateWorldState(me->GetMap(), WORLD_STATE_BATTLE_FOR_UNDERCITY_START_H, 0); UpdateWorldState(me->GetMap(), WORLD_STATE_BATTLE_FOR_UNDERCITY_COURTYARD_FIGHT_H, 1); @@ -3182,7 +3183,7 @@ public: SpawnWave(6); SetEscortPaused(false); bStepping = false; - SetRun(false); + me->SetWalk(true); JumpToNextStep(0 * IN_MILLISECONDS); break; } @@ -3226,7 +3227,7 @@ public: FollowThrall(); SetEscortPaused(false); bStepping = false; - SetRun(false); + me->SetWalk(true); JumpToNextStep(0 * IN_MILLISECONDS); break; // Top of Undercity Discussion @@ -3266,7 +3267,7 @@ public: FollowThrall(); SetEscortPaused(false); bStepping = false; - SetRun(false); + me->SetWalk(true); JumpToNextStep(0 * IN_MILLISECONDS); break; case 63: @@ -3284,7 +3285,7 @@ public: FollowThrall(); SetEscortPaused(false); bStepping = false; - SetRun(false); + me->SetWalk(true); JumpToNextStep(0 * IN_MILLISECONDS); break; case 67: @@ -3299,7 +3300,7 @@ public: FollowThrall(); SetEscortPaused(false); bStepping = false; - SetRun(false); + me->SetWalk(true); JumpToNextStep(0 * IN_MILLISECONDS); break; // KHANOK - Valimathtas Intro @@ -3475,7 +3476,7 @@ public: FollowThrall(); SetEscortPaused(false); bStepping = false; - SetRun(false); + me->SetWalk(true); JumpToNextStep(0 * IN_MILLISECONDS); break; case 109: @@ -3491,7 +3492,7 @@ public: FollowThrall(); SetEscortPaused(false); bStepping = false; - SetRun(true); + me->SetWalk(false); JumpToNextStep(0 * IN_MILLISECONDS); break; case 112: @@ -3662,7 +3663,7 @@ public: case 143: if (Creature* sylvanas = ObjectAccessor::GetCreature(*me, sylvanasfollowGUID)) { - sylvanas->GetMotionMaster()->MovePoint(0, 1289.48f, 314.33f, -57.32f, true); + sylvanas->GetMotionMaster()->MovePoint(0, 1289.48f, 314.33f, -57.32f); sylvanas->CastSpell(sylvanas, SPELL_LEAP_TO_PLATFORM); } JumpToNextStep(10 * IN_MILLISECONDS); @@ -3706,7 +3707,7 @@ public: wrynn->SetImmuneToAll(true); wrynn->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_READY2H); wrynn->SetReactState(REACT_PASSIVE); - wrynn->GetMotionMaster()->MovePoint(0, 1302.543f, 359.472f, -67.295f, true); + wrynn->GetMotionMaster()->MovePoint(0, 1302.543f, 359.472f, -67.295f); } if (Creature* jaina = me->SummonCreature(NPC_JAINA, 1308.862f, 381.809f, -66.044243f, TEMPSUMMON_MANUAL_DESPAWN)) { @@ -3807,7 +3808,7 @@ public: { SaurfangGUID = saurfang->GetGUID(); saurfang->SetWalk(true); - saurfang->GetMotionMaster()->MovePoint(0, 1300.862f, 353.670f, -66.187f, true); + saurfang->GetMotionMaster()->MovePoint(0, 1300.862f, 353.670f, -66.187f); } JumpToNextStep(7 * IN_MILLISECONDS); break; diff --git a/src/server/scripts/EasternKingdoms/zone_westfall.cpp b/src/server/scripts/EasternKingdoms/zone_westfall.cpp index 6d54a0cc2..fe7125376 100644 --- a/src/server/scripts/EasternKingdoms/zone_westfall.cpp +++ b/src/server/scripts/EasternKingdoms/zone_westfall.cpp @@ -56,9 +56,9 @@ public: if (quest->GetQuestId() == QUEST_TOME_VALOR) { creature->AI()->Talk(SAY_DS_START); - + creature->SetWalk(false); if (npc_escortAI* pEscortAI = CAST_AI(npc_daphne_stilwell::npc_daphne_stilwellAI, creature->AI())) - pEscortAI->Start(true, true, player->GetGUID()); + pEscortAI->Start(true, player->GetGUID()); } return true; diff --git a/src/server/scripts/EasternKingdoms/zone_wetlands.cpp b/src/server/scripts/EasternKingdoms/zone_wetlands.cpp index 911841181..97efd21c6 100644 --- a/src/server/scripts/EasternKingdoms/zone_wetlands.cpp +++ b/src/server/scripts/EasternKingdoms/zone_wetlands.cpp @@ -62,7 +62,7 @@ public: case 2: if (me->HasStealthAura()) me->RemoveAurasByType(SPELL_AURA_MOD_STEALTH); - SetRun(); + me->SetWalk(false); me->SetFaction(FACTION_ENEMY); break; } @@ -109,7 +109,7 @@ public: me->GetThreatMgr().ClearAllThreat(); me->CombatStop(true); - SetRun(false); + me->SetWalk(true); } } } @@ -138,7 +138,7 @@ public: pSlim->CastSpell(pSlim, SPELL_STEALTH, true); if (npc_tapoke_slim_jahn::npc_tapoke_slim_jahnAI* pEscortAI = CAST_AI(npc_tapoke_slim_jahn::npc_tapoke_slim_jahnAI, pSlim->AI())) - pEscortAI->Start(false, false, player->GetGUID(), quest); + pEscortAI->Start(false, player->GetGUID(), quest); } return false; } diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp index f3a825a37..cd5818bfe 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/CullingOfStratholme/culling_of_stratholme.cpp @@ -678,19 +678,19 @@ public: me->SummonCreature(NPC_JAINA, EventPos[EVENT_SRC_JAINA], TEMPSUMMON_DEAD_DESPAWN, 180000); if (Creature* uther = me->SummonCreature(NPC_UTHER, EventPos[EVENT_SRC_UTHER], TEMPSUMMON_DEAD_DESPAWN, 180000)) { - uther->GetMotionMaster()->MovePoint(0, EventPos[EVENT_DST_UTHER], false); + uther->GetMotionMaster()->MovePoint(0, EventPos[EVENT_DST_UTHER], FORCED_MOVEMENT_NONE, 0.f, false); uther->SetTarget(me->GetGUID()); me->SetTarget(uther->GetGUID()); } for (int i = 0; i < 3; ++i) if (Creature* horse = me->SummonCreature(NPC_HORSE_ESCORT, EventPos[EVENT_SRC_HORSE1 + i], TEMPSUMMON_DEAD_DESPAWN, 180000)) - horse->GetMotionMaster()->MovePoint(0, EventPos[EVENT_DST_HORSE1 + i], false); + horse->GetMotionMaster()->MovePoint(0, EventPos[EVENT_DST_HORSE1 + i], FORCED_MOVEMENT_NONE, 0.f, false); ScheduleNextEvent(currentEvent, 4s); break; case EVENT_ACTION_PHASE1+1: // Start Event - Start(true, false); + Start(true); SetDespawnAtEnd(false); SetDespawnAtFar(false); @@ -782,7 +782,7 @@ public: { Creature* summon = ObjectAccessor::GetCreature(*me, *i); if (summon && summon->GetEntry() == NPC_HORSE_ESCORT) - summon->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], false); + summon->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], FORCED_MOVEMENT_NONE, 0.f, false); } ScheduleNextEvent(currentEvent, 1s); @@ -792,7 +792,7 @@ public: { uther->SetTarget(); uther->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); - uther->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], false); + uther->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], FORCED_MOVEMENT_NONE, 0.f, false); } ScheduleNextEvent(currentEvent, 1s); break; @@ -801,7 +801,7 @@ public: { jaina->SetTarget(); jaina->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); - jaina->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], false); + jaina->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], FORCED_MOVEMENT_NONE, 0.f, false); } Talk(SAY_PHASE116); ScheduleNextEvent(currentEvent, 2s); @@ -819,7 +819,7 @@ public: if (Creature* jaina = GetEventNpc(NPC_JAINA)) { jaina->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); - jaina->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], false); + jaina->GetMotionMaster()->MovePoint(0, EventPos[EVENT_POS_RETREAT], FORCED_MOVEMENT_NONE, 0.f, false); } summons.DespawnEntry(NPC_HORSE_ESCORT); ScheduleNextEvent(currentEvent, 4s); @@ -1242,7 +1242,8 @@ void npc_arthas::npc_arthasAI::JustEngagedWith(Unit* /*who*/) void npc_arthas::npc_arthasAI::ReorderInstance(uint32 data) { - Start(true, true); + me->SetWalk(false); + Start(true); SetEscortPaused(true); SetDespawnAtEnd(false); diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp index 9cca30b58..141fe70d8 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/EscapeFromDurnholdeKeep/old_hillsbrad.cpp @@ -566,7 +566,8 @@ public: me->SummonCreature(NPC_DURNHOLDE_MAGE, 2108.4856f, 189.93457f, 66.30494f, 2.6878f, TEMPSUMMON_CORPSE_TIMED_DESPAWN, 30 * IN_MILLISECONDS); break; case EVENT_START_WP: - Start(true, true); + me->SetWalk(false); + Start(true); SetDespawnAtEnd(false); break; case EVENT_SET_FACING: @@ -809,7 +810,7 @@ public: if (Creature* epoch = summons.GetCreatureWithEntry(NPC_EPOCH_HUNTER)) { epoch->SetImmuneToAll(false); - epoch->GetMotionMaster()->MovePoint(0, *me, false, true); + epoch->GetMotionMaster()->MovePoint(0, *me, FORCED_MOVEMENT_NONE, 0.f, false, true); } break; case EVENT_THRALL_FACE_TARETHA: @@ -922,7 +923,8 @@ public: void ReorderInstance(uint32 data) { - Start(true, true); + me->SetWalk(false); + Start(true); SetEscortPaused(true); SetDespawnAtEnd(false); @@ -1008,7 +1010,8 @@ public: { me->SetStandState(UNIT_STAND_STATE_STAND); me->RemoveAllAuras(); - Start(false, true); + me->SetWalk(false); + Start(false); } void WaypointReached(uint32 waypointId) override diff --git a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp index 72895bb9f..e0114b616 100644 --- a/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp +++ b/src/server/scripts/Kalimdor/CavernsOfTime/TheBlackMorass/the_black_morass.cpp @@ -118,7 +118,7 @@ struct npc_medivh_bm : public ScriptedAI summon->CastSpell(summon, SPELL_BLACK_CRYSTAL, true); Movement::MoveSplineInit init(summon); init.MovebyPath(_groundArray); - init.SetCyclic(); + init.SetCyclic(); // TODO: Add support for cyclic paths in motion master init.Launch(); } } diff --git a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp index 319bb5e2a..21e505b3d 100644 --- a/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp +++ b/src/server/scripts/Kalimdor/RuinsOfAhnQiraj/boss_rajaxx.cpp @@ -209,7 +209,8 @@ struct npc_general_andorov : public npc_escortAI _initialAttackTimer = 5 * IN_MILLISECONDS; _paused = false; - Start(false, true); + me->SetWalk(false); + Start(false); me->SetImmuneToNPC(true); me->SetUnitFlag(UNIT_FLAG_NON_ATTACKABLE); diff --git a/src/server/scripts/Kalimdor/zone_ashenvale.cpp b/src/server/scripts/Kalimdor/zone_ashenvale.cpp index e7131c5fd..c4d2c80a6 100644 --- a/src/server/scripts/Kalimdor/zone_ashenvale.cpp +++ b/src/server/scripts/Kalimdor/zone_ashenvale.cpp @@ -121,7 +121,7 @@ public: { Talk(SAY_MUG_START1); me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE); - npc_escortAI::Start(true, false, player->GetGUID()); + npc_escortAI::Start(true, player->GetGUID()); } } diff --git a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp index 7069cd381..b2f46e194 100644 --- a/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp +++ b/src/server/scripts/Kalimdor/zone_azuremyst_isle.cpp @@ -289,7 +289,7 @@ public: case EVENT_START_ESCORT: if (Player* player = ObjectAccessor::GetPlayer(*me, _player)) { - npc_escortAI::Start(true, false, player->GetGUID()); + npc_escortAI::Start(true, player->GetGUID()); } _events.ScheduleEvent(EVENT_STAND, 2s); break; diff --git a/src/server/scripts/Kalimdor/zone_darkshore.cpp b/src/server/scripts/Kalimdor/zone_darkshore.cpp index f0b5791e7..02b0ae885 100644 --- a/src/server/scripts/Kalimdor/zone_darkshore.cpp +++ b/src/server/scripts/Kalimdor/zone_darkshore.cpp @@ -397,7 +397,7 @@ public: if (quest->GetQuestId() == QUEST_ABSENT_MINDED_PT2) { if (npc_escortAI* pEscortAI = CAST_AI(npc_prospector_remtravel::npc_prospector_remtravelAI, creature->AI())) - pEscortAI->Start(false, false, player->GetGUID()); + pEscortAI->Start(false, player->GetGUID()); creature->SetFaction(FACTION_ESCORTEE_A_NEUTRAL_PASSIVE); } diff --git a/src/server/scripts/Kalimdor/zone_desolace.cpp b/src/server/scripts/Kalimdor/zone_desolace.cpp index 782e25034..c6a6ecd93 100644 --- a/src/server/scripts/Kalimdor/zone_desolace.cpp +++ b/src/server/scripts/Kalimdor/zone_desolace.cpp @@ -396,7 +396,8 @@ public: case EVENT_RESTART_ESCORT: CheckCaravan(); SetDespawnAtEnd(false); - Start(true, true, ObjectGuid::Empty, 0, false, false, true); + SetRun(true); + Start(true, ObjectGuid::Empty, 0, false, false, true); break; } diff --git a/src/server/scripts/Kalimdor/zone_moonglade.cpp b/src/server/scripts/Kalimdor/zone_moonglade.cpp index 2bf790318..8ef469fe1 100644 --- a/src/server/scripts/Kalimdor/zone_moonglade.cpp +++ b/src/server/scripts/Kalimdor/zone_moonglade.cpp @@ -384,7 +384,7 @@ public: AddWaypoint(i, Clintar_spirit_WP[i][0], Clintar_spirit_WP[i][1], Clintar_spirit_WP[i][2], (uint32)Clintar_spirit_WP[i][4]); } PlayerGUID = player->GetGUID(); - Start(true, false, PlayerGUID); + Start(true, PlayerGUID); } return; } diff --git a/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp b/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp index 6f8323126..e84655243 100644 --- a/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp +++ b/src/server/scripts/Kalimdor/zone_stonetalon_mountains.cpp @@ -137,7 +137,7 @@ public: if (quest->GetQuestId() == QUEST_PROTECT_KAYA) { if (npc_escortAI* pEscortAI = CAST_AI(npc_kaya_flathoof::npc_kaya_flathoofAI, creature->AI())) - pEscortAI->Start(true, false, player->GetGUID()); + pEscortAI->Start(true, player->GetGUID()); creature->AI()->Talk(SAY_START); creature->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE); diff --git a/src/server/scripts/Kalimdor/zone_tanaris.cpp b/src/server/scripts/Kalimdor/zone_tanaris.cpp index 88c7eb7e4..bf080107b 100644 --- a/src/server/scripts/Kalimdor/zone_tanaris.cpp +++ b/src/server/scripts/Kalimdor/zone_tanaris.cpp @@ -260,7 +260,7 @@ public: float Radius = 10.0f; if (me->IsWithinDistInMap(who, Radius)) { - Start(false, false, who->GetGUID()); + Start(false, who->GetGUID()); } } } diff --git a/src/server/scripts/Kalimdor/zone_the_barrens.cpp b/src/server/scripts/Kalimdor/zone_the_barrens.cpp index 7cd22ac07..984180386 100644 --- a/src/server/scripts/Kalimdor/zone_the_barrens.cpp +++ b/src/server/scripts/Kalimdor/zone_the_barrens.cpp @@ -55,7 +55,7 @@ public: creature->AI()->Talk(SAY_GIL_START, player); if (npc_giltharesAI* pEscortAI = CAST_AI(npc_gilthares::npc_giltharesAI, creature->AI())) - pEscortAI->Start(false, false, player->GetGUID(), quest); + pEscortAI->Start(false, player->GetGUID(), quest); } return true; } @@ -528,7 +528,7 @@ public: break; case 18: Talk(SAY_PROGRESS_1, player); - SetRun(); + SetRun(true); break; } } @@ -594,7 +594,7 @@ public: creature->SetFaction(FACTION_RATCHET); creature->AI()->Talk(SAY_START); if (npc_escortAI* pEscortAI = CAST_AI(npc_wizzlecrank_shredder::npc_wizzlecrank_shredderAI, creature->AI())) - pEscortAI->Start(true, false, player->GetGUID()); + pEscortAI->Start(true, player->GetGUID()); } return true; } diff --git a/src/server/scripts/Kalimdor/zone_thousand_needles.cpp b/src/server/scripts/Kalimdor/zone_thousand_needles.cpp index 2a80cd90e..5a3de8eda 100644 --- a/src/server/scripts/Kalimdor/zone_thousand_needles.cpp +++ b/src/server/scripts/Kalimdor/zone_thousand_needles.cpp @@ -66,7 +66,7 @@ public: creature->SetFaction(FACTION_ESCORTEE_H_NEUTRAL_ACTIVE); //guessed if (npc_lakota_windsongAI* pEscortAI = CAST_AI(npc_lakota_windsong::npc_lakota_windsongAI, creature->AI())) - pEscortAI->Start(false, false, player->GetGUID(), quest); + pEscortAI->Start(false, player->GetGUID(), quest); } return true; } @@ -148,7 +148,7 @@ public: creature->SetFaction(FACTION_ESCORTEE_H_NEUTRAL_ACTIVE); // guessed if (npc_paoka_swiftmountainAI* pEscortAI = CAST_AI(npc_paoka_swiftmountain::npc_paoka_swiftmountainAI, creature->AI())) - pEscortAI->Start(false, false, player->GetGUID(), quest); + pEscortAI->Start(false, player->GetGUID(), quest); } return true; } diff --git a/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp b/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp index 131baf868..4ccf3b6b3 100644 --- a/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp +++ b/src/server/scripts/Kalimdor/zone_ungoro_crater.cpp @@ -48,7 +48,7 @@ public: { if (quest->GetQuestId() == QUEST_CHASING_AME) { - CAST_AI(npc_escortAI, (creature->AI()))->Start(false, false, player->GetGUID()); + CAST_AI(npc_escortAI, (creature->AI()))->Start(false, player->GetGUID()); creature->AI()->Talk(SAY_READY, player); creature->SetUInt32Value(UNIT_FIELD_BYTES_1, 0); // Change faction so mobs attack diff --git a/src/server/scripts/Kalimdor/zone_winterspring.cpp b/src/server/scripts/Kalimdor/zone_winterspring.cpp index e3a14d203..4339da183 100644 --- a/src/server/scripts/Kalimdor/zone_winterspring.cpp +++ b/src/server/scripts/Kalimdor/zone_winterspring.cpp @@ -286,7 +286,7 @@ public: creature->SetFaction(FACTION_ESCORT_A_NEUTRAL_PASSIVE); if (npc_ranshallaAI* escortAI = dynamic_cast(creature->AI())) - escortAI->Start(false, false, player->GetGUID(), quest); + escortAI->Start(false, player->GetGUID(), quest); return true; } diff --git a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp index 4aa00764c..8f66ac8ce 100644 --- a/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/AzjolNerub/boss_hadronox.cpp @@ -258,7 +258,7 @@ public: { if (summon->GetEntry() != me->GetEntry()) { - summon->GetMotionMaster()->MovePoint(0, *me, false); + summon->GetMotionMaster()->MovePoint(0, *me, FORCED_MOVEMENT_NONE, 0.f, false); summon->GetMotionMaster()->MoveFollow(me, 0.1f, 0.0f + M_PI * 0.3f * summons.size()); } summons.Summon(summon); diff --git a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp index 574db0338..d342ea786 100644 --- a/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp +++ b/src/server/scripts/Northrend/AzjolNerub/ahnkahet/boss_jedoga_shadowseeker.cpp @@ -173,7 +173,7 @@ struct boss_jedoga_shadowseeker : public BossAI me->AddUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD); me->SetDisableGravity(true); me->SetHover(true); - me->GetMotionMaster()->MovePoint(POINT_INITIAL, JedogaPosition[0], false); + me->GetMotionMaster()->MovePoint(POINT_INITIAL, JedogaPosition[0], FORCED_MOVEMENT_NONE, 0.f, false); _Reset(); events.SetPhase(PHASE_NORMAL); @@ -247,7 +247,7 @@ struct boss_jedoga_shadowseeker : public BossAI DespawnOOCSummons(); DoCastSelf(SPELL_HOVER_FALL); me->GetMotionMaster()->MoveIdle(); - me->GetMotionMaster()->MovePoint(POINT_DOWN, JedogaPosition[1], false); + me->GetMotionMaster()->MovePoint(POINT_DOWN, JedogaPosition[1], FORCED_MOVEMENT_NONE, 0.f, false); if (!combatSummonsSummoned) { @@ -397,7 +397,7 @@ struct boss_jedoga_shadowseeker : public BossAI volunteerWork = false; me->GetMotionMaster()->Clear(); DoCastSelf(SPELL_HOVER_FALL); - me->GetMotionMaster()->MovePoint(POINT_DOWN, JedogaPosition[1], false); + me->GetMotionMaster()->MovePoint(POINT_DOWN, JedogaPosition[1], FORCED_MOVEMENT_NONE, 0.f, false); } } break; @@ -504,7 +504,7 @@ struct boss_jedoga_shadowseeker : public BossAI summons.DespawnEntry(NPC_JEDOGA_CONTROLLER); DoCastSelf(SPELL_HOVER_FALL); me->GetMotionMaster()->Clear(); - me->GetMotionMaster()->MovePoint(POINT_DOWN, JedogaPosition[1], false); + me->GetMotionMaster()->MovePoint(POINT_DOWN, JedogaPosition[1], FORCED_MOVEMENT_NONE, 0.f, false); break; } case EVENT_JEDGA_START_RITUAL: @@ -663,7 +663,7 @@ struct npc_twilight_volunteer : public ScriptedAI me->GetMotionMaster()->Clear(); me->SetHomePosition(JedogaPosition[2]); me->SetWalk(true); - me->GetMotionMaster()->MovePoint(POINT_RITUAL, JedogaPosition[2], false); + me->GetMotionMaster()->MovePoint(POINT_RITUAL, JedogaPosition[2], FORCED_MOVEMENT_NONE, 0.f, false); if (Creature* jedoga = pInstance->GetCreature(DATA_JEDOGA_SHADOWSEEKER)) { diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp index f55d5f49a..1707433e6 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_general_zarithrian.cpp @@ -210,7 +210,8 @@ public: { _lavaGoutCount = 0; AddWaypoints(); - Start(true, true); + me->SetWalk(false); + Start(true); } void JustEngagedWith(Unit* /*who*/) override diff --git a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp index 26a0cf54d..7b6aa9e8f 100644 --- a/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp +++ b/src/server/scripts/Northrend/ChamberOfAspects/RubySanctum/boss_saviana_ragefire.cpp @@ -144,7 +144,7 @@ public: me->SetReactState(REACT_PASSIVE); me->AttackStop(); me->SetDisableGravity(true); - me->GetMotionMaster()->MovePoint(POINT_TAKEOFF, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 6.0f, false); + me->GetMotionMaster()->MovePoint(POINT_TAKEOFF, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 6.0f, FORCED_MOVEMENT_NONE, 0.f, 0.f, false); events.ScheduleEvent(EVENT_FLIGHT, 50s); events.DelayEvents(15s); events.ScheduleEvent(EVENT_AIR_MOVEMENT, 2s); @@ -163,10 +163,10 @@ public: events.ScheduleEvent(EVENT_FLAME_BREATH, 20s, 30s); break; case EVENT_AIR_MOVEMENT: - me->GetMotionMaster()->MovePoint(POINT_FLIGHT, 3155.51f, 683.844f, 95.0f, false); + me->GetMotionMaster()->MovePoint(POINT_FLIGHT, 3155.51f, 683.844f, 95.0f, FORCED_MOVEMENT_NONE, 0.f, 0.f, false); break; case EVENT_LAND_BACK: - me->GetMotionMaster()->MovePoint(POINT_LAND, 3151.07f, 636.443f, 80.0f, false); + me->GetMotionMaster()->MovePoint(POINT_LAND, 3151.07f, 636.443f, 80.0f, FORCED_MOVEMENT_NONE, 0.f, 0.f, false); break; case EVENT_LAND_GROUND: me->SetReactState(REACT_AGGRESSIVE); diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp index 2386bdd34..3aea12fb0 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_argent_challenge.cpp @@ -607,7 +607,8 @@ public: break; } - Start(false, true); + me->SetWalk(false); + Start(false); uiWaypoint = uiType; } diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp index aa99e4da4..497b0c42d 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_black_knight.cpp @@ -339,7 +339,8 @@ public: void Reset() override { - Start(false, true, ObjectGuid::Empty, nullptr); + me->SetWalk(false); + Start(false, ObjectGuid::Empty, nullptr); SetDespawnAtEnd(true); me->SetFlag(UNIT_FIELD_FLAGS, UNIT_FLAG_NON_ATTACKABLE); me->SetImmuneToAll(true); diff --git a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp index 6f1a3620f..7262a5528 100644 --- a/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp +++ b/src/server/scripts/Northrend/CrusadersColiseum/TrialOfTheChampion/boss_grand_champions.cpp @@ -549,7 +549,8 @@ public: return; } - Start(false, true); + me->SetWalk(false); + Start(false); } void DamageTaken(Unit*, uint32& damage, DamageEffectType, SpellSchoolMask) override diff --git a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp index f3ba31fc2..db638f0a0 100644 --- a/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/HallsOfReflection/halls_of_reflection.cpp @@ -571,7 +571,7 @@ public: pInstance->HandleGameObject(pInstance->GetGuidData(GO_ARTHAS_DOOR), true); pLichKing->SetVisible(true); - pLichKing->GetMotionMaster()->MovePoint(0, LichKingMoveMidlelThronePos, false); + pLichKing->GetMotionMaster()->MovePoint(0, LichKingMoveMidlelThronePos, FORCED_MOVEMENT_NONE, 0.f, false); } @@ -618,7 +618,7 @@ public: if (Creature* pLichKing = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_LICH_KING_EVENT))) { pLichKing->SetVisible(true); - pLichKing->GetMotionMaster()->MovePoint(0, LichKingMoveThronePos, false); + pLichKing->GetMotionMaster()->MovePoint(0, LichKingMoveThronePos, FORCED_MOVEMENT_NONE, 0.f, false); } events.ScheduleEvent(EVENT_INTRO_LK_2_1, 1s); break; @@ -709,7 +709,7 @@ public: case EVENT_INTRO_LK_5_2: if (Creature* pLichKing = ObjectAccessor::GetCreature(*me, pInstance->GetGuidData(NPC_LICH_KING_EVENT))) { - pLichKing->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos, false); + pLichKing->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos, FORCED_MOVEMENT_NONE, 0.f, false); } break; @@ -763,11 +763,11 @@ public: { Talk(SAY_SYLVANAS_INTRO_END); me->HandleEmoteCommand(EMOTE_ONESHOT_EXCLAMATION); - me->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos, false); + me->GetMotionMaster()->MovePoint(0, LichKingMoveAwayPos, FORCED_MOVEMENT_NONE, 0.f, false); } if (Creature* pLoralen = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN))) { - pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowLk1, false); + pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowLk1, FORCED_MOVEMENT_NONE, 0.f, false); } events.ScheduleEvent(EVENT_INTRO_LK_10, 1s + 500ms); break; @@ -775,7 +775,7 @@ public: case EVENT_INTRO_LK_10: if (Creature* pLoralen = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN))) { - pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowLk2, false); + pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowLk2, FORCED_MOVEMENT_NONE, 0.f, false); } events.ScheduleEvent(EVENT_INTRO_LK_11, 2s); @@ -784,7 +784,7 @@ public: case EVENT_INTRO_LK_11: if (Creature* pLoralen = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN))) { - pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowLk3, false); + pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowLk3, FORCED_MOVEMENT_NONE, 0.f, false); } events.ScheduleEvent(EVENT_INTRO_LK_12, 5s + 500ms); break; @@ -796,7 +796,7 @@ public: } if (Creature* pLoralen = pInstance->instance->GetCreature(pInstance->GetGuidData(NPC_DARK_RANGER_LORALEN))) { - pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowLkFinal, false); + pLoralen->GetMotionMaster()->MovePoint(0, LoralenFollowLkFinal, FORCED_MOVEMENT_NONE, 0.f, false); } events.ScheduleEvent(EVENT_INTRO_LK_13, 2s); break; diff --git a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp index bebf2da81..805f21e46 100644 --- a/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp +++ b/src/server/scripts/Northrend/FrozenHalls/PitOfSaron/pit_of_saron.cpp @@ -674,14 +674,14 @@ public: switch (events.ExecuteEvent()) { case 1: - me->GetMotionMaster()->MovePoint(2, PTSTyrannusWaitPos1, false); + me->GetMotionMaster()->MovePoint(2, PTSTyrannusWaitPos1, FORCED_MOVEMENT_NONE, 0.f, false); break; case 2: me->SetFacingTo(PTSTyrannusWaitPos1.GetOrientation()); me->setActive(false); break; case 3: - me->GetMotionMaster()->MovePoint(3, PTSTyrannusWaitPos2, false); + me->GetMotionMaster()->MovePoint(3, PTSTyrannusWaitPos2, FORCED_MOVEMENT_NONE, 0.f, false); break; case 4: me->SetFacingTo(PTSTyrannusWaitPos2.GetOrientation()); @@ -690,7 +690,7 @@ public: me->GetMotionMaster()->MoveTakeoff(10, me->GetPositionX() + 2.0f * cos(me->GetOrientation()), me->GetPositionY() + 2.0f * std::sin(me->GetOrientation()), me->GetPositionZ() + 30.0f, 7.0f); break; case 6: - me->GetMotionMaster()->MovePoint(4, PTSTyrannusWaitPos3, false); + me->GetMotionMaster()->MovePoint(4, PTSTyrannusWaitPos3, FORCED_MOVEMENT_NONE, 0.f, false); break; case 30: { @@ -1355,7 +1355,7 @@ public: } } if (minDist < 200.0f * 200.0f) - _owner.GetMotionMaster()->MovePoint(0, slaveFreePos[pointId], true, false); + _owner.GetMotionMaster()->MovePoint(0, slaveFreePos[pointId], FORCED_MOVEMENT_NONE, 0.f, true, false); return true; } diff --git a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp index ef11e32a6..17d923c5e 100644 --- a/src/server/scripts/Northrend/Gundrak/boss_eck.cpp +++ b/src/server/scripts/Northrend/Gundrak/boss_eck.cpp @@ -58,7 +58,7 @@ public: void InitializeAI() override { BossAI::InitializeAI(); - me->GetMotionMaster()->MovePoint(POINT_START, 1638.55f, 919.76f, 104.95f, false); + me->GetMotionMaster()->MovePoint(POINT_START, 1638.55f, 919.76f, 104.95f, FORCED_MOVEMENT_NONE, 0.f, 0.f, false); me->SetHomePosition(1642.712f, 934.646f, 107.205f, 0.767f); me->SetReactState(REACT_PASSIVE); } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp index b6915138c..fdf316579 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_deathbringer_saurfang.cpp @@ -583,7 +583,7 @@ public: { me->RemoveAurasDueToSpell(SPELL_GRIP_OF_AGONY); me->SetDisableGravity(false); - me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), 539.2917f, 10.0f); + me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), 539.2917f, FORCED_MOVEMENT_NONE, 10.0f); for (std::list::iterator itr = _guardList.begin(); itr != _guardList.end(); ++itr) (*itr)->AI()->DoAction(ACTION_DESPAWN); @@ -845,7 +845,7 @@ public: { me->RemoveAurasDueToSpell(SPELL_GRIP_OF_AGONY); me->SetDisableGravity(false); - me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), 539.2917f, 10.0f); + me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), 539.2917f, FORCED_MOVEMENT_NONE, 10.0f); for (std::list::iterator itr = _guardList.begin(); itr != _guardList.end(); ++itr) (*itr)->AI()->DoAction(ACTION_DESPAWN); diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp index fd4f2208d..3eda17921 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_icecrown_gunship_battle.cpp @@ -503,7 +503,7 @@ public: float x, y, z, o; _dest.GetPosition(x, y, z, o); _owner->GetTransport()->CalculatePassengerPosition(x, y, z, &o); - _owner->GetMotionMaster()->MovePoint(EVENT_CHARGE_PREPATH, x, y, z, false); + _owner->GetMotionMaster()->MovePoint(EVENT_CHARGE_PREPATH, x, y, z, FORCED_MOVEMENT_NONE, 0.f, false); return true; } @@ -915,7 +915,7 @@ public: { float x, y, z, o; me->GetHomePosition(x, y, z, o); - me->GetMotionMaster()->MovePoint(0, x, y, z, false); + me->GetMotionMaster()->MovePoint(0, x, y, z, FORCED_MOVEMENT_NONE, 0.f, false); } } else @@ -1072,7 +1072,7 @@ public: { float x, y, z, o; me->GetHomePosition(x, y, z, o); - me->GetMotionMaster()->MovePoint(0, x, y, z, false); + me->GetMotionMaster()->MovePoint(0, x, y, z, FORCED_MOVEMENT_NONE, 0.f, false); } } } @@ -1251,7 +1251,7 @@ public: { float x, y, z, o; me->GetHomePosition(x, y, z, o); - me->GetMotionMaster()->MovePoint(0, x, y, z, false); + me->GetMotionMaster()->MovePoint(0, x, y, z, FORCED_MOVEMENT_NONE, 0.f, false); } } else @@ -1411,7 +1411,7 @@ public: { float x, y, z, o; me->GetHomePosition(x, y, z, o); - me->GetMotionMaster()->MovePoint(0, x, y, z, false); + me->GetMotionMaster()->MovePoint(0, x, y, z, FORCED_MOVEMENT_NONE, 0.f, false); } } } @@ -1518,7 +1518,7 @@ struct gunship_npc_AI : public ScriptedAI me->SetTransportHomePosition(Slot->TargetPosition); me->GetTransport()->CalculatePassengerPosition(x, y, z, &o); me->SetHomePosition(x, y, z, o); - me->GetMotionMaster()->MovePoint(EVENT_CHARGE_PREPATH, x, y, z, false); + me->GetMotionMaster()->MovePoint(EVENT_CHARGE_PREPATH, x, y, z, FORCED_MOVEMENT_NONE, 0.f, false); } } diff --git a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp index 5a88d28a4..0b04ad795 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/boss_the_lich_king.cpp @@ -2565,7 +2565,7 @@ public: me->AddUnitState(UNIT_STATE_NO_ENVIRONMENT_UPD); me->SetCanFly(false); me->SetDisableGravity(false); - me->GetMotionMaster()->MovePoint(POINT_DROP_PLAYER, _destPoint, false); + me->GetMotionMaster()->MovePoint(POINT_DROP_PLAYER, _destPoint, FORCED_MOVEMENT_NONE, 0.f, false); me->SetDisableGravity(true, true); me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); break; diff --git a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp index cac4c599f..34069295d 100644 --- a/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp +++ b/src/server/scripts/Northrend/IcecrownCitadel/icecrown_citadel.cpp @@ -934,7 +934,8 @@ public: case EVENT_START_PATHING: me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); me->SetImmuneToAll(false); - Start(true, true); + me->SetWalk(false); + Start(true); break; case EVENT_SCOURGE_STRIKE: DoCastVictim(SPELL_SCOURGE_STRIKE); @@ -3347,7 +3348,7 @@ public: if (Creature* broodling = me->SummonCreature(NPC_NERUBAR_BROODLING, me->GetPositionX() + cos(o) * dist, me->GetPositionY() + std::sin(o) * dist, 250.0f, Position::NormalizeOrientation(o - M_PI))) { broodling->CastSpell(broodling, SPELL_WEB_BEAM2, false); - broodling->GetMotionMaster()->MovePoint(POINT_ENTER_COMBAT, broodling->GetPositionX(), broodling->GetPositionY(), 213.03f, false); + broodling->GetMotionMaster()->MovePoint(POINT_ENTER_COMBAT, broodling->GetPositionX(), broodling->GetPositionY(), 213.03f, FORCED_MOVEMENT_NONE, 0.f, 0.f, false); } } diff --git a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp index 894ee5960..002566c6e 100644 --- a/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp +++ b/src/server/scripts/Northrend/Naxxramas/instance_naxxramas.cpp @@ -745,7 +745,7 @@ public: if (Creature* cr = me->SummonCreature(NPC_LIVING_POISON, entry.Start, TEMPSUMMON_TIMED_DESPAWN, entry.DespawnTime)) { cr->AddUnitMovementFlag(MOVEMENTFLAG_WALKING); - cr->GetMotionMaster()->MovePoint(0, entry.End, false); + cr->GetMotionMaster()->MovePoint(0, entry.End, FORCED_MOVEMENT_NONE, 0.f, false); } _events.Repeat(5s); diff --git a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp index 3ac5974b5..2b49ebf29 100644 --- a/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp +++ b/src/server/scripts/Northrend/Nexus/EyeOfEternity/boss_malygos.cpp @@ -521,7 +521,7 @@ public: } //pPlayer->ClearUnitState(UNIT_STATE_ONVEHICLE); - Movement::MoveSplineInit init(pPlayer); + Movement::MoveSplineInit init(pPlayer); // TODO: has to be removed and handled with vehicle exit and vehicle enter code init.MoveTo(CenterPos.GetPositionX(), CenterPos.GetPositionY(), CenterPos.GetPositionZ()); init.SetFacing(pPlayer->GetOrientation()); init.SetTransportExit(); @@ -898,9 +898,9 @@ public: { Player* plr = pass->ToPlayer(); float speed = plr->GetDistance(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()) / (1.0f * 0.001f); - plr->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), speed); + plr->SetDisableGravity(false); // packet only would lead to issues elsewhere + plr->GetMotionMaster()->MoveCharge(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), speed); plr->RemoveAura(SPELL_FREEZE_ANIM); - plr->SetDisableGravity(false, true); plr->SetGuidValue(PLAYER_FARSIGHT, ObjectGuid::Empty); sScriptMgr->AnticheatSetCanFlybyServer(plr, false); @@ -998,7 +998,7 @@ public: MoveTimer = 0; me->GetMotionMaster()->MoveIdle(); me->DisableSpline(); - me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 0.05f, 7.0f); + me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 0.05f, FORCED_MOVEMENT_NONE, 7.0f); break; } } @@ -1013,8 +1013,7 @@ public: MoveTimer = 0; me->GetMotionMaster()->MoveIdle(); me->DisableSpline(); - me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), CenterPos.GetPositionZ(), 100.0f); - me->SetPosition(me->GetPositionX(), me->GetPositionY(), CenterPos.GetPositionZ(), me->GetOrientation()); + me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), CenterPos.GetPositionZ(), FORCED_MOVEMENT_NONE, 100.0f); me->ReplaceAllUnitFlags(UNIT_FLAG_NOT_SELECTABLE | UNIT_FLAG_NON_ATTACKABLE | UNIT_FLAG_DISABLE_MOVE); me->RemoveAura(SPELL_POWER_SPARK_VISUAL); me->CastSpell(me, SPELL_POWER_SPARK_GROUND_BUFF, true); diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp index f4d8c5719..7f4a5e038 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfLightning/boss_bjarngrim.cpp @@ -138,7 +138,7 @@ public: AddWaypoint(13, 1281.2f, -26.8f, 33.5f, 0); AddWaypoint(14, 1262, -26.9f, 33.5f, 0); - Start(true, false, ObjectGuid::Empty, nullptr, false, true); + Start(true, ObjectGuid::Empty, nullptr, false, true); } InstanceScript* m_pInstance; diff --git a/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp b/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp index 51cd73619..809245c98 100644 --- a/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp +++ b/src/server/scripts/Northrend/Ulduar/HallsOfStone/brann_bronzebeard.cpp @@ -391,7 +391,8 @@ public: switch (action) { case ACTION_START_ESCORT_EVENT: - Start(false, true, ObjectGuid::Empty, 0, true, false); + me->SetWalk(false); + Start(false, ObjectGuid::Empty, 0, true, false); Talk(SAY_BRANN_ESCORT_START); me->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE); me->SetReactState(REACT_AGGRESSIVE); @@ -456,7 +457,8 @@ public: door->SetGoState(GO_STATE_READY); break; case ACTION_OPEN_DOOR: - Start(false, true, ObjectGuid::Empty, 0, true, false); + me->SetWalk(false); + Start(false, ObjectGuid::Empty, 0, true, false); SetNextWaypoint(34, false); SetEscortPaused(false); me->RemoveAura(58506); @@ -571,7 +573,7 @@ public: if (speed < tooFarAwaySpeed) speed = tooFarAwaySpeed; - darkMatterTarget->MonsterMoveWithSpeed(plr->GetPositionX(), plr->GetPositionY(), plr->GetPositionZ(), speed); + darkMatterTarget->GetMotionMaster()->MovePoint(0, plr->GetPositionX(), plr->GetPositionY(), plr->GetPositionZ(), FORCED_MOVEMENT_NONE, speed); if (darkMatterTarget->GetDistance(plr) < 15.0f) { diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp index 29eb6cb58..88b114633 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_assembly_of_iron.cpp @@ -805,7 +805,7 @@ public: case EVENT_LIGHTNING_LAND: { float speed = me->GetDistance(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ()) / (1000.0f * 0.001f); - me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), speed); + me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ(), FORCED_MOVEMENT_NONE, speed); events.ScheduleEvent(EVENT_LAND_LAND, 1s); break; } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp index a0a17863e..07e1ac92f 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_flame_leviathan.cpp @@ -381,8 +381,7 @@ public: { me->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); TurnGates(true, false); - me->MonsterMoveWithSpeed(homePos.GetPositionX(), homePos.GetPositionY(), homePos.GetPositionZ(), 100.0f); - me->UpdatePosition(homePos); + me->GetMotionMaster()->MovePoint(0, homePos.GetPositionX(), homePos.GetPositionY(), homePos.GetPositionZ(), FORCED_MOVEMENT_NONE, 100.0f); _speakTimer = 60000; } else if (_speakTimer > 63500) @@ -1090,7 +1089,7 @@ public: { summons.DespawnAll(); _spellTimer = 0; - Start(false, false, ObjectGuid::Empty, nullptr, false, true); + Start(false, ObjectGuid::Empty, nullptr, false, true); if (Aura* aur = me->AddAura(SPELL_FREYA_DUMMY_YELLOW, me)) { aur->SetMaxDuration(-1); diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp index 7a157ba5a..d7ba40cde 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_mimiron.cpp @@ -601,7 +601,7 @@ public: { me->EnterVehicle(VX001, 4); float speed = ACU->GetDistance(2737.75f, 2574.22f, 381.34f) / 2.0f; - ACU->MonsterMoveWithSpeed(2737.75f, 2574.22f, 381.34f, speed); + ACU->GetMotionMaster()->MovePoint(0, 2737.75f, 2574.22f, 381.34f, FORCED_MOVEMENT_NONE, speed); ACU->SetPosition(2737.75f, 2574.22f, 381.34f, M_PI); events.ScheduleEvent(EVENT_SAY_VX001_DEAD, 2s); break; @@ -1681,8 +1681,7 @@ public: me->InterruptNonMeleeSpells(false); me->RemoveAllAurasExceptType(SPELL_AURA_CONTROL_VEHICLE); - me->MonsterMoveWithSpeed(2744.65f, 2569.46f, 381.34f, me->GetDistance(2744.65f, 2569.46f, 381.34f)); - me->UpdatePosition(2744.65f, 2569.46f, 381.34f, M_PI, false); + me->GetMotionMaster()->MovePoint(0, 2744.65f, 2569.46f, 381.34f); if (Creature* c = GetMimiron()) c->AI()->SetData(0, 3); @@ -1740,8 +1739,7 @@ public: } float speed = me->GetExactDist(x, y, 381.34f); - me->MonsterMoveWithSpeed(x, y, 381.34f, speed); - me->UpdatePosition(x, y, 381.34f, me->GetAngle(victim), false); + me->GetMotionMaster()->MovePoint(0, x, y, 381.34f, FORCED_MOVEMENT_NONE, speed); if (mc) { mc->AI()->SetData(0, 0); @@ -1793,14 +1791,12 @@ public: case EVENT_MAGNETIC_CORE_PULL_DOWN: me->CastSpell(me, SPELL_MAGNETIC_CORE, true); me->CastSpell(me, SPELL_SPINNING, true); - me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), 365.34f, me->GetExactDist(me->GetPositionX(), me->GetPositionY(), 365.34f)); - me->UpdatePosition(me->GetPositionX(), me->GetPositionY(), 365.34f, me->GetOrientation(), false); + me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), 365.34f, FORCED_MOVEMENT_NONE, me->GetExactDist(me->GetPositionX(), me->GetPositionY(), 365.34f)); events.ScheduleEvent(EVENT_MAGNETIC_CORE_FREE, 20s); break; case EVENT_MAGNETIC_CORE_FREE: me->RemoveAura(SPELL_SPINNING); - me->MonsterMoveWithSpeed(me->GetPositionX(), me->GetPositionY(), 381.34f, me->GetDistance(me->GetPositionX(), me->GetPositionY(), 381.34f)); - me->UpdatePosition(me->GetPositionX(), me->GetPositionY(), 381.34f, me->GetOrientation(), false); + me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), 381.34f, FORCED_MOVEMENT_NONE, me->GetDistance(me->GetPositionX(), me->GetPositionY(), 381.34f)); events.ScheduleEvent(EVENT_MAGNETIC_CORE_REMOVE_IMMOBILIZE, 1s); break; case EVENT_MAGNETIC_CORE_REMOVE_IMMOBILIZE: @@ -1960,7 +1956,7 @@ public: void SetData(uint32 /*id*/, uint32 /*value*/) override { - me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 100.0f, false, true); + me->GetMotionMaster()->MovePoint(0, me->GetPositionX(), me->GetPositionY(), me->GetPositionZ() + 100.0f, FORCED_MOVEMENT_NONE, 0.f, false, true); } void UpdateAI(uint32 /*diff*/) override diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp index 8d9dae387..1b3377350 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_razorscale.cpp @@ -683,7 +683,7 @@ public: { razorscale->AI()->AttackStart(player); razorscale->GetMotionMaster()->MoveIdle(); - razorscale->GetMotionMaster()->MovePoint(POINT_RAZORSCALE_INIT, 588.0f, -178.0f, 490.0f, false, false); + razorscale->GetMotionMaster()->MovePoint(POINT_RAZORSCALE_INIT, 588.0f, -178.0f, 490.0f, FORCED_MOVEMENT_NONE, 0.f, 0.f, false, false); } } } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp index 88fa0c12e..006798aeb 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_thorim.cpp @@ -934,7 +934,8 @@ public: { InitWaypoint(); Reset(); - Start(false, true); + me->SetWalk(false); + Start(false); } uint32 Timer; @@ -1020,7 +1021,8 @@ public: { InitWaypoint(); Reset(); - Start(false, true); + me->SetWalk(false); + Start(false); SetDespawnAtEnd(false); } diff --git a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp index a944101a1..c26a9ff05 100644 --- a/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp +++ b/src/server/scripts/Northrend/Ulduar/Ulduar/boss_yoggsaron.cpp @@ -937,7 +937,8 @@ public: { InitWaypoint(); Reset(); - Start(false, true, ObjectGuid::Empty, nullptr, false, true); + me->SetWalk(false); + Start(false, ObjectGuid::Empty, nullptr, false, true); } uint32 _checkTimer; diff --git a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp index 12165fbac..3489764e9 100644 --- a/src/server/scripts/Northrend/VioletHold/violet_hold.cpp +++ b/src/server/scripts/Northrend/VioletHold/violet_hold.cpp @@ -372,7 +372,8 @@ struct violet_hold_trashAI : public npc_escortAI break; } SetDespawnAtEnd(false); - Start(true, true); + me->SetWalk(false); + Start(true); } npc_escortAI::UpdateAI(diff); @@ -1111,7 +1112,8 @@ public: break; } SetDespawnAtEnd(false); - Start(true, true); + me->SetWalk(false); + Start(true); } if (bOpening) diff --git a/src/server/scripts/Northrend/zone_borean_tundra.cpp b/src/server/scripts/Northrend/zone_borean_tundra.cpp index eefd5f448..21f81d4ef 100644 --- a/src/server/scripts/Northrend/zone_borean_tundra.cpp +++ b/src/server/scripts/Northrend/zone_borean_tundra.cpp @@ -464,7 +464,7 @@ public: go->UseDoorOrButton(); if (npc_escortAI* pEscortAI = CAST_AI(npc_lurgglbr::npc_lurgglbrAI, creature->AI())) - pEscortAI->Start(true, false, player->GetGUID()); + pEscortAI->Start(true, player->GetGUID()); creature->SetFaction(player->GetTeamId() == TEAM_ALLIANCE ? FACTION_ESCORTEE_A_PASSIVE : FACTION_ESCORTEE_H_PASSIVE); return true; @@ -914,7 +914,7 @@ public: creature->SetFaction(player->GetTeamId() == TEAM_ALLIANCE ? FACTION_ESCORTEE_A_PASSIVE : FACTION_ESCORTEE_H_PASSIVE); creature->SetStandState(UNIT_STAND_STATE_STAND); creature->AI()->Talk(SAY_1, player); - CAST_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID()); + CAST_AI(npc_escortAI, (creature->AI()))->Start(true, player->GetGUID()); } return true; } @@ -995,7 +995,8 @@ public: { creature->SetStandState(UNIT_STAND_STATE_STAND); creature->AI()->Talk(SAY_BONKER_2, player); - CAST_AI(npc_escortAI, (creature->AI()))->Start(true, true, player->GetGUID()); + creature->SetWalk(false); + CAST_AI(npc_escortAI, (creature->AI()))->Start(true, player->GetGUID()); } return true; } @@ -1884,7 +1885,7 @@ public: if (Creature* leryssa = ObjectAccessor::GetCreature(*me, _leryssaGUID)) { leryssa->SetWalk(false); - leryssa->MonsterMoveWithSpeed(3726.751f, 3568.1633f, 477.44086f, leryssa->GetSpeed(MOVE_RUN)); + leryssa->GetMotionMaster()->MovePoint(0, 3726.751f, 3568.1633f, 477.44086f, FORCED_MOVEMENT_RUN); } _events.ScheduleEvent(EVENT_THASSARIAN_SCRIPT_23, 2s); break; diff --git a/src/server/scripts/Northrend/zone_crystalsong_forest.cpp b/src/server/scripts/Northrend/zone_crystalsong_forest.cpp index 1fb9ff67b..ac3aa4ef2 100644 --- a/src/server/scripts/Northrend/zone_crystalsong_forest.cpp +++ b/src/server/scripts/Northrend/zone_crystalsong_forest.cpp @@ -117,7 +117,7 @@ struct npc_preparations_for_war_vehicle : public NullCreatureAI } } else - me->GetMotionMaster()->MovePoint(0, x, y, z, false, false); + me->GetMotionMaster()->MovePoint(0, x, y, z, FORCED_MOVEMENT_NONE, 0.f, 0.f, false, false); break; } } diff --git a/src/server/scripts/Northrend/zone_dalaran.cpp b/src/server/scripts/Northrend/zone_dalaran.cpp index d34530709..e561a8e07 100644 --- a/src/server/scripts/Northrend/zone_dalaran.cpp +++ b/src/server/scripts/Northrend/zone_dalaran.cpp @@ -592,7 +592,7 @@ struct npc_minigob_manabonk : public ScriptedAI case EVENT_MOVE: { Position pos = me->GetRandomNearPosition((urand(15, 40))); - me->GetMotionMaster()->MovePoint(0, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ(), true); + me->GetMotionMaster()->MovePoint(0, pos.GetPositionX(), pos.GetPositionY(), pos.GetPositionZ()); } events.ScheduleEvent(EVENT_DESPAWN_VISUAL, 3s); events.ScheduleEvent(EVENT_DESPAWN, 4s); diff --git a/src/server/scripts/Northrend/zone_grizzly_hills.cpp b/src/server/scripts/Northrend/zone_grizzly_hills.cpp index c6354f6d3..50c4518be 100644 --- a/src/server/scripts/Northrend/zone_grizzly_hills.cpp +++ b/src/server/scripts/Northrend/zone_grizzly_hills.cpp @@ -207,7 +207,7 @@ public: Mrfloppy->GetMotionMaster()->MoveFollow(creature, PET_FOLLOW_DIST, PET_FOLLOW_ANGLE); if (npc_escortAI* pEscortAI = CAST_AI(npc_emily::npc_emilyAI, (creature->AI()))) - pEscortAI->Start(true, false, player->GetGUID()); + pEscortAI->Start(true, player->GetGUID()); } return true; } diff --git a/src/server/scripts/Northrend/zone_howling_fjord.cpp b/src/server/scripts/Northrend/zone_howling_fjord.cpp index ddcd03de7..fcd725290 100644 --- a/src/server/scripts/Northrend/zone_howling_fjord.cpp +++ b/src/server/scripts/Northrend/zone_howling_fjord.cpp @@ -191,7 +191,7 @@ public: if (quest->GetQuestId() == QUEST_TRAIL_OF_FIRE) { creature->SetFaction(player->GetTeamId() == TEAM_ALLIANCE ? FACTION_ESCORTEE_A_PASSIVE : FACTION_ESCORTEE_H_PASSIVE); - CAST_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID()); + CAST_AI(npc_escortAI, (creature->AI()))->Start(true, player->GetGUID()); } return true; } @@ -309,7 +309,7 @@ public: return; me->SetWalk(true); - Start(false, false, summonerGUID); + Start(false, summonerGUID); } void WaypointReached(uint32 waypointId) override diff --git a/src/server/scripts/Northrend/zone_icecrown.cpp b/src/server/scripts/Northrend/zone_icecrown.cpp index fce6523ee..3a23551cf 100644 --- a/src/server/scripts/Northrend/zone_icecrown.cpp +++ b/src/server/scripts/Northrend/zone_icecrown.cpp @@ -523,11 +523,8 @@ public: { soul->SetCanFly(true); soul->SetVisible(true); - Movement::MoveSplineInit init(soul); - init.MoveTo(soul->GetPositionX(), soul->GetPositionY(), soul->GetPositionZ() + 5.0f); - init.SetVelocity(1.0f); - init.Launch(); soul->CastSpell(soul, 64462, true); // Drown + soul->GetMotionMaster()->MovePoint(0, soul->GetPositionX(), soul->GetPositionY(), soul->GetPositionZ() + 5.0f, FORCED_MOVEMENT_NONE, 1.f); } events.ScheduleEvent(EVENT_SCENE_1, 6s); break; @@ -718,7 +715,7 @@ public: Talk(0); events.Reset(); summons.DespawnAll(); - Start(false, false); + Start(false); int8 i = -1; std::list cList; diff --git a/src/server/scripts/Northrend/zone_sholazar_basin.cpp b/src/server/scripts/Northrend/zone_sholazar_basin.cpp index 100a90a86..07bdfc2e9 100644 --- a/src/server/scripts/Northrend/zone_sholazar_basin.cpp +++ b/src/server/scripts/Northrend/zone_sholazar_basin.cpp @@ -605,7 +605,7 @@ public: creature->GetMotionMaster()->MoveJumpTo(0, 0.4f, 0.4f); creature->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE); - pEscortAI->Start(false, false, player->GetGUID()); + pEscortAI->Start(false, player->GetGUID()); creature->AI()->Talk(SAY_WP_1); } } diff --git a/src/server/scripts/Northrend/zone_storm_peaks.cpp b/src/server/scripts/Northrend/zone_storm_peaks.cpp index 16bfe5925..b61003bca 100644 --- a/src/server/scripts/Northrend/zone_storm_peaks.cpp +++ b/src/server/scripts/Northrend/zone_storm_peaks.cpp @@ -57,7 +57,8 @@ struct npc_frosthound : public npc_escortAI { me->SetFaction(who->GetFaction()); me->CastSpell(me, SPELL_SUMMON_PURSUERS_PERIODIC, true); - Start(false, true, who->GetGUID()); + me->SetWalk(false); + Start(false, who->GetGUID()); Talk(TALK_EMOTE_FROSTHOUND_SNIFF, me); } } @@ -246,7 +247,8 @@ public: void RollPath() { me->SetEntry(NPC_TIME_LOST_PROTO_DRAKE); - Start(true, true, ObjectGuid::Empty, 0, false, true, true); + me->SetWalk(false); + Start(true, ObjectGuid::Empty, 0, false, true, true); SetNextWaypoint(urand(0, 250), true); me->UpdateEntry(roll_chance_i(25) ? NPC_TIME_LOST_PROTO_DRAKE : NPC_VYRAGOSA, 0, false); } @@ -912,7 +914,10 @@ public: if (who->IsPlayer()) { if (apply) - Start(false, true, who->GetGUID()); + { + me->SetWalk(false); + Start(false, who->GetGUID()); + } } } diff --git a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp index 93ae31450..c774c1a5e 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_illidan.cpp @@ -507,7 +507,7 @@ struct boss_illidan_stormrage : public BossAI Talk(SAY_ILLIDAN_EYE_BLAST); me->SummonCreature(NPC_ILLIDAN_DB_TARGET, eyeBeamPos[beamPosId], TEMPSUMMON_TIMED_DESPAWN, 30000); if (Creature* trigger = summons.GetCreatureWithEntry(NPC_ILLIDAN_DB_TARGET)) - trigger->GetMotionMaster()->MovePoint(0, eyeBeamPos[beamPosId + MAX_EYE_BEAM_POS], false, true); + trigger->GetMotionMaster()->MovePoint(0, eyeBeamPos[beamPosId + MAX_EYE_BEAM_POS], FORCED_MOVEMENT_NONE, 0.f, false, true); // Reposition me->m_Events.AddEventAtOffset([&] { @@ -515,7 +515,7 @@ struct boss_illidan_stormrage : public BossAI me->InterruptNonMeleeSpells(false); me->SetControlled(false, UNIT_STATE_ROOT); CycleBeamPos(beamPosId); - me->GetMotionMaster()->MovePoint(POINT_ILLIDAN_HOVER, airHoverPos[beamPosId], false, true); + me->GetMotionMaster()->MovePoint(POINT_ILLIDAN_HOVER, airHoverPos[beamPosId], FORCED_MOVEMENT_NONE, 0.f, false, true); }, 20s, GROUP_PHASE_FLYING); }); // Check for Phase Transition diff --git a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp index 70e52726a..7b2d93442 100644 --- a/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp +++ b/src/server/scripts/Outland/BlackTemple/boss_reliquary_of_souls.cpp @@ -301,7 +301,7 @@ public: Talk(SUFF_SAY_RECAP); me->SetReactState(REACT_PASSIVE); me->GetMotionMaster()->Clear(); - me->GetMotionMaster()->MovePoint(POINT_GO_BACK, me->GetHomePosition(), false); + me->GetMotionMaster()->MovePoint(POINT_GO_BACK, me->GetHomePosition(), FORCED_MOVEMENT_NONE, 0.f, false); scheduler.CancelAll(); } } @@ -408,7 +408,7 @@ public: Talk(DESI_SAY_RECAP); me->SetReactState(REACT_PASSIVE); me->GetMotionMaster()->Clear(); - me->GetMotionMaster()->MovePoint(POINT_GO_BACK, me->GetHomePosition(), false); + me->GetMotionMaster()->MovePoint(POINT_GO_BACK, me->GetHomePosition(), FORCED_MOVEMENT_NONE, 0.f, false); scheduler.CancelAll(); } } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp index a9cd28a60..319e588f7 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_fathomlord_karathress.cpp @@ -139,7 +139,7 @@ struct boss_fathomlord_karathress : public BossAI if (Creature* olum = instance->GetCreature(DATA_SEER_OLUM)) { olum->SetWalk(true); - olum->GetMotionMaster()->MovePoint(0, olumWalk, false); + olum->GetMotionMaster()->MovePoint(0, olumWalk, FORCED_MOVEMENT_NONE, 0.f, false); olum->SetNpcFlag(UNIT_NPC_FLAG_GOSSIP); olum->SetNpcFlag(UNIT_NPC_FLAG_QUESTGIVER); } diff --git a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp index d631825a7..da30b3d03 100644 --- a/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp +++ b/src/server/scripts/Outland/CoilfangReservoir/SerpentShrine/boss_lady_vashj.cpp @@ -93,7 +93,7 @@ struct boss_lady_vashj : public BossAI scheduler.CancelAll(); me->CastStop(); me->SetReactState(REACT_PASSIVE); - me->GetMotionMaster()->MovePoint(POINT_HOME, me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY(), me->GetHomePosition().GetPositionZ(), true, true); + me->GetMotionMaster()->MovePoint(POINT_HOME, me->GetHomePosition().GetPositionX(), me->GetHomePosition().GetPositionY(), me->GetHomePosition().GetPositionZ(), FORCED_MOVEMENT_NONE, 0.f, true, true); }); } diff --git a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp index b95e01b3e..864d18a9a 100644 --- a/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp +++ b/src/server/scripts/Outland/HellfireCitadel/HellfireRamparts/boss_vazruden_the_herald.cpp @@ -102,7 +102,7 @@ struct boss_vazruden_the_herald : public BossAI if (summon->GetEntry() == NPC_HELLFIRE_SENTRY && summons.size() == 0) { Talk(SAY_INTRO); - me->GetMotionMaster()->MovePoint(POINT_MIDDLE, -1406.5f, 1746.5f, 85.0f, false); + me->GetMotionMaster()->MovePoint(POINT_MIDDLE, -1406.5f, 1746.5f, 85.0f, FORCED_MOVEMENT_NONE, 0.f, false); _JustEngagedWith(); } else if (summons.size() == 0) @@ -163,7 +163,7 @@ struct boss_nazan : public ScriptedAI _scheduler.CancelAll(); _scheduler.Schedule(5ms, GROUP_PHASE_1, [this](TaskContext context) { - me->GetMotionMaster()->MovePoint(POINT_FLIGHT, NazanPos[urand(0, 2)], false); + me->GetMotionMaster()->MovePoint(POINT_FLIGHT, NazanPos[urand(0, 2)], FORCED_MOVEMENT_NONE, 0.f, false); _scheduler.DelayAll(7s); context.Repeat(30s); }).Schedule(5s, GROUP_PHASE_1, [this](TaskContext context) @@ -193,7 +193,7 @@ struct boss_nazan : public ScriptedAI Talk(EMOTE_NAZAN); me->SetReactState(REACT_PASSIVE); me->InterruptNonMeleeSpells(true); - me->GetMotionMaster()->MovePoint(POINT_MIDDLE, -1406.5f, 1746.5f, 81.2f, false); + me->GetMotionMaster()->MovePoint(POINT_MIDDLE, -1406.5f, 1746.5f, 81.2f, FORCED_MOVEMENT_NONE, 0.f, false); } } diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp index dab0d0590..5d0ace11b 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_alar.cpp @@ -140,7 +140,7 @@ struct boss_alar : public BossAI _noQuillTimes = 0; _platformRoll = RAND(0, 1); _platform = _platformRoll ? 0 : 3; - me->GetMotionMaster()->MovePoint(POINT_QUILL, alarPoints[POINT_QUILL], false, true); + me->GetMotionMaster()->MovePoint(POINT_QUILL, alarPoints[POINT_QUILL], FORCED_MOVEMENT_NONE, 0.f, false, true); _platformMoveRepeatTimer = 16s; } else @@ -150,7 +150,7 @@ struct boss_alar : public BossAI me->SetOrientation(alarPoints[_platform].GetOrientation()); SpawnPhoenixes(1, me); } - me->GetMotionMaster()->MovePoint(POINT_PLATFORM, alarPoints[_platform], false, true); + me->GetMotionMaster()->MovePoint(POINT_PLATFORM, alarPoints[_platform], FORCED_MOVEMENT_NONE, 0.f, false, true); _platform = (_platform+1)%4; _platformMoveRepeatTimer = 30s; } @@ -258,7 +258,7 @@ struct boss_alar : public BossAI }, 30s); ScheduleTimedEvent(34s, [&] { - me->GetMotionMaster()->MovePoint(POINT_DIVE, alarPoints[POINT_DIVE], false, true); + me->GetMotionMaster()->MovePoint(POINT_DIVE, alarPoints[POINT_DIVE], FORCED_MOVEMENT_NONE, 0.f, false, true); scheduler.DelayAll(15s); }, 57s); diff --git a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp index c12b5af84..0a1e1d064 100644 --- a/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp +++ b/src/server/scripts/Outland/TempestKeep/Eye/boss_kaelthas.cpp @@ -655,7 +655,7 @@ struct boss_kaelthas : public BossAI me->AttackStop(); me->CastStop(); me->SetReactState(REACT_PASSIVE); - me->GetMotionMaster()->MovePoint(POINT_MIDDLE, me->GetHomePosition(), true, true); + me->GetMotionMaster()->MovePoint(POINT_MIDDLE, me->GetHomePosition(), FORCED_MOVEMENT_NONE, 0.f, true, true); } }); ScheduleTimedEvent(1s, [&] diff --git a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp index 66a12acc6..9438aa808 100644 --- a/src/server/scripts/Outland/zone_hellfire_peninsula.cpp +++ b/src/server/scripts/Outland/zone_hellfire_peninsula.cpp @@ -171,7 +171,7 @@ public: npc_ancestral_wolfAI(Creature* creature) : npc_escortAI(creature) { if (creature->GetOwner() && creature->GetOwner()->IsPlayer()) - Start(false, false, creature->GetOwner()->GetGUID()); + Start(false, creature->GetOwner()->GetGUID()); creature->SetSpeed(MOVE_WALK, 1.5f); DoCast(SPELL_GUIDED_BY_THE_SPIRITS); Reset(); @@ -209,7 +209,7 @@ public: { ryga->SetWalk(true); ryga->SetSpeed(MOVE_WALK, 1.0f); - ryga->GetMotionMaster()->MovePoint(0, 515.877991f, 3885.67627f, 190.470535f, true); + ryga->GetMotionMaster()->MovePoint(0, 515.877991f, 3885.67627f, 190.470535f, FORCED_MOVEMENT_NONE, 0.f, true); Reset(); } } @@ -234,7 +234,7 @@ public: ryga->SetStandState(UNIT_STAND_STATE_STAND); ryga->SetWalk(true); ryga->SetSpeed(MOVE_WALK, 1.0f); - ryga->GetMotionMaster()->MovePoint(0, 504.59201f, 3882.12988f, 192.156006f, true); + ryga->GetMotionMaster()->MovePoint(0, 504.59201f, 3882.12988f, 192.156006f, FORCED_MOVEMENT_NONE, 0.f, true); Reset(); } } @@ -312,7 +312,7 @@ public: { me->SetReactState(REACT_AGGRESSIVE); me->SetFaction(FACTION_ESCORTEE_H_PASSIVE); - npc_escortAI::Start(true, false, player->GetGUID()); + npc_escortAI::Start(true, player->GetGUID()); } } diff --git a/src/server/scripts/Outland/zone_nagrand.cpp b/src/server/scripts/Outland/zone_nagrand.cpp index 863ed3eb2..87051cbc5 100644 --- a/src/server/scripts/Outland/zone_nagrand.cpp +++ b/src/server/scripts/Outland/zone_nagrand.cpp @@ -65,7 +65,7 @@ public: { creature->SetStandState(UNIT_STAND_STATE_STAND); creature->SetFaction(FACTION_ESCORTEE_H_NEUTRAL_ACTIVE); - EscortAI->Start(true, false, player->GetGUID(), quest); + EscortAI->Start(true, player->GetGUID(), quest); creature->AI()->Talk(SAY_MAG_START); creature->SummonCreature(NPC_MURK_RAIDER, m_afAmbushA[0] + 2.5f, m_afAmbushA[1] - 2.5f, m_afAmbushA[2], 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 25000); @@ -133,7 +133,7 @@ public: if (Player* player = GetPlayerForEscort()) player->GroupEventHappens(QUEST_TOTEM_KARDASH_H, me); - SetRun(); + SetRun(true); break; } } @@ -306,7 +306,7 @@ public: void SetGUID(ObjectGuid const& guid, int32 /*questId*/) override { me->SetStandState(UNIT_STAND_STATE_STAND); - Start(true, false, guid); + Start(true, guid); Talk(SAY_KUR_START); me->SummonCreature(NPC_KUR_MURK_RAIDER, kurenaiAmbushA[0] + 2.5f, kurenaiAmbushA[1] - 2.5f, kurenaiAmbushA[2], 0.0f, TEMPSUMMON_TIMED_DESPAWN_OUT_OF_COMBAT, 50000); @@ -361,7 +361,7 @@ public: if (Player* player = GetPlayerForEscort()) player->GroupEventHappens(QUEST_TOTEM_KARDASH_A, me); - SetRun(); + SetRun(true); break; } } diff --git a/src/server/scripts/Outland/zone_netherstorm.cpp b/src/server/scripts/Outland/zone_netherstorm.cpp index 71cb5064b..d53cf6c33 100644 --- a/src/server/scripts/Outland/zone_netherstorm.cpp +++ b/src/server/scripts/Outland/zone_netherstorm.cpp @@ -103,7 +103,8 @@ public: { if (type == DATA_START_ENCOUNTER) { - Start(true, true, playerGUID); + me->SetWalk(false); + Start(true, playerGUID); SetEscortPaused(true); started = true; @@ -605,7 +606,7 @@ public: creature->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE); creature->RemoveUnitFlag(UNIT_FLAG_NON_ATTACKABLE); creature->AI()->Talk(SAY_BESSY_0); - CAST_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID()); + CAST_AI(npc_escortAI, (creature->AI()))->Start(true, player->GetGUID()); } return true; } @@ -771,7 +772,7 @@ public: if (npc_maxx_a_million_escortAI* pEscortAI = CAST_AI(npc_maxx_a_million_escort::npc_maxx_a_million_escortAI, creature->AI())) { creature->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_PASSIVE); - pEscortAI->Start(false, false, player->GetGUID()); + pEscortAI->Start(false, player->GetGUID()); } } return true; diff --git a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp index 41acc4612..fe7d81d4e 100644 --- a/src/server/scripts/Outland/zone_shadowmoon_valley.cpp +++ b/src/server/scripts/Outland/zone_shadowmoon_valley.cpp @@ -617,7 +617,7 @@ public: { case EVENT_WALK_TO_MUTTON: me->SetWalk(true); - me->GetMotionMaster()->MovePoint(1, x, y, z, true); + me->GetMotionMaster()->MovePoint(1, x, y, z); me->SetUInt32Value(UNIT_NPC_EMOTESTATE, EMOTE_STATE_NONE); me->HandleEmoteCommand(EMOTE_ONESHOT_CHEER); break; diff --git a/src/server/scripts/Outland/zone_shattrath_city.cpp b/src/server/scripts/Outland/zone_shattrath_city.cpp index 29382d6ae..045e4cfb7 100644 --- a/src/server/scripts/Outland/zone_shattrath_city.cpp +++ b/src/server/scripts/Outland/zone_shattrath_city.cpp @@ -246,7 +246,7 @@ public: Player* player = summoner->ToPlayer(); if (player && player->GetQuestStatus(10211) == QUEST_STATUS_INCOMPLETE) - Start(false, false, summoner->GetGUID()); + Start(false, summoner->GetGUID()); } void Reset() override { } diff --git a/src/server/scripts/Outland/zone_terokkar_forest.cpp b/src/server/scripts/Outland/zone_terokkar_forest.cpp index d44d7f506..ba19c737e 100644 --- a/src/server/scripts/Outland/zone_terokkar_forest.cpp +++ b/src/server/scripts/Outland/zone_terokkar_forest.cpp @@ -473,7 +473,7 @@ public: { if (quest->GetQuestId() == QUEST_EFTW_H || quest->GetQuestId() == QUEST_EFTW_A) { - CAST_AI(npc_escortAI, (creature->AI()))->Start(true, false, player->GetGUID()); + CAST_AI(npc_escortAI, (creature->AI()))->Start(true, player->GetGUID()); creature->SetFaction(FACTION_ESCORTEE_N_NEUTRAL_ACTIVE); } return true; diff --git a/src/server/scripts/World/npcs_special.cpp b/src/server/scripts/World/npcs_special.cpp index 6e7e5a578..af5e033a2 100644 --- a/src/server/scripts/World/npcs_special.cpp +++ b/src/server/scripts/World/npcs_special.cpp @@ -1421,7 +1421,8 @@ public: break; } - Start(false, true); + me->SetWalk(true); + Start(false); } else EnterEvadeMode(); //something went wrong From f2f31acdcf61df002ec4cc3a28f09ec244ccf8b6 Mon Sep 17 00:00:00 2001 From: Anton Popovichenko Date: Tue, 14 Oct 2025 23:56:09 +0200 Subject: [PATCH 108/140] feat(Core/mmaps): Add configuration file for mmaps-generator. (#22506) --- deps/CMakeLists.txt | 1 + deps/PackageList.txt | 4 + deps/fkYAML/CMakeLists.txt | 17 + deps/fkYAML/fkYAML/node.hpp | 14730 ++++++++++++++++ src/common/Collision/Management/MMapMgr.cpp | 3 - src/common/Collision/Management/MMapMgr.h | 3 + src/common/Collision/Maps/MapDefines.h | 42 +- src/server/scripts/Commands/cs_mmaps.cpp | 35 + src/tools/CMakeLists.txt | 7 +- src/tools/mmaps_generator/Config.cpp | 276 + src/tools/mmaps_generator/Config.h | 159 + src/tools/mmaps_generator/Info/readme.txt | 39 +- .../mmaps_generator/IntermediateValues.cpp | 42 +- .../mmaps_generator/IntermediateValues.h | 4 +- src/tools/mmaps_generator/MapBuilder.cpp | 156 +- src/tools/mmaps_generator/MapBuilder.h | 39 +- src/tools/mmaps_generator/PathCommon.h | 6 + src/tools/mmaps_generator/PathGenerator.cpp | 161 +- src/tools/mmaps_generator/TerrainBuilder.cpp | 24 +- src/tools/mmaps_generator/TerrainBuilder.h | 5 +- src/tools/mmaps_generator/mmaps-config.yaml | 145 + 21 files changed, 15598 insertions(+), 300 deletions(-) create mode 100644 deps/fkYAML/CMakeLists.txt create mode 100644 deps/fkYAML/fkYAML/node.hpp create mode 100644 src/tools/mmaps_generator/Config.cpp create mode 100644 src/tools/mmaps_generator/Config.h create mode 100644 src/tools/mmaps_generator/mmaps-config.yaml diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index 8364181a9..869351a37 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -45,4 +45,5 @@ endif() if (BUILD_TOOLS_MAPS) add_subdirectory(bzip2) add_subdirectory(libmpq) + add_subdirectory(fkYAML) endif() diff --git a/deps/PackageList.txt b/deps/PackageList.txt index f771c3b73..70e9f695c 100644 --- a/deps/PackageList.txt +++ b/deps/PackageList.txt @@ -81,3 +81,7 @@ recastnavigation (Recast is state of the art navigation mesh construction toolse {fmt} is an open-source formatting library providing a fast and safe alternative to C stdio and C++ iostreams. https://github.com/fmtlib/fmt Version: 7.1.3 + +fkYAML (A C++ header-only YAML library) + https://github.com/fktn-k/fkYAML + Version: 721edb3e1a817e527fd9e1e18a3bea300822522e diff --git a/deps/fkYAML/CMakeLists.txt b/deps/fkYAML/CMakeLists.txt new file mode 100644 index 000000000..e186f5293 --- /dev/null +++ b/deps/fkYAML/CMakeLists.txt @@ -0,0 +1,17 @@ +# +# This file is part of the AzerothCore Project. See AUTHORS file for Copyright information +# +# This file is free software; as a special exception the author gives +# unlimited permission to copy and/or distribute it, with or without +# modifications, as long as this notice is preserved. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY, to the extent permitted by law; without even the +# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +# + +add_library(fkYAML INTERFACE) + +target_include_directories(fkYAML INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}) + +set_target_properties(fkYAML PROPERTIES FOLDER "deps") diff --git a/deps/fkYAML/fkYAML/node.hpp b/deps/fkYAML/fkYAML/node.hpp new file mode 100644 index 000000000..773e852cf --- /dev/null +++ b/deps/fkYAML/fkYAML/node.hpp @@ -0,0 +1,14730 @@ +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.4.2 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2025 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_NODE_HPP +#define FK_YAML_NODE_HPP + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.4.2 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2025 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_MACROS_DEFINE_MACROS_HPP +#define FK_YAML_DETAIL_MACROS_DEFINE_MACROS_HPP + +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.4.2 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2025 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +// Check version definitions if already defined. +#if defined(FK_YAML_MAJOR_VERSION) && defined(FK_YAML_MINOR_VERSION) && defined(FK_YAML_PATCH_VERSION) +#if FK_YAML_MAJOR_VERSION != 0 || FK_YAML_MINOR_VERSION != 4 || FK_YAML_PATCH_VERSION != 2 +#warning Already included a different version of the fkYAML library! +#else +// define macros to skip defining macros down below. +#define FK_YAML_VERCHECK_SUCCEEDED +#endif +#endif + +#ifndef FK_YAML_VERCHECK_SUCCEEDED + +#define FK_YAML_MAJOR_VERSION 0 +#define FK_YAML_MINOR_VERSION 4 +#define FK_YAML_PATCH_VERSION 2 + +#define FK_YAML_NAMESPACE_VERSION_CONCAT_IMPL(major, minor, patch) v##major##_##minor##_##patch + +#define FK_YAML_NAMESPACE_VERSION_CONCAT(major, minor, patch) FK_YAML_NAMESPACE_VERSION_CONCAT_IMPL(major, minor, patch) + +#define FK_YAML_NAMESPACE_VERSION \ + FK_YAML_NAMESPACE_VERSION_CONCAT(FK_YAML_MAJOR_VERSION, FK_YAML_MINOR_VERSION, FK_YAML_PATCH_VERSION) + +#define FK_YAML_NAMESPACE_BEGIN \ + namespace fkyaml { \ + inline namespace FK_YAML_NAMESPACE_VERSION { + +#define FK_YAML_NAMESPACE_END \ + } /* inline namespace FK_YAML_NAMESPACE_VERSION */ \ + } // namespace fkyaml + +#define FK_YAML_DETAIL_NAMESPACE_BEGIN \ + FK_YAML_NAMESPACE_BEGIN \ + namespace detail { + +#define FK_YAML_DETAIL_NAMESPACE_END \ + } /* namespace detail */ \ + FK_YAML_NAMESPACE_END + +#endif // !defined(FK_YAML_VERCHECK_SUCCEEDED) + +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.4.2 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2025 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_MACROS_CPP_CONFIG_MACROS_HPP +#define FK_YAML_DETAIL_MACROS_CPP_CONFIG_MACROS_HPP + +// This file is assumed to be included only by version_macros.hpp file. +// To avoid redundant inclusion, do not include version_macros.hpp file as the other files do. + +// With the MSVC compilers, the value of __cplusplus is by default always "199611L"(C++98). +// To avoid that, the library instead references _MSVC_LANG which is always set a correct value. +// See https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/ for more details. +#if defined(_MSVC_LANG) && !defined(__clang__) +#define FK_YAML_CPLUSPLUS _MSVC_LANG +#else +#define FK_YAML_CPLUSPLUS __cplusplus +#endif + +// C++ language standard detection +// Skip detection if the definitions listed below already exist. +#if !defined(FK_YAML_HAS_CXX_23) && !defined(FK_YAML_HAS_CXX_20) && !defined(FK_YAML_HAS_CXX_17) && \ + !defined(FK_YAML_HAS_CXX_14) && !defined(FK_YAML_CXX_11) +#if FK_YAML_CPLUSPLUS >= 202302L +#define FK_YAML_HAS_CXX_23 +#define FK_YAML_HAS_CXX_20 +#define FK_YAML_HAS_CXX_17 +#define FK_YAML_HAS_CXX_14 +#elif FK_YAML_CPLUSPLUS >= 202002L +#define FK_YAML_HAS_CXX_20 +#define FK_YAML_HAS_CXX_17 +#define FK_YAML_HAS_CXX_14 +#elif FK_YAML_CPLUSPLUS >= 201703L +#define FK_YAML_HAS_CXX_17 +#define FK_YAML_HAS_CXX_14 +#elif FK_YAML_CPLUSPLUS >= 201402L +#define FK_YAML_HAS_CXX_14 +#endif + +// C++11 is the minimum required version of the fkYAML library. +#define FK_YAML_HAS_CXX_11 +#endif + +// switch usage of the deprecated attribute. [[deprecated]] is available since C++14. +#if defined(FK_YAML_HAS_CXX_14) +#define FK_YAML_DEPRECATED(msg) [[deprecated(msg)]] +#else +#if defined(_MSC_VER) +#define FK_YAML_DEPRECATED(msg) __declspec(deprecated(msg)) +#elif defined(__GNUC__) || defined(__clang__) +#define FK_YAML_DEPRECATED(msg) __attribute__((deprecated(msg))) +#else +#define FK_YAML_DEPRECATED(msg) +#endif +#endif + +// switch usage of inline variables which have been available since C++17. +#if defined(FK_YAML_HAS_CXX_17) +#define FK_YAML_INLINE_VAR inline +#else +#define FK_YAML_INLINE_VAR +#endif + +// switch usage of constexpr keyword depending on active C++ standard. +#if defined(FK_YAML_HAS_CXX_17) +#define FK_YAML_CXX17_CONSTEXPR constexpr +#else +#define FK_YAML_CXX17_CONSTEXPR +#endif + +// Detect __has_* macros. +// The following macros replace redundant `defined(__has_*) && __has_*(...)`. + +#ifdef __has_include +#define FK_YAML_HAS_INCLUDE(header) __has_include(header) +#else +#define FK_YAML_HAS_INCLUDE(header) (0) +#endif + +#ifdef __has_builtin +#define FK_YAML_HAS_BUILTIN(builtin) __has_builtin(builtin) +#else +#define FK_YAML_HAS_BUILTIN(builtin) (0) +#endif + +#ifdef __has_cpp_attribute +#define FK_YAML_HAS_CPP_ATTRIBUTE(attr) __has_cpp_attribute(attr) +#else +#define FK_YAML_HAS_CPP_ATTRIBUTE(attr) (0) +#endif + +#ifdef __has_feature +#define FK_YAML_HAS_FEATURE(feat) __has_feature(feat) +#else +#define FK_YAML_HAS_FEATURE(feat) (0) +#endif + +// switch usage of the no_sanitize attribute only when Clang sanitizer is active. +#if defined(__clang__) && FK_YAML_HAS_FEATURE(address_sanitizer) +#define FK_YAML_NO_SANITIZE(...) __attribute__((no_sanitize(__VA_ARGS__))) +#else +#define FK_YAML_NO_SANITIZE(...) +#endif + +#if FK_YAML_HAS_INCLUDE() +// is available since C++20 +#include +#endif + +// +// C++ feature detections +// + +// switch usages of the std::to_chars()/std::from_chars() functions which have been available since C++17. +#if defined(FK_YAML_HAS_CXX_17) && defined(__cpp_lib_to_chars) && __cpp_lib_to_chars >= 201611L +#define FK_YAML_HAS_TO_CHARS (1) +#else +#define FK_YAML_HAS_TO_CHARS (0) +#endif + +// switch usage of char8_t which has been available since C++20. +#if defined(FK_YAML_HAS_CXX_20) && defined(__cpp_char8_t) && __cpp_char8_t >= 201811L +#define FK_YAML_HAS_CHAR8_T (1) +#else +#define FK_YAML_HAS_CHAR8_T (0) +#endif + +// +// utility macros +// + +// switch usage of [[likely]] C++ attribute which has been available since C++20. +#if defined(FK_YAML_HAS_CXX_20) && FK_YAML_HAS_CPP_ATTRIBUTE(likely) >= 201803L +#define FK_YAML_LIKELY(expr) (!!(expr)) [[likely]] +#elif FK_YAML_HAS_BUILTIN(__builtin_expect) +#define FK_YAML_LIKELY(expr) (__builtin_expect(!!(expr), 1)) +#else +#define FK_YAML_LIKELY(expr) (!!(expr)) +#endif + +// switch usage of [[unlikely]] C++ attribute which has been available since C++20. +#if defined(FK_YAML_HAS_CXX_20) && FK_YAML_HAS_CPP_ATTRIBUTE(unlikely) >= 201803L +#define FK_YAML_UNLIKELY(expr) (!!(expr)) [[unlikely]] +#elif FK_YAML_HAS_BUILTIN(__builtin_expect) +#define FK_YAML_UNLIKELY(expr) (__builtin_expect(!!(expr), 0)) +#else +#define FK_YAML_UNLIKELY(expr) (!!(expr)) +#endif + +#endif /* FK_YAML_DETAIL_MACROS_CPP_CONFIG_MACROS_HPP */ + + +#endif /* FK_YAML_DETAIL_MACROS_DEFINE_MACROS_HPP */ + +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.4.2 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2025 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_ASSERT_HPP +#define FK_YAML_DETAIL_ASSERT_HPP + +// if FK_YAML_ASSERT is not user-defined. apply the default assert impl. +#ifndef FK_YAML_ASSERT +#ifndef NDEBUG +#include +#define FK_YAML_ASSERT(x) assert(x) +#else +#define FK_YAML_ASSERT(x) +#endif +#endif + +#endif /* FK_YAML_DETAIL_ASSERT_HPP */ + +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.4.2 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2025 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_DOCUMENT_METAINFO_HPP +#define FK_YAML_DETAIL_DOCUMENT_METAINFO_HPP + +#include +#include + +// #include + +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.4.2 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2025 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_META_NODE_TRAITS_HPP +#define FK_YAML_DETAIL_META_NODE_TRAITS_HPP + +// #include + +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.4.2 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2025 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_META_DETECT_HPP +#define FK_YAML_DETAIL_META_DETECT_HPP + +#include +#include + +// #include + +// #include +// _______ __ __ __ _____ __ __ __ +// | __| |_/ | \_/ |/ _ \ / \/ \| | fkYAML: A C++ header-only YAML library +// | __| _ < \_ _/| ___ | _ | |___ version 0.4.2 +// |__| |_| \__| |_| |_| |_|___||___|______| https://github.com/fktn-k/fkYAML +// +// SPDX-FileCopyrightText: 2023-2025 Kensuke Fukutani +// SPDX-License-Identifier: MIT + +#ifndef FK_YAML_DETAIL_META_STL_SUPPLEMENT_HPP +#define FK_YAML_DETAIL_META_STL_SUPPLEMENT_HPP + +#include +#include + +// #include + + +#ifdef FK_YAML_HAS_CXX_14 +#include +#endif + +FK_YAML_DETAIL_NAMESPACE_BEGIN + +///////////////////////////////////////////////////////////////////////////////////////////////////////// +// For contributors: +// This file is for supplementing future C++ STL implementations to utilize some useful features +// implemented in C++14 or better. +// This file is needed to keep the fkYAML library requirement to C++11. +// **DO NOT** implement features which are not included any version of STL in this file. +// Such implementations must be in the type_traits.hpp file. +///////////////////////////////////////////////////////////////////////////////////////////////////////// + +#ifndef FK_YAML_HAS_CXX_14 + +/// @brief An alias template for std::add_pointer::type with C++11. +/// @note std::add_pointer_t is available since C++14. +/// @sa https://en.cppreference.com/w/cpp/types/add_pointer +/// @tparam T A type to be added a pointer. +template +using add_pointer_t = typename std::add_pointer::type; + +/// @brief An alias template for std::enable_if::type with C++11. +/// @note std::enable_if_t is available since C++14. +/// @sa https://en.cppreference.com/w/cpp/types/enable_if +/// @tparam Condition A condition tested at compile time. +/// @tparam T The type defined only if Condition is true. +template +using enable_if_t = typename std::enable_if::type; + +/// @brief A simple implementation to use std::is_null_pointer with C++11. +/// @note std::is_null_pointer is available since C++14. +/// @sa https://en.cppreference.com/w/cpp/types/is_null_pointer +/// @tparam T The type to be checked if it's equal to std::nullptr_t. +template +struct is_null_pointer : std::is_same::type> {}; + +/// @brief An alias template for std::remove_cv::type with C++11. +/// @note std::remove_cv_t is available since C++14. +/// @sa https://en.cppreference.com/w/cpp/types/remove_cv +/// @tparam T A type from which const-volatile qualifiers are removed. +template +using remove_cv_t = typename std::remove_cv::type; + +/// @brief An alias template for std::remove_pointer::type with C++11. +/// @note std::remove_pointer_t is available since C++14. +/// @sa https://en.cppreference.com/w/cpp/types/remove_pointer +/// @tparam T A type from which a pointer is removed. +template +using remove_pointer_t = typename std::remove_pointer::type; + +/// @brief An alias template for std::remove_reference::type with C++11. +/// @note std::remove_reference_t is available since C++14. +/// @sa https://en.cppreference.com/w/cpp/types/remove_reference +/// @tparam T A type from which a reference is removed. +template +using remove_reference_t = typename std::remove_reference::type; + +template +struct integer_sequence { + using value_type = T; + static constexpr std::size_t size() noexcept { + return sizeof...(I); + } +}; + +#if !FK_YAML_HAS_BUILTIN(__make_integer_seq) && !FK_YAML_HAS_BUILTIN(__integer_pack) + +namespace make_int_seq_impl { + +template +struct merger; + +template +struct merger, integer_sequence> { + using type = integer_sequence; +}; + +template +struct generator { + using type = + typename merger::type, typename generator::type>::type; +}; + +template +struct generator { + using type = integer_sequence; +}; + +template +struct generator { + using type = integer_sequence; +}; + +} // namespace make_int_seq_impl + +#endif + +template +using make_integer_sequence +#if FK_YAML_HAS_BUILTIN(__make_integer_seq) + // clang defines built-in __make_integer_seq to generate an integer sequence. + = __make_integer_seq; +#elif FK_YAML_HAS_BUILTIN(__integer_pack) + // GCC or other compilers may implement built-in __integer_pack to generate an + // integer sequence. + = integer_sequence; +#else + // fallback to the library implementation of make_integer_sequence. + = typename make_int_seq_impl::generator::type; +#endif + +template +using index_sequence = integer_sequence; + +template +using make_index_sequence = make_integer_sequence; + +template +using index_sequence_for = make_index_sequence; + +#else // !defined(FK_YAML_HAS_CXX_14) + +using std::add_pointer_t; +using std::enable_if_t; +using std::index_sequence; +using std::index_sequence_for; +using std::integer_sequence; +using std::is_null_pointer; +using std::make_index_sequence; +using std::make_integer_sequence; +using std::remove_cv_t; +using std::remove_pointer_t; +using std::remove_reference_t; + +#endif // !defined(FK_YAML_HAS_CXX_14) + +#ifndef FK_YAML_HAS_CXX_17 + +/// @brief A simple implementation to use std::bool_constant with C++11/C++14. +/// @tparam Val +template +using bool_constant = std::integral_constant; + +/// @brief A simple implementation to use std::void_t with C++11/C++14. +/// @note +/// std::conjunction is available since C++17. +/// This is applied when no traits are specified as inputs. +/// @sa https://en.cppreference.com/w/cpp/types/conjunction +/// @tparam Traits Type traits to be checked if their ::value are all true. +template +struct conjunction : std::true_type {}; + +/// @brief A partial specialization of conjunction if only one Trait is given. +/// @tparam Trait Type trait to be checked if its ::value is true. +template +struct conjunction : Trait {}; + +/// @brief A partial specialization of conjunction if more than one traits are given. +/// @tparam First The first type trait to be checked if its ::value is true. +/// @tparam Rest The rest of traits passed as another conjunction template arguments if First::value is true. +template +struct conjunction : std::conditional, First>::type {}; + +/// @brief A simple implementation to use std::disjunction with C++11/C++14. +/// @note +/// std::disjunction is available since C++17. +/// This is applied when no traits are specified as inputs. +/// @sa https://en.cppreference.com/w/cpp/types/disjunction +/// @tparam Traits Type traits to be checked if at least one of their ::value is true. +template +struct disjunction : std::false_type {}; + +/// @brief A partial specialization of disjunction if only one Trait is given. +/// @tparam Trait Type trait to be checked if its ::value is true. +template +struct disjunction : Trait {}; + +/// @brief A partial specialization of disjunction if more than one traits are given. +/// @tparam First The first type trait to be checked if its ::value is true. +/// @tparam Rest The rest of traits passed as another conjunction template arguments if First::value is false. +template +struct disjunction : std::conditional>::type {}; + +/// @brief A simple implementation to use std::negation with C++11/C++14. +/// @note std::negation is available since C++17. +/// @sa https://en.cppreference.com/w/cpp/types/negation +/// @tparam Trait Type trait whose ::value is negated. +template +struct negation : std::integral_constant {}; + +/// @brief A helper for void_t. +/// @tparam Types Any types to be transformed to void type. +template +struct make_void { + using type = void; +}; + +/// @brief A simple implementation to use std::void_t with C++11/C++14. +/// @note std::void_t is available since C++17. +/// @sa https://en.cppreference.com/w/cpp/types/void_t +/// @tparam Types Any types to be transformed to void type. +template +using void_t = typename make_void::type; + +#else // !defined(FK_YAML_HAS_CXX_17) + +using std::bool_constant; +using std::conjunction; +using std::disjunction; +using std::negation; +using std::void_t; + +#endif // !defined(FK_YAML_HAS_CXX_17) + +#ifndef FK_YAML_HAS_CXX_20 + +/// @brief A simple implementation to use std::remove_cvref_t with C++11/C++14/C++17. +/// @note std::remove_cvref & std::remove_cvref_t are available since C++20. +/// @sa https://en.cppreference.com/w/cpp/types/remove_cvref +/// @tparam T A type from which cv-qualifiers and reference are removed. +template +using remove_cvref_t = typename std::remove_cv::type>::type; + +#else + +using std::remove_cvref_t; + +#endif + +/// @brief A wrapper function to call std::unreachable() (since C++23) or similar compiler specific extensions. +/// @note This function is implemented only for better code optimization against dead code and thus excluded from +/// coverage report. +// LCOV_EXCL_START +[[noreturn]] inline void unreachable() { + // use compiler specific extensions if possible. + // undefined behavior should be raised by an empty function with noreturn attribute. + +#if defined(FK_YAML_HAS_CXX_23) || (defined(__cpp_lib_unreachable) && __cpp_lib_unreachable >= 202202L) + std::unreachable(); +#elif defined(_MSC_VER) && !defined(__clang__) // MSVC + __assume(false); +#else + __builtin_unreachable(); +#endif +} +// LCOV_EXCL_STOP + +FK_YAML_DETAIL_NAMESPACE_END + +#endif /* FK_YAML_DETAIL_META_STL_SUPPLEMENT_HPP */ + + +FK_YAML_DETAIL_NAMESPACE_BEGIN + +/// @brief A dummy struct to represent detection failure. +struct nonesuch { + nonesuch() = delete; + ~nonesuch() = delete; + nonesuch(const nonesuch&) = delete; + nonesuch(nonesuch&&) = delete; + nonesuch& operator=(const nonesuch&) = delete; + nonesuch& operator=(nonesuch&&) = delete; +}; + +/// @brief namespace to implement detector type traits +namespace detector_impl { + +/// @brief A helper for general type detection. +/// @tparam Default A type to represent detection failure. +/// @tparam AlwaysVoid This must be void type. +/// @tparam Op A type for desired operation type. +/// @tparam Args Argument types passed to desired operation. +template class Op, typename... Args> +struct detector : std::false_type { + /// @brief A type which represents detection failure. + using type = Default; +}; + +/// @brief A partial specialization of detector if desired operation type is found. +/// @tparam Default A type to represent detection failure. +/// @tparam Op A type for desired operation type. +/// @tparam Args Argument types passed to desired operation. +template class Op, typename... Args> +struct detector>, Op, Args...> : std::true_type { + /// @brief A detected type. + using type = Op; +}; + +} // namespace detector_impl + +/// @brief Type traits to detect Op operation with Args argument types +/// @tparam Op A desired operation type. +/// @tparam Args Argument types passed to desired operation. +template