room.lua 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. --[[
  2. Descripttion:房间
  3. version:
  4. Author: Neo,Huang
  5. Date: 2022-07-05 17:32:01
  6. LastEditors: Neo,Huang
  7. LastEditTime: 2022-07-05 20:29:29
  8. --]]
  9. local code = require("code")
  10. local util_match = require("utils.util_match")
  11. local gameConst = require("const.gameConst")
  12. local nodeMgr = require("nodeMgr")
  13. local nodeUtil = require("utils.nodeUtil")
  14. local boxAdapt = require("adapt.boxAdapt")
  15. local bagData = require("data.bag")
  16. local battleData = require("data.battle")
  17. local root = {}
  18. -- 获取房间列表
  19. function root:room_get_info(role, msg)
  20. local ret = {
  21. roomList = util_match:pack_room_info_list(),
  22. myRoom = util_match:pack_player_room_info(role.uid)
  23. }
  24. return code.OK, ret
  25. end
  26. -- 创建房间
  27. function root:room_create_room(role, msg)
  28. local playCount = msg.playCount
  29. local battleBoxList = msg.battleBoxList
  30. local uid = role.uid
  31. -- 检查箱子
  32. if not boxAdapt:battle_is_box_list_valid(battleBoxList) then
  33. return code.UNKNOWN
  34. end
  35. -- 消耗
  36. local price = boxAdapt:battle_get_box_price(battleBoxList)
  37. local ok, costItems = bagData:is_enough(uid, {{id = gameConst.ITEM_ID.DIAMOND, count = price}})
  38. if not ok then
  39. return code.BAG.ITEM_NOT_ENOUGH
  40. end
  41. -- 创建房间
  42. local ok, roomId = util_match:create_room(uid, playCount, battleBoxList)
  43. if not ok then
  44. return code.PARAMTER_ERROR
  45. end
  46. -- 玩家绑定房间信息 - 且消耗道具
  47. util_match:band_room(uid, roomId, costItems)
  48. -- 全服广播
  49. local pack = {
  50. room = util_match:pack_room_info(roomId)
  51. }
  52. nodeMgr.broadcast_proto_notify("on_room_new", pack)
  53. local ret = {
  54. room = util_match:pack_room_info(roomId)
  55. }
  56. return code.OK, ret
  57. end
  58. -- 进入房间
  59. function root:room_player_enter(role, msg)
  60. local uid = role.uid
  61. local roomId = msg.roomId
  62. if is_empty(roomId) then
  63. return code.PARAMTER_ERROR
  64. end
  65. -- 房间是否存在
  66. local ok = util_match:is_room_exist(roomId)
  67. if not ok then
  68. -- 房间不存在
  69. return code.UNKNOWN
  70. end
  71. ok = util_match:enter_room(uid, roomId)
  72. if not ok then
  73. -- 进入房间失败
  74. return code.UNKNOWN
  75. end
  76. -- 通知在线玩家
  77. local pack = {
  78. type = 100,
  79. roomId = roomId,
  80. changeRoomPlayer = {util_match:pack_room_player_info(roomId, uid)}
  81. }
  82. nodeMgr.broadcast_proto_notify("on_room_player_change", pack)
  83. local ret = {
  84. room = util_match:pack_room_info(roomId)
  85. }
  86. return code.OK, ret
  87. end
  88. -- 坐下
  89. function root:room_player_seat(role, msg)
  90. local uid = role.uid
  91. local roomId = msg.roomId
  92. local seatId = msg.seatId
  93. if is_empty(roomId) or is_empty(seatId) then
  94. return code.PARAMTER_ERROR
  95. end
  96. -- 避免数据竞争
  97. nodeUtil:send_to_node("match", ".srvRoom", "seat_down", uid, roomId, seatId)
  98. return code.OK
  99. end
  100. -- 站起
  101. function root:room_stand_up(role, msg)
  102. local uid = role.uid
  103. local roomId = battleData:get_room_id()
  104. -- 玩家未进入房间
  105. if is_empty(roomId) then
  106. return code.UNKNOWN
  107. end
  108. -- 房间状态
  109. local status = util_match:get_room_status(roomId)
  110. if status ~= 0 then
  111. return code.UNKNOWN
  112. end
  113. -- 房间是否存在
  114. local ok = util_match:stand_up(uid, roomId)
  115. if not ok then
  116. -- 玩家未坐下
  117. return code.UNKNOWN
  118. end
  119. -- 玩家解绑房间信息 - 且返还房费
  120. util_match:unband_room(uid, "seat")
  121. -- 通知在线玩家 - 站起
  122. local pack = {
  123. type = 103,
  124. roomId = roomId,
  125. changeRoomPlayer = {util_match:pack_room_player_info(roomId, uid)}
  126. }
  127. nodeMgr.broadcast_proto_notify("on_room_player_change", pack)
  128. return code.OK
  129. end
  130. -- 离开房间
  131. function root:room_player_leave(role, msg)
  132. local uid = role.uid
  133. local roomId = battleData:get_room_id(uid)
  134. -- 玩家未进入房间
  135. if is_empty(roomId) then
  136. return code.UNKNOWN
  137. end
  138. -- 房间状态
  139. local status = util_match:get_room_status(roomId)
  140. if status > 0 then
  141. return code.UNKNOWN
  142. end
  143. -- 通知在线玩家 - 站起
  144. local pack = {
  145. type = 101,
  146. roomId = roomId,
  147. changeRoomPlayer = {util_match:pack_room_player_info(roomId, uid)}
  148. }
  149. nodeMgr.broadcast_proto_notify("on_room_player_change", pack)
  150. util_match:leave(uid, roomId)
  151. -- 玩家解绑房间信息 - 且返还房费
  152. util_match:unband_room(uid, "leave")
  153. return code.OK
  154. end
  155. return root