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

模拟服务器

开发平台:

C/C++

  1. /*****************************************************************************************
  2. // 存档角色选择
  3. // Copyright : Kingsoft 2002
  4. // Author :   Wooy(Wu yue)
  5. // CreateTime: 2002-9-12
  6. // ■■估计此模块代码量600-800行,尚需工时8-12小时。■■
  7. ------------------------------------------------------------------------------------------
  8. 此模块用于获取玩家已经拥有的角色的信息,并可以进行添加/删除/载入角色等操作。
  9. 应为此模块将连接服务器执行操作,所以调用方法LoadData、NewCharacter、DeleteCharacter、
  10. SelCharacter,立即返回的都是(整数表示的布尔值)表示发送操作请求是否成功(0值表示失败,非0值
  11. 表示成功),而不是操作的实际结果。通过GetLastActionResult方法可以知道最后一次操作的执行结果。
  12. 关于此模块的状态:
  13. 1 模块初始的时候是'空闲'状态(SSC_S_IDLE)。
  14. 2 调用LoadData方法请求载入存档角色数据,载入角色数据时处于'载入角色数据中'状态(SSC_S_LOADING_DATA),
  15. 如果成功则切换为'角色已经载入'状态(SSC_S_STANDBY),如果失败则返回'空闲'状态(SSC_S_IDLE)。
  16. 3 处于SSC_S_STANDBY状态的时候可以执行NewCharacter、DeleteCharacter、SelCharacter操作。
  17. 4 成功执行NewCharacter后转入'正在新建角色'状态(SSC_S_CREATING_CHARACTER),操作结束后,
  18. 无论成功与否都转入SSC_S_STANDBY状态。操作的执行结果通过GetLastActionResult方法获得。
  19. 5 成功执行DeleteCharacter后转入'正在删除角色'状态(SSC_S_DELETING_CHARACTER),操作结束后,
  20. 无论成功与否都转入SSC_S_STANDBY状态。操作的执行结果通过GetLastActionResult方法获得。
  21. 6 成功执行SelCharacter后转入'把角色载入游戏中'状态(SSC_S_LOADING_CHARACTER),操作结束后,
  22. 成功则转入'角色已经成功载入游戏'状态(SSC_S_LOAD_CHARACTER_LOADED),失败泽转入SSC_S_STANDBY
  23. 状态。
  24. *****************************************************************************************/
  25. #pragma once
  26. #include "../../NetConnect/NetConnectAgent.h"
  27. #ifndef MAX_PLAYER_PER_ACCOUNT
  28. #define MAX_PLAYER_PER_ACCOUNT 3
  29. #endif
  30. //=====================================
  31. // KSelSavedCharacter的状态定义
  32. //=====================================
  33. enum SSC_STATUS
  34. {
  35. SSC_S_IDLE = 0, //空闲状态
  36. SSC_S_LOADING_DATA, //载入角色数据中
  37. SSC_S_STANDBY, //角色已经载入
  38. SSC_S_LOADING_CHARACTER, //把角色载入游戏中
  39. SSC_S_LOAD_CHARACTER_LOADED, //角色已经成功载入游戏
  40. SSC_S_CREATING_CHARACTER, //正在新建角色
  41. SSC_S_DELETING_CHARACTER, //正在删除角色
  42. };
  43. //=====================================
  44. // KSelSavedCharacter的操作返回结果
  45. //=====================================
  46. enum SSC_RESULT
  47. {
  48. SSC_R_IN_PROGRESS = 0, //操作执行中
  49. SSC_R_NOTHING, //操作完毕,没有变化
  50. SSC_R_UPDATE, //更新
  51. SSC_R_INVALID_ROLENAME, //新建的角色的名字不合法或以存在
  52. SSC_R_CREATE_ROLE_SUCCEED,//创建角色成功
  53. SSC_R_START_GAME, //开始游戏
  54. SSC_R_SVR_DOWN, //找不到有效的服务器
  55. SSC_R_FAILED, //失败
  56. };
  57. //=====================================
  58. // 新建角色时需要的角色相关信息结构
  59. //=====================================
  60. struct KNewCharacterInfo
  61. {
  62. char Name[32]; //姓名
  63. unsigned char Gender; //性别 be one of the SSC_CHARACTER_GENDER value
  64. unsigned char Attribute; //五行属性
  65. union
  66. {
  67. unsigned short NativePlaceId; //出生地ID
  68. short nLevel; //等级
  69. };
  70. };
  71. class KSelSavedCharacter
  72. {
  73. public:
  74. KSelSavedCharacter(); //构造函数
  75. ~KSelSavedCharacter(); //析构函数
  76. void AcceptNetMsg(void* pMsgData);//接受网络消息
  77. int LoadData(); //开始载入角色数据
  78. int GetStatus(); //返回值为梅举SSC_STATUS的取值之一,返回值含义请看相关的值声明
  79. void SetLastActionResult(int nResult); //设置最后一次操作的返回结果
  80. int GetLastActionResult(); //得到最后一次操作的返回结果
  81. int GetCharacterNum(); //获取角色的数目
  82. int GetCharacterInfo(int nIndex, KNewCharacterInfo* pInfo); //获取某个角色的信息
  83. int NewCharacter(KNewCharacterInfo* pData); //请求新建一个角色
  84. int DeleteCharacter(int nIndex, const char* pszPassword); //请求删除一个角色
  85. int SelCharacter(int nIndex); //选择某个角色
  86. void FreeData(); //释放角色数据
  87. void SetCharacterBaseInfo(int nNum, const RoleBaseInfo *pInfo);
  88. void SetAccountName(const char* pAccount);
  89. private:
  90. SSC_STATUS m_Status;
  91. RoleBaseInfo m_BaseInfo[MAX_PLAYER_PER_ACCOUNT];
  92. int m_nNumCharacter; //角色的数目
  93. unsigned int m_nRequestTime; //发出情求的时间
  94. int m_nLastOperResult; //上次的操作返回结果
  95. char m_AccountName[32];
  96. char m_szProcessingRoleName[32];
  97. };