diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 15 | ||||
-rw-r--r-- | src/server/game/Server/Protocol/Handlers/MovementHandler.cpp | 6 |
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 |