From d9d5d29d89add219a2e8efc70a7a93965a87348b Mon Sep 17 00:00:00 2001 From: Baisebaoma Date: Mon, 4 Dec 2023 22:19:29 +0800 Subject: [PATCH] xjb__uzi's kaiju can now use handcard region to react, instead of a pop-up window. skl__liyuanhao code and description improvement. --- jianyu.lua | 149 +++++++++++++---------------------------------------- 1 file changed, 37 insertions(+), 112 deletions(-) diff --git a/jianyu.lua b/jianyu.lua index 87a4344..6e0a51b 100644 --- a/jianyu.lua +++ b/jianyu.lua @@ -88,7 +88,7 @@ local jy_shengnu = fk.CreateTriggerSkill{ name = "jy_shengnu", anim_type = 'drawcard', events = {fk.AfterCardsMove}, - frequency = Skill.Compulsory, + -- frequency = Skill.Compulsory, -- 我觉得还是把这个关掉比较好,因为多个简自豪的时候会混乱。 can_trigger = function(self, event, target, player, data) if not player:hasSkill(self) then return false end for _, move in ipairs(data) do @@ -167,9 +167,13 @@ local jy_kaiju = fk.CreateTriggerSkill{ local room = player.room for _, p in ipairs(room:getOtherPlayers(player, true)) do if not p:isAllNude() then - -- 其实这里可以优化成贯石斧那种逻辑,也就是只在下面选择,但我不会 - local id = room:askForCardChosen(p, p, "he", "#jy_kaiju-choose") -- 他自己用框选一张自己的牌,不包括判定区 - room:obtainCard(player, id, false, fk.ReasonPrey) -- 我从他那里拿一张牌来 + -- local id = room:askForCardChosen(p, p, "he", "#jy_kaiju-choose") + -- 只能和 + -- room:obtainCard(player, id, false, fk.ReasonPrey) + -- 一起用,原因不明。下面这个实现方法也可以。测了一圈,感觉是obtainCard的问题。 + local id = room:askForCard(p, 1, 1, true, self.name, false, nil, "#jy_kaiju-choose") + room:moveCardTo(id, Card.PlayerHand, player, fk.ReasonJustMove, self.name, nil, false, nil) + room:useVirtualCard("slash", nil, p, player, self.name, true) -- 杀 end end @@ -230,7 +234,7 @@ Fk:loadTranslationTable{ ["$jy_zouwei2"] = "完了呀!", ["jy_shengnu"] = "圣弩", - [":jy_shengnu"] = "锁定技,当【诸葛连弩】移至弃牌堆或其他角色的装备区时,你获得此【诸葛连弩】。", + [":jy_shengnu"] = "锁定技,当【诸葛连弩】移至弃牌堆或其他角色的装备区时,你可以获得此【诸葛连弩】。", ["$jy_shengnu1"] = "哎兄弟们我这个牌不能拆吧?", ["$jy_shengnu2"] = "补刀瞬间回来了!", @@ -265,30 +269,6 @@ local jy_sanjian = fk.CreateTriggerSkill{ end, } --- local jy_kaiju_2 = fk.CreateActiveSkill{ --- name = "jy_kaiju_2", --- anim_type = "offensive", --- can_use = function(self, player) --- return player:usedSkillTimes(self.name, Player.HistoryPhase) == 0 --- end, --- card_filter = function(self, to_select, selected) --- return #selected == 0 --- end, --- target_filter = function(self, to_select, selected) --- return #selected <= 3 and to_select ~= Self.id and --- not Fk:currentRoom():getPlayerById(to_select).isAllNude() -- 选择三个目标,这三个不能是自己,也不能是裸装 --- end, --- min_target_num = 1, --- min_card_num = 0, --- on_use = function(self, room, use) --- local player = room:getPlayerById(use.from) --- for p in use.tos do --- room:useVirtualCard("snatch", nil, player, p, self.name, true) -- 顺 --- room:useVirtualCard("fire__slash", nil, p, player, self.name, true) -- 火杀 --- end --- end, --- } - local jy_kaiju_2 = fk.CreateActiveSkill{ name = "jy_kaiju_2", anim_type = "offensive", @@ -417,35 +397,22 @@ Fk:loadTranslationTable { -- 李元浩 local skl__liyuanhao = General(extension, "skl__liyuanhao", "qun", 3, 3, General.Male) ---[[ 已知问题: -- [] 3啸酒2没有触发二段 -- [这没办法] 啸闪如果使用的是【杀】,可以发动虎啸 -- [未知原因] 死循环了 -]] - -- 虎啸 --- 参考自铁骑,屯田,脑洞包明哲 --- 感觉不能用邓艾,因为如果有转化的,就用不了了 --- TODO: 重新写一版 +-- 参考自铁骑,屯田,脑洞包明哲,克己(原来克己已经监视了使用和打出了,不用写那么复杂) local jy_huxiao = fk.CreateTriggerSkill{ name = "jy_huxiao", anim_type = "special", - events = {fk.AfterCardsMove}, -- 包括了使用和打出 + events = {fk.CardResponding, fk.TargetSpecified}, -- 包括了使用和打出 -- frequency = Skill.Compulsory, can_trigger = function(self, event, target, player, data) - if player:hasSkill(self) then - for _, move in ipairs(data) do - -- 虽然他的Response打错成了Resonpse,但他就是这么用的,没办法咯 - -- 为了性能,建议嵌套if - if move.from == player.id then - if (move.moveReason == fk.ReasonUse or move.moveReason == fk.ReasonResonpse) then - for _, info in ipairs(move.moveInfo) do - -- 是杀就行,属性杀也算,用trueName - if Fk:getCardById(info.cardId).trueName == "slash" then return true end - -- 这行不能改成return slash,不然第一张就会结束 - end - end - end + if player:hasSkill(self) and data.card.trueName == "slash" then + -- 使用【杀】 + if event == fk.TargetSpecified then + return target == player + end + -- 打出【杀】 + if event == fk.CardResponding then + return true end end end, @@ -492,19 +459,20 @@ local jy_huxiao_analeptic = fk.CreateViewAsSkill{ end local c = Fk:cloneCard("analeptic") c.skillName = self.name - print("克隆的牌c的参数:c.name ", c.name, " c.trueName ", c.trueName) + -- print("克隆的牌c的参数:c.name ", c.name, " c.trueName ", c.trueName) c:addSubcard(cards[1]) return c end, } -- 二段 --- 我知道怎么写了,首先beforecardsmove判断一次是否有牌进/出你的特殊区,然后如果有, --- 再在aftercardsmove里判断是否这张牌是啸,而且导致啸的数量变成了2。 +-- 首先BeforeCardsMove判断一次是否有牌进/出你的特殊区,然后如果有, +-- 再在AfterCardsMove里判断是否这张牌是啸,而且导致啸的数量变成了2。 -- 天才! -- 参考自周泰,界周泰 local jy_erduanxiao = fk.CreateTriggerSkill{ name = "jy_erduanxiao", + anim_type = "negative", events = {fk.BeforeCardsMove}, -- 理论上来说每次牌的移动只有同一个方向的 frequency = Skill.Compulsory, mute = true, @@ -522,7 +490,7 @@ local jy_erduanxiao = fk.CreateTriggerSkill{ end end, on_use = function(self, event, target, player, data) - -- 触发之后,设置变量,告诉下一个函数到底是进入还是离开特殊区 + -- 触发之后,设置变量,告诉下一个函数有没有可能在发生变化 player.is_xiao_changing = true -- print("jy_erduanxiao 已触发,现在player.is_xiao_changing的值是", player.is_xiao_changing) end, @@ -552,57 +520,11 @@ local jy_erduanxiao_trigger = fk.CreateTriggerSkill{ } jy_erduanxiao:addRelatedSkill(jy_erduanxiao_trigger) - --- 这是之前的二段笑,它无法判断是去自己哪个特殊区的牌,只要是特殊区就触发 --- local jy_erduanxiao = fk.CreateTriggerSkill{ --- name = "jy_erduanxiao", --- anim_type = "special", --- events = {fk.BeforeCardsMove}, -- 不能用After,这样就不知道是怎么变化的了。用Before可以有效解决。 --- frequency = Skill.Compulsory, - --- can_trigger = function(self, event, target, player, data) --- if player:hasSkill(self) and -- 如果是有二段啸的武将 --- #player:getPile("skl__liyuanhao_xiao") == 1 or #player:getPile("skl__liyuanhao_xiao") == 3 then -- 如果啸是1和3 --- for _, move in ipairs(data) do --- if move.to == player.id and move.toArea == Card.PlayerSpecial then -- 是去我这的牌,是去我的特殊区的牌 --- return true --- end --- end --- end --- end, --- on_use = function(self, event, target, player, data) --- local room = player.room --- local choice = room:askForChoice(player, {"#lose_xiao", "#lose_hp_1"}, self.name) --- if choice == "#lose_xiao" then --- local liyuanhao_xiao = player:getPile("skl__liyuanhao_xiao") --- for _, id in ipairs(liyuanhao_xiao) do --- local xiao_card = Fk:getCardById(id) --- -- room:sendLog{ --- -- type = "#buqu_remove", --- -- from = player.id, --- -- arg = xiao_card:toLogString() --- -- } --- room:moveCards({ --- from = player.id, --- ids = { id }, --- toArea = Card.DiscardPile, --- moveReason = fk.ReasonPutIntoDiscardPile, --- skillName = self.name, --- }) --- player:removeCards(Player.Special, xiao_card, self.name) --- end --- elseif choice == "#lose_hp_1" then --- room:loseHp(player, 1, self.name) --- self.is_hp_lost = true --- end --- end, --- } - -- 三件 已完成 测试通过 local jy_husanjian = fk.CreateTriggerSkill{ name = "jy_husanjian", - mute = true, frequency = Skill.Compulsory, + anim_type = "offensive", events = {fk.DamageCaused}, can_trigger = function(self, event, target, player, data) if not (target == player and player:hasSkill(self)) then return false end @@ -623,7 +545,7 @@ local jy_husanjian = fk.CreateTriggerSkill{ local room = player.room player:broadcastSkillInvoke(self.name) room:notifySkillInvoked(player, self.name, "offensive") - data.damage = data.damage - 1 + data.damage = data.damage + 1 end, } @@ -638,23 +560,26 @@ Fk:loadTranslationTable { ["skl__liyuanhao_xiao"] = "啸", ["jy_huxiao"] = "虎啸", - [":jy_huxiao"] = [[当你失去一张【杀】时,你可以将牌堆顶的一张牌置于武将牌上,称为【啸】。 + [":jy_huxiao"] = [[当你使用或打出一张【杀】时,你可以将牌堆顶的一张牌置于你的武将牌上,称为【啸】。
“我希望我的后辈们能够记住,在你踏上职业道路的这一刻开始,你的目标就只有,冠军。”——李元浩]], - ["jy_huxiao_jink"] = "虎闪", - [":jy_huxiao_jink"] = "你可以将【啸】当作【闪】使用或打出。", + ["jy_huxiao_jink"] = "横刀", + [":jy_huxiao_jink"] = [[你可以将【啸】当作【闪】使用或打出。 +
“谁敢横刀立马……”——钱晨]], - ["jy_huxiao_analeptic"] = "虎酒", - [":jy_huxiao_analeptic"] = "你可以将【啸】当作【酒】使用或打出。", + ["jy_huxiao_analeptic"] = "立马", + [":jy_huxiao_analeptic"] = [[你可以将【啸】当作【酒】使用或打出。 +
“……唯我虎大将军!”——钱晨]], ["jy_erduanxiao"] = "二段", [":jy_erduanxiao"] = "锁定技,当你的武将牌上有两张【啸】时,你选择失去一点体力或失去所有【啸】。", ["#jy_erduanxiao_trigger"] = "二段", - ["#lose_xiao"] = "弃掉所有【啸】", - ["#lose_hp_1"] = "流失1点体力", + ["#lose_xiao"] = "失去所有【啸】", + ["#lose_hp_1"] = "失去1点体力", ["jy_husanjian"] = "三件", - [":jy_husanjian"] = "锁定技,当你的装备区有且仅有防具和防御马时,你造成的伤害-1。", + [":jy_husanjian"] = [[锁定技,当你的装备区有且仅有防具和防御马时,你造成的伤害+1。 +
虎三件,指【中娅沙漏】、【水银之靴】、【大天使之杖】、【永霜】、【兰德里的苦楚】里面的三件。不同的人有不同的观点,但【大天使之杖】定在其列。]], } -- 阿伟罗