diff options
author | Matan Shukry <matanshukry@gmail.com> | 2021-12-26 20:14:46 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-12-26 19:14:46 +0100 |
commit | b821a729733db0d3742b4aefe05e5a8305724f66 (patch) | |
tree | 5950610a9f6e50d906630825457d952c9548f7cd /src/server/game/Handlers/MiscHandler.cpp | |
parent | e00b1df36ec021bb80659ab9828e0c1a9b55adcf (diff) |
Core/Player: Initial War Mode support (#25926)
* Enable PvP talents
* War Mode buff aura
* Forced PvP flagging
Co-authored-by: Shauren <shauren.trinity@gmail.com>
Diffstat (limited to 'src/server/game/Handlers/MiscHandler.cpp')
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 33 |
1 files changed, 19 insertions, 14 deletions
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*/) |