ServerCommerceMiddle.lua 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. local Util = require("common.Util")
  2. local WarZoneConf = require("excel.WarZone")
  3. local MiddleConnect = require("middle.MiddleConnect")
  4. local MiddleManager = require("middle.MiddleManager")
  5. local InnerMsg = require("core.InnerMsg")
  6. local Config = require("Config")
  7. local CommonDB = require("common.CommonDB")
  8. local Timer = require("core.Timer")
  9. local CommonDefine = require("common.CommonDefine")
  10. local ServerCommerceManger = require("serverCommerce.ServerCommerceManager")
  11. local ServerCommerceActDefine = require("serverCommerce.ServerCommerceActDefine")
  12. local ServerCommerceRank = require("serverCommerce.ServerCommerceActRank")
  13. -- 缓存开服天数
  14. local tServerOpenDay = nil
  15. local SERVERCOMMERCEOPENDAY = 8 -- 活动开启要求天数
  16. -- 起服获取信息
  17. function CommerceMiddle_InitServer()
  18. if _G.is_middle ~= true then
  19. return
  20. end
  21. Timer.addLater(ServerCommerceActDefine.COMMERCEACT_INITOPENDAY, CommerceMiddle_GetOpen)
  22. print("[CommerceMiddle_InitServer] 起服定时去获取数据 nTime = "..ServerCommerceActDefine.COMMERCEACT_INITOPENDAY)
  23. end
  24. -- 定时获取普通服开服信息
  25. function CommerceMiddle_OnZero()
  26. if _G.is_middle ~= true then
  27. return
  28. end
  29. Timer.addLater(15, CommerceMiddle_GetOpen)
  30. print("[CommerceMiddle_OnZero] 整点定时去获取数据")
  31. end
  32. -- 获取(中心服主动去获取)
  33. function CommerceMiddle_GetOpen()
  34. if _G.is_middle ~= true then
  35. return
  36. end
  37. print("[CommerceMiddle_GetOpen] 开始去获取服务器开启信息")
  38. local tWarZoneConf = WarZoneConf.group
  39. for _, v in ipairs(tWarZoneConf) do
  40. local nFirstServerID = MiddleConnect.MiddleConnect_ConfServerID2TrueServerID(v.nMinServerID)
  41. print("[CommerceMiddle_GetOpen] nMinServerID = "..v.nMinServerID.." nFirstServerID = "..nFirstServerID)
  42. local fd = MiddleManager.getFDBySvrIndex(nFirstServerID)
  43. if fd then
  44. print("[CommerceMiddle_GetOpen] 中心服主动去获取数据 nFirstServerID = "..nFirstServerID)
  45. local tMsgData = InnerMsg.wl.WL_COMMERCE_QUERYOPENDAY
  46. InnerMsg.sendMsg(fd, tMsgData)
  47. print("[CommerceMiddle_GetOpen] 发送结束")
  48. else
  49. print("[CommerceMiddle_GetOpen] 中心服主动去获取数据, 但是获取不到fd nFirstServerID = "..nFirstServerID)
  50. end
  51. end
  52. end
  53. -- 回复开服天数
  54. function CommerceMiddle_SendOpenDay(fd, msg)
  55. local nOpenDay = msg.nOpenDay
  56. local nServerConfID = MiddleConnect.MiddleConnect_TrueServerID2ConfServerID(msg.nSrcServerID)
  57. if not tServerOpenDay then
  58. tServerOpenDay = {}
  59. end
  60. tServerOpenDay[nServerConfID] = nOpenDay
  61. print("[CommerceMiddle_SendOpenDay] 回复开服天数 nServerConfID = "..nServerConfID.." nOpenDay = "..nOpenDay)
  62. end
  63. -- 请求开服天数
  64. function CommerceMiddle_QueryOpenDay(fd, msg)
  65. local tMsgData = InnerMsg.lw.LW_COMMERCE_SENDOPENDAY
  66. tMsgData.nOpenDay = CommonDB.getServerOpenDay()
  67. tMsgData.nSrcServerID = Config.SVR_INDEX
  68. InnerMsg.sendMsg(0, tMsgData)
  69. print("[CommerceMiddle_QueryOpenDay] 请求开服天数")
  70. end
  71. function CommerceMiddle_QueryOpenAct(fd, msg)
  72. local nConfServerID = MiddleConnect.MiddleConnect_TrueServerID2ConfServerID(msg.nSrcServerID)
  73. local nFirstServerID
  74. for _, v in ipairs(WarZoneConf.group) do
  75. if v.nMinServerID <= nConfServerID and v.nMaxServerID >= nConfServerID then
  76. nFirstServerID = v.nMinServerID
  77. break
  78. end
  79. end
  80. if nil == nFirstServerID or not tServerOpenDay or not tServerOpenDay[nFirstServerID] then
  81. print("[QueryOpenAct] 获取不到战区的第一个服务器\n")
  82. return
  83. end
  84. local nSrcFD = MiddleManager.getFDBySvrIndex(msg.nSrcServerID)
  85. if not nSrcFD then
  86. return
  87. end
  88. local tMsgData = InnerMsg.wl.WL_COMMERCE_ACTOPEN
  89. tMsgData.nOpen = tServerOpenDay[nFirstServerID] >= SERVERCOMMERCEOPENDAY and 1 or 0
  90. tMsgData.nOperate = msg.nOperate
  91. tMsgData.nServerKey = nFirstServerID
  92. InnerMsg.sendMsg(nSrcFD, tMsgData)
  93. print("[CommerceMiddle_QueryOpenAct] 请求中心服活动是否开启 nOpen = "..tMsgData.nOpen)
  94. end
  95. function CommerceMiddle_SendOpenAct(fd, msg)
  96. print("[CommerceMiddle_SendOpenAct] 获取到中心服发送的是否开服数据 nOpen = "..msg.nOpen)
  97. ServerCommerceManger.CommerceAct_ActCheckOpen(msg.nOpen, msg.nOperate, msg.nServerKey)
  98. end
  99. -- 发送玩家排行榜信息
  100. function CommerveMiddle_HumanPointChange(human, nPoint)
  101. local tMsgData = InnerMsg.lw.LW_COMMERCE_RANK_POINT_CHANGE
  102. tMsgData.uuid = human.db._id
  103. tMsgData.name = human.db.name
  104. tMsgData.head = human.db.head
  105. tMsgData.headFrame = human.db.headFrame
  106. tMsgData.nSrcServerID = Config.SVR_INDEX
  107. tMsgData.nValue = nPoint
  108. tMsgData.nRankType = CommonDefine.COMMONRANK_TYPE_SERVERCOMMERCE
  109. tMsgData.nRankSubType = CommonDefine.COMMONRANK_SUB_TYPE_SERVERCOMMERCE_HUMAN
  110. tMsgData.nOperate = CommonDefine.COMMONRANK_VALUE_REPLACE
  111. tMsgData.servername = "寻宝"..Config.NEW_SVR_INDEX.."区"
  112. InnerMsg.sendMsg(0, tMsgData)
  113. print("[CommerveMiddle_HumanPointChange] 发送玩家排行榜信息结束 name = "..tMsgData.name.." nValue = "..tMsgData.nValue)
  114. end
  115. -- 服务器点数改变发送排行榜信息
  116. function CommerveMiddle_ServerPointChange(nPoint)
  117. local tMsgData = InnerMsg.lw.LW_COMMERCE_RANK_POINT_CHANGE
  118. tMsgData.uuid = Config.NEW_SVR_INDEX
  119. tMsgData.name = "寻宝"..Config.NEW_SVR_INDEX.."区"
  120. tMsgData.head = -1
  121. tMsgData.headFrame = -1
  122. tMsgData.nSrcServerID = Config.SVR_INDEX
  123. tMsgData.nValue = nPoint
  124. tMsgData.nRankType = CommonDefine.COMMONRANK_TYPE_SERVERCOMMERCE
  125. tMsgData.nRankSubType = CommonDefine.COMMONRANK_SUB_TYPE_SERVERCOMMERCE_SERVER
  126. tMsgData.nOperate = CommonDefine.COMMONRANK_VALUE_REPLACE
  127. tMsgData.servername = "寻宝"..Config.NEW_SVR_INDEX.."区"
  128. InnerMsg.sendMsg(0, tMsgData)
  129. print("[CommerveMiddle_HumanPointChange] 发送服务器排行榜信息结束 name = "..tMsgData.name.." nValue = "..tMsgData.nValue)
  130. end
  131. -- 请求排行榜数据
  132. function CommerveMiddle_QueryRankInfo(nRankType, nRankSubType)
  133. local tMsgData = InnerMsg.lw.LW_COMMERCE_QUERY_RANK_INFO
  134. tMsgData.nRankType = nRankType
  135. tMsgData.nRankSubType = nRankSubType
  136. tMsgData.nSrcServerID = Config.SVR_INDEX
  137. InnerMsg.sendMsg(0, tMsgData)
  138. print("[CommerveMiddle_QueryRankInfo] 向中心服请求排行榜数据")
  139. end
  140. -- 获取到排行榜数据
  141. function CommerveMiddle_GetRankInfo(tData)
  142. ServerCommerceRank.CommercerActRank_GetRankInfo(tData)
  143. end
  144. ------------------ 活动管理器操作 ------------------------
  145. -- 请求活动是否开启
  146. function CommerceMiddle_IsActOpen(nOperate)
  147. local tMsgData = InnerMsg.lw.LW_COMMERCE_ACTOPEN
  148. tMsgData.nSrcServerID = Config.SVR_INDEX
  149. tMsgData.nOperate = nOperate
  150. InnerMsg.sendMsg(0, tMsgData)
  151. print("[CommerceMiddle_IsActOpen] 普通服开始请求活动信息")
  152. end
  153. -- 请求当前服务器排行最新的排名
  154. function CommerceMiddle_QueryServerRank(nOperate)
  155. local tMsgData = InnerMsg.lw.LW_COMMERCE_QUERY_SERVER_RANK
  156. tMsgData.nSrcServerID = Config.SVR_INDEX
  157. tMsgData.nServerUuid = tostring(Config.NEW_SVR_INDEX)
  158. tMsgData.nOperate = nOperate
  159. InnerMsg.sendMsg(0, tMsgData)
  160. end
  161. -- 获取到 当前服务器排行最新的排名
  162. function CommerceMiddle_GetServerRank(msg)
  163. ServerCommerceRank.CommercerActRank_GetServerRank(msg)
  164. end
  165. -- 通知中心服当前服务器在线全服玩家邮件结束
  166. function CommerceMiddle_TellServerMailOk()
  167. local tMsgData = InnerMsg.lw.LW_COMMERCE_TELL_SERVER_MAILOK
  168. tMsgData.nSrcServerID = Config.SVR_INDEX
  169. InnerMsg.sendMsg(0, tMsgData)
  170. print("[CommerceMiddle_TellServerMailOk] 通知中心服当前服务器在线全服玩家邮件结束")
  171. end
  172. function CommerceMiddle_GetHumanRank(msg)
  173. ServerCommerceRank.CommercerActRank_SendHumanRankPrize(msg)
  174. end
  175. function CommerceMiddle_ClearRank()
  176. local tMsgData = InnerMsg.lw.LW_COMMERCE_CLEAR_RANK
  177. tMsgData.nRankType = CommonDefine.COMMONRANK_TYPE_SERVERCOMMERCE
  178. tMsgData.nRankSubType = CommonDefine.COMMONRANK_SUB_TYPE_SERVERCOMMERCE_SERVER
  179. tMsgData.nSrcServerID = Config.SVR_INDEX
  180. InnerMsg.sendMsg(0, tMsgData)
  181. tMsgData.nRankSubType = CommonDefine.COMMONRANK_SUB_TYPE_SERVERCOMMERCE_HUMAN
  182. InnerMsg.sendMsg(0, tMsgData)
  183. end
  184. function CommerceMiddle_GMClearMiddleMail()
  185. local tMsgData = InnerMsg.lw.LW_COMMERCE_GM_CLEAR_MAIL
  186. tMsgData.nSrcServerID = Config.SVR_INDEX
  187. InnerMsg.sendMsg(0, tMsgData)
  188. end