jx_client_neibu/lua_probject/base_project/Game/Data/Room.lua

222 lines
4.6 KiB
Lua
Raw Normal View History

2025-04-01 10:48:36 +08:00
-- 房间基本数据类
--author--
2025-06-16 15:24:27 +08:00
StateType =
2025-04-01 10:48:36 +08:00
{
Ready = 0,
Palying = 1,
PalyingWait = 2
}
---房间数据对象
local Room = {
-- 房间ID
room_id = "",
-- 游戏ID
game_id = 0,
-- 服务器地址
server_host = "",
-- 玩家session
session = "",
-- 自己
self_player = nil,
-- 房主ID
owner_id = "",
-- 庄家座位号
banker_seat = 0,
-- 当前回合
curren_round = 0,
-- 当前转向的座位号
curren_turn_seat = 0,
-- 房间配置
room_config = nil,
-- 玩家列表
player_list = nil,
2025-06-16 15:24:27 +08:00
-- 观战玩家列表
witness_player_list = nil,
2025-06-25 22:49:44 +08:00
_flag_updateWitness = false,
2025-04-01 10:48:36 +08:00
-- 游戏中
playing = false,
create_time = "",
group_id = 0,
-- 自己在当前房间所在圈子的职位1盟主2管理员3用户非圈子房间就是3
lev = 3,
-- 房间倍数
score_times = 1,
-- 体力值开关
hpOnOff = 0,
-- 牌友圈的游戏id
pid = 0,
-- 房间重连标记
reloading = false,
}
---
-- a RoomConfig
RoomConfig = {
-- 人数
people_num = 2,
-- 回合数
opt_round = 1,
}
2025-06-16 15:24:27 +08:00
---
2025-04-01 10:48:36 +08:00
-- @type Room
local M = Room
--- Create a new Room
function Room.new()
local self = {}
2025-06-16 15:24:27 +08:00
setmetatable(self, { __index = M })
2025-04-01 10:48:36 +08:00
self:init()
return self
end
function M:init()
self.player_list = {}
2025-06-16 15:24:27 +08:00
self.room_config = {}
2025-04-01 10:48:36 +08:00
end
-- 创建玩家
function M:NewPlayer()
return Player.new()
end
-- 添加玩家
function M:AddPlayer(player)
if (not player) then return end
2025-06-16 15:24:27 +08:00
for k, tem in ipairs(self.player_list) do
if (tem.self_user.account_id == player.self_user.account_id) then
2025-04-01 10:48:36 +08:00
-- tem = player
self.player_list[k] = player
return
end
end
2025-06-16 15:24:27 +08:00
self.player_list[#self.player_list + 1] = player
2025-04-01 10:48:36 +08:00
end
-- 是否为不可负分房间
function M:checkHpNonnegative()
local isNonnegative = self.room_config.isNonnegative
if isNonnegative and isNonnegative == 1 then
return true
end
return false
end
-- 删除指定玩家
-- <param name="player"></param>
function M:RemovePlayer(player)
2025-06-16 15:24:27 +08:00
for i, _player in ipairs(self.player_list) do
2025-04-01 10:48:36 +08:00
if _player == player then
2025-06-16 15:24:27 +08:00
table.remove(self.player_list, i)
return
2025-04-01 10:48:36 +08:00
end
end
end
-- 获取指定玩家_userid
-- <param name="id"></param>
-- <returns></returns>
function M:GetPlayerById(id)
2025-06-16 15:24:27 +08:00
for _, tem in pairs(self.player_list) do
2025-04-01 10:48:36 +08:00
if (tem.self_user.account_id == id) then
return tem
end
end
return nil;
end
-- 获取指定玩家_桌号
-- <param name="id"></param>
-- <returns></returns>
function M:GetPlayerBySeat(seat)
2025-06-16 15:24:27 +08:00
for _, tem in ipairs(self.player_list) do
2025-04-01 10:48:36 +08:00
if (tem.seat == seat) then
return tem
end
end
return nil
end
-- 获取大结算显示的积分
function M:GetTotalScore(score)
if self.hpOnOff == 1 then
return d2ad(score)
else
return score
end
end
2025-06-16 15:24:27 +08:00
2025-04-01 10:48:36 +08:00
-- 获取乘倍数前的积分
function M:GetOriginScore(total_score)
if self.hpOnOff == 1 then
return total_score / self.score_times
else
return total_score
end
end
2025-06-16 15:24:27 +08:00
2025-04-01 10:48:36 +08:00
-- 设置房间重连状态
function M:SetReloadStatus(flag)
self.reloading = flag
end
2025-06-16 15:24:27 +08:00
2025-04-01 10:48:36 +08:00
-- 获取房间重连状态
function M:GetReloadStatus()
return self.reloading
end
--- Create a new RoomConfig
function RoomConfig:init(config)
--人数
self.people_num = config["maxPlayers"]
--支付类型
self.AA = config["AA"] == 1 and true or false
--托管
self.tuoguan = config["tuoguan"]
self.tuoguan_active_time = config["tuoguan_active_time"]
self.tuoguan_result_type = config["tuoguan_result_type"]
--不可负分
self.isNonnegative = config["isNonnegative"]
self.pid = config["pid"]
2025-06-16 15:24:27 +08:00
return self
2025-04-01 10:48:36 +08:00
end
2025-06-16 15:24:27 +08:00
local str_tuoguan = { "当局结算", "二局结算", "三局结算", "满局结算" }
2025-04-01 10:48:36 +08:00
function RoomConfig:GetDes(sp, str_people_num)
local str = ""
if not str_people_num and self.people_num then
str = str .. self.people_num .. ""
--str = str .. sp
end
-- if self.AA then
-- str = str .. "AA支付" .. sp
-- else
-- str = str .. "房主支付" .. sp
-- end
-- if self.isNonnegative == 1 then
-- str = str .. "不可负分" .. sp
-- end
if self.tuoguan then
str = str .. "托管" .. sp
str = str .. "离线" .. self.tuoguan_active_time .. "秒托管" .. sp
str = str .. str_tuoguan[self.tuoguan_result_type] .. sp
end
return str
end
function RoomConfig:GetGameName()
end
return M