📄 munpa.cpp
字号:
// Munpa.cpp: implementation of the CMunpa class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Munpa.h"
#include "Player.h"
#include "UserTable.h"
#include "ItemManager.h"
#include "MunpaManager.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMunpa::CMunpa(MUNPALISTINFO_MAP* pMunpaInfo)
{
m_MunpaInfo.MunpaID = pMunpaInfo->MunpaID;
m_MunpaInfo.MasterID = pMunpaInfo->MasterID;
m_MunpaInfo.MunpaRank = pMunpaInfo->MunpaRank;
m_MunpaInfo.Famous = pMunpaInfo->Famous;
//strcpy(m_MunpaInfo.MunpaName , pMunpaInfo->MunpaName);
SafeStrCpy(m_MunpaInfo.MunpaName , pMunpaInfo->MunpaName, MAX_MUNPA_NAME+1);
m_MunpaInfo.MemberNum = pMunpaInfo->MemberNum;
m_MunpaInfo.MunpaMoney = pMunpaInfo->MunpaMoney;
memset(m_TotalItemBase, 0, sizeof(ITEMBASE)*SLOT_MUNPAWAREHOUSE_NUM);
memset(m_TotalSlotInfo, 0, sizeof(SLOTINFO)*SLOT_MUNPAWAREHOUSE_NUM);
CMunpaWareSlot::Init(TP_MUNPAWAREHOUSE_START, SLOT_MUNPAWAREHOUSE_NUM, m_TotalItemBase, m_TotalSlotInfo);
//CMunpaWareSlot::Init(0, SLOT_MUNPAWAREHOUSE_NUM, m_TotalItemBase, m_TotalSlotInfo);
CreatePurse(&m_MunpaWarePurse, this, m_MunpaInfo.MunpaMoney, 3000000000);
}
CMunpa::CMunpa(DWORD MunpaID, DWORD MasterID)
{
ASSERT(0);// 荤侩窍瘤 臼澜.taiyo
m_MunpaInfo.MasterID = MasterID;
CMunpaWareSlot::Init(TP_MUNPAWAREHOUSE_START, SLOT_MUNPAWAREHOUSE_NUM, m_TotalItemBase, m_TotalSlotInfo);
//CMunpaWareSlot::Init(0, SLOT_MUNPAWAREHOUSE_NUM, m_TotalItemBase, m_TotalSlotInfo);
}
CMunpa::~CMunpa()
{
for(int n=0;n<TAB_MUNPAWAREHOUSE_NUM;++n)
m_WarehousePlayerList[n].RemoveAll();
m_MunpaWarePurse.Release();
}
void CMunpa::SetMunpaRank(DWORD rank)
{
m_MunpaInfo.MunpaRank = rank;
}
BOOL CMunpa::IsMaster(CPlayer* pPlayer)
{
if(pPlayer->GetMunpaIdx() != GetMunpaID())
return FALSE;
if(pPlayer->GetMunpaMemberRank() != MUNPA_MASTER)
return FALSE;
return TRUE;
}
BOOL CMunpa::IsMember(CPlayer* pPlayer)
{
if(pPlayer->GetMunpaIdx() != GetMunpaID())
return FALSE;
return TRUE;
}
void CMunpa::AddWarehousePlayer(DWORD PlayerID, BYTE TabNum)
{
// 鞍篮 酒捞叼啊 乐栏搁 眠啊窍瘤 臼绰促.
PTRLISTPOS pos = m_WarehousePlayerList[TabNum].GetHeadPosition();
while(pos)
{
DWORD PID = (DWORD)m_WarehousePlayerList[TabNum].GetAt(pos);
if(PID == PlayerID)
{
return;
}
m_WarehousePlayerList[TabNum].GetNext(pos);
}
m_WarehousePlayerList[TabNum].AddTail((void*)PlayerID);
}
void CMunpa::RemoveWarehousePlayer(DWORD PlayerID, BYTE TabNum)
{
PTRLISTPOS pos = m_WarehousePlayerList[TabNum].GetHeadPosition();
while(pos)
{
DWORD PID = (DWORD)m_WarehousePlayerList[TabNum].GetAt(pos);
if(PID == PlayerID)
{
m_WarehousePlayerList[TabNum].RemoveAt(pos);
break;
}
m_WarehousePlayerList[TabNum].GetNext(pos);
}
}
void CMunpa::SendtoWarehousePlayer(BYTE TabNum, MSGBASE* msg, int size, DWORD ExceptID)
{
PTRLISTPOS pos = m_WarehousePlayerList[TabNum].GetHeadPosition();
while(pos)
{
DWORD PlayerID = (DWORD)m_WarehousePlayerList[TabNum].GetAt(pos);
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(PlayerID);
if(!pPlayer)
m_WarehousePlayerList[TabNum].RemoveAt(pos);
else if(PlayerID != ExceptID)
pPlayer->SendMsg(msg, size);
m_WarehousePlayerList[TabNum].GetNext(pos);
}
}
void CMunpa::SendtoWarehousePlayerAll(MSGBASE* msg, int size)
{
// for(int i=0; i<MAX_MUNPA_WAREHOUSETAB_NUM; ++i)
for(int i=0; i<TAB_MUNPAWAREHOUSE_NUM; ++i)
{
PTRLISTPOS pos = m_WarehousePlayerList[i].GetHeadPosition();
while(pos)
{
DWORD PlayerID = (DWORD)m_WarehousePlayerList[i].GetAt(pos);
CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(PlayerID);
if(!pPlayer)
m_WarehousePlayerList[i].RemoveAt(pos);
else
pPlayer->SendMsg(msg, size);
m_WarehousePlayerList[i].GetNext(pos);
}
}
}
void CMunpa::EnterWareHouse(CPlayer* pPlayer,BYTE TabNum)
{
AddWarehousePlayer(pPlayer->GetID(),TabNum);
SEND_MUNPA_WAREHOUSE_ITEM_INFO msg;
memset(&msg, 0, sizeof(SEND_MUNPA_WAREHOUSE_ITEM_INFO));
msg.Category = MP_ITEM;
msg.Protocol = MP_ITEM_MUNPA_WAREHOUSE_INFO_ACK;
//m_WareItemTable.GetItemInfoTab(TabNum,msg.info.WarehouseItem);
CMunpaWareSlot::GetItemInfoTab(TabNum,msg.info.WarehouseItem);
msg.info.money = m_MunpaInfo.MunpaMoney;
msg.bTabNum = TabNum;
for(int i=0;i<TABCELL_MUNPAWAREHOUSE_NUM;++i)
{
if( msg.info.WarehouseItem[i].dwDBIdx == 0)
{
if(ITEMMGR->IsOptionItem(msg.info.WarehouseItem[i].wIconIdx, msg.info.WarehouseItem[i].Durability))
{
// Is not null???
msg.MunpaWareItemOption[msg.wOptionCount] = *MUNPAMGR->GetItemOption(msg.info.WarehouseItem[i].Durability);
++msg.wOptionCount;
}
}
}
pPlayer->SendMsg(&msg,msg.GetSize());
}
void CMunpa::LeaveWareHouse(DWORD PlayerID,BYTE TabNum)
{
RemoveWarehousePlayer(PlayerID,TabNum);
}
BOOL CMunpa::InitMunpaItem(ITEMBASE* pInfo)
{
//return m_WareItemTable.InsertItemAbs(pInfo->Position,pInfo);
return CMunpaWareSlot::InsertItemAbs(NULL, pInfo->Position,pInfo);
}
/*
BOOL CMunpa::AddMunpaItem(CPlayer* pPlayer,ITEMBASE* pInfo)
{
BOOL rt;
//rt = m_WareItemTable.InsertItemAbs(pInfo->Position,pInfo);
rt = CMunpaWareSlot::InsertItemAbs(pInfo->Position,pInfo);
ASSERT(rt);
//rt = m_WareItemTable.UpdateItemAbsDB(
//Info->Position, pInfo->dwDBIdx, pInfo->wIconIdx,
//Info->Position, 0, pInfo->Durability, 0);
rt = CMunpaWareSlot::UpdateItemAbs(
pInfo->Position, pInfo->dwDBIdx, pInfo->wIconIdx,
pInfo->Position, 0, pInfo->Durability, 0);
// db query
ASSERT(rt);
if(rt == FALSE)
return FALSE;
if(pPlayer)
{
MSG_ITEM msg;
msg.Category = MP_ITEM;
msg.Protocol = MP_ITEM_ADDTO_MUNPAWARE_NOTIFY;
msg.ItemInfo = *pInfo;
//BYTE TabNum = m_WareItemTable.GetTabNum(pInfo->Position);
BYTE TabNum = CMunpaWareSlot::GetTabNum(pInfo->Position);
SendtoWarehousePlayer(TabNum,&msg,sizeof(msg),pPlayer->GetID());
}
return TRUE;
}*/
ERROR_ITEM CMunpa::InsertItemAbs(CPlayer * pPlayer, POSTYPE absPos, ITEMBASE * pItem, WORD state)
{
ERROR_ITEM rt = CMunpaWareSlot::InsertItemAbs(pPlayer, absPos,pItem, state);
if(rt != EI_TRUE)
return rt;
if(pPlayer)
{
MSG_ITEM msg;
msg.Category = MP_ITEM;
msg.Protocol = MP_ITEM_ADDTO_MUNPAWARE_NOTIFY;
msg.ItemInfo = *pItem;
//BYTE TabNum = m_WareItemTable.GetTabNum(pInfo->Position);
BYTE TabNum = CMunpaWareSlot::GetTabNum(absPos);
SendtoWarehousePlayer(TabNum, &msg, sizeof(msg), pPlayer->GetID());
}
return rt;
}
ERROR_ITEM CMunpa::DeleteItemAbs(CPlayer * pPlayer, POSTYPE absPos, ITEMBASE * pItemOut, WORD state)
{
ERROR_ITEM rt = CMunpaWareSlot::DeleteItemAbs(pPlayer, absPos,pItemOut);
if(rt != EI_TRUE)
return rt;
if(pPlayer)
{
MSG_ITEM msg;
msg.Category = MP_ITEM;
msg.Protocol = MP_ITEM_DELETEFROM_MUNPAWARE_NOTIFY;
msg.ItemInfo = *pItemOut;
//BYTE TabNum = m_WareItemTable.GetTabNum(absPos);
BYTE TabNum = CMunpaWareSlot::GetTabNum(absPos);
SendtoWarehousePlayer(TabNum,&msg,sizeof(msg),pPlayer->GetID());
}
return rt;
}
/*
BOOL CMunpa::DeleteMunpaItem(CPlayer* pPlayer,POSTYPE absPos,ITEMBASE* pRtInfo)
{
//BOOL rt = m_WareItemTable.DeleteItemAbs(absPos,pRtInfo);
BOOL rt = CMunpaWareSlot::DeleteItemAbs(absPos,pRtInfo);
if(rt == FALSE)
return FALSE;
if(pPlayer)
{
MSG_ITEM msg;
msg.Category = MP_ITEM;
msg.Protocol = MP_ITEM_DELETEFROM_MUNPAWARE_NOTIFY;
msg.ItemInfo = *pRtInfo;
//BYTE TabNum = m_WareItemTable.GetTabNum(absPos);
BYTE TabNum = CMunpaWareSlot::GetTabNum(absPos);
SendtoWarehousePlayer(TabNum,&msg,sizeof(msg),pPlayer->GetID());
}
return TRUE;
}
*/
/*
BYTE CMunpa::GetWarehouseRank(BYTE i)
{
return m_MunpaInfo.WarehouseRank[i];
}*/
void CMunpa::MoneyUpdate(MONEYTYPE money)
{
m_MunpaInfo.MunpaMoney = money;
// db 诀单捞飘
}
MONEYTYPE CMunpa::SetMoney( MONEYTYPE ChangeValue, BYTE bOper, BYTE MsgFlag )
{
CPurse* pPurse = GetPurse();
if( !pPurse) return FALSE;
if( bOper == MONEY_SUBTRACTION )
{
return pPurse->Subtraction( ChangeValue, MsgFlag );
}
else
{
return pPurse->Addition( ChangeValue, MsgFlag );
}
return 0;
}
ITEMBASE const * CMunpa::GetItemInfoAbs(POSTYPE absPos)
{
if( !CMunpaWareSlot::IsPosIn(absPos) ) return NULL;
return &m_ItemBaseArray[absPos-m_StartAbsPos];
}
ERROR_ITEM CMunpa::UpdateItemAbs(CPlayer * pPlayer, POSTYPE whatAbsPos, DWORD dwDBIdx, WORD wItemIdx, POSTYPE position, POSTYPE quickPosition, DURTYPE Dur, WORD flag, WORD state)
{
return CMunpaWareSlot::UpdateItemAbs(pPlayer, whatAbsPos, dwDBIdx, wItemIdx, position, quickPosition, Dur, flag, state);
}
BOOL CMunpa::IsEmpty(POSTYPE absPos)
{
return CMunpaWareSlot::IsEmpty(absPos);
}
MONEYTYPE CMunpa::GetMaxPurseMoney()
{
return m_pPurse->GetMaxMoney();
}
//芒绊 鼻茄锭巩俊 眠啊
BYTE CMunpa::GetTabNum(POSTYPE absPos)
{
return CMunpaWareSlot::GetTabNum(absPos);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -