diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 22 | ||||
-rw-r--r-- | src/server/game/Handlers/MiscHandler.cpp | 2 |
2 files changed, 12 insertions, 12 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index f0638cd7efc..bd366a490f1 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -20595,14 +20595,19 @@ void Player::ResetContestedPvP() void Player::UpdatePvPFlag(time_t currTime) { + if (!IsPvP()) + return; + + if (!pvpInfo.EndTimer || (currTime < pvpInfo.EndTimer +300) || pvpInfo.IsHostile) + return; + if (pvpInfo.EndTimer && pvpInfo.EndTimer <= currTime) { pvpInfo.EndTimer = 0; RemoveFlag(PLAYER_FLAGS, PLAYER_FLAGS_PVP_TIMER); } - if (IsPvP() && !pvpInfo.IsHostile && !HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP | PLAYER_FLAGS_PVP_TIMER)) - UpdatePvP(false); + UpdatePvP(false); } void Player::UpdateDuelFlag(time_t currTime) @@ -21911,14 +21916,9 @@ void Player::UpdateHomebindTime(uint32 time) void Player::InitPvP() { + // pvp flag should stay after relog if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP)) UpdatePvP(true, true); - else if (HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_PVP_TIMER)) - { - UpdatePvP(true, true); - if (!pvpInfo.IsHostile) - pvpInfo.EndTimer = GameTime::GetGameTime() + 300; - } } void Player::UpdatePvPState(bool onlyFFA) @@ -21945,7 +21945,7 @@ void Player::UpdatePvPState(bool onlyFFA) if (onlyFFA) return; - if (pvpInfo.IsHostile) // in hostile area + if (pvpInfo.IsHostile) // in hostile area { if (!IsPvP() || pvpInfo.EndTimer) UpdatePvP(true, true); @@ -21953,7 +21953,7 @@ void Player::UpdatePvPState(bool onlyFFA) else // in friendly area { if (IsPvP() && !HasFlag(PLAYER_FLAGS, PLAYER_FLAGS_IN_PVP) && !pvpInfo.EndTimer) - pvpInfo.EndTimer = GameTime::GetGameTime() + 300; // start toggle-off + pvpInfo.EndTimer = GameTime::GetGameTime(); // start toggle-off } } @@ -21973,7 +21973,7 @@ void Player::UpdatePvP(bool state, bool _override) } else { - pvpInfo.EndTimer = GameTime::GetGameTime() + 300; + pvpInfo.EndTimer = GameTime::GetGameTime(); SetPvP(state); } } diff --git a/src/server/game/Handlers/MiscHandler.cpp b/src/server/game/Handlers/MiscHandler.cpp index 1cd701e39ff..59dab6e70d2 100644 --- a/src/server/game/Handlers/MiscHandler.cpp +++ b/src/server/game/Handlers/MiscHandler.cpp @@ -452,7 +452,7 @@ void WorldSession::HandleTogglePvP(WorldPackets::Misc::TogglePvP& togglePvP) else { if (!GetPlayer()->pvpInfo.IsHostile && GetPlayer()->IsPvP()) - GetPlayer()->pvpInfo.EndTimer = GameTime::GetGameTime() + 300; // start toggle-off + GetPlayer()->pvpInfo.EndTimer = GameTime::GetGameTime(); // start toggle-off } } |