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

📄 partymanager.cpp

📁 墨香最新私服
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "stdafx.h"
#include "PartyManager.h"
#include "Party.h"
#include "MapDBMsgParser.h"
#include "UserTable.h"
#include "Network.h"
#include "..\[CC]Header\GameResourceManager.h"

CPartyManager::CPartyManager() 
{
	m_partyRoomHashTable.Initialize(256);	
}

CPartyManager::~CPartyManager() 
{
	void* pInfo;
	m_partyRoomHashTable.SetPositionHead();
	while(pInfo = m_partyRoomHashTable.GetData())
		delete pInfo;
	m_partyRoomHashTable.RemoveAll();
}


CParty* CPartyManager::RegistParty(DWORD PartyIDX)
{
	CParty* pParty = new CParty(PartyIDX, 0, "", NULL,0);
	if(m_partyRoomHashTable.GetData(PartyIDX))
	{
		char buf[128];
		sprintf(buf, "颇萍牢郸胶啊 捞固 乐嚼聪促: %d", PartyIDX);
		ASSERTMSG(0, buf);
		//to do
	}

	ASSERT(pParty);
	m_partyRoomHashTable.Add(pParty,PartyIDX);
	return pParty;
}

void CPartyManager::CreatePartyQuery(CPlayer * pMaster, BYTE bOption)
{
	if(pMaster->GetPartyIdx() != 0)
	{
		SendErrMsg(pMaster->GetID(), eErr_Create_MapHasParty, MP_PARTY_CREATE_NACK);
		return;
	}		

	PartyCreate(pMaster->GetID(), bOption); //db
}

void CPartyManager::AddPartyInvite(DWORD MasterID, DWORD TargetID)
{
	CPlayer* pMaster = (CPlayer*)g_pUserTable->FindUser(MasterID);
	if(!pMaster)
		return;
	CParty* pParty = GetParty(pMaster->GetPartyIdx());
	if(!pParty)
	{
		ASSERTMSG(0,"[颇萍]-糕滚眠啊-颇萍啊 绝嚼聪促");
		return;
	}

	if(pParty->IsPartyMember(MasterID) == FALSE)
		return;
	if(pParty->IsPartyMember(TargetID) == TRUE)
		return;

	CPlayer* pTargetPlayer = (CPlayer*)g_pUserTable->FindUser(TargetID);
	
	MSG_DWORD msg;
	msg.Category = MP_PARTY;
	msg.Protocol = MP_PARTY_ADD_NACK;
	msg.dwData = 0;
	if(!pTargetPlayer)
	{
		msg.dwData = eErr_Add_NoPlayer;
	}
	else if(pTargetPlayer->GetPartyIdx() != 0)
		msg.dwData		= eErr_Add_AlreadyinParty;
	else if(pTargetPlayer->GetGameOption()->bNoParty)
		msg.dwData		= eErr_Add_OptionNoParty;
	else if(pTargetPlayer->GetState() == eObjectState_Die)
		msg.dwData		= eErr_Add_DiedPlayer;
	
	if(msg.dwData > 0) //nack
		pMaster->SendMsg(&msg, sizeof(msg));
	else //ack
	{
		MSG_NAME_DWORD2 invitemsg;
		invitemsg.Category = MP_PARTY;
		invitemsg.Protocol = MP_PARTY_ADD_INVITE;
		invitemsg.dwData1	= pParty->GetPartyIdx();
		invitemsg.dwData2	= pParty->GetOption();
		SafeStrCpy(invitemsg.Name,pMaster->GetObjectName(), MAX_NAME_LENGTH+1);
		pTargetPlayer->SendMsg(&invitemsg,sizeof(invitemsg));

		MSGBASE rtmsg;
		rtmsg.Category = MP_PARTY;
		rtmsg.Protocol = MP_PARTY_INVITE_ACCEPT_ACK;
		pMaster->SendMsg(&rtmsg, sizeof(rtmsg));
	}
}

