cross_server_msg.go 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551
  1. package msg
  2. import (
  3. "rocommon"
  4. "rocommon/util"
  5. "roserver/baseserver/model"
  6. gameModel "roserver/game/model"
  7. "roserver/serverproto"
  8. )
  9. func init() {
  10. //////远航试炼
  11. //获取远航界面可视列表
  12. serverproto.Handle_GAME_CSCrossYuanHangTrialViewListReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  13. msg := ev.Msg().(*serverproto.CSCrossYuanHangTrialViewListReq)
  14. util.InfoF("uid=%v CSCrossYuanHangTrialViewListReq msg=%v", cliId.SessID, msg)
  15. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  16. if role == nil {
  17. return
  18. }
  19. if !msg.Notify {
  20. role.(gameModel.CrossLogicOuter).YuanHangTrialViewList()
  21. } else {
  22. gameModel.AddNtfUid(role.GetUUid())
  23. }
  24. })
  25. serverproto.Handle_GAME_CSCrossYuanHangTrialViewListOutReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  26. msg := ev.Msg().(*serverproto.CSCrossYuanHangTrialViewListOutReq)
  27. util.InfoF("uid=%v CSCrossYuanHangTrialViewListOutReq msg=%v", cliId.SessID, msg)
  28. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  29. if role == nil {
  30. return
  31. }
  32. gameModel.DelNtfUid(role.GetUUid())
  33. })
  34. //刷新远航试炼品质
  35. serverproto.Handle_GAME_CSCrossYuanHangTrialRefreshTrialTypeReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  36. msg := ev.Msg().(*serverproto.CSCrossYuanHangTrialRefreshTrialTypeReq)
  37. util.InfoF("uid=%v CSCrossYuanHangTrialRefreshTrialTypeReq msg=%v", cliId.SessID, msg)
  38. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  39. if role == nil {
  40. return
  41. }
  42. role.(gameModel.CrossLogicOuter).RefreshYuanHangTrialType(msg.Force)
  43. })
  44. //发起远航试炼
  45. serverproto.Handle_GAME_CSCrossYuanHangTrialReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  46. msg := ev.Msg().(*serverproto.CSCrossYuanHangTrialReq)
  47. util.InfoF("uid=%v CSCrossYuanHangTrialReq msg=%v", cliId.SessID, msg)
  48. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  49. if role == nil {
  50. return
  51. }
  52. role.(gameModel.CrossLogicOuter).YuanHangTrial()
  53. })
  54. //获取远航试炼奖励(试炼结束奖励)
  55. serverproto.Handle_GAME_CSCrossYuanHangTrialRewardReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  56. msg := ev.Msg().(*serverproto.CSCrossYuanHangTrialRewardReq)
  57. util.InfoF("uid=%v CSCrossYuanHangTrialRewardReq msg=%v", cliId.SessID, msg)
  58. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  59. if role == nil {
  60. return
  61. }
  62. role.(gameModel.CrossLogicOuter).YuanHangTrialReward()
  63. })
  64. //远航试炼挑战
  65. serverproto.Handle_GAME_CSCrossYuanHangTrialChallengeReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  66. msg := ev.Msg().(*serverproto.CSCrossYuanHangTrialChallengeReq)
  67. util.InfoF("uid=%v CSCrossYuanHangTrialChallengeReq msg=%v", cliId.SessID, msg)
  68. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  69. if role == nil {
  70. return
  71. }
  72. role.(gameModel.CrossLogicOuter).YuanHangTrialChallenge(msg.ChallengeUid, msg.ChallengeUidEndTime)
  73. })
  74. //远航试炼挑战次数购买
  75. serverproto.Handle_GAME_CSCrossYuanHangTrialBuyChallengeNumReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  76. msg := ev.Msg().(*serverproto.CSCrossYuanHangTrialBuyChallengeNumReq)
  77. util.InfoF("uid=%v CSCrossYuanHangTrialBuyChallengeNumReq msg=%v", cliId.SessID, msg)
  78. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  79. if role == nil {
  80. return
  81. }
  82. role.(gameModel.CrossLogicOuter).YuanHangTrialChallengeBuy()
  83. })
  84. //挑战结果通知
  85. serverproto.Handle_GAME_CSCrossYuanHangTrialChallengeResultReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  86. msg := ev.Msg().(*serverproto.CSCrossYuanHangTrialChallengeResultReq)
  87. util.InfoF("uid=%v CSCrossYuanHangTrialChallengeResultReq msg=%v", cliId.SessID, msg)
  88. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  89. if role == nil {
  90. return
  91. }
  92. role.(gameModel.CrossLogicOuter).YuanHangTrialChallengeResult(msg)
  93. })
  94. //远航试炼排行榜获取
  95. serverproto.Handle_GAME_CSCrossYuanHangTrialRankListReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  96. msg := ev.Msg().(*serverproto.CSCrossYuanHangTrialRankListReq)
  97. util.InfoF("uid=%v CSCrossYuanHangTrialRankListReq msg=%v", cliId.SessID, msg)
  98. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  99. if role == nil {
  100. return
  101. }
  102. role.(gameModel.CrossLogicOuter).YuanHangTrialRankList(msg.StartIdx)
  103. })
  104. //查询飞艇信息
  105. serverproto.Handle_GAME_CSCrossYuanHangTrialInfoReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  106. msg := ev.Msg().(*serverproto.CSCrossYuanHangTrialInfoReq)
  107. util.InfoF("uid=%v CSCrossYuanHangTrialInfoReq msg=%v", cliId.SessID, msg)
  108. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  109. if role == nil {
  110. return
  111. }
  112. role.(gameModel.CrossLogicOuter).YuanHangTrialInfoQuery(msg.TrialUid, msg.TrialEndTime)
  113. })
  114. //日志获取
  115. serverproto.Handle_GAME_CSCrossYuanHangTrialLogReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  116. msg := ev.Msg().(*serverproto.CSCrossYuanHangTrialLogReq)
  117. util.InfoF("uid=%v CSCrossYuanHangTrialLogReq msg=%v", cliId.SessID, msg)
  118. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  119. if role == nil {
  120. return
  121. }
  122. role.(gameModel.CrossLogicOuter).YuanHangTrialLog(msg.LogTime)
  123. })
  124. //from router
  125. //跨服聊天消息返回
  126. serverproto.Handle_GAME_SSGCrossChatMessageNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  127. msg := ev.Msg().(*serverproto.SSGCrossChatMessageNtf)
  128. chatNtf := &serverproto.SCChatMessageNtf{}
  129. chatNtf.MsgList = append(chatNtf.MsgList, msg.MsgList...)
  130. gameModel.SendMsgFromCrossRouter(chatNtf, cliId)
  131. })
  132. serverproto.Handle_GAME_SSCrossYuanHangTrialViewListAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  133. msg := ev.Msg().(*serverproto.SSCrossYuanHangTrialViewListAck)
  134. role := gameModel.RoleMag.GetRole(cliId)
  135. if role == nil {
  136. return
  137. }
  138. util.InfoF("uid=%v receive SSCrossYuanHangTrialViewListAck viewList=%v", role.GetUUid(), len(msg.TrialViewList))
  139. //cache manager
  140. if msg.Error == int32(serverproto.ErrorCode_ERROR_OK) {
  141. gameModel.SetYuanHangTrialViewList(msg.TrialViewList)
  142. }
  143. ackMsg := &serverproto.SCCrossYuanHangTrialViewListAck{
  144. Error: msg.Error,
  145. TrialViewList: msg.TrialViewList,
  146. }
  147. role.ReplayGate(ackMsg, true)
  148. })
  149. serverproto.Handle_GAME_SSCrossYuanHangTrialSelfAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  150. msg := ev.Msg().(*serverproto.SSCrossYuanHangTrialSelfAck)
  151. role := gameModel.RoleMag.GetRole(cliId)
  152. if role == nil {
  153. return
  154. }
  155. util.DebugF("uid=%v receive SSCrossYuanHangTrialSelfAck selfInfo=%v", role.GetUUid(), msg.SelfInfo)
  156. //self info
  157. if msg.SelfInfo != nil {
  158. role.(*gameModel.Role).GetRoleCross().UpdateTrialInfo(msg.SelfInfo.BeChallengeNum)
  159. }
  160. })
  161. serverproto.Handle_GAME_SSCrossYuanHangTrialChallengeAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  162. msg := ev.Msg().(*serverproto.SSCrossYuanHangTrialChallengeAck)
  163. role := gameModel.RoleMag.GetRole(cliId)
  164. if role == nil {
  165. return
  166. }
  167. util.DebugF("uid=%v receive SSCrossYuanHangTrialChallengeAck ms=%v", role.GetUUid(), msg)
  168. ackMsg := &serverproto.SCCrossYuanHangTrialChallengeAck{
  169. Error: msg.Error,
  170. ChallengeUid: msg.ChallengeUid,
  171. ChallengeUidEndTime: msg.ChallengeUidEndTime,
  172. FightInfo: msg.FightInfo,
  173. }
  174. role.ReplayGate(ackMsg, true)
  175. })
  176. serverproto.Handle_GAME_SSCrossYuanHangTrialChallengeResultAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  177. msg := ev.Msg().(*serverproto.SSCrossYuanHangTrialChallengeResultAck)
  178. role := gameModel.RoleMag.GetRole(cliId)
  179. if role == nil {
  180. return
  181. }
  182. util.DebugF("uid=%v receive SSCrossYuanHangTrialChallengeResultAck ms=%v", role.GetUUid(), msg)
  183. role.(gameModel.CrossLogicOuter).OnYuanHangTrialChallengeResult(msg)
  184. })
  185. serverproto.Handle_GAME_SSCrossYuanHangTrialViewNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  186. msg := ev.Msg().(*serverproto.SSCrossYuanHangTrialViewNtf)
  187. util.DebugF("receive SSCrossYuanHangTrialViewNtf ms=%v", msg)
  188. //更新cache列表
  189. gameModel.UpdateTrialViewItem(msg.TrialViewList)
  190. ntfMsg := &serverproto.SCCrossYuanHangTrialViewListNtf{
  191. TrialViewList: msg.TrialViewList,
  192. }
  193. gameModel.NtfMsg(ntfMsg)
  194. })
  195. serverproto.Handle_GAME_SSCrossYuanHangTrialRankListAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  196. msg := ev.Msg().(*serverproto.SSCrossYuanHangTrialRankListAck)
  197. role := gameModel.RoleMag.GetRole(cliId)
  198. if role == nil {
  199. return
  200. }
  201. util.DebugF("uid=%v receive SSCrossYuanHangTrialRankListAck ms=%v", role.GetUUid(), msg)
  202. //update cache
  203. gameModel.UpdateYuanHangTrialRankList(msg.StartIdx, msg.RankList)
  204. role.(*gameModel.Role).GetRoleCross().UpdateRankListSelfInfoCache(msg)
  205. ackMsg := &serverproto.SCCrossYuanHangTrialRankListAck{
  206. SelfRank: msg.SelfRank,
  207. SelfScore: msg.SelfScore,
  208. TotalRank: msg.TotalRank,
  209. RankList: msg.RankList,
  210. StartIdx: msg.StartIdx,
  211. }
  212. role.ReplayGate(ackMsg, true)
  213. })
  214. //远航被挑战日志通知
  215. serverproto.Handle_GAME_SSCrossYuanHangTrialLogNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  216. msg := ev.Msg().(*serverproto.SSCrossYuanHangTrialLogNtf)
  217. util.DebugF("uid=%v receive SSCrossYuanHangTrialLogNtf ms=%v", msg.NtfUid, msg)
  218. if msg.NtfUid > 0 {
  219. role := gameModel.RoleMag.GetRoleFromUUid(msg.NtfUid)
  220. if role == nil {
  221. role = gameModel.RoleMag.GetRoleFromOffline(msg.NtfUid)
  222. }
  223. if role != nil {
  224. role.(*gameModel.Role).GetRoleCross().AddLog(msg.LogData)
  225. } else {
  226. gameModel.SendDb(msg)
  227. }
  228. }
  229. })
  230. serverproto.Handle_GAME_SSCCrossYuanHangTrialInfoAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  231. msg := ev.Msg().(*serverproto.SSCCrossYuanHangTrialInfoAck)
  232. role := gameModel.RoleMag.GetRole(cliId)
  233. if role == nil {
  234. return
  235. }
  236. util.DebugF("uid=%v receive SSCCrossYuanHangTrialInfoAck ms=%v", role.GetUUid(), msg)
  237. ackMsg := &serverproto.SCCrossYuanHangTrialInfoAck{
  238. Error: msg.Error,
  239. TrialData: msg.TrialData,
  240. NickName: msg.NickName,
  241. }
  242. role.ReplayGate(ackMsg, true)
  243. })
  244. //////巅峰之塔
  245. serverproto.Handle_GAME_CSCrossTopTowerFightListReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  246. msg := ev.Msg().(*serverproto.CSCrossTopTowerFightListReq)
  247. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  248. if role == nil {
  249. return
  250. }
  251. util.InfoF("uid=%v CSCrossTopTowerFightListReq msg=%v", role.GetUUid(), msg)
  252. role.(gameModel.CrossLogicOuter).TopTowerFightListReq()
  253. })
  254. //发起挑战,判断合法性
  255. serverproto.Handle_GAME_CSCrossTopTowerChallengeReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  256. msg := ev.Msg().(*serverproto.CSCrossTopTowerChallengeReq)
  257. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  258. if role == nil {
  259. return
  260. }
  261. util.InfoF("uid=%v CSCrossTopTowerChallengeReq msg=%v", role.GetUUid(), msg)
  262. ret, info := role.(*gameModel.Role).GetRoleCross().TopTowerChallengeReq(msg.FightIdx)
  263. ackMsg := &serverproto.SCCrossTopTowerChallengeAck{
  264. Error: int32(ret),
  265. FightInfo: info,
  266. }
  267. role.ReplayGate(ackMsg, true)
  268. })
  269. //获取挑战者view信息
  270. serverproto.Handle_GAME_CSCrossTopTowerChallengeViewInfoReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  271. msg := ev.Msg().(*serverproto.CSCrossTopTowerChallengeViewInfoReq)
  272. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  273. if role == nil {
  274. return
  275. }
  276. util.InfoF("uid=%v CSCrossTopTowerChallengeViewInfoReq msg=%v", role.GetUUid(), msg)
  277. ret, info := role.(*gameModel.Role).GetRoleCross().TopTowerChallengeReq(msg.FightIdx)
  278. ackMsg := &serverproto.SCCrossTopTowerChallengeViewInfoAck{
  279. Error: int32(ret),
  280. FightInfo: info,
  281. }
  282. role.ReplayGate(ackMsg, true)
  283. })
  284. //战斗结果通知
  285. serverproto.Handle_GAME_CSCrossTopTowerChallengeResultReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  286. msg := ev.Msg().(*serverproto.CSCrossTopTowerChallengeResultReq)
  287. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  288. if role == nil {
  289. return
  290. }
  291. util.InfoF("uid=%v CSCrossTopTowerChallengeResultReq msg=%v", role.GetUUid(), msg)
  292. role.(gameModel.CrossLogicOuter).TopTowerChallengeResultReq(msg.IsWin, msg.FightIdx)
  293. })
  294. //买路操作(直接胜利)
  295. serverproto.Handle_GAME_CSCrossTopTowerForceWinReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  296. msg := ev.Msg().(*serverproto.CSCrossTopTowerForceWinReq)
  297. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  298. if role == nil {
  299. return
  300. }
  301. util.InfoF("uid=%v CSCrossTopTowerForceWinReq msg=%v", role.GetUUid(), msg)
  302. role.(gameModel.CrossLogicOuter).TopTowerForceWinReq(msg.FightIdx)
  303. })
  304. //获取买路排行榜
  305. serverproto.Handle_GAME_CSCrossTopTowerForceWinRankListReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  306. msg := ev.Msg().(*serverproto.CSCrossTopTowerForceWinRankListReq)
  307. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  308. if role == nil {
  309. return
  310. }
  311. util.InfoF("uid=%v CSCrossTopTowerForceWinRankListReq msg=%v", role.GetUUid(), msg)
  312. crossSSMsg := &serverproto.SSCrossTopTowerForceWinRankListReq{
  313. Uid: msg.Uid,
  314. StartIdx: msg.StartIdx,
  315. }
  316. role.(*gameModel.Role).SendSocial(crossSSMsg)
  317. })
  318. //from router
  319. //巅峰之塔匹配玩家ack
  320. serverproto.Handle_GAME_SSCrossTopTowerMatchFightAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  321. msg := ev.Msg().(*serverproto.SSCrossTopTowerMatchFightAck)
  322. role := gameModel.RoleMag.GetRole(cliId)
  323. if role == nil {
  324. return
  325. }
  326. util.DebugF("uid=%v receive SSCrossTopTowerMatchFightAck msg=%v", role.GetUUid(), msg)
  327. role.(*gameModel.Role).GetRoleCross().OnTopTowerFightMatchList(msg)
  328. })
  329. //获取买路排行榜
  330. serverproto.Handle_GAME_SSCrossTopTowerForceWinRankListAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  331. msg := ev.Msg().(*serverproto.SSCrossTopTowerForceWinRankListAck)
  332. role := gameModel.RoleMag.GetRole(cliId)
  333. if role == nil {
  334. return
  335. }
  336. util.DebugF("uid=%v receive SSCrossTopTowerForceWinRankListAck ms=%v", role.GetUUid(), msg)
  337. ackMsg := &serverproto.SCCrossTopTowerForceWinRankListAck{
  338. SelfRank: msg.SelfRank,
  339. SelfScore: msg.SelfScore,
  340. TotalRank: msg.TotalRank,
  341. RankList: msg.RankList,
  342. StartIdx: msg.StartIdx,
  343. }
  344. role.ReplayGate(ackMsg, true)
  345. })
  346. //////GlobalCross 跨服地图相关系统(教堂)
  347. //获取服务器列表信息(状态)
  348. serverproto.Handle_GAME_CSGCrossGetServerStateReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  349. msg := ev.Msg().(*serverproto.CSGCrossGetServerStateReq)
  350. util.DebugF("uid=%v receive CSGCrossGetServerStateReq msg=%v", cliId.SessID, msg)
  351. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  352. if role == nil {
  353. return
  354. }
  355. ackMsg := gameModel.GetServerStateListByType(msg.ServerType, true)
  356. if ackMsg == nil {
  357. ssStateMsg := &serverproto.SSGetGServerStateReq{
  358. ServerType: model.SERVICE_NODE_TYPE_GLOBALCROSSMAP,
  359. }
  360. role.(*gameModel.Role).SendSocial(ssStateMsg)
  361. } else {
  362. role.ReplayGate(ackMsg, true)
  363. }
  364. })
  365. //角色进入地图
  366. serverproto.Handle_GAME_CSGCrossPlayerEnterMapReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  367. msg := ev.Msg().(*serverproto.CSGCrossPlayerEnterMapReq)
  368. util.DebugF("uid=%v receive CSGCrossPlayerEnterMapReq msg=%v", cliId.SessID, msg)
  369. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  370. if role == nil {
  371. return
  372. }
  373. role.(gameModel.RoleCrossMapRouter).PlayerEnterMap(msg)
  374. })
  375. //角色离开地图
  376. serverproto.Handle_GAME_CSGCrossPlayerLeaveMapReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  377. msg := ev.Msg().(*serverproto.CSGCrossPlayerLeaveMapReq)
  378. util.DebugF("uid=%v receive CSGCrossPlayerLeaveMapReq msg=%v", cliId.SessID, msg)
  379. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  380. if role == nil {
  381. return
  382. }
  383. role.(gameModel.RoleCrossMapRouter).PlayerLeave(msg)
  384. })
  385. //客户端1s内发送的位置同步包(视野同步)
  386. serverproto.Handle_GAME_CSGCrossPlayerMapSyncPosReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  387. msg := ev.Msg().(*serverproto.CSGCrossPlayerMapSyncPosReq)
  388. //util.DebugF("uid=%v receive CSGCrossPlayerMapSyncPosReq msg=%v", cliId.SessID, msg)
  389. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  390. if role == nil {
  391. return
  392. }
  393. role.(gameModel.RoleCrossMapRouter).PlayerMoveSync(msg)
  394. })
  395. //客户端模拟使用
  396. serverproto.Handle_GAME_CSGCrossPlayerMapSyncParamReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  397. msg := ev.Msg().(*serverproto.CSGCrossPlayerMapSyncParamReq)
  398. //util.DebugF("uid=%v receive CSGCrossPlayerMapSyncParamReq msg=%v", cliId.SessID, msg)
  399. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  400. if role == nil {
  401. return
  402. }
  403. role.(gameModel.RoleCrossMapRouter).PlayerSyncParam(msg)
  404. })
  405. //获取其他玩家角色信息,AOI地图显示使用(注意:每次发送不超过10个玩家,超过10个后服务器不会返回,做保护处理)
  406. serverproto.Handle_GAME_CSGCrossPlayerShowInfoReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  407. msg := ev.Msg().(*serverproto.CSGCrossPlayerShowInfoReq)
  408. util.DebugF("uid=%v receive CSGCrossPlayerShowInfoReq msg=%v", cliId.SessID, msg)
  409. role := gameModel.RoleMag.GetRoleOrKick(cliId, ev)
  410. if role == nil {
  411. return
  412. }
  413. if len(msg.PlayerList) > 30 && len(msg.PlayerList) <= 0 {
  414. util.WarnF("uid=%v CSCrossPlayerShowInfoReq player beyond[30] limit len=%v", role.GetUUid(), len(msg.PlayerList))
  415. return
  416. }
  417. ssCrossMsg := &serverproto.SSGCrossMapOtherUnitShowInfoReq{
  418. ShowUidList: msg.PlayerList,
  419. CurSpaceId: role.(*gameModel.Role).GetRoleCross().GetCrossCurSpaceId(),
  420. }
  421. role.(*gameModel.Role).SendSocial(ssCrossMsg)
  422. })
  423. //from router
  424. //获取服务器线路信息
  425. serverproto.Handle_GAME_SSGetGServerStateAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  426. msg := ev.Msg().(*serverproto.SSGetGServerStateAck)
  427. gameModel.UpdateServerStateListByType(msg.ServerType, msg)
  428. if cliId.SessID > 0 {
  429. util.DebugF("uid=%v receive SSGetGServerStateAck msg=%v", cliId.SessID, msg)
  430. role := gameModel.RoleMag.GetRole(cliId)
  431. if role == nil {
  432. return
  433. }
  434. ackMsg := gameModel.GetServerStateListByType(msg.ServerType, false)
  435. role.ReplayGate(ackMsg, true)
  436. }
  437. })
  438. //进入地图回应
  439. serverproto.Handle_GAME_SSGCrossMapEnterAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  440. msg := ev.Msg().(*serverproto.SSGCrossMapEnterAck)
  441. role := gameModel.RoleMag.GetRole(cliId)
  442. if role == nil {
  443. return
  444. }
  445. util.DebugF("uid=%v receive SSGCrossMapEnterAck ms=%v", role.GetUUid(), msg)
  446. ackMsg := &serverproto.SCGCrossPlayerEnterMapAck{
  447. Error: msg.Error,
  448. SelfInfo: msg.UnitInfo,
  449. LineNum: msg.LineNum,
  450. }
  451. role.ReplayGate(ackMsg, true)
  452. //选择线路成功
  453. if msg.Error == int32(serverproto.ErrorCode_ERROR_OK) {
  454. role.(*gameModel.Role).GetRoleCross().OnPlayerEnterMapSuccess(msg)
  455. }
  456. })
  457. //通知其他玩家,有单位进入地图
  458. serverproto.Handle_GAME_SSGCrossMapEnterNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  459. msg := ev.Msg().(*serverproto.SSGCrossMapEnterNtf)
  460. //util.DebugF("SSGCrossMapEnterNtf ms=%v", len(msg.UnitInfoList))
  461. ntfMsg := &serverproto.SCGCrossPlayerEnterNtf{
  462. UnitInfoList: msg.UnitInfoList,
  463. }
  464. gameModel.SendMsgFromCrossRouter(ntfMsg, cliId)
  465. })
  466. //通知其他单位,有单位离开地图
  467. serverproto.Handle_GAME_SSGCrossMapLeaveNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  468. msg := ev.Msg().(*serverproto.SSGCrossMapLeaveNtf)
  469. //util.DebugF("SSGCrossMapLeaveNtf ms=%v", len(msg.UnitInfoList))
  470. ntfMsg := &serverproto.SCGCrossPlayerLeaveNtf{
  471. UnitInfoList: msg.UnitInfoList,
  472. }
  473. gameModel.SendMsgFromCrossRouter(ntfMsg, cliId)
  474. })
  475. //位置同步消息
  476. serverproto.Handle_GAME_SSGCrossMapSyncPosNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  477. msg := ev.Msg().(*serverproto.SSGCrossMapSyncPosNtf)
  478. //util.DebugF("SSGCrossMapSyncPosNtf ms=%v", len(msg.SyncUnitList))
  479. ntfMsg := &serverproto.SCGCrossPlayerMapSyncPosNtf{
  480. UnitInfoList: msg.SyncUnitList,
  481. }
  482. gameModel.SendMsgFromCrossRouter(ntfMsg, cliId)
  483. })
  484. serverproto.Handle_GAME_SSGCrossMapSyncParamNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  485. msg := ev.Msg().(*serverproto.SSGCrossMapSyncParamNtf)
  486. //util.DebugF("SSGCrossMapSyncParamNtf ms=%v", msg.SyncUnitList)
  487. ntfMsg := &serverproto.SCGCrossPlayerMapSyncParamNtf{
  488. UnitInfoList: msg.SyncUnitList,
  489. }
  490. gameModel.SendMsgFromCrossRouter(ntfMsg, cliId)
  491. })
  492. serverproto.Handle_GAME_SSGCrossMapOtherUnitShowInfoNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  493. msg := ev.Msg().(*serverproto.SSGCrossMapOtherUnitShowInfoNtf)
  494. util.DebugF("receive SSGCrossMapOtherUnitShowInfoAck msg=%v", len(msg.ShowInfoList))
  495. ntfMsg := &serverproto.SCGCrossPlayerShowInfoNtf{
  496. ShowInfoList: msg.ShowInfoList,
  497. }
  498. gameModel.SendMsgFromCrossRouter(ntfMsg, cliId)
  499. })
  500. }