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

📄 partymanager.cpp

📁 墨香最新私服
💻 CPP
字号:
#include "stdafx.h"
#include "GameIn.h"
#include "PartyManager.h"

#include "WindowIdEnum.h"
#include "./interface/cWindowManager.h"
#include "objectmanager.h"
#include "ChatManager.h"
#include "cMsgBox.h"
#include "ItemManager.h"
#include "AbilityManager.h"
#include "GameEventManager.h"
#include "MiniMapDlg.h"
#include "PartyIconManager.h"
#include "PartyCreateDlg.h"
#include "PartyInviteDlg.h"

GLOBALTON(CPartyManager);

CPartyManager::CPartyManager()
{
}

CPartyManager::~CPartyManager()
{
}

void CPartyManager::Init()
{
	m_MasterChanging = FALSE;
	m_Party.Clear();
	m_bIsProcessing = FALSE;
	m_RequestPartyID = 0;
//	GAMEIN->GetPartyDialog()->Init();
}

void CPartyManager::NetworkMsgParse(BYTE Protocol,void* pMsg)
{
	if( GAMEIN->GetPartyDialog() == NULL )
		return;
	if(HERO == NULL)
		return;

	switch(Protocol) 
	{
	case MP_PARTY_INFO: 			
		{
			PARTY_INFO* pmsg = (PARTY_INFO*)pMsg;
			SetPartyInfo(pmsg);
			GAMEIN->GetPartyDialog()->SetActive(TRUE);
			GAMEIN->GetPartyDialog()->RefreshDlg();

			for(int i=0; i<MAX_PARTY_LISTNUM; i++)
			{
				if(pmsg->Member[i].bLogged && pmsg->Member[i].dwMemberID != HERO->GetID() &&
					pmsg->Member[i].LifePercent)
				{
					PICONMGR->CreatePartyIcon(pmsg->Member[i].dwMemberID, &pmsg->Member[i]);
				}
			}
		}
		break;
		
	case MP_PARTY_ADD_INVITE:
		{	
			MSG_NAME_DWORD2* pmsg = (MSG_NAME_DWORD2*)pMsg;
			SetRequestPartyID(pmsg->dwData1);
			GAMEIN->GetPartyInviteDialog()->SetMsg(pmsg->Name, (BYTE)pmsg->dwData2);
			GAMEIN->GetPartyInviteDialog()->SetActive(TRUE);
		}
		break;
	
	case MP_PARTY_ADD_ACK: 
		{
			SEND_PARTY_MEMBER_INFO* pmsg = (SEND_PARTY_MEMBER_INFO*)pMsg;
			AddPartyMemberResult(pmsg);	
		} 
		break; 
		
	case MP_PARTY_ADD_NACK: 
		{	
			MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
			switch(pmsg->dwData)
			{
			case eErr_Add_NoPlayer:
				CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(67)); break;
			case eErr_Add_AlreadyinParty:
				CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(76)); break;
			case eErr_Add_OptionNoParty:
				CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(79)); break;
			case eErr_Add_DiedPlayer:
				CHATMGR->AddMsg(CTC_SYSMSG, CHATMGR->GetChatMsg(158)); break;
			}			
		}
		break;
		
	case MP_PARTY_DEL_ACK: 
		{
			MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
			DelPartyMemberResult(pmsg);
			
			if(pmsg->dwData == HERO->GetID())			
				PICONMGR->DeleteAllPartyIcon();			
			else			
				PICONMGR->DeletePartyIcon(pmsg->dwData);
		}
		break;
		
	case MP_PARTY_DEL_NACK: 
		{
			MSG_INT* pmsg = (MSG_INT*)pMsg;
			switch(pmsg->nData)
			{
			case eErr_ChangingMaster:
				CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(159) ); break;
			}
		}
		break;
		
	case MP_PARTY_CREATE_ACK: 
		{
			MSG_DWORDBYTE* pmsg = (MSG_DWORDBYTE*)pMsg;
			CreatePartyResult(pmsg);
			
			GAMEEVENTMGR->AddEvent( eGameEvent_Ability, 403 );
		}
		break;
		
	case MP_PARTY_CREATE_NACK: 
		{
			ASSERT(0);
			MSG_BYTE* pmsg = (MSG_BYTE* )pMsg;

			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(89), pmsg->bData);
		}
		break;
		
	case MP_PARTY_BAN_ACK: 
		{
			MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
			BanPartyMemberResult(pmsg);		
		} // case
		break;
		
	case MP_PARTY_BAN_NACK: 
		{
			
		}
		break;
		
	case MP_PARTY_MEMBER_LOGIN: 
		{
			SEND_PARTY_MEMBER_INFO* pmsg = (SEND_PARTY_MEMBER_INFO*)pMsg;
			UserLogIn(pmsg);
			
			if(pmsg->MemberInfo.bLogged && pmsg->MemberInfo.dwMemberID != HERO->GetID())
			{
				if(pmsg->MemberInfo.LifePercent)			// 货肺 立加茄 颇萍盔
					PICONMGR->CreatePartyIcon(pmsg->MemberInfo.dwMemberID, &pmsg->MemberInfo);
				else			// 扁粮俊 立加秦 乐带 颇萍盔
					PICONMGR->DeletePartyIcon(pmsg->MemberInfo.dwMemberID);
			}
		}
		break;
		
	case MP_PARTY_MEMBER_LOGOUT: 
		{
			MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
			UserLogOut(pmsg);
			
			PICONMGR->DeletePartyIcon(pmsg->dwData);
		 }
		break;
		
	case MP_PARTY_CHANGEMASTER_ACK: 
		{
			MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
			ChangeMasterPartyResult(pmsg);
			SetMasterChanging(FALSE);
		}
		break;
		
	case MP_PARTY_CHANGEMASTER_NACK: 
		{
			ASSERT(0);
			SetMasterChanging(FALSE);
		}
		break;
		
	case MP_PARTY_BREAKUP_ACK: 
		{
			MSGBASE* pmsg = (MSGBASE*)pMsg;
			BreakUpPartyResult();

			PICONMGR->DeleteAllPartyIcon();
		} 
		break;
		
	case MP_PARTY_BREAKUP_NACK: 
		{
			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(159) );
		}
		break;

	case MP_PARTY_MEMBERLIFE:
		{
			SEND_PARTY_GAUGE* pmsg = (SEND_PARTY_GAUGE*)pMsg;
			SetPartyMemberLifePercent(pmsg->PlayerID, pmsg->GaugePercent); //data1:playerid, data2:val
			GAMEIN->GetPartyDialog()->RefreshDlg();
		}
		break;

	case MP_PARTY_MEMBERSHIELD:
		{
			SEND_PARTY_GAUGE* pmsg = (SEND_PARTY_GAUGE*)pMsg;
			SetPartyMemberShieldPercent(pmsg->PlayerID, pmsg->GaugePercent); //data1:playerid, data2:val
			GAMEIN->GetPartyDialog()->RefreshDlg();
		}
		break;
		
	case MP_PARTY_MEMBERNAERYUK:
		{
			SEND_PARTY_GAUGE* pmsg = (SEND_PARTY_GAUGE*)pMsg;
			SetPartyMemberNaeRyukPercent(pmsg->PlayerID, pmsg->GaugePercent);			
			GAMEIN->GetPartyDialog()->RefreshDlg();
		}
		break;
	case MP_PARTY_MEMBERLEVEL:
		{
			MSG_DWORD2* pmsg = (MSG_DWORD2*)pMsg;
			SetPartyMemberLevel(pmsg->dwData1, (LEVELTYPE)pmsg->dwData2);			
			GAMEIN->GetPartyDialog()->RefreshDlg();
		}
		break;
	case MP_PARTY_SENDPOS:
		{
			//SEND_PARTY_MEMBER_POS* pmsg = (SEND_PARTY_MEMBER_POS*)pMsg;			
			//GAMEIN->GetMiniMapDialog()->SetPartyIconTargetPos(pmsg->dwMemberID, pmsg->posX, pmsg->posZ);
			SEND_PARTYICON_MOVEINFO* pmsg = (SEND_PARTYICON_MOVEINFO*)pMsg;
			if(pmsg->MoveInfo.dwMoverID != HERO->GetID())
				PICONMGR->SetMoveInfo(&pmsg->MoveInfo);
		}
		break;
	case MP_PARTY_REVIVEPOS:
		{
			SEND_PARTYICON_REVIVE* pmsg = (SEND_PARTYICON_REVIVE*)pMsg;
			PICONMGR->SetCurPosition(pmsg->dwMoverID, pmsg->Pos);
		}
		break;
	case MP_PARTY_INVITE_DENY_ACK:
		{
			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(75) );
		}
		break;
	case MP_PARTY_INVITE_ACCEPT_ACK:
		{
			CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(26) );
		}
		break;
	case MP_PARTY_INVITE_ACCEPT_NACK:
		{
			MSG_BYTE * pmsg = (MSG_BYTE*)pMsg;
			if(pmsg->bData == eErr_BrokenParty)
				CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(66) );
			else if(pmsg->bData == eErr_Add_Full)
				CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(77) );
		}
		break;
	case MP_PARTY_MEMBER_LOGINMSG:
		{
			MSG_DWORD* pmsg = (MSG_DWORD*)pMsg;
			if(pmsg->dwData != HEROID)
				CHATMGR->AddMsg( CTC_TOWHOLE, CHATMGR->GetChatMsg(64), m_Party.GetMemberName(pmsg->dwData));
		}
		break;
	case MP_PARTY_MONSTER_OBTAIN_NOTIFY:
		{
			MSG_DWORD_WORD* pmsg = (MSG_DWORD_WORD*)pMsg;
			ITEM_INFO* pItemInfo = ITEMMGR->GetItemInfo(pmsg->wData);
			if(pItemInfo == 0)
				return;
			CHATMGR->AddMsg( CTC_GETITEM, CHATMGR->GetChatMsg( 150 ), GetPartyMemberName(pmsg->dwData), pItemInfo->ItemName );
		}
		break;
	} 
}

