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

模拟服务器

开发平台:

C/C++

  1. #ifndef KPlayerH
  2. #define KPlayerH
  3. //#include <objbase.h>
  4. #include "KWorldMsg.h"
  5. #include "KMessage.h"
  6. #include "KInventory.h"
  7. #include "KPlayerFaction.h"
  8. #include "KPlayerChat.h"
  9. #include "KPlayerTask.h"
  10. #include "KPlayerMenuState.h"
  11. #include "KPlayerTrade.h"
  12. #include "KPlayerTeam.h"
  13. #include "KPlayerPK.h"
  14. #include "KPlayerTong.h"
  15. #include "KItemList.h"
  16. #include "KNpc.h"
  17. #include "KSkills.h"
  18. #include "KPlayerDef.h"
  19. #define MAX_ANSWERNUM 50
  20. #define PLAYER_LIFE_REPLENISH 0
  21. #define PLAYER_MANA_REPLENISH 0
  22. #define PLAYER_STAMINA_GAIN 1
  23. #define PLAYER_STAMINA_LOSS 4
  24. #define STRENGTH_SET_DAMAGE_VALUE 5
  25. #define DEXTERITY_SET_DAMAGE_VALUE 5
  26. #define MAX_AVENGE_NUM 4
  27. enum UIInfo //脚本通知显示的界面类型
  28. {
  29. UI_SELECTDIALOG,
  30. UI_TRADEDIALOG,
  31. UI_TALKDIALOG,
  32. UI_NOTEINFO,
  33. UI_MSGINFO,//自右向左冒出来的信息
  34. UI_NEWSINFO,//新闻
  35. UI_PLAYMUSIC,
  36. UI_OPENTONGUI,
  37. };
  38. // 重生点位置信息
  39. typedef struct PLAYER_REVIVAL_POS_DATA
  40. {
  41. int m_nSubWorldID; // 重生点地图
  42. int m_ReviveID; // 重生点索引
  43. int m_nMpsX; // 重生点地图位置 x
  44. int m_nMpsY; // 重生点地图位置 y
  45. } PLAYER_REVIVAL_POS;
  46. typedef struct
  47. {
  48. int m_nSubWorldId; // 传送门世界ID
  49. int m_nTime; // 传送门保持时间
  50. int m_nMpsX;
  51. int m_nMpsY;
  52. } PLAYER_TOWNPORTAL_POS;
  53. typedef struct 
  54. {
  55. DWORD m_dwMapID;
  56. int m_nX;
  57. int m_nY;
  58. } PLAYER_EXCHANGE_POS;
  59. typedef struct
  60. {
  61. int m_nBuyIdx;
  62. DWORD m_SubWorldID;
  63. int m_nMpsX;
  64. int m_nMpsY;
  65. void Clear() {m_nBuyIdx = -1; m_SubWorldID = -1; m_nMpsX = 0; m_nMpsY = 0;}
  66. } BuySellInfo;
  67. class KIniFile;
  68. #ifdef TOOLVERSION
  69. class CORE_API KPlayer
  70. #else
  71. class KPlayer
  72. #endif
  73. {
  74. private:
  75. #ifndef _SERVER
  76. int m_nLeftSkillID;
  77. int m_nLeftSkillLevel;
  78. int m_nRightSkillID;
  79. int m_nRightSkillLevel;
  80. BOOL m_MouseDown[2];
  81. #endif
  82. #ifdef _SERVER
  83. PLAYER_REVIVAL_POS m_sLoginRevivalPos; // 登入重生点位置(会存盘)
  84. PLAYER_REVIVAL_POS m_sDeathRevivalPos; // 死亡重生点(默认为登入重生点,不存盘)
  85. PLAYER_TOWNPORTAL_POS m_sPortalPos; // 传送门位置
  86. BOOL m_bUseReviveIdWhenLogin;
  87. int m_nExtPoint; // 活动点数
  88. int m_nChangeExtPoint; // 变动的点数
  89. #endif
  90. int m_nPhysicsSkillID; //当前玩家的物理攻击技能
  91. int m_nPeapleIdx;
  92. int m_nObjectIdx;
  93. int m_nPickObjectIdx;
  94. int m_nPlayerIndex; // 本实例在 Player 数组中的位置
  95. KCacheNode * m_pLastScriptCacheNode;
  96. public:
  97. #ifdef _SERVER
  98. PLAYER_EXCHANGE_POS m_sExchangePos;
  99. KTimerTaskFun m_TimerTask;
  100. BOOL m_bIsQuiting;
  101. UINT m_uMustSave;
  102. DWORD m_ulLastSaveTime;
  103. DWORD m_dwLoginTime;
  104. // DWORD m_uLastPingTime;
  105. char m_AccoutName[32];
  106. void* m_pStatusLoadPlayerInfo; //加载玩家信息时用
  107. BYTE* m_pCurStatusOffset; //二进制时,记录读到指针位置了
  108. BOOL m_bFinishLoading; //完成加载
  109. BYTE m_SaveBuffer[64 * 1024]; //保存缓冲
  110. int m_nLastNetOperationTime; //最后一次网络操作时间
  111. BOOL m_bSleepMode;
  112. KList m_PlayerWayPointList; //
  113. KList m_PlayerStationList;
  114. int m_nViewEquipTime; // 最后一次察看他人装备的时间
  115. int m_nPrePayMoney;
  116. enum
  117. {
  118. FF_CHAT = 0x01,
  119. };
  120. int m_nForbiddenFlag; // 禁止标志
  121. #endif
  122. #ifndef _SERVER
  123. int m_RunStatus; // 是跑还是走
  124. DWORD m_dwNextLevelLeadExp; // 统率力下一级经验值
  125. int m_nSendMoveFrames; // 用于控制客户端向服务器发送移动(走或跑)协议的频率,使之不能发送大量的移动协议,减小带宽压力
  126. #endif
  127. KIndexNode m_Node;
  128. GUID m_Guid;
  129. BOOL m_bExchangeServer;
  130. int m_DebugMode;
  131. DWORD m_dwID; // 玩家的32位ID
  132. int m_nIndex; // 玩家的Npc编号
  133. int m_nNetConnectIdx; // 第几个网络连接
  134. KItemList m_ItemList; // 玩家的装备列表
  135. BuySellInfo m_BuyInfo; // 进行的交易列表
  136. KPlayerMenuState m_cMenuState; // 是否处于交易或队伍开放状态
  137. KTrade m_cTrade; // 交易模块
  138. int m_nAttributePoint; // 未分配属性点
  139. int m_nSkillPoint; // 未分配技能点
  140. int m_nStrength; // 玩家的基本力量(决定基本伤害)
  141. int m_nDexterity; // 玩家的基本敏捷(决定命中、体力)
  142. int m_nVitality; // 玩家的基本活力(决定生命、体力)
  143. int m_nEngergy; // 玩家的基本精力(决定内力)
  144. int m_nLucky; // 玩家的基本运气(影响得到装备的好坏)
  145. BYTE m_btChatSpecialChannel;
  146. int m_nCurStrength; // 玩家的当前力量(决定基本伤害)
  147. int m_nCurDexterity; // 玩家的当前敏捷(决定命中、体力)
  148. int m_nCurVitality; // 玩家的当前活力(决定生命、体力)
  149. int m_nCurEngergy; // 玩家的当前精力(决定内力)
  150. int m_nCurLucky; // 玩家的当前运气(影响得到装备的好坏)
  151. int m_nExp; // 当前经验值(当前等级在npc身上)
  152. int m_nNextLevelExp; // 下一级经验值
  153. DWORD m_dwLeadExp; // 统率力经验值
  154. DWORD m_dwLeadLevel; // 统率力等级
  155. char m_PlayerName[32];
  156. KPlayerTeam m_cTeam; // 玩家的组队信息
  157. KPlayerFaction m_cFaction; // 玩家的门派信息
  158. KPlayerChat m_cChat;
  159. KPlayerTask m_cTask; // 玩家任务系统(变量)
  160. KPlayerPK m_cPK; // PK关系处理
  161. KPlayerTong m_cTong; // 自己的帮会信息
  162. DWORD m_dwDeathScriptId; // 
  163. char m_szTaskAnswerFun[MAX_ANSWERNUM][32];
  164. int m_nAvailableAnswerNum;//当前选择界面下,最大回答数。
  165. bool m_bWaitingPlayerFeedBack; //当前是否正等待玩家在客户端的反馈。该状态下,当前脚本不置空.类式对话选择情况
  166. // DWORD m_dwOutOfDateFeedBackTime; //当前等待玩家与服务器脚本交互的最大限定时刻,到了这个游戏时间如果玩家仍未反馈则视作废。
  167. BYTE m_btTryExecuteScriptTimes; //
  168. //char m_CurScriptName[128];
  169. int m_nWorldStat;
  170. int m_nSectStat;
  171. public:
  172. KPlayer();
  173. ~KPlayer();
  174. void SetPlayerIndex(int nNo); // 设定 m_nPlayerIndex
  175. void GetAboutPos(KMapPos *pMapPos); // 获得玩家附近一个空位置
  176. int GetPlayerIndex(); // 获得本实例在 Player 数组中的位置
  177. DWORD GetPlayerID(){return m_dwID;};
  178. void GetFactionName(char *lpszName, int nSize); // 获得当前门派名称 not end
  179. void ChatFriendOnLine(DWORD dwID, int nFriendIdx);// 获得通知某好友上线了
  180. BOOL ExecuteScript(char * ScriptFileName, char * szFunName, int nParam = 0);
  181. BOOL ExecuteScript(char * ScriptFileName, char * szFunName, char * szParams);
  182. BOOL ExecuteScript(DWORD dwScriptId, char * szFunName, char *  szParams);
  183. BOOL ExecuteScript(DWORD dwScriptId,  char * szFunName, int nParam);
  184. BOOL DoScript(char * ScriptCommand); //执行某个脚本指令
  185. void ChangeCurStrength(int nData); // 改变当前力量(当 nData 小于 0 时,减少)
  186. void ChangeCurDexterity(int nData); // 改变当前敏捷(当 nData 小于 0 时,减少)
  187. void ChangeCurVitality(int nData); // 改变当前活力(当 nData 小于 0 时,减少)
  188. void ChangeCurEngergy(int nData); // 改变当前精力(当 nData 小于 0 时,减少)
  189. BOOL ExecuteScript(char * ScriptFileName);
  190. void Release();
  191. void Active(); // 玩家每次游戏循环都需要处理的东西
  192. void ProcessMsg(KWorldMsgNode *lpMsg); // 处理世界消息,转为NPC命令
  193. LPSTR GetPlayerName() { return m_PlayerName; };
  194. BOOL NewPlayerGetBaseAttribute(int Series); // 新玩家登陆时根据五行属性产生 力量 敏捷 活力 精力 四项数值
  195. void AddBaseLucky(int nData); // 增加基本运气
  196. void AddExp(int nExp, int nTarLevel); // 增加经验(原始数据,还未经过处理)
  197. void AddSelfExp(int nExp, int nTarLevel); // 增加经验(不需要再经过队伍分配的处理,但需要考虑被砍死npc的等级)
  198. void DirectAddExp(int nExp); // 直接增加经验值,不考虑其他因素
  199. void LevelUp(); // 升一级
  200. void AddLeadExp(int nExp); // 增加统率力经验
  201. void UpdataCurData();
  202. void ReCalcEquip(); // 重新计算身上的装备
  203. void ReCalcState(); // 重新计算身上的状态
  204. void ChangePlayerCamp(int nCamp); // 改变玩家阵营
  205. void Revive(int nType); // 重生
  206. BOOL CheckTrading();
  207. void SetFirstDamage();
  208. void SetBaseAttackRating();
  209. void SetBaseDefence();
  210. void SetBaseResistData();
  211. void SetBaseSpeedAndRadius();
  212. int GetPhysicsSkillId(){return m_nPhysicsSkillID;};
  213. void SetPhysicsSkillId(int nPhysicsSkillID)
  214. {
  215. if (nPhysicsSkillID <= 0) return ;
  216. ISkill * pISkill =  g_SkillManager.GetSkill(nPhysicsSkillID, 1);
  217. if (!pISkill) 
  218.             return ;
  219.         if (nPhysicsSkillID > 0 && pISkill->IsPhysical())
  220. m_nPhysicsSkillID = nPhysicsSkillID;
  221. };
  222. #ifndef _SERVER
  223. int GetTargetNpc() { return m_nPeapleIdx; };
  224. int GetTargetObj() { return m_nObjectIdx; };
  225. void SetTargetNpc(int n) { m_nPeapleIdx = n; };
  226. void SetTargetObj(int n) { m_nObjectIdx = n; };
  227. void FindSelectNpc(int x, int y, int nRelation);
  228. void FindSelectObject(int x, int y);
  229. void Walk(int nDir, int nSpeed);
  230. void TurnLeft();
  231. void TurnRight();
  232. void TurnBack();
  233. void DrawSelectInfo();
  234. BOOL ConformIdx(int nIdx);
  235. void GetEchoDamage(int* nMin, int* nMax, int nType);// 获取界面需要显示的伤害值
  236. void ProcessInputMsg(UINT uMsg, WPARAM wParam, LPARAM lParam);// 处理键盘鼠标消息
  237. void RecvSyncData(); // 接收同步数据
  238. void ApplyTeamInfo(DWORD dwNpcID); // 向服务器申请查询某个npc所在队伍的信息
  239. void ApplySelfTeamInfo(); // 向服务器申请查询玩家自身的队伍情况
  240. BOOL ApplyCreateTeam();//char *lpszTeamName); // 玩家向服务器申请创建队伍
  241. BOOL ApplyTeamOpenClose(BOOL bFlag); // 队长向服务器申请开放、关闭队伍是否允许加入成员状态
  242. void ApplyAddTeam(int nNpcIndex); // 玩家向服务器申请加入某个队伍
  243. void AcceptTeamMember(DWORD dwNpcID); // 玩家通知服务器接受某个npc为队伍成员
  244. void TeamDropApplyOne(DWORD dwNpcID); // 队长删除加入队伍申请列表中的某个npc
  245. void LeaveTeam(); // 通知服务器本玩家离开队伍
  246. void TeamKickMember(DWORD dwNpcID); // 队长通知服务器踢除某个队员
  247. void ApplyTeamChangeCaptain(DWORD dwNpcID); // 队长向服务器申请把自己的队长身份交给别的队员
  248. void ApplyTeamDismiss(); // 队长向服务器申请解散队伍
  249. void ApplySetPK(BOOL bPK); // 玩家向服务器申请打开、关闭pk开关
  250. void ApplyFactionData(); // 玩家向服务器申请门派数据
  251. void SendChat(KUiMsgParam *pMsg, char *lpszSentence);// 客户端发送聊天语句给服务器
  252. void ApplyAddBaseAttribute(int nAttribute, int nNo);// 队长向服务器申请增加四项属性中某一项的点数(0=Strength 1=Dexterity 2=Vitality 3=Engergy)
  253. BOOL ApplyAddSkillLevel(int nSkillID, int nAddPoint);// 向服务器申请某个技能升级
  254. BOOL ApplyUseItem(int nItemID, ItemPos SrcPos); // 向服务器申请使用某个物品(鼠标右键点击该物品)
  255. void PickUpObj(int nObjIndex); // 客户端鼠标点击obj检起某个物品,向服务器发消息
  256. void ObjMouseClick(int nObjIndex); // 客户端鼠标点击obj,向服务器发消息
  257. void MoveItem(ItemPos DownPos, ItemPos UpPos); // DownPos 不能是手,UpPos 必须是手
  258. int ThrowAwayItem();
  259. void ChatAddFriend(int nPlayerIdx); // 客户端通过别人的添加聊天好友的申请
  260. void ChatRefuseFriend(int nPlayerIdx); // 客户端拒绝别人的添加聊天好友的申请
  261. void TradeApplyOpen(char *lpszSentence, int nLength);
  262. void TradeApplyClose();
  263. void TradeApplyStart(int nNpcIdx);
  264. BOOL TradeMoveMoney(int nMoney); // 交易时输入自己的钱
  265. void TradeDecision(int nDecision); // if nDecision == 0 推出交易  if nDecision == 1 确定交易  if nDecision == 2 取消交易确定
  266. void TradeApplyLock(int nLockOrNot); // 交易锁定或取消锁定
  267. void SetChatCurChannel(int nChannelNo); // 设定当前聊天频道
  268. void TeamInviteAdd(DWORD dwNpcID); // 邀请加入队伍
  269. void SetLeftSkill(int nSkillID);
  270. void SetRightSkill(int nSkillID);
  271. void UpdateWeaponSkill();
  272. int GetLeftSkill(){return m_nLeftSkillID;};
  273. int GetRightSkill(){return m_nRightSkillID;};
  274. void SetDefaultImmedSkill();
  275. void s2cApplyAddTeam(BYTE* pProtocol); // 收到服务器通知有人申请加入队伍
  276. void s2cTradeChangeState(BYTE* pMsg);
  277. void s2cTradeMoneySync(BYTE* pMsg);
  278. void s2cTradeDecision(BYTE* pMsg); // 收到服务器通知交易完成或取消
  279. void SyncCurPlayer(BYTE* pMsg);
  280. void s2cLevelUp(BYTE* pMsg);
  281. void s2cGetCurAttribute(BYTE* pMsg);
  282. void s2cSetExp(int nExp);
  283. void s2cSyncMoney(BYTE* pMsg);
  284. void s2cTradeApplyStart(BYTE* pMsg);
  285. void CheckObject(int nIdx);
  286. #endif
  287. #ifdef _SERVER
  288. void SetExtPoint(int nPoint, int nChangePoint);
  289. int GetExtPoint();
  290. BOOL PayExtPoint(int nPoint);
  291. int GetExtPointChanged();
  292. void RepairItem(DWORD dwItemID);
  293. BOOL PrePay(int nMoney);
  294. void SetLastNetOperationTime(int nTime);
  295. int FindAroundPlayer(DWORD dwNpcID); // 寻找玩家周围的某个指定npc id的player index
  296. int FindAroundNpc(DWORD dwNpcID); // 寻找玩家周围的某个指定npc id的npc index
  297. BOOL CheckPlayerAround(int nPlayerIdx); // 判断某玩家是否在周围
  298. BOOL IsExchangingServer();
  299. void TobeExchangeServer(DWORD dwMapID, int nX, int nY);
  300. // void UpdateEnterGamePos(DWORD dwSubWorldID, int nX, int nY, int nFightMode);
  301. BOOL IsWaitingRemove();
  302. BOOL IsLoginTimeOut();
  303. void WaitForRemove();
  304. void LoginTimeOut();
  305. void UseTownPortal();
  306. void BackToTownPortal();
  307. void GetLoginRevivalPos(int *lpnSubWorld, int *lpnMpsX, int *lpnMpsY); // 获取玩家登入重生点位置
  308. void GetDeathRevivalPos(int *lpnSubWorld, int *lpnMpsX, int *lpnMpsY); // 获取玩家死亡重生点位置
  309. void SetRevivalPos(int nSubWorld, int nRevalId); // 设定玩家重生点ID
  310. BOOL Save(); // 保存玩家数据
  311. BOOL CanSave();
  312. void ProcessUser();
  313. BOOL SendSyncData(int &nStep, unsigned int &nParam); // 发送同步数据
  314. BOOL SendSyncData_Skill(); // 发送同步数据 - 技能
  315. void SendCurNormalSyncData(); // 发送平时给自己的同步数据
  316. void SetChatForbiddenFlag(int nFlag)
  317. {
  318. m_nForbiddenFlag = nFlag;
  319. };
  320. BOOL AddFaction(char *lpszFactionName); // 加入门派
  321. BOOL AddFaction(int nFactionID); // 加入门派
  322. BOOL LeaveCurFaction(); // 离开门派
  323. BOOL CurFactionOpenSkill(int nLevel); // 开放当前门派某个等级的技能
  324. void TaskClearTempVal(); // 清空任务临时变量
  325. int TaskGetSaveVal(int nNo); // 得到任务完成情况
  326. void TaskSetSaveVal(int nNo, BOOL bFlag); // 设定任务完成情况
  327. int TaskGetClearVal(int nNo); // 得到任务临时过程控制变量值
  328. void TaskSetClearVal(int nNo, int nVal); // 设定任务临时过程控制变量值
  329. //void SetTimeTaskTime(DWORD time){m_dwTimeTaskTime = time;};
  330. void BuyItem(BYTE* pProtocol);
  331. void SellItem(BYTE* pProtocol);
  332. void QuitGame(int nQuitType); // 退出游戏
  333. void S2CSendTeamInfo(BYTE* pProtocol); // 收到客户端查询某个npc组队信息的申请后,向这个客户端发送队伍信息
  334. void SendSelfTeamInfo(); // 服务器向客户端发送队伍信息
  335. BOOL CreateTeam(BYTE* pProtocol); // 收到客户端请求创建一支队伍
  336. BOOL SetTeamState(BYTE* pProtocol); // 收到客户端请求开放、关闭本player队伍是否允许队员加入状态
  337. BOOL S2CSendAddTeamInfo(BYTE* pProtocol); // 收到客户端请求加入一支队伍
  338. BOOL AddTeamMember(BYTE* pProtocol); // 队长通知服务器接受某个npc为队伍成员
  339. void LeaveTeam(BYTE* pProtocol); // 收到客户端队员通知离开队伍
  340. void TeamKickOne(BYTE* pProtocol); // 收到客户端队长通知踢出某个队员
  341. void TeamChangeCaptain(BYTE* pProtocol); // 收到客户端队长通知把队长身份交给某个队员
  342. void TeamDismiss(BYTE* pProtocol); // 收到客户端队长请求解散队伍
  343. void SetPK(BYTE* pProtocol); // 收到客户端请求设定PK状态
  344. void SendFactionData(BYTE* pProtocol); // 收到客户端请求获得门派数据
  345. void ServerSendChat(BYTE* pProtocol); // 收到客户端发来的聊天语句
  346. void AddBaseAttribute(BYTE* pProtocol); // 收到客户端要求增加基本属性点(0=Strength 1=Dexterity 2=Vitality 3=Engergy)
  347. void AddSkillPoint(BYTE* pProtocol); // 收到客户端要求增加某个技能的点数
  348. BOOL ServerPickUpItem(BYTE* pProtocol); // 收到客户端消息鼠标点击某个obj拣起装备或金钱
  349. void EatItem(BYTE* pProtocol); // 收到客户端消息吃药
  350. void ServerMoveItem(BYTE* pProtocol); // 收到客户端消息移动物品
  351. void ServerThrowAwayItem(BYTE* pProtocol); // 收到客户端消息丢弃物品
  352. void ChatSetTakeChannel(BYTE* pProtocol); // 收到客户端消息设定聊天订阅频道
  353. void ChatTransmitApplyAddFriend(BYTE* pProtocol);// 收到客户端请求转发聊天添加好友信息
  354. BOOL ChatAddFriend(BYTE* pProtocol); // 收到客户端消息添加聊天好友
  355. void ChatRefuseFriend(BYTE* pProtocol); // 收到客户端消息拒绝添加聊天好友
  356. void ChatResendAllFriend(BYTE* pProtocol);
  357. void ChatSendOneFriendData(BYTE* pProtocol);
  358. void ChatDeleteFriend(BYTE* pProtocol); // 收到客户端申请删除某个聊天好友
  359. void ChatRedeleteFriend(BYTE* pProtocol); // 收到客户端申请再次删除某个聊天好友
  360. void TradeApplyOpen(BYTE* pProtocol); // 收到客户端申请进入待交易状态
  361. void TradeApplyClose(BYTE* pProtocol); // 收到客户端申请取消待交易状态
  362. void TradeApplyStart(BYTE* pProtocol); // 收到客户端申请开始交易
  363. void TradeMoveMoney(BYTE* pProtocol); // 收到客户端申请交易中money的改变
  364. void TradeDecision(BYTE* pProtocol); // 收到客户端申请交易确定或取消
  365. void c2sTradeReplyStart(BYTE* pProtocol);
  366. void SyncTradeState(); // 给交易双方的客户端发送交易状态信息
  367. void SendEquipItemInfo(int nTargetPlayer); // 发送自己装备在身上的装备信息给别人看
  368. PLAYER_REVIVAL_POS* GetDeathRevivalPos() 
  369. {
  370. return &m_sDeathRevivalPos;
  371. };
  372. BOOL IsUseReviveIdWhenLogin() { return m_bUseReviveIdWhenLogin; };
  373. void SetLoginType(BOOL bUseReviveId) { m_bUseReviveIdWhenLogin = bUseReviveId; };
  374. BOOL CreateTong(int nCamp, char *lpszTongName);
  375. #endif
  376. private:
  377. // void CalcCurStrength(); // 计算当前力量
  378. // void CalcCurDexterity(); // 计算当前敏捷
  379. // void CalcCurVitality(); // 计算当前活力
  380. // void CalcCurEngergy(); // 计算当前精力
  381. void CalcCurLucky(); // 计算当前运气
  382. void LevelAddBaseLifeMax(); // 等级升一级后增加最大生命点
  383. void LevelAddBaseManaMax(); // 等级升一级后增加最大内力点
  384. void LevelAddBaseStaminaMax(); // 等级升一级后增加最大体力点
  385. void SendFactionData(); // 向客户端发送门派数据
  386. void AddBaseStrength(int nData); // 增加基本力量
  387. void AddBaseDexterity(int nData); // 增加基本敏捷
  388. void AddBaseVitality(int nData); // 增加基本活力
  389. void AddBaseEngergy(int nData); // 增加基本精力
  390. void SetNpcPhysicsDamage(); // 由当前力量计算对应npc的物理伤害(PhysicsDamage)
  391. void SetNpcAttackRating(); // 由当前敏捷计算对应npc的攻击命中率(AttackRating)
  392. void SetNpcDefence(); // 由当前敏捷计算对应npc的防御力
  393. // void SetNpcWalkSpeed(); // 由当前敏捷计算对应npc的行走速度
  394. // void SetNpcRunSpeed(); // 由当前敏捷计算对应npc的跑步速度
  395. #ifndef _SERVER
  396. void ProcessMouse(int x, int y, int Key, MOUSE_BUTTON nButton);
  397. void OnButtonUp(int x,int y,MOUSE_BUTTON nButton); // 处理鼠标键抬起
  398. void OnButtonDown(int x,int y,int Key,MOUSE_BUTTON nButton); // 处理鼠标键按下
  399. void OnButtonMove(int x,int y,int Key,MOUSE_BUTTON nButton); // 处理鼠标键按下后移动
  400. void OnMouseMove(int x,int y); // 处理鼠标移动
  401. int NetCommandPlayerTalk(BYTE* pProtocol);
  402. //Question:为单机测试版使用
  403. friend LuaInitStandAloneGame(Lua_State * L);
  404. #endif
  405. // 豆豆的东西
  406. private:
  407. void S2CExecuteScript(char * ScriptName, char * szParam);
  408. #ifdef _SERVER
  409. //数据库模块函数-----------------
  410. private:
  411. int LoadPlayerBaseInfo(BYTE * pRoleBuffer, BYTE * &pRoleBaseBuffer, unsigned int &nParam );
  412. int LoadPlayerItemList(BYTE * pRoleBuffer, BYTE * &pItemBuffer, unsigned int &nParam );
  413. int LoadPlayerFightSkillList(BYTE * pRoleBuffer, BYTE * &pSkillBuffer, unsigned int &nParam);
  414. int LoadPlayerLifeSkilllList(BYTE * pRoleBuffer, BYTE * &pSkillBuffer, unsigned int &nParam);
  415. int LoadPlayerFriendList(BYTE * pRoleBuffer, BYTE * &pFriendBuffer, unsigned int &nParam);
  416. int LoadPlayerTaskList(BYTE * pRoleBuffer, BYTE * &pTaskBuffer, unsigned int &nParam);
  417. int SavePlayerBaseInfo(BYTE * pRoleBuffer);
  418. int SavePlayerItemList(BYTE * pRoleBuffer);
  419. int SavePlayerFightSkillList(BYTE * pRoleBuffer);
  420. int SavePlayerLifeSkilllList(BYTE * pRoleBuffer);
  421. int SavePlayerFriendList(BYTE * pRoleBuffer);
  422. int SavePlayerTaskList(BYTE * pRoleBuffer);
  423. #endif
  424. public:
  425. void SetNpcDamageAttrib();
  426. void DoScriptAction(PLAYER_SCRIPTACTION_SYNC * pUIInfo); //通知该客户端显示某个UI界面
  427. void ProcessPlayerSelectFromUI(BYTE* pProtocol); // 处理当玩家从选择菜单选择某项时的操作
  428. #ifndef _SERVER
  429. void DialogNpc(int nIndex);
  430. void OnSelectFromUI(PLAYER_SELECTUI_COMMAND * pSelectUI, UIInfo eUIInfo);//当玩家从选择框中选择某项后,将向服务器发送
  431. void OnScriptAction(PLAYER_SCRIPTACTION_SYNC * );
  432. #endif
  433. #ifdef _SERVER
  434. void RestoreLiveData(); //重生后恢复玩家的基本数据
  435. void SetTimer(DWORD nTime, int nTimeTaskId);//时间任务脚本,开启计时器
  436. void CloseTimer(); //关闭时间计时器
  437. int AddDBPlayer(char * szPlayerName, int sex, DWORD * pdwID );
  438. int LoadDBPlayerInfo(BYTE * pPlayerInfo,  int &nStep, unsigned int &nParam);
  439. BOOL GetNewPlayerFromIni(KIniFile * pIniFile, BYTE * pRoleBuffer);
  440. int UpdateDBPlayerInfo(BYTE * pPlayerInfo);
  441. int DeletePlayer(char * szPlayerName = NULL);//注意:本函数是清除玩家帐号!!!,不能乱用
  442. void LaunchPlayer();
  443. BOOL Pay(int nMoney);
  444. BOOL Earn(int nMoney);
  445. void DialogNpc(BYTE * pProtocol);
  446. int AddTempTaskValue(void* pData);
  447. #endif
  448. };
  449. #ifdef TOOLVERSION
  450. extern CORE_API KPlayer Player[MAX_PLAYER];
  451. #else
  452. extern KPlayer Player[MAX_PLAYER];
  453. #endif
  454. #endif //KPlayerH