📄 pyogukmanager.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 + -