- bool classUSER::Recv_cli_TRADE_P2P( t_PACKET *pPacket )
- {
- if ( this->m_iIndex == pPacket->m_cli_TRADE_P2P.m_wObjectIDX ) {
- // ·ÎÁîÇØÄ¿ deebeeÀÇ ¸ÞÀÏ·Î ÀÎÇØ ¾Ë°ÔµÈ ÇØÅ·¹æ¹ý ::
- // 1:1°Å·¡½Ã ÇØÅ·À» ÅëÇؼ ÀڽŰú °Å·¡¸¦ ÇÏ°Ô ÇÏ´Â ¹æ¹ýÀ¸·Î ¾ÆÀÌÅÛ º¹»ç...
- return IS_HACKING( this, "Recv_cli_TRADE_P2P :: Trade from self" );
- }
- classUSER *pUSER;
- pUSER = g_pObjMGR->Get_UserOBJ( pPacket->m_cli_TRADE_P2P.m_wObjectIDX );
- if ( pUSER )
- {
- switch( pPacket->m_cli_TRADE_P2P.m_btRESULT )
- {
- case RESULT_TRADE_REQUEST : // °Å·¡ ¿äû
- {
- if ( !(this->m_dwPayFLAG & PLAY_FLAG_TRADE) )
- {
- return true;
- }
- if ( !(pUSER->m_dwPayFLAG & PLAY_FLAG_TRADE) )
- {
- return this->Send_gsv_TRADE_P2P( pPacket->m_cli_TRADE_P2P.m_wObjectIDX, RESULT_TRADE_NO_CHARGE_TARGET );
- }
- if ( pUSER->m_iTradeUserIDX || pUSER->m_IngSTATUS.IsIgnoreSTATUS() ) {
- // ´ë»óÀÌ ¹Ù»Ú´Ù..
- return this->Send_gsv_TRADE_P2P( pPacket->m_cli_TRADE_P2P.m_wObjectIDX, RESULT_TRADE_BUSY );
- }
- int iDistance = distance ((int)m_PosCUR.x, (int)m_PosCUR.y, (int)pUSER->m_PosCUR.x, (int)pUSER->m_PosCUR.y);
- if ( iDistance > MAX_TRADE_DISTANCE ) {
- // °Å·¡ ¿äû pUSER¿ÍÀÇ °Å¸®´Â üũÈÄ Àڽſ¡°Ô °Å·¡Ãë¼Ò Àü¼Û...
- return this->Send_gsv_TRADE_P2P( pPacket->m_cli_TRADE_P2P.m_wObjectIDX, RESULT_TRADE_TOO_FAR );
- }
- this->m_btTradeBIT = 0;
- this->m_iTradeUserIDX = pPacket->m_cli_TRADE_P2P.m_wObjectIDX;
- break;
- }
- case RESULT_TRADE_ACCEPT : // °Å·¡ ½ÂÀÎ Çß´Ù.
- {
- if ( pUSER->m_iTradeUserIDX != this->Get_INDEX() )
- {
- return this->Send_gsv_TRADE_P2P( pPacket->m_cli_TRADE_P2P.m_wObjectIDX, RESULT_TRADE_CANCEL );
- }
- if ( this->m_IngSTATUS.IsIgnoreSTATUS() || pUSER->m_IngSTATUS.IsIgnoreSTATUS() )
- {
- pUSER->Send_gsv_TRADE_P2P( pPacket->m_cli_TRADE_P2P.m_wObjectIDX, RESULT_TRADE_BUSY );
- this->Send_gsv_TRADE_P2P( pPacket->m_cli_TRADE_P2P.m_wObjectIDX, RESULT_TRADE_BUSY );
- return true;
- }
- this->m_btTradeBIT = pUSER->m_btTradeBIT = BIT_TRADE_ACCEPT;
- this->m_iTradeUserIDX = pUSER->Get_INDEX();
- ::ZeroMemory( pUSER->m_TradeITEM, sizeof(tagTradeITEM) * MAX_TRADE_ITEM_SLOT );
- ::ZeroMemory( this->m_TradeITEM, sizeof(tagTradeITEM) * MAX_TRADE_ITEM_SLOT );
- break;
- }
- case RESULT_TRADE_REJECT : // °Å·¡ °ÅºÎ.
- case RESULT_TRADE_CANCEL : // °Å·¡ µµÁß Ãë¼Ò.
- {
- if ( pUSER->m_iTradeUserIDX == this->Get_INDEX() )
- {
- pUSER->m_btTradeBIT = pUSER->m_iTradeUserIDX = 0;
- }
- this->m_btTradeBIT = this->m_iTradeUserIDX = 0;
- break;
- }
- case RESULT_TRADE_DONE : // °Å·¡ ½ÇÇà.
- {
- // ¼·Î ´ë»ó¿¡ º¯È°¡ ¾ø³ª ?
- if ( this->m_iTradeUserIDX != pUSER->Get_INDEX() || pUSER->m_iTradeUserIDX != this->Get_INDEX() )
- {
- this->m_btTradeBIT = this->m_iTradeUserIDX = 0;
- pUSER->m_btTradeBIT = pUSER->m_iTradeUserIDX = 0;
- return this->Send_gsv_TRADE_P2P( pPacket->m_cli_TRADE_P2P.m_wObjectIDX, RESULT_TRADE_CANCEL );
- }
- // µÑ´Ù Áغñ°¡ ¿Ï·á µÆ³ª ?
- this->m_btTradeBIT |= BIT_TRADE_DONE;
- if ( pUSER->m_btTradeBIT != ( BIT_TRADE_READY | BIT_TRADE_DONE |BIT_TRADE_ACCEPT) ||
- this->m_btTradeBIT != ( BIT_TRADE_READY | BIT_TRADE_DONE |BIT_TRADE_ACCEPT) )
- {
- return true;
- }
- // Áװųª °³ÀλóÁ¡ ¸ðµå³Ä ?
- if ( this->m_IngSTATUS.IsIgnoreSTATUS() ||
- pUSER->m_IngSTATUS.IsIgnoreSTATUS() ||
- !this->Check_TradeITEM () ||
- !pUSER->Check_TradeITEM () )
- {
- this->m_btTradeBIT = this->m_iTradeUserIDX = 0;
- pUSER->m_btTradeBIT = pUSER->m_iTradeUserIDX = 0;
- this->Send_gsv_TRADE_P2P( pPacket->m_cli_TRADE_P2P.m_wObjectIDX, RESULT_TRADE_CANCEL );
- pUSER->Send_gsv_TRADE_P2P( pPacket->m_cli_TRADE_P2P.m_wObjectIDX, RESULT_TRADE_CANCEL );
- return true;
- }
- // ½ÇÁ¦ ¹°°Ç ±³È¯ ÇÒ°÷...
- classPACKET *pCPacket1 = Packet_AllocNLock ();
- //////////////////////////////////////////////////////////////////////////
- // 2006.06.12:À̼ºÈ°:pCPacket1, pCPacket2¿¡ ´ëÇÑ Null üũ
- if (!pCPacket1) {
- return false;
- }
- classPACKET *pCPacket2 = Packet_AllocNLock ();
- if (!pCPacket2) {
- Packet_ReleaseNUnlock(pCPacket1);
- return false;
- }
- //////////////////////////////////////////////////////////////////////////
- pCPacket1->m_HEADER.m_wType = GSV_SET_MONEYnINV;
- pCPacket1->m_HEADER.m_nSize = sizeof( gsv_SET_MONEYnINV );
- pCPacket1->m_gsv_SET_MONEYnINV.m_btItemCNT = 0;
- pCPacket2->m_HEADER.m_wType = GSV_SET_MONEYnINV;
- pCPacket2->m_HEADER.m_nSize = sizeof( gsv_SET_MONEYnINV );
- pCPacket2->m_gsv_SET_MONEYnINV.m_btItemCNT = 0;
- if(!this->RemoveTradeItemFromINV ( pUSER, pCPacket1 )||!pUSER->RemoveTradeItemFromINV ( this, pCPacket2 ))
- {
- Packet_ReleaseNUnlock( pCPacket1 );
- Packet_ReleaseNUnlock( pCPacket2 );
- return false;
- }
- if(!this->AddTradeItemToINV( pUSER/*pUSER->m_TradeITEM*/, pCPacket1 )||!pUSER->AddTradeItemToINV( this/*this->m_TradeITEM*/, pCPacket2 ))
- {
- Packet_ReleaseNUnlock( pCPacket1 );
- Packet_ReleaseNUnlock( pCPacket2 );
- return false;
- }
- pCPacket1->m_HEADER.m_nSize += ( pCPacket1->m_gsv_SET_MONEYnINV.m_btItemCNT * sizeof( tag_SET_INVITEM ) );
- pCPacket1->m_gsv_SET_MONEYnINV.m_i64Money = this->GetCur_MONEY();
- pCPacket2->m_HEADER.m_nSize += ( pCPacket2->m_gsv_SET_MONEYnINV.m_btItemCNT * sizeof( tag_SET_INVITEM ) );
- pCPacket2->m_gsv_SET_MONEYnINV.m_i64Money = pUSER->GetCur_MONEY();
- this->SendPacket( pCPacket1 );
- pUSER->SendPacket( pCPacket2 );
- Packet_ReleaseNUnlock( pCPacket1 );
- Packet_ReleaseNUnlock( pCPacket2 );
- pUSER->Send_gsv_TRADE_P2P( this->Get_INDEX(), RESULT_TRADE_DONE, 0 );
- this->Send_gsv_TRADE_P2P( pUSER->Get_INDEX(), RESULT_TRADE_DONE, 0 );
- this->m_btTradeBIT = this->m_iTradeUserIDX = 0;
- pUSER->m_btTradeBIT = pUSER->m_iTradeUserIDX = 0;
- return true;
- }
- case RESULT_TRADE_CHECK_READY : // °Å·¡ Áغñ ¿Ï·á.
- this->m_btTradeBIT |= BIT_TRADE_READY;
- break;
- case RESULT_TRADE_UNCHECK_READY : // °Å·¡ Áغñ ÇØÁ¦
- this->m_btTradeBIT &= ~BIT_TRADE_READY ;
- pUSER->m_btTradeBIT &= ~BIT_TRADE_DONE;
- break;
- case RESULT_TRADE_OUT_OF_INV : // Àκ¥Å丮°¡ ²ËÂ÷¼ ¹ÞÀ»¼ö ¾ø´Ù.
- if ( pPacket->m_cli_TRADE_P2P.m_cTradeSLOT < 0 ||
- pPacket->m_cli_TRADE_P2P.m_cTradeSLOT >= MAX_TRADE_ITEM_SLOT )
- {
- return IS_HACKING (this, "Recv_cli_TRADE_P2P" );
- }
- pUSER->m_TradeITEM[ pPacket->m_cli_TRADE_P2P.m_cTradeSLOT ].m_Item.m_cType = 0;
- break;
- }
- pUSER->Send_gsv_TRADE_P2P( this->Get_INDEX(), pPacket->m_cli_TRADE_P2P.m_btRESULT, pPacket->m_cli_TRADE_P2P.m_cTradeSLOT );
- } else {
- // ´ë»óÀÌ ¾ø´Ù.
- this->m_btTradeBIT = this->m_iTradeUserIDX = 0;
- this->Send_gsv_TRADE_P2P( this->m_iTradeUserIDX, RESULT_TRADE_NOT_TARGET );
- }
- return true;
- }
Hello,
Maybe this is an old bug but i can't find a topic here who actually fix it.
The problem is that players can swap items in the trade. Showing the initial item on the screen, but once traded, the item changes to the swapped item.
I started to block the fact that you can't equip/unequip gear for the armor slots on the char. But this doesn't fix the hole problem. So is there a way to actually block the use of all the quick-bar actions when a player is trading with an other player ? Hope someone will help me out here