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

📄 pyogukmanager.cpp

📁 墨香最新私服
💻 CPP
字号:
// PyoGukManager.cpp: implementation of the CPyoGukManager class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "PyoGukManager.h"
#include "MapDBMsgParser.h"
#include "Player.h"
#include "UserTable.h"
#include "Network.h"
#include "MHFile.h"
#include "ItemManager.h"


//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CPyoGukManager::CPyoGukManager()
{
}

CPyoGukManager::~CPyoGukManager()
{
}

void CPyoGukManager::NetworkMsgParse( BYTE Protocol, void* pMsg )
{
	switch( Protocol )
	{
	case MP_PYOGUK_BUY_SYN:
		{
			MSGBASE* pmsg = (MSGBASE*)pMsg;
			CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
			if(!pPlayer)
				return;
			
			BuyPyogukSyn(pPlayer);
		}
		break;
	case MP_PYOGUK_PUTIN_MONEY_SYN:
		{
			MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
			CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
			if(!pPlayer)
				return;
			PutInMoneyPyoguk(pPlayer, (DWORD)pmsg->dwData);
		}
		break;
	case MP_PYOGUK_PUTOUT_MONEY_SYN:
		{
			MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
			CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
			if(!pPlayer)
				return;
			
			PutOutMoneyPyoguk(pPlayer, (DWORD)pmsg->dwData);
		}
		break;
	}

}

void CPyoGukManager::LoadPyogukList()
{
	CMHFile file;
#ifdef _FILE_BIN_
	if(file.Init("./Resource/PyogukListInfo.bin","rb") == FALSE)
		return;
#else
	if(file.Init("./Resource/PyogukListInfo.txt","r") == FALSE)
		return;
#endif
	
	int count = 0;
	for(int n=0;n<MAX_PYOGUKLIST_NUM;++n)
	{
		m_PyogukListInfo[count].MaxCellNum = 30*(count+1);
		m_PyogukListInfo[count].MaxMoney = file.GetDword();
		m_PyogukListInfo[count].BuyPrice = file.GetDword();
		
		++count;
	}
	
	file.Release();

}

void CPyoGukManager::SendPyogukItemInfo(CPlayer* pPlayer)
{
	SEND_PYOGUK_ITEM_INFO PyogukItem;
	memset(&PyogukItem, 0, sizeof(SEND_PYOGUK_ITEM_INFO));
	PyogukItem.Category = MP_ITEM;
	PyogukItem.Protocol = MP_ITEM_PYOGUK_ITEM_INFO_ACK;
	PyogukItem.wOptionCount = 0;
	
	CItemSlot * pSlot = pPlayer->GetSlot(eItemTable_Pyoguk);
	PyogukItem.money = pSlot->GetPurse()->GetPurseCurMoney();
	
	DWORD dwStartPos = TP_PYOGUK_START;
	
	for(int i=0;i<SLOT_PYOGUK_NUM;++i)
	{
		if( pSlot->IsEmpty(dwStartPos+i) == FALSE )
		{
			PyogukItem.PyogukItem[i] = *pSlot->GetItemInfoAbs(dwStartPos+i);
			if(ITEMMGR->IsOptionItem(PyogukItem.PyogukItem[i].wIconIdx, PyogukItem.PyogukItem[i].Durability))
			{
				// Is not null???
				PyogukItem.PyogukItemOption[PyogukItem.wOptionCount] = *pPlayer->GetItemOption(PyogukItem.PyogukItem[i].Durability);
				++PyogukItem.wOptionCount;
			}
		}
	}

	pPlayer->SendMsg(&PyogukItem, PyogukItem.GetSize());
}

void CPyoGukManager::BuyPyogukSyn(CPlayer* pPlayer)
{
	WORD pyoguknum = pPlayer->GetPyogukNum();

	PYOGUKLISTINFO* pBuyPyogukInfo = GetPyogukInfo(pyoguknum+1);

	if( pyoguknum >= TAB_PYOGUK_NUM || pPlayer->GetMoney() < pBuyPyogukInfo->BuyPrice )
	{
		MSGBASE msg;
		msg.Category = MP_PYOGUK;
		msg.Protocol = MP_PYOGUK_BUY_NACK;
		pPlayer->SendMsg(&msg, sizeof(msg));
	}
	else
	{
		if(pPlayer->GetPyogukNum() == 0) //贸澜 或栏搁 弊成 檬扁拳
		{
			PYOGUK_ITEM PyogukItem;
			memset(&PyogukItem, 0, sizeof(PYOGUK_ITEM));
			
			pPlayer->InitPyogukItemInfo(&PyogukItem);
		}
		pPlayer->SetMoney( pBuyPyogukInfo->BuyPrice, MONEY_SUBTRACTION, 0, eItemTable_Inventory, eMoneyLog_LosePyogukBuy, 0);

		pPlayer->SetPyogukNum( pyoguknum+1 );
		pPlayer->SetMaxPurseMoney(eItemTable_Pyoguk, GetPyogukInfo(pPlayer->GetPyogukNum())->MaxMoney);
		PyogukBuyPyoguk(pPlayer->GetID()); //db update		
		
		MSG_BYTE msg;
		msg.Category = MP_PYOGUK;
		msg.Protocol = MP_PYOGUK_BUY_ACK;
		msg.bData	= pyoguknum+1;
		pPlayer->SendMsg(&msg, sizeof(msg));
	}
}

