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

模拟服务器

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. CMirMap* GetMap(char *pszMapName);
  3. CMonRaceInfo* GetMonRaceInfo(char *pszMonName);
  4. void GetFrontPosition(CCharObject *pObject, int &nX, int &nY);
  5. BOOL UpdateItemToDB(_LPTUSERITEMRCD lpMakeItemRcd, char *pszUserID, char *pszCharName, int nAction);
  6. void CPlayerObject::CmdChangeItemPrefix(char *pszParam1, char *pszParam2)
  7. {
  8. _LPTUSERITEMRCD lpUserItemRcd = NULL;
  9. for (int i = U_DRESS; i <= U_RINGR; i++)
  10. {
  11. if (lpUserItemRcd = m_pUserInfo->GetAccessory(i))
  12. {
  13. if (strcmp(pszParam1, g_pStdItemSpecial[lpUserItemRcd->nStdIndex].szName) == 0)
  14. {
  15. strcpy(lpUserItemRcd->szPrefixName, pszParam2);
  16. if (UpdateItemToDB(lpUserItemRcd, _ITEM_ACTION_UPDATE))
  17. AddProcess(this, RM_ITEMUPDATE, i, 0, 0, 0, lpUserItemRcd->szPrefixName);
  18. return;
  19. }
  20. }
  21. }
  22. }
  23. void CPlayerObject::CmdRandomSpaceMove(char *pszParam1)
  24. {
  25. int nX;
  26. int nY;
  27. int nEgdey;
  28. CMirMap* pMirMap = GetMap(pszParam1);
  29. if (pMirMap)
  30. {
  31. if (pMirMap->m_stMapFH.shHeight < 150)
  32. {
  33. if (pMirMap->m_stMapFH.shHeight < 30)
  34. nEgdey = 2;
  35. else
  36. nEgdey = 20;
  37. }
  38. else
  39. nEgdey = 50;
  40. nX = nEgdey + (rand() % (pMirMap->m_stMapFH.shWidth - nEgdey - 1));
  41. nY = nEgdey + (rand() % (pMirMap->m_stMapFH.shHeight - nEgdey - 1));
  42. if (GetAvailablePosition(pMirMap, nX, nY, 20))
  43. SpaceMove(nX, nY, pMirMap);
  44. else 
  45. SysMsg("Command Failed", 0);
  46. }
  47. else
  48. SysMsg("Command Failed : Invalid map file name.", 0);
  49. }
  50. void CPlayerObject::CmdFreeSpaceMove(char *pszParam1, char *pszParam2, char *pszParam3)
  51. {
  52. int nX = AnsiStrToVal(pszParam2);
  53. int nY = AnsiStrToVal(pszParam3);
  54. CMirMap* pMirMap = GetMap(pszParam1);
  55. if (pMirMap)
  56. {
  57. if (pMirMap->CanMove(nX, nY))
  58. SpaceMove(nX, nY, pMirMap);
  59. else
  60. SysMsg("Command Failed", 0);
  61. }
  62. else
  63. SysMsg("Command Failed : Invalid map file name.", 0);
  64. }
  65. void CPlayerObject::CmdCallMakeMonster(char *pszParam1, char *pszParam2)
  66. {
  67. int nMax = AnsiStrToVal(pszParam2);
  68. int nX, nY;
  69. CMonRaceInfo* pMonRaceInfo = GetMonRaceInfo(pszParam1);
  70. if (pMonRaceInfo)
  71. {
  72. GetFrontPosition(nX, nY);
  73. for (int i = 0; i < nMax; i++)
  74. AddCreatureSysop(nX, nY, pMonRaceInfo, TRUE);
  75. }
  76. }
  77. void CPlayerObject::CmdCallMakeMonsterXY(char *pszParam1, char *pszParam2, char *pszParam3, char *pszParam4)
  78. {
  79. int nMax = _MIN(500, AnsiStrToVal(pszParam4));
  80. int nX = AnsiStrToVal(pszParam1);
  81. int nY = AnsiStrToVal(pszParam2);
  82. CMonRaceInfo* pMonRaceInfo = GetMonRaceInfo(pszParam3);
  83. if (pMonRaceInfo)
  84. {
  85. for (int i = 0; i < nMax; i++)
  86. AddCreatureSysop(nX, nY, pMonRaceInfo, FALSE);
  87. }
  88. }
  89. void CPlayerObject::CmdMakeItem(char *pszParam1, char *pszParam2)
  90. {
  91. int nGain = AnsiStrToVal(pszParam2);
  92. for (int i = 0; i < nGain; i++)
  93. m_pUserInfo->AddNewItem(pszParam1);
  94. }
  95. BOOL CPlayerObject::CmdChangeJob(char *pszParam1)
  96. {
  97. TCHAR wszJobName[32];
  98. char szJobName[32];
  99. for (int i = 0; i < 3; i++)
  100. {
  101. LoadString(g_hInst, IDS_JOBNAME_W + i, wszJobName, sizeof(wszJobName)/sizeof(TCHAR));
  102. WideCharToMultiByte(CP_ACP, 0, wszJobName, -1, szJobName, sizeof(szJobName), NULL, NULL);
  103. if (memcmp(szJobName, pszParam1, memlen(szJobName) - 1) == 0)
  104. {
  105. m_pUserInfo->SetJob(i);
  106. SysMsg(szJobName, 1);
  107. return TRUE;
  108. }
  109. }
  110. return FALSE;
  111. }
  112. void CPlayerObject::CmdMakeFullSkill(char *pszParam1, char *pszParam2)
  113. {
  114. for (int i = 0; i < g_nNumOfMagicInfo; i++)
  115. {
  116. if (memcmp(g_pMagicInfo[i].szName, pszParam1, memlen(g_pMagicInfo[i].szName) - 1) == 0)
  117. {
  118. int nLevel = _MIN(3, AnsiStrToVal(pszParam2));
  119. PLISTNODE pListNode = m_pUserInfo->m_lpTMagicRcd.GetHead();
  120. while (pListNode)
  121. {
  122. _LPTHUMANMAGICRCD lptUserMagicRcd = m_pUserInfo->m_lpTMagicRcd.GetData(pListNode);
  123. if (lptUserMagicRcd)
  124. {
  125. if (lptUserMagicRcd->btMagicID == i)
  126. {
  127. lptUserMagicRcd->btLevel = (BYTE)nLevel;
  128. AddProcess(this, RM_MAGIC_LVEXP, 0, lptUserMagicRcd->btMagicID, lptUserMagicRcd->btLevel, 
  129. lptUserMagicRcd->nCurrTrain);
  130. TCHAR wszMsg[64], wszMagicName[32], wszCompMsg[128];
  131. char szMsg[128];
  132. MultiByteToWideChar(CP_ACP, 0, pszParam1, -1, wszMagicName, sizeof(wszMagicName)/sizeof(TCHAR));
  133. LoadString(g_hInst, IDS_SKIL_LEVELUP, wszMsg, sizeof(wszMsg)/sizeof(TCHAR));
  134. wsprintf(wszCompMsg, wszMsg, wszMagicName, nLevel);
  135. WideCharToMultiByte(CP_ACP, 0, wszCompMsg, -1, szMsg, sizeof(szMsg), NULL, NULL);
  136. SysMsg(szMsg, 1);
  137. switch (lptUserMagicRcd->btMagicID) 
  138. {
  139. case _SKILL_YEDO:
  140. case _SKILL_ILKWANG:
  141. case _SKILL_ONESWORD:
  142. RecalcAbilitys();
  143. AddProcess(this, RM_SUBABILITY, 0, 0, 0, 0, NULL);
  144. break;
  145. }
  146. return;
  147. }
  148. }
  149. pListNode = m_pUserInfo->m_lpTMagicRcd.GetNext(pListNode);
  150. }
  151. }
  152. }
  153. }
  154. void CPlayerObject::CmdSendMonsterLevelInfos()
  155. {
  156. CWHList<CCharObject*> ObjectList;
  157. TCHAR wszInfo[1024];
  158. char szInfo[1024];
  159. TCHAR wszTemp1[32], wszTemp2[32];
  160. m_pMap->GetMapObject(m_nCurrX, m_nCurrY, 2, &ObjectList);
  161. if (ObjectList.GetCount())
  162. {
  163. PLISTNODE pListNode = ObjectList.GetHead();
  164. CCharObject* pTargetObject;
  165. while (pListNode)
  166. {
  167. if (pTargetObject = ObjectList.GetData(pListNode))
  168. {
  169. if (pTargetObject->m_wObjectType & _OBJECT_ANIMAL)
  170. {
  171. MultiByteToWideChar(CP_ACP, 0, pTargetObject->m_szName, -1, wszTemp1, sizeof(wszTemp1)/sizeof(TCHAR));
  172. MultiByteToWideChar(CP_ACP, 0, pTargetObject->m_pMap->m_szMapName, -1, wszTemp2, sizeof(wszTemp2)/sizeof(TCHAR));
  173. wsprintf(wszInfo, _TEXT("%s, MAP:%s, X:%d, Y:%d, Lv:%d, Exp:%d, HP:%d/%d, MP:%d/%d, DC:%d/%d, MC:%d/%d, SC:%d/%d, AC:%d/%d, MAC:%d/%d, Hit:%d, Spd:%d, Water:%d/%d, Fire:%d/%d, Wind:%d/%d, Light:%d/%d, Earth:%d/%d"),
  174. wszTemp1, wszTemp2,
  175. pTargetObject->m_nCurrX, pTargetObject->m_nCurrY,
  176. pTargetObject->m_Ability.Level,
  177. pTargetObject->m_Ability.Exp,
  178. pTargetObject->m_WAbility.HP, pTargetObject->m_WAbility.MaxHP,
  179. pTargetObject->m_WAbility.MP, pTargetObject->m_WAbility.MaxMP,
  180. LOBYTE(pTargetObject->m_WAbility.DC), HIBYTE(pTargetObject->m_WAbility.DC),
  181. LOBYTE(pTargetObject->m_WAbility.MC), HIBYTE(pTargetObject->m_WAbility.MC),
  182. LOBYTE(pTargetObject->m_WAbility.SC), HIBYTE(pTargetObject->m_WAbility.SC),
  183. LOBYTE(pTargetObject->m_WAbility.AC), HIBYTE(pTargetObject->m_WAbility.AC),
  184. LOBYTE(pTargetObject->m_WAbility.MAC), HIBYTE(pTargetObject->m_WAbility.MAC),
  185. pTargetObject->m_btHitPoint,
  186. pTargetObject->m_btSpeedPoint,
  187. LOBYTE(pTargetObject->m_WAbility.m_wWater), HIBYTE(pTargetObject->m_WAbility.m_wWater),
  188. LOBYTE(pTargetObject->m_WAbility.m_wFire), HIBYTE(pTargetObject->m_WAbility.m_wFire),
  189. LOBYTE(pTargetObject->m_WAbility.m_wWind), HIBYTE(pTargetObject->m_WAbility.m_wWind),
  190. LOBYTE(pTargetObject->m_WAbility.m_wLight), HIBYTE(pTargetObject->m_WAbility.m_wLight),
  191. LOBYTE(pTargetObject->m_WAbility.m_wEarth), HIBYTE(pTargetObject->m_WAbility.m_wEarth));
  192. WideCharToMultiByte(CP_ACP, 0, wszInfo, -1, szInfo, sizeof(szInfo), NULL, NULL);
  193. SysMsg(szInfo, 1);
  194. }
  195. }
  196. pListNode = ObjectList.RemoveNode(pListNode);
  197. }
  198. }
  199. }
  200. void CPlayerObject::CmdDyeingHair(char *pszParam1)
  201. {
  202. m_tFeatureEx.dwHairColor = AnsiStrToVal(pszParam1);
  203. AddRefMsg(RM_TURN, m_nDirection, m_nCurrX, m_nCurrY, 0, m_pUserInfo->m_szCharName);
  204. }
  205. void CPlayerObject::CmdDyeingWear(char *pszParam1)
  206. {
  207. m_tFeatureEx.dwWearColor = AnsiStrToVal(pszParam1);
  208. AddRefMsg(RM_TURN, m_nDirection, m_nCurrX, m_nCurrY, 0, m_pUserInfo->m_szCharName);
  209. }
  210. void CPlayerObject::CmdHairStyle(char *pszParam1)
  211. {
  212. m_tFeature.btHair = AnsiStrToVal(pszParam1);
  213. AddRefMsg(RM_TURN, m_nDirection, m_nCurrX, m_nCurrY, 0, m_pUserInfo->m_szCharName);
  214. }
  215. void CPlayerObject::CmdCallMakeSlaveMonster(char *pszParam1, char *pszParam2)
  216. {
  217. int nMax = AnsiStrToVal(pszParam2);
  218. int nX, nY;
  219. CMonRaceInfo* pMonRaceInfo = GetMonRaceInfo(pszParam1);
  220. if (pMonRaceInfo)
  221. {
  222. GetFrontPosition(nX, nY);
  223. for (int i = 0; i < nMax; i++)
  224. {
  225. CMonsterObject* pMonsterObject = (CMonsterObject*)AddCreatureSysop(nX, nY, pMonRaceInfo, TRUE);
  226. if (pMonsterObject)
  227. {
  228. char szMonName[64];
  229. pMonsterObject->m_pMasterObject = this;
  230. pMonsterObject->GetCharName(szMonName);
  231. AddRefMsg(RM_USERNAME, 0, 0, 0, 0, szMonName);
  232. m_xSlaveObjList.AddNewNode(pMonsterObject);
  233. /* cret.MasterRoyaltyTime := GetTickCount + 24 * 60 * 60 * 1000;
  234.                   cret.SlaveMakeLevel := 3;
  235.                   cret.SlaveExpLevel := momlv;
  236.                   cret.UserNameChanged;
  237.                   SlaveList.Add (cret); */
  238. }
  239. }
  240. }
  241. }