📄 streetstallmanager.cpp
字号:
pStall->EmptyCell( &ItemBase );
DelSyn.Category = MP_STREETSTALL;
DelSyn.Protocol = MP_STREETSTALL_DELETEITEM;
DelSyn.dwObjectID = pBuyInfo->dwObjectID;
DelSyn.ItemInfo = ItemBase;
DelSyn.wAbsPosition = pos;
pStall->SendMsgGuestAll( &DelSyn, sizeof(DelSyn) );
//////////////////////////////////////////////////////
// ÁÖÀο¡°Ô¼ ¾ÆÀÌÅÛÀ» »©°í µ·À» ³Ö¾î ÁØ´Ù./////////////////
sellMsg.Category = MP_STREETSTALL;
sellMsg.Protocol = MP_STREETSTALL_SELLITEM;
sellMsg.dwObjectID = pBuyInfo->StallOwnerID;
sellMsg.ItemInfo = ItemBase;
sellMsg.count = 0;
sellMsg.dwData = pBuyInfo->dwObjectID;
pOwner->SendMsg( &sellMsg, sizeof(sellMsg) );
/////////////////////////////////////////////////////////////
ItemBase.Position = absPosOut;
// ¼Õ´Ô¿¡°Ô ¾ÆÀÌÅÛÀ» ÷°¡ÇÏ°í µ·À» »«´Ù.////////////////////
buyMsg.Category = MP_STREETSTALL;
buyMsg.Protocol = MP_STREETSTALL_BUYITEM_ACK;
buyMsg.dwObjectID = pBuyInfo->StallOwnerID;
buyMsg.ItemInfo = ItemBase;
buyMsg.count = 0;
pGuest->SendMsg( &buyMsg, sizeof(buyMsg) );
}
else
{
// °ãÄ¡±â ¾ÆÀÌÅÛÀÇ °¹¼ö¸¦ ÁÙÀδÙ. (»óÁ¡)
DURTYPE LeftDurability = ItemBase.Durability - wBuyNum;
pStall->UpdateCell( pos, LeftDurability);
updateMsg.Category = MP_STREETSTALL;
updateMsg.Protocol = MP_STREETSTALL_UPDATEITEM;
updateMsg.dwObjectID = pBuyInfo->StallOwnerID;
updateMsg.dwData = pos;
updateMsg.ItemInfo = ItemBase;
updateMsg.count = LeftDurability;
pOwner->SendMsg( &updateMsg, sizeof(updateMsg) );
pStall->SendMsgGuestAll( &updateMsg, sizeof(updateMsg) );
//////////////////////////////////////////////////////
// ÁÖÀο¡°Ô¼ ¾ÆÀÌÅÛÀ» »©°í µ·À» ³Ö¾î ÁØ´Ù./////////////////
sellMsg.Category = MP_STREETSTALL;
sellMsg.Protocol = MP_STREETSTALL_SELLITEM;
sellMsg.dwObjectID = pBuyInfo->StallOwnerID;
sellMsg.ItemInfo = ItemBase;
sellMsg.count = LeftDurability;
sellMsg.dwData = pBuyInfo->dwObjectID;
pOwner->SendMsg( &sellMsg, sizeof(sellMsg) );
pOwnerInventory->UpdateItemAbs(pOwner, RealPos, ItemBase.dwDBIdx, ItemBase.wIconIdx, 0, 0, LeftDurability, UB_DURA, SS_LOCKOMIT );
pOwnerInventory->SetLock(RealPos, TRUE);
ItemUpdateToDB( pOwner->GetID(), ItemBase.dwDBIdx ,ItemBase.wIconIdx, LeftDurability, absPosOut, 0 );
LogItemMoney(pOwner->GetID(), pOwner->GetObjectName(), pGuest->GetID(), pGuest->GetObjectName(),
eLog_StreetStallSellDivide, pOwner->GetMoney(), pGuest->GetMoney(), money,
ItemBase.wIconIdx, ItemBase.dwDBIdx, ItemBase.Position, absPosOut, LeftDurability, pOwner->GetPlayerExpPoint());
/////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////
// ¼Õ´Ô¿¡°Ô ¾ÆÀÌÅÛÀ» ÷°¡ÇÏ°í µ·À» »«´Ù.////////////////////
ITEMBASE NewItemBase; /* ÀÏ´Ü ¾²·¹±â°ªÀ¸·Î ¼ÂÆÃ */
NewItemBase.dwDBIdx = 9;
NewItemBase.wIconIdx = 9;
NewItemBase.Position = absPosOut;
NewItemBase.QuickPosition = 9;
NewItemBase.Durability = 9;
pGuestInventory->InsertItemAbs(pGuest, absPosOut, &NewItemBase, SS_PREINSERT);
SSItemInsert( pGuest->GetID(), ItemBase.wIconIdx, wBuyNum, absPosOut, pOwner->GetID());
/////////////////////////////////////////////////////////////
}
pOwner->SetMoney( money, MONEY_ADDITION, 0, eItemTable_Inventory, eMoneyLog_GetStreetStall, pGuest->GetID());
pGuest->SetMoney( money, MONEY_SUBTRACTION, 0, eItemTable_Inventory, eMoneyLog_LoseStreetStall, pOwner->GetID());
return TRUE;
ITEMBUY_FAILED:
msgNack.Category = MP_STREETSTALL;
msgNack.Protocol = MP_STREETSTALL_BUYITEM_NACK;
msgNack.dwObjectID = pBuyInfo->dwObjectID;
msgNack.wData = rt;
pGuest->SendMsg( &msgNack, sizeof(MSG_WORD) );
return FALSE;
}
void cStreetStallManager::CreateDupItem( DWORD dwObjectId, ITEMBASE* pItemBase, DWORD FromChrID )
{
MSG_ITEMEX buyMsg;
buyMsg.Category = MP_STREETSTALL;
buyMsg.Protocol = MP_STREETSTALL_BUYITEM_ACK;
buyMsg.dwObjectID = dwObjectId;
buyMsg.ItemInfo = *pItemBase;
buyMsg.count = 0;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser( dwObjectId );
if( pPlayer == NULL )
{
ASSERT(0);
return;
}
CItemSlot* pInventory = pPlayer->GetSlot(eItemTable_Inventory);
pInventory->InsertItemAbs( pPlayer, pItemBase->Position, pItemBase, SS_LOCKOMIT);
char FromName[MAX_NAME_LENGTH+1] = {0,};
MONEYTYPE FromMoney = 0;
EXPTYPE FromExpPoint = 0;
CPlayer* pFromPlayer = (CPlayer*)g_pUserTable->FindUser( FromChrID );
if(pFromPlayer)
{
SafeStrCpy(FromName, pFromPlayer->GetObjectName(), MAX_NAME_LENGTH+1);
FromMoney = pFromPlayer->GetMoney();
FromExpPoint = pFromPlayer->GetPlayerExpPoint();
}
LogItemMoney(FromChrID, FromName, dwObjectId, pPlayer->GetObjectName(),
eLog_StreetStallBuyDivide, FromMoney, pPlayer->GetMoney(), 0,
pItemBase->wIconIdx, pItemBase->dwDBIdx, 0, pItemBase->Position, pItemBase->Durability,
FromExpPoint);
pPlayer->SendMsg( &buyMsg, sizeof(buyMsg) );
}
void cStreetStallManager::NetworkMsgParse( BYTE Protocol, void* pMsg )
{
switch( Protocol )
{
case MP_STREETSTALL_OPEN_SYN:
{
MSG_STREETSTALL_TITLE* msg = (MSG_STREETSTALL_TITLE*)pMsg;
// 1. »óÁ¡ µî·Ï
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser( msg->dwObjectID );
if( !pPlayer )
{
ASSERT(0);
break;
}
/* State¿¡ ´ëÇÑ Check¸¦ ÇÑ´Ù. */
//KES VIMU 031103 Ãß°¡
if( pPlayer->IsVimuing() || pPlayer->GetExchangeContainer()->pRoom != NULL )
{
MSGBASE CloseSyn;
CloseSyn.Category = MP_STREETSTALL;
CloseSyn.Protocol = MP_STREETSTALL_OPEN_NACK;
pPlayer->SendMsg(&CloseSyn, sizeof(CloseSyn));
return;
}
//
// ±âÁ¸ »óÁ¡ÀÌ Á¸ÀçÇÏ¸é ¾ø¾Ø´Ù.
cStreetStall* pStall = FindStreetStall( pPlayer );
if( pStall )
{
// ASSERT(0);
DeleteStreetStall( pPlayer );
MSGBASE CloseSyn;
CloseSyn.Category = MP_STREETSTALL;
CloseSyn.Protocol = MP_STREETSTALL_OPEN_NACK;
pPlayer->SendMsg(&CloseSyn, sizeof(CloseSyn));
return;
}
pStall = CreateStreetStall( pPlayer, msg->Title );
// 2. ¼º°ø Message¸¦ ³¯¸°´Ù.
MSG_STREETSTALL_TITLE OpenSyn;
OpenSyn = *msg;
OpenSyn.Protocol = MP_STREETSTALL_OPEN_ACK;
pPlayer->SendMsg( &OpenSyn, sizeof(MSG_STREETSTALL_TITLE) );
// 3. Á¢¼Ó Àοø¿¡°Ô »óŸ¦ º¯°æÇϵµ·Ï Áö½ÃÇÑ´Ù.
StreetStallMode( pPlayer, msg->Title, TRUE );
return;
}
break;
case MP_STREETSTALL_CLOSE_SYN:
{
MSGBASE* msg = (MSGBASE*)pMsg;
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser( msg->dwObjectID );
if( pPlayer == NULL ) break;
cStreetStall* pStall = FindStreetStall( pPlayer );
if( pStall == NULL ) break;
// 1. Á¢¼Ó Àοø¿¡°Ô »óŸ¦ º¯°æÇϵµ·Ï Áö½ÃÇÑ´Ù.
StreetStallMode( pPlayer, NULL, FALSE ); // Ani º¯°æ
// 2. ¼Õ´Ôµé¿¡°Ô ¾Ë¸°´Ù. (¼Õ´ÔµéÀÇ »óŸ¦ º¯°æÇÏ¿©¾ß ÇÑ´Ù.)
MSGBASE CloseSyn;
CloseSyn.Category = MP_STREETSTALL;
CloseSyn.Protocol = MP_STREETSTALL_CLOSE;
CloseSyn.dwObjectID = msg->dwObjectID;
pStall->SendMsgGuestAll( &CloseSyn, sizeof(MSGBASE), TRUE );
// 3. »óÁ¡À» Á¦°Å ÇÑ´Ù.
DeleteStreetStall( pPlayer );
// 4. ¼º°ø Message¸¦ ³¯¸°´Ù.
CloseSyn.Protocol = MP_STREETSTALL_CLOSE_ACK;
//À§ÀÇ StreetStallMode¿¡¼ ÀÌ¹Ì È£ÃâÇÑ´Ù.
pPlayer->SendMsg( &CloseSyn, sizeof(MSGBASE) );
}
break;
case MP_STREETSTALL_LOCKITEM_SYN:
{
MSG_STREETSTALL_ITEMSTATUS* msg = (MSG_STREETSTALL_ITEMSTATUS*)pMsg;
CPlayer* pPlayer = NULL;
cStreetStall* pStall = NULL;
sCELLINFO* pInfo = NULL;
MSGBASE Ftemp;
MSG_STREETSTALL_ITEMSTATUS Stemp;
// 1. »óÁ¡À» ã¾Æ¼ ¾ÆÀÌÅÛÀ» Lock ÇÑ´Ù.
pPlayer = (CPlayer*)g_pUserTable->FindUser( msg->dwObjectID );
if( !pPlayer )
{
ASSERT(0);
return;
}
if( msg->wAbsPosition >= MAX_STREETSTALL_CELLNUM ) goto ITEMLOCKFAIL;
pStall = FindStreetStall( pPlayer );
if( pStall == NULL ) goto ITEMLOCKFAIL;
pInfo = pStall->GetCellInfo( msg->wAbsPosition );
if( pInfo->sItemBase.dwDBIdx != msg->ItemInfo.dwDBIdx ) goto ITEMLOCKFAIL;
pStall->SetMoney( msg->wAbsPosition, msg->dwMoney );
pStall->ChangeCellState( msg->wAbsPosition, TRUE );
Stemp = *msg;
Stemp.Protocol = MP_STREETSTALL_LOCKITEM_ACK;
pPlayer->SendMsg( &Stemp, sizeof(MSG_STREETSTALL_ITEMSTATUS) );
// ¼Õ´ÔÀÇ »óŸ¦ º¯°æÇÑ´Ù.
Stemp.Protocol = MP_STREETSTALL_LOCKITEM;
pStall->SendMsgGuestAll( &Stemp, sizeof(MSG_STREETSTALL_ITEMSTATUS) );
return;
ITEMLOCKFAIL:
Ftemp.Category = MP_STREETSTALL;
Ftemp.Protocol = MP_STREETSTALL_LOCKITEM_NACK;
Ftemp.dwObjectID = msg->dwObjectID;
pPlayer->SendMsg( &Ftemp, sizeof(MSGBASE) );
}
break;
case MP_STREETSTALL_UNLOCKITEM_SYN:
{
MSG_STREETSTALL_ITEMSTATUS* msg = (MSG_STREETSTALL_ITEMSTATUS*)pMsg;
CPlayer* pPlayer = NULL;
cStreetStall* pStall = NULL;
sCELLINFO* pInfo = NULL;
MSGBASE Ftemp;
MSG_STREETSTALL_ITEMSTATUS Stemp;
// 1. »óÁ¡À» ã¾Æ¼ ¾ÆÀÌÅÛÀ» UnLock ÇÑ´Ù.
pPlayer = (CPlayer*)g_pUserTable->FindUser( msg->dwObjectID );
if( !pPlayer )
{
ASSERT(0);
return;
}
if( msg->wAbsPosition >= MAX_STREETSTALL_CELLNUM ) goto ITEMUNLOCKFAIL;
pStall = FindStreetStall( pPlayer );
if( pStall == NULL ) goto ITEMUNLOCKFAIL;
pInfo = pStall->GetCellInfo( msg->wAbsPosition );
if( pInfo->sItemBase.dwDBIdx != msg->ItemInfo.dwDBIdx) goto ITEMUNLOCKFAIL;
pStall->SetMoney( msg->wAbsPosition, 0 );
pStall->ChangeCellState( msg->wAbsPosition, FALSE );
Stemp = *msg;
Stemp.Protocol = MP_STREETSTALL_UNLOCKITEM_ACK;
pPlayer->SendMsg( &Stemp, sizeof(MSG_STREETSTALL_ITEMSTATUS) );
// ¼Õ´ÔÀÇ »óŸ¦ º¯°æÇÑ´Ù.
Stemp.Protocol = MP_STREETSTALL_UNLOCKITEM;
pStall->SendMsgGuestAll( &Stemp, sizeof(MSG_STREETSTALL_ITEMSTATUS) );
return;
ITEMUNLOCKFAIL:
Ftemp.Category = MP_STREETSTALL;
Ftemp.Protocol = MP_STREETSTALL_UNLOCKITEM_NACK;
Ftemp.dwObjectID = msg->dwObjectID;
pPlayer->SendMsg( &Ftemp, sizeof(MSGBASE) );
}
break;
case MP_STREETSTALL_FAKEREGISTITEM_SYN:
{
MSG_REGISTITEMEX* msg = (MSG_REGISTITEMEX*)pMsg;
cStreetStall* pStall = NULL;
CPlayer* pPlayer = NULL;
CInventorySlot* pSlot = NULL;
ITEMBASE pBase;
sCELLINFO* pInfo = NULL;
DWORD erroflag = 0;
MSG_DWORD2 RegistFail;
MSG_LINKITEMEX RegistSyn;
SEND_LINKITEM_TOTALINFO RegistGuest;
// 1. »óÁ¡À» ã¾Æ¼ ¾ÆÀÌÅÛÀ» ÷°¡ÇÑ´Ù.
pPlayer = (CPlayer*)g_pUserTable->FindUser( msg->dwObjectID );
if( !pPlayer )
{
ASSERT(0);
return;
}
if( pPlayer->GetGuestStall() ) goto ITEMREGISTFAILEX; // Guest·Î Âü¿©ÇÑ °æ¿ì¿¡ ´ëÇÑ ¿¡·¯ ó¸®
pStall = FindStreetStall( pPlayer );
if( pStall == NULL ) goto ITEMREGISTFAILEX;
if( pStall->IsFull() ) goto ITEMREGISTFAILEX; // ³ëÁ¡ÀÌ ²ËÂù°æ¿ì..
pSlot = (CInventorySlot*)pPlayer->GetSlot( eItemTable_Inventory );
if( !pSlot ) goto ITEMREGISTFAILEX;
if( !pSlot || pSlot->IsLock((POSTYPE)msg->ItemInfo.Position) ) goto ITEMREGISTFAILEX;
if( !CHKRT->ItemOf( pPlayer, msg->ItemInfo.Position, msg->ItemInfo.wIconIdx,
msg->ItemInfo.Durability, msg->ItemInfo.QuickPosition ) )
goto ITEMREGISTFAILEX;
//5°³ÀÌ»ó °ãÄ£ ¹ö±× ¾ÆÀÌÅÛÀº ¿Ã¸± ¼ö ¾ø´Ù
if( ITEMMGR->IsDupItem(msg->ItemInfo.wIconIdx) && msg->ItemInfo.Durability > 5 )
{
goto ITEMREGISTFAILEX;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -