cataclysmdda吧 关注:20,117贴子:322,231
上班摸鱼研究怎么让弓箭使用更顺手,翻了翻json没有关键信息,去看了下c++代码
尽管有关弓箭的更新一直在持续,上个月罗马车载弩炮刚刚被添加
然而弓箭的核心bug/feature在代码里已经挂起3年而未被解决了,注释写着:等这两个问题解决了就可以删掉这行


IP属地:陕西1楼2024-03-11 18:51回复
    主要这东西平衡有点难,要不就是强到和枪械扳手腕,要不就是弱到比不过扔石头


    IP属地:广东来自Android客户端2楼2024-03-11 20:40
    收起回复
      屎山代码是这样


      IP属地:广东来自Android客户端3楼2024-03-11 20:47
      收起回复
        大前提:在CDDA,当你使用枪械/弓弩/投石索进行射击时,你必须持有一把有子弹的远程武器,否则会退出射击模式。
        在这个背景下,CDDA里的弓和投石索等武器属于一类,拥有RELOAD_AND_SHOOT(装填并射击,以下简称ras)这个ras。
        对于普通的枪械以及弩,它们使用弹仓装填弹药(不论是否可拆卸),需要预装填,没有弹夹/子弹时会提示空枪,不进行任何消耗回合数的行动,如果按f进行射击预瞄动作后立刻退出射击模式,同样不消耗回合数。
        而有ras标签的武器则不同,原则上在非射击模式时,你手上的弓箭或投石索应当是空的,且对于PC,你不能预装填这种武器(尽管它们也有“弹仓”属性,所以在一定条件下,非射击模式也可以保持装填,比如NPC就可以拿着装填的弓行动)。
        而基于大前提,处于射击模式时你手上不能是一把空枪,所以,当PC身上或周围地块有弹药可用,按下f,ras武器会同时进行装填及预瞄两个操作;进一步,在退出射击模式时,ras武器又要执行一个清空武器的操作。
        在这个进入又退出射击模式的过程中,涉及了三个可能消耗回合数的行动,取出弹药,装填弹药,清空武器,那么实际耗时是怎样的呢?
        如果在预瞄之后,至少点过一次.键进行实际瞄准,那么当你退出射击状态时,这部分用于瞄准的时间会被消耗,而取出弹药,装填弹药和清空武器的用时都不会被计算;
        重点来了,如果我一次也没有瞄准,预瞄之后立刻退出呢?不幸的灾难来了,清空武器仍然不耗时,也没有消耗瞄准用时,但取出弹药及装填弹药的时间不会被程序清零。
        极端的情况下,比如把箭放在基础耗时1000的绳圈里,使用装填耗时50的弓执行一次预瞄并退出的操作,将会凭空消耗玩家1054及以上的行动点!


        IP属地:陕西4楼2024-03-11 21:33
        收起回复
          “凭空”是重点:
          取出弹药,装填弹药,清空武器,如果没有最后一步操作,让箭搭在弓上不动,那么计算取出弹药及装填弹药的时间在逻辑上仍然是不矛盾的。
          有没有办法达到这个效果呢?答案是有,如果武器有NO_UNLOAD标签,那么在f预瞄抽箭搭弓之后,退出射击模式并不会清空武器,玩家将和NPC一样使用弓箭——此时ras武器将和普通枪械一样,f预瞄不再消耗行动点。
          当然这不是完全没有代价的:有NO_UNLOAD标签的道具无法被清空操作清空,只要你不射击,这箭就挂在弓上了。一般来说这不算太大的代价,不过如果你是个爆裂箭射手,情况可能就比较尴尬了。


          IP属地:陕西5楼2024-03-11 21:59
          回复
            能不能再贪心一点,既要正常的清空武器的能力,又要standby的射击模式呢?
            答案还是yes,使用现成的功能,不进行硬编程也能达到我们想要的效果。
            现代狩猎复合弓是一把可以变形的武器,可以在标准、高拉力、低拉力三种形态下切换。
            这三种形态其实是属性继承的三个不同道具,拥有各自的物品id。
            知道这一点,就有了操作空间了:我们给武器的一种形态加上NO_UNLOAD,另一种不加,当处于前一种形态时,武器以类似普通枪械的方式工作,而在后一种形态下,则拥有正常的弓切换弹药的能力。
            首先把箭搭在弦上,执行使用命令切换形态后,武器内装填的弹药没有消失,但是可以正常清空弹药了。


            IP属地:陕西6楼2024-03-11 22:09
            回复




              IP属地:陕西7楼2024-03-11 22:10
              回复
                不错的解决方法,但是感觉也只是绕过了问题🤔


                IP属地:广东来自Android客户端8楼2024-03-11 22:55
                收起回复
                  我长期用大魔法德鲁伊法术制作的木弓,从来没意识到这个问题


                  IP属地:江西来自Android客户端9楼2024-03-11 23:43
                  收起回复
                    改成敞口水容器一样,不拿着它内容物就会洒出来,弓拿着时可以预装填,但是放背包或者扔掉箭就会掉落


                    IP属地:上海来自iPhone客户端10楼2024-03-12 07:42
                    收起回复
                      太硬核了,点赞插眼


                      IP属地:安徽来自Android客户端11楼2024-03-12 13:10
                      回复
                        测试了下,CBN那边的弓没有bug


                        IP属地:陕西12楼2024-03-12 19:22
                        回复
                          很厉害,不懂编程的我看不懂,但我喜欢用弓所以十分感谢。


                          IP属地:新疆来自Android客户端13楼2024-03-12 20:03
                          回复
                            哦对了,提醒一下,弓箭相关的PR可能极难通过


                            IP属地:广东来自Android客户端14楼2024-03-13 15:24
                            收起回复


                              修改后的弓箭等RAS武器将在瞄准界面里显示实际射击用时(装填+射击),如图中的投石杖,从地上装填石头需要154点行动力,0等级0专长的基础射击速度220行动力,合计即为374行动力
                              退出瞄准界面不会消耗装填所需的这154点行动力,也不会重置瞄准进度,点击射击后才会和射击用时一并消耗
                              在重新瞄准函数里解锁了RAS武器,现在射击后也将和普通远程武器一样,如果发现有效目标将自动进入瞄准状态


                              IP属地:陕西15楼2024-04-28 09:25
                              回复