void CPartyManager::AddMember(DWORD PartyID, DWORD TargetPlayerID)
{
	CPlayer* pNewMember = (CPlayer*)g_pUserTable->FindUser(TargetPlayerID);
	if(!pNewMember)
		return;
	if(pNewMember->GetPartyIdx() != 0) 
	{	//	nack 贸府 鞘夸 
		ASSERT(0);
		return;
	}
	CParty* pParty = GetParty(PartyID);
	if(pParty == NULL)
	{
		//	nack 贸府 鞘夸 - 颇萍啊 秦魂登菌阑波促. 
		MSG_BYTE msg;
		msg.Category = MP_PARTY;
		msg.Protocol = MP_PARTY_INVITE_ACCEPT_NACK;
		msg.bData = eErr_BrokenParty;
		pNewMember->SendMsg(&msg, sizeof(msg));
		return;
	}
	if(pParty->IsPartyMember(pNewMember->GetID()) == TRUE)
		return;

	PartyAddMember(PartyID,TargetPlayerID); //DB update
}

void CPartyManager::AddMemberResult(DWORD PartyID, PARTY_MEMBER* Info)
{
	CParty* pParty = GetParty(PartyID);
	if(pParty == NULL)
		return;
	CPlayer* pNewMember = (CPlayer*)g_pUserTable->FindUser(Info->dwMemberID);
	if(pNewMember)
		pNewMember->SetPartyIdx(PartyID);
	SEND_PARTY_MEMBER_INFO smsg;
	smsg.Category = MP_PARTY;
	smsg.Protocol = MP_PARTY_ADD_ACK;
	smsg.MemberInfo.dwMemberID = Info->dwMemberID;
	
	SafeStrCpy(smsg.MemberInfo.Name,Info->Name, MAX_NAME_LENGTH+1);
	smsg.MemberInfo.bLogged = Info->bLogged;
	smsg.MemberInfo.LifePercent = Info->LifePercent;
	smsg.MemberInfo.ShieldPercent = Info->ShieldPercent;
	smsg.MemberInfo.NaeRyukPercent = Info->NaeRyukPercent;
	smsg.MemberInfo.Level = Info->Level;
	smsg.MemberInfo.posX = Info->posX;
	smsg.MemberInfo.posZ = Info->posZ;
	smsg.PartyID = PartyID;
	pParty->SendMsgToAll(&smsg,sizeof(smsg));
	
	pParty->AddPartyMember(Info->dwMemberID,Info->Name,pNewMember,smsg.MemberInfo.Level);
	
	NotifyChangesOtherMapServer(Info->dwMemberID,pParty,MP_PARTY_NOTIFYADD_TO_MAPSERVER, PartyID, smsg.MemberInfo.Level);
}

void CPartyManager::AddMemberNack(DWORD PartyID, DWORD TargetPlayerID)
{
	CParty* pParty = GetParty(PartyID);
	if(!pParty)
		return;
	MSGBASE msg;
	msg.Category = MP_PARTY;
	msg.Protocol = MP_PARTY_INVITE_DENY_ACK;
	pParty->SendMsgToAll(&msg, sizeof(msg));
}

void CPartyManager::NotifyAddParty(SEND_CHANGE_PARTY_MEMBER_INFO* pmsg)
{
	CParty* pParty = GetParty(pmsg->PartyID);
	if(pParty ==NULL)
		return;
	
	if(pParty->GetMasterID() == 0) //颇萍 沥焊啊 绝栏搁
		return;

	pParty->AddPartyMember(pmsg->dwObjectID,pmsg->Name,NULL, pmsg->Level);

	SEND_PARTY_MEMBER_INFO smsg;
	smsg.Category = MP_PARTY;
	smsg.Protocol = MP_PARTY_ADD_ACK;
	smsg.MemberInfo.dwMemberID = pmsg->dwObjectID;
	SafeStrCpy(smsg.MemberInfo.Name,pmsg->Name, MAX_NAME_LENGTH+1);
	smsg.MemberInfo.bLogged = TRUE;
	smsg.MemberInfo.LifePercent = 0;
	smsg.MemberInfo.NaeRyukPercent = 0;
	smsg.MemberInfo.Level = pmsg->Level;
	smsg.PartyID = pmsg->PartyID;

	pParty->SendMsgToAll(&smsg,sizeof(smsg));
}

