diff options
author | Mykhailo Redko <ovitnez@gmail.com> | 2024-01-24 22:09:01 +0200 |
---|---|---|
committer | Ovahlord <dreadkiller@gmx.de> | 2024-01-31 22:13:12 +0100 |
commit | d0e34a9bed23aaf35c4c7e8775d04cef477b47ee (patch) | |
tree | 87c77a2b8dd0c33d17ad2364ee760f68deaf3d15 | |
parent | 9a77ca34b3fe2d89006fcdc5cec416f5d8d66e9e (diff) |
Core/PacketIO: Implemented CMSG_BUSY_TRADE and CMSG_IGNORE_TRADE (#29570)
Closes #29308
(cherry picked from commit 420cbd7396ca59497328d372ed028d976f23b150)
# Conflicts:
# src/server/game/Handlers/TradeHandler.cpp
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 7 | ||||
-rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 | ||||
-rw-r--r-- | src/server/game/Handlers/TradeHandler.cpp | 13 | ||||
-rw-r--r-- | src/server/game/Server/WorldSession.h | 2 |
4 files changed, 9 insertions, 15 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 2f08e55e074..158621ebad3 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -12851,17 +12851,16 @@ bool Player::IsUsingTwoHandedWeaponInOneHand() const return true; } -void Player::TradeCancel(bool sendback) +void Player::TradeCancel(bool sendback, TradeStatus status /*= TRADE_STATUS_TRADE_CANCELED*/) { if (m_trade) { Player* trader = m_trade->GetTrader(); - // send yellow "Trade canceled" message to both traders if (sendback) - GetSession()->SendCancelTrade(); + GetSession()->SendCancelTrade(status); - trader->GetSession()->SendCancelTrade(); + trader->GetSession()->SendCancelTrade(status); // cleanup delete m_trade; diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 73b4f32ea04..56e401644f5 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1447,7 +1447,7 @@ class TC_GAME_API Player final : public Unit, public GridObject<Player> Player* GetTrader() const; TradeData* GetTradeData() const { return m_trade; } - void TradeCancel(bool sendback); + void TradeCancel(bool sendback, TradeStatus status = TRADE_STATUS_TRADE_CANCELED); CinematicMgr* GetCinematicMgr() const { return _cinematicMgr.get(); } diff --git a/src/server/game/Handlers/TradeHandler.cpp b/src/server/game/Handlers/TradeHandler.cpp index 62a2c74a2ba..85c49b6f46f 100644 --- a/src/server/game/Handlers/TradeHandler.cpp +++ b/src/server/game/Handlers/TradeHandler.cpp @@ -42,10 +42,12 @@ void WorldSession::SendTradeStatus(WorldPackets::Trade::TradeStatus& info) void WorldSession::HandleIgnoreTradeOpcode(WorldPackets::Trade::IgnoreTrade& /*ignoreTrade*/) { + _player->TradeCancel(true, TRADE_STATUS_IGNORE_YOU); } void WorldSession::HandleBusyTradeOpcode(WorldPackets::Trade::BusyTrade& /*busyTrade*/) { + _player->TradeCancel(true, TRADE_STATUS_BUSY); } void WorldSession::SendUpdateTrade(bool trader_data /*= true*/) @@ -559,13 +561,13 @@ void WorldSession::HandleBeginTradeOpcode(WorldPackets::Trade::BeginTrade& /*beg SendTradeStatus(info); } -void WorldSession::SendCancelTrade() +void WorldSession::SendCancelTrade(TradeStatus status) { if (PlayerRecentlyLoggedOut() || PlayerLogout()) return; WorldPackets::Trade::TradeStatus info; - info.Status = TRADE_STATUS_CANCELLED; + info.Status = status; SendTradeStatus(info); } @@ -661,13 +663,6 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPackets::Trade::InitiateTrade& return; } - if (pOther->GetSocial()->HasIgnore(GetPlayer()->GetGUID(), GetPlayer()->GetSession()->GetAccountGUID())) - { - info.Status = TRADE_STATUS_PLAYER_IGNORED; - SendTradeStatus(info); - return; - } - if ((pOther->GetTeam() != _player->GetTeam() || pOther->HasPlayerFlagEx(PLAYER_FLAGS_EX_MERCENARY_MODE) || _player->HasPlayerFlagEx(PLAYER_FLAGS_EX_MERCENARY_MODE)) && diff --git a/src/server/game/Server/WorldSession.h b/src/server/game/Server/WorldSession.h index 4d98e0380ce..dd939b7d89b 100644 --- a/src/server/game/Server/WorldSession.h +++ b/src/server/game/Server/WorldSession.h @@ -1046,7 +1046,7 @@ class TC_GAME_API WorldSession void SendTradeStatus(WorldPackets::Trade::TradeStatus& status); void SendUpdateTrade(bool trader_data = true); - void SendCancelTrade(); + void SendCancelTrade(TradeStatus status); void SendPetitionQueryOpcode(ObjectGuid petitionguid); |