仙五前修改吧 关注:168贴子:15,453
  • 6回复贴,共1

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

取消只看楼主收藏回复

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


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


    IP属地:上海来自Android客户端4楼2015-03-26 07:37
    回复
      昏睡的玩家,套上反震,受到菜刀,会解除昏睡吗


      IP属地:上海来自Android客户端12楼2015-03-26 10:57
      收起回复
        测试结果好奇怪
        我刚才调整了一下
        我把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
          收起回复

            global.Print("攻击的目标== "..id)
            global.Print("ActingNpcID== "..battle.GetActingNpcID())
            global.Print("CurrentNpcID== "..npc.GetCurrentID())
            global.Print("ActingPlayerID== "..battle.GetActingPlayerID())
            global.Print("NextID== "..battle.GetNext())
            有点意思,ActingNpcID和CurrentID不是一个东西。可惜就没有id1的活动迹象啊...图中技能明明是1放出的


            IP属地:上海21楼2015-03-27 19:48
            收起回复

              无尽的山寨


              IP属地:上海25楼2015-04-18 22:07
              收起回复