《太阳神三国杀》Lua武将自制:柯南包

---@diagnostic disable: deprecated, lowercase-global, undefined-global
--创建武将包:柯南包
module("extensions.kenan", package.seeall)
extension = sgs.Package("kenan")
--创建武将:毛利兰
--(武将包,武将名称,国家,体力上限,性别)
maolilan = sgs.General(extension, "maolilan", "god", "3", false)

--距离技
--创建技能:影武
--技能描述:锁定技,你计算到其他角色的距离始终-1,其他角色计算到你的距离始终+1。
LuaYingwu = sgs.CreateDistanceSkill{
    name = "LuaYingwu",
    correct_func = function(self, from, to)
        if from:hasSkill("LuaYingwu") then
            return -1
        end
        if to:hasSkill("LuaYingwu") then
            return 1
        end
    end,
}

--手牌上限技
--创建技能:隐忍
--技能描述:锁定技,你的手牌上限为当前体力值的2倍。
LuaYinren = sgs.CreateMaxCardsSkill{
    name = "LuaYinren",
    extra_func = function(self, target)
        if target:hasSkill("LuaYinren") then
            local hp = target:getHp()
            return hp
        end
    end,
}

--禁止技
--创建技能:忍术
--技能描述:锁定技,你不能使用属性杀指定其他角色为目标,你不能成为无属性杀的目标。
LuaRenshu = sgs.CreateProhibitSkill{
    name = "LuaRenshu",
    is_prohibited = function(self, from, to, card)
        if from:hasSkill("LuaRenshu") and card:isKindOf("NatureSlash") then
            return true
        elseif to:hasSkill("LuaRenshu") and (card:isKindOf("Slash") and not card:isKindOf("NatureSlash")) then
            return true
        else
            return false
        end
    end,
}

--添加技能
maolilan:addSkill(LuaYingwu)
maolilan:addSkill(LuaYinren)
maolilan:addSkill(LuaRenshu)

--翻译语句
sgs.LoadTranslationTable{
    ["kenan"] = "柯南包",  --武将包名称
    ["maolilan"] = "毛利兰",  --武将名称
    ["LuaYingwu"] = "影武",  --技能名称
    [":LuaYingwu"] = "锁定技,你计算到其他角色的距离始终-1,其他角色计算到你的距离始终+1。",  --技能描述
    ["LuaYinren"] = "隐忍",
    [":LuaYinren"] = "锁定技,你的手牌上限为当前体力值的2倍。",
    ["LuaRenshu"] = "忍术",
    [":LuaRenshu"] = "锁定技,你不能使用属性杀指定其他角色为目标,你不能成为无属性杀的目标。",
}
--创建武将:朗姆
--(武将包,武将名称,国家,体力上限,性别)
langmu = sgs.General(extension, "langmu", "god", "4", true)

--触发技
--创建技能:膨胀
--技能描述:锁定技,当你造成伤害时,你失去1点体力。
LuaPengzhang = sgs.CreateTriggerSkill{
    name = "LuaPengzhang",
    frequency = sgs.Skill_Compulsory,
    events = {sgs.Damage},
    on_trigger = function(self, event, player, data)
        local room = player:getRoom()
        room:loseHp(player)
    end,
}

--触发技
--创建技能:毁灭
--技能描述:锁定技,当你受到伤害时,你可以选择失去2点体力,令伤害来源弃置所有手牌和装备牌并翻面,同时其失去2点体力上限。
LuaHuimie = sgs.CreateTriggerSkill{
    name = "LuaHuimie",
    frequency = sgs.Skill_NotFrequent,
    events = {sgs.Damaged},
    on_trigger = function(self, event, player, data)
        local room = player:getRoom()
        if room:askForSkillInvoke(player, self:objectName(), data) then
            room:loseHp(player, 2)
            local damage = data:toDamage()
            local attacker = damage.from
            attacker:throwAllHandCardsAndEquips()
            attacker:turnOver()
            room:loseMaxHp(attacker, 2)

        end
    end,
}

--添加技能
langmu:addSkill(LuaPengzhang)
langmu:addSkill(LuaHuimie)

--翻译语句
sgs.LoadTranslationTable{
    ["langmu"] = "朗姆",  --武将名称
    ["LuaPengzhang"] = "膨胀",  --技能名称
    [":LuaPengzhang"] = "锁定技,当你造成伤害时,你失去1点体力。",  --技能描述
    ["LuaHuimie"] = "毁灭",
    [":LuaHuimie"] = "当你受到伤害时,你可以选择失去2点体力,令伤害来源弃置所有手牌和装备牌并翻面,同时其失去2点体力上限。",
}
--创建武将:灰原哀
--(武将包,武将名称,国家,体力上限,性别)
huiyuanai = sgs.General(extension, "huiyuanai", "god", "3", false)

--触发技
--创建技能:风魔
--技能描述:回合开始阶段,你可以选择1名其他角色,对其造成1点雷属性伤害,然后自己增加1点体力上限并回复1点体力。
LuaFengmo = sgs.CreateTriggerSkill{
    name = "LuaFengmo",
    frequency = sgs.Skill_NotFrequent,
    events = {sgs.EventPhaseStart},
    on_trigger = function(self, event, player, data)
        local room = player:getRoom()
        if player:getPhase() == sgs.Player_Start and room:askForSkillInvoke(player, self:objectName(), data) then
            local plist = room:getOtherPlayers(player)
            local victim = room:askForPlayerChosen(player, plist, self:objectName())
            local damage = sgs.DamageStruct()  --伤害结构体
            damage.from = player
            damage.to = victim
            damage.damage = 1
            damage.nature = sgs.DamageStruct_Thunder
            room:damage(damage)
            local count = player:getMaxHp()  --增加体力上限
            local mhp = sgs.QVariant()
            mhp:setValue(count+1)
            room:setPlayerProperty(player, "maxhp", mhp)
            local rec = sgs.RecoverStruct()  --回复结构体
            rec.who = player
            rec.recover = 1
            room:recover(player, rec)
        end
    end,
}

--触发技
--创建技能:备弹
--技能描述:摸牌阶段,你少摸1张牌。
LuaBeidan = sgs.CreateTriggerSkill{
    name = "LuaBeidan",
    frequency = sgs.Skill_Frequent,
    events = {sgs.DrawNCards},
    on_trigger = function(self, event, player, data)
        local room = player:getRoom()
        if room:askForSkillInvoke(player, self:objectName(), data) then
            local count = data:toInt()-1
            data:setValue(count)
        end
    end,
}

--添加技能
huiyuanai:addSkill(LuaFengmo)
huiyuanai:addSkill(LuaBeidan)

--翻译语句
sgs.LoadTranslationTable{
    ["huiyuanai"] = "灰原哀",  --武将名称
    ["LuaFengmo"] = "风魔",  --技能名称
    [":LuaFengmo"] = "回合开始阶段,你可以选择1名其他角色,对其造成1点雷属性伤害,然后自己增加1点体力上限并回复1点体力。",  --技能描述
    ["LuaBeidan"] = "备弹",
    [":LuaBeidan"] = "摸牌阶段,你少摸1张牌。",
}
--创建武将:世良真纯
--(武将包,武将名称,国家,体力上限,性别)
shiliangzc = sgs.General(extension, "shiliangzc", "god", "3", true)

--触发技
--创建技能:眩晕
--技能描述:任意角色出牌阶段开始前,你可以失去1点体力令其跳过出牌阶段。
LuaXuanyun = sgs.CreateTriggerSkill{
    name = "LuaXuanyun",
    frequency = sgs.Skill_NotFrequent,
    events = {sgs.EventPhaseChanging},
    on_trigger = function(self, event, player, data)
        local room = player:getRoom()
        local change = data:toPhaseChange()
        local phase = change.to
        local attacker = room:findPlayerBySkillName(self:objectName())  --技能发动者
        if player:objectName() == attacker:objectName() then return end  --自己伤害自己无效
        if phase == sgs.Player_Play and room:askForSkillInvoke(attacker, self:objectName(), data) then
            room:loseHp(attacker)
            player:skip(phase)  --技能承受者
        end
    end,
    can_trigger = function(self, target)
        return target:isAlive() and not target:isSkipped(sgs.Player_Play)  --技能发动要求
    end,
}

--触发技
--创建技能:维和
--技能描述:弃牌阶段结束后,你可以弃1张牌,进行1个额外出牌阶段。
LuaWeihe = sgs.CreateTriggerSkill{
    name = "LuaWeihe",
    frequency = sgs.Skill_NotFrequent,
    events = {sgs.EventPhaseChanging},
    on_trigger = function(self, event, player, data)
        local room = player:getRoom()
        local change = data:toPhaseChange()
        local lastphase = change.from
        if lastphase == sgs.Player_Discard and room:askForSkillInvoke(player, self:objectName(), data) then
            change.to = sgs.Player_Play
            data:setValue(change)
            room:sendCompulsoryTriggerLog(player, self:objectName())
            if not room:askForDiscard(player, self:objectName(), 1, 1, false, true, "@Wuren_card") then
                local cards = player:getCards("he")
                local c = cards:at(math.random(0, cards:length() - 1))
                room:throwCard(c, player)
            end
            player:insertPhase(sgs.Player_Play)
        end
    end,
}

--触发技
--创建技能:和维
--技能描述:回合结束时,若你没有手牌,则可以进行1个额外的回合。
LuaHewei = sgs.CreateTriggerSkill{
    name = "LuaHewei",
    frequency = sgs.Skill_NotFrequent,
    events = {sgs.EventPhaseEnd},
    on_trigger = function(self, event, player, data)
        local room = player:getRoom()
        local change = data:toPhaseChange()
        if player:getPhase() == sgs.Player_Finish and player:isKongcheng()
            and room:askForSkillInvoke(player, self:objectName(), data) then
                player:gainAnExtraTurn()
        end
    end,
}

--添加技能
shiliangzc:addSkill(LuaXuanyun)
shiliangzc:addSkill(LuaWeihe)
shiliangzc:addSkill(LuaHewei)

--翻译语句
sgs.LoadTranslationTable{
    ["shiliangzc"] = "世良真纯",  --武将名称
    ["LuaXuanyun"] = "眩晕",  --技能名称
    [":LuaXuanyun"] = "任意角色出牌阶段开始前,你可以失去1点体力令其跳过出牌阶段。",  --技能描述
    ["LuaWeihe"] = "维和",
    [":LuaWeihe"] = "弃牌阶段结束后,你可以弃1张牌,进行1个额外出牌阶段。",
    ["LuaHewei"] = "和维",
    [":LuaHewei"] = "回合结束时,若你没有手牌,则可以进行1个额外的回合。",
}
--创建武将:降谷零
--(武将包,武将名称,国家,体力上限,性别)
jiangguling = sgs.General(extension, "jiangguling", "god", "4", true)

