- 修复了人人主公框+无主公酱报错的bug
- 修复了random(n)不返回表的bug
- 为table添加connect(不改变输入数组的连接各数组)方法及其IfNeed版本(包括insertTable)
- 修复了有死人不能喝酒的bug
This commit is contained in:
YoumuKon 2023-08-03 21:08:01 +08:00 committed by GitHub
parent 24a8020d1e
commit 48bb6ac999
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 58 additions and 11 deletions

View File

@ -245,6 +245,33 @@ function table:insertIfNeed(element)
end end
end end
-- similar to table.insertTable but insertIfNeed inside
function table:insertTableIfNeed(list)
for _, e in ipairs(list) do
table.insertIfNeed(self, e)
end
end
---@generic T
---@return T[]
function table.connect(...)
local ret = {}
for _, v in ipairs({...}) do
table.insertTable(ret, v)
end
return ret
end
---@generic T
---@return T[]
function table.connectIfNeed(...)
local ret = {}
for _, v in ipairs({...}) do
table.insertTableIfNeed(ret, v)
end
return ret
end
---@generic T ---@generic T
---@param self T[] ---@param self T[]
---@param n integer|nil ---@param n integer|nil
@ -252,7 +279,7 @@ end
function table:random(n) function table:random(n)
local n0 = n local n0 = n
n = n or 1 n = n or 1
if #self == 0 then return nil end if #self == 0 then return n0 ~= nil and {} or nil end
local tmp = {table.unpack(self)} local tmp = {table.unpack(self)}
local ret = {} local ret = {}
while n > 0 and #tmp > 0 do while n > 0 and #tmp > 0 do

View File

@ -91,6 +91,11 @@ function GameLogic:chooseGenerals()
if lord ~= nil then if lord ~= nil then
room.current = lord room.current = lord
local generals = {} local generals = {}
local lordlist = {}
local lordpools = {}
table.insertTable(generals, Fk:getGeneralsRandomly(generalNum, Fk:getAllGenerals(), table.map(generals, function (g)
return g.name
end)))
if room.settings.gameMode == "aaa_role_mode" then if room.settings.gameMode == "aaa_role_mode" then
for _, general in pairs(Fk:getAllGenerals()) do for _, general in pairs(Fk:getAllGenerals()) do
if (not general.hidden and not general.total_hidden) and if (not general.hidden and not general.total_hidden) and
@ -100,18 +105,17 @@ function GameLogic:chooseGenerals()
not table.find(generals, function(g) not table.find(generals, function(g)
return g.trueName == general.trueName return g.trueName == general.trueName
end) then end) then
table.insert(generals, general) table.insert(lordlist, general)
end end
end end
generals = table.random(generals, 3) lordlist = table.random(lordlist, 3) or {}
end end
table.insertTable(generals, Fk:getGeneralsRandomly(generalNum, Fk:getAllGenerals(), table.map(generals, function (g)
return g.name
end)))
for i = 1, #generals do for i = 1, #generals do
generals[i] = generals[i].name generals[i] = generals[i].name
end end
lord_generals = room:askForGeneral(lord, generals, n) lordpools = table.simpleClone(generals)
table.insertTable(lordpools, table.map(lordlist, function(g) return g.name end))
lord_generals = room:askForGeneral(lord, lordpools, n)
local lord_general, deputy local lord_general, deputy
if type(lord_generals) == "table" then if type(lord_generals) == "table" then
deputy = lord_generals[2] deputy = lord_generals[2]

View File

@ -83,12 +83,12 @@ local analepticSkill = fk.CreateActiveSkill{
max_turn_use_time = 1, max_turn_use_time = 1,
mod_target_filter = function(self, to_select, selected, user, card, distance_limited) mod_target_filter = function(self, to_select, selected, user, card, distance_limited)
return self:withinTimesLimit(Fk:currentRoom():getPlayerById(to_select), Player.HistoryTurn, card, "analeptic", Fk:currentRoom():getPlayerById(to_select)) and return self:withinTimesLimit(Fk:currentRoom():getPlayerById(to_select), Player.HistoryTurn, card, "analeptic", Fk:currentRoom():getPlayerById(to_select)) and
not table.find(Fk:currentRoom().players, function(p) not table.find(Fk:currentRoom().alive_players, function(p)
return p.dying return p.dying
end) end)
end, end,
can_use = function(self, player, card) can_use = function(self, player, card)
return self:modTargetFilter(player.id, Util.DummyTable, player.id, card) return self:withinTimesLimit(player, Player.HistoryTurn, card, "analeptic", player)
end, end,
on_use = function(self, room, use) on_use = function(self, room, use)
if not use.tos or #TargetGroup:getRealTargets(use.tos) == 0 then if not use.tos or #TargetGroup:getRealTargets(use.tos) == 0 then

View File

@ -362,7 +362,7 @@ heg = fk.CreateGameMode{
maxPlayer = 8, maxPlayer = 8,
rule = heg_rule, rule = heg_rule,
logic = heg_getlogic, logic = heg_getlogic,
countInFunc = Util.FalseFunc is_counted = Util.FalseFunc
} }
Fk:loadTranslationTable{ Fk:loadTranslationTable{

View File

@ -1165,6 +1165,9 @@ local role_mode = fk.CreateGameMode{
name = "aaa_role_mode", -- just to let it at the top of list name = "aaa_role_mode", -- just to let it at the top of list
minPlayer = 2, minPlayer = 2,
maxPlayer = 8, maxPlayer = 8,
is_counted = function(self, room)
return #room.players >= 5
end,
surrender_func = function(self, playedTime) surrender_func = function(self, playedTime)
local roleCheck = false local roleCheck = false
local roleText = "" local roleText = ""

View File

@ -125,7 +125,7 @@ local peachSkill = fk.CreateActiveSkill{
name = "peach_skill", name = "peach_skill",
mod_target_filter = function(self, to_select) mod_target_filter = function(self, to_select)
return Fk:currentRoom():getPlayerById(to_select):isWounded() and return Fk:currentRoom():getPlayerById(to_select):isWounded() and
not table.find(Fk:currentRoom().players, function(p) not table.find(Fk:currentRoom().alive_players, function(p)
return p.dying return p.dying
end) end)
end, end,

View File

@ -1,4 +1,17 @@
TestExppattern = { TestExppattern = {
testUtil = function()
local table1 = {1, 3, 5, 8}
local table2 = {2, 3, 5, 7}
p(table1)
p(table2)
p(table.connect(table1, table2))
p(table1)
p(table2)
p(table.connectIfNeed(table1, table2))
p(table1)
p(table2)
end,
testMatchExp = function() testMatchExp = function()
local exp1 = Exppattern:Parse("slash,jink") local exp1 = Exppattern:Parse("slash,jink")
lu.assertTrue(exp1:matchExp("peack,jink")) lu.assertTrue(exp1:matchExp("peack,jink"))