赛博朋克2077吧 关注:484,698贴子:5,174,826

解说枪械操控性和击中反应

只看楼主收藏回复

枪械状态栏里的操控性是什么意思?一般理解操控性有后坐力、子弹散布,那它显示的数值是什么意思?其他状态都很好理解,射速是每秒多少发,伤害是单发多少伤害,射程是多少米,但这个操控性的数值就理解不了是什么意思了,子弹偏离准心多少?后坐力抬头多少?也可能是两者综合的一个数值?总之从我玩这游戏开始这个疑问就一直卡在我脑袋里。
有一次装mod看到游戏文件夹 tools\ 工具,是啥工具啊?点开,redmod\ 好像是官方的mod工具来着?继续点开,下面有三个文件夹 bin\ 通常是二进制文件不管它;tweaks\ 好像是游戏内的数据库?控制台mod里看到过,点开,确实是游戏内的数据库,而且文本编辑器就可以打开,布局与控制台mod中的不同,也更方便检索;还有一个 scripts\ 脚本文件,啥脚本?点开——好家伙,这不是游戏的源码吗?有这玩意儿一大堆疑问不就可以解决了?兴奋地仔细查看,用的什么语言不认识,我本身也不会多少编程语言,但好在能看懂,没见过的语法靠猜问题不大,总之难掩兴奋之情。后面继续使用才发现不是所有游戏机制都写在这些脚本里,可能其他一些是游戏引擎直接处理了,但还是帮助很大。
-
上面是前言,这篇帖子会解释枪械状态栏中的操控性数值是怎么来的,再附带一个武器隐藏数值击中反应的解释,并不是这个击中反应有多重要可以提升多少伤害,只是它不看脚本的话很难知道是如何作用的,并且和一些不知道原因的现象有关,比如霰弹枪插件给我跪下为什么可以秒杀敌人。


