map_msg.go 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  1. package msg
  2. import (
  3. "rocommon"
  4. "rocommon/util"
  5. "roserver/baseserver/model"
  6. model2 "roserver/game/model"
  7. "roserver/serverproto"
  8. )
  9. // todo...
  10. // 后续会拆分成一个服务器来处理
  11. func init() {
  12. //角色进入地图
  13. //serverproto.Handle_GAME_CSPlayerEnterMapReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  14. // msg := ev.Msg().(*serverproto.CSPlayerEnterMapReq)
  15. // util.DebugF("receive CSPlayerEnterMapReq msg=%v", msg)
  16. // role := model2.RoleMag.GetRoleOrKick(cliId, ev)
  17. // if role == nil {
  18. // return
  19. // }
  20. //
  21. // role.(model2.RoleMapOuter).PlayerEnterMap(msg)
  22. //})
  23. ////角色离开地图
  24. //serverproto.Handle_GAME_CSPlayerLeaveMapReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  25. // msg := ev.Msg().(*serverproto.CSPlayerLeaveMapReq)
  26. // util.DebugF("receive CSPlayerLeaveMapReq msg=%v", msg)
  27. // role := model2.RoleMag.GetRoleOrKick(cliId, ev)
  28. // if role == nil {
  29. // return
  30. // }
  31. //
  32. // //role.(model2.RoleMapOuter).PlayerLeave(msg.Pos)
  33. //})
  34. //
  35. ////移动
  36. //serverproto.Handle_GAME_CSPlayerMoveReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  37. // msg := ev.Msg().(*serverproto.CSPlayerMoveReq)
  38. // //util.DebugF("receive CSPlayerMoveReq msg=%v", msg)
  39. // role := model2.RoleMag.GetRoleOrKick(cliId, ev)
  40. // if role == nil {
  41. // return
  42. // }
  43. //
  44. // //role.(model2.RoleMapOuter).PlayerMove(msg)
  45. //})
  46. //
  47. ////获取其他玩家角色信息(地图AOI像是使用)
  48. //serverproto.Handle_GAME_CSMapGetOtherPlayersInfoReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  49. // msg := ev.Msg().(*serverproto.CSMapGetOtherPlayersInfoReq)
  50. // util.DebugF("receive CSMapGetOtherPlayersInfoReq msg=%v", msg)
  51. // role := model2.RoleMag.GetRoleOrKick(cliId, ev)
  52. // if role == nil {
  53. // return
  54. // }
  55. //
  56. // //超过获取数据上限
  57. // if len(msg.PlayerList) > 30 {
  58. // util.WarnF("uid=%v CSGetOtherPlayersInfoReq player beyond limit len=%v", role.GetUUid(), len(msg.PlayerList))
  59. // return
  60. // }
  61. //
  62. // //获取昵称,外观等
  63. // reqMsg := &serverproto.CSMapGetOtherPlayersInfoReq{}
  64. // reqMsg.PlayerList = msg.PlayerList
  65. // //发送给Aoi Server获取信息
  66. // if len(reqMsg.PlayerList) > 0 {
  67. // //role.(*model2.Role).SendAoi(reqMsg)
  68. // }
  69. //})
  70. ////消息来自Aoi
  71. //serverproto.Handle_GAME_SCMapOtherPlayersInfoNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  72. // msg := ev.Msg().(*serverproto.SCMapOtherPlayersInfoNtf)
  73. // util.DebugF("receive SCOtherPlayersInfoNtf msg=%v", msg)
  74. //
  75. // role := model2.RoleMag.GetRole(cliId)
  76. // if role == nil {
  77. // return
  78. // }
  79. //
  80. // role.ReplayGate(msg, true)
  81. //})
  82. ////客户端播放动作请求
  83. //serverproto.Handle_GAME_CSPlayerActionReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  84. // msg := ev.Msg().(*serverproto.CSPlayerActionReq)
  85. // util.DebugF("receive CSPlayerActionReq msg=%v", msg)
  86. // role := model2.RoleMag.GetRoleOrKick(cliId, ev)
  87. // if role == nil {
  88. // return
  89. // }
  90. //
  91. // //判断是否存在该动作
  92. // ackMsg := &serverproto.SCPlayerActionAck{
  93. // Error: int32(serverproto.ErrorCode_ERROR_OK),
  94. // ActionId: msg.ActionId,
  95. // Pos: msg.Pos,
  96. // }
  97. // if msg.ActionId <= 0 {
  98. // ackMsg.Error = int32(serverproto.ErrorCode_ERROR_FAIL)
  99. // } else {
  100. // ackMsg.Error = int32(role.(model2.RoleMapOuter).MapDoAction(msg.ActionId, msg.Pos))
  101. // }
  102. // //返回错误,否则发送给BattleBoss预处理boss召唤
  103. // if ackMsg.Error != int32(serverproto.ErrorCode_ERROR_OK) {
  104. // role.ReplayGate(ackMsg, true)
  105. // }
  106. //})
  107. ///////////////////////////////WorldBoss
  108. //挑战WorldBoss
  109. serverproto.Handle_GAME_CSPlayerChallengeSummonReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  110. msg := ev.Msg().(*serverproto.CSPlayerChallengeSummonReq)
  111. role := model2.RoleMag.GetRoleOrKick(cliId, ev)
  112. if role == nil {
  113. return
  114. }
  115. util.DebugF("uid=%v receive CSPlayerChallengeSummonReq msg=%v", role.GetUUid(), msg)
  116. if role.(*model2.Role).GetRoleMap().ChallengeBossId != 0 {
  117. ack := &serverproto.SCPlayerChallengeSummonAck{
  118. Error: int32(serverproto.ErrorCode_ERROR_AOI_BOSS_CHALLENGING),
  119. }
  120. role.ReplayGate(ack, true)
  121. return
  122. }
  123. role.(model2.RoleMapOuter).MapPlayerChallengeWorldBoss(msg.ChallengeBossUid, msg.BossSummonIdx, "NOAOI")
  124. })
  125. //from battle boss
  126. serverproto.Handle_GAME_SCPlayerChallengeSummonAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  127. msg := ev.Msg().(*serverproto.SCPlayerChallengeSummonAck)
  128. role := model2.RoleMag.GetRole(cliId)
  129. if role == nil {
  130. return
  131. }
  132. util.DebugF("uid=%v receive SCPlayerChallengeSummonAck msg=%v", role.GetUUid(), msg)
  133. if msg.Error == int32(serverproto.ErrorCode_ERROR_OK) &&
  134. msg.BossInfo != nil {
  135. role.(model2.RoleMapOuter).DoMapPlayerChallengeWorldBoss(msg.BossInfo.BossId)
  136. }
  137. role.ReplayGate(msg, true)
  138. })
  139. //离开boss场景req
  140. serverproto.Handle_GAME_CSPlayerLeaveChallengeReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  141. msg := ev.Msg().(*serverproto.CSPlayerLeaveChallengeReq)
  142. role := model2.RoleMag.GetRoleOrKick(cliId, ev)
  143. if role == nil {
  144. return
  145. }
  146. util.DebugF("uid=%v receive CSPlayerLeaveChallengeReq msg=%v", role.GetUUid(), msg)
  147. role.(*model2.Role).PlayerBattleBossOffline()
  148. })
  149. //离开boss场景(from battle boss server)
  150. serverproto.Handle_GAME_SSPlayerLeaveChallengeNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  151. msg := ev.Msg().(*serverproto.SSPlayerLeaveChallengeNtf)
  152. util.DebugF("receive SSPlayerLeaveChallengeNtf msg=%v", msg)
  153. ntfMsg := &serverproto.SCPlayerLeaveChallengeNtf{
  154. Uid: msg.LeaveUid,
  155. }
  156. for idx := range msg.NotifyList {
  157. role := model2.RoleMag.GetRoleFromUUid(msg.NotifyList[idx])
  158. if role == nil {
  159. continue
  160. }
  161. role.ReplayGate(ntfMsg, true)
  162. }
  163. })
  164. //进入boss场景
  165. serverproto.Handle_GAME_SSPlayerEnterChallengeNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  166. msg := ev.Msg().(*serverproto.SSPlayerEnterChallengeNtf)
  167. util.DebugF("receive SSPlayerEnterChallengeNtf msg=%v", msg)
  168. ntfMsg := &serverproto.SCPlayerChallengeSummonNtf{
  169. BossUid: msg.BossUid,
  170. SelfUid: msg.EnterUid,
  171. SelfChangePlayId: msg.SelfChangePlayId,
  172. SummonBossType: msg.SummonBossType,
  173. }
  174. ntfMsg.FightList = append(msg.FightList)
  175. //通知自己
  176. if len(msg.NotifyList) <= 0 {
  177. role := model2.RoleMag.GetRoleFromUUid(msg.EnterUid)
  178. if role == nil {
  179. return
  180. }
  181. role.(*model2.Role).GetRoleMap().ChallengeBossId = msg.BossUid
  182. role.ReplayGate(ntfMsg, true)
  183. } else {
  184. for idx := range msg.NotifyList {
  185. role := model2.RoleMag.GetRoleFromUUid(msg.NotifyList[idx])
  186. if role == nil {
  187. continue
  188. }
  189. role.ReplayGate(ntfMsg, true)
  190. }
  191. }
  192. })
  193. //血量上报
  194. serverproto.Handle_GAME_CSPlayerChallengeHpReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  195. msg := ev.Msg().(*serverproto.CSPlayerChallengeHpReq)
  196. role := model2.RoleMag.GetRoleOrKick(cliId, ev)
  197. if role == nil {
  198. return
  199. }
  200. util.DebugF("uid=%v receive CSPlayerChallengeHpReq msg=%v", role.GetUUid(), msg)
  201. role.(model2.RoleMapOuter).MapWorldBossHp(msg.DamageHp)
  202. })
  203. //bossHP通知(from battle boss server)
  204. serverproto.Handle_GAME_SSPlayerChallengeHpNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  205. msg := ev.Msg().(*serverproto.SSPlayerChallengeHpNtf)
  206. util.DebugF("receive SSPlayerChallengeHpNtf msg:=%v", msg)
  207. ntfMsg := &serverproto.SCPlayerChallengeHpNtf{
  208. CurBossHp: msg.CurBossHp,
  209. }
  210. for idx := range msg.NotifyList {
  211. role := model2.RoleMag.GetRoleFromUUid(msg.NotifyList[idx])
  212. if role == nil {
  213. continue
  214. }
  215. role.ReplayGate(ntfMsg, true)
  216. }
  217. })
  218. //挑战结果通知(from battle boss server)
  219. serverproto.Handle_GAME_SSPlayerChallengeResultNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  220. msg := ev.Msg().(*serverproto.SSPlayerChallengeResultNtf)
  221. util.DebugF("receive SSPlayerChallengeResultNtf msg=%v", msg)
  222. ntfMsg := &serverproto.SCPlayerChallengeResultNtf{
  223. Result: msg.Result,
  224. }
  225. for idx := range msg.NotifyList {
  226. role := model2.RoleMag.GetRoleFromUUid(msg.NotifyList[idx])
  227. if role == nil {
  228. continue
  229. }
  230. role.(*model2.Role).GetRoleMap().ChallengeBossId = 0
  231. role.ReplayGate(ntfMsg, true)
  232. }
  233. })
  234. //获取WorldBoss列表
  235. serverproto.Handle_GAME_CSPlayerWorldBossListReq = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  236. msg := ev.Msg().(*serverproto.CSPlayerWorldBossListReq)
  237. role := model2.RoleMag.GetRoleOrKick(cliId, ev)
  238. if role == nil {
  239. return
  240. }
  241. util.DebugF("uid=%v receive CSPlayerWorldBossListReq msg=%v", role.GetUUid(), msg)
  242. role.(model2.RoleMapOuter).GetWorldBossList()
  243. })
  244. //获取WorldBoss列表 from battle boss
  245. serverproto.Handle_GAME_SCPlayerWorldBossListAck = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  246. msg := ev.Msg().(*serverproto.SCPlayerWorldBossListAck)
  247. util.DebugF("receive CSPlayerWorldBossListAck msg=%v", msg)
  248. role := model2.RoleMag.GetRole(cliId)
  249. if role == nil {
  250. return
  251. }
  252. role.(model2.RoleMapOuter).GetWorldBossListAckFilter(msg)
  253. role.ReplayGate(msg, true)
  254. })
  255. //from battle boss
  256. serverproto.Handle_GAME_SCPlayerWorldBossRandNtf = model.HandleBackendMessage(func(ev rocommon.ProcEvent, cliId model.ClientID) {
  257. msg := ev.Msg().(*serverproto.SCPlayerWorldBossRandNtf)
  258. role := model2.RoleMag.GetRoleFromUUid(cliId.SessID)
  259. if role == nil {
  260. role = model2.RoleMag.GetRoleFromOffline(cliId.SessID)
  261. if role == nil {
  262. return
  263. }
  264. }
  265. util.DebugF("uid=%v receive SCPlayerWorldBossRandNtf msg=%v", role.GetUUid(), msg)
  266. // 获取rand点奖励
  267. if msg.Error == int32(serverproto.ErrorCode_ERROR_OK) && msg.PointInfo != nil {
  268. msg.Error = int32(role.(model2.RoleMapOuter).GenWorldBossRandReward(msg.PointInfo, msg.PointInfo.IsOffline))
  269. }
  270. role.ReplayGate(msg, true)
  271. })
  272. }