void CPartyManager::DelMember(DWORD TargetPlayerID,DWORD PartyID)
{
	CParty* pParty = GetParty(PartyID);
	if(pParty == NULL)
	{
		ASSERTMSG(0,"There is no Party.");
		return;
	}
	
	if(pParty->IsPartyMember(TargetPlayerID) == FALSE)
		return;
	if(pParty->GetMasterID() == 0) //颇萍 沥焊啊 绝栏搁
		return;

	MSG_DWORD smsg;
	smsg.Category = MP_PARTY;
	smsg.Protocol = MP_PARTY_DEL_ACK;
	smsg.dwData = TargetPlayerID;
	pParty->SendMsgToAll(&smsg,sizeof(smsg));

	NotifyChangesOtherMapServer(TargetPlayerID,pParty,MP_PARTY_NOTIFYDELETE_TO_MAPSERVER, PartyID);
	
	pParty->RemovePartyMember(TargetPlayerID);
	
	CPlayer * pPlayer = (CPlayer*)g_pUserTable->FindUser(TargetPlayerID);
	if(pPlayer)
		pPlayer->SetPartyIdx(0);

//	CharacterTablePartyIdxUpdate(TargetPlayerID); //肺弊 酒眶 茄 荤恩 ban且 锭 某腐磐 抛捞喉.partyidx 诀单捞飘
}

void CPartyManager::NotifyDelParty(SEND_CHANGE_PARTY_MEMBER_INFO* pmsg)
{
	CParty* pParty = GetParty(pmsg->PartyID);
	if(pParty ==NULL)
		return;
	
	MSG_DWORD smsg;
	smsg.Category = MP_PARTY;
	smsg.Protocol = MP_PARTY_DEL_ACK;
	smsg.dwData = pmsg->dwObjectID;
	pParty->SendMsgToAll(&smsg,sizeof(smsg));
	
	pParty->RemovePartyMember(pmsg->dwObjectID);
	
	CPlayer * pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
	if(pPlayer)
		pPlayer->SetPartyIdx(0);
}

