📄 exchangemanager.cpp
字号:
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 + -