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

模拟服务器

开发平台:

C/C++

  1. //---------------------------------------------------------------------------
  2. // Sword3 Engine (c) 2003 by Kingsoft
  3. //
  4. // File: KPlayerTrade.cpp
  5. // Date: 2003.02.17
  6. // Code: 边城浪子
  7. // Desc: Trade Class
  8. //---------------------------------------------------------------------------
  9. #include "KCore.h"
  10. #include "KNpc.h"
  11. #include "KPlayer.h"
  12. #include "KPlayerSet.h"
  13. #include "KPlayerTrade.h"
  14. //#include "MyAssert.h"
  15. #ifndef _SERVER
  16. #include "CoreShell.h"
  17. #endif
  18. KTrade::KTrade()
  19. {
  20. Release();
  21. #ifdef _SERVER
  22. m_nApplyIdx = -1;
  23. #endif
  24. }
  25. void KTrade::Release()
  26. {
  27. m_nIsTrading = 0;
  28. m_nTradeDest = -1;
  29. m_nTradeState = 0;
  30. m_nTradeLock = 0;
  31. #ifndef _SERVER
  32. m_nBackEquipMoney = 0;
  33. m_nBackRepositoryMoney = 0;
  34. m_nTradeDestState = 0;
  35. m_nTradeDestLock = 0;
  36. m_szDestName[0] = 0;
  37. #endif
  38. }
  39. BOOL KTrade::StartTrade(int nDest, int nEquipMoney, int nRepositoryMoney)
  40. {
  41. if (m_nIsTrading)
  42. return FALSE;
  43. if (nDest < 0)
  44. return FALSE;
  45. m_nIsTrading = 1;
  46. m_nTradeDest = nDest;
  47. m_nTradeState = 0;
  48. m_nTradeLock = 0;
  49. #ifndef _SERVER
  50. m_nBackEquipMoney = nEquipMoney;
  51. m_nBackRepositoryMoney = nRepositoryMoney;
  52. m_nTradeDestState = 0;
  53. m_nTradeDestLock = 0;
  54. int nIdx = NpcSet.SearchID(nDest);
  55. if (nIdx > 0)
  56. strcpy(m_szDestName, Npc[nIdx].Name);
  57. else
  58. m_szDestName[0] = 0;
  59. #endif
  60. return TRUE;
  61. }
  62. void KTrade::Lock(BOOL bFlag)
  63. {
  64. if (bFlag)
  65. {
  66. m_nTradeLock = 1;
  67. }
  68. else
  69. {
  70. m_nTradeLock = 0;
  71. #ifndef _SERVER
  72. m_nTradeDestLock = 0;
  73. #endif
  74. }
  75. }
  76. #ifndef _SERVER
  77. void KTrade::SetTradeState(int nSelfLock, int nDestLock, int nSelfStateOk, int nDestStateOk)
  78. {
  79. if (nSelfLock)
  80. {
  81. if (m_nTradeLock == 0)
  82. {
  83. KSystemMessage sMsg;
  84. sprintf(sMsg.szMessage, MSG_TRADE_SELF_LOCK);
  85. sMsg.eType = SMT_NORMAL;
  86. sMsg.byConfirmType = SMCT_NONE;
  87. sMsg.byPriority = 0;
  88. sMsg.byParamSize = 0;
  89. CoreDataChanged(GDCNI_SYSTEM_MESSAGE, (unsigned int)&sMsg, 0);
  90. }
  91. }
  92. else
  93. {
  94. if (m_nTradeLock != 0)
  95. {
  96. KSystemMessage sMsg;
  97. sprintf(sMsg.szMessage, MSG_TRADE_SELF_UNLOCK);
  98. sMsg.eType = SMT_NORMAL;
  99. sMsg.byConfirmType = SMCT_NONE;
  100. sMsg.byPriority = 0;
  101. sMsg.byParamSize = 0;
  102. CoreDataChanged(GDCNI_SYSTEM_MESSAGE, (unsigned int)&sMsg, 0);
  103. }
  104. }
  105. if (nDestLock)
  106. {
  107. if (m_nTradeDestLock == 0)
  108. {
  109. KSystemMessage sMsg;
  110. sprintf(sMsg.szMessage, MSG_TRADE_DEST_LOCK, m_szDestName);
  111. sMsg.eType = SMT_NORMAL;
  112. sMsg.byConfirmType = SMCT_NONE;
  113. sMsg.byPriority = 0;
  114. sMsg.byParamSize = 0;
  115. CoreDataChanged(GDCNI_SYSTEM_MESSAGE, (unsigned int)&sMsg, 0);
  116. }
  117. }
  118. else
  119. {
  120. if (m_nTradeDestLock != 0)
  121. {
  122. KSystemMessage sMsg;
  123. sprintf(sMsg.szMessage, MSG_TRADE_DEST_UNLOCK, m_szDestName);
  124. sMsg.eType = SMT_NORMAL;
  125. sMsg.byConfirmType = SMCT_NONE;
  126. sMsg.byPriority = 0;
  127. sMsg.byParamSize = 0;
  128. CoreDataChanged(GDCNI_SYSTEM_MESSAGE, (unsigned int)&sMsg, 0);
  129. }
  130. }
  131. this->m_nTradeLock = (nSelfLock != 0);
  132. this->m_nTradeDestLock = (nDestLock != 0);
  133. this->m_nTradeState = (nSelfStateOk != 0);
  134. this->m_nTradeDestState = (nDestStateOk != 0);
  135. // 通知界面按钮状态改变
  136. CoreDataChanged(GDCNI_TRADE_OPER_DATA, 0, 0);
  137. }
  138. #endif
  139. #ifndef _SERVER
  140. void KTrade::ReplyInvite(int nDestIdx, int nReply)
  141. {
  142. if (nDestIdx < 0)
  143. return;
  144. TRADE_REPLY_START_COMMAND sReply;
  145. sReply.ProtocolType = c2s_tradereplystart;
  146. sReply.m_bDecision = (nReply != 0);
  147. sReply.m_nDestIdx = nDestIdx;
  148. if (g_pClient)
  149. g_pClient->SendPackToServer(&sReply, sizeof(TRADE_REPLY_START_COMMAND));
  150. }
  151. #endif