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

📄 munpamanager.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// MunpaManager.cpp: implementation of the CMunpaManager class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "MunpaManager.h"
#include "Munpa.h"
#include "MapDBMsgParser.h"
#include "Player.h"
#include "UserTable.h"
#include "Network.h"
#include "..\[CC]Header\GameResourceManager.h"
#include "MHFile.h"
#include "FameManager.h"
#include "PackedData.h"

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

CMunpaManager::CMunpaManager()
{
	m_MunpaHashTable.Initialize(256);
	m_ItemOptionList.Initialize(MAX_ITEM_OPTION_NUM*100);
}

CMunpaManager::~CMunpaManager()
{
	void* pInfo;
	m_MunpaHashTable.SetPositionHead();
	while(pInfo = m_MunpaHashTable.GetData())
		delete pInfo;
	m_MunpaHashTable.RemoveAll();

	ITEM_OPTION_INFO * pOInfo = NULL;
	m_ItemOptionList.SetPositionHead();
	while(pOInfo = m_ItemOptionList.GetData())
		delete pOInfo;
	m_ItemOptionList.RemoveAll();

}
void CMunpaManager::AddItemOption(ITEM_OPTION_INFO * pInfo)
{
	if(m_ItemOptionList.GetData(pInfo->dwOptionIdx))
	{
		ASSERTMSG(0, "AddItemOption - Already Has Info");
		return;
	}
	ITEM_OPTION_INFO * pNewInfo = new ITEM_OPTION_INFO;
	memcpy(pNewInfo, pInfo, sizeof(ITEM_OPTION_INFO));
	m_ItemOptionList.Add(pNewInfo, pNewInfo->dwOptionIdx);
}

void CMunpaManager::RemoveItemOption(DWORD dwOptionIdx)
{
	ASSERT(m_ItemOptionList.GetData(dwOptionIdx));
	ITEM_OPTION_INFO * pNewInfo = m_ItemOptionList.GetData(dwOptionIdx);
	SAFE_DELETE( pNewInfo );
	m_ItemOptionList.Remove(dwOptionIdx);
}

ITEM_OPTION_INFO * CMunpaManager::GetItemOption(DWORD dwOptionIdx)
{
	return m_ItemOptionList.GetData(dwOptionIdx);
}	


CMunpa* CMunpaManager::GetMunpa(DWORD MunpaIDx)
{
	CMunpa* pMunpa = (CMunpa*)m_MunpaHashTable.GetData(MunpaIDx);
	return pMunpa;
}

void CMunpaManager::RegistMunpa(MUNPALISTINFO_MAP* pMunpaInfo)
{
	CMunpa* pMunpa = new CMunpa(pMunpaInfo);
	ASSERT(m_MunpaHashTable.GetData(pMunpa->GetMunpaID()) == NULL);
	m_MunpaHashTable.Add(pMunpa,pMunpaInfo->MunpaID);	
}

void CMunpaManager::RegistMunpaItem(DWORD MunpaID, ITEMBASE* munpaitem)
{
	CMunpa* pMunpa = GetMunpa(MunpaID);
	ASSERT(pMunpa);

	if( pMunpa )
		pMunpa->InitMunpaItem(munpaitem);
}

void CMunpaManager::LoadMunpaListSyn(SEND_MUNPALIST_SYN* pInfo)
{
	CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pInfo->dwObjectID);
	if(!pPlayer)
		return;

	MAPTYPE MapNum = (MAPTYPE)GAMERESRCMNGR->GetLoadMapNum();
	MunpaLoadSyn(pInfo->dwObjectID, MapNum, pInfo->GotoPage, MAX_MUNPA_LIST, pInfo->OrderType); //db
}

void CMunpaManager::CreateMunpa(MUNPA_CREATE_INFO* pmsg)
{
	return;
	CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
	if(!pPlayer)
	{
		ASSERT(0);
		return;
	}
	if(pPlayer->GetMunpaIdx() != 0)
	{
		ASSERTMSG(0, "巩颇啊 捞固 乐嚼聪促");
		return;
	}

	MunpaCreate(pmsg, pPlayer->GetObjectName());		//db
}

void CMunpaManager::CreateMunpaResult(MUNPALISTINFO_MAP* pMunpaInfo)
{
	CMunpa* pMunpa = new CMunpa(pMunpaInfo);
	ASSERT(m_MunpaHashTable.GetData(pMunpa->GetMunpaID()) == NULL);
	m_MunpaHashTable.Add(pMunpa,pMunpaInfo->MunpaID);

	CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pMunpaInfo->MasterID);
	if(!pPlayer)
		return;

	pPlayer->SetMunpaIdx(pMunpaInfo->MunpaID);
	pPlayer->SetMunpaMemberRank(MUNPA_MASTER);
	pPlayer->SetMunpaName(pMunpaInfo->MunpaName);

	SEND_MUNPA_CREATE_INFO send_msg;
	send_msg.Category = MP_MUNPA;
	send_msg.Protocol = MP_MUNPA_CREATE_ACK;
	send_msg.dwObjectID = pMunpaInfo->MasterID;
	send_msg.dwData = pMunpaInfo->MunpaID;
	SafeStrCpy(send_msg.MunpaName, pMunpaInfo->MunpaName, MAX_MUNPA_NAME+1);
	
	pPlayer->SendMsg(&send_msg,sizeof(send_msg));
}

void CMunpaManager::BreakUpMunpa(MSG_DWORD* pmsg)
{
	CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
	if(!pPlayer)
		return;	
/*	CMunpa* pMunpa = GetMunpa(pmsg->dwData);
	ASSERT(pMunpa);
*/	if(pPlayer->GetMunpaMemberRank() != MUNPA_MASTER)
	{
		ASSERTMSG(0, "巩颇厘捞 酒凑聪促.");
		return;
	}

	MunpaBreakUp(pmsg->dwObjectID, pmsg->dwData); //db
}

void CMunpaManager::BreakUpMunpaResult(DWORD MunpaID)
{
	CMunpa* pMunpa = m_MunpaHashTable.GetData(MunpaID);
	if(pMunpa)
	{
		m_MunpaHashTable.Remove(MunpaID);
		delete pMunpa;
	}
}

void CMunpaManager::ChangeRank(DWORD FromPlayerID, DWORD ToPlayerID, int Position, DWORD MunpaID)
{
 	CPlayer* pFromPlayer = (CPlayer*)g_pUserTable->FindUser(FromPlayerID);
	
	if(pFromPlayer == NULL)
		return;
/*	CMunpa* pMunpa = GetMunpa(MunpaID);

	if(!(pMunpa->IsMaster(pFromPlayer)))
	{
		ASSERT(0);
		return;
	}
*/	if(Position == MUNPA_MASTER)
	{	
		ASSERTMSG(0, "巩林肺 瘤困 函版窍妨窃");
		return;
	}

	CPlayer* pTargetPlayer = (CPlayer*)g_pUserTable->FindUser(ToPlayerID);
	if(pTargetPlayer) //捞 甘俊 乐绰 敲饭捞绢扼档 八荤甫 秦具瘤.
	{
		if(pTargetPlayer->GetMunpaMemberRank() == Position)
			return;
	}
	MunpaChangeMemberRank(FromPlayerID, ToPlayerID, Position, MunpaID); //DB
}

void CMunpaManager::BanMember(DWORD MasterID, DWORD MunpaID, DWORD TargetID, BOOL bLast)
{
	CPlayer* pMaster = (CPlayer*)g_pUserTable->FindUser(MasterID);
	if(!pMaster)
	{
		ASSERT(0);
		return;
	}
/*	CMunpa* pMunpa = GetMunpa(MunpaID);
	ASSERT(pMunpa);
	if(!pMunpa->IsMaster(pMaster))
	{
		ASSERTMSG(0,"巩颇狼 规厘捞 酒囱单夸!");
		return;
	}
*/
	MunpaBanMember(MasterID, TargetID, MunpaID, bLast); //DB
}

