From 77c1222bc166f9e485a8b1510efe81dc6f3b7a60 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E5=A6=96=E6=A2=A6=E5=8E=A8?= <12796194+youmuKon-supreme@user.noreply.gitee.com> Date: Tue, 29 Oct 2024 22:56:03 +0800 Subject: [PATCH 1/9] updatePrompt --- lua/core/request_type/active_skill.lua | 11 +++++++++++ lua/core/request_type/play_card.lua | 7 +++---- lua/core/request_type/response_card.lua | 3 ++- lua/core/request_type/use_card.lua | 12 ++++++++++++ 4 files changed, 28 insertions(+), 5 deletions(-) diff --git a/lua/core/request_type/active_skill.lua b/lua/core/request_type/active_skill.lua index f91b560..d3eebd4 100644 --- a/lua/core/request_type/active_skill.lua +++ b/lua/core/request_type/active_skill.lua @@ -62,6 +62,7 @@ function ReqActiveSkill:setup(ignoreInteraction) self:updateUnselectedTargets() self:updateButtons() + self:updatePrompt() end function ReqActiveSkill:finish() @@ -80,6 +81,15 @@ function ReqActiveSkill:setSkillPrompt(skill, cid) end end +function ReqActiveSkill:updatePrompt() + local skill = Fk.skills[self.skill_name] + if skill then + self:setSkillPrompt(skill) + else + self:setPrompt(self.original_prompt or "") + end +end + function ReqActiveSkill:setupInteraction() local skill = Fk.skills[self.skill_name] if skill and skill.interaction then @@ -380,6 +390,7 @@ function ReqActiveSkill:update(elemType, id, action, data) elseif elemType == "Interaction" then self:updateInteraction(data) end + self:updatePrompt() end return ReqActiveSkill diff --git a/lua/core/request_type/play_card.lua b/lua/core/request_type/play_card.lua index 9ca16c6..812ba0d 100644 --- a/lua/core/request_type/play_card.lua +++ b/lua/core/request_type/play_card.lua @@ -19,7 +19,6 @@ end function ReqPlayCard:setup() ReqUseCard.setup(self) - self:setPrompt(self.original_prompt) self.scene:update("Button", "End", { enabled = true }) end @@ -115,11 +114,11 @@ function ReqPlayCard:selectSpecialUse(data) if not data or data == "_normal_use" then self.skill_name = nil self.pendings = nil - self:setSkillPrompt(self.selected_card.skill, self.selected_card:getEffectiveId()) + -- self:setSkillPrompt(self.selected_card.skill, self.selected_card:getEffectiveId()) else self.skill_name = data self.pendings = Card:getIdList(self.selected_card) - self:setSkillPrompt(Fk.skills[data], self.pendings) + -- self:setSkillPrompt(Fk.skills[data], self.pendings) end self:initiateTargets() end @@ -158,7 +157,7 @@ function ReqPlayCard:selectCard(cid, data) self.skill_name = nil self.selected_card = Fk:getCardById(cid) scene:unselectOtherCards(cid) - self:setSkillPrompt(self.selected_card.skill, self.selected_card:getEffectiveId()) + -- self:setSkillPrompt(self.selected_card.skill, self.selected_card:getEffectiveId()) local sp_skills = {} if self.selected_card.special_skills then sp_skills = table.simpleClone(self.selected_card.special_skills) diff --git a/lua/core/request_type/response_card.lua b/lua/core/request_type/response_card.lua index c70969b..779bdfd 100644 --- a/lua/core/request_type/response_card.lua +++ b/lua/core/request_type/response_card.lua @@ -38,6 +38,7 @@ function ReqResponseCard:setup() ReqActiveSkill.setup(self) self.selected_card = nil self:updateSkillButtons() + self:updatePrompt() end -- FIXME: 关于&牌堆的可使用打出瞎jb写了点 来个懂哥优化一下 @@ -133,7 +134,7 @@ function ReqResponseCard:selectSkill(skill, data) ReqActiveSkill.setup(self) - self:setSkillPrompt(Fk.skills[skill]) + -- self:setSkillPrompt(Fk.skills[skill]) else self.skill_name = nil self.prompt = self.original_prompt diff --git a/lua/core/request_type/use_card.lua b/lua/core/request_type/use_card.lua index cad2b3d..6bbee28 100644 --- a/lua/core/request_type/use_card.lua +++ b/lua/core/request_type/use_card.lua @@ -4,6 +4,18 @@ local ReqResponseCard = require 'core.request_type.response_card' ---@class ReqUseCard: ReqResponseCard local ReqUseCard = ReqResponseCard:subclass("ReqUseCard") +function ReqUseCard:updatePrompt() + if self.skill_name then + return ReqActiveSkill.updatePrompt(self) + end + local card = self.selected_card + if card and card.skill then + self:setSkillPrompt(card.skill, self.selected_card.id) + else + self:setPrompt(self.original_prompt or "") + end +end + function ReqUseCard:skillButtonValidity(name) local player = self.player local skill = Fk.skills[name] -- Gitee From 5e6c92a97b5b3c3787e3c163e3a375849f8de60e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E5=A6=96=E6=A2=A6=E5=8E=A8?= <12796194+youmuKon-supreme@user.noreply.gitee.com> Date: Tue, 29 Oct 2024 23:02:20 +0800 Subject: [PATCH 2/9] onGain --- lua/core/skill.lua | 10 ++++++++++ lua/fk_ex.lua | 10 ++++++++++ lua/server/events/skill.lua | 11 +++++++++-- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/lua/core/skill.lua b/lua/core/skill.lua index cc81fe2..8643ae7 100644 --- a/lua/core/skill.lua +++ b/lua/core/skill.lua @@ -156,4 +156,14 @@ function Skill:getTimes() return ret end +-- 获得此技能时,触发此函数 +---@param player Player +function Skill:onGain(player) +end + +-- 失去此技能时,触发此函数 +---@param player Player +function Skill:onLose(player) +end + return Skill diff --git a/lua/fk_ex.lua b/lua/fk_ex.lua index c52c8fd..e7722b5 100644 --- a/lua/fk_ex.lua +++ b/lua/fk_ex.lua @@ -45,6 +45,16 @@ local function readCommonSpecToSkill(skill, spec) assert(type(spec.relate_to_place) == "string") skill.relate_to_place = spec.relate_to_place end + + if spec.on_gain then + assert(type(spec.on_gain) == "function") + skill.onGain = spec.on_gain + end + + if spec.on_lose then + assert(type(spec.on_lose) == "function") + skill.onLose = spec.on_lose + end end local function readUsableSpecToSkill(skill, spec) diff --git a/lua/server/events/skill.lua b/lua/server/events/skill.lua index be30874..2ac3daf 100644 --- a/lua/server/events/skill.lua +++ b/lua/server/events/skill.lua @@ -169,8 +169,15 @@ function SkillEventWrappers:handleAddLoseSkills(player, skill_names, source_skil if (not no_trigger) and #triggers > 0 then for i = 1, #triggers do - local event = losts[i] and fk.EventLoseSkill or fk.EventAcquireSkill - self.logic:trigger(event, player, triggers[i]) + if losts[i] then + local skill = triggers[i] + self.logic:trigger(fk.EventLoseSkill, player, skill) + skill:onLose(player) + else + local skill = triggers[i] + self.logic:trigger(fk.EventAcquireSkill, player, skill) + skill:onGain(player) + end end end -- Gitee From 94c4d29e2ff68e9cb09c8c02cb6af4ef4aa8a02d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E5=A6=96=E6=A2=A6=E5=8E=A8?= <12796194+youmuKon-supreme@user.noreply.gitee.com> Date: Wed, 30 Oct 2024 17:21:52 +0800 Subject: [PATCH 3/9] fix --- lua/core/skill.lua | 2 +- lua/fk_ex.lua | 6 +++--- lua/server/events/skill.lua | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/lua/core/skill.lua b/lua/core/skill.lua index 8643ae7..a1787b1 100644 --- a/lua/core/skill.lua +++ b/lua/core/skill.lua @@ -158,7 +158,7 @@ end -- 获得此技能时,触发此函数 ---@param player Player -function Skill:onGain(player) +function Skill:onAcquire(player) end -- 失去此技能时,触发此函数 diff --git a/lua/fk_ex.lua b/lua/fk_ex.lua index e7722b5..1995c09 100644 --- a/lua/fk_ex.lua +++ b/lua/fk_ex.lua @@ -46,9 +46,9 @@ local function readCommonSpecToSkill(skill, spec) skill.relate_to_place = spec.relate_to_place end - if spec.on_gain then - assert(type(spec.on_gain) == "function") - skill.onGain = spec.on_gain + if spec.on_acquire then + assert(type(spec.on_acquire) == "function") + skill.onAcquire = spec.on_acquire end if spec.on_lose then diff --git a/lua/server/events/skill.lua b/lua/server/events/skill.lua index 2ac3daf..5de22b9 100644 --- a/lua/server/events/skill.lua +++ b/lua/server/events/skill.lua @@ -176,7 +176,7 @@ function SkillEventWrappers:handleAddLoseSkills(player, skill_names, source_skil else local skill = triggers[i] self.logic:trigger(fk.EventAcquireSkill, player, skill) - skill:onGain(player) + skill:onAcquire(player) end end end -- Gitee From 68fe8f419fe525b2f031ce7981d063158352879a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E5=A6=96=E6=A2=A6=E5=8E=A8?= <12796194+youmuKon-supreme@user.noreply.gitee.com> Date: Wed, 30 Oct 2024 17:39:43 +0800 Subject: [PATCH 4/9] tune --- lua/server/events/skill.lua | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lua/server/events/skill.lua b/lua/server/events/skill.lua index 5de22b9..fbe2bff 100644 --- a/lua/server/events/skill.lua +++ b/lua/server/events/skill.lua @@ -171,8 +171,8 @@ function SkillEventWrappers:handleAddLoseSkills(player, skill_names, source_skil for i = 1, #triggers do if losts[i] then local skill = triggers[i] - self.logic:trigger(fk.EventLoseSkill, player, skill) skill:onLose(player) + self.logic:trigger(fk.EventLoseSkill, player, skill) else local skill = triggers[i] self.logic:trigger(fk.EventAcquireSkill, player, skill) -- Gitee From 476c251043444efb8033f9bffe842d0df6a5c779 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E5=A6=96=E6=A2=A6=E5=8E=A8?= <12796194+youmuKon-supreme@user.noreply.gitee.com> Date: Wed, 30 Oct 2024 17:42:52 +0800 Subject: [PATCH 5/9] =?UTF-8?q?=E5=8A=A0=E7=82=B9=E5=8F=82=E6=95=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/core/skill.lua | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lua/core/skill.lua b/lua/core/skill.lua index a1787b1..ab17698 100644 --- a/lua/core/skill.lua +++ b/lua/core/skill.lua @@ -158,12 +158,14 @@ end -- 获得此技能时,触发此函数 ---@param player Player -function Skill:onAcquire(player) +---@param is_start bool +function Skill:onAcquire(player, is_start) end -- 失去此技能时,触发此函数 ---@param player Player -function Skill:onLose(player) +---@param is_death bool +function Skill:onLose(player, is_death) end return Skill -- Gitee From a63d7a7c0e43c8da36458e86be19dd54b8bf5c55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E5=A6=96=E6=A2=A6=E5=8E=A8?= <12796194+youmuKon-supreme@user.noreply.gitee.com> Date: Wed, 30 Oct 2024 18:41:47 +0800 Subject: [PATCH 6/9] onAcquire --- lua/server/gamelogic.lua | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lua/server/gamelogic.lua b/lua/server/gamelogic.lua index 17f9919..dd2c70a 100644 --- a/lua/server/gamelogic.lua +++ b/lua/server/gamelogic.lua @@ -224,7 +224,9 @@ function GameLogic:attachSkillToPlayers() return end - room:handleAddLoseSkills(player, skillName, nil, false) + room:handleAddLoseSkills(player, skillName, nil, false, true) + self:trigger(fk.EventAcquireSkill, player, skill) + skill:onAcquire(player, true) end for _, p in ipairs(room.alive_players) do local skills = Fk.generals[p.general].skills -- Gitee From 0cce09087f29986dd5aff80877515d1c794165e1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E5=A6=96=E6=A2=A6=E5=8E=A8?= <12796194+youmuKon-supreme@user.noreply.gitee.com> Date: Thu, 31 Oct 2024 02:23:08 +0800 Subject: [PATCH 7/9] skill --- lua/core/skill.lua | 4 ++-- lua/core/skill_type/usable_skill.lua | 21 +++++++++++++++++++++ lua/server/serverplayer.lua | 7 +++++++ 3 files changed, 30 insertions(+), 2 deletions(-) diff --git a/lua/core/skill.lua b/lua/core/skill.lua index ab17698..1b6d7e8 100644 --- a/lua/core/skill.lua +++ b/lua/core/skill.lua @@ -157,13 +157,13 @@ function Skill:getTimes() end -- 获得此技能时,触发此函数 ----@param player Player +---@param player ServerPlayer ---@param is_start bool function Skill:onAcquire(player, is_start) end -- 失去此技能时,触发此函数 ----@param player Player +---@param player ServerPlayer ---@param is_death bool function Skill:onLose(player, is_death) end diff --git a/lua/core/skill_type/usable_skill.lua b/lua/core/skill_type/usable_skill.lua index 58e544f..0c48510 100644 --- a/lua/core/skill_type/usable_skill.lua +++ b/lua/core/skill_type/usable_skill.lua @@ -92,4 +92,25 @@ function UsableSkill:withinTimesLimit(player, scope, card, card_name, to) -- end))) end +-- 失去此技能时,触发此函数 +---@param player ServerPlayer +---@param is_death bool +function UsableSkill:onLose(player, is_death) + local lost_piles = {} + if self.derived_piles then + for _, pile_name in ipairs(self.derived_piles) do + table.insertTableIfNeed(lost_piles, player:getPile(pile_name)) + end + end + + if #lost_piles > 0 then + player.room:moveCards({ + ids = lost_piles, + from = player.id, + toArea = Card.DiscardPile, + moveReason = fk.ReasonPutIntoDiscardPile, + }) + end +end + return UsableSkill diff --git a/lua/server/serverplayer.lua b/lua/server/serverplayer.lua index 67a1b94..adca68c 100644 --- a/lua/server/serverplayer.lua +++ b/lua/server/serverplayer.lua @@ -454,6 +454,7 @@ function ServerPlayer:bury() self:throwAllCards() self:throwAllMarks() self:clearPiles() + self:onAllSkillLose() self:reset() end @@ -475,6 +476,12 @@ function ServerPlayer:throwAllCards(flag) self.room:throwCard(cardIds, "", self) end +function ServerPlayer:onAllSkillLose() + for _, skill in ipairs(self:getAllSkills()) do + skill:onLose(self, true) + end +end + function ServerPlayer:throwAllMarks() for name, _ in pairs(self.mark) do self.room:setPlayerMark(self, name, 0) -- Gitee From 85f495bed5a873edbd44bf536760983bf533106c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E5=A6=96=E6=A2=A6=E5=8E=A8?= <12796194+youmuKon-supreme@user.noreply.gitee.com> Date: Fri, 1 Nov 2024 02:40:18 +0800 Subject: [PATCH 8/9] phase replace --- lua/server/events/gameflow.lua | 2 +- standard/aux_skills.lua | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lua/server/events/gameflow.lua b/lua/server/events/gameflow.lua index 3c36e6b..71f089c 100644 --- a/lua/server/events/gameflow.lua +++ b/lua/server/events/gameflow.lua @@ -322,7 +322,7 @@ function Phase:main() } room.logic:trigger(fk.DrawNCards, player, data) if not player._phase_end then - room:drawCards(player, data.n, "game_rule") + room:drawCards(player, data.n, "phase_draw") end room.logic:trigger(fk.AfterDrawNCards, player, data) end, diff --git a/standard/aux_skills.lua b/standard/aux_skills.lua index c57369e..ebb2d74 100644 --- a/standard/aux_skills.lua +++ b/standard/aux_skills.lua @@ -27,7 +27,7 @@ local discardSkill = fk.CreateActiveSkill{ return false end end - if Fk.currentResponseReason == "game_rule" then + if Fk.currentResponseReason == "phase_discard" then status_skills = Fk:currentRoom().status_skills[MaxCardsSkill] or Util.DummyTable for _, skill in ipairs(status_skills) do if skill:excludeFrom(Self, card) then -- Gitee From aad1ca456a5e88eab03f163522dda13a2726721a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E8=B6=85=E7=BA=A7=E5=A6=96=E6=A2=A6=E5=8E=A8?= <12796194+youmuKon-supreme@user.noreply.gitee.com> Date: Fri, 1 Nov 2024 19:24:44 +0800 Subject: [PATCH 9/9] clear --- lua/server/events/skill.lua | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/lua/server/events/skill.lua b/lua/server/events/skill.lua index fbe2bff..95ce3a8 100644 --- a/lua/server/events/skill.lua +++ b/lua/server/events/skill.lua @@ -110,7 +110,7 @@ function SkillEventWrappers:handleAddLoseSkills(player, skill_names, source_skil if #skill_names == 0 then return end local losts = {} ---@type boolean[] local triggers = {} ---@type Skill[] - local lost_piles = {} ---@type integer[] + -- local lost_piles = {} ---@type integer[] for _, skill in ipairs(skill_names) do if string.sub(skill, 1, 1) == "-" then local actual_skill = string.sub(skill, 2, #skill) @@ -132,11 +132,11 @@ function SkillEventWrappers:handleAddLoseSkills(player, skill_names, source_skil table.insert(losts, true) table.insert(triggers, s) - if s.derived_piles then - for _, pile_name in ipairs(s.derived_piles) do - table.insertTableIfNeed(lost_piles, player:getPile(pile_name)) - end - end + -- if s.derived_piles then + -- for _, pile_name in ipairs(s.derived_piles) do + -- table.insertTableIfNeed(lost_piles, player:getPile(pile_name)) + -- end + -- end end end else @@ -181,14 +181,14 @@ function SkillEventWrappers:handleAddLoseSkills(player, skill_names, source_skil end end - if #lost_piles > 0 then - self:moveCards({ - ids = lost_piles, - from = player.id, - toArea = Card.DiscardPile, - moveReason = fk.ReasonPutIntoDiscardPile, - }) - end + -- if #lost_piles > 0 then + -- self:moveCards({ + -- ids = lost_piles, + -- from = player.id, + -- toArea = Card.DiscardPile, + -- moveReason = fk.ReasonPutIntoDiscardPile, + -- }) + -- end end return { SkillEffect, SkillEventWrappers } -- Gitee