ObjectEngine.h
上传用户:tt_chan
上传日期:2009-12-03
资源大小:4523k
文件大小:10k
源码类别:

模拟服务器

开发平台:

Visual C++

  1. #pragma once
  2. #include "../def/_orzex/queue.h"
  3. #define DEFSPEED 14
  4. #define _CHAT_COLOR1 0 //RGB(  0,   0,   0); // 捧苞祸.
  5. #define _CHAT_COLOR2 1 //RGB( 10,  10,  10); // 八沥祸.
  6. #define _CHAT_COLOR3 2 //RGB(255, 255, 255); // 闰祸.
  7. #define _CHAT_COLOR4 3 //RGB(255,   0,   0); // 弧碍.
  8. #define _CHAT_COLOR5 4 //RGB(  0, 255,   0); // 踌祸.
  9. #define _CHAT_COLOR6 5 //RGB(  0,   0, 255); // 仟弗祸
  10. #define _CHAT_COLOR7 6 //RGB(255, 255,   0); // 畴尔祸.
  11. #define _CHAT_COLOR8 7 //RGB(255, 128,   0); // 林炔祸
  12. #define DR_UP 0
  13. #define DR_UPRIGHT 1
  14. #define DR_RIGHT 2
  15. #define DR_DOWNRIGHT 3
  16. #define DR_DOWN 4
  17. #define DR_DOWNLEFT 5
  18. #define DR_LEFT 6
  19. #define DR_UPLEFT 7
  20. #define _DOOR_NOT 0
  21. #define _DOOR_OPEN 1
  22. #define _DOOR_MAPMOVE_FRONT 2
  23. #define _DOOR_MAPMOVE_BACK 3
  24. // Status
  25. #define MAX_STATUS_ATTRIBUTE 12
  26. #define POISON_DECHEALTH 0
  27. #define POISON_DAMAGEARMOR 1
  28. #define POISON_LOCKSPELL 2
  29. #define POISON_DONTMOVE 4
  30. #define POISON_STONE 5
  31. #define STATE_TRANSPARENT 8
  32. #define STATE_DEFENCEUP 9
  33. #define STATE_MAGDEFENCEUP 10
  34. #define STATE_BUBBLEDEFENCEUP 11
  35. #define STATE_STONE_MODE 0x00000001;
  36. #define STATE_OPENHEATH 0x00000002;  //眉仿 傍俺惑怕
  37. class CCharObject;
  38. class CMirMap;
  39. class CUserInfo;
  40. typedef struct tag_TPROCESSMSG
  41. {
  42. WORD wIdent;
  43. WORD wParam;
  44. DWORD lParam1;
  45. DWORD lParam2;
  46. DWORD lParam3;
  47. DWORD dwDeliveryTime;
  48. CCharObject* pCharObject;
  49. char *pszData;
  50. } _TPROCESSMSG, *_LPTPROCESSMSG;
  51. /*
  52. */
  53. #define _OBJECT_HUMAN 1
  54. #define _OBJECT_MONSTER 2
  55. #define _OBJECT_ANIMAL 6
  56. #define _OBJECT_NPC 8
  57. typedef struct tag_TOBJECTFEATURE
  58. {
  59. BYTE btGender;
  60. BYTE btWear;
  61. BYTE btHair;
  62. BYTE btWeapon;
  63. } _TOBJECTFEATURE, _LPTOBJECTFEATURE;
  64. typedef struct tag_TOBJECTFEATUREEX
  65. {
  66. BYTE btHorse;
  67. WORD dwHairColor;
  68. WORD dwWearColor;
  69. } _TOBJECTFEATUREEX, _LPTOBJECTFEATUREEX;
  70. class CVisibleObject
  71. {
  72. public:
  73. int nVisibleFlag;
  74. CCharObject* pObject;
  75. };
  76. class CVisibleEvent
  77. {
  78. public:
  79. int nVisibleFlag;
  80. CEvent* pEvent;
  81. };
  82. class CVisibleMapItem
  83. {
  84. public:
  85. int nVisibleFlag;
  86. WORD wX;
  87. WORD wY;
  88. CMapItem* pMapItem;
  89. };
  90. #pragma pack(1)
  91. class CObjectAbility
  92. {
  93. public:
  94. BYTE Level;
  95. WORD HP;
  96. WORD MP;
  97.     WORD MaxHP;
  98.     WORD MaxMP;
  99. WORD Weight;
  100.     WORD MaxWeight;
  101.     
  102. DWORD Exp;
  103. DWORD MaxExp;
  104. BYTE WearWeight;
  105. BYTE MaxWearWeight;
  106.     BYTE HandWeight;
  107.     BYTE MaxHandWeight;
  108. WORD DC;
  109.     WORD MC;
  110.     WORD SC;
  111.     WORD AC;
  112.     WORD MAC;
  113. WORD m_wWater;
  114. WORD m_wFire;
  115. WORD m_wWind;
  116. WORD m_wLight;
  117. WORD m_wEarth;
  118. };
  119. class CObjectAddAbility // 酒捞袍 馒侩栏肺 疵绢唱绰 瓷仿摹
  120. {
  121. public:
  122. WORD HP;
  123. WORD MP;
  124. WORD HIT;
  125. WORD SPEED;
  126. WORD AC;
  127. WORD MAC;
  128. WORD DC;
  129. WORD MC;
  130. WORD SC;
  131. WORD AntiPoison;
  132. WORD PoisonRecover;
  133. WORD HealthRecover;
  134. WORD SpellRecover;
  135. WORD AntiMagic; //付过 雀乔啦
  136. BYTE Luck; //青款 器牢飘
  137. BYTE UnLuck; //阂青 器牢飘
  138. BYTE WeaponStrong;
  139. short HitSpeed;
  140. };
  141. #pragma pack(8)
  142. class CCharObject
  143. {
  144. public:
  145. CUserInfo* m_pUserInfo;
  146. CWHQueue m_ProcessQ;
  147. CWHQueue m_DelayProcessQ;
  148. int m_nCurrX;
  149. int m_nCurrY;
  150. int m_nDirection;
  151. int m_nEvent;
  152. BYTE m_btLight;
  153. _TOBJECTFEATURE m_tFeature;
  154. _TOBJECTFEATUREEX m_tFeatureEx;
  155. CMirMap* m_pMap;
  156. WORD m_wObjectType;
  157. CWHList<CVisibleObject*> m_xVisibleObjectList;
  158. CWHList<CVisibleMapItem*> m_xVisibleItemList;
  159. CWHList<CVisibleEvent*> m_xVisibleEventList;
  160. CWHList<CCharObject*> m_xCacheObjectList;
  161. DWORD m_dwCacheTick;
  162. int m_nViewRange;
  163. DWORD m_dwSearchTime;
  164. DWORD m_dwSearchTick;
  165. DWORD m_dwLatestHitTime;
  166. UINT m_nHitTimeOverCount;
  167. char m_szName[14];
  168. CObjectAbility m_Ability;
  169. CObjectAbility m_WAbility;
  170. CObjectAddAbility m_AddAbility;
  171. UINT m_nCharStatusEx;
  172. UINT m_nCharStatus;
  173. short m_sHitSpeed;
  174. int m_nHitDouble;
  175. DWORD m_dwWalkTime;
  176. WORD m_wStatusArr[MAX_STATUS_ATTRIBUTE];
  177. DWORD m_dwStatusTime[MAX_STATUS_ATTRIBUTE];
  178. BYTE m_btHitPlus;
  179. BYTE m_btAntiMagic;
  180. BYTE m_btHitPoint;
  181. BYTE m_btSpeedPoint;
  182. BYTE m_btAntiPoison;
  183. BYTE m_btPoisonRecover;
  184. BYTE m_btHealthRecover;
  185. BYTE m_btSpellRecover;
  186. BOOL m_fIsDead;
  187. DWORD m_dwDeathTime;
  188. BOOL m_fIsGhost;
  189. DWORD m_dwGhostTime;
  190. BOOL m_fOpenHealth;
  191. DWORD m_dwOpenHealthStart;
  192. DWORD m_dwOpenHealthTime;
  193. DWORD m_dwIncHealthSpellTime;
  194. DWORD m_dwHealthTick;
  195. DWORD m_dwSpellTick;
  196. DWORD m_dwTickSec;
  197. WORD m_IncHealing;
  198. BYTE m_btPerHealing;
  199. WORD m_IncHealth;
  200. BYTE m_btPerHealth;
  201. WORD m_IncSpell;
  202. BYTE m_btPerSpell;
  203. BOOL m_fAbilMagBubbleDefence;
  204. BYTE m_btMagBubbleDefenceLevel;
  205. BOOL m_fInspector;
  206. BOOL m_fFastTrain;
  207. BOOL m_fHideMode;
  208. BOOL m_fIsNeverDie;
  209. BOOL m_fStoneMode;
  210. BOOL m_fStickMode;
  211. CCharObject* m_pMasterObject;
  212. CCharObject* m_pTargetObject;
  213. CCharObject* m_pLastHitterObject;
  214. CCharObject* m_pExpHitterObject;
  215. DWORD m_dwTargetFocusTime;
  216. BOOL m_fHumHideMode;
  217. BOOL m_fFixedHideMode;
  218. public:
  219. CCharObject(CUserInfo* pUserInfo);
  220. virtual ~CCharObject();
  221. BOOL GetBackPosition(int &nX, int &nY);
  222. int GetBack(int nDirection);
  223. void GetFrontPosition(int &nX, int &nY);
  224. void UpdateDelayProcessCheckParam1(CCharObject* pCharObject, WORD wIdent, WORD wParam, DWORD lParam1, DWORD lParam2, DWORD lParam3, char *pszData, int nDelay);
  225. void UpdateProcess(CCharObject* pCharObject, WORD wIdent, WORD wParam, DWORD lParam1, DWORD lParam2, DWORD lParam3, char *pszData);
  226. void AddProcess(CCharObject* pCharObject, WORD wIdent, WORD wParam, DWORD lParam1, DWORD lParam2, DWORD lParam3, char *pszData = NULL);
  227. void AddDelayProcess(CCharObject* pCharObject, WORD wIdent, WORD wParam, DWORD lParam1, DWORD lParam2, DWORD lParam3, char *pszData, int nDelay);
  228. void AddRefMsg(WORD wIdent, WORD wParam, DWORD lParam1, DWORD lParam2, DWORD lParam3, char *pszData);
  229. BOOL GetNextPosition(int nSX, int nSY, int nDir, int nDistance, int& nX, int& nY);
  230. __inline BOOL GetNextPosition(int nDir, int nDistance, int& nX, int& nY)
  231. { return GetNextPosition(m_nCurrX, m_nCurrY, nDir, nDistance, nX, nY); }
  232. int GetNextDirection(int nStartX, int nStartY, int nTargetX, int nTargetY);
  233. __inline int GetNextDirection(int nTargetX, int nTargetY)
  234. { return GetNextDirection(m_nCurrX, m_nCurrY, nTargetX, nTargetY); }
  235. void UpdateVisibleObject(CCharObject* pCharObject);
  236. void UpdateVisibleItem(int nX, int nY, CMapItem* pMapItem);
  237. void UpdateVisibleEvent(CEvent* pEvent);
  238. void SelectTarget(CCharObject* pTargetObject);
  239. void IncHealthSpell(int nHP, int nMP);
  240. void DamageSpell(int nVal);
  241. void DamageHealth(int nDamage);
  242. int GetMagStruckDamage(int nDamage);
  243. void StruckDamage(int nDamage);
  244. int GetHitStruckDamage(int nDamage);
  245. int GetAttackPower(int nDamage, int nVal);
  246. BOOL _Attack(WORD wHitMode, CCharObject* pObject);
  247. void WalkNextPos(int nDir, int& nX, int& nY);
  248. void TurnTo(int nDir);
  249. BOOL TurnXY(int nX, int nY, int nDir);
  250. virtual BOOL WalkTo(int nDir);
  251. BOOL WalkXY(int nX, int nY, int nDir);
  252. BOOL RunTo(int nDir);
  253. BOOL RunXY(int nX, int nY, int nDir);
  254. BOOL HitXY(WORD wIdent, int nX, int nY, int nDir, int nHitStyle);
  255. void DoDamageWeapon(int nDamage);
  256. void Disappear();
  257. void MakeGhost();
  258. BOOL DropItemDown(_LPTUSERITEMRCD lpTItemRcd, int nRange, BOOL fIsGenItem);
  259. CCharObject* AddCreatureSysop(int nX, int nY, CMonRaceInfo* pMonRaceInfo, BOOL fSearch);
  260. void DoPushed(int nDirection);
  261. void DoMotaebo();
  262. int CharPushed(int nDir, int nPushCount);
  263. BOOL DoShowHP(CCharObject* pObject, CMagicInfo* pMagicInfo, int nLevel);
  264. void MakeOpenHealth();
  265. void BreakOpenHealth();
  266. int MagPushArround(int nPushLevel);
  267. int MagPassThroughMagic(int nStartX, int nStartY, int nTargetX, int nTargetY, int nDir, int nPwr, BOOL fUndeadAttack);
  268. BOOL MagBubbleDefenceUp(int nLevel, int nSec);
  269. void DamageBubbleDefence();
  270. int MagMakeFireCross(int nDamage, int nHTime, int nX, int nY);
  271. BOOL DirectAttack(CCharObject* pTargetObject, int nDamage);
  272. BOOL SwordLongAttack(int nDamage);
  273. BOOL SwordWideAttack(int nDamage);
  274. BOOL MagBigExplosion(int nPower, int nX, int nY, int nWide);
  275. BOOL MagBigHealing(int nPower, int nX, int nY);
  276. BOOL MagDefenceUp(int nState, int nSec);
  277. BOOL MagMakeDefenceArea(int nX, int nY, int nRange, int nSec, int nState);
  278. BOOL MagElecBlizzard(int nPower);
  279. BOOL MagMakePrivateTransparent(int nHTime);
  280. int MagMakeHolyCurtain(int nHTime, int nX, int nY);
  281. BOOL MagMakeGroupTransparent(int nX, int nY, int nHTime);
  282. BOOL MagTurnUndead(CCharObject* pTargetObject, int nX, int nY, int nLevel);
  283. virtual BOOL IsProperTarget(CCharObject* pCharObject);
  284. BOOL IsFriend(CCharObject* pCharObject);
  285. BOOL IsProperFriend(CCharObject* pCharObject);
  286. void SpaceMove(int nX, int nY, CMirMap* pMirMap);
  287. void GoldChanged();
  288. void HealthSpellChanged();
  289. BOOL GetAvailablePosition(CMirMap* pMap, int &nX, int &nY, int nRange);
  290. void GetQueryUserName(CCharObject* pObject, int nX, int nY);
  291. void SendSocket(_LPTDEFAULTMESSAGE lpDefMsg, char *pszPacket);
  292. void Die();
  293. BOOL RestoreHealSpell();
  294. UINT GetCharStatus();
  295. virtual WORD GetThisCharColor() = 0;
  296. virtual void GetCharName(char *pszCharName) = 0;
  297. virtual void Run();
  298. virtual void SearchViewRange();
  299. CCharObject* GetFrontObject();
  300. __inline SysMsg(char *pszMsg, int nMode) 
  301. { ( nMode == 1 ? AddProcess(this, RM_SYSMESSAGE2, 0, 0, 0, 0, pszMsg) : AddProcess(this, RM_SYSMESSAGE, 0, 0, 0, 0, pszMsg)); }
  302. __inline LONG GetFeatureToLong()
  303. { return (LONG) MAKELONG(MAKEWORD(m_tFeature.btGender, m_tFeature.btWear), MAKEWORD(m_tFeature.btHair, m_tFeature.btWeapon)); }
  304. __inline BYTE GetRPow(WORD wPower)
  305. { if (HIBYTE(wPower) > LOBYTE(wPower)) return LOBYTE(wPower) + (rand() % (HIBYTE(wPower) - LOBYTE(wPower) + 1)); else return LOBYTE(wPower); }
  306. };