From b821a729733db0d3742b4aefe05e5a8305724f66 Mon Sep 17 00:00:00 2001 From: Matan Shukry Date: Sun, 26 Dec 2021 20:14:46 +0200 Subject: Core/Player: Initial War Mode support (#25926) * Enable PvP talents * War Mode buff aura * Forced PvP flagging Co-authored-by: Shauren --- src/server/game/Handlers/MiscHandler.cpp | 33 ++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) (limited to 'src/server/game/Handlers/MiscHandler.cpp') diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index fe85091db82..9d94b531ac6 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -313,38 +313,43 @@ void WorldSession::HandleLogoutCancelOpcode(WorldPackets::Character::LogoutCance void WorldSession::HandleTogglePvP(WorldPackets::Misc::TogglePvP& /*packet*/) { - if (GetPlayer()->HasPlayerFlag(PLAYER_FLAGS_IN_PVP)) - { - GetPlayer()->RemovePlayerFlag(PLAYER_FLAGS_IN_PVP); - GetPlayer()->AddPlayerFlag(PLAYER_FLAGS_PVP_TIMER); - if (!GetPlayer()->pvpInfo.IsHostile && GetPlayer()->IsPvP()) - GetPlayer()->pvpInfo.EndTimer = GameTime::GetGameTime() + 300; // start toggle-off - } - else + if (!GetPlayer()->HasPlayerFlag(PLAYER_FLAGS_IN_PVP)) { GetPlayer()->AddPlayerFlag(PLAYER_FLAGS_IN_PVP); GetPlayer()->RemovePlayerFlag(PLAYER_FLAGS_PVP_TIMER); if (!GetPlayer()->IsPvP() || GetPlayer()->pvpInfo.EndTimer) GetPlayer()->UpdatePvP(true, true); } -} - -void WorldSession::HandleSetPvP(WorldPackets::Misc::SetPvP& packet) -{ - if (!packet.EnablePVP) + else if (!GetPlayer()->IsWarModeLocalActive()) { GetPlayer()->RemovePlayerFlag(PLAYER_FLAGS_IN_PVP); GetPlayer()->AddPlayerFlag(PLAYER_FLAGS_PVP_TIMER); if (!GetPlayer()->pvpInfo.IsHostile && GetPlayer()->IsPvP()) GetPlayer()->pvpInfo.EndTimer = GameTime::GetGameTime() + 300; // start toggle-off } - else +} + +void WorldSession::HandleSetPvP(WorldPackets::Misc::SetPvP& packet) +{ + if (packet.EnablePVP) { GetPlayer()->AddPlayerFlag(PLAYER_FLAGS_IN_PVP); GetPlayer()->RemovePlayerFlag(PLAYER_FLAGS_PVP_TIMER); if (!GetPlayer()->IsPvP() || GetPlayer()->pvpInfo.EndTimer) GetPlayer()->UpdatePvP(true, true); } + else if (!GetPlayer()->IsWarModeLocalActive()) + { + GetPlayer()->RemovePlayerFlag(PLAYER_FLAGS_IN_PVP); + GetPlayer()->AddPlayerFlag(PLAYER_FLAGS_PVP_TIMER); + if (!GetPlayer()->pvpInfo.IsHostile && GetPlayer()->IsPvP()) + GetPlayer()->pvpInfo.EndTimer = GameTime::GetGameTime() + 300; // start toggle-off + } +} + +void WorldSession::HandleSetWarMode(WorldPackets::Misc::SetWarMode& packet) +{ + _player->SetWarModeDesired(packet.Enable); } void WorldSession::HandlePortGraveyard(WorldPackets::Misc::PortGraveyard& /*packet*/) -- cgit v1.2.3