mirror of
https://github.com/liyunfan1223/azerothcore-wotlk.git
synced 2026-08-08 07:48:02 +00:00
fix(Core/PacketIO): Implemented CMSG_BUSY_TRADE and CMSG_IGNORE_TRADE. (#21385)
This commit is contained in:
@@ -1385,7 +1385,7 @@ public:
|
|||||||
|
|
||||||
[[nodiscard]] Player* GetTrader() const { return m_trade ? m_trade->GetTrader() : nullptr; }
|
[[nodiscard]] Player* GetTrader() const { return m_trade ? m_trade->GetTrader() : nullptr; }
|
||||||
[[nodiscard]] TradeData* GetTradeData() const { return m_trade; }
|
[[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; }
|
CinematicMgr* GetCinematicMgr() const { return _cinematicMgr; }
|
||||||
|
|
||||||
|
|||||||
@@ -4085,7 +4085,7 @@ void Player::SendSellError(SellResult msg, Creature* creature, ObjectGuid guid,
|
|||||||
GetSession()->SendPacket(&data);
|
GetSession()->SendPacket(&data);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Player::TradeCancel(bool sendback)
|
void Player::TradeCancel(bool sendback, TradeStatus status /*= TRADE_STATUS_TRADE_CANCELED*/)
|
||||||
{
|
{
|
||||||
if (m_trade)
|
if (m_trade)
|
||||||
{
|
{
|
||||||
@@ -4093,9 +4093,9 @@ void Player::TradeCancel(bool sendback)
|
|||||||
|
|
||||||
// send yellow "Trade canceled" message to both traders
|
// send yellow "Trade canceled" message to both traders
|
||||||
if (sendback)
|
if (sendback)
|
||||||
GetSession()->SendCancelTrade();
|
GetSession()->SendCancelTrade(status);
|
||||||
|
|
||||||
trader->GetSession()->SendCancelTrade();
|
trader->GetSession()->SendCancelTrade(status);
|
||||||
|
|
||||||
// cleanup
|
// cleanup
|
||||||
delete m_trade;
|
delete m_trade;
|
||||||
|
|||||||
@@ -1165,7 +1165,7 @@ bool Player::UpdatePosition(float x, float y, float z, float orientation,
|
|||||||
SetGroupUpdateFlag(GROUP_UPDATE_FLAG_POSITION);
|
SetGroupUpdateFlag(GROUP_UPDATE_FLAG_POSITION);
|
||||||
|
|
||||||
if (GetTrader() && !IsWithinDistInMap(GetTrader(), INTERACTION_DISTANCE))
|
if (GetTrader() && !IsWithinDistInMap(GetTrader(), INTERACTION_DISTANCE))
|
||||||
GetSession()->SendCancelTrade();
|
GetSession()->SendCancelTrade(TRADE_STATUS_TRADE_CANCELED);
|
||||||
|
|
||||||
CheckAreaExploreAndOutdoor();
|
CheckAreaExploreAndOutdoor();
|
||||||
|
|
||||||
|
|||||||
@@ -70,14 +70,12 @@ void WorldSession::SendTradeStatus(TradeStatus status)
|
|||||||
|
|
||||||
void WorldSession::HandleIgnoreTradeOpcode(WorldPacket& /*recvPacket*/)
|
void WorldSession::HandleIgnoreTradeOpcode(WorldPacket& /*recvPacket*/)
|
||||||
{
|
{
|
||||||
LOG_DEBUG("network", "WORLD: Ignore Trade {}", _player->GetGUID().ToString());
|
_player->TradeCancel(true, TRADE_STATUS_IGNORE_YOU);
|
||||||
// recvPacket.print_storage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleBusyTradeOpcode(WorldPacket& /*recvPacket*/)
|
void WorldSession::HandleBusyTradeOpcode(WorldPacket& /*recvPacket*/)
|
||||||
{
|
{
|
||||||
LOG_DEBUG("network", "WORLD: Busy Trade {}", _player->GetGUID().ToString());
|
_player->TradeCancel(true, TRADE_STATUS_BUSY);
|
||||||
// recvPacket.print_storage();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::SendUpdateTrade(bool trader_data /*= true*/)
|
void WorldSession::SendUpdateTrade(bool trader_data /*= true*/)
|
||||||
@@ -526,12 +524,12 @@ void WorldSession::HandleBeginTradeOpcode(WorldPacket& /*recvPacket*/)
|
|||||||
SendTradeStatus(TRADE_STATUS_OPEN_WINDOW);
|
SendTradeStatus(TRADE_STATUS_OPEN_WINDOW);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::SendCancelTrade()
|
void WorldSession::SendCancelTrade(TradeStatus status)
|
||||||
{
|
{
|
||||||
if (PlayerRecentlyLoggedOut() || PlayerLogout())
|
if (PlayerRecentlyLoggedOut() || PlayerLogout())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
SendTradeStatus(TRADE_STATUS_TRADE_CANCELED);
|
SendTradeStatus(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
void WorldSession::HandleCancelTradeOpcode(WorldPacket& /*recvPacket*/)
|
void WorldSession::HandleCancelTradeOpcode(WorldPacket& /*recvPacket*/)
|
||||||
@@ -620,12 +618,6 @@ void WorldSession::HandleInitiateTradeOpcode(WorldPacket& recvPacket)
|
|||||||
return;
|
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())
|
if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_TRADE) && pOther->GetTeamId() != _player->GetTeamId())
|
||||||
{
|
{
|
||||||
SendTradeStatus(TRADE_STATUS_WRONG_FACTION);
|
SendTradeStatus(TRADE_STATUS_WRONG_FACTION);
|
||||||
|
|||||||
@@ -446,7 +446,7 @@ public:
|
|||||||
|
|
||||||
void SendTradeStatus(TradeStatus status);
|
void SendTradeStatus(TradeStatus status);
|
||||||
void SendUpdateTrade(bool trader_data = true);
|
void SendUpdateTrade(bool trader_data = true);
|
||||||
void SendCancelTrade();
|
void SendCancelTrade(TradeStatus status);
|
||||||
|
|
||||||
void SendPetitionQueryOpcode(ObjectGuid petitionguid);
|
void SendPetitionQueryOpcode(ObjectGuid petitionguid);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user