⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 exchangemanager.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 2 页
字号:
					pPlayer1->SendMsg( &CancelMsg, sizeof( MSGBASE ) );
					break;
				}
			}
			else
			{
				break;
			}

			MSGBASE CancelMsg = *msg;

			CancelMsg.Protocol = MP_EXCHANGE_WAITING_CANCEL_ACK;
			pPlayer1->SendMsg( &CancelMsg, sizeof( MSGBASE ) );

			if( pPlayer1->GetState() == eObjectState_Exchange )
				OBJECTSTATEMGR_OBJ->EndObjectState(pPlayer1, eObjectState_Exchange);

			CPlayer* pPlayer2		= pPlayer1->GetExchangeContainer()->pOpPlayer;

			DestroyExchangeRoom( pRoom );

			if( pPlayer2 == NULL ) break;	//眉农
			CancelMsg.Protocol = MP_EXCHANGE_WAITING_CANCEL;
			pPlayer2->SendMsg( &CancelMsg, sizeof( MSGBASE ) );
			
			if( pPlayer2->GetState() == eObjectState_Exchange )
				OBJECTSTATEMGR_OBJ->EndObjectState(pPlayer2, eObjectState_Exchange);
		}
		break;

	case MP_EXCHANGE_ADDITEM_SYN:
		{
			MSG_LINKITEM* msg = (MSG_LINKITEM*)pMsg;

			CPlayer* pPlayer1 = (CPlayer*)g_pUserTable->FindUser( msg->dwObjectID );
			if( pPlayer1 == NULL ) break;
			CPlayer* pPlayer2 = pPlayer1->GetExchangeContainer()->pOpPlayer;
			if( pPlayer2 == NULL ) break;
		
			CExchangeRoom* pRoom = pPlayer1->GetExchangeContainer()->pRoom;
			if( pRoom == NULL ) break;	//眠啊 : 坷幅皋技瘤 贸府, 努扼捞攫飘 背券 吝瘤

			MSG_LINKITEM ItemMsg = *msg;

			//咯扁辑 酒捞袍 器瘤记栏肺 角力 辑滚啊 啊瘤绊 乐绰 沥焊客 老摹窍绰瘤 眉农窍磊.
			CInventorySlot* pInventory = (CInventorySlot*)pPlayer1->GetSlot( eItemTable_Inventory );
			if( pInventory == NULL ) return;
			const ITEMBASE* pItemBase = pInventory->GetItemInfoAbs( msg->ItemInfo.Position );
			if( pItemBase == NULL )
			{
				ItemMsg.Protocol = MP_EXCHANGE_ADDITEM_NACK;
				pPlayer1->SendMsg( &ItemMsg, sizeof( MSG_LINKITEM ) );
				return;
			}

			if( pItemBase->dwDBIdx != msg->ItemInfo.dwDBIdx ||
				pItemBase->wIconIdx != msg->ItemInfo.wIconIdx ||
				pItemBase->Durability != msg->ItemInfo.Durability ||
				pItemBase->Position != msg->ItemInfo.Position )
			{
				ItemMsg.Protocol = MP_EXCHANGE_ADDITEM_NACK;
				pPlayer1->SendMsg( &ItemMsg, sizeof( MSG_LINKITEM ) );
				return;
			}

			if( ITEMMGR->IsDupItem(pItemBase->wIconIdx) )
			if( pItemBase->Durability > 5 )
			{
				ItemMsg.Protocol = MP_EXCHANGE_ADDITEM_NACK;
				pPlayer1->SendMsg( &ItemMsg, sizeof( MSG_LINKITEM ) );
				return;
			}

			if( pRoom->IsLocked( pPlayer1->GetExchangeContainer()->nMyIndex ) )
			{
				ItemMsg.Protocol = MP_EXCHANGE_ADDITEM_NACK;
				pPlayer1->SendMsg( &ItemMsg, sizeof( MSG_LINKITEM ) );
				return;
			}

			if( !pRoom->AddItem( pPlayer1->GetExchangeContainer()->nMyIndex, &msg->ItemInfo ) )
			{
				ItemMsg.Protocol = MP_EXCHANGE_ADDITEM_NACK;
				pPlayer1->SendMsg( &ItemMsg, sizeof( MSG_LINKITEM ) );
				return;
			}
			if( !CHKRT->ItemOf( pPlayer1, msg->ItemInfo.Position, msg->ItemInfo.wIconIdx,
				msg->ItemInfo.Durability, msg->ItemInfo.QuickPosition ) )
			{
				ItemMsg.Protocol = MP_EXCHANGE_ADDITEM_NACK;
				pPlayer1->SendMsg( &ItemMsg, sizeof( MSG_LINKITEM ) );

				return;
			}

			ItemMsg.Protocol = MP_EXCHANGE_ADDITEM_ACK;
			pPlayer1->SendMsg( &ItemMsg, sizeof( MSG_LINKITEM ) );
			
			//ItemMsg.Protocol = MP_EXCHANGE_ADDITEM;
			//pPlayer2->SendMsg( &ItemMsg, sizeof( MSG_LINKITEM ) );
//促弗荤恩俊霸 焊尘锭绰 可记沥焊档 窃膊 焊郴具茄促.
			MSG_LINKITEM_ADD ItemOptionMsg;
			ItemOptionMsg.Category		= MP_EXCHANGE;
			ItemOptionMsg.Protocol		= MP_EXCHANGE_ADDITEM;
			ItemOptionMsg.dwObjectID	= msg->dwObjectID;
			ItemOptionMsg.ItemInfo		= msg->ItemInfo;
			ItemOptionMsg.wAbsPosition	= msg->wAbsPosition;

			if( ITEMMGR->IsOptionItem( msg->ItemInfo.wIconIdx, msg->ItemInfo.Durability ) )
			{
				ItemOptionMsg.bOptionItem = 1;
				ItemOptionMsg.sOptionInfo = *pPlayer1->GetItemOption( msg->ItemInfo.Durability );
			}

			pPlayer2->SendMsg( &ItemOptionMsg, ItemOptionMsg.GetSize() );
		}
		break;

	case MP_EXCHANGE_DELITEM_SYN:
		{
			MSG_WORD* msg = (MSG_WORD*)pMsg;

			CPlayer* pPlayer1 = (CPlayer*)g_pUserTable->FindUser( msg->dwObjectID );
			if( pPlayer1 == NULL ) break;
			CPlayer* pPlayer2 = pPlayer1->GetExchangeContainer()->pOpPlayer;
			if( pPlayer2 == NULL ) break;

			CExchangeRoom* pRoom = pPlayer1->GetExchangeContainer()->pRoom;
			
			if( pRoom == NULL ) break;	//眠啊 : 坷幅皋技瘤 贸府, 努扼捞攫飘 背券 吝瘤

			MSG_WORD DelMsg = *msg;

			if( pRoom->IsLocked( pPlayer1->GetExchangeContainer()->nMyIndex ) )
			{
				DelMsg.Protocol = MP_EXCHANGE_DELITEM_NACK;
				pPlayer1->SendMsg( &DelMsg, sizeof( MSG_WORD ) );
				return;
			}

			if( !pRoom->DelItem( pPlayer1->GetExchangeContainer()->nMyIndex, msg->wData-1 ) )
			{
				DelMsg.Protocol = MP_EXCHANGE_DELITEM_NACK;
				pPlayer1->SendMsg( &DelMsg, sizeof( MSG_WORD ) );
				return;
			}

			DelMsg.Protocol = MP_EXCHANGE_DELITEM_ACK;
			pPlayer1->SendMsg( &DelMsg, sizeof( MSG_WORD ) );

			DelMsg.Protocol = MP_EXCHANGE_DELITEM;
			pPlayer2->SendMsg( &DelMsg, sizeof( MSG_WORD ) );
		}
		break;
		
	case MP_EXCHANGE_LOCK_SYN:
		{
			MSGBASE* msg = (MSGBASE*)pMsg;
			CPlayer* pPlayer1 = (CPlayer*)g_pUserTable->FindUser( msg->dwObjectID );
			if( pPlayer1 == NULL ) break;
			CPlayer* pPlayer2 = pPlayer1->GetExchangeContainer()->pOpPlayer;
			if( pPlayer2 == NULL ) break;
			//CHECK 敲饭捞绢 惑龋 葛滴 粮犁窍唱?

			CExchangeRoom* pRoom = pPlayer1->GetExchangeContainer()->pRoom;
			if( !pRoom ) return;		//error贸府秦具窍绰单..

			pRoom->Lock( pPlayer1->GetExchangeContainer()->nMyIndex, TRUE );

			MSGBASE LockMsg = *msg;
			LockMsg.Protocol = MP_EXCHANGE_LOCK_ACK;
			pPlayer1->SendMsg( &LockMsg, sizeof( MSGBASE ) );

			LockMsg.Protocol	= MP_EXCHANGE_LOCK;
			pPlayer2->SendMsg( &LockMsg, sizeof( MSGBASE ) );

			//葛滴 遏牢啊...甫 眉农秦辑 背券滚瓢 穿甫 荐 乐档废...?
		}
		break;

	case MP_EXCHANGE_INPUTMONEY_SYN:
		{
			MSG_DWORD* msg = (MSG_DWORD*)pMsg;
			CPlayer* pPlayer1 = (CPlayer*)g_pUserTable->FindUser( msg->dwObjectID );
			if( pPlayer1 == NULL ) break;
			CPlayer* pPlayer2 = pPlayer1->GetExchangeContainer()->pOpPlayer;
			if( pPlayer2 == NULL ) break;

			CExchangeRoom* pRoom = pPlayer1->GetExchangeContainer()->pRoom;
			if( pRoom == NULL ) break;	//error贸府秦具窍绰单..
			
			//KES 八荤 眠啊
			if( pRoom->IsLocked( pPlayer1->GetExchangeContainer()->nMyIndex ) )
			{
				MSGBASE NackMsg;
				NackMsg.Category = MP_EXCHANGE;
				NackMsg.Protocol = MP_EXCHANGE_INPUTMONEY_NACK;
				NackMsg.dwObjectID = pPlayer1->GetID();
				
				pPlayer1->SendMsg( &NackMsg, sizeof(MSGBASE) );
				return;
			}
			
			DWORD dwMoney = pRoom->InputMoney( pPlayer1->GetExchangeContainer()->nMyIndex, msg->dwData );

			MSG_DWORD MoneyMsg = *msg;
			MoneyMsg.dwData = dwMoney;	//角力 技泼等 捣栏肺

			MoneyMsg.Protocol = MP_EXCHANGE_INPUTMONEY_ACK;
			pPlayer1->SendMsg( &MoneyMsg, sizeof( MSG_DWORD ) );

			MoneyMsg.Protocol = MP_EXCHANGE_INPUTMONEY;
			pPlayer2->SendMsg( &MoneyMsg, sizeof( MSG_DWORD ) );
		}
		break;

	case MP_EXCHANGE_UNLOCK_SYN:
		{
			MSGBASE* msg = (MSGBASE*)pMsg;
			CPlayer* pPlayer1 = (CPlayer*)g_pUserTable->FindUser( msg->dwObjectID );
			if( pPlayer1 == NULL ) break;
			CPlayer* pPlayer2 = pPlayer1->GetExchangeContainer()->pOpPlayer;
			if( pPlayer2 == NULL ) break;

			CExchangeRoom* pRoom = pPlayer1->GetExchangeContainer()->pRoom;
			if( pRoom == NULL ) break;		//error贸府秦具窍绰单..

			pRoom->Lock( pPlayer1->GetExchangeContainer()->nMyIndex, FALSE );			

			MSGBASE LockMsg = *msg;			
			LockMsg.Protocol = MP_EXCHANGE_UNLOCK_ACK;
			pPlayer1->SendMsg( &LockMsg, sizeof( MSGBASE ) );

			LockMsg.Protocol	= MP_EXCHANGE_UNLOCK;
			pPlayer2->SendMsg( &LockMsg, sizeof( MSGBASE ) );

			//背券 滚瓢..?
		}
		break;

	case MP_EXCHANGE_CANCEL_SYN:
		{
			MSGBASE* msg = (MSGBASE*)pMsg;

			CPlayer* pPlayer1 = (CPlayer*)g_pUserTable->FindUser( msg->dwObjectID );
			if( pPlayer1 == NULL ) break;
			CPlayer* pPlayer2 = pPlayer1->GetExchangeContainer()->pOpPlayer;
			if( pPlayer2 == NULL ) break;
			
			CExchangeRoom* pRoom = pPlayer1->GetExchangeContainer()->pRoom;
			if( pRoom == NULL ) break;	//背券捞 捞固 登菌促.
			
			DestroyExchangeRoom( pRoom );

			MSGBASE CancelMsg = *msg;
			CancelMsg.Protocol = MP_EXCHANGE_CANCEL_ACK;
			pPlayer1->SendMsg( &CancelMsg, sizeof( MSGBASE ) );

			MSG_BYTE ErrorMsg;
			ErrorMsg.Category	= MP_EXCHANGE;
			ErrorMsg.Protocol	= MP_EXCHANGE_CANCEL;
			ErrorMsg.bData		= eEE_USERCANCEL;
			pPlayer2->SendMsg( &ErrorMsg, sizeof( MSG_BYTE ) );

			if( pPlayer1->GetState() == eObjectState_Exchange )
				OBJECTSTATEMGR_OBJ->EndObjectState(pPlayer1, eObjectState_Exchange);
			if( pPlayer2->GetState() == eObjectState_Exchange )
				OBJECTSTATEMGR_OBJ->EndObjectState(pPlayer2, eObjectState_Exchange);
		}
		break;
	
	case MP_EXCHANGE_EXCHANGE_SYN:
		{
			MSGBASE* msg = (MSGBASE*)pMsg;

			CPlayer* pPlayer1 = (CPlayer*)g_pUserTable->FindUser( msg->dwObjectID );
			if( pPlayer1 == NULL ) break;
			CPlayer* pPlayer2 = pPlayer1->GetExchangeContainer()->pOpPlayer;
			if( pPlayer2 == NULL ) break;

			CExchangeRoom* pRoom = pPlayer1->GetExchangeContainer()->pRoom;

			if( pRoom == NULL ) break;	//俊矾贸府 confirm
			if( pRoom->IsLocked( pPlayer1->GetExchangeContainer()->nMyIndex ) == FALSE )
			{
				//背券滚瓢 穿福绊 惑措啊 遏阑 钱绢 唱狼 遏捞 钱啡阑锭 咯扁肺 甸绢棵 荐 乐促.
				MSGBASE ExchangeNackMsg;
				ExchangeNackMsg.Category = MP_EXCHANGE;
				ExchangeNackMsg.Protocol = MP_EXCHANGE_EXCHANGE_NACK;
				pPlayer1->SendMsg( &ExchangeNackMsg, sizeof( MSGBASE ) );
//				pPlayer2->SendMsg( &ExchangeNackMsg, sizeof( MSGBASE ) );
//				DestroyExchangeRoom( pRoom );
//				if( pPlayer1->GetState() == eObjectState_Exchange )
//					OBJECTSTATEMGR_OBJ->StartObjectState(pPlayer1, eObjectState_None, 0);
//					pPlayer1->SetState( eObjectState_None );
//				if( pPlayer2->GetState() == eObjectState_Exchange )
//					OBJECTSTATEMGR_OBJ->StartObjectState(pPlayer2, eObjectState_None, 0);
//					pPlayer2->SetState( eObjectState_None );


				break;
			}

			pRoom->SetExchange( pPlayer1->GetExchangeContainer()->nMyIndex );

			if( pRoom->IsAllExchange() )				//背券!
			{
				int rt;
				if( ( rt = pRoom->DoExchange() ) == eEE_OK )
				{
					MSGBASE ExchangeMsg;
					ExchangeMsg.Category	= MP_EXCHANGE;
					ExchangeMsg.Protocol	= MP_EXCHANGE_EXCHANGE;
					pPlayer1->SendMsg( &ExchangeMsg, sizeof( MSGBASE ) );
					pPlayer2->SendMsg( &ExchangeMsg, sizeof( MSGBASE ) );
				}
				else
				{
					//背券角菩 皋技瘤.
					MSG_BYTE ErrorMsg;
					ErrorMsg.Category	= MP_EXCHANGE;
					ErrorMsg.Protocol	= MP_EXCHANGE_CANCEL;
					ErrorMsg.bData		= rt;
					pPlayer1->SendMsg( &ErrorMsg, sizeof( MSG_BYTE ) );
					pPlayer2->SendMsg( &ErrorMsg, sizeof( MSG_BYTE ) );
				}

				DestroyExchangeRoom( pRoom );

//				if( pPlayer1->GetState() == eObjectState_Exchange )
					OBJECTSTATEMGR_OBJ->EndObjectState( pPlayer1, eObjectState_Exchange );
//				if( pPlayer2->GetState() == eObjectState_Exchange )
					OBJECTSTATEMGR_OBJ->EndObjectState( pPlayer2, eObjectState_Exchange );
			}
		}
		break;
	}
}

CExchangeRoom* CExchangeManager::GetRoomInfo( DWORD dwPlayer1ID, CPlayer** ppPlayer1, CPlayer** ppPlayer2 )
{
	*ppPlayer1 = (CPlayer*)g_pUserTable->FindUser( dwPlayer1ID );
	if( *ppPlayer1 == NULL ) return NULL;

	*ppPlayer2 = (*ppPlayer1)->GetExchangeContainer()->pOpPlayer;

	return (*ppPlayer1)->GetExchangeContainer()->pRoom;
}

//滴 敲饭捞绢 备窍扁 窃荐

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -