Core/PacketIO: Implemented CMSG_BUSY_TRADE and CMSG_IGNORE_TRADE (#29570)
Closes #29308 (cherry picked from commit 420cbd7396ca59497328d372ed028d976f23b150)
This commit is contained in:
@@ -13283,17 +13283,16 @@ bool Player::IsUsingTwoHandedWeaponInOneHand() const
|
||||
return true;
|
||||
}
|
||||
|
||||
void Player::TradeCancel(bool sendback)
|
||||
void Player::TradeCancel(bool sendback, TradeStatus status /*= TRADE_STATUS_CANCELLED*/)
|
||||
{
|
||||
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;
|
||||
|
||||
@@ -1653,7 +1653,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_CANCELLED);
|
||||
|
||||
CinematicMgr* GetCinematicMgr() const { return _cinematicMgr.get(); }
|
||||
|
||||
|
||||
@@ -42,10 +42,12 @@ void WorldSession::SendTradeStatus(WorldPackets::Trade::TradeStatus& info)
|
||||
|
||||
void WorldSession::HandleIgnoreTradeOpcode(WorldPackets::Trade::IgnoreTrade& /*ignoreTrade*/)
|
||||
{
|
||||
_player->TradeCancel(true, TRADE_STATUS_PLAYER_BUSY);
|
||||
}
|
||||
|
||||
void WorldSession::HandleBusyTradeOpcode(WorldPackets::Trade::BusyTrade& /*busyTrade*/)
|
||||
{
|
||||
_player->TradeCancel(true, TRADE_STATUS_PLAYER_IGNORED);
|
||||
}
|
||||
|
||||
void WorldSession::SendUpdateTrade(bool trader_data /*= true*/)
|
||||
@@ -575,13 +577,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);
|
||||
}
|
||||
|
||||
@@ -677,13 +679,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)) &&
|
||||
|
||||
@@ -1085,7 +1085,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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user