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

📄 streetstallmanager.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 3 页
字号:

			if( GetItemKind( msg->ItemInfo.wIconIdx ) == eYOUNGYAK_ITEM )
			{
				if( pSlot->CheckQPosForItemIdx( msg->ItemInfo.wIconIdx ) == FALSE )
					goto ITEMREGISTFAILEX;
			}
			else
			{
				if( pSlot->GetItemInfoAbs( msg->ItemInfo.Position )->QuickPosition != 0 )
					goto ITEMREGISTFAILEX;
			}
			
			pBase =  *pSlot->GetItemInfoAbs((POSTYPE)msg->ItemInfo.Position);
			if( !pStall->CheckItemDBIdx(pBase.dwDBIdx) ) 
			{
				erroflag = 1;
				goto ITEMREGISTFAILEX; // ÀÌ¹Ì µî·ÏµÇ¾î ÀÖ´Â ¾ÆÀÌÅÛÀÎÁö...
			}
			
//			if( !pStall->FillCell( &pBase, msg->dwMoney, TRUE ) ) goto ITEMREGISTFAILEX;
			if( !pStall->FillCell( &pBase, msg->dwMoney, FALSE ) ) goto ITEMREGISTFAILEX;
			
			RegistSyn.Category = MP_STREETSTALL;
			RegistSyn.Protocol = MP_STREETSTALL_FAKEREGISTITEM_ACK;
			RegistSyn.dwObjectID = msg->dwObjectID;
			RegistSyn.ItemInfo = pBase;
			RegistSyn.dwMoney = msg->dwMoney;
			
			pPlayer->SendMsg( &RegistSyn, sizeof(MSG_LINKITEMEX) );
			
			// ¼Õ´Ô¿¡°Ô »óǰÀ» µî·ÏÇØÁØ´Ù.

			RegistGuest.Category = MP_STREETSTALL;
			RegistGuest.Protocol = MP_STREETSTALL_FAKEREGISTITEM;
			RegistGuest.dwObjectID = msg->dwObjectID;
			RegistGuest.ItemInfo = pBase;
			RegistGuest.dwMoney = msg->dwMoney;
			RegistGuest.count = 0;

			if( ITEMMGR->IsOptionItem(pBase.wIconIdx, pBase.Durability) )
			{
				RegistGuest.count = 1;
				RegistGuest.sOptionInfo = *(pPlayer->GetItemOption(pBase.Durability));
			}

			pStall->SendMsgGuestAll( &RegistGuest, RegistGuest.GetSize() );
			
			return;
			