IP属地:上海1楼2024-09-17 22:04回复
    操控性分为三个部分:瞄准摆动、子弹散布和后坐力。这三个部分脚本里没写是怎么作用的,需要在游戏中用控制台修改数据库来测试。
    -
    瞄准摆动
    -
    盲射时准心是没有摆动的,只有瞄准时才会摆动。与摆动相关的属性在redmod中的 sway_stats.tweak 有定义和注释,路径是:\tools\redmod\tweaks\base\gameplay\static_data\database\stats\weapon_stats\sway_stats.tweak
    -
    瞄准摆动的基本运动是从是从视线中心移动到边缘→边缘移动到中心→从中心移动到反向的边缘→反向的边缘移动到中心,不断循环。
    -

    SwaySideMinimumAngleDistance
    SwaySideMaximumAngleDistance
    摆动距离的最大值与最小值,数值的单位为度。取值使用最大值与最小值之间的随机数,每经过中心变化一次。
    可以当成从眼睛出发的一个圆锥体,角度越小,摆动距离就越小,瞄准就越稳定。
    会随武器等阶提高而减小,每一阶减小5%,五阶可以减小20%。
    -
    SwayTraversalTime
    摆动时间,从中心到边缘,或者从边缘到中心需要的时间,单位秒。
    会随武器等阶提高而减小,每一阶减小5%,五阶可以减小20%。正常来说增加摆动时间可以让瞄准越稳定,不确定设置为减小是否为bug。
    -

    SwaySideTopAngleLimit
    SwaySideBottomAngleLimit
    摆动角度,摆动线与水平线的夹角。
    瞄准时如果向上摆就看 TopAngle,向下摆看 BottomAngle,但所有武器的设定值上下都一样。
    在0到设定值之间取随机值,重新瞄准前不会变化。
    -

    SwayCurvatureMinimumFactor
    SwayCurvatureMaximumFactor
    边缘曲线大小,设定该值后相当于在边缘有一个圆,摆动会沿着这个圆的一部分移动。
    取值范围0到1,是一个系数,没单位,不知道与什么数相乘。
    -

    SwayCenterMaximumAngleOffset
    中心偏移,摆动的中心可能不是视线的中心,偏离多少取0到该属性之间的随机值,单位为度。每经过一次变化一次。
    -
    SwayInitialOffsetRandomFactor
    初始偏移量,设定该值后摆动不从中心出发。
    所有的枪械都是0,也就是都从中心出发。
    -

    SwaySideStepChangeMinimumFactor
    SwaySideStepChangeMaximumFactor
    摆动角度变化系数,设定该值后经过中心可能会改变摆动的角度。取值范围0到1,具体角度为该系数乘 SwaySideTopAngleLimit 或者 SwaySideBottomAngleLimit。一次瞄准中似乎不会变化,但方向不固定。
    -
    SwayResetOnAimStart
    字面意思是在开始瞄准时重置摆动,但修改了没感觉出效果,不知道具体作用。
    -
    SwayStartDelay
    摆动延迟,开始瞄准后经过设定的秒数后才开始摆动,然而最大值只到1。
    -
    SwayStartBlendTime
    摆动时间延长,在设定的秒数内延长摆动时间(SwayTraversalTime),但延长效果是一条曲线,可能开始可以减慢到10%,后面效果越来越差。
    -
    狙击枪瞄准镜有减少摆动的效果,降低摆动距离最大值(SwaySideMaximumAngleDistance)、最小值(SwaySideMinimumAngleDistance)和摆动时间(SwayTraversalTime)三项属性,没错摆动时间依旧是减小。
    4阶手枪插件“视差修正”的摆动时间是增加描述中数值的两倍。


    IP属地:上海2楼2024-09-17 22:07
    回复
      子弹散布
      -
      盲射时子弹散布直接体现在瞄准器上,标准型的瞄准器是中间一个准心,周围四条线,散布范围在四条线内部,如果该范围没有完全包括敌人,那么可能就会打飞。在范围内具体哪个落点的概率大小就不知道了,没找到相关的属性。
      子弹散布相关的属性在 spread_stats.tweak 中有定义和注释,路径是:\tools\redmod\tweaks\base\gameplay\static_data\database\stats\weapon_stats\spread_stats.tweak
      -
      SpreadUseCircularSpread
      是否使用圆形散布,默认是矩形,多数武器都是圆形散布。
      -
      SpreadDefaultX
      SpreadDefaultY
      SpreadAdsDefaultX
      SpreadAdsDefaultY
      散布默认值,盲射瞄准器默认显示的就是这个值的范围。
      带Ads的是瞄准时的散布,不带Ads的是盲射的散布,瞄准设定的值比盲射小,小多少因不同武器而不同。
      如果使用圆形散布,Y不会定义,只有X的值。
      这四条属性会随武器等阶提高而减小,五阶可以减小20%。
      -

      上图,SpreadDefaultX 设置为10,距离10米的散布大小,没有全部包含敌人,那么就有打飞的可能。10是很大的散布了,一般都在1左右。
      -
      SpreadMaxX
      SpreadMaxY
      SpreadAdsMaxX
      SpreadAdsMaxY
      精力低下会增加子弹散布,但不会超过这个最大值。
      这四条属性会随武器等阶提高而减小,五阶可以减小20%。
      -
      SpreadMinX
      SpreadMinY
      SpreadAdsMinX
      SpreadAdsMinY
      武器配件、蹲伏、技术武器蓄力可以降低子弹散布,但不会低于这个最小值(并不一定,最小值与默认值相同的时候蹲伏还是缩小了)。
      并不会随武器等阶提升而减小。
      -
      SpreadChangePerShot
      SpreadAdsChangePerShot
      每次射击改变散布,加多少减多少与设定的值相同。
      -
      SpreadUseInAds
      瞄准射击是否有散布,1是有,0是没有。
      -
      SpreadResetSpeed
      散布增加或者减少的速度,设定多少就是每秒变化多少。
      -
      SpreadResetTimeThreshold
      散布增加后,经过多少秒开始恢复。
      -
      SpreadRandomizeOriginPoint
      随机散布原始点,修改后没感觉出效果。
      -
      SpreadZeroOnFirstShot
      连续射击时第一枪不散布,但实际都没有散布了。
      -
      SpreadChargeMult
      SpreadFullChargeMult
      SpreadAdsChargeMult
      SpreadAdsFullChargeMult
      技术武器才有,蓄力或者满蓄力射击降低多少百分比的散布。
      -
      SpreadUseEvenDistribution
      影响一次射击多颗子弹的武器,多颗子弹的散布是否平均分布。
      -
      SpreadEvenDistributionJitterSize
      多颗子弹平均分布的话,如果默认散布不变,那么每次散布的位置都是相同的。
      这条属性的值乘默认散布X(或者Y),就可以让位置固定的子弹再产生一次散布。
      -
      SpreadEvenDistributionRowCount
      子弹平均分布的行数,如果是圆形散布,那么就是有几圈。
      -
      蹲伏可以减小子弹散布,移动会增加,这些属性以属性组 Base_PlayerState_Spread_Stats 附加到武器上,所有武器都一样。
      -
      SpreadCrouchDefaultMult
      SpreadCrouchMaxMult
      两个值都是-0.25。蹲伏降低的子弹散布,默认值与最大值都减小25%。
      -
      SpreadFastSpeedMin 都没有定义
      SpreadFastSpeedMax 值为1.25
      移动速度在设定的最小值与最大值之间,逐渐增加子弹散布。
      -
      SpreadFastSpeedMinAdd 值为0.25
      SpreadFastSpeedMaxAdd 值同样为0.25
      移动速度到达最小设定值后,如果速度没有继续增加,散布就加到最小值为止。
      如果速度到了最大设定值,那么散布就加到最大值为止。
      初始角色行走速度为3.5,蹲伏行走速度为1.5,都超过了 SpreadFastSpeedMax 所设定的1.25,也就是说没有debuff的情况下,只要移动子弹散布就会开始增加0.25,这个0.25不是百分比,与默认散布(SpreadDefaultX)的数值是相同意思,并且不受散布最大值(SpreadMaxX)影响。
      -
      SpreadAdsFastSpeedMin 值为1
      SpreadAdsFastSpeedMax 值为1.25
      SpreadAdsFastSpeedMinAdd 值为0.35
      SpreadAdsFastSpeedMaxAdd 值为0.35
      上面不带Ads的是盲射,这个带Ads的是瞄准。瞄准时的移动速度为1.5,不管站着还是蹲着都是1.5。所以没有debuff的情况下只要移动散布就会开始增加0.35。
      -
      智能武器可以锁定敌人射击,锁定情况下也有子弹散布,散布过大的话也会打飞,与智能武器制导概率造成的打飞是不同的。
      智能武器用的散布属性与普通武器是一样的,只有 SmartGunSpreadMultiplier(智能武器散布乘数)这条属性不同,它不在 spread_stats.tweak 里,而在智能武器相关的 smart_gun_stats.tweak 里。作用是在原本的散布XY上乘这个乘数。
      -
      有的武器瞄准镜和枪口有减小子弹散布的效果,降低的是默认值和最大值,列出来的话是下面8个属性:
      SpreadDefaultX
      SpreadDefaultY
      SpreadMaxX
      SpreadMaxY
      SpreadAdsDefaultX
      SpreadAdsDefaultY
      SpreadAdsMaxX
      SpreadAdsMaxY


      IP属地:上海3楼2024-09-17 22:08
      回复
        后坐力
        -
        与后坐力相关的属性在 recoil_stats.tweak 中有定义和注释,路径为:\tools\redmod\tweaks\base\gameplay\static_data\database\stats\weapon_stats\recoil_stats.tweak
        -
        RecoilDir
        后坐力抬头方向,后坐力都是朝上台头的,这个属性可以更改方向。
        以竖直向上为0度,逆时针方向为正,取值范围为-360到360度。
        人形敌人都是竖条状的,所以抬头方向偏离垂直线越少越好。
        -
        RecoilAngle
        可以在设定的角度内随机后坐力方向。
        例子:RecoilDir 为0度,RecoilAngle 设为30度,那么每一次开火,后坐力抬头方向就会在-15度到15度之间随机选一个数。
        -
        RecoilKickMin
        RecoilKickMax
        每次后坐力抬头多少距离,单位为度,可以当成一个从眼球开始的圆锥体来看。
        取值范围0到100,如果设为100,实际大约是10度,所以实际抬头多少距离估计为设定值的十分之一。
        会随武器等阶提升而减小,五阶可以减小20%。
        -
        RecoilMaxLength
        后坐力抬头上限,单位为度,取值范围0到100,设定值就是实际值。
        到达设定值后后坐力就不会继续抬头了,但有的武器可以,没找到影响的属性。
        -
        RecoilDelay
        开火后多久抬头。
        -
        RecoilTime
        RecoilSpeed
        两者设定一个就行,影响后坐力抬头到达最高点的时间,没试过都设定会怎样。
        Time的单位是秒,Speed的单位是度。
        -
        RecoilHoldDuration
        后坐力抬头到达最高点后维持不动的时间。
        玩家如果动鼠标那么可以动,并且可以抵消恢复距离。
        -
        RecoilRecoveryTime
        RecoilRecoverySpeed
        两者设定一个就行,影响从后坐力最高点回到起始点的时间。
        -
        RecoilRecoveryMinSpeed
        与 RecoilRecoveryTime 转化成的速度对比,实际恢复速度取两者较大值。
        -
        RecoilDriftRandomRangeMin
        RecoilDriftRandomRangeMax
        影响起始的准心位置与后坐力恢复后的准心位置差多少距离。
        -
        RecoilMagForFullDrift
        后坐力抬头到达多少距离后,准心位置直接应用最大偏移。
        -
        RecoilEnableLinearX
        RecoilEnableLinearY
        是否产生X轴或者Y轴上的后坐力。全部为0那么就没有后坐力。
        -
        RecoilEnableCycleX
        RecoilEnableCycleY
        RecoilCycleTime
        RecoilCycleSize
        正常后坐力抬头是一条直线,或者在后坐力方向的角度范围内随机变化,但有的武器走起来的路线是正弦波样子的。
        根据 RecoilEnableCycleX 的注释,这个属性是用来开关正弦波后坐力的,但我用力大砖飞测试并没有效果,包括另外三个属性。
        -
        RecoilEnableScaleX
        RecoilEnableScaleY
        RecoilScaleTime
        RecoilScaleMax
        连续开火一段时间后会增大后坐力抬头距离,多长时间后增加由 RecoilScaleTime 控制,增加多少由 RecoilScaleMax 控制。
        -
        RecoilAlternateDir
        设定第二个后坐力方向。
        -
        RecoilDirPlanSequence
        未测试,不确定效果。
        -
        RecoilDirPlanCycleRandDir
        随机选择第一或者第二后坐力方向。
        -
        RecoilDirPlanCycleRandRangeDir
        在第一和第二后坐力方向之间取随机值。
        -
        LinearDirectionUpdateMin
        LinearDirectionUpdateMax
        正常一次连续射击后坐力的方向是不会变的,设定这个属性后就可以变了。
        数值的单位是秒,多少多少秒后改变方向。
        -
        RecoilAllowSway
        瞄准射击时,后坐力是不会跟着瞄准摆动漂移的,但这个属性设为1,就可以让后坐力跟着摆动漂移了。
        -
        RecoilChargeMult
        RecoilFullChargeMult
        技术武器才会用属性,影响蓄力射击的后坐力。
        -
        RecoilUseDifferentStatsInADS
        多数武器盲射与瞄准的后坐力都是相同的,这个属性设为1的话,就会使用另外设定的瞄准后坐力。
        下面这些都是,我没测试,含义应该与盲射是相同的:
        RecoilDirADS
        RecoilAngleADS
        RecoilKickMinADS
        RecoilKickMaxADS
        RecoilMaxLengthADS
        RecoilTimeADS
        RecoilRecoveryMinSpeedADS
        RecoilRecoveryTimeADS
        RecoilKickMaxADS
        RecoilHoldDurationADS
        RecoilEnableLinearXADS
        RecoilEnableLinearYADS
        RecoilEnableCycleXADS
        RecoilEnableCycleYADS
        RecoilEnableScaleXADS
        RecoilEnableScaleYADS
        RecoilCycleTimeADS
        RecoilCycleSizeADS
        RecoilScaleTimeADS
        RecoilScaleMaxADS
        RecoilSpeedADS
        RecoilRecoverySpeedADS
        RecoilAlternateDirADS
        RecoilDirPlanSequenceADS
        RecoilDirPlanCycleRandDirADS
        RecoilDirPlanCycleRandRangeDirADS
        LinearDirectionUpdateMinADS
        LinearDirectionUpdateMaxADS
        RecoilChargeMultADS
        RecoilFullChargeMultADS
        -
        武器枪口有降低后坐力的效果:
        后坐力方向对应 RecoilDir;
        后坐力角度对应 RecoilAngle;
        后坐力对应 RecoilKickMin 和 RecoilKickMax,还有义体词条中的增加武器操控也是这两个属性。


        IP属地:上海4楼2024-09-17 22:09
        收起回复
          现在回到开头的问题,武器状态栏中的操控性是怎么来的?
          答案在下面这个文件中有写 \tools\redmod\scripts\cyberpunk\UI\inventory\inventoryItemStats.script
          函数 CalculateHandling() 负责计算操控性,算式为:
          1.0 / ( ( ( 1.0 + ( ( 1.0 + cycleTime ) * spreadDefaultX ) ) + ( ( ( 1.0 + ( recoilKickMax / 5.0 ) ) * ( 1.0 + ( AbsF( recoilDirection ) / 360.0 ) ) ) * ( 1.0 + ( recoilAngle / 90.0 ) ) ) ) + ( 0.1 + ( ( swaySide * swayBottom ) / 90.0 ) ) )
          -
          以一阶手枪统一为例:
          CycleTime(开火一次需要的时间)为0.3
          SpreadDefaultX 为0.75
          RecoilKickMax 为2.2
          RecoilDir 为15
          RecoilAngle 为35
          SwaySideMaximumAngleDistance 为1.8
          SwaySideBottomAngleLimit 为60
          得到的计算结果为 0.186625194,然而实际游戏中显示的是6.0,并不相同。
          -
          UIInventoryItemWeaponBar.Make() 函数中,百分比属性是这样算的:instance.Percentage = ( value * UIInventoryItemWeaponBars.GetItemTypeMultiplier( itemType ) ) / maxValue
          GetItemTypeMultiplier() 如果是狙击枪为0.5,霰弹枪为0.7,其他为1,手枪统一取1,所以 0.186625194 不变。
          根据 maxValue 不断向前找可以在其他文件里找到一个函数 PopulatemaxStatValues(),它会从 WeaponsTooltip.TooltipData(对应的文件为:weapons_tooltip_data.tweak) 这个数据中找最大值,其中操控性的最大值为0.31。
          -
          将上面的 0.186625194 除以 0.31,得到 0.602016756,与游戏中显示的数值还差10倍,以及没有去小数,不过到这就可以结束了,再往上找我也找不到了。
          数值算出来了,那么它的含义是什么?好吧,我也说不上来。分别拿散布、后坐力、摆动的一两个属性去和参考值对比,全部加起来后再去和另一个参考值对比,只能说这值本身没什么意义,只有不同武器间(排除狙击枪和霰弹枪)进行对比,可以粗糙地得到这把武器比另一把武器的操控好多少的结论。


          IP属地:上海5楼2024-09-17 22:10
          回复
            精力对武器操控的影响
            -
            在这个文件中有写精力对操控性的影响 \tools\redmod\scripts\cyberpunk\player\playerWeaponHandler.script
            其中使用的曲线组"player_staminahandling"需要使用mod编辑工具WolvenKit来查看。
            -
            将操控性分为五个组,用五条曲线来控制。
            -

            上图曲线对应后坐力组 recoilGroup。左边的数字代表当前精力百分比,右边代表下面属性的乘数。如果当前精力在0.33到0.45之间,那么对应的乘数就在1.25到1之间按比例取值。
            * RecoilAngle
            * RecoilKickMin
            * RecoilKickMax
            * RecoilDir
            * RecoilAlternateDir
            -

            上图曲线对应超时组 timeOutGroup
            * RecoilHoldDuration
            * SwayTraversalTime
            -

            上图曲线对应摆动乘算组 multSwayGroup
            * SwaySideMaximumAngleDistance
            * SwaySideMinimumAngleDistance
            -

            上图曲线对应摆动加算组 addSwayGroup。对应的数值加在下面的属性上。
            * SwaySideTopAngleLimit
            * SwaySideBottomAngleLimit
            -

            上图曲线对应散布组 spreadGroup
            * SpreadDefaultX
            * SpreadAdsDefaultX
            * SpreadDefaultY
            * SpreadAdsDefaultY


            IP属地:上海6楼2024-09-17 22:12
            回复
              重型武器对操控性的修正
              -
              除了武器本身的属性,重型武器有额外的操控性修正,每种修正在下面这个文件中有定义 \tools\redmod\tweaks\base\gameplay\static_data\database\gameplay_logic_packages\equipment_abilities.tweak
              -
              MediumWeapon
              中型武器,包含下面这些(如果不朽武器基于某武器,那么它大概率与原型相同):大木大木(这武器我都没见过)、类星体、SOR-22、针式、铁棍、战术家、暴风雪、海格力斯。
              * 快速攻击1.5倍伤害
              * 包含的属性组为 EquipmentGLP.MediumWeaponStaggerStats
              -
              HeavyWeapon
              重型武器,包含:风暴、吹毛求疵、猫又、萨达拉、手锯、罗刹、厄瑞波斯。
              * 快速攻击1.5倍伤害
              * 包含的属性组为 EquipmentGLP.HeavyWeaponStaggerStats
              -
              VeryHeavyWeapon
              超重型武器:杀戮、卓式、波索。
              * 射击反冲 BaseStatusEffect.HeavyStun(击退距离0.4)
              * 快速攻击1.5倍伤害
              * 移动速度、跳跃高度乘0.85
              * 包含的属性组为 EquipmentGLP.VeryHeavyWeaponStaggerStats
              -
              VeryHeavyWeaponNoKnockback
              不会反冲的超重型武器:冰暴。
              除了不会反冲,其他与超重型武器相同。
              -
              HeavyLMGWeapon
              重型轻机枪:防御者、MA70、八星铳、鱼鹰。
              * 快速攻击1.5倍伤害
              * 移动速度、跳跃高度乘0.85
              * 包含的属性组为 EquipmentGLP.HeavyWeaponStaggerStats
              -
              BuckWeaponHeavy 零五
              * 射击反冲 BaseStatusEffect.HeavyStun(击退距离0.4)
              * 快速攻击1.5倍伤害
              * 移动速度、跳跃高度乘0.85、不能突进、不能空中突进、不能冲刺
              * 包含的属性组为 EquipmentGLP.BuckWeaponStaggerStats
              -
              PanamWeaponLight 守望、电火花
              包含的属性组为 EquipmentGLP.MediumWeaponStaggerStats
              -
              EdgerunnersBorgWeaponStagger 铁胆
              * 射击反冲 BaseStatusEffect.EdgerunnersStun(击退距离1.5,镜头晃动强度0.4)
              * 快速攻击1.5倍伤害
              * 移动速度、跳跃高度乘0.85
              * 包含的属性组为 EquipmentGLP.VeryHeavyWeaponStaggerStats
              -
              BrickBorgWeaponStagger 命令
              * 射击反冲 BaseStatusEffect.BrickStun(击退距离1.666,镜头晃动强度0.333)
              * 快速攻击1.5倍伤害
              * 移动速度、跳跃高度乘0.85
              * 包含的属性组为 EquipmentGLP.VeryHeavyWeaponStaggerStats
              -
              NicolasBorgWeaponStagger 逃兵
              * 射击反冲 BaseStatusEffect.NicolasStun(击退距离1.7,镜头晃动强度0.35)
              * 快速攻击1.5倍伤害
              * 移动速度、跳跃高度乘0.85
              * 包含的属性组为 EquipmentGLP.VeryHeavyWeaponStaggerStats
              -
              ComradeBorgWeaponStagger 同志的铁锤
              * 射击反冲 BaseStatusEffect.ComradeStun(击退距离1,镜头晃动强度0.15)
              * 快速攻击1.5倍伤害
              * 包含的属性组为 EquipmentGLP.HeavyWeaponStaggerStats
              -
              属性组
              -
              EquipmentGLP.MediumWeaponStaggerStats
              * RecoilDriftRandomRangeMin 加25%
              * RecoilDriftRandomRangeMax 加25%
              * RecoilMagForFullDrift 加25%,这一项不知道为什么要加
              * RecoilKickMin 加25%
              * RecoilKickMax 加25%
              * RecoilRecoverySpeed 加25%
              * RecoilRecoveryTime 加25%
              * RecoilTime 加25%
              * RecoilHoldDuration 加25%
              * SwayTraversalTime 乘0.8
              * SwayStartDelay 乘0
              * SwayStartBlendTime 乘0.1
              -
              EquipmentGLP.HeavyWeaponStaggerStats
              * RecoilDriftRandomRangeMin 加50%
              * RecoilDriftRandomRangeMax 加50%
              * RecoilMagForFullDrift 加50%
              * RecoilKickMin 加33%
              * RecoilKickMax 加33%
              * RecoilRecoverySpeed 加33%
              * RecoilRecoveryTime 加33%
              * RecoilTime 加33%
              * RecoilHoldDuration 加33%
              * SwayTraversalTime 乘0.75
              * SwayStartDelay 乘0
              * SwayStartBlendTime 乘0.1
              -
              EquipmentGLP.VeryHeavyWeaponStaggerStats
              * RecoilDriftRandomRangeMin 加100%
              * RecoilDriftRandomRangeMax 加100%
              * RecoilMagForFullDrift 加100%
              * RecoilKickMin 加50%
              * RecoilKickMax 加50%
              * RecoilRecoverySpeed 加50%
              * RecoilRecoveryTime 加50%
              * RecoilTime 加50%
              * RecoilHoldDuration 加50%
              * SwayTraversalTime 乘0.75
              * SwayStartDelay 乘0
              * SwayStartBlendTime 乘0.1
              -
              EquipmentGLP.BuckWeaponStaggerStats
              * RecoilDriftRandomRangeMin 加300%
              * RecoilDriftRandomRangeMax 加300%
              * RecoilMagForFullDrift 加100%
              * RecoilKickMin 加50%
              * RecoilKickMax 加50%
              * RecoilRecoverySpeed 加50%
              * RecoilRecoveryTime 加100%
              * RecoilTime 加100%
              * RecoilHoldDuration 加100%
              * SwayTraversalTime 乘0.5
              * SwayStartDelay 乘0
              * SwayStartBlendTime 乘0.1
              * ReloadTimeBonus(换弹时间加成) 加0.1
              * AimInTime(瞄准耗时) 乘1.3
              * AimOutTime(退出瞄准耗时) 乘1.3


              IP属地:上海7楼2024-09-17 22:12
              回复
                击中反应
                -
                有12种击中反应
                import enum animHitReactionType
                {
                None,
                Twitch, 抖动
                Impact, 冲击
                Stagger, 失衡
                Pain,
                Knockdown, 击倒
                Ragdoll, 布娃娃
                Death,
                Block,
                GuardBreak,
                Parry,
                Bump,
                }
                这篇帖子要说的是上面跟着中文的几个,实际只讨论冲击(Impact)、失衡(Stagger)、击倒(Knockdown)这三个。具体击中反应的播放时长及类型会受强度、方向、部位等等的影响,这篇帖子就不讨论了。
                抖动(Twitch)是这几个种最小的击中反应,未达到其他几种击中反应的条件时就会使用抖动。抖动无法打断NPC的攻击动作,冲击、失衡、击倒可以。
                活人NPC的布娃娃(Ragdoll)多数会跟着击倒与肢解一起出现,死亡NPC的击中反应讨论意义不大。
                -
                击中反应相关的内容主要写在这个文件中 \tools\redmod\scripts\cyberpunk\NPC\components\hitReactionComponent.script
                -
                武器中相关的属性如下:
                -
                HitReactionFactor
                击中反应系数,影响冲击、失衡、击倒。
                -
                HitWoundsFactor
                受伤系数,乘武器造成的伤害,加到部位累计受伤值中,超过NPC各部位的阈值可以让该部位受伤。
                -
                HitDismembermentFactor
                肢解系数,乘武器造成的伤害,加到部位累计肢解值中,在死亡或者非致命击杀时,如果命中的部位超过了NPC该部位的肢解阈值,那么可以肢解该部位(此时非致命击杀变成致命)。
                -
                KnockdownImpulse
                击倒推力,决定能否击倒,以及布娃娃状态下受到的推力等等。
                -
                BaseKnockdownImpulse
                BaseEvadeImpulse
                上面两个属性影响近战的回避和破防。没注意拳赛以外的NPC使用近战武器会不会防御或者回避,如果不会的话那这两个属性就只有拳赛会使用了。
                -
                PhysicalImpulse
                影响近战武器对载具的伤害。
                -
                NPC相关的属性如下:
                -
                ImpactDamageThreshold 冲击阈值
                人类15、机器人-1、路人10、无人机35、大无人机35、机甲0、赛博精神病5。
                设定数值15的意思是冲击阈值设定为总血量15%的意思。-1为不可用,没有冲击阈值。0被判断为没有冲击阈值,不是一碰就冲击。
                这些只是不同类型敌人的基础设定值,细分类型还会有其他的修正,比如强制冲击的话会乘0.01,难以受到冲击可以乘2,不能受到冲击的话会乘0,或者100,也可能直接附加一个免疫击倒的效果。
                另外像拿重机枪的重装步兵只能抖动。还有像在掩体后、载具中,或者是机甲单位,没有对应的击中反应动画,也就不会有相应的击中反应。
                -
                StaggerDamageThreshold 失衡阈值
                人类30、机器人-1、路人25、无人机0、大无人机0、机甲0、赛博精神病8。
                -
                KnockdownDamageThreshold 击倒阈值
                人类40、机器人100、路人33、无人机-1、大无人机-1、机甲-1、赛博精神病17。
                -
                ImpactDamageThresholdInCover 掩体后冲击阈值
                人类-1、机器人-1、路人-1、无人机-1、大无人机-1、机甲0。
                -
                StaggerDamageThresholdInCover 掩体后失衡阈值
                人类25、机器人-1、路人25、无人机-1、大无人机-1、机甲-1、赛博精神病8。
                -
                KnockdownDamageThresholdInCover 掩体后击倒阈值
                人类-1、机器人60、路人-1、无人机-1、大无人机-1、机甲-1。
                -
                ImpactDamageThresholdImpulse 似乎未使用
                StaggerDamageThresholdImpulse 似乎未使用
                KnockdownDamageThresholdImpulse 三种推力中只使用了这一条击倒推力阈值
                击倒推力阈值不是血量的百分比,设定的值就是阈值,决定会不会被击倒。
                人类50、机器人55、路人50、无人机-1、大无人机-1、机甲-1、赛博精神病25。
                -
                WoundHeadDamageThreshold 头部受伤阈值
                人类-1、机器人10。
                -
                WoundLArmDamageThreshold 左臂受伤阈值
                WoundRArmDamageThreshold 右臂受伤阈值
                人类30、机器人100。
                -
                WoundLLegDamageThreshold 左腿受伤阈值
                WoundRLegDamageThreshold 右腿受伤阈值
                人类50、机器人100。
                -
                DismHeadDamageThreshold 头部肢解阈值
                人类50、机器人10、路人50。
                -
                DismLArmDamageThreshold 左臂肢解阈值
                DismRArmDamageThreshold 右臂肢解阈值
                DismLLegDamageThreshold 左腿肢解阈值
                DismRLegDamageThreshold 右腿肢解阈值
                人类50、机器人60、路人50。
                -
                DefeatedHeadDamageThreshold 头部非致命击杀阈值
                DefeatedLArmDamageThreshold 左臂非致命击杀阈值
                DefeatedRArmDamageThreshold 右臂非致命击杀阈值
                DefeatedLLegDamageThreshold 左腿非致命击杀阈值
                DefeatedRLegDamageThreshold 右腿非致命击杀阈值
                上面五条属性似乎只有友军NPC会使用,因为友军被非致命击杀后过段时间可以复活。
                -
                HitReactionFactor
                HitWoundsFactor
                HitDismembermentFactor
                NPC身上的上面这三条属性似乎没有使用,用的是武器上的。
                -
                HitTimerAfterImpact 冲击保护时间
                人类0.5、机器人0.5、人群0.5、暴恐机动队螳螂刀-3.5、赛博精神病3.5。
                单位是秒,受到冲击后在保护时间内不会再受到冲击了,会用抖动替代,但不限制失衡或者击倒。负值我没测试是什么效果。
                这一条属性似乎没有使用,不管近战远程,冲击的保护时间都用的下面的 HitTimerAfterImpactMelee,但数值是一样的。
                -
                HitTimerAfterImpactMelee 近战冲击保护时间
                人类0.5、机器人0.5、人群0.5、暴恐机动队螳螂刀-3.5、赛博精神病3.5。
                -
                HitTimerAfterStagger 失衡保护时间
                人类1.5、机器人2、人群1.5、暴恐机动队螳螂刀-4.5、赛博精神病4.5。
                保护时间内不会冲击或失衡,但不限制击倒。
                -
                HitTimerAfterStaggerMelee 近战失衡保护时间
                人类2、人群1.5、暴恐机动队螳螂刀-4.5、赛博精神病4.5。
                -
                HitTimerAfterDefeated 非致命击杀保护时间
                这个保护时间没找到如何使用。
                -
                HitTimerAfterPain 疼痛保护时间
                似乎未使用,疼痛用的保护时间是 HitTimerAfterStagger。
                -
                HitTimerAfterKnockdown 击倒保护时间
                人类3.667、机器人3.667、人群3.667、暴恐机动队螳螂刀-5.33、赛博精神病-5.33。
                保护时间内不会冲击、失衡和击倒。
                -
                HitReactionDamageHealthFactor 击中反应剩余血量系数
                NPC上设定的该属性值都是2。
                -
                NPC受到的反应伤害是这样算的:
                (该次击中事件造成的伤害 * HitReactionFactor ) * [ 1 + (1 - 当前生命值百分比) * HitReactionDamageHealthFactor ]
                前一部分就是伤害乘击中反应系数,武器有自己定义的击中反应系数,多数为1。像快速破解、手雷等等没有定义但能造成伤害的攻击则为1,爆炸为2。
                后一部分根据NPC的血量计算,满血为1,空血为3。
                -
                将上面算出的值加入累计反应伤害中,累计反应伤害在超过上次击中时间3秒后会清零。除非上次的击中反应是击倒,那么超过3秒会开始下降,每秒下降该NPC总血量1%的数值。击倒保护时间内的抖动不会更新上一次的击中反应,所以并不会触发3秒清零。
                -
                累计反应伤害大于等于NPC的冲击阈值就可以造成冲击,大于等于失衡阈值就可以造成失衡,但击倒除了累计反应伤害,还需要物理推力大于等于NPC的击倒推力阈值(KnockdownDamageThresholdImpulse)。
                -
                物理推力多数等于武器的 KnockdownImpulse,最大值为 KnockdownImpulse 的1.5倍。
                物理推力还会受到射程衰减影响,一枪多发子弹的会除子弹数。
                算出的数值会加入累计物理推力中,累计物理推力不会超过最大值,并且在上一次击中后0.5秒就清零。
                摩托车使用近战武器物理推力为 KnockdownImpulse 的2.67倍,最大值也是2.67倍。
                枪械快速攻击为 KnockdownImpulse 的0.5倍,最大值也是0.5倍。
                近战武器强攻击为1.67倍,最大值也为1.67倍。
                不看单独某一款武器,只看各类型武器的模板的话,只有双手锤40、霰弹枪50、双管霰弹枪50,这三种的1.5倍可以超过NPC的击倒推力阈值。
                -
                另外,NPC在空中失衡或者击倒会有布娃娃效果,可能产生额外伤害。
                在击倒时,布娃娃推力大于1.5倍的击倒推力阈值也可以产生布娃娃效果。
                布娃娃推力多数情况下与物理推力相同,但并不累计。
                布娃娃推力大小会影响布娃娃的位移距离以及因距离造成的额外伤害。
                -
                除了累计反应伤害,还有两个属性可以用来决定击中反应:
                hitReactionSeverityMin
                hitReactionSeverityMax
                这两个数据主要用于近战武器的攻击动作,还有爆炸。
                同时大于等于3,或者最小值大于等于3,最大值未定义的情况下,可以击倒,并且不看物理推力是否大于等于阈值。
                同时大于等于2,或者最小值大于等于2,最大值未定义,可以失衡。
                同时大于等于1,或者最小值大于等于1,最大值未定义,可以冲击。
                -
                * 霰弹枪、双管霰弹枪及重机枪的这两个属性都至少为1,也就是说最少能造成冲击
                * 奥佐布鼻子撞击到NPC,最小值3,最大值3,但实际奥佐布鼻子的撞击设定值与普通手雷一致,该条数据没有被使用
                * 切割手雷最小值1最大值2,对BOSS最小值0最大值1
                * 布娃娃撞击NPC,最小值1,最大值1
                * 连带传染爆炸最小值为2,最大值为3
                * 枪械快速攻击最小值1,最大值1
                * 近战武器的防御反击最小值为2,最大值为3
                -
                * 刀剑反弹子弹最小值1最大值2
                * 钝器专长“反戈一击”有标记"hitFlag.ForceKnockdown",最大值与最小值都为3,也就是强制击倒
                * 钝器专长“当头棒喝”的冲刺防御,持续0.75秒以上最小值为3最大值为3,不足0.75秒似乎最大值最小值都为2
                * 钝器专长“地裂天崩”,4米以内最小值最大值都为3,10米以内最小值2最大值3。点了钝器专长“力敌千钧”后,空中时间超过0.5秒可以到达最大值,10米以内最小值最大值都为3,12米内最小值2最大值3
                * 螳螂刀relic技能最小值2最大值2,大猩猩手臂relic技能最小值3最大值3
                * Relic缺陷爆炸最小值3最大值3,半径3米,周围的NPC可以击倒,但多数情况下被引爆的NPC是不会被击倒的,因为引爆缺陷的攻击与缺陷爆炸没有超过最小保护时间0.09秒。最小保护时间会应用于远程攻击,缺陷爆炸设定为远程攻击,而不是爆炸攻击(但依旧会受到爆炸抗性减伤,另外写的)。需要将时间减慢到28%才能击倒,推测缺陷爆炸距离上一次击中的时间约为26毫秒,成本最低的方法是依靠扫描的时间减慢。
                -
                * 小刀、斧子投掷都是最小值2最大值2
                * 链锯剑、双手钝器、双手锤的轻攻击最小值为1,最大值都大于等于1,可以轻攻击就打断NPC的动作
                * 其他近战武器的攻击动作就不列了,太多了
                -
                爆炸至少可以造成冲击,另外还有强爆炸,强爆炸可以直接击倒。
                低阶破片手雷、水下爆炸、较弱的高爆弹有弱爆炸的标记"hitFlag.WeakExplosion",不能算强爆炸。
                其他爆炸只要目标距离爆炸中心小于等于3米就是强爆炸,或者累计物理推力*3/距离大于击倒推力阈值也是强爆炸。


                IP属地:上海8楼2024-09-17 22:14
                回复
                  受伤与肢解
                  -
                  受伤比较简单,只要累计受伤伤害大于等于部位受伤阈值就可以造成该部位受伤了,受伤的反应类型多为疼痛(Pain),如果受伤部位是义体那么反应类型为失衡。击倒动画如果覆盖了手部受伤的动画,可能会发生NPC没有切换副武器,导致不能攻击的情况。
                  受伤伤害为伤害乘武器的受伤系数(HitWoundsFactor),累计受伤伤害按部位分别累计。
                  NPC身上的部位分的比较详细:0头、1左胸、2左臂、3左手、4右胸、5右臂、6右手、7腹部、8左腿、9右腿、10特殊。对受伤来说有用的只有:左臂、左手、右臂、右手、左腿、右腿。
                  左臂与左手共用累计受伤伤害,右臂与右手共用累计受伤伤害。
                  -
                  以下情况不会受伤:
                  * 已经受过伤的NPC不能再受伤,就算是不同部位也不行
                  * 近战NPC不会受伤
                  * 枪械快速攻击不能造成受伤
                  * 近战武器的轻攻击与重攻击不能造成受伤,冲刺攻击、蹲伏攻击等等属于攻击子类型,都属于近战轻攻击,所以也不能造成受伤。那投掷攻击呢?程序里没限制,但攻击动作中定义了受伤系数乘0,不造成受伤伤害,也就是无法造成受伤。
                  -
                  受伤后会影响NPC行为,例如变得不会躲避手雷了,手部受伤会切换副武器,其他受伤的效果大多定义在这个文件中 \tools\redmod\tweaks\base\gameplay\static_data\database\status_effect\cripplings.tweak
                  腿部受伤(有的效果不确定是什么意思,所以没有全部列出):
                  * 不能使用斯安威斯坦
                  * 不能冲刺
                  * 不能蹲伏
                  * 不能回避
                  * 不能突进
                  * 不能蓄力跳
                  * 不能使用手雷
                  * 不能使用掩体
                  * 不能使用克伦齐科夫
                  * 不能自己退出战斗
                  手部受伤:
                  * 不能使用斯安威斯坦
                  * 不能切换武器
                  * 不能使用掩体
                  * 不能使用手雷
                  * 不能蓄力跳
                  * 不能防御
                  * 不能防御反击
                  * 不能自己退出战斗
                  -
                  有的NPC手部或腿部是义体,义体受伤与肢解的视觉效果相同都是断肢,对属性的影响与肉人受伤略有不同。
                  腿部义体受伤:
                  * 不能使用斯安威斯坦
                  * 不能冲刺
                  * 不能蹲伏
                  * 不能回避
                  * 不能突进
                  * 不能蓄力跳
                  * 不能使用手雷
                  * 不能使用掩体
                  * 不能使用克伦齐科夫
                  * 不能防御
                  * 不能防御反击
                  * 不能自己退出战斗
                  手部义体受伤:
                  * 不能使用斯安威斯坦
                  * 不能切换武器
                  * 不能使用掩体
                  * 不能使用手雷
                  * 不能防御
                  * 不能防御反击
                  -
                  肢解在多数情况下需要击杀NPC才有效果,武器上的肢解系数意义不大,直接看强制肢解,相关代码在 \tools\redmod\scripts\core\gameplay\effector.script,其中的类 ForceDismembermentEffector 是与强制肢解有关的代码。
                  -
                  rand = RandF(); //取随机值
                  if( rand <= m_dismembermentChance ) //判断随机值是否小于等于肢解概率
                  {
                  //判断结果为真就执行肢解
                  DismembermentComponent.RequestDismemberment( puppet, m_bodyPart, m_woundType, Vector4.EmptyVector(), m_isCritical );
                  }
                  if( m_shouldKillNPC || m_bodyPart == gameDismBodyPart.HEAD ) //检查 shouldKillNPC 这条属性是否为真,后面是否击中头部不用看,因为所有强制肢解效果的 shouldKillNPC 都设定为真
                  {
                  //判断结果为真就给NPC应用强制击杀的效果
                  StatusEffectHelper.ApplyStatusEffect( puppet, T"BaseStatusEffect.ForceKill", player.GetEntityID() );
                  }
                  -
                  该代码中肢解是要看概率的,但强制击杀是不看的,所以霰弹枪插件给我跪下秒杀敌人时,腿部并不是都肢解了。
                  -
                  除了各种处决动作外,其他有强制肢解效果的插件或武器:
                  * 霰弹枪插件给我跪下,条件最容易达到,腿部命中两颗子弹就可以
                  * 奇美拉近战武器插件斩头去脚,血量50%以下,并且要命中左臂、右臂、左腿、右腿、头部中的其中一个
                  * 切割手雷25%血量以下可以应用,并不是描述中的30%
                  * 小刀獠牙致残敌人后,再用左轮白头鹰击碎受伤的腿部,这个也是强制肢解的效果
                  另外强制肢解效果对BOSS和暴恐机动队都无效。
                  -
                  肉体专长“同决自灭”可以解锁“绝杀”,绝杀可以不必把NPC的血量打空就执行肢解与击杀,要排除BOSS和暴恐机动队。
                  条件是这一击能把NPC血量打到60%以下,当前血量是满血也可以,或者已经只有60%血量了再打1点伤害也可以。默认情况下最多有5%的几率触发,如果击杀敌人时没有触发绝杀,那么增加10%,最多可以加9次,加到95%,触发后恢复到5%。在程序中并没有找到描述里最多20%绝杀概率的代码。
                  -
                  这个概率是随敌人血量减少而增加的,需要计算这一次攻击后NPC损失了多少血量:
                  1 - [ (NPC当前血量 - 这一次击中事件的伤害 * 武器的HitReactionFactor) / NPC总血量 ]
                  方括号内的计算结果最小取0,最大取1。重机枪与霰弹枪的 HitReactionFactor 系数为2,但双管霰弹枪还是1。
                  -
                  如果计算结果小于0.6就不符合绝杀条件。
                  计算结果0.6代表0*绝杀几率,等于还是触发不了绝杀。
                  结果大于等于0.8代表1*绝杀几率,默认5%,最大可以累加到95%。
                  在0.6与0.8之间则按比例取值。
                  -
                  点了肉体专长“七手八脚”可以额外根据距离增加绝杀几率,最近2米可以增加10%,最远15米为0,中间按比例取值。
                  -
                  另外攻击带爆炸标记的不能绝杀,所以八星铳应该不能造成绝杀,但不限制攻击类型为爆炸,也就是说高爆弹可以。


                  IP属地:上海9楼2024-09-17 22:15
                  收起回复
                    全文完


                    IP属地:上海10楼2024-09-17 22:15
                    回复
                      感觉可以申精


                      IP属地:江苏来自Android客户端11楼2024-09-17 22:23
                      回复
                        虽然不是很懂,但大佬牛逼


                        IP属地:天津来自Android客户端12楼2024-09-17 22:56
                        回复
                          WOC专业


                          IP属地:浙江来自iPhone客户端13楼2024-09-17 23:06
                          回复


                            IP属地:四川来自Android客户端14楼2024-09-17 23:15
                            回复
                              厉害。。。。。所以说霰弹枪带给我跪下这个插件还是挺好用的,万一不小心打腿上了,再补一枪腿就必死,但这个触发的是强制击杀而不是肢解,是这个意思吗?


                              IP属地:河南来自Android客户端15楼2024-09-18 00:30
                              收起回复