--触发技
--创建技能:聚合
--技能描述:当你对其他角色造成伤害时,你可以获得其1张牌;当你受到其他角色伤害时,你可以弃置其1张牌。
LuaJuhe = sgs.CreateTriggerSkill{
    name = "LuaJuhe",
    frequency = sgs.Skill_NotFrequent,
    events = {sgs.Damage, sgs.Damaged},
    on_trigger = function(self, event, player, data)
        local room = player:getRoom()
        if event == sgs.Damage then
            local damage = data:toDamage()
            local attacker = damage.to
            if player:objectName() == attacker:objectName() then return end  --自己伤害自己无效
            if room:askForSkillInvoke(player, "LuaJuhe1", data) and not attacker:isNude() then
                local id = room:askForCardChosen(player, attacker, "he", self:objectName())  --h:手牌,e:装备牌,j判定区
                room:obtainCard(player, id, true)
            end
        end
        if event == sgs.Damaged then
            local damage = data:toDamage()
            local attacker = damage.from
            if player:objectName() == attacker:objectName() then return end  --自己伤害自己无效
            if room:askForSkillInvoke(player, "LuaJuhe2", data) and not attacker:isNude() then
                local id = room:askForCardChosen(player, attacker, "he", self:objectName())  --h:手牌,e:装备牌,j判定区
                room:throwCard(id, attacker, player)  --(牌,被害人,凶手)
            end
        end
    end,
}

--触发技
--创建技能:武装
--技能描述:回合开始阶段,如果你的装备区没有牌,则你可以选择场上任意1名其他角色,选择其装备区内的1张牌置入你的装备区。
LuaWuzhuang = sgs.CreateTriggerSkill{
    name = "LuaWuzhuang",
    frequency = sgs.Skill_NotFrequent,
    events = {sgs.EventPhaseStart},
    on_trigger = function(self, event, player, data)
        local room = player:getRoom()
        if player:getPhase() == sgs.Player_Start and not player:hasEquip()
        and room:askForSkillInvoke(player, self:objectName(), data) then
            local plist = room:getOtherPlayers(player)
            local victim = room:askForPlayerChosen(player, plist, self:objectName())
            local id = room:askForCardChosen(player, victim, "e", self:objectName())
            local card = sgs.Sanguosha:getCard(id)
            room:moveCardTo(card, player, sgs.Player_PlaceEquip)
        end
    end,
}

--添加技能
jiangguling:addSkill(LuaJuhe)
jiangguling:addSkill(LuaWuzhuang)

--翻译语句
sgs.LoadTranslationTable{
    ["jiangguling"] = "降谷零",  --武将名称
    ["LuaJuhe"] = "聚合",  --技能名称
    ["LuaJuhe1"] = "聚合(造成伤害)",
    ["LuaJuhe2"] = "聚合(受到伤害)",
    [":LuaJuhe"] = "当你对其他角色造成伤害时,你可以获得其1张牌;当你受到其他角色伤害时,你可以弃置其1张牌。",  --技能描述
    ["LuaWuzhuang"] = "武装",
    [":LuaWuzhuang"] = "回合开始阶段,如果你的装备区没有牌,则你可以选择场上任意1名角色,选择其装备区内的1张牌置入你的装备区。"
}
--创建武将:贝尔摩德
--(武将包,武将名称,国家,体力上限,性别)
beiermd = sgs.General(extension, "beiermd", "god", "3", true)

--主动视为技
--创建技能:神偷
--技能描述:出牌阶段,你可以将你的♣手牌当作【顺手牵羊】使用。
LuaShentou = sgs.CreateViewAsSkill{
    name = "LuaShentou",
    n = 1,  --手牌数量
    view_filter = function(self, selected, to_select)
        return to_select:getSuit() == sgs.Card_Club and not to_select:isEquipped()  --梅花且非装备牌
    end,
    view_as = function(self, cards)
        if #cards == 0 then return
        elseif #cards == 1 then
            local card = cards[1]
            local suit = card:getSuit()
            local point = card:getNumber()
            local id = card:getId()
            local vs_card = sgs.Sanguosha:cloneCard("snatch", suit, point)  --创建虚拟卡牌:顺手牵羊
            vs_card:addSubcard(id)
            vs_card:setSkillName(self:objectName())
            return vs_card
        end
    end,
}

--单牌视为技(特殊)
--创建技能:神拆
--技能描述:出牌阶段,你可以将你的♠2-9手牌当作【过河拆桥】使用。
LuaShenchai = sgs.CreateOneCardViewAsSkill{
    name = "LuaShenchai",
    filter_pattern = ".|spade|2~9|hand",  --牌名|花色|点数|牌类型
    view_as = function(self, originalCard)
        local suit = originalCard:getSuit()
        local point = originalCard:getNumber()
        local id = originalCard:getId()
        local vs_card = sgs.Sanguosha:cloneCard("dismantlement", suit, point)  --创建虚拟卡牌:过河拆桥
        vs_card:addSubcard(id)
        vs_card:setSkillName(self:objectName())
        return vs_card
    end,
}

--被动视为技
--创建技能:消散
--技能描述:出牌阶段,你可以将1张手牌当作【闪】使用。
LuaXiaosan = sgs.CreateViewAsSkill{
    name = "LuaXiaosan",
    n = 1,  --手牌数量
    view_filter = function(self, selected, to_select)
        return not to_select:isEquipped()
    end,
    view_as = function(self, cards)
        if #cards == 0 then return
        elseif #cards == 1 then
            local card = cards[1]
            local suit = card:getSuit()
            local point = card:getNumber()
            local id = card:getId()
            local vs_card = sgs.Sanguosha:cloneCard("jink", suit, point)  --创建虚拟卡牌:闪
            vs_card:addSubcard(id)
            vs_card:setSkillName(self:objectName())
            return vs_card
        end
    end,
    enabled_at_play = function(self, player)  --出牌阶段不可发动
        return false
    end,
    enabled_at_response = function(self, player, pattern)  --回合外阶段可被响应
        return pattern == "jink"
    end,
}