ITEMREGISTFAILEX:
			RegistFail.Category = MP_STREETSTALL;
			RegistFail.Protocol = MP_STREETSTALL_FAKEREGISTITEM_NACK;
			RegistFail.dwObjectID = msg->dwObjectID;
			RegistFail.dwData1 = msg->ItemInfo.Position;
			RegistFail.dwData2 = erroflag;
			
			pPlayer->SendMsg( &RegistFail, sizeof(MSG_DWORD2) );
			
			return;
		}
		break;
	case MP_STREETSTALL_DELETEITEM_SYN:
		{
			MSG_LINKITEM* msg = (MSG_LINKITEM*)pMsg;

			CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser( msg->dwObjectID );
			if( !pPlayer ) break;

			cStreetStall* pStall = FindStreetStall( pPlayer );
			if( pStall == NULL ) break;

			pStall->EmptyCell( &msg->ItemInfo );

			// ¸Þ¼¼Áö º¸³½´Ù.
			MSG_LINKITEM DelSyn;
			DelSyn.Category = MP_STREETSTALL;
			DelSyn.Protocol = MP_STREETSTALL_DELETEITEM_ACK;
			DelSyn.dwObjectID = msg->dwObjectID;
			DelSyn.ItemInfo = msg->ItemInfo;
			DelSyn.wAbsPosition = msg->wAbsPosition;
			pPlayer->SendMsg( &DelSyn, sizeof(MSG_LINKITEM) );

			// ¼Õ´Ô¿¡°Ô¼­ »óǰÀ» »èÁ¦ ÇÑ´Ù.
			DelSyn.Protocol = MP_STREETSTALL_DELETEITEM;
			pStall->SendMsgGuestAll( &DelSyn, sizeof(MSG_LINKITEM) );
		}
		break;
	case MP_STREETSTALL_BUYITEM_SYN:
		{
			STREETSTALL_BUYINFO* msg = (STREETSTALL_BUYINFO*)pMsg;
			CPlayer* pOwner = (CPlayer *)g_pUserTable->FindUser(msg->StallOwnerID);
			if(pOwner == NULL) return;

			CPlayer* pGuest = (CPlayer *)g_pUserTable->FindUser(msg->dwObjectID);
			if(pGuest == NULL) return;

			cStreetStall* pStall = FindStreetStall( pOwner );
			if( pStall == NULL ) return;
			if( pGuest->GetGuestStall() == NULL ) 
			{
				char buf[128];
				sprintf(buf, "³ëÁ¡ÀÌ ¾ø´Âµ¥ ¾ÆÀÌÅÛÀ» »ç·Á°í ÇÑ´Ù. %d", pGuest->GetID());
				ASSERTMSG(0, buf);
				
				SendNackMsg(pGuest, MP_STREETSTALL_BUYITEM_NACK);
				return;
			}

			if(pGuest->GetGuestStall()->GetOwner()->GetID() != msg->StallOwnerID)
			{
				char buf[128];
				sprintf(buf, "µî·ÏµÈ ³ëÁ¡°ú´Â ´Ù¸¥ ³ëÁ¡¿¡¼­¾ÆÀÌÅÛÀ» »ç·Á°í ÇÑ´Ù: %d", pGuest->GetID());
				ASSERTMSG(0, buf);
				
				SendNackMsg(pGuest, MP_STREETSTALL_BUYITEM_NACK);
				return;
			}
			
			if( pStall->CheckItemDBIdx(msg->ItemInfo.dwDBIdx) ) // µî·Ï¾ÆÀÌÅÛÀÎÁö üũÇÑ´Ù.
			{
				MSG_WORD msgNack;
				msgNack.Category	= MP_STREETSTALL;
				msgNack.Protocol	= MP_STREETSTALL_BUYITEM_NACK;
				msgNack.dwObjectID	= msg->dwObjectID;
				msgNack.wData		= NOT_EXIST;
				pGuest->SendMsg( &msgNack, sizeof(msgNack) );

				return;
			}

			if( ITEMMGR->IsDupItem( msg->ItemInfo.wIconIdx ) )
			{
				BuyDupItem( pOwner, pStall, pGuest, msg );
			}
			else
			{
				BuyItem( pOwner, pStall, pGuest, msg );
			}
		}
		break;
	case MP_STREETSTALL_GUESTIN_SYN:
		{
			MSG_DWORD* msg = (MSG_DWORD*)pMsg;
			BOOL bVal = TRUE;
			CPlayer* pOwner = (CPlayer*)g_pUserTable->FindUser( msg->dwData );

			CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser( msg->dwObjectID );
			if( !pPlayer ) break;
			
			/* State¿¡ ´ëÇÑ Check¸¦ ÇÑ´Ù. */
			//KES VIMU 031103 Ãß°¡
			if( pPlayer->IsVimuing() ) bVal = FALSE;	//ºñ¹«Áß
			if( pPlayer->GetExchangeContainer()->pRoom != NULL ) bVal = FALSE;	//±³È¯Áß
			if( (pPlayer->GetState() == eObjectState_StreetStall_Guest) || (pPlayer->GetState() == eObjectState_StreetStall_Owner))
			{
				char buf[128];
				sprintf(buf, "¼­¹ö¿¡¼­´Â ÀÌ¹Ì ³ëÁ¡ »óÅÂ: %d", pPlayer->GetID());
				ASSERTMSG(0, buf);
				SendNackMsg(pPlayer, MP_STREETSTALL_GUESTIN_NACK);
				return;
			}
				
			cStreetStall* pStall = NULL;

			if( !pOwner )
			{
				bVal = FALSE;
			}
			else if( bVal )
			{
				pStall = FindStreetStall( pOwner );
				if( !pStall ) 
				{
					bVal = FALSE;
				}
				else
				{
					ASSERT( pPlayer->GetGuestStall() == NULL );	// nullÀ̾î¾ßÇÑ´Ù.

					if( pPlayer->GetGuestStall() )
					{
						pPlayer->GetGuestStall()->DeleteGuest( pPlayer );
					}
					

					pStall->AddGuest( pPlayer );
				}
			}

			if( bVal )
			{
				STREETSTALL_INFO sInfo;
				memset(&sInfo, 0, sizeof(STREETSTALL_INFO));
				sInfo.count = 0;
				pStall->GetStreetStallInfo( sInfo );
				sInfo.Category = MP_STREETSTALL;
				sInfo.Protocol = MP_STREETSTALL_GUESTIN_ACK;
				sInfo.dwObjectID = msg->dwObjectID;
				sInfo.StallOwnerID = msg->dwData;

				OBJECTSTATEMGR_OBJ->StartObjectState(pPlayer, eObjectState_StreetStall_Guest, 0);

				pPlayer->SendMsg( &sInfo, sInfo.GetSize() );
			}
			else
			{
				SendNackMsg(pPlayer, MP_STREETSTALL_GUESTIN_NACK);
			}
		}
		break;
	case MP_STREETSTALL_GUESTOUT_SYN:
		{
			MSG_DWORD* msg = (MSG_DWORD*)pMsg;
			CPlayer* pOwner = (CPlayer*)g_pUserTable->FindUser( msg->dwData );
			if( !pOwner ) break;

			CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser( msg->dwObjectID );
			if( !pPlayer ) break;
			cStreetStall * pPlayerStall = pPlayer->GetGuestStall();
			if(!pPlayerStall)
			{
				char buf[128];
				sprintf(buf, "Ç÷¹À̾ gueststallÀÌ ¾ø´Âµ¥ ³ª°¡±â ¸Þ½ÃÁö ¿È: %d", pPlayer->GetID());
				ASSERTMSG(0, buf);
				SendNackMsg(pPlayer, MP_STREETSTALL_GUESTOUT_NACK);
				if(pPlayer->GetState() == eObjectState_StreetStall_Guest)
				{				
					char buf[128];
					sprintf(buf, "Ç÷¹À̾ gueststallÀÌ ¾ø´Âµ¥ »óÅ´ ³ëÁ¡ »óÅÂ: %d", pPlayer->GetID());
					ASSERTMSG(0, buf);
				}
				return;
			}
			if(pPlayerStall->GetOwner()->GetID() != pOwner->GetID())
			{
				char buf[128];
				sprintf(buf, "¼­¹ö¿¡ ÀÖ´Â ³ëÁ¡°ú´Â ´Ù¸¥ ³ëÁ¡¿¡¼­ ³ª°£´Ù°í ¸Þ½ÃÁö ¿È: %d", pPlayer->GetID());
				ASSERTMSG(0, buf);
				return;
			}
			if( pPlayer->GetState() != eObjectState_StreetStall_Guest)
			{
				char buf[128];
				sprintf(buf, "¼­¹ö¿¡¼­ ¼Õ´Ô»óŰ¡ ¾Æ´Ñµ¥ ³ª°¡±â ¸Þ½ÃÁö ¿È: %d", pPlayer->GetID());
				ASSERTMSG(0, buf);
				SendNackMsg(pPlayer, MP_STREETSTALL_GUESTOUT_NACK);
				return;
			}

			OBJECTSTATEMGR_OBJ->EndObjectState(pPlayer, eObjectState_StreetStall_Guest);
			cStreetStall* pStall = FindStreetStall( pOwner );
			if( pStall )
				pStall->DeleteGuest( pPlayer );

			MSGBASE OutSyn;
			OutSyn.Category = MP_STREETSTALL;
			OutSyn.Protocol = MP_STREETSTALL_GUESTOUT_ACK;
			OutSyn.dwObjectID = msg->dwObjectID;

			pPlayer->SendMsg( &OutSyn, sizeof(MSGBASE) );
		}
		break;
	case MP_STREETSTALL_EDITTITLE_SYN:
		{
			MSG_STREETSTALL_TITLE* msg = (MSG_STREETSTALL_TITLE*)pMsg;

			// 1. »óÁ¡À» ã¾Æ¼­ ŸÀÌÆ²À» ¼öÁ¤ÇÑ´Ù.
			CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser( msg->dwObjectID );
			if( !pPlayer ) break;

			cStreetStall* pStall = FindStreetStall( pPlayer );

			if( pStall == NULL )
			{
				MSGBASE temp;
				temp.Category = MP_STREETSTALL;
				temp.dwObjectID = msg->dwObjectID;
				temp.Protocol = MP_STREETSTALL_EDITTITLE_NACK;

				pPlayer->SendMsg( &temp, sizeof(MSGBASE) );
			}
			else
			{
				pPlayer->SetStreetStallTitle( msg->Title );

				MSG_STREETSTALL_TITLE temp;
				temp = *msg;
				temp.Protocol = MP_STREETSTALL_EDITTITLE_ACK;
				pPlayer->SendMsg( &temp, sizeof(MSG_STREETSTALL_TITLE) );

				// ¼Õ´Ô¿¡°Ô ŸÀÌÆ²À» ¾Ë¸°´Ù.
				temp.Protocol = MP_STREETSTALL_EDITTITLE;
				PACKEDDATA_OBJ->QuickSendExceptObjectSelf(pPlayer,&temp,sizeof(temp));
			}
		}
		break;
	}
}

