aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/server/game/Entities/Player/Player.cpp22
-rw-r--r--src/server/game/Handlers/MiscHandler.cpp4
2 files changed, 13 insertions, 13 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index eb839fb2945..41c06787fea 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -21924,14 +21924,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;
RemovePlayerFlag(PLAYER_FLAGS_PVP_TIMER);
}
- if (IsPvP() && !pvpInfo.IsHostile && !HasPlayerFlag(PlayerFlags(PLAYER_FLAGS_IN_PVP | PLAYER_FLAGS_PVP_TIMER)))
- UpdatePvP(false);
+ UpdatePvP(false);
}
void Player::UpdateDuelFlag(time_t currTime)
@@ -23639,14 +23644,9 @@ void Player::UpdateHomebindTime(uint32 time)
void Player::InitPvP()
{
+ // pvp flag should stay after relog
if (HasPlayerFlag(PLAYER_FLAGS_IN_PVP))
UpdatePvP(true, true);
- else if (HasPlayerFlag(PLAYER_FLAGS_PVP_TIMER))
- {
- UpdatePvP(true, true);
- if (!pvpInfo.IsHostile)
- pvpInfo.EndTimer = GameTime::GetGameTime() + 300;
- }
}
void Player::UpdatePvPState(bool onlyFFA)
@@ -23673,7 +23673,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);
@@ -23681,7 +23681,7 @@ void Player::UpdatePvPState(bool onlyFFA)
else // in friendly area
{
if (IsPvP() && !HasPlayerFlag(PLAYER_FLAGS_IN_PVP) && !pvpInfo.EndTimer)
- pvpInfo.EndTimer = GameTime::GetGameTime() + 300; // start toggle-off
+ pvpInfo.EndTimer = GameTime::GetGameTime(); // start toggle-off
}
}
@@ -23701,7 +23701,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 5f17946132d..a2c812f1a84 100644
--- a/src/server/game/Handlers/MiscHandler.cpp
+++ b/src/server/game/Handlers/MiscHandler.cpp
@@ -325,7 +325,7 @@ void WorldSession::HandleTogglePvP(WorldPackets::Misc::TogglePvP& /*packet*/)
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
+ GetPlayer()->pvpInfo.EndTimer = GameTime::GetGameTime(); // start toggle-off
}
}
@@ -343,7 +343,7 @@ void WorldSession::HandleSetPvP(WorldPackets::Misc::SetPvP& packet)
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
+ GetPlayer()->pvpInfo.EndTimer = GameTime::GetGameTime(); // start toggle-off
}
}