📄 guildwarehouse.cpp
字号:
// GuildWarehouse.cpp: implementation of the CGuildWarehouse class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "GuildWarehouse.h"
#include "Player.h"
#include "UserTable.h"
#include "ItemManager.h"
#include "GuildManager.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CGuildWarehouse::CGuildWarehouse()
{
}
CGuildWarehouse::~CGuildWarehouse()
{
for(int n=0;n<TAB_GUILDWAREHOUSE_NUM;++n)
m_WarehousePlayerList[n].RemoveAll();
m_GuildWarePurse.Release();
}
void CGuildWarehouse::Init(MONEYTYPE GuildMoney)
{
memset(m_TotalItemBase, 0, sizeof(ITEMBASE)*SLOT_GUILDWAREHOUSE_NUM);
memset(m_TotalSlotInfo, 0, sizeof(SLOTINFO)*SLOT_GUILDWAREHOUSE_NUM);
CMunpaWareSlot::Init(TP_GUILDWAREHOUSE_START, SLOT_GUILDWAREHOUSE_NUM, m_TotalItemBase, m_TotalSlotInfo);
CreatePurse(&m_GuildWarePurse, this, GuildMoney, 4000000000);
}
void CGuildWarehouse::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 CGuildWarehouse::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 CGuildWarehouse::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 CGuildWarehouse::SendtoWarehousePlayerAll(MSGBASE* msg, int size)
{
for(int i=0; i<TAB_GUILDWAREHOUSE_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 CGuildWarehouse::EnterWareHouse(CPlayer* pPlayer,BYTE TabNum)
{
ITEM_OPTION_INFO* pOptionInfo;
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_GUILD_WAREHOUSE_INFO_ACK;
CMunpaWareSlot::GetItemInfoTab(TabNum,msg.info.WarehouseItem);
msg.info.money = m_GuildWarePurse.GetPurseCurMoney();
msg.bTabNum = TabNum;
for(int i=0;i<TABCELL_GUILDWAREHOUSE_NUM;++i)
{
if(msg.info.WarehouseItem[i].Durability > 5)
{
if(ITEMMGR->IsOptionItem(msg.info.WarehouseItem[i].wIconIdx, msg.info.WarehouseItem[i].Durability))
{
pOptionInfo = GUILDMGR->GetItemOption(msg.info.WarehouseItem[i].Durability);
if(pOptionInfo)
{
msg.MunpaWareItemOption[msg.wOptionCount] = *pOptionInfo;
++msg.wOptionCount;
}
}
}
}
pPlayer->SendMsg(&msg,msg.GetSize());
}
void CGuildWarehouse::LeaveWareHouse(DWORD PlayerID,BYTE TabNum)
{
RemoveWarehousePlayer(PlayerID,TabNum);
}
BOOL CGuildWarehouse::InitGuildItem(ITEMBASE* pInfo)
{
return CMunpaWareSlot::InsertItemAbs(NULL, pInfo->Position,pInfo);
}
BOOL CGuildWarehouse::IsEmpty(POSTYPE absPos)
{
return CMunpaWareSlot::IsEmpty(absPos);
}
ERROR_ITEM CGuildWarehouse::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)
{
ITEM_OPTION_INFO* pOptionInfo;
MSG_ITEM_WITH_OPTION msg;
memset(&msg, 0, sizeof(msg));
msg.Category = MP_ITEM;
msg.Protocol = MP_ITEM_ADDTO_GUILDWARE_NOTIFY;
msg.ItemInfo = *pItem;
if(ITEMMGR->IsOptionItem(pItem->wIconIdx, pItem->Durability))
{
pOptionInfo = GUILDMGR->GetItemOption(pItem->Durability);
if(pOptionInfo)
{
msg.OptionInfo = *pOptionInfo;
msg.IsOptionItem = TRUE;
}
}
BYTE TabNum = CMunpaWareSlot::GetTabNum(absPos);
SendtoWarehousePlayer(TabNum, &msg, msg.GetMsgLength(), pPlayer->GetID());
}
return rt;
}
ERROR_ITEM CGuildWarehouse::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_GUILDWARE_NOTIFY;
msg.ItemInfo = *pItemOut;
BYTE TabNum = CMunpaWareSlot::GetTabNum(absPos);
SendtoWarehousePlayer(TabNum,&msg,sizeof(msg),pPlayer->GetID());
}
return rt;
}
ERROR_ITEM CGuildWarehouse::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);
}
ITEMBASE const * CGuildWarehouse::GetItemInfoAbs(POSTYPE absPos)
{
if( !CMunpaWareSlot::IsPosIn(absPos) ) return NULL;
return &m_ItemBaseArray[absPos-m_StartAbsPos];
}
MONEYTYPE CGuildWarehouse::GetMaxMoney()
{
return m_pPurse->GetMaxMoney();
}
MONEYTYPE CGuildWarehouse::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;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -