aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp15
-rw-r--r--src/server/game/Server/Protocol/Handlers/MovementHandler.cpp6
2 files changed, 14 insertions, 7 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 94487f5d9d4..a971c2af689 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -7020,9 +7020,12 @@ void Player::UpdateZone(uint32 newZone, uint32 newArea)
if (zone->flags & AREA_FLAG_CAPITAL) // in capital city
{
- SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING);
- SetRestType(REST_TYPE_IN_CITY);
- InnEnter(time(0),GetMapId(),0,0,0);
+ if (!pvpInfo.inHostileArea || zone->IsSanctuary())
+ {
+ SetFlag(PLAYER_FLAGS, PLAYER_FLAGS_RESTING);
+ SetRestType(REST_TYPE_IN_CITY);
+ InnEnter(time(0),GetMapId(),0,0,0);
+ }
pvpInfo.inNoPvPArea = true;
}
else // anywhere else
@@ -19967,10 +19970,8 @@ void Player::UpdatePvP(bool state, bool override)
}
else
{
- if (pvpInfo.endTimer != 0)
- pvpInfo.endTimer = time(NULL);
- else
- SetPvP(state);
+ pvpInfo.endTimer = time(NULL);
+ SetPvP(state);
}
}
diff --git a/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp b/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp
index 50b687e1595..7c4f305bcd7 100644
--- a/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp
+++ b/src/server/game/Server/Protocol/Handlers/MovementHandler.cpp
@@ -179,6 +179,9 @@ void WorldSession::HandleMoveWorldportAckOpcode()
// honorless target
if (GetPlayer()->pvpInfo.inHostileArea)
GetPlayer()->CastSpell(GetPlayer(), 2479, true);
+ // in friendly area
+ else if (GetPlayer()->IsPvP() && !GetPlayer()->HasFlag(PLAYER_FLAGS,PLAYER_FLAGS_IN_PVP))
+ GetPlayer()->UpdatePvP(false, false);
// resummon pet
GetPlayer()->ResummonPetTemporaryUnSummonedIfAny();
@@ -227,6 +230,9 @@ void WorldSession::HandleMoveTeleportAck(WorldPacket& recv_data)
// honorless target
if (plMover->pvpInfo.inHostileArea)
plMover->CastSpell(plMover, 2479, true);
+ // in friendly area
+ else if (plMover->IsPvP() && !plMover->HasFlag(PLAYER_FLAGS,PLAYER_FLAGS_IN_PVP))
+ plMover->UpdatePvP(false, false);
}
// resummon pet