太阳神三国杀lua吧 关注:2,644贴子:73,380

回复:【数字·报告】让我们一起来更新Lua技能手册!

只看楼主收藏回复

国战1.1.0
--天义
LuaTianyiCard = sgs.CreateSkillCard{
name = "LuaTianyiCard",
filter = function(self, targets, to_select)
return #targets == 0 and (not to_select:isKongcheng()) and to_select:objectName() ~= sgs.Self:objectName()
end,
extra_cost = function(self, room, use)
local pd = sgs.PindianStruct()
pd = use.from:pindianSelect(use.to:first(), "LuaTianyi")
local d = sgs.QVariant()
d:setValue(pd)
use.from:setTag("luatianyi_pd", d)
end,
on_effect = function(self, effect)
local pd = effect.from:getTag("luatianyi_pd"):toPindian()
effect.from:removeTag("luatianyi_pd")
if pd then
local success = effect.from:pindian(pd)
pd = nil
if success then
effect.to:getRoom():setPlayerFlag(effect.from, "luaTianyiSuccess")
else
effect.to:getRoom():setPlayerCardLimitation(effect.from, "use", "Slash", true)
end
end
end,
}
LuaTianyiVS = sgs.CreateZeroCardViewAsSkill{
name = "LuaTianyi",
view_as = function(self)
local card = LuaTianyiCard:clone()
card:setShowSkill(self:objectName())
card:setSkillName(self:objectName())
return card
end,
enabled_at_play = function(self, player)
return not player:hasUsed("#LuaTianyiCard") and not player:isKongcheng()
end,
}
LuaTianyiTargetMod = sgs.CreateTargetModSkill{
name = "#LuaTianyiTargetMod",
pattern = "Slash",
residue_func = function(self, from, card)
if from:hasFlag("luaTianyiSuccess") then
return 1
else
return 0
end
end,
distance_limit_func = function(self, from, card)
if from:hasFlag("luaTianyiSuccess") then
return 1000
else
return 0
end
end,
extra_target_func = function(self, from, card)
if from:hasFlag("luaTianyiSuccess") then
return 1
else
return 0
end
end,
}