void CMunpaManager::SecedeMunpa(DWORD PlayerID)
{
	CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(PlayerID);
	if(pPlayer == NULL)
		return;

	/*	CMunpa* pMunpa = GetMunpa(MunpaID);
	if(!pMunpa)
	{
		//NACK 贸府
		MSGBASE msg;
		msg.Category = MP_MUNPA;
		msg.Protocol = MP_MUNPA_SECEDE_NACK;
		pPlayer->SendMsg(&msg, sizeof(msg));
		return;
	}
*/	if(pPlayer->GetMunpaMemberRank() == MUNPA_MASTER)
	{
		ASSERT(0);
		return;
	}

	MunpaSecede(PlayerID, pPlayer->GetMunpaIdx());
}

void CMunpaManager::AcceptMember(DWORD MasterID, DWORD SendMunpaID, DWORD TargetID,BOOL bLast)
{
	CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(MasterID);
	if(pPlayer == NULL)
		return;
	
/*	CMunpa* pMunpa = GetMunpa(SendMunpaID);
	ASSERT(pMunpa);
	if(!pMunpa->IsMaster(pPlayer))
	{
		ASSERT(0);
		return;
	}
*/
	MunpaAcceptMember(MasterID, TargetID, SendMunpaID, bLast); //db
}

void CMunpaManager::DenyMember(DWORD MasterID, DWORD SendMunpaID, DWORD TargetID,BOOL bLast)
{
	CPlayer* pMaster = (CPlayer*)g_pUserTable->FindUser(MasterID);
	if(pMaster == NULL)
		return;

/*	DWORD MunpaID = pMaster->GetMunpaIdx();
	CMunpa* pMunpa = GetMunpa(MunpaID);
	ASSERT(pMunpa);
	if(pMunpa->IsMaster(pMaster) == FALSE)
	{
		ASSERT(0);
		return;
	}
*/
	MunpaDenyMember(MasterID, TargetID, SendMunpaID, bLast); //db
}

void CMunpaManager::ModifyIntroMsg(MUNPA_MODIFY_INTRO* pInfo)
{
	CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pInfo->dwObjectID);
	if(!pPlayer)
		return;	
/*	CMunpa* pMunpa = (CMunpa*)GetMunpa(pInfo->MunpaID);
	if(!pMunpa)
	{
		ASSERTMSG(0, "巩颇 沥焊啊 绝绰单 家俺臂 荐沥 夸没阑 窍看嚼聪促.");
		return;
	}
	if(!pMunpa->IsMaster(pPlayer))
	{
		//nack贸府
		return;
	}
*/
	MunpaModifyIntro(pInfo->dwObjectID, pInfo->MunpaID, pInfo->MunpaIntro); //db
}

void CMunpaManager::JoinMember(DWORD PlayerID, DWORD TargetMunpaID)
{
	CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(PlayerID);
	if(pPlayer == NULL)
		return;

	DWORD MunpaID = pPlayer->GetMunpaIdx();
	DWORD Rank = pPlayer->GetMunpaMemberRank();
	if(( Rank != MUNPA_NOTMEMBER) || (GetMunpa(MunpaID)))
	{
		ASSERT(0);
		return;
	}
	if(GetMunpa(TargetMunpaID) == NULL)		// 泅犁 甘俊 粮犁窍绰 巩颇俊父 啊涝脚没且荐 乐促.
	{
		ASSERT(0);
		return;
	}

	MunpaJoinMember(PlayerID, TargetMunpaID); //db
}

