121 lines
3.5 KiB
C
121 lines
3.5 KiB
C
|
|
#pragma once
|
|||
|
|
/***************************************************************/
|
|||
|
|
/*
|
|||
|
|
/* 队伍子系统
|
|||
|
|
/* 玩家队伍相关的网络消息的处理,各种队伍相关的处理
|
|||
|
|
/* 队伍的一些需要广播的消息也放要放到这里处理
|
|||
|
|
/***************************************************************/
|
|||
|
|
|
|||
|
|
#include <map>
|
|||
|
|
|
|||
|
|
class CTeamSystem:
|
|||
|
|
public CEntitySubSystem<enTeamSystemID,CTeamSystem,CActor>
|
|||
|
|
{
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
typedef CEntitySubSystem<enTeamSystemID,CTeamSystem,CActor> Inherid;
|
|||
|
|
friend class CEntitySubSystem<enTeamSystemID,CTeamSystem,CActor>;
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
*处理网络数据包
|
|||
|
|
*nCmd ,分派到该系统里命令,从0开始
|
|||
|
|
*packet,网络数据
|
|||
|
|
*/
|
|||
|
|
virtual void ProcessNetData(INT_PTR nCmd,CDataPacketReader &packet );
|
|||
|
|
|
|||
|
|
//子系统初始化,如果是玩家需要输入玩家的存盘数据
|
|||
|
|
virtual bool Initialize(void *data,SIZE_T size);
|
|||
|
|
|
|||
|
|
void Destroy();
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Comments: 向队伍里的人广播一条消息,如果没有队伍就提示客户端
|
|||
|
|
* Param void * data: 数据指针
|
|||
|
|
* Param SIZE_T size:数据长度
|
|||
|
|
* @Return void:
|
|||
|
|
*/
|
|||
|
|
void BroadCast(void * data,SIZE_T size);
|
|||
|
|
|
|||
|
|
//进入游戏
|
|||
|
|
virtual void OnEnterGame();
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Comments:角色移动时,广播消息给队友
|
|||
|
|
* @Return void:
|
|||
|
|
*/
|
|||
|
|
void TeamMoveBroadcast( );
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Comments:邀请某人组队
|
|||
|
|
* Param CActor * pMember:
|
|||
|
|
* @Return void:
|
|||
|
|
*/
|
|||
|
|
void InviteJoinTeam( CActor* pMember);
|
|||
|
|
|
|||
|
|
/// 创建队伍
|
|||
|
|
CTeam *CreateTeam(CActor* pMember = nullptr);
|
|||
|
|
int IsAllowTeam() const {return m_nAllowTeam;}
|
|||
|
|
void SetAllowTeam(int type);
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
//错误的消息
|
|||
|
|
void HandleError(CDataPacketReader &packet){};
|
|||
|
|
|
|||
|
|
// 1 邀请加入队伍
|
|||
|
|
void HandleInvite(CDataPacketReader &packet);
|
|||
|
|
|
|||
|
|
// 2 退出队伍
|
|||
|
|
void HandleLeave(CDataPacketReader &packet);
|
|||
|
|
|
|||
|
|
// 3 申请加入队伍
|
|||
|
|
void HandleApplyJoinTeam(CDataPacketReader &packet);
|
|||
|
|
|
|||
|
|
// 4 设置队长
|
|||
|
|
void HandleSetCaptin(CDataPacketReader &packet);
|
|||
|
|
|
|||
|
|
// 5 踢人
|
|||
|
|
void HandleKickMember(CDataPacketReader &packet);
|
|||
|
|
|
|||
|
|
// 6 解散队伍
|
|||
|
|
void HandleDestroyTeam(CDataPacketReader &packet);
|
|||
|
|
|
|||
|
|
// 7 回复申请入队
|
|||
|
|
void HandleApplyJoinTeamReply(CDataPacketReader &packet);
|
|||
|
|
|
|||
|
|
// 8 回复邀请入队
|
|||
|
|
void HandleInviteJoinTeamReply(CDataPacketReader &packet);
|
|||
|
|
|
|||
|
|
// 9 获得附近的队伍信息
|
|||
|
|
void GetNearTeamInfo(CDataPacketReader & packet);
|
|||
|
|
|
|||
|
|
// 10 创建队伍
|
|||
|
|
void AskCreateTeam(CDataPacketReader & packet);
|
|||
|
|
|
|||
|
|
// 11 获得附近的角色信息
|
|||
|
|
void GetNearActorsInfo(CDataPacketReader & packet);
|
|||
|
|
|
|||
|
|
/// 申请加入某个team
|
|||
|
|
void ApplyJoinOneTeam(CTeam* pTeam);
|
|||
|
|
|
|||
|
|
//获取我方组队信息
|
|||
|
|
void GetMyTeamInfo(CDataPacketReader& packet);
|
|||
|
|
|
|||
|
|
void HandleSetIsAllow(CDataPacketReader& packet);
|
|||
|
|
void HandleGetAllowTeamState(CDataPacketReader& packet);
|
|||
|
|
private:
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Comments: 检查是否在队伍里,并且是队长
|
|||
|
|
* Param bool bWithTipmsg:是否需要提示
|
|||
|
|
* @Return CTeam* &: 如果在队伍里,并且是队长,返回 =true,否则为false ,CTeam返回为队伍指针,免得再取一次
|
|||
|
|
*/
|
|||
|
|
bool CheckIsCaptin(CTeam* & pTeam, bool bWithTipmsg = true);
|
|||
|
|
|
|||
|
|
unsigned int nUpdataDt; // 上次刷新时间,防止恶意刷新
|
|||
|
|
unsigned int m_nUpdateActorListDt; // 上次刷新时间,防止恶意刷新
|
|||
|
|
int m_nAllowTeam; //是否开始自动组队
|
|||
|
|
std::map<unsigned int, int> m_NearTeam; // 用来去掉重复的队伍id,附近队伍id
|
|||
|
|
CVector<unsigned int> m_NoTeamActor; // 附近未组队的角色
|
|||
|
|
bool m_nInit; //登录初始化--防止再次添加离线数据
|
|||
|
|
};
|