太阳神三国杀lua吧 关注:2,643贴子:73,493
  • 4回复贴,共1页

【求助】国战2.1.0 获得技能问题

只看楼主收藏回复

我试过了三个函数:
room:acquireSkill(player, skill:objectName(), true, false)
player:acquireSkill(skill:objectName(), false)
player:addSkill(skill:objectName(), false)
前两个函数添加的技能可以正常使用。但如果被张任移除武将牌后,技能按钮消失却仍然能触发,鼠标移至副将牌上仍会显示出这个技能。貌似与张任有关的removeGeneral函数是不会移除deputy_acquired_skills中的技能。
第三个函数添加的技能需得被暗置后亮将才会显示技能按钮,更麻烦的是,好像只有技能卡可以使用,触发技无法响应该响应的事件。查不出原因。
有没有大神救援啊


IP属地:福建1楼2018-02-21 17:19回复
    这个得查源码才能知道吧…
    addSkill我只在给角色分配技能而不是游戏中加技能时见到
    话说国战似乎已经凉了…


    IP属地:浙江来自手机贴吧2楼2018-02-21 23:58
    回复
      2026-09-25 14:01:43
      广告
      不感兴趣
      开通SVIP免广告
      翻找了大部分源码,终于在src/server/roomthread.cpp中看到了希望
      关联函数是:【以下的定义在头文件(src/server/roomthread.h)中】
      void addTriggerSkill(const TriggerSkill *skill);
      void addPlayerSkills(ServerPlayer *player, bool invoke_game_start = false);
      addTriggerSkill是根据触发技的event类型,将触发技添加到技能列表中(skill_table[triggerEvent]),这个列表在其头文件中的定义为:QList<const TriggerSkill *> skill_table[NumOfEvents]。此外,隐藏的关联技能(relatedSkill)也会被添加进去。
      addPlayerSkills并不是直译“添加玩家技能”,而是将玩家所有的包含GameStart事件的触发技触发一次GameStart事件。比如我获得身份版左慈的化身的话就需要这个函数了。至于为什么必须将所有的游戏开始的触发技一并触发尚不清楚,源码中注释:We should make someone trigger a whole GameStart event instead of trigger a skill only.(我们应当触发一个全局的GameStart事件而不是只有一个技能,,,英语有点差见谅)
      最后补充一下,addTriggerSkill函数即可解决玩家addskill后的触发技不能触发的问题,下面是部分代码:
      local thread = room:getThread()
      if skill:inherits("TriggerSkill") then
      local tr = sgs.Sanguosha:getTriggerSkill(skill:objectName())--获得skill的触发技对象
      thread:addTriggerSkill(tr)--由于参数必须是TriggerSkill类型,lua中又不存在强制类型转换,所以就这样写了
      end
      player:addSkill(skill:objectName(), false)
      --thread:addPlayerSkills(player, true)--如果skill是包含GameStart事件的触发技就加上这句吧
      或许我还能做一个lua版的变更副将了
      可能国战快凉透了,但我还是来补上我的解决方法,万一有人会像我一样比较喜欢国战呢


      IP属地:福建3楼2018-02-22 02:31
      回复