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

📄 munpa.cpp

📁 墨香最新私服
💻 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 + -