--[[ Descripttion:房间管理 version: Author: Neo,Huang Date: 2023-11-16 22:19:05 LastEditors: Neo,Huang LastEditTime: 2023-11-16 23:19:50 --]] local code = require("code") local baseService = require("baseService") local util_match = require("utils.util_match") local util_user = require("utils.util_user") local nodeMgr = require("nodeMgr") local gameConst = require("const.gameConst") local battleData = require("data.battle") local bagData = require("data.bag") local root = {} -- 坐下 function root.seat_down(uid, roomId, seatId) if is_empty(roomId) or is_empty(seatId) then return code.PARAMTER_ERROR end -- 房间是否存在 if not util_match:is_room_exist(roomId) then -- 房间不存在 util_user:user_proto_notify("on_room_seat_down", {code = code.BATTLE.SEAT_ROOM_NOT_EXIST}) return end local seatUid = util_match:get_seat_player(roomId, seatId) if not is_empty(seatUid) then -- 座位已占用 util_user:user_proto_notify("on_room_seat_down", {code = code.BATTLE.SEAT_PLAYER_EXIST}) return end local status = util_match:get_room_status(roomId) if status ~= 0 then -- 房间状态错误 util_user:user_proto_notify("on_room_seat_down", {code = code.BATTLE.SEAT_BATTLE_START}) return end -- 进入房间 local _roomId = battleData:get_room_id() if not is_empty(_roomId) then local roomPlayerInfo = util_match:get_room_player_info(_roomId, uid) -- 同一个房间 if roomId == _roomId then -- 相同位置 if roomPlayerInfo.seatId == seatId then util_user:user_proto_notify("on_room_seat_down", {code = code.BATTLE.SEAT_SAME_PLACE}) return end if not util_match:seat_down(uid, roomId, seatId) then -- 房间/座位不存在 util_user:user_proto_notify("on_room_seat_down", {code = code.BATTLE.SEAT_NOT_ENTER_ROOM}) return end -- 未坐下 if is_empty(roomPlayerInfo.seatId) then -- 消耗道具 local price = util_match:get_room_price(_roomId) local ok, costItems = bagData:is_enough(uid, {{id = gameConst.ITEM_ID.DIAMOND, count = price}}) if not ok then util_user:user_proto_notify("on_room_seat_down", {code = code.BAG.ITEM_NOT_ENOUGH}) return end -- 玩家绑定房间信息 - 且消耗道具 util_match:band_room(uid, roomId, costItems) end util_user:user_proto_notify("on_room_seat_down", {code = code.OK}) return end -- 不同房间 - 离开原来房间 -- 房间状态 local status = util_match:get_room_status(_roomId) if status > 0 then util_user:user_proto_notify("on_room_seat_down", {code = code.BATTLE.SEAT_BATTLE_START}) return end if not is_empty(roomPlayerInfo.seatId) then -- 玩家解绑房间信息 - 且返还房费 util_match:unband_room(uid, "seat") end -- 通知在线玩家 - 离开房间 local pack = { type = 101, roomId = _roomId, changeRoomPlayer = {util_match:pack_room_player_info(_roomId, uid)} } nodeMgr.broadcast_proto_notify("on_room_player_change", pack) util_match:leave(uid, _roomId) end -- 消耗道具 local price = util_match:get_room_price(roomId) local ok, costItems = bagData:is_enough(uid, {{id = gameConst.ITEM_ID.DIAMOND, count = price}}) if not ok then util_user:user_proto_notify("on_room_seat_down", {code = code.BAG.ITEM_NOT_ENOUGH}) return end if not util_match:seat_down(uid, roomId, seatId) then -- 房间/座位不存在 util_user:user_proto_notify("on_room_seat_down", {code = code.BATTLE.SEAT_NOT_ENTER_ROOM}) return end -- 玩家绑定房间信息 - 且消耗道具 util_match:band_room(uid, roomId, costItems) -- 通知在线玩家 - 坐下 local pack = { type = 102, roomId = roomId, changeRoomPlayer = {util_match:pack_room_player_info(roomId, uid)} } nodeMgr.broadcast_proto_notify("on_room_player_change", pack) -- 是否开始战斗 if util_match:is_room_start_battle(roomId) then util_match:start_battle(roomId) end end function root.onStart() end function root.onStop() end baseService.start(root, ".srvRoom", true)