--锁定视为技
--创建技能:弥散
--技能描述:锁定技,你的♥手牌均视为【桃】。
LuaMisan = sgs.CreateFilterSkill{
    name = "LuaMisan",
    view_filter = function(self, to_select)
        return to_select:getSuit() == sgs.Card_Heart  --红桃
    end,
    view_as = function(self, card)
        local suit = card:getSuit()
        local point = card:getNumber()
        local id = card:getId()
        local peach = sgs.Sanguosha:cloneCard("peach", suit, point)  --创建虚拟卡牌:桃
        peach:setSkillName(self:objectName())
        local vs_card = sgs.Sanguosha:getWrappedCard(id)  --覆盖原始卡牌
        vs_card:takeOver(peach)
        return vs_card
    end,
}

--添加技能
beiermd:addSkill(LuaShentou)
beiermd:addSkill(LuaShenchai)
beiermd:addSkill(LuaXiaosan)
beiermd:addSkill(LuaMisan)

--翻译语句
sgs.LoadTranslationTable{
    ["beiermd"] = "贝尔摩德",  --武将名称
    ["LuaShentou"] = "神偷",  --技能名称
    [":LuaShentou"] = "出牌阶段,你可以将你的♣手牌当作【顺手牵羊】使用。",  --技能描述
    ["LuaShenchai"] = "神拆",
    [":LuaShenchai"] = "出牌阶段,你可以将你的♠2-9手牌当作【过河拆桥】使用。",
    ["LuaXiaosan"] = "消散",
    [":LuaXiaosan"] = "出牌阶段,你可以将1张手牌当作【闪】使用。",
    ["LuaMisan"] = "弥散",
    [":LuaMisan"] = "锁定技,你的♥手牌均视为【桃】。",
}
--创建武将:赤井秀一
--(武将包,武将名称,国家,体力上限,性别)
chijingxy = sgs.General(extension, "chijingxy", "god", "4", true)

--主动技能卡牌
--创建技能:血染
--技能描述:出牌阶段,你可以弃置1张装备牌,并选择1名角色,对其造成1点伤害,然后你摸1张牌。
--实体卡牌--视为技,(角色对象,技能效果)--技能卡牌
CCXueran = sgs.CreateSkillCard{
    name = "LuaXueran",
    target_fixed = false,  --指定的目标不固定
    filter = function(self, targets, to_select)  --过滤角色
        if #targets == 1 then return false  --限制可选目标数量为1
        else return true
        end
    end,
    on_use = function(self, room, source, targets)
        local dest = targets[1]
        local damage = sgs.DamageStruct()
        damage.from = source
        damage.to = dest
        damage.damage = 1
        damage.nature = sgs.DamageStruct_Normal
        room:damage(damage)
        room:drawCards(source, 1)
    end,
}

LuaXueran = sgs.CreateViewAsSkill{
    name = "LuaXueran",
    n = 1,  --手牌数量
    view_filter = function(self, selected, to_select)  --过滤卡牌
        return to_select:getTypeId() == sgs.Card_TypeEquip --指定为装备牌
    end,
    view_as = function(self, cards)
        if #cards == 0 then return end
        local vs_card = CCXueran:clone()  --创建虚拟技能卡牌
        vs_card:addSubcard(cards[1])
        return vs_card
    end,
}

--主动技能卡牌(限制次数)
--创建技能:冲锋
--技能描述:出牌阶段限一次,你可以对场上任意1名角色造成1点伤害。
CCChongfeng = sgs.CreateSkillCard{
    name = "LuaChongfeng",
    target_fixed = false,  --指定的目标不固定
    filter = function(self, targets, to_select)  --过滤角色
        return #targets == 0
    end,
    on_use = function(self, room, source, targets)
        local damage = sgs.DamageStruct()
        damage.from = source
        damage.to = targets[1]
        damage.damage = 1
        damage.nature = sgs.DamageStruct_Normal
        room:damage(damage)
        room:setPlayerFlag(source, "Chongfeng_used")  -- 次数限制标记
    end,
}

--0牌视为技(特殊)
LuaChongfeng = sgs.CreateZeroCardViewAsSkill{
    name = "LuaChongfeng",
    view_as = function(self, cards)
        return CCChongfeng:clone()
    end,
    enabled_at_play = function(self, target)
        return not target:hasFlag("Chongfeng_used")
    end,
}

--被动技能卡牌(触发视为技)
--创建技能:血栓
--技能描述:出牌阶段结束时,你可以弃置2张黑色手牌,若如此做,你可以令至多2名角色翻面。
--触发时机--触发技,实体卡牌--视为技,(角色对象,技能效果)--技能卡牌
CCXueshuan = sgs.CreateSkillCard{
    name = "LuaXueshuan",
    target_fixed = false,  --指定的目标不固定
    filter = function(self, targets, to_select)  --过滤角色
        if #targets == 2 then return false  --限制可选目标数量为2
        else return true
        end
    end,
    on_use = function(self, room, source, targets)
        for _, dest in pairs(targets) do  --遍历目标,每有1个角色就令其翻面
            dest:turnOver()
        end
    end,
}

