KPlayerTeam.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:5k
源码类别:

模拟服务器

开发平台:

C/C++

  1. //---------------------------------------------------------------------------
  2. // Sword3 Engine (c) 2002 by Kingsoft
  3. //
  4. // File: KPlayerTeam.h
  5. // Date: 2002.01.06
  6. // Code: 边城浪子
  7. // Desc: Team Class
  8. //---------------------------------------------------------------------------
  9. #ifndef KPLAYERTEAM_H
  10. #define KPLAYERTEAM_H
  11. #include "KPlayerDef.h"
  12. #define MAX_TEAM MAX_PLAYER
  13. #ifdef _SERVER
  14. class KPlayerTeam // 服务器端玩家的组队信息
  15. {
  16. friend class KPlayer;
  17. public:
  18. int m_nFlag; // 标志是否已经组队
  19. int m_nID; // 如果已经组队,队伍的 id
  20. int m_nFigure; // 如果已经组队,player 的身份:TEAM_CAPTAIN TEAM_MEMBER
  21. int m_nApplyCaptainID; // 申请加入的目标队伍的队长的 npc id
  22. int m_nInviteList[MAX_TEAM_MEMBER]; // 邀请玩家加入本队伍列表
  23. int m_nListPos; // 列表当前位置
  24. private:
  25. BOOL m_bCanTeamFlag;
  26. public:
  27. KPlayerTeam() {Release();};
  28. void Release();
  29. BOOL CreateTeam(int nIdx, PLAYER_APPLY_CREATE_TEAM *pCreateTeam);
  30. void InviteAdd(int nIdx, TEAM_INVITE_ADD_COMMAND *pAdd);
  31. void GetInviteReply(int nSelfIdx, int nTargetIdx, int nResult);
  32. void SetCanTeamFlag(int nSelfIdx, BOOL bFlag);
  33. BOOL GetCanTeamFlag() {return m_bCanTeamFlag;};
  34. };
  35. #endif
  36. #ifndef _SERVER
  37. class KTeamApplyList // 申请加入队伍者列表中的申请人信息
  38. {
  39. public:
  40. DWORD m_dwNpcID; // 申请人 npc id
  41. DWORD m_dwTimer; // 申请时间计数器
  42. int m_nLevel; // 申请人等级
  43. char m_szName[32]; // 申请人姓名
  44. public:
  45. KTeamApplyList() {Release();};
  46. void Release() {m_dwNpcID = 0; m_dwTimer = 0; m_nLevel = 0; m_szName[0] = 0;};
  47. }; // 客户端保存在队长 player 身上的队伍申请人列表信息
  48. class KPlayerTeam // 客户端玩家的组队信息
  49. {
  50. public:
  51. int m_nFlag; // 标志是否已经组队
  52. int m_nFigure; // 如果已经组队,player 的身份:TEAM_CAPTAIN TEAM_MEMBER
  53. int m_nApplyCaptainID; // 申请加入的目标队伍的队长的 npc id
  54. DWORD m_dwApplyTimer; // 申请时间计数器(申请多久了,超过时间取消申请)
  55. BOOL m_bAutoRefuseInviteFlag;// 是否自动拒绝别人的加入队伍的邀请 TRUE 自动拒绝   FALSE 手动
  56. KTeamApplyList m_sApplyList[MAX_TEAM_APPLY_LIST]; // 如果为队长,队伍的申请人列表
  57. public:
  58. KPlayerTeam();
  59. void Release();
  60. void ReleaseList();
  61. BOOL ApplyCreate();//char *lpszTeamName); // 申请创建一支队伍
  62. void InviteAdd(DWORD dwNpcID); // 邀请加入队伍
  63. void ReceiveInvite(TEAM_INVITE_ADD_SYNC *pInvite); // 收到邀请
  64. void ReplyInvite(int nIdx, int nResult); // 回复邀请
  65. void SetAutoRefuseInvite(BOOL bFlag); // 设定是否自动拒绝别人的加入队伍的邀请
  66. BOOL GetAutoRefuseState(); // 获得是否自动拒绝别人的加入队伍的邀请状态
  67. int GetInfo(KUiPlayerTeam *pTeam); // 获得自身队伍信息(给界面)
  68. void UpdateInterface(); // 更新界面显示
  69. void DeleteOneFromApplyList(DWORD dwNpcID); // 从申请人列表中删除某个申请人
  70. };
  71. #endif
  72. // 此队伍是否为空通过判断队长 id 来决定,当为 -1 时为空(每个队伍必定有一个队长)
  73. class KTeam
  74. {
  75. private:
  76. int m_nIndex; // 本 Team 在 g_Team 中的位置
  77. public:
  78. int m_nState; // 队伍状态:Team_S_Open Team_S_Close
  79. int m_nCaptain; // 队长 id ,服务器端用 player index ,客户端用 npc id ,-1 为空
  80. int m_nMember[MAX_TEAM_MEMBER]; // 所有队员 id ,服务器端用 player index ,客户端用 npc id ,-1 为空
  81. int m_nMemNum; // 已有队员数量(不包括队长)
  82. #ifndef _SERVER
  83. int m_nMemLevel[MAX_TEAM_MEMBER + 1]; // 队员等级 (第一个队员为队长) (队员升级的时候要通知所有其他队员 not end)
  84. char m_szMemName[MAX_TEAM_MEMBER + 1][32]; // 队员名字 (第一个队员为队长)
  85. DWORD m_nTeamServerID; // 队伍在服务器上的唯一标识
  86. #endif
  87. public:
  88. KTeam(); // 构造函数
  89. void Release(); // 清空
  90. void SetIndex(int nIndex); // 设定 Team 在 g_Team 中的位置
  91. BOOL SetTeamOpen(); // 设定队伍状态:打开(允许接受新成员)
  92. BOOL SetTeamClose(); // 设定队伍状态:关闭(不允许接受新成员)
  93. int CalcCaptainPower(); // 计算队长能统帅队员的人数
  94. int FindFree(); // 寻找队员空位
  95. int FindMemberID(DWORD dwNpcID); // 寻找具有指定npc id的队员(不包括队长)
  96. #ifdef _SERVER
  97. BOOL CreateTeam(int nPlayerIndex);//, char *lpszName);// 创建一支队伍
  98. BOOL AddMember(int nPlayerIndex); // 添加一个队伍成员
  99. BOOL DeleteMember(int nPlayerIndex); // 删除一个队伍成员
  100. BOOL CheckFull(); // 判断队伍是否已经满员
  101. BOOL IsOpen(); // 判断队伍是否是打开状态
  102. BOOL CheckIn(int nPlayerIndex); // 判断某人是否是队伍成员
  103. #endif
  104. #ifndef _SERVER
  105. // 客户端创建一支队伍(客户端只可能存在一支队伍,属于本地玩家)
  106. void CreateTeam(int nCaptainNpcID, char *lpszCaptainName, int nCaptainLevel, DWORD nTeamServerID);
  107. BOOL AddMember(DWORD dwNpcID, int nLevel, char *lpszNpcName);// 添加一个队伍成员
  108. void DeleteMember(DWORD dwNpcID); // 客户端删除一个队伍成员
  109. int GetMemberInfo(KUiPlayerItem *pList, int nCount); // 输出队员信息(按界面的要求,给界面)
  110. #endif
  111. private:
  112. #ifdef _SERVER
  113. BOOL CheckAddCondition(int nPlayerIndex); // 判断加入队伍的属性条件是否合适
  114. #endif
  115. };
  116. extern KTeam g_Team[MAX_TEAM];
  117. #ifdef _SERVER
  118. class KTeamSet
  119. {
  120. public:
  121. void Init(); // 初始化
  122. int CreateTeam(int nPlayerID);//, char *lpszName); // 创建一支队伍
  123. private:
  124. int FindFree(); // 查找 g_Team 中的空位
  125. // BOOL CheckName(char *lpszName); // 判断队名是否可用
  126. };
  127. extern KTeamSet g_TeamSet;
  128. #endif
  129. #endif