void CPartyManager::CreatePartySyn(int Option) 
{
	if(HERO->GetPartyIdx() != 0)
	{
		ASSERT(0);
		return;
	}
	MSG_BYTE msg;
	msg.Category = MP_PARTY;
	msg.Protocol = MP_PARTY_CREATE_SYN;
	msg.dwObjectID = HEROID;
	msg.bData = Option;
	NETWORK->Send(&msg,sizeof(msg));

	SetIsProcessing(TRUE);
}

void CPartyManager::AddPartyMemberSyn(DWORD AddPartymemeberID) 
{
	if(AddPartymemeberID == 0)
	{
		ASSERT(0);
		return;
	}
	if(m_Party.IsPartyMember(AddPartymemeberID) == TRUE)
		return;

	if(m_Party.GetMemberNum() != MAX_PARTY_LISTNUM)
	{
		MSG_DWORD2 msg;
		msg.Category	= MP_PARTY;
		msg.Protocol	= MP_PARTY_ADD_SYN;
		msg.dwObjectID	= HEROID;
		msg.dwData1		= AddPartymemeberID;			
		msg.dwData2		= HERO->GetPartyIdx();
		NETWORK->Send(&msg,sizeof(msg));
	}
	else 
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(77) );
}

void CPartyManager::DelPartyMemberSyn() 
{
	if(HEROID == GetMasterID())
		ASSERTMSG(0,"规厘篮 呕硼甫 且 荐 绝促.");//pjslocal
	
	MSG_DWORD msg;
	msg.Category = MP_PARTY;
	msg.Protocol = MP_PARTY_DEL_SYN;
	msg.dwObjectID = HEROID;
	msg.dwData = HERO->GetPartyIdx();
	NETWORK->Send(&msg,sizeof(msg));
}