IP属地:北京17楼2015-04-06 12:38
收起回复
    国战1.1.0
    --鬼才
    LuaGuicai = sgs.CreateTriggerSkill{
    name = "LuaGuicai" ,
    events = {sgs.AskForRetrial} ,
    can_trigger = function(self, event, room, player, data)
    if not player or player:isDead() or not player:hasSkill(self:objectName()) then return false end
    if player:isKongcheng() and player:getHandPile():isEmpty() then
    return "."
    else return self:objectName()
    end
    end,
    on_cost = function(self, event, room, player, data)
    local judge = data:toJudge()
    local room = player:getRoom()
    local prompt_list = {
    "@guicai-card" ,
    judge.who:objectName() ,
    self:objectName() ,
    judge.reason ,
    string.format("%d", judge.card:getEffectiveId())
    }
    local prompt = table.concat(prompt_list, ":")
    local card = room:askForCard(player, ".", prompt,data, sgs.Card_MethodResponse, judge.who, true)
    if card then
    room:broadcastSkillInvoke(self:objectName(), player);
    room:retrial(card, player, judge, self:objectName())
    return true
    else
    return false
    end
    end,
    on_effect = function(self, event, room, player, data)
    local judge = data:toJudge()
    judge:updateResult()
    return false
    end,
    }


    IP属地:北京18楼2015-04-06 13:15
    回复
      能问下askForExchange,有什么变化吗,现在用不了


      IP属地:广东19楼2015-04-06 15:37
      收起回复
        国战1.1.0
        --反馈
        LuaFankui = sgs.CreateTriggerSkill{
        name = "LuaFankui",
        events = {sgs.Damaged},
        can_trigger = function(self, event, room, player, data)
        if not player or player:isDead() or not player:hasSkill(self:objectName()) then return false end
        local damage = data:toDamage()
        if damage.from and not damage.from:isNude() then
        return self:objectName()
        end
        end,
        on_cost = function(self, event, room, player, data)
        local damage = data:toDamage()
        local room = player:getRoom()
        local d = sgs.QVariant()
        d:setValue(damage.from)
        if player:askForSkillInvoke(self:objectName(), d) then
        room:broadcastSkillInvoke(self:objectName(), player)
        room:doAnimate(1, player:objectName(), damage.from:objectName())
        room:notifySkillInvoked(player, self:objectName())
        return true
        end
        end,
        on_effect = function(self, event, room, player, data)
        local damage = data:toDamage()
        local room = player:getRoom()
        local card_id = room:askForCardChosen(player, damage.from, "he", self:objectName())
        room:obtainCard(player, sgs.Sanguosha:getCard(card_id), sgs.CardMoveReason(sgs.CardMoveReason_S_REASON_EXTRACTION, player:objectName(), self:objectName(), ""), false)
        end
        }


        IP属地:北京20楼2015-04-06 23:56
        回复
          国战1.1.0
          --龙胆
          LuaLongdan = sgs.CreateViewAsSkill{
          name = "LuaLongdan" ,
          n = 1 ,
          view_filter = function(self, selected, to_select)
          if #selected > 0 then return false end
          local card = to_select
          local usereason = sgs.Sanguosha:getCurrentCardUseReason()
          if usereason == sgs.CardUseStruct_CARD_USE_REASON_PLAY then
          return card:isKindOf("Jink")
          elseif (usereason == sgs.CardUseStruct_CARD_USE_REASON_RESPONSE) or (usereason == sgs.CardUseStruct_CARD_USE_REASON_RESPONSE_USE) then
          local pattern = sgs.Sanguosha:getCurrentCardUsePattern()
          if pattern == "slash" then
          return card:isKindOf("Jink")
          else
          return card:isKindOf("Slash")
          end
          else
          return false
          end
          end ,
          view_as = function(self, cards)
          if #cards ~= 1 then return nil end
          local originalCard = cards[1]
          if originalCard:isKindOf("Slash") then
          local jink = sgs.Sanguosha:cloneCard("jink", originalCard:getSuit(), originalCard:getNumber())
          jink:addSubcard(originalCard)
          jink:setSkillName(self:objectName())
          jink:setShowSkill(self:objectName())
          return jink
          elseif originalCard:isKindOf("Jink") then
          local slash = sgs.Sanguosha:cloneCard("slash", originalCard:getSuit(), originalCard:getNumber())
          slash:addSubcard(originalCard)
          slash:setSkillName(self:objectName())
          slash:setShowSkill(self:objectName())
          return slash
          else
          return nil
          end
          end ,
          enabled_at_play = function(self, target)
          return sgs.Slash_IsAvailable(target)
          end,
          enabled_at_response = function(self, target, pattern)
          return (pattern == "slash") or (pattern == "jink")
          end,
          }
          --流离
          LuaLiuliCard = sgs.CreateSkillCard{
          name = "LuaLiuliCard" ,
          filter = function(self, targets, to_select, player)
          if #targets > 0 then return false end
          if to_select:hasFlag("LiuliSlashSource") or (to_select == player) then return false end
          local from
          for _, p in sgs.qlist(sgs.Self:getSiblings()) do
          if p:hasFlag("LiuliSlashSource") then
          from = p
          break
          end
          end
          local slash = sgs.Card_Parse(sgs.Self:property("liuli"):toString())
          if from and (not from:canSlash(to_select, slash, false)) then return false end
          local card_id = self:getSubcards():first()
          local range_fix = 0
          if sgs.Self:getWeapon() and (sgs.Self:getWeapon():getId() == card_id) then
          local weapon = sgs.Self:getWeapon():getRealCard():toWeapon()
          range_fix = range_fix + weapon:getRange() - 1
          elseif sgs.Self:getOffensiveHorse() and (sgs.Self:getOffensiveHorse():getId() == card_id) then
          range_fix = range_fix + 1
          end
          return sgs.Self:distanceTo(to_select, range_fix) <= sgs.Self:getAttackRange()
          end,
          on_effect = function(self, effect)
          effect.to:setFlags("LiuliTarget")
          end,
          }
          LuaLiuliVS = sgs.CreateOneCardViewAsSkill{
          name = "LuaLiuli" ,
          response_pattern = "@@LuaLiuli",
          filter_pattern = ".!",
          view_as = function(self, card)
          local liuli_card = LuaLiuliCard:clone()
          liuli_card:addSubcard(card)
          liuli_card:setShowSkill(self:objectName())
          return liuli_card
          end,
          }
          LuaLiuli = sgs.CreateTriggerSkill{
          name = "LuaLiuli",
          events = {sgs.TargetConfirming} ,
          view_as_skill = LuaLiuliVS,
          can_preshow = true ,
          can_trigger = function(self, event, room, player, data)
          if not player or player:isDead() or not player:hasSkill(self:objectName()) then return false end
          local room = player:getRoom()
          local use = data:toCardUse()
          if use.card and use.card:isKindOf("Slash")
          and use.to:contains(player) and player:canDiscard(player,"he") and (room:alivePlayerCount() > 2) then
          local players = room:getOtherPlayers(player)
          players:removeOne(use.from)
          local can_invoke = false
          for _, p in sgs.qlist(players) do
          if use.from:canSlash(p, use.card) and player:inMyAttackRange(p) then
          can_invoke = true
          break
          end
          end
          if can_invoke then return self:objectName() end
          end
          end,
          on_cost = function(self, event, room, player, data)
          local room = player:getRoom()
          local use = data:toCardUse()
          local prompt = "@liuli:" .. use.from:objectName()
          room:setPlayerFlag(use.from, "LiuliSlashSource")
          d = sgs.QVariant()
          d:setValue(use.card)
          player:setTag("liuli-card", d) --for the server (AI)
          room:setPlayerProperty(player, "liuli", sgs.QVariant(use.card:toString())) --for the client (UI)
          local c = room:askForUseCard(player, "@@LuaLiuli", prompt, -1, sgs.Card_MethodDiscard)
          player:removeTag("liuli-card")
          room:setPlayerProperty(player, "liuli", sgs.QVariant())
          room:setPlayerFlag(use.from, "-LiuliSlashSource")
          if c then return true end
          return false
          end,
          on_effect = function(self, event, room, player, data)
          local use = data:toCardUse()
          local players = room:getOtherPlayers(player)
          for _, p in sgs.qlist(players) do
          if p:hasFlag("LiuliTarget") then
          p:setFlags("-LiuliTarget")
          use.to:removeOne(player)
          use.to:append(p)
          room:sortByActionOrder(use.to)
          data:setValue(use)
          room:getThread():trigger(sgs.TargetConfirming, room, p, data)
          return false
          end
          end
          return false
          end,
          }


          IP属地:北京21楼2015-04-07 15:17
          收起回复
            楼上好长啊


            IP属地:广东来自Android客户端22楼2015-04-08 04:12
            回复
              留名


              IP属地:广东来自Android客户端23楼2015-04-09 05:49
              回复
                。。。


                IP属地:广东24楼2015-04-11 18:00
                回复
                  前排啪数神


                  IP属地:江苏来自Android客户端25楼2015-04-17 06:34
                  回复
                    留名,


                    IP属地:湖北26楼2015-04-18 20:27
                    回复



                      IP属地:广东27楼2015-06-27 13:57
                      回复