Skip to content

Commit

Permalink
Core/PacketIO: Implemented CMSG_BUSY_TRADE and CMSG_IGNORE_TRADE (#29570
Browse files Browse the repository at this point in the history
)

Closes #29308

(cherry picked from commit 420cbd7)

# Conflicts:
#	src/server/game/Handlers/TradeHandler.cpp
  • Loading branch information
r4d1sh authored and Ovahlord committed Jan 31, 2024
1 parent 9a77ca3 commit d0e34a9
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 15 deletions.
7 changes: 3 additions & 4 deletions src/server/game/Entities/Player/Player.cpp
Expand Up @@ -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;
Expand Down
2 changes: 1 addition & 1 deletion src/server/game/Entities/Player/Player.h
Expand Up @@ -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(); }

Expand Down
13 changes: 4 additions & 9 deletions src/server/game/Handlers/TradeHandler.cpp
Expand Up @@ -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*/)
Expand Down Expand Up @@ -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);
}

Expand Down Expand Up @@ -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)) &&
Expand Down
2 changes: 1 addition & 1 deletion src/server/game/Server/WorldSession.h
Expand Up @@ -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);

Expand Down

0 comments on commit d0e34a9

Please sign in to comment.