VSXueshuan = sgs.CreateViewAsSkill{
    name = "LuaXueshuan",
    n = 2,  --手牌数量
    view_filter = function(self, selected, to_select)  --过滤卡牌
        return to_select:isBlack() and not to_select:isEquipped()
    end,
    view_as = function(self, cards)
        if #cards == 0 or #cards == 1 then return end
        local vs_card = CCXueshuan:clone()  --创建虚拟技能卡牌
        vs_card:addSubcard(cards[1])
        vs_card:addSubcard(cards[2])
        return vs_card
    end,
    response_pattern = "@@LuaXueshuan",  --触发响应
}

LuaXueshuan = sgs.CreateTriggerSkill{
    name = "LuaXueshuan",
    events = {sgs.EventPhaseEnd},
    view_as_skill = VSXueshuan,  --触发视为技联动
    on_trigger = function(self, event, player, data)
        local room = player:getRoom()
        if player:getPhase() == sgs.Player_Play and room:askForSkillInvoke(player, self:objectName(), data) then
            room:askForUseCard(player, "@@LuaXueshuan", "@LuaXueshuan_card")  --触发响应,提示信息
        end
    end,
}

--添加技能
chijingxy:addSkill(LuaXueran)
chijingxy:addSkill(LuaChongfeng)
chijingxy:addSkill(LuaXueshuan)

--翻译语句
sgs.LoadTranslationTable{
    ["chijingxy"] = "赤井秀一",  --武将名称
    ["LuaXueran"] = "血染",  --技能名称
    [":LuaXueran"] = "出牌阶段,你可以弃置1张装备牌,并选择1名角色,对其造成1点伤害,然后你摸1张牌。",  --技能描述
    ["LuaChongfeng"] = "冲锋",
    [":LuaChongfeng"] = "出牌阶段限一次,你可以对场上任意1名角色造成1点伤害。",
    ["LuaXueshuan"] = "血栓",
    [":LuaXueshuan"] = "出牌阶段结束时,你可以弃置2张黑色手牌,若如此做,你可以令至多2名角色翻面。",
    ["@LuaXueshuan_card"] = "请选择2张黑色手牌,并指定至多2名角色。"
}
--创建武将:服部平次
--(武将包,武将名称,国家,体力上限,性别)
fubupc = sgs.General(extension, "fubupc", "god", "4", true)

--触发技(主动判定)
--创建技能:洞察
--技能描述:当你将要受到有伤害来源的伤害时,你可以进行1次判定,若为红桃花色,则此次的伤害来源与伤害目标交换,同时对方摸1张牌。
LuaDongcha = sgs.CreateTriggerSkill{
    name = "LuaDongcha",
    events = {sgs.DamageForseen},
    on_trigger = function(self, event, player, data)
        local room = player:getRoom()
        local DCdamage = data:toDamage()
        if DCdamage.from and room:askForSkillInvoke(player, self:objectName(), data) then
            local DCjudge = sgs.JudgeStruct()  --判定结构体
            DCjudge.good = true  --加入判定生效列表
            DCjudge.who = player  --进行判定的角色
            DCjudge.pattern = ".|heart|."  --牌名|花色|点数
            DCjudge.reason = self:objectName()
            room:judge(DCjudge)
            if DCjudge:isGood() then
                local victim = DCdamage.from  --创建临时变量进行交换目标
                DCdamage.from = DCdamage.to
                DCdamage.to = victim
                data:setValue(DCdamage)
                room:drawCards(victim, 1)
            end
        end
    end,
}

--触发技(被动判定)
--创建技能:敏锐
--技能描述:当你的判定牌生效时,你可以获得之。
LuaMinrui = sgs.CreateTriggerSkill{
    name = "LuaMinrui",
    events = {sgs.FinishJudge},
    on_trigger = function(self, event, player, data)
        local room = player:getRoom()
        local judge = data:toJudge()
        local card = judge.card
        if room:askForSkillInvoke(player, self:objectName(), data) then
            player:obtainCard(card)
        end
    end,
}

--触发技(改变判定)
--创建技能:逆天
--技能描述:当有角色进行判定时,你可以打出1张手牌替代之,若如此做,你需要弃置1张牌。
CCNitian = sgs.CreateSkillCard{
    name = "LuaNitian",
    target_fixed = true,  --指定的目标固定
    will_throw = false,  --不需要丢弃该牌
    on_effect = function(self, effect)
        return
    end,
}

VSNitian = sgs.CreateViewAsSkill{
    name = "LuaNitian",
    n = 1,  --手牌数量
    view_filter = function(self, selected, to_select)  --过滤卡牌
        return not to_select:isEquipped()
    end,
    view_as = function(self, cards)
        if #cards == 0 then return end
        local vs_card = CCNitian:clone()  --创建虚拟技能卡牌
        vs_card:addSubcard(cards[1])
        return vs_card
    end,
    response_pattern = "@@LuaNitian",  --触发响应
}

LuaNitian = sgs.CreateTriggerSkill{
    name = "LuaNitian",
    events = {sgs.AskForRetrial},
    view_as_skill = VSNitian,
    on_trigger = function(self, event, player, data)
        local room = player:getRoom()
        if room:askForSkillInvoke(player, self:objectName(), data) then
            local judge = data:toJudge()
            local card = room:askForCard(player, "@@LuaNitian", "@LuaNitian_card", data, sgs.AskForRetrial)
            room:retrial(card, player, judge, self:objectName())
            room:sendCompulsoryTriggerLog(player, self:objectName())
            if not room:askForDiscard(player, self:objectName(), 1, 1, false, true, "@Wuren_card") then
                local cards = player:getCards("he")
                local c = cards:at(math.random(0, cards:length() - 1))
                room:throwCard(c, player)
            end
        end
    end,
}

