ObjectPlayerSaid.cpp
上传用户:szopptop
上传日期:2013-04-23
资源大小:1047k
文件大小:3k
源码类别:

模拟服务器

开发平台:

Visual C++

  1. #include "stdafx.h"
  2. #define _MAX_USERCOMMAND_LIST (IDS_USERCMD_SABUKDOOR - IDS_USERCMD_NOWHISPER1 + 1)
  3. void CryCry(UINT wMsgType, CMirMap* pMap, int nX, int nY, int nWide, char *pszSaying);
  4. void InitUserCommandList()
  5. {
  6. TCHAR szCommand[64];
  7. int nLen;
  8. for (int i = 0; i < _MAX_USERCOMMAND_LIST; i++)
  9. {
  10. LoadString(g_hInst, IDS_USERCMD_NOWHISPER1 + i, szCommand, sizeof(szCommand)/sizeof(TCHAR));
  11. nLen = lstrlen(szCommand) * sizeof(TCHAR) + 1;
  12. char *pszUserCommand = new char[nLen];
  13. if (pszUserCommand)
  14. {
  15. WideCharToMultiByte(CP_ACP, 0, szCommand, -1, pszUserCommand, nLen, NULL, NULL);
  16. g_xUserCommandList.AddNewNode(pszUserCommand);
  17. }
  18. }
  19. InsertLogMsgParam(IDS_LOAD_USERCOMMAND, &i, LOGPARAM_INT);
  20. }
  21. void UnInitUserCommandList()
  22. {
  23. PLISTNODE pListNode = g_xUserCommandList.GetHead();
  24. while (pListNode)
  25. {
  26. delete [] g_xUserCommandList.GetData(pListNode);
  27. pListNode = g_xUserCommandList.RemoveNode(pListNode);
  28. }
  29. }
  30. BOOL CPlayerObject::ProcessForUserSaid(char *pszData)
  31. {
  32. char szDecodeMsg[256];
  33. char szChatMsg[512];
  34. int nPos = fnDecode6BitBufA(pszData, szDecodeMsg, sizeof(szDecodeMsg));
  35. szDecodeMsg[nPos] = '';
  36. if (szDecodeMsg[0] == '@')
  37. {
  38. ProcessForAdminSaid(szDecodeMsg);
  39. return FALSE;
  40. }
  41. else
  42. {
  43. if (szDecodeMsg[0] == '!')
  44. {
  45. if (GetTickCount() - m_dwLastCryTime > 10 * 1000)
  46. {
  47. if (m_Ability.Level <= 7)
  48. {
  49. TCHAR wszMsg[128];
  50. char szMsg[128];
  51. LoadString(g_hInst, IDS_NOTENOUGHLEVEL_CRY, wszMsg, sizeof(wszMsg)/sizeof(TCHAR));
  52. WideCharToMultiByte(CP_ACP, 0, wszMsg, -1, szMsg, sizeof(szMsg), NULL, NULL);
  53. SysMsg(szMsg, 1);
  54. return TRUE;
  55. }
  56. else
  57. {
  58. m_dwLastCryTime = GetTickCount();
  59. int nLen = memlen(m_pUserInfo->m_szCharName);
  60. memmove(szChatMsg, "(!)", 3);
  61. memmove(&szChatMsg[3], m_pUserInfo->m_szCharName, (nLen - 1));
  62. memmove(&szChatMsg[nLen - 1 + 3], " : ", 3);
  63. memmove(&szChatMsg[nLen + 2 + 3], &szDecodeMsg[1], memlen(&szDecodeMsg[1]));
  64. CryCry(RM_CRY, m_pMap, m_nCurrX, m_nCurrY, 50, szChatMsg);
  65. return TRUE;
  66. }
  67. }
  68. }
  69. else if (szDecodeMsg[0] == '/')
  70. {
  71. char *pszCharName = &szDecodeMsg[1];
  72. char *pszMsg = (char *)memchr(pszCharName, 0x20, memlen(pszCharName) - 1);
  73. if (pszMsg)
  74. {
  75. *pszMsg++ = ''; 
  76. Whisper(pszCharName, pszMsg);
  77. return TRUE;
  78. }
  79. }
  80. else
  81. {
  82. int nLen = memlen(m_szName);
  83. memmove(szChatMsg, m_szName, (nLen - 1));
  84. memmove(&szChatMsg[nLen - 1], " : ", 3);
  85. memmove(&szChatMsg[nLen + 2], szDecodeMsg, memlen(szDecodeMsg));
  86. AddRefMsg(RM_HEAR, 0, 0x0000, 0xFFFF, 0, szChatMsg);
  87. return TRUE;
  88. }
  89. }
  90. return FALSE;
  91. }