Skip to content

Commit

Permalink
fix(Core/PacketIO): Implemented CMSG_BUSY_TRADE and CMSG_IGNORE_TRADE.
Browse files Browse the repository at this point in the history
  • Loading branch information
r4d1sh committed Feb 10, 2025
1 parent 91cd42e commit 6b86815
Show file tree
Hide file tree
Showing 5 changed files with 10 additions and 18 deletions.
2 changes: 1 addition & 1 deletion src/server/game/Entities/Player/Player.h
Original file line number Diff line number Diff line change
Expand Up @@ -1385,7 +1385,7 @@ class Player : public Unit, public GridObject<Player>

[[nodiscard]] Player* GetTrader() const { return m_trade ? m_trade->GetTrader() : nullptr; }
[[nodiscard]] 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; }

Expand Down
6 changes: 3 additions & 3 deletions src/server/game/Entities/Player/PlayerStorage.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4085,17 +4085,17 @@ void Player::SendSellError(SellResult msg, Creature* creature, ObjectGuid guid,
GetSession()->SendPacket(&data);
}

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;
Expand Down
2 changes: 1 addition & 1 deletion src/server/game/Entities/Player/PlayerUpdates.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1165,7 +1165,7 @@ bool Player::UpdatePosition(float x, float y, float z, float orientation,
SetGroupUpdateFlag(GROUP_UPDATE_FLAG_POSITION);

if (GetTrader() && !IsWithinDistInMap(GetTrader(), INTERACTION_DISTANCE))
GetSession()->SendCancelTrade();
GetSession()->SendCancelTrade(TRADE_STATUS_TRADE_CANCELED);

CheckAreaExploreAndOutdoor();

Expand Down
16 changes: 4 additions & 12 deletions src/server/game/Handlers/TradeHandler.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -70,14 +70,12 @@ void WorldSession::SendTradeStatus(TradeStatus status)

void WorldSession::HandleIgnoreTradeOpcode(WorldPacket& /*recvPacket*/)
{
LOG_DEBUG("network", "WORLD: Ignore Trade {}", _player->GetGUID().ToString());
// recvPacket.print_storage();
_player->TradeCancel(true, TRADE_STATUS_IGNORE_YOU);
}

void WorldSession::HandleBusyTradeOpcode(WorldPacket& /*recvPacket*/)
{
LOG_DEBUG("network", "WORLD: Busy Trade {}", _player->GetGUID().ToString());
// recvPacket.print_storage();
_player->TradeCancel(true, TRADE_STATUS_BUSY);
}

void WorldSession::SendUpdateTrade(bool trader_data /*= true*/)
Expand Down Expand Up @@ -526,12 +524,12 @@ void WorldSession::HandleBeginTradeOpcode(WorldPacket& /*recvPacket*/)
SendTradeStatus(TRADE_STATUS_OPEN_WINDOW);
}

void WorldSession::SendCancelTrade()
void WorldSession::SendCancelTrade(TradeStatus status)
{
if (PlayerRecentlyLoggedOut() || PlayerLogout())
return;

SendTradeStatus(TRADE_STATUS_TRADE_CANCELED);
SendTradeStatus(status);
}

void WorldSession::HandleCancelTradeOpcode(WorldPacket& /*recvPacket*/)
Expand Down Expand Up @@ -620,12 +618,6 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket)
return;
}

if (pOther->GetSocial()->HasIgnore(GetPlayer()->GetGUID()))
{
SendTradeStatus(TRADE_STATUS_IGNORE_YOU);
return;
}

if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_TRADE) && pOther->GetTeamId() != _player->GetTeamId())
{
SendTradeStatus(TRADE_STATUS_WRONG_FACTION);
Expand Down
2 changes: 1 addition & 1 deletion src/server/game/Server/WorldSession.h
Original file line number Diff line number Diff line change
Expand Up @@ -446,7 +446,7 @@ class WorldSession

void SendTradeStatus(TradeStatus status);
void SendUpdateTrade(bool trader_data = true);
void SendCancelTrade();
void SendCancelTrade(TradeStatus status);

void SendPetitionQueryOpcode(ObjectGuid petitionguid);

Expand Down

0 comments on commit 6b86815

Please sign in to comment.