--添加技能
fubupc:addSkill(LuaDongcha)
fubupc:addSkill(LuaMinrui)
fubupc:addSkill(LuaNitian)

--翻译语句
sgs.LoadTranslationTable{
    ["fubupc"] = "服部平次",  --武将名称
    ["LuaDongcha"] = "洞察",  --技能名称
    [":LuaDongcha"] = "当你将要受到有伤害来源的伤害时,你可以进行1次判定,若为红桃花色,则此次的伤害来源与伤害目标交换,同时对方摸1张牌。",  --技能描述
    ["LuaMinrui"] = "敏锐",
    [":LuaMinrui"] = "当你的判定牌生效时,你可以获得之。",
    ["LuaNitian"] = "逆天",
    [":LuaNitian"] = "当有角色进行判定时,你可以打出1张手牌替代之,若如此做,你需要弃置1张牌。",
    ["@LuaNitian_card"] = "请选择1张手牌进行改判。",
}
--创建武将:怪盗基德
--(武将包,武将名称,国家,体力上限,性别)
guaidaojd = sgs.General(extension, "guaidaojd", "god", "4", true)

--触发技(标记)
--创建技能:积累
--技能描述:锁定技,在判定阶段开始时,你获得1个龙标记。
LuaJilei = sgs.CreateTriggerSkill{
    name = "LuaJilei",
    frequency = sgs.Skill_Compulsory,
    events = {sgs.EventPhaseStart},
    on_trigger = function(self, event, player, data)
        local room = player:getRoom()
        local phase = player:getPhase()
        if phase == sgs.Player_Judge then
            player:gainMark("@dragon_test")
        end
    end,
}

--隐藏技
--技能描述:你每拥有1个龙标记,你的手牌上限+1。
LuaJileiCardnum = sgs.CreateMaxCardsSkill{
    name = "#LuaJilei",
    extra_func = function(self, target)
        if target:hasSkill("#LuaJilei") then
            return target:getMark("@dragon_test")
        end
    end,
}

--主动技能卡牌
--创建技能:消耗
--技能描述:出牌阶段,你可以弃置所有龙标记,并指定1名角色对其造成标记数量一半的火焰伤害(向上取整),
         --若以此法造成的伤害数量不少于3点,你需要失去2点体力并弃置所有手牌。
--实体卡牌--视为技,(角色对象,技能效果)--技能卡牌
CCXiaohao = sgs.CreateSkillCard{
    name = "LuaXiaohao",
    target_fixed = false,  --指定的目标不固定
    filter = function(self, targets, to_select)  --过滤角色
        return #targets == 0  --指定1名角色
    end,
    on_use = function(self, room, source, targets)
        local num = (source:getMark("@dragon_test")+1)/2  --标记数量的一半,向上取整
        local damage = sgs.DamageStruct()
        damage.from = source
        damage.to = targets[1]
        damage.damage = num
        damage.nature = sgs.DamageStruct_Fire
        room:damage(damage)
        if num >= 3 then
            room:loseHp(source, 2)
            source:throwAllHandCards()
        end
        source:loseAllMarks("@dragon_test")
    end,
}

LuaXiaohao = sgs.CreateViewAsSkill{
    name = "LuaXiaohao",
    n = 0,  --手牌数量
    view_as = function(self, cards)
        return CCXiaohao:clone()  --创建虚拟技能卡牌
    end,
    enabled_at_play = function(self, player)  --判断是否有标记
        return player:getMark("@dragon_test") >= 1
    end
}

--添加技能
guaidaojd:addSkill(LuaJilei)
guaidaojd:addSkill(LuaJileiCardnum)
guaidaojd:addSkill(LuaXiaohao)


--翻译语句
sgs.LoadTranslationTable{
    ["guaidaojd"] = "怪盗基德",  --武将名称
    ["LuaJilei"] = "积累",  --技能名称
    [":LuaJilei"] = "锁定技,在判定阶段开始时,你获得1个龙标记,你每拥有1个龙标记,你的手牌上限+1。",  --技能描述
    ["LuaXiaohao"] = "消耗",
    [":LuaXiaohao"] = "出牌阶段,你可以弃置所有龙标记,并指定1名角色对其造成标记数量一半的火焰伤害(向上取整),若以此法造成的伤害数量不少于3点,你需要失去2点体力并弃置所有手牌。",
    ["@dragon_test"] = "龙",
}
--创建武将:工藤新一
--(武将包,武将名称,国家,体力上限,性别)
gongtengxy = sgs.General(extension, "gongtengxy", "god", "4", true)

--触发技(跨阶段)
--创建技能:任重
--技能描述:摸牌阶段,你可以放弃摸牌并判定,若如此做,你在回合结束阶段摸与判定点数一半数量的牌(向上取整)。
LuaRenzhong = sgs.CreateTriggerSkill{
	name = "LuaRenzhong",
	events = {sgs.DrawNCards, sgs.EventPhaseEnd},
	on_trigger = function(self, event, player, data)
		local room = player:getRoom()
		if event == sgs.DrawNCards and room:askForSkillInvoke(player, "LuaRenzhong", data) then
			local count = data:toInt()
			data:setValue(count-2)
			local judge = sgs.JudgeStruct()  --判定结构体
			judge.good = true
			judge.pattern = ".|.|."
			judge.who = player
			judge.reason = self:objectName()
			room:judge(judge)
			local card = judge.card
			local point = card:getNumber()
			room:setTag("Renzhong_point", sgs.QVariant(point))  --保留判定点数
		end
		if event == sgs.EventPhaseEnd and player:getPhase()==sgs.Player_Finish then
			local num = room:getTag("Renzhong_point"):toInt()
			room:drawCards(player, (num+1)/2)
			room:removeTag("Renzhong_point")  --移除标签
		end
	end,
}

