上古卷轴5 - 失衡篇(暂定)
输出的失衡值大多数按三种方式:
1,武器重击(不包括盾牌猛击、不包括徒手)
输出的失衡值 = 武器的Stagger × 攻击动作的Stagger
2,法术、附魔(MagicEffect 是 Stagger 模型,无论是否勾选 Detrimental flag)
输出的失衡值 = Spell 中效果的绝对值
3,盾击(包括盾牌猛击、不包括 能装备盾牌但无法持盾 的单位,如 寒霜元素 的盾击)
输出的失衡值 = (50 + Block 格挡熟练度) × 0.01 × 盾击动作的Stagger
格挡熟练度 的计算无上下限(输出负数的失衡值 可以与 目标负数的Mass 负负得正)。
这里可能有相关 Game Settings 参与,但我还没试出来。
如果是 武器重击 输出失衡值,且目标在做一些特殊动作(例如 平时站着偶尔摇晃一下身体的闲置动作),那么不会施加失衡值。
而 盾击 与 法术 输出的失衡值则没这个机制。
武器重击 与 盾击 输出的失衡值 仅可被 Perk 的切入点 Mod Target Stagger 影响;
法术 输出的失衡值 仅可被 Perk 的切入点 Mod Spell Magnitude 影响;
目标 接受的任意失衡值 可被 Perk 的切入点 Mod Incoming Stagger 影响。
若目标已经处于失衡状态,期间免疫其它失衡效果(可以接受失衡debuff,但不会更新失衡值记录、不会重置失衡动作)。
==============================
每个单位都有 Mass 这项基础属性,输出的失衡值 会受到目标的 Mass 减免:
如果目标是玩家,则目标参与计算的 Mass * 2.5 ;
当以 重击 或 法术 给予目标失衡时,输出的失衡值为 Mag 。
若目标 Mass 等于 0.0 时,Stagger = Mag ;
若目标 Mass 大于 2.1 时,Stagger = Mag / Mass - (Mass - 2.1) * 0.15 ;
其余情况下,Stagger = Mag / Mass ;
当以 盾击 给予目标失衡时,输出的失衡值为 Mag 。
若目标 Mass 等于 0.0 时 ,Stagger = 1.0 ;
否则,Stagger = Mag / Mass ;
最终,Stagger 的取值范围在 0.0 与 1.0 之间 (包括) 。
==============================
最后,会根据 Stagger 值,更新目标身上的失衡值记录(staggerMagnitude)、失衡方向(staggerDirection),并产生对应失衡动作与失衡持续时间。
根据 Stagger 值,
若为 0.0 ,则不更新目标身上的失衡值记录,不产生失衡动作。
若不为 0.0 ,则更新目标身上的失衡值记录,并根据它,产生失衡动作。
1, 重击 与 盾击 造成失衡动作的持续时间,与 法术 造成失衡动作的持续时间,会有所不同( 法术 产生的持续时间更长)。
2,对于人类目标而言,手持的是 空手 / 双手武器 与 单手武器 / 法术 / 法杖 / 弓 / 弩 ,受到失衡动作的持续时间 会有所不同(目标手持 空手/双手武器 受到的持续时间更短)。
3,不同生物的失衡动作不同、前倾与后倾的方位所产生的失衡动作不同,因此所产生 失衡动作的持续时间 也会有所不同。(如 猛犸巨象 的空手满额失衡时间约为 1.67 秒、巨人 的双手满额失衡时间约为 2.27秒 与 2.22 秒)
----------------------------------------
关于 失衡动作持续时间 (秒) ,由于不确定因素太多,
这里只提供人类NPC的参考公式(精确到小数点后两位、误差范围 0.02 秒)。
重击 盾击 >
Stagger 区间 单/法/杖/弓/弩 空/双
(0.75 , 1.00] Stagger * 4.00 - 1.00 Stagger * 2.68 - 0.04
(0.50 , 0.75] Stagger * 1.00 + 1.25 Stagger * 1.67 + 0.72
(0.25 , 0.50] Stagger * 1.00 + 1.25 Stagger * 1.17 + 0.95
(0.00 , 0.25] Stagger * 2.00 + 1.00 Stagger * 3.67 + 0.32
法术 >
Stagger 区间 单/法/杖/弓/弩 空/双
(0.75 , 1.00] Stagger * 2.65 + 0.50 Stagger * 2.68 - 0.02
(0.50 , 0.75] Stagger * 1.85 + 1.11 Stagger * 1.67 + 0.73
(0.25 , 0.50] Stagger * 1.85 + 1.13 Stagger * 1.17 + 0.97
(0.00 , 0.25] Stagger * 1.35 + 1.25 Stagger * 3.67 + 0.33
例如:
玩家以 钢制剑(Stagger:0.75),重击(Stagger:×1.0)一个目标,使其失衡。
目标是原版无mod的正常男性人类NPC,没有Perk,Mass为 1 ,手里是空手。
那么目标受到的 Stagger动作值 为 0.75,受到失衡持续时间约为 1.97 秒。
----------------------------------------
Game Settings:
fStaggerMassOffsetBase:2.1
fStaggerMassOffsetMult:0.15
fStaggerPlayerMassMult:2.5
==============================
特例:龙
龙 的动作文件好像没有 staggerMagnitude 这项属性。在尝试获取 受到的动作值Stagger、受到Stagger的来自方向 这两项动作记录值时,返回值始终会是 0 。
龙 在计算受到 重击、盾击、法术 输出的失衡值与自身的 Mass 之后,
若 Stagger 大于 0 ,则直接产生最大的失衡动作(地面持续约 2.00 秒,空中持续约 1.35 秒)。
除了龙起飞时的动作会免疫失衡,龙在地面上跟在天空飞行时,都可以被失衡影响。
龙在生命值低于 35% 时,会受到一次失衡,并且尝试着陆,在生命值不满阈值的情况下不会飞行。
==============================
弓弩:
每个单位都有 BowStaggerBonus 这项基础属性,默认为 0.0 。
当弓弩的箭矢命中目标时,会输出该数值的失衡值 (无论弓是否拉满) 。
这个属性不会影响法术的弹幕。
箭矢失衡计算 Mass 方式与 法术 相同。
箭矢失衡计算 失衡时间 与 武器重击 相同。
额外效果:弩矢 在命中敌人时,若目标在做部分特定的动作,则会输出对应的失衡值(如 巨人前进攻击 1.5 、巨人立定挥棒攻击 1.0 、巨人踩踏攻击 0.5 ,但不包括 巨人跑动、巨人左手轻挥攻击)。
==============================
测试脚本关键代码参考:ActiveMagicEffect
(akTarget as ObjectReference).GetAnimationVariableFloat("staggerMagnitude")
RegisterForAnimationEvent(akTarget as ObjectReference, "staggerStop")
GetTimeElapsed()