📄 partymanager.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 + -