srvRoom.lua 4.2 KB

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