void CPartyManager::ChangeMasterPartySyn(DWORD FromMemberID, DWORD ToMemberID) 
{
	if(ToMemberID == 0)
		return;
	if(ToMemberID == FromMemberID)
		return;
	if(m_Party.IsPartyMember(ToMemberID) == FALSE)
		return;
	
	MSG_DWORD2 msg;
	msg.Category = MP_PARTY;
	msg.Protocol = MP_PARTY_CHANGEMASTER_SYN;
	msg.dwObjectID = HEROID;
	msg.dwData1 = ToMemberID;
	msg.dwData2 = HERO->GetPartyIdx();
	NETWORK->Send(&msg, sizeof(msg));
	
	SetMasterChanging(TRUE);	
}

void CPartyManager::BreakUpSyn() 
{
	if(IsMasterChanging() == TRUE)
		return;
	if(IsProcessing() == TRUE)
		return;

	MSG_DWORD msg;
	msg.Category = MP_PARTY;
	msg.Protocol = MP_PARTY_BREAKUP_SYN;
	msg.dwObjectID = HEROID;
	msg.dwData = HERO->GetPartyIdx();
	NETWORK->Send(&msg,sizeof(msg));

	SetIsProcessing(TRUE);
}

void CPartyManager::BanPartyMemberSyn(DWORD DelPartymemberID) 
{
	if(DelPartymemberID == 0)
		return;
	if(DelPartymemberID == HEROID)
		return;

	if(IsMasterChanging() == TRUE)
		return;

	if(m_Party.IsPartyMember(DelPartymemberID) == FALSE)
		return;
	MSG_DWORD2 msg;
	msg.Category = MP_PARTY;
	msg.Protocol = MP_PARTY_BAN_SYN;
	msg.dwObjectID = HEROID;
	msg.dwData1 = DelPartymemberID;
	msg.dwData2 = HERO->GetPartyIdx();
	NETWORK->Send(&msg,sizeof(msg));
}

