srvRoom.lua 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. --[[
  2. Descripttion:房间管理
  3. version:
  4. Author: Neo,Huang
  5. Date: 2023-11-16 22:19:05
  6. LastEditors: Neo,Huang
  7. LastEditTime: 2023-11-16 23:19:50
  8. --]]
  9. local code = require("code")
  10. local baseService = require("baseService")
  11. local util_match = require("utils.util_match")
  12. local util_user = require("utils.util_user")
  13. local nodeMgr = require("nodeMgr")
  14. local gameConst = require("const.gameConst")
  15. local battleData = require("data.battle")
  16. local bagData = require("data.bag")
  17. local root = {}
  18. -- 坐下
  19. function root.seat_down(uid, roomId, seatId)
  20. if is_empty(roomId) or is_empty(seatId) then
  21. return code.PARAMTER_ERROR
  22. end
  23. -- 房间是否存在
  24. if not util_match:is_room_exist(roomId) then
  25. -- 房间不存在
  26. util_user:user_proto_notify("on_room_seat_down", {code = code.BATTLE.SEAT_ROOM_NOT_EXIST})
  27. return
  28. end
  29. local seatUid = util_match:get_seat_player(roomId, seatId)
  30. if not is_empty(seatUid) then
  31. -- 座位已占用
  32. util_user:user_proto_notify("on_room_seat_down", {code = code.BATTLE.SEAT_PLAYER_EXIST})
  33. return
  34. end
  35. local status = util_match:get_room_status(roomId)
  36. if status ~= 0 then
  37. -- 房间状态错误
  38. util_user:user_proto_notify("on_room_seat_down", {code = code.BATTLE.SEAT_BATTLE_START})
  39. return
  40. end
  41. -- 进入房间
  42. local _roomId = battleData:get_room_id()
  43. if not is_empty(_roomId) then
  44. local roomPlayerInfo = util_match:get_room_player_info(_roomId, uid)
  45. -- 同一个房间
  46. if roomId == _roomId then
  47. -- 相同位置
  48. if roomPlayerInfo.seatId == seatId then
  49. util_user:user_proto_notify("on_room_seat_down", {code = code.BATTLE.SEAT_SAME_PLACE})
  50. return
  51. end
  52. if not util_match:seat_down(uid, roomId, seatId) then
  53. -- 房间/座位不存在
  54. util_user:user_proto_notify("on_room_seat_down", {code = code.BATTLE.SEAT_NOT_ENTER_ROOM})
  55. return
  56. end
  57. -- 未坐下
  58. if is_empty(roomPlayerInfo.seatId) then
  59. -- 消耗道具
  60. local price = util_match:get_room_price(_roomId)
  61. local ok, costItems = bagData:is_enough(uid, {{id = gameConst.ITEM_ID.DIAMOND, count = price}})
  62. if not ok then
  63. util_user:user_proto_notify("on_room_seat_down", {code = code.BAG.ITEM_NOT_ENOUGH})
  64. return
  65. end
  66. -- 玩家绑定房间信息 - 且消耗道具
  67. util_match:band_room(uid, roomId, costItems)
  68. end
  69. util_user:user_proto_notify("on_room_seat_down", {code = code.OK})
  70. return
  71. end
  72. -- 不同房间 - 离开原来房间
  73. -- 房间状态
  74. local status = util_match:get_room_status(_roomId)
  75. if status > 0 then
  76. util_user:user_proto_notify("on_room_seat_down", {code = code.BATTLE.SEAT_BATTLE_START})
  77. return
  78. end
  79. if not is_empty(roomPlayerInfo.seatId) then
  80. -- 玩家解绑房间信息 - 且返还房费
  81. util_match:unband_room(uid, "seat")
  82. end
  83. -- 通知在线玩家 - 离开房间
  84. local pack = {
  85. type = 101,
  86. roomId = _roomId,
  87. changeRoomPlayer = {util_match:pack_room_player_info(_roomId, uid)}
  88. }
  89. nodeMgr.broadcast_proto_notify("on_room_player_change", pack)
  90. util_match:leave(uid, _roomId)
  91. end
  92. -- 消耗道具
  93. local price = util_match:get_room_price(roomId)
  94. local ok, costItems = bagData:is_enough(uid, {{id = gameConst.ITEM_ID.DIAMOND, count = price}})
  95. if not ok then
  96. util_user:user_proto_notify("on_room_seat_down", {code = code.BAG.ITEM_NOT_ENOUGH})
  97. return
  98. end
  99. if not util_match:seat_down(uid, roomId, seatId) then
  100. -- 房间/座位不存在
  101. util_user:user_proto_notify("on_room_seat_down", {code = code.BATTLE.SEAT_NOT_ENTER_ROOM})
  102. return
  103. end
  104. -- 玩家绑定房间信息 - 且消耗道具
  105. util_match:band_room(uid, roomId, costItems)
  106. -- 通知在线玩家 - 坐下
  107. local pack = {
  108. type = 102,
  109. roomId = roomId,
  110. changeRoomPlayer = {util_match:pack_room_player_info(roomId, uid)}
  111. }
  112. nodeMgr.broadcast_proto_notify("on_room_player_change", pack)
  113. -- 是否开始战斗
  114. if util_match:is_room_start_battle(roomId) then
  115. util_match:start_battle(roomId)
  116. end
  117. end
  118. function root.onStart()
  119. end
  120. function root.onStop()
  121. end
  122. baseService.start(root, ".srvRoom", true)