From aed1143b3395d2cd300c52f06829f64ff6863efd Mon Sep 17 00:00:00 2001 From: seven <786852516@qq.com> Date: Sat, 7 Sep 2024 01:19:41 +0800 Subject: [PATCH 1/4] =?UTF-8?q?AG=E5=A0=86=E5=8F=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/server/room.lua | 62 +++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 57 insertions(+), 5 deletions(-) diff --git a/lua/server/room.lua b/lua/server/room.lua index 809066c..26d91ec 100644 --- a/lua/server/room.lua +++ b/lua/server/room.lua @@ -2537,13 +2537,36 @@ function Room:askForAG(player, id_list, cancelable, reason) end --- 给player发一条消息,在他的窗口中用一系列卡牌填充一个AG。 ----@param player ServerPlayer @ 要通知的玩家 +---@param players ServerPlayer|ServerPlayer[] @ 要通知的玩家 ---@param id_list integer[] | Card[] @ 要填充的卡牌 ----@param disable_ids? integer[] | Card[] @ 未使用 -function Room:fillAG(player, id_list, disable_ids) +---@param disable_ids? integer[] | Card[] @ 未使用 不能选择的牌 +function Room:fillAG(players, id_list, disable_ids) + local record = self:getTag("AGrecord") or {} + local new = true + if players.id ~= nil then + --- FIXEME: 很危险的判断,AG以后肯定要大改了,先这样算了 + if #record > 0 and record[#record][2][1] == id_list[1] then + new = false + table.insert(record[#record][1], players.id) + end + players = { players } + end id_list = Card:getIdList(id_list) -- disable_ids = Card:getIdList(disable_ids) - player:doNotify("FillAG", json.encode{ id_list, disable_ids }) + if new then + --[[ 不用关闭AG,开新AG会覆盖 + if #record > 0 then + for _, pid in ipairs(record[#record][1]) do + self:getPlayerById(pid):doNotify("CloseAG", "") + end + end + --]] + table.insert(record, {table.map(players, Util.IdMapper), id_list, disable_ids, {}}) + end + self:setTag("AGrecord", record) + for _, player in ipairs(players) do + player:doNotify("FillAG", json.encode{ id_list, disable_ids }) + end end --- 告诉一些玩家,AG中的牌被taker取走了。 @@ -2552,6 +2575,12 @@ end ---@param notify_list? ServerPlayer[] @ 要告知的玩家,默认为全员 function Room:takeAG(taker, id, notify_list) self:doBroadcastNotify("TakeAG", json.encode{ taker.id, id }, notify_list) + local record = self:getTag("AGrecord") or {} + if #record > 0 then + local currentRecord = record[#record] + currentRecord[4][tostring(id)] = taker.id + self:setTag("AGrecord", record) + end end --- 关闭player那侧显示的AG。 @@ -2559,8 +2588,31 @@ end --- 若不传参(即player为nil),那么关闭所有玩家的AG。 ---@param player? ServerPlayer @ 要关闭AG的玩家 function Room:closeAG(player) + local record = self:getTag("AGrecord") or {} if player then player:doNotify("CloseAG", "") - else self:doBroadcastNotify("CloseAG", "") end + else + self:doBroadcastNotify("CloseAG", "") + end + if #record > 0 then + local currentRecord = record[#record] + if player then + table.removeOne(currentRecord[1], player.id) + self:setTag("AGrecord", record) + if #currentRecord[1] > 0 then return end + end + table.remove(record, #record) + self:setTag("AGrecord", record) + if #record > 0 then + local newRecord = record[#record] + local players = table.map(newRecord[1], Util.Id2PlayerMapper) + for _, p in ipairs(players) do + p:doNotify("FillAG", json.encode{ newRecord[2], newRecord[3] }) + end + for cid, pid in pairs(newRecord[4]) do + self:doBroadcastNotify("TakeAG", json.encode{ pid, tonumber(cid) }, players) + end + end + end end -- TODO: 重构request机制,不然这个还得手动拿client_reply -- Gitee From 448b6a84aeef8909c90d44fbecb989b6df0c61ba Mon Sep 17 00:00:00 2001 From: seven <786852516@qq.com> Date: Thu, 12 Sep 2024 20:20:31 +0800 Subject: [PATCH 2/4] 1 --- lua/core/card.lua | 2 +- lua/server/room.lua | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/lua/core/card.lua b/lua/core/card.lua index 9b86283..9d6a026 100644 --- a/lua/core/card.lua +++ b/lua/core/card.lua @@ -20,7 +20,7 @@ ---@field public skillName string @ 虚拟牌的技能名 for virtual cards ---@field private _skillName string ---@field public skillNames string[] @ 虚拟牌的技能名们(一张虚拟牌可能有多个技能名,如芳魂、龙胆、朱雀羽扇) ----@field public skill Skill @ 技能(用于实现卡牌效果) +---@field public skill ActiveSkill @ 技能(用于实现卡牌效果) ---@field public special_skills? string[] @ 衍生技能,如重铸 ---@field public is_damage_card boolean @ 是否为会造成伤害的牌 ---@field public multiple_targets boolean @ 是否为指定多个目标的牌 diff --git a/lua/server/room.lua b/lua/server/room.lua index 26d91ec..8aac9d3 100644 --- a/lua/server/room.lua +++ b/lua/server/room.lua @@ -1388,6 +1388,11 @@ function Room:askForCard(player, minNum, maxNum, includeEquip, skillName, cancel else if cancelable then return {} end local cards = player:getCardIds("he&") + if type(expand_pile) == "string" then + table.insertTable(cards, player:getPile(expand_pile)) + elseif type(expand_pile) == "table" then + table.insertTable(cards, expand_pile) + end local exp = Exppattern:Parse(pattern) cards = table.filter(cards, function(cid) return exp:match(Fk:getCardById(cid)) -- Gitee From 59aff72b42ee4639383ba5b2fb694954e54c07b7 Mon Sep 17 00:00:00 2001 From: seven <786852516@qq.com> Date: Fri, 13 Sep 2024 14:29:50 +0800 Subject: [PATCH 3/4] phase --- lua/client/i18n/zh_CN.lua | 3 +++ lua/core/util.lua | 17 +++++++++++++++++ lua/server/serverplayer.lua | 13 ++++--------- 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/lua/client/i18n/zh_CN.lua b/lua/client/i18n/zh_CN.lua index 4465fc9..a66bc4e 100644 --- a/lua/client/i18n/zh_CN.lua +++ b/lua/client/i18n/zh_CN.lua @@ -360,12 +360,15 @@ Fk:loadTranslationTable{ ["hp_lost"] = "失去体力", ["lose_hp"] = "失去体力", + ["phase_roundstart"] = "回合开始", ["phase_start"] = "准备阶段", ["phase_judge"] = "判定阶段", ["phase_draw"] = "摸牌阶段", ["phase_play"] = "出牌阶段", ["phase_discard"] = "弃牌阶段", ["phase_finish"] = "结束阶段", + ["phase_notactive"] = "回合外", + ["phase_phasenone"] = "临时阶段", ["chained"] = "横置", ["un-chained"] = "重置", diff --git a/lua/core/util.lua b/lua/core/util.lua index 3d2f223..eb20665 100644 --- a/lua/core/util.lua +++ b/lua/core/util.lua @@ -133,6 +133,23 @@ Util.Name2SkillMapper = function(e) return Fk.skills[e] end --- 返回译文 Util.TranslateMapper = function(str) return Fk:translate(str) end +-- 阶段int型和string型互换 +---@return string|integer +Util.PhaseStrMapper = function(phase) + local phase_table = { + [Player.RoundStart] = "phase_roundstart", + [Player.Start] = "phase_start", + [Player.Judge] = "phase_judge", + [Player.Draw] = "phase_draw", + [Player.Play] = "phase_play", + [Player.Discard] = "phase_discard", + [Player.Finish] = "phase_finish", + [Player.NotActive] = "phase_notactive", + [Player.PhaseNone] = "phase_phasenone", + } + return type(phase) == "string" and table.indexOf(phase_table, phase) or phase_table[phase] +end + -- for card preset --- 全局卡牌(包括自己)的canUse diff --git a/lua/server/serverplayer.lua b/lua/server/serverplayer.lua index c47aa21..f3548bf 100644 --- a/lua/server/serverplayer.lua +++ b/lua/server/serverplayer.lua @@ -356,12 +356,7 @@ function ServerPlayer:showCards(cards) room.logic:trigger(fk.CardShown, self, { cardIds = cards }) end -local phase_name_table = { - [Player.Judge] = "phase_judge", - [Player.Draw] = "phase_draw", - [Player.Play] = "phase_play", - [Player.Discard] = "phase_discard", -} + ---@param from_phase Phase ---@param to_phase Phase @@ -428,7 +423,7 @@ function ServerPlayer:gainAnExtraPhase(phase, delay) room:sendLog{ type = "#GainAnExtraPhase", from = self.id, - arg = phase_name_table[phase], + arg = Util.PhaseStrMapper(phase), } GameEvent.Phase:create(self, self.phase):exec() @@ -442,7 +437,7 @@ function ServerPlayer:gainAnExtraPhase(phase, delay) room:sendLog{ type = "#PhaseSkipped", from = self.id, - arg = phase_name_table[phase], + arg = Util.PhaseStrMapper(phase), } end @@ -515,7 +510,7 @@ function ServerPlayer:play(phase_table) room:sendLog{ type = "#PhaseSkipped", from = self.id, - arg = phase_name_table[self.phase], + arg = Util.PhaseStrMapper(self.phase), } end end -- Gitee From 368566f7be74fcc967df651508deb8638a0a8a8c Mon Sep 17 00:00:00 2001 From: seven <786852516@qq.com> Date: Sat, 14 Sep 2024 19:39:24 +0800 Subject: [PATCH 4/4] zh --- lua/client/i18n/zh_CN.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/lua/client/i18n/zh_CN.lua b/lua/client/i18n/zh_CN.lua index a66bc4e..801646e 100644 --- a/lua/client/i18n/zh_CN.lua +++ b/lua/client/i18n/zh_CN.lua @@ -498,6 +498,7 @@ Fk:loadTranslationTable{ ["#TurnOver"] = "%from 将武将牌翻面,现在是 %arg", ["face_up"] = "正面朝上", ["face_down"] = "背面朝上", + ["turnOver"] = "翻面", -- damage, heal and lose HP ["#Damage"] = "%to 对 %from 造成了 %arg 点 %arg2 伤害", -- Gitee