void CPartyManager::CreatePartyResult(MSG_DWORDBYTE* pMsg)
{
	m_Party.Clear();
//	m_Party.SetPartyIdx(pMsg->dwData);
	HERO->SetPartyIdx(pMsg->dwData);
	m_Party.SetOption(pMsg->bData);
	m_Party.SetMaster(HEROID,HERO->GetObjectName(),TRUE,HERO->GetLifePercent(), HERO->GetShieldPercent(), HERO->GetNaeRyukPercent());
	SetIsProcessing(FALSE);
	GAMEIN->GetPartyDialog()->RefreshDlg();
	
	CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(68) );
	GAMEIN->GetPartyDialog()->SetActive(TRUE);
	
	OBJECTMGR->ApplyOverInfoOption( HERO );//
}

void CPartyManager::AddPartyMemberResult(SEND_PARTY_MEMBER_INFO* pMsg) 
{
	if(pMsg->MemberInfo.dwMemberID == HEROID) //眠啊等 荤恩
	{
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(69) );
		HERO->SetPartyIdx(pMsg->PartyID);

		OBJECTMGR->ApplyOverInfoOptionToAll();//--setpartyinfo客 滴锅般摹绰啊? confirm
	}
	else //规颇盔甸
	{
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(70), pMsg->MemberInfo.Name);
		m_Party.AddMember(&pMsg->MemberInfo);

		CObject* pMember = OBJECTMGR->GetObject( pMsg->MemberInfo.dwMemberID );
		OBJECTMGR->ApplyOverInfoOption( pMember );//

		// 颇萍盔 酒捞能 眠啊.
		if(pMsg->MemberInfo.bLogged && pMsg->MemberInfo.LifePercent)
		{
			PICONMGR->CreatePartyIcon(pMsg->MemberInfo.dwMemberID, &pMsg->MemberInfo);
		}
	}
	
	GAMEIN->GetPartyDialog()->RefreshDlg();
}

void CPartyManager::DelPartyMemberResult(MSG_DWORD* pMsg) 
{
	if(pMsg->dwData == HEROID) 
	{
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(71) );
		HERO->SetPartyIdx(0);
		m_Party.Clear();

		GAMEIN->GetPartyDialog()->SetActive(FALSE);
		OBJECTMGR->ApplyOverInfoOptionToAll();//
	}
	else 
	{
		CHATMGR->AddMsg( CTC_SYSMSG, CHATMGR->GetChatMsg(163), m_Party.GetMemberName(pMsg->dwData));
		m_Party.DelMember(pMsg->dwData);		
		CObject* pMember = OBJECTMGR->GetObject( pMsg->dwData );
		OBJECTMGR->ApplyOverInfoOption( pMember );//
	}
	GAMEIN->GetPartyDialog()->RefreshDlg();
}

void CPartyManager::BanPartyMemberResult(MSG_DWORD* pMsg) 
{
	if(pMsg->dwData == HEROID)
	{
//		"[颇萍] 惩 

⌨️ 快捷键说明

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