diff options
| author | r4dish <ovitnez@gmail.com> | 2024-01-06 10:17:34 +0200 |
|---|---|---|
| committer | Shauren <shauren.trinity@gmail.com> | 2024-01-06 23:43:59 +0100 |
| commit | 1dc9b83a2556741ffd0c6ddce447a3e04f51a2b2 (patch) | |
| tree | b3e04ea743cfe4639d7cb0f1bdc7cfb12f53fff6 /src/server/scripts | |
| parent | 196dd226dfb0ffe80d4db8531d8d337fba3d2003 (diff) | |
Core/Misc: Do not apply Deserter debuff to players teleported from the battleground by gm command (.appear/.summon).
Diffstat (limited to 'src/server/scripts')
| -rw-r--r-- | src/server/scripts/Commands/cs_misc.cpp | 51 |
1 files changed, 30 insertions, 21 deletions
diff --git a/src/server/scripts/Commands/cs_misc.cpp b/src/server/scripts/Commands/cs_misc.cpp index 670efaea221..65c671bef2f 100644 --- a/src/server/scripts/Commands/cs_misc.cpp +++ b/src/server/scripts/Commands/cs_misc.cpp @@ -384,16 +384,6 @@ public: handler->SetSentErrorMessage(true); return false; } - // if both players are in different bgs - else if (_player->GetBattlegroundId() && _player->GetBattlegroundId() != target->GetBattlegroundId()) - _player->LeaveBattleground(false); // Note: should be changed so _player gets no Deserter debuff - - // all's well, set bg id - // when porting out from the bg, it will be reset to 0 - _player->SetBattlegroundId(target->GetBattlegroundId(), target->GetBattlegroundTypeId()); - // remember current position as entry point for return at bg end teleportation - if (!_player->GetMap()->IsBattlegroundOrArena()) - _player->SetBattlegroundEntryPoint(); } else if (map->IsDungeon()) { @@ -442,6 +432,19 @@ public: handler->PSendSysMessage(LANG_APPEARING_AT, chrNameLink.c_str()); + if (_player->GetBattlegroundId() && _player->GetBattlegroundId() != target->GetBattlegroundId()) + _player->LeaveBattleground(false, true); + + if (map->IsBattlegroundOrArena()) + { + // all's well, set bg id + // when porting out from the bg, it will be reset to 0 + _player->SetBattlegroundId(target->GetBattlegroundId(), target->GetBattlegroundTypeId()); + // remember current position as entry point for return at bg end teleportation + if (!_player->GetMap()->IsBattlegroundOrArena()) + _player->SetBattlegroundEntryPoint(); + } + // stop flight if need if (_player->IsInFlight()) _player->FinishTaxiFlight(); @@ -472,6 +475,9 @@ public: if (!Player::LoadPositionFromDB(map, x, y, z, o, in_flight, targetGuid)) return false; + if (_player->GetBattlegroundId()) + _player->LeaveBattleground(false, true); + // stop flight if need if (_player->IsInFlight()) _player->FinishTaxiFlight(); @@ -526,18 +532,8 @@ public: handler->SetSentErrorMessage(true); return false; } - // if both players are in different bgs - else if (target->GetBattlegroundId() && _player->GetBattlegroundId() != target->GetBattlegroundId()) - target->LeaveBattleground(false); // Note: should be changed so target gets no Deserter debuff - - // all's well, set bg id - // when porting out from the bg, it will be reset to 0 - target->SetBattlegroundId(_player->GetBattlegroundId(), _player->GetBattlegroundTypeId()); - // remember current position as entry point for return at bg end teleportation - if (!target->GetMap()->IsBattlegroundOrArena()) - target->SetBattlegroundEntryPoint(); } - else if (map->Instanceable()) + else if (map->IsDungeon()) { Map* targetMap = target->GetMap(); Player* targetGroupLeader = nullptr; @@ -566,6 +562,19 @@ public: if (handler->needReportToTarget(target)) ChatHandler(target->GetSession()).PSendSysMessage(LANG_SUMMONED_BY, handler->playerLink(_player->GetName()).c_str()); + if (target->GetBattlegroundId() && _player->GetBattlegroundId() != target->GetBattlegroundId()) + target->LeaveBattleground(false, true); + + if (map->IsBattlegroundOrArena()) + { + // all's well, set bg id + // when porting out from the bg, it will be reset to 0 + target->SetBattlegroundId(_player->GetBattlegroundId(), _player->GetBattlegroundTypeId()); + // remember current position as entry point for return at bg end teleportation + if (!target->GetMap()->IsBattlegroundOrArena()) + target->SetBattlegroundEntryPoint(); + } + // stop flight if need if (_player->IsInFlight()) _player->FinishTaxiFlight(); |