--触发技(濒死)
--创建技能:护盾
--技能描述:任意其他角色进入濒死状态时,你可以选择弃置所有手牌,然后令该角色回复X点体力。(X为以此法弃置的手牌数量)
LuaHudun = sgs.CreateTriggerSkill{
    name = "LuaHudun",
    events = {sgs.Dying},
    on_trigger = function(self, event, player, data)
        local room = player:getRoom()
        local dying = data:toDying()
        local target = dying.who
        if target:objectName() ~= player:objectName() and room:askForSkillInvoke(player, self:objectName(), data) then
            local num = player:getHandcardNum()
            local rec = sgs.RecoverStruct()
            rec.who = player
            rec.recover = num
            room:recover(target, rec)
            player:throwAllHandCards()
        end
    end,
}

--添加技能
gongtengxy:addSkill(LuaRenzhong)
gongtengxy:addSkill(LuaHudun)

--翻译语句
sgs.LoadTranslationTable{
    ["gongtengxy"] = "工藤新一",  --武将名称
    ["LuaRenzhong"] = "任重",  --技能名称
    [":LuaRenzhong"] = "摸牌阶段,你可以放弃摸牌并判定,若如此做,你在回合结束阶段摸与判定点数一半数量的牌(向上取整)。",  --技能描述
    ["LuaHudun"] = "护盾",
    [":LuaHudun"] = "任意其他角色进入濒死状态时,你可以选择弃置所有手牌,然后令该角色回复X点体力。(X为以此法弃置的手牌数量)",
}
--创建武将:乌丸莲耶
--(武将包,武将名称,国家,体力上限,性别)
wuwanly = sgs.General(extension, "wuwanly", "god", "4", true)

--触发技(私家牌堆)
--创建技能:坚毅
--技能描述:锁定技,当你受到伤害时,你可以翻开牌堆顶的X张牌作为龙置于你的武将牌上(X为你受到伤害的数值)。
LuaJianyi = sgs.CreateTriggerSkill{
    name = "LuaJianyi",
    frequency = sgs.Skill_Compulsory,
    events = {sgs.Damaged},
    on_trigger = function(self, event, player, data)
        local room = player:getRoom()
        local damage = data:toDamage()
        local ids = room:getNCards(damage.damage)
        player:addToPile("LuaJianyi_pile", ids)  --定义牌堆
    end,
}

--隐藏技
--技能描述:每当你拥有1张龙,你计算到其他角色的距离-1。
LuaJianyiDistance = sgs.CreateDistanceSkill{
    name = "#LuaJianyi",
    correct_func = function(self, from, to)
        if from:hasSkill("#LuaJianyi") then
            local pile = from:getPile("LuaJianyi_pile")
            return -pile:length()
        end
    end,
}

--主动技能卡牌(限制次数)
--创建技能:猛击
--技能描述:出牌阶段限一次,你可以弃置1张龙并选择1项:1.指定1名其他角色,对其造成1点伤害;
         --2.获得这张牌,并额外从摸牌堆中摸1张牌。
CCMengji = sgs.CreateSkillCard{
    name = "LuaMengji",
    target_fixed = true,  --指定的目标固定
    on_use = function(self, room, source, targets)
        local choice = room:askForChoice(source, "LuaMengji", "Damage+Draw")
        if choice == "Damage" then  --指定1名其他角色,对其造成1点伤害
            local plist = room:getOtherPlayers(source)
            local victim = room:askForPlayerChosen(source, plist, self:objectName())
            local damage = sgs.DamageStruct()
            damage.from = source
            damage.to = victim
            damage.damage = 1
            damage.nature = sgs.DamageStruct_Normal
            room:damage(damage)
        elseif choice == "Draw" then  --获得这张牌,并额外从摸牌堆中摸1张牌
            room:obtainCard(source, self)
            room:drawCards(source, 1)
        end
        room:setPlayerFlag(source, "Mengji_used")  -- 次数限制标记
    end,
}

--单牌视为技(特殊)
LuaMengji = sgs.CreateOneCardViewAsSkill{
    name = "LuaMengji",
    filter_pattern = ".|.|.|LuaJianyi_pile",  --牌名|花色|点数|牌类型
    expand_pile = "LuaJianyi_pile",  --私家牌堆
    view_as = function(self, originalCard)
        local vs_card = CCMengji:clone()
        vs_card:addSubcard(originalCard:getId())
        return vs_card
    end,
    enabled_at_play = function(self, target)
        return not target:hasFlag("Mengji_used") and target:getPile("LuaJianyi_pile"):length() >= 1
    end,
}

--觉醒技
--创建技能:荣耀
--技能描述:觉醒技,回合开始阶段,当你拥有4张或以上的龙,你失去1点体力上限并摸3张牌,同时获得技能"无双"。
LuaRongyao = sgs.CreateTriggerSkill{
	name = "LuaRongyao",
	frequency = sgs.Skill_Wake,
	events = {sgs.EventPhaseStart},
	on_trigger = function(self, event, player, data)
		local room = player:getRoom()
		room:doLightbox("$LuaRongyao_effect")  --全屏特效
		room:loseMaxHp(player, 1)
		room:drawCards(player, 3)
		if not player:hasSkill("wushuang") then
			room:acquireSkill(player, "wushuang")
		end
		player:gainMark("@waked")  --觉醒标记
	end,
	can_trigger = function(self, target)
		return target:isAlive() and target:hasSkill("LuaRongyao") and target:getPhase() == sgs.Player_Start
		and target:getMark("@waked") == 0 and target:getPile("LuaJianyi_pile"):length()>=4
	end,
}

