diff --git a/lua/client/client.lua b/lua/client/client.lua index 72a113944cc266700bb0770538d6fea5a8149027..b8b6210e19d08ded71c9ae036af8d5f34e60a5bd 100644 --- a/lua/client/client.lua +++ b/lua/client/client.lua @@ -893,7 +893,7 @@ fk.client_callback["AddSkill"] = function(self, data) table.insert(target.player_skills, skill) local chk = false - if table.find(sks, function(s) return s:isInstanceOf(TriggerSkill) end) then + if table.find(sks, function(s) return s:isInstanceOf(TriggerSkill) and not s.is_delay_effect end) then chk = true self:notifyUI("AddSkill", data) end diff --git a/lua/server/events/hp.lua b/lua/server/events/hp.lua index cea762407eaff5692e679d60af1ccd0846a64a25..e6955ba2281afb014893db7978879046855f7bb4 100644 --- a/lua/server/events/hp.lua +++ b/lua/server/events/hp.lua @@ -248,26 +248,25 @@ function Damage:exit() logic:trigger(fk.DamageFinished, damageData.to, damageData) if damageData.chain_table and #damageData.chain_table > 0 then - damageData.chain_table = table.filter(damageData.chain_table, function(p) - return p:isAlive() and p.chained - end) for _, p in ipairs(damageData.chain_table) do - room:sendLog{ - type = "#ChainDamage", - from = p.id - } - - local dmg = { - from = damageData.from, - to = p, - damage = damageData.damage, - damageType = damageData.damageType, - card = damageData.card, - skillName = damageData.skillName, - chain = true, - } - - room:damage(dmg) + if p:isAlive() and p.chained then + room:sendLog{ + type = "#ChainDamage", + from = p.id + } + + local dmg = { + from = damageData.from, + to = p, + damage = damageData.damage, + damageType = damageData.damageType, + card = damageData.card, + skillName = damageData.skillName, + chain = true, + } + + room:damage(dmg) + end end end end diff --git a/lua/server/room.lua b/lua/server/room.lua index 4b2a6a62464b85a9a01689a44e29e50657e7e3f0..825cb59251a91986cf64ef1f35879c3b133d2320 100644 --- a/lua/server/room.lua +++ b/lua/server/room.lua @@ -1505,8 +1505,23 @@ function Room:askToChoice(player, params) params.prompt = params.prompt or "" params.all_choices = params.all_choices or params.choices + local hide = false -- 是否隐藏读条,用于国战同时机技能选择 + if params.skill_name == "trigger" then + for _, s in ipairs(params.choices) do + local skill_name = s + if skill_name:startsWith("#skill_muti_trigger") then + local strSplited = skill_name:split(":") + skill_name = strSplited[#strSplited - 1] + end + if player:isFakeSkill(skill_name) then + hide = true + break + end + end + end local req = Request:new(player, command) - req.focus_text = params.skill_name + req.focus_text = hide and "" or params.skill_name + req.focus_players = hide and self.alive_players or nil req.receive_decode = false -- 这个不用decode req:setData(player, { params.choices, params.all_choices, params.skill_name, params.prompt, params.detailed diff --git a/lua/server/serverplayer.lua b/lua/server/serverplayer.lua index 577028baa8db44956db0f10dc52a784aa58734f6..3b54c22308619df5d3891dc3990dab4faab89cb4 100644 --- a/lua/server/serverplayer.lua +++ b/lua/server/serverplayer.lua @@ -604,9 +604,14 @@ function ServerPlayer:revealGeneral(isDeputy, no_trigger) end local general = Fk.generals[generalName] or Fk.generals["blank_shibing"] + local tolose = {} for _, s in ipairs(general:getSkillNameList(true)) do local skill = Fk.skills[s] - self:loseFakeSkill(skill) + if self:isFakeSkill(skill) then + self:loseFakeSkill(skill) + else + table.insert(tolose, skill.name) + end end local ret = true @@ -614,7 +619,7 @@ function ServerPlayer:revealGeneral(isDeputy, no_trigger) local other = Fk.generals[self:getMark(isDeputy and "__heg_general" or "__heg_deputy")] or Fk.generals["blank_shibing"] for _, sname in ipairs(other:getSkillNameList(true)) do local s = Fk.skills[sname] - if s:hasTag(Skill.Compulsory) and not s:hasTag(isDeputy and Skill.MainPlace or Skill.DeputyPlace) then + if s:hasTag(Skill.Compulsory) and not s:hasTag(isDeputy and Skill.DeputyPlace or Skill.MainPlace) and self:isFakeSkill(s) then ret = false break end @@ -626,6 +631,9 @@ function ServerPlayer:revealGeneral(isDeputy, no_trigger) local oldKingdom = self.kingdom room:changeHero(self, generalName, false, isDeputy, false, false, false) + if #tolose > 0 then + room:handleAddLoseSkills(self, "-"..table.concat(tolose, "-|"), nil, false) + end if oldKingdom ~= "wild" then local kingdom = (self:getMark("__heg_wild") == 1 and not isDeputy) and "wild" or self:getMark("__heg_kingdom") self.kingdom = kingdom @@ -731,13 +739,15 @@ function ServerPlayer:hideGeneral(isDeputy) local general = Fk.generals[generalName] local place = isDeputy and Skill.MainPlace or Skill.DeputyPlace for _, sname in ipairs(general:getSkillNameList()) do - room:handleAddLoseSkills(self, "-" .. sname, nil, false, false) - local s = Fk.skills[sname] - if not s:hasTag(place) then - if s:hasTag(Skill.Compulsory) then - self:addFakeSkill("reveal_skill&") + if self:hasSkill(sname, true, true) then + room:handleAddLoseSkills(self, "-" .. sname, nil, false, false) + local s = Fk.skills[sname] + if not s:hasTag(place) then + if s:hasTag(Skill.Compulsory) then + self:addFakeSkill("reveal_skill&") + end + self:addFakeSkill(s) end - self:addFakeSkill(s) end end diff --git a/standard/aux_skills/reveal_skill.lua b/standard/aux_skills/reveal_skill.lua index e0a9b03a15be3f808389ded98986c939c64b4fe2..7e3b6098881be6089fba4b061896893aae81a6d6 100644 --- a/standard/aux_skills/reveal_skill.lua +++ b/standard/aux_skills/reveal_skill.lua @@ -10,7 +10,7 @@ revealSkill:addEffect("active", { local general = Fk.generals[player:getMark("__heg_general")] for _, sname in ipairs(general:getSkillNameList(true)) do local s = Fk.skills[sname] - if s:hasTag(Skill.Compulsory) and not s:hasTag(Skill.DeputyPlace) then + if s:hasTag(Skill.Compulsory) and not s:hasTag(Skill.DeputyPlace) and table.contains(player.player_skills, s) then table.insert(choiceList, "revealMain:::" .. general.name) break end @@ -20,7 +20,7 @@ revealSkill:addEffect("active", { local general = Fk.generals[player:getMark("__heg_deputy")] for _, sname in ipairs(general:getSkillNameList(true)) do local s = Fk.skills[sname] - if s:hasTag(Skill.Compulsory) and not s:hasTag(Skill.MainPlace) then + if s:hasTag(Skill.Compulsory) and not s:hasTag(Skill.MainPlace) and table.contains(player.player_skills, s) then table.insert(choiceList, "revealDeputy:::" .. general.name) break end @@ -44,7 +44,7 @@ revealSkill:addEffect("active", { local general = Fk.generals[player:getMark("__heg_general")] for _, sname in ipairs(general:getSkillNameList(true)) do local s = Fk.skills[sname] - if s:hasTag(Skill.Compulsory) and not s:hasTag(Skill.DeputyPlace) then + if s:hasTag(Skill.Compulsory) and not s:hasTag(Skill.DeputyPlace) and table.contains(player.player_skills, s) then return true end end @@ -53,7 +53,7 @@ revealSkill:addEffect("active", { local general = Fk.generals[player:getMark("__heg_deputy")] for _, sname in ipairs(general:getSkillNameList(true)) do local s = Fk.skills[sname] - if s:hasTag(Skill.Compulsory) and not s:hasTag(Skill.MainPlace) then + if s:hasTag(Skill.Compulsory) and not s:hasTag(Skill.MainPlace) and table.contains(player.player_skills, s) then return true end end diff --git a/standard_cards/pkg/skills/collateral.lua b/standard_cards/pkg/skills/collateral.lua index 04b2923ae3ecae6935b27cf30b2d059d81f68e60..7ab46e0f76babbd59994e742befd90a78ffb973b 100644 --- a/standard_cards/pkg/skills/collateral.lua +++ b/standard_cards/pkg/skills/collateral.lua @@ -8,7 +8,7 @@ skill:addEffect("cardskill", { if #selected == 0 then return to_select ~= player and #to_select:getEquipments(Card.SubtypeWeapon) > 0 elseif #selected == 1 then - return selected[1]:inMyAttackRange(to_select) + return selected[1]:inMyAttackRange(to_select, nil, table.connect(Card:getIdList(card), card.fake_subcards)) end end, target_filter = function(self, player, to_select, selected, _, card, extra_data) @@ -17,7 +17,7 @@ skill:addEffect("cardskill", { elseif #selected == 0 then return Util.CardTargetFilter(self, player, to_select, selected, _, card, extra_data) else - return selected[1]:inMyAttackRange(to_select) + return selected[1]:inMyAttackRange(to_select, nil, table.connect(Card:getIdList(card), card.fake_subcards)) end end, target_num = 2,