太阳神三国杀lua吧 关注:2,644贴子:73,514
  • 59回复贴,共1

【求助】求帮助看看这个技能怎样只在自己回合发动

只看楼主收藏回复

新手想编这么一个技能:你的回合开始时,可以选择场上一名角色交给其两张牌并获得该角色的一个技能(非主公,限定)直到回合结束…
然后想尝试把仁德和夏侯石孝德直接融合起来- -失败了
最后觉得还是循序渐进 先用孝德改出来这样的技能:你的回合开始时,可以选择场上一名角色获得该角色的一个技能(非主公,限定)直到回合结束…
这个代码是这样的(其实和孝德基本一样
function addSkillList(general)
if not general then return nil end
local skill_list = {}
for _, skill in sgs.qlist(general:getSkillList()) do
if skill:isVisible() and not skill:isLordSkill() and skill:getFrequency() ~= sgs.Skill_Wake then
table.insert(skill_list, skill:objectName())
end
end
return table.concat(skill_list, "+")
end
luatieqian = sgs.CreateTriggerSkill{
name = "luatieqian" ,
events = {sgs.EventPhaseStart} ,
frequency = sgs.Skill_NotFrequent,
on_trigger = function(self, event, player, data)
if player:getPhase() == sgs.Player_Start then
local room = player:getRoom()
local caogang = room:findPlayerBySkillName(self:objectName())
if not caogang or caogang:getTag("luatieqianSkill"):toString() ~= "" then return false end
local skill_list = caogang:getTag("luatieqianVictimSkills"):toString():split("+")
if #skill_list == 0 then return false end
if not room:askForSkillInvoke(caogang, self:objectName()) then return false end
local skill_name = room:askForChoice(caogang, self:objectName(), table.concat(skill_list, "+"))
caogang:setTag("luatieqianSkill", sgs.QVariant(skill_name))
room:acquireSkill(caogang, skill_name)
return false
elsereturn false end
end ,
can_trigger = function(self, target)
return target ~= nil
end ,
}
luatieqianEx = sgs.CreateTriggerSkill{
name = "#luatieqian" ,
events = {sgs.EventPhaseChanging, sgs.EventLoseSkill, sgs.TurnStart} ,
on_trigger = function(self, event, player, data)
local room = player:getRoom()
if event == sgs.EventPhaseChanging then
local change = data:toPhaseChange()
if change.to == sgs.Player_NotActive then
local skill_name = player:getTag("luatieqianSkill"):toString()
if skill_name ~= "" then
room:detachSkillFromPlayer(player, skill_name, false, true)
player:setTag("luatieqianSkill", sgs.QVariant())
end
end
elseif event == sgs.EventLoseSkill and data:toString() == sef:objectName() then
local skill_name = player:getTag("luatieqianSkill"):toString()
if skill_name ~= "" then
room:detachSkillFromPlayer(player, skill_name, false, true)
player:setTag("luatieqianSkill", sgs.QVariant())
end
elseif event == sgs.TurnStart then
local room = player:getRoom()
targets = room:getAlivePlayers()
local to = room:askForPlayerChosen(player, targets, self:objectName(), "LuaZhiyan-invoke", true, true)--这句指定角色的代码是我从虞翻的直言技能里直接copy来的..虽然能用但是我还是不理解里面的"LuaZhiyan-invoke"是起什么作用..求大神顺便解释解释..
local skill_list = {}
table.insert(skill_list, addSkillList(to:getGeneral()))
table.insert(skill_list, addSkillList(to:getGeneral2()))
player:setTag("luatieqianVictimSkills", sgs.QVariant(table.concat(skill_list, "+")))
end
return false
end ,
can_trigger = function(self, target)
return target ~= nil
end,
}
caogang:addSkill(luatieqian)
caogang:addSkill(luatieqianEx)
extension:insertRelatedSkills("luacaoge", "#luatieqian")
的确能够指定角色获得他的技能了....
然后发现问题来了- -
...指定角色的luatieqianEx技能部分的确是只在自己的回合发动...
但是获得技能的luatieqian技能部分就在所有角色的回合开始都会询问我一遍..除非我选择了一个技能获得后才不会继续询问我....
这样子这个技能效果就变成了(你的回合开始前可以指定一名角色 ;场上一名角色回合开始时,你可以获得指定角色的一个技能指定你的回合结束)
求指导如何让这个技能只在自己的回合发动..求大神教育....
@NonesXX @最高最帅的65


IP属地:湖北1楼2015-11-01 00:43回复
    感觉这个技能不用写的这么复杂


    IP属地:广东来自Android客户端2楼2015-11-01 08:41
    收起回复
      2026-02-21 00:47:47
      广告
      不感兴趣
      开通SVIP免广告
      function isLordSkillOrWakeSkillOrLimitedSkill(skill,isWakeSkill,isLordSkill,isLimitedSkill)
      if isWakeSkill and skill:getFrequency() == sgs.Skill_Wake then
      return true
      elseif isLordSkill and skill:isLordSkill() then
      return true
      elseif isLimitedSkill and skill:getFrequency() == sgs.Skill_Limited then
      return true
      end
      return false
      end
      LuaTieqian = sgs.CreateTriggerSkill{
      name = "LuaTieqian" ,
      events = {sgs.EventPhaseStart} ,
      on_trigger = function(self, event, player, data)
      local room = player:getRoom()
      if player:getPhase() == sgs.Player_Start then
      room:setTag("LuaTieqian-AddSkill",sgs.QVariant(""))
      if room:askForSkillInvoke(player,self:objectName(),data) then
      local target = room:askForPlayerChosen(player,room:getOtherPlayers(player),self:objectName(),"@LuaTieqian-PlayerChosen")
      if target then
      local skills = target:getVisibleSkillList()
      local skill_list = {}
      for _,skill in sgs.qlist(skills) do
      if not isLordSkillOrWakeSkillOrLimitedSkill(skill,true,true,true) then
      table.insert(skill_list,skill:objectName())
      end
      end
      local choice = ""
      if #skill_list > 0 then
      choice = room:askForChoice(player,self:objectName(),table.concat(skill_list,"+"))
      end
      if choice ~= "" then
      room:setTag("LuaTieqian-AddSkill",sgs.QVariant(choice))
      room:acquireSkill(player,choice)
      end
      end
      end
      elseif player:getPhase() == sgs.Player_Finish then
      if room:getTag("LuaTieqian-AddSkill"):toString() ~= "" then
      room:detachSkillFromPlayer(player,room:getTag("LuaTieqian-AddSkill"):toString())
      end
      end
      end
      }
      --0926验证通过-- @ganquan998 + 防吞


      IP属地:广东3楼2015-11-01 10:22
      收起回复
        还有问题么


        IP属地:北京4楼2015-11-01 12:05
        收起回复
          小白又有问题了- -上次大神教会我怎么获得一名指定角色的技能
          现在我想知道如何把全场角色的技能都加入技能列表?
          这次我想编一个技能是:(锁定技)你拥有场上存活角色的锁定技.....
          我试过用 local target = room:getAlivePlayers()
          local skills = target:getVisibleSkillList()..
          .........
          还有
          for _, _player in sgs.qlist(players) do
          if _player:isAlive() then
          local skills = _player:getVisibleSkillList()
          .................
          然而都没有效果 ...
          都是照猫画虎从大神的代码上改的- -
          求指导 如何选定全场存活角色?这个技能能实现么...?
          @最高最帅的65


          IP属地:湖北5楼2015-11-07 00:38
          收起回复
            还是没成功 准备先实现 [[ 将全场的锁定技都加入技能列表然后获得其中之一项]] 这种效果
            所以从大神原来的代码改成现在这样..
            function isCompulsorySkillk(skill,isCompulsorySkill)
            if isCompulsorySkill and skill:getFrequency() == sgs.Skill_Compulsory then
            return false
            end
            return true
            end
            LuaRensuo= sgs.CreateTriggerSkill{
            name = "LuaRensuo" ,
            events = {sgs.EventPhaseStart} ,
            on_trigger = function(self, event, player, data)
            local room = player:getRoom()
            if player:getPhase() == sgs.Player_Start then
            if room:askForSkillInvoke(player,self:objectName(),data) then
            local targets=room:getOtherPlayers()
            local skill_list = {}
            for _, _player in sgs.qlist(targets) do
            local skills = _player:getVisibleSkillList()
            for _,skill in sgs.qlist(skills) do
            if not isCompulsorySkillk(skill,true) then
            table.insert(skill_list,skill:objectName())
            end
            end
            end
            local choice = ""
            if #skill_list > 0 then
            choice = room:askForChoice(player,self:objectName(),table.concat(skill_list,"+"))
            end
            if choice ~= "" then
            room:acquireSkill(player,choice)
            end
            end
            end
            end,
            priority = -2
            }
            但是一直没有效果- -不知道怎么办了0 0
            @最高最帅的65 @youko1316


            IP属地:湖北6楼2015-11-07 20:37
            回复
              getOtherPlayers里面什么都没填


              IP属地:北京7楼2015-11-07 20:47
              收起回复
                LuaRensuo= sgs.CreateTriggerSkill{
                name = "LuaRensuo" ,
                frequency = sgs.Skill_Compulsory,
                events = {sgs.GameStart} ,
                on_trigger = function(self, event, player, data)
                local room = player:getRoom()
                local targets = room:getOtherPlayers(player)
                for _, _player in sgs.qlist(targets) do
                local skills = _player:getVisibleSkillList()
                for _,skill in sgs.qlist(skills) do
                if skill:getFrequency() == sgs.Skill_Compulsory then
                room:acquireSkill(player,skill:objectName())
                end
                end
                end
                end
                }
                这才是真正的游戏开始获得所有锁定技(还能继续精简吗)


                IP属地:广东8楼2015-11-07 21:15
                收起回复
                  2026-02-21 00:41:47
                  广告
                  不感兴趣
                  开通SVIP免广告
                  LuaRensuo= sgs.CreateTriggerSkill{
                  name = "LuaRensuo" ,
                  frequency = sgs.Skill_Compulsory,
                  events = {sgs.GameStart} ,
                  on_trigger = function(self, event, player, data)
                  local room = player:getRoom()
                  for _, _player in sgs.qlist(room:getOtherPlayers(player)) do
                  for _,skill in sgs.qlist(_player:getVisibleSkillList()) do
                  if skill:getFrequency() == sgs.Skill_Compulsory then
                  room:acquireSkill(player,skill:objectName())
                  end
                  end
                  end
                  end
                  }
                  @最高最帅的65


                  IP属地:北京9楼2015-11-07 21:46
                  收起回复
                    这个技能已经成功完成了....不过其实我还是没弄清楚断肠的是怎么掉技能的 if skill:getLocation() == sgs.Skill_Right then 比如里面的这句我就不懂是什么意思
                    不过我换了个思路 直接抄上断肠的代码 把掉技能的对象改成自己 其他角色死亡时我就先把所有技能都掉了- -然后再用acquireSkill瞬间重新获得回来....
                    然后就用这种很离奇的方法成功了
                    @最高最帅的65 @youko1316 谢谢大神帮忙完成^_^


                    IP属地:湖北10楼2015-11-07 23:13
                    收起回复
                      我又来问问题了...这次我想让我使用的【铁索连环】能多指定一个目标- -不会求解...
                      LuaTiansuoEx = sgs.CreateTargetModSkill{
                      name = "#LuaTiansuoEx",
                      frequency = sgs.Skill_Compulsory ,
                      pattern = "iron_chain",
                      extra_target_func = function(self, player)
                      if player:hasSkill(self:objectName()) then
                      return 2
                      end
                      end,
                      }
                      以上为我看教程试水的代码.
                      然而并没有作用...
                      @最高最帅的65 @youko1316
                      继续求大神带飞


                      IP属地:湖北11楼2015-11-09 22:05
                      收起回复