From 977dbe957ad8778e381129ee680ffd1c54ec77a0 Mon Sep 17 00:00:00 2001 From: seven <786852516@qq.com> Date: Fri, 16 Aug 2024 20:34:19 +0800 Subject: [PATCH 1/3] =?UTF-8?q?=E7=BB=93=E6=9D=9F=E5=9B=9E=E5=90=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lua/server/events/gameflow.lua | 13 +++++++++---- lua/server/room.lua | 6 ++++++ lua/server/serverplayer.lua | 11 +++++++++-- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/lua/server/events/gameflow.lua b/lua/server/events/gameflow.lua index 68b10c4..4e6c2b7 100644 --- a/lua/server/events/gameflow.lua +++ b/lua/server/events/gameflow.lua @@ -284,6 +284,8 @@ function Turn:clear() logic:trigger(fk.AfterTurnEnd, current, nil, self.interrupted) current.phase = Player.NotActive + room:setTag("endTurn", false) + for _, p in ipairs(room.players) do p:setCardUseHistory("", 0, Player.HistoryTurn) p:setSkillUseHistory("", 0, Player.HistoryTurn) @@ -332,6 +334,7 @@ function Phase:main() [Player.Judge] = function() local cards = player:getCardIds(Player.Judge) while #cards > 0 do + if player._phase_end then break end local cid = table.remove(cards) if not cid then return end local card = player:removeVirtualEquip(cid) @@ -359,11 +362,12 @@ function Phase:main() n = 2 } room.logic:trigger(fk.DrawNCards, player, data) - room:drawCards(player, data.n, "game_rule") + if not player._phase_end then + room:drawCards(player, data.n, "game_rule") + end room.logic:trigger(fk.AfterDrawNCards, player, data) end, [Player.Play] = function() - player._play_phase_end = false while not player.dead do logic:trigger(fk.StartPlayCard, player, nil, true) room:notifyMoveFocus(player, "PlayCard") @@ -375,13 +379,13 @@ function Phase:main() room:useCard(useResult) end - if player._play_phase_end then - player._play_phase_end = false + if player._phase_end then break end end end, [Player.Discard] = function() + if player._phase_end then return end local discardNum = #table.filter( player:getCardIds(Player.Hand), function(id) local card = Fk:getCardById(id) @@ -423,6 +427,7 @@ function Phase:clear() room:setPlayerMark(p, name, 0) end end + p._phase_end = false end for cid, cmark in pairs(room.card_marks) do diff --git a/lua/server/room.lua b/lua/server/room.lua index 6203ec8..d0580f9 100644 --- a/lua/server/room.lua +++ b/lua/server/room.lua @@ -4232,4 +4232,10 @@ function Room:setPlayerRest(player, roundNum) self:broadcastProperty(player, "rest") end +--- 结束当前回合(不会终止结算) +function Room:endTurn() + self.current._phase_end = true + self:setTag("endTurn", true) +end + return Room diff --git a/lua/server/serverplayer.lua b/lua/server/serverplayer.lua index 5e35ae5..fed1620 100644 --- a/lua/server/serverplayer.lua +++ b/lua/server/serverplayer.lua @@ -479,7 +479,7 @@ function ServerPlayer:play(phase_table) end for i = 1, #phases do - if self.dead then + if self.dead or room:getTag("endTurn") or phases[i] == nil then self:changePhase(self.phase, Player.NotActive) break end @@ -540,10 +540,17 @@ end --- 当进行到出牌阶段空闲点时,结束出牌阶段。 function ServerPlayer:endPlayPhase() - self._play_phase_end = true + if self.phase == Player.Play then + self._phase_end = true + end -- TODO: send log end +--- 结束当前阶段。 +function ServerPlayer:endCurrentPhase() + self._phase_end = true +end + --- 获得一个额外回合 ---@param delay? boolean ---@param skillName? string -- Gitee From b06c5bdbe33eb522909aead91457c438ced2e816 Mon Sep 17 00:00:00 2001 From: seven <786852516@qq.com> Date: Sun, 18 Aug 2024 12:25:03 +0800 Subject: [PATCH 2/3] tablemark --- lua/core/player.lua | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/lua/core/player.lua b/lua/core/player.lua index f63651d..371582c 100644 --- a/lua/core/player.lua +++ b/lua/core/player.lua @@ -221,6 +221,15 @@ function Player:getMark(mark) return mark end +--- 获取角色对应Mark并初始化为table +---@param mark string @ 标记 +---@return table +function Player:getTableMark(mark) + local mark = self.mark[mark] + if type(mark) == "table" then return table.simpleClone(mark) end + return {} +end + --- 获取角色有哪些Mark。 function Player:getMarkNames() local ret = {} -- Gitee From 34cffb3ac2f46bd7daa00d5f0501502151399743 Mon Sep 17 00:00:00 2001 From: seven <786852516@qq.com> Date: Sun, 18 Aug 2024 12:47:13 +0800 Subject: [PATCH 3/3] RandomAI --- lua/server/ai/random_ai.lua | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lua/server/ai/random_ai.lua b/lua/server/ai/random_ai.lua index 6a5ca09..deea7ff 100644 --- a/lua/server/ai/random_ai.lua +++ b/lua/server/ai/random_ai.lua @@ -17,7 +17,8 @@ function RandomAI:useActiveSkill(skill, card) filter_func = Util.FalseFunc end - if self.command == "PlayCard" and (not skill:canUse(player, card) or player:prohibitUse(card)) then + if self.command == "PlayCard" and card and card.class and card:isInstanceOf(Card) + and (not skill:canUse(player, card) or player:prohibitUse(card)) then return "" end -- Gitee