太阳神三国杀lua吧 关注:2,644贴子:73,512
  • 4回复贴,共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回复
    小白又有问题了- -上次大神教会我怎么获得一名指定角色的技能
    现在我想知道如何把全场角色的技能都加入技能列表?
    这次我想编一个技能是:(锁定技)你拥有场上存活角色的锁定技.....
    我试过用 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
    收起回复
      2026-02-20 21:02:30
      广告
      不感兴趣
      开通SVIP免广告
      还是没成功 准备先实现 [[ 将全场的锁定技都加入技能列表然后获得其中之一项]] 这种效果
      所以从大神原来的代码改成现在这样..
      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
      回复
        这个技能已经成功完成了....不过其实我还是没弄清楚断肠的是怎么掉技能的 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
          收起回复