仙五前修改吧 关注:167贴子:15,450

今天翻到大港两三年前发的仙术咏唱,感觉很不错,我也山寨了一个

只看楼主收藏回复

五前的...但是毛病很多啊,我用了很多WaitForBattleUpdate和skip,似乎有些副作用,当时大港是怎么确保活动ID的?
不过关于屏蔽玩家操控,我找到一个办法,只要给玩家添加冻结/昏睡/混乱之一,这三种状态会剥夺玩家操控权,但仍然会轮到该ID,狂点鼠标,R键什么的,貌似按不出来。所以,必须舍弃这其中一种状态来做这个功能。这里面用昏睡来做最好,冻结有冰冻特效去不掉显然不合适,混乱则有一个Atk的行动,我怕顺序意外会有问题。


IP属地:上海来自Android客户端1楼2015-03-25 22:09回复
    昏睡有可能被1500阴阳修为干扰,需注意
    至于大港的强制控制,我猜大概是addtimer(0 吧


    IP属地:上海来自Android客户端2楼2015-03-25 22:30
    收起回复
      waitforbattleupdate
      这个用来控制玩家,“真是绝佳的函数”


      IP属地:上海来自Android客户端3楼2015-03-25 22:44
      收起回复
        还有一点很大的疑问,强行用AI控制玩家ID毕竟是一种严重非法的行为,无法严格控制这个时机,会不会受到电脑配置的影响。不加昏睡,会不会低配时给玩家操控权的间隙就长;加了昏睡,会不会低配电脑没等到AI接管ID就被系统跳过了。


        IP属地:上海来自Android客户端4楼2015-03-26 07:37
        回复
          混乱、昏睡我当时试过,效果好像也不太好
          addtimer(0,XXXX)不间断循环优先级太低,遇到wait就不动了(当然CALL也一样),不过在没有快捷键干扰的情况下还是可以的
          X5除了快捷键干扰,就是AID和AMODEL不一致的问题


          5楼2015-03-26 08:46
          收起回复
            这种老物也会被翻出来


            6楼2015-03-26 08:48
            回复
              AID≠AMODEL这种情况在5Q好像很常见,自动战斗出现的“假连击”就是一例


              7楼2015-03-26 08:51
              收起回复
                客户端不知道能不能发gif


                IP属地:上海来自Android客户端8楼2015-03-26 09:21
                收起回复


                  11楼2015-03-26 09:31
                  收起回复
                    昏睡的玩家,套上反震,受到菜刀,会解除昏睡吗


                    IP属地:上海来自Android客户端12楼2015-03-26 10:57
                    收起回复
                      如果昏睡真的有效,可以把它改成“催眠”:不仅仅是失去控制权,还可能被系统控制


                      13楼2015-03-26 11:34
                      收起回复
                        timer0自循环的一个问题是一回合里所有的操作只应该是有限次,这个比较麻烦


                        14楼2015-03-26 20:21
                        回复
                          测试结果好奇怪
                          我刚才调整了一下
                          我把WaitUpdate那些全部改到了技能脚本里,原来是在AI脚本里的。现在技能脚本里的加血居然不延迟了。
                          A 1 B
                          1代表应该释放吟唱后技能的瑾轩;A表示他前面的ID,B表示他后面一位
                          写法1、
                          global.WaitForBattleSEEnd(183)
                          if nextid==1 and battle.CheckPlayerStat(1,157)==1 then
                          global.WaitForBattleUpdate()
                          battle.Skip()
                          player.RemoveStat(0,1,157)
                          battle.MagicToNpc(id,25082,1)
                          end
                          此情况,A完毕,1被跳过,活动ID显示B,但表观正常,是1做出了施法动作;同时,通过调整仙攻,得出吟唱技能确实是1放出的。行动完以后,B再次执行了他自己的AI。表面看起来整个流程并没有不对。
                          写法2、skip和update换了下顺序
                          battle.Skip()
                          global.WaitForBattleUpdate()
                          此情况,未发现和写法1有区别,完全相同。
                          写法3、把update搬到了最后
                          global.WaitForBattleSEEnd(183)
                          if nextid==1 and battle.CheckPlayerStat(1,157)==1 then
                          battle.Skip()
                          player.RemoveStat(0,1,157)
                          battle.MagicToNpc(id,25082,1)
                          global.WaitForBattleUpdate()
                          end
                          此情况,A完毕,1被跳过,活动ID显示B,表观也不对了,是B做出的施法动作,根据伤害大小得出吟唱技能是B放出的……但是行动完以后,B还是再次执行了自己的AI。
                          写法4、把battle.Skip()去掉了
                          global.WaitForBattleSEEnd(183)
                          if nextid==1 and battle.CheckPlayerStat(1,157)==1 then
                          global.WaitForBattleUpdate()
                          player.RemoveStat(0,1,157)
                          battle.MagicToNpc(id,25082,1)
                          end
                          此情况,居然和写法1结果也相同,也就是说skip变成了无用的语句,但是昨天不行,难道就因为从AI改到skill里来写的原因??
                          写法5写法6,去掉global.WaitForBattleUpdate()、以及把skip和update都去掉。
                          global.WaitForBattleSEEnd(183)
                          if nextid==1 and battle.CheckPlayerStat(1,157)==1 then
                          (battle.Skip())
                          player.RemoveStat(0,1,157)
                          battle.MagicToNpc(id,25082,1)
                          end
                          这是令我最诧异的结果,这两种也是一样的(所以关键的是update?)
                          ID1直接被跳过了,B执行它自己的内容,按理说没有update应该就跟他无关了,seend后面再有magicto应该id不变继续活动才对,一时间实在是不能理解。。。


                          IP属地:上海16楼2015-03-26 21:53
                          收起回复
                            还有一个现象
                            我发现执行global.WaitForBattleUpdate()的时候,npc备战动作会被复位到第1帧重新开始播放。还没有注意过是必然现象还是有条件现象。


                            IP属地:上海17楼2015-03-26 22:01
                            收起回复
                              rrun call timer都是技能脚本,不是AI


                              18楼2015-03-26 22:58
                              回复