void CMunpaManager::JoinMemberCancel(DWORD PlayerID)
{
	CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(PlayerID);
	if(pPlayer == NULL)
		return;
	
/*	CMunpa* pMunpa = GetMunpa(MunpaID);
	if(!pMunpa)
		return;
*/
	MunpaJoinMemberCancel(PlayerID, pPlayer->GetMunpaIdx()); //db
}

void CMunpaManager::MunpaHomeInfoSyn(DWORD PlayerID, DWORD MunpaID)
{
	CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(PlayerID);
	if(!pPlayer)
		return;

/*	CMunpa* pMunpa = GetMunpa(MunpaID);
	if(!pMunpa)
	{
		MSGBASE msg;
		msg.Category = MP_MUNPA;
		msg.Protocol = MP_MUNPA_MUNPAHOME_NACK;
		pPlayer->SendMsg(&msg, sizeof(msg));
		return;
	}
*/
	MunpaHomeInfo(PlayerID, MunpaID); //db
}

void CMunpaManager::JoinMembersInfo(DWORD PlayerID, DWORD MunpaID, DWORD GotoPage)
{
	CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(PlayerID);
	if(!pPlayer)
		return;

/*	CMunpa* pMunpa = GetMunpa(MunpaID);
	if(!pMunpa)
	{
		CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(PlayerID);
		MSGBASE msg;
		msg.Category = MP_MUNPA;
		msg.Protocol = MP_MUNPA_JOINMEMBERS_INFO_NACK;
		msg.dwObjectID = PlayerID;
		pPlayer->SendMsg(&msg,sizeof(msg));
		return;
	}
*/
	MunpaJoinMembersInfo(PlayerID, MunpaID, GotoPage); //DB
}

void CMunpaManager::MunpaBoardInfoSyn(DWORD PlayerID, DWORD MunpaID)
{
	CPlayer* pPlayer =  (CPlayer*)g_pUserTable->FindUser(PlayerID);
	if(!pPlayer)
		return;

/*	CMunpa* pMunpa = GetMunpa(MunpaID);
	if(!pMunpa)
	{
		MSGBASE msg;
		msg.Category = MP_MUNPA;
		msg.Protocol = MP_MUNPA_BOARD_INFO_NACK;
		pPlayer->SendMsg(&msg, sizeof(msg));
		return;
	}		
*/
	MunpaBoardInfo(PlayerID, MunpaID); //db
}

void CMunpaManager::NotifyChangeRank(DWORD PlayerID, DWORD MunpaID, BYTE Rank, FAMETYPE Fame)
{
	CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(PlayerID);
	if(!pPlayer)
	{
		return;
	}
	
	if(pPlayer->GetMunpaIdx() != MunpaID) //皋矫瘤 罐扁 傈俊 郴啊 呕硼 脚没阑 沁阑 荐 乐促. 
	{
		return;
	}

	else
	{
		DoChangeRank(pPlayer, Rank);
	}
	FAMEMGR->SetPlayerFame(pPlayer, Fame);
}

void CMunpaManager::DoChangeRank(CPlayer* pTarget, BYTE Rank)
{
	pTarget->SetMunpaMemberRank(Rank);
	
	MSG_BYTE msg;
	msg.Category = MP_MUNPA;
	msg.Protocol = MP_MUNPA_CHANGERANK_TO_TARGET_ACK;
	msg.bData = Rank;
	
	pTarget->SendMsg(&msg, sizeof(msg));
}

void CMunpaManager::NotifyBanMember(DWORD PlayerID, DWORD MunpaID, FAMETYPE Fame)
{
	CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(PlayerID);
	if(!pPlayer)
		return;
	
	if(pPlayer->GetMunpaIdx() != MunpaID)
	{
		ASSERTMSG(0, "notifybanmember:呕硼矫虐妨绊 焊聪 巩颇 酒捞叼啊 促福匙夸. ");
		return;
	}

⌨️ 快捷键说明

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