--限定技
--创建技能:绝刃
--技能描述:限定技,你可以选择弃置6张龙并选择1名其他角色,将这6张龙交给他,然后你摸3张牌,并且你与其回复满体力值,
         --然后除你俩之外的其他所有角色选择1项:1.弃置所有手牌和装备牌;2.受到你造成的2点火焰伤害。(若没有牌强制选第2项)
CCJueren = sgs.CreateSkillCard{
	name = "LuaJueren",
	target_fixed = false,
	will_throw = false,
	filter = function(self, targets, to_select)
		return #targets == 0 and not to_select:hasSkill("LuaJueren")  --指定其他角色
	end,
	on_use = function(self, room, source, targets)
		room:doLightbox("$LuaJueren_effect")
		source:loseAllMarks("@burn_test")  --限定标记
		room:obtainCard(targets[1], self)
		room:drawCards(source, 3)
		local rec = sgs.RecoverStruct()  --回复结构体
		rec.who = source
		rec.recover = source:getMaxHp()
		room:recover(source, rec)  --我回复体力值
		rec.recover = targets[1]:getMaxHp()
		room:recover(targets[1], rec)  --他回复体力值
		local plist = room:getAlivePlayers()  --获得所有角色列表
		for _, dest in sgs.qlist(plist) do
			if dest:objectName() ~= source:objectName() and dest:objectName() ~= targets[1]:objectName() then  --所选角色不是我也不是他
				local damage = sgs.DamageStruct()
				damage.from = source
				damage.to = dest
				damage.damage = 2
				damage.nature = sgs.DamageStruct_Fire
				if dest:isNude() then  --若没有牌必须受到伤害
					room:damage(damage)
				else
					local choice = room:askForChoice(dest, self:objectName(), "Discard+Getdamage")
					if choice == "Discard" then
						dest:throwAllHandCardsAndEquips()
					elseif choice == "Getdamage" then
						room:damage(damage)
					end
				end
			end
		end
	end,
}

VSJueren = sgs.CreateViewAsSkill{
	name = "LuaJueren",
	n = 6,
	expand_pile = "LuaJianyi_pile",
	view_filter = function(self, selected, to_select)
		return #selected <=5 and sgs.Self:getPile("LuaJianyi_pile"):contains(to_select:getId())
	end,
	view_as = function(self, cards)
		if #cards < 6 then return end
		local vs_card = CCJueren:clone()
		for _,card in pairs(cards) do
			vs_card:addSubcard(card)
		end
		return vs_card
	end,
	enabled_at_play = function (self,player)
		return player:getMark("@burn_test")>=1 and player:getPile("LuaJianyi_pile"):length()>=6
	end,
}

LuaJueren = sgs.CreateTriggerSkill{
	name = "LuaJueren",
	frequency = sgs.Skill_Limited,
	view_as_skill = VSJueren,
	limit_mark = "@burn_test",
	on_trigger = function(self, event, player, data)
	end,
}

--添加技能
wuwanly:addSkill(LuaJianyi)
wuwanly:addSkill(LuaJianyiDistance)
wuwanly:addSkill(LuaMengji)
wuwanly:addSkill(LuaRongyao)
wuwanly:addSkill(LuaJueren)

--翻译语句
sgs.LoadTranslationTable{
    ["wuwanly"] = "乌丸莲耶",  --武将名称
    ["LuaJianyi"] = "坚毅",  --技能名称
    [":LuaJianyi"] = "锁定技,当你受到伤害时,你可以翻开牌堆顶的X张牌作为龙置于你的武将牌上(X为你受到伤害的数值),每当你拥有1张龙,你计算到其他角色的距离-1。",  --技能描述
    ["LuaJianyi_pile"] = "龙", --私家牌堆名称
    ["LuaMengji"] = "猛击",
    [":LuaMengji"] = "出牌阶段限一次,你可以弃置1张龙并选择1项:1.指定1名其他角色,对其造成1点伤害;2.获得这张牌,并额外从摸牌堆中摸1张牌。",
    ["Damage"] = "1.指定1名其他角色,对其造成1点伤害",
    ["Draw"] = "2.获得这张牌,并额外从摸牌堆中摸1张牌",
    ["LuaRongyao"] = "荣耀",
    [":LuaRongyao"] = "觉醒技,回合开始阶段,当你拥有4张或以上的龙,你失去1点体力上限并摸3张牌,同时获得技能“无双”。",
    ["$LuaRongyao_effect"] = "我受到了召唤,我必须回应,一如既往!",  --觉醒技特效
    ["LuaJueren"] = "绝刃",
    [":LuaJueren"] = "限定技,你可以选择弃置6张龙并选择1名其他角色,将这6张龙交给他,然后你摸3张牌,并且你与其回复满体力值,然后除你俩之外的其他所有角色选择1项:1.弃置所有手牌和装备牌;2.受到你造成的2点火焰伤害。(若没有牌强制选第2项)",
    ["$LuaJueren_effect"] = "大展宏图,就在今日!",  --限定技特效
    ["Discard"] = "1.弃置所有手牌和装备牌",
    ["Getdamage"] = "2.受到你造成的2点火焰伤害",
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值