void CPyoGukManager::PutInMoneyPyoguk(CPlayer* pPlayer, MONEYTYPE setMoney)
{
	MONEYTYPE pyogukmon = pPlayer->GetMoney(eItemTable_Pyoguk);
	MONEYTYPE maxmon = pPlayer->GetMaxPurseMoney(eItemTable_Pyoguk);
	
	if(pPlayer->GetMoney() < setMoney)
	{
		setMoney = pPlayer->GetMoney();
	}
	if( maxmon - pyogukmon < setMoney )
	{
		setMoney = maxmon - pyogukmon;
	}	
	
	if(setMoney == 0)
	{
		MSGBASE msg;
		msg.Category = MP_PYOGUK;
		msg.Protocol = MP_PYOGUK_PUTIN_MONEY_NACK;
		
		pPlayer->SendMsg(&msg, sizeof(msg));
		return;
	}
		
	setMoney = pPlayer->SetMoney(setMoney, MONEY_SUBTRACTION, 0, eItemTable_Inventory, eMoneyLog_LosePyoguk, pPlayer->GetUserID());
	if(setMoney == 0)
	{
		ASSERTMSG(0, "Must Check!");
		return;
	}
	pPlayer->SetMoney(setMoney, MONEY_ADDITION, 0, eItemTable_Pyoguk);
	

	PyogukMoneyUpdateToDB(pPlayer->GetUserID(), pPlayer->GetMoney(eItemTable_Pyoguk));	//dbUpdate

	InsertLogMoney( eMoneyLog_LosePyoguk, pPlayer->GetID(), pPlayer->GetMoney(), setMoney, pPlayer->GetUserID(), pPlayer->GetMoney(eItemTable_Pyoguk) );
	
	//YH
	LogItemMoney( pPlayer->GetID(), pPlayer->GetObjectName(), pPlayer->GetUserID(), "#Pyoguk",
				eLog_ItemMoveInvenToPyoguk, pPlayer->GetMoney(), pPlayer->GetMoney(eItemTable_Pyoguk),
				setMoney, 0, 0, 0, 0, 0, pPlayer->GetPlayerExpPoint());

	MSG_DWORD msg;
	msg.Category = MP_PYOGUK;
	msg.Protocol = MP_PYOGUK_PUTIN_MONEY_ACK;
	msg.dwData	= pPlayer->GetMoney(eItemTable_Pyoguk);

	pPlayer->SendMsg(&msg, sizeof(msg));
}

void CPyoGukManager::PutOutMoneyPyoguk(CPlayer* pPlayer, MONEYTYPE getMoney)
{
	MONEYTYPE pyogukmon = pPlayer->GetMoney(eItemTable_Pyoguk);
	MONEYTYPE maxmon = pPlayer->GetMaxPurseMoney(eItemTable_Inventory); //牢亥配府肺 捣 颗扁聪鳖.
	
	if( pyogukmon < getMoney)
	{
		getMoney = pyogukmon;
	}
	if(getMoney + pPlayer->GetMoney() > maxmon)
	{
		getMoney = maxmon - pPlayer->GetMoney();
	}

	if(getMoney == 0)
		return;
	getMoney = pPlayer->SetMoney(getMoney, MONEY_SUBTRACTION, 0, eItemTable_Pyoguk);
	if(getMoney == 0) //purse俊辑 沥富 狐脸绰瘤 
	{
		ASSERTMSG(0, "Must Check!");
		return;
	}
	pPlayer->SetMoney(getMoney, MONEY_ADDITION, 0, eItemTable_Inventory, eMoneyLog_GetPyoguk, pPlayer->GetUserID());
	

	PyogukMoneyUpdateToDB(pPlayer->GetUserID(), pPlayer->GetMoney(eItemTable_Pyoguk));	//dbUpdate
	
	InsertLogMoney( eMoneyLog_GetPyoguk, pPlayer->GetID(), pPlayer->GetMoney(), getMoney, pPlayer->GetUserID(), pPlayer->GetMoney(eItemTable_Pyoguk) );

	//YH
	LogItemMoney( pPlayer->GetUserID(), "#Pyoguk", pPlayer->GetID(), pPlayer->GetObjectName(), 
				eLog_ItemMovePyogukToInven, pPlayer->GetMoney(eItemTable_Pyoguk), pPlayer->GetMoney(),
				getMoney, 0, 0, 0, 0, 0, pPlayer->GetPlayerExpPoint());

	MSG_DWORD msg;
	msg.Category = MP_PYOGUK;
	msg.Protocol = MP_PYOGUK_PUTOUT_MONEY_ACK;
	msg.dwData	= pPlayer->GetMoney(eItemTable_Pyoguk);

	pPlayer->SendMsg(&msg, sizeof(msg));
}

PYOGUKLISTINFO* CPyoGukManager::GetPyogukInfo(int i)
{
	ASSERT(i>0);
	ASSERT(i<=MAX_PYOGUKLIST_NUM);
	return &m_PyogukListInfo[i-1]; 
}

⌨️ 快捷键说明

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