void cStreetStallManager::SendNackMsg(CPlayer* pPlayer, BYTE Protocol)
{
	MSGBASE nmsg;
	nmsg.Category = MP_STREETSTALL;
	nmsg.Protocol = Protocol;
	pPlayer->SendMsg(&nmsg, sizeof(nmsg));
}


BOOL cStreetStallManager::CanBuyItem(CPlayer* pOwner, CPlayer *pGuest, sCELLINFO* pItemInfo, WORD* EmptyCellPos, STREETSTALL_BUYINFO* pBuyInfo, ITEMBASE* pStallItem)
{
	//KES: ¾ÆÀÌÅÛÀÇ °¡°Ý º¯È­
	if( pItemInfo->dwMoney != pBuyInfo->dwBuyPrice )
	{
		AssertBuyErr(NOT_SAMEPRICE);
		return FALSE;
	}

	// ¾ÆÀÌÅÛÀÇ »óÅ üũ
	if( !pItemInfo || !pItemInfo->bFill || !pItemInfo->bLock || pStallItem->dwDBIdx != pBuyInfo->ItemInfo.dwDBIdx )
	{
		AssertBuyErr(NOT_EXIST);
		return FALSE;
	}

	// HAVE MONEY ?
	if( pGuest->GetMoney() < pItemInfo->dwMoney )
	{
		AssertBuyErr(NOT_MONEY);
		return FALSE;
	}

	CInventorySlot* pGuestInventory = (CInventorySlot*)pGuest->GetSlot( eItemTable_Inventory );
	// Àκ¥Å丮°ø°£ üũ
	if( pGuestInventory->GetEmptyCell(EmptyCellPos) == 0 ) 
	{
		AssertBuyErr(NOT_SPACE);
		return FALSE;
	}
	if( !pOwner->IsEnoughAdditionMoney(pItemInfo->dwMoney) )
	{
		AssertBuyErr(NOT_OWNERMONEY);
		
		MSG_WORD msg;
		msg.Category = MP_STREETSTALL;
		msg.Protocol = MP_STREETSTALL_SELLITEM_ERROR;
		msg.wData = pBuyInfo->StallPos;
		pOwner->SendMsg(&msg, sizeof(msg));

		return FALSE;
	}

	return TRUE;
}

void cStreetStallManager::AssertBuyErr(WORD Err)
{
	char buf[128];
	sprintf(buf, "³ëÁ¡ »ç±â ¹ö±×: %d", Err);
	ASSERTMSG(0, buf);
}

⌨️ 快捷键说明

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