魔兽地图编辑器吧 关注:65,696贴子:3,846,054
  • 11回复贴,共1

用暴雪BlzAPI做魔龙枪,差点没被暴雪程序员气死

只看楼主收藏回复

魔龙枪的效果是增加单位射程。不想用科技,毕竟Dota还有双英雄等奇奇怪怪的模式,会影响所有拥有此科技的单位。JAPI不在考虑范围内,地图要在重制版单机运行的。那么如果用官方API,用的函数应该是BlzSetUnitWeaponRealField。


IP属地:上海1楼2020-06-13 10:40回复
    用变身


    2楼2020-06-13 10:43
    收起回复
      2026-02-07 02:56:13
      广告
      不感兴趣
      开通SVIP免广告
      本以为这个挺简单,不就是这样吗?

      注意从1.31.1之后所有新函数参数中的下标都是从0开始的(甚至包括等级,这里一万句脏话)
      结果:

      咦?怎么没用?我的第一反应是,哦,这些实例函数有些域不能更改也是正常的,于是就没有管他。
      这是发生在一星期前的事情。


      IP属地:上海3楼2020-06-13 10:46
      回复
        今天又回头搜一些增加射程的帖子,有的人提到JAPI竟然可以做到。那怎么就会有JAPI做得到而暴雪BlzAPI做不到的事情呢!会不会是1.31.0残留的Set和Get下标不一样的BUG?于是我随手一试:

        结果:

        果然如此,成功更改!
        由于物品掉落/出售那边减射程的代码还没有改,我手贱捡起放下捡起放下这个物品,看看会发生什么:

        果然一直增加......
        停!好像有什么不对,为什么第一次增加了一百多,第二次两百多,第四次直接增加到2500去了。


        IP属地:上海4楼2020-06-13 11:02
        回复
          复查了一下代码,没写错。
          于是计算了一下射程增加情况,680-550=130,940-680=260,1460-940=520,2500-1460=1040
          等比数列啊,魔兽还有这功能!
          得查一下,我这里传进去的参数是不是不对:

          确实没有问题,第一次680,第二次810,第三次940...


          IP属地:上海5楼2020-06-13 11:09
          回复
            仔细想了一下,从第二次开始,哪个940是怎么来的呢,明明传入的是810啊?
            940肯定来自680+260,那260哪里来的呢?
            真相只有一个,那就是260=810-550.
            原来你虽然传进去的是绝对值810,但是内部先计算了相对值,这里计算相对值又错误地用了武器1的值550,于是相对值=810-550=+260,然后让武器0增加了射程260,最后变成了940.
            这里用冰女验证了一下我的想法:

            虽然冰女只用武器0,但是武器1是有值的,她两个武器的射程又是不同的。
            830-600 = 230 = (600+130)-500


            IP属地:上海6楼2020-06-13 11:19
            回复
              那么好办了,我需要把对武器0的更新同步到武器1当中,特别是在Set之前。
              Set函数如果传入1改的实际上是武器0,那么改武器1传入2不就行了。于是,我这样写:

              结果可能你们已经猜到了,暴雪果然是一家惊喜连连的公司:

              没用!
              要么是做了入参校验,要么是在内部尝试获取武器2的时候异常抓住了直接返回。
              暴雪程序员你出来,我绝对不打死你。


              IP属地:上海7楼2020-06-13 11:33
              回复
                现在只能一不做二不休,又不是没办法了。这样实现反而更简单:

                测试了一下,perfect!
                其实对大部分单位而言传入的射程都是130或者其他错误的值。但是管他呢,it works. 而且和科技完美叠加。
                如果你以后看到了这样的代码,它就是对的,请不要感到奇怪;如果你想问怎么改武器1的值,那么这个艰巨而光荣的任务就交给你了!


                IP属地:上海9楼2020-06-13 12:01
                回复
                  2026-02-07 02:50:13
                  广告
                  不感兴趣
                  开通SVIP免广告
                  0是1 1是2 set是add


                  IP属地:浙江10楼2020-06-13 15:28
                  收起回复