📄 partymanager.cpp
字号:
#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 + -