aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMykhailo Redko <ovitnez@gmail.com>2024-01-24 22:09:01 +0200
committerOvahlord <dreadkiller@gmx.de>2024-01-31 22:13:12 +0100
commitd0e34a9bed23aaf35c4c7e8775d04cef477b47ee (patch)
tree87c77a2b8dd0c33d17ad2364ee760f68deaf3d15
parent9a77ca34b3fe2d89006fcdc5cec416f5d8d66e9e (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.cpp7
-rw-r--r--src/server/game/Entities/Player/Player.h2
-rw-r--r--src/server/game/Handlers/TradeHandler.cpp13
-rw-r--r--src/server/game/Server/WorldSession.h2
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);