void CPartyManager::BanParty(DWORD PartyID,DWORD PlayerID,DWORD TargetPlayerID) 
{
	CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(PlayerID);
	if(pPlayer == NULL)
		return;

	DWORD PartyIdx = pPlayer->GetPartyIdx();
	CParty* pParty = GetParty(PartyIdx);
	if(pParty == NULL)
	{
		ASSERTMSG(0,"颇萍啊 粮犁窍瘤 臼嚼聪促.");//pjslocal
		return;
	}
	if(pParty->IsMasterChanging(pPlayer, MP_PARTY_BAN_NACK) == TRUE)
		return;
	
	if(pParty->IsPartyMember(pPlayer->GetID()) && pParty->IsPartyMember(TargetPlayerID))
	{		
		MSG_DWORD smsg;
		smsg.Category = MP_PARTY;
		smsg.Protocol = MP_PARTY_BAN_ACK;
		smsg.dwData = TargetPlayerID;
		pParty->SendMsgToAll(&smsg,sizeof(smsg));
		
		CharacterTablePartyIdxUpdate(TargetPlayerID); //肺弊 酒眶 茄 荤恩 ban且 锭 某腐磐 抛捞喉.partyidx 诀单捞飘
		
		CPlayer* pBanedPlayer = (CPlayer *)g_pUserTable->FindUser(TargetPlayerID);
		if(pBanedPlayer)
			pBanedPlayer->SetPartyIdx(0);

		NotifyChangesOtherMapServer(TargetPlayerID,pParty,MP_PARTY_NOTIFYBAN_TO_MAPSERVER, PartyID);

		pParty->RemovePartyMember(TargetPlayerID);	
		PartyDelMember(PartyID, TargetPlayerID);
//		PartyMemberUpdate(pParty, PartyID);	
	}
	else
	{
		ASSERTMSG(0,"颇萍盔捞 酒囱 荤恩捞 Ban阑矫档沁嚼聪促");
	}
}
void CPartyManager::NotifyBanParty(SEND_CHANGE_PARTY_MEMBER_INFO* pmsg)
{
	CParty* pParty = GetParty(pmsg->PartyID);
	if(pParty == NULL)
		return;
	if(pParty->GetMasterID() == 0) //颇萍 沥焊啊 绝栏搁
		return;
	MSG_DWORD smsg;
	smsg.Category = MP_PARTY;
	smsg.Protocol = MP_PARTY_BAN_ACK;
	smsg.dwData = pmsg->dwObjectID;
	pParty->SendMsgToAll(&smsg,sizeof(smsg));
	
	pParty->RemovePartyMember(pmsg->dwObjectID);

	CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(pmsg->dwObjectID);
	if(pPlayer)
		pPlayer->SetPartyIdx(0);
}
void CPartyManager::ChangeMasterParty(DWORD PartyID,DWORD PlayerID,DWORD TargetPlayerID) 
{
	if(PlayerID == TargetPlayerID)
		return;
	
	CPlayer* pPlayer = (CPlayer*)g_pUserTable->FindUser(PlayerID);
	if(pPlayer == NULL)
		return;

	CParty* pParty = GetParty(pPlayer->GetPartyIdx());
	if(pParty == NULL)
	{
		ASSERTMSG(0,"颇萍啊 粮犁窍瘤 臼嚼聪促.");//pjslocal
		return;
	}

	if(pParty->IsPartyMember(pPlayer->GetID()) == FALSE)
		return;
	if(pParty->IsPartyMember(TargetPlayerID) == FALSE)
		return;
	if(pParty->GetMemberID(0) != pPlayer->GetID())		// 付胶磐啊 酒丛
		return;

	PartyChangeMaster(pPlayer->GetPartyIdx(), PlayerID, TargetPlayerID);
	pParty->SetMasterChanging(TRUE);
/*	pParty->ChangeMaster(PlayerID,TargetPlayerID);

	MSG_DWORD smsg;
	smsg.Category = MP_PARTY;
	smsg.Protocol = MP_PARTY_CHANGEMASTER_ACK;
	smsg.dwData = TargetPlayerID;
	pParty->SendMsgToAll(&smsg,sizeof(smsg));

	PartyChangeMaster(PartyID, PlayerID, TargetPlayerID);
	
	NotifyChangesOtherMapServer(TargetPlayerID,pParty,MP_PARTY_NOTIFYCHANGEMASTER_TO_MAPSERVER, PartyID);
	*/
}
void CPartyManager::NotifyChangeMasterParty(SEND_CHANGE_PARTY_MEMBER_INFO* pmsg)
{	
	CParty* pParty = GetParty(pmsg->PartyID);
	if(pParty == NULL)
		return;
	if(pParty->GetMasterID() == 0) //颇萍 沥焊啊 绝栏搁
		return;
	DoChangeMasterParty(pParty, pmsg->dwObjectID);
/*	pParty->ChangeMaster(pParty->GetMasterID(),pmsg->dwObjectID);

	MSG_DWORD smsg;
	smsg.Category = MP_PARTY;
	smsg.Protocol = MP_PARTY_CHANGEMASTER_ACK;
	smsg.dwData = pmsg->dwObjectID;
	
	pParty->SendMsgToAll(&smsg,sizeof(smsg)); */
}
void CPartyManager::DoChangeMasterParty(CParty* pParty, DWORD TargetID)
{
	pParty->ChangeMaster(pParty->GetMasterID(),TargetID);

	MSG_DWORD smsg;
	smsg.Category = MP_PARTY;

⌨️ 快捷键说明

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