72 lines
3.9 KiB
Go
72 lines
3.9 KiB
Go
package gameplay
|
||
|
||
//
|
||
// Protagonist traversal policy.
|
||
// All editable ids live in config/private-server.json under gameplay.webTraversal.
|
||
// This class only answers gameplay questions for the handlers.
|
||
//
|
||
type WebTraversal struct {
|
||
Settings WebTraversalSettings `json:"settings"`
|
||
MaleProtagonistId uint32 `json:"maleProtagonistId"`
|
||
FemaleProtagonistId uint32 `json:"femaleProtagonistId"`
|
||
FeiSuoBuff uint32 `json:"feiSuoBuff"`
|
||
ClientLifecycleBuffs4229938 []uint32 `json:"clientLifecycleBuffs4229938"`
|
||
ResidentBuildWebBuffs4229938 []uint32 `json:"residentBuildWebBuffs4229938"`
|
||
GrappleRearmDelayMs int32 `json:"grappleRearmDelayMs"`
|
||
ForbidStates []uint32 `json:"forbidStates"`
|
||
FeisuoAbilityLimitId uint32 `json:"feisuoAbilityLimitId"`
|
||
AssassinationAbilityLimitId uint32 `json:"assassinationAbilityLimitId"`
|
||
// 是否下发暗杀能力门。关掉即回滚(HUD 无暗杀提示)。
|
||
PushAssassinationAbilityGate bool `json:"pushAssassinationAbilityGate"`
|
||
KillingAbilityLimitId uint32 `json:"killingAbilityLimitId"`
|
||
KillingSpiritId uint32 `json:"killingSpiritId"`
|
||
// 是否下发璎珑跑酷门。关掉即回滚(回到只有基础爬墙跑/空中冲刺)。
|
||
PushKillingAbilityGate bool `json:"pushKillingAbilityGate"`
|
||
// 是否配置了任何「跑酷状态 → 门」映射。空字典时整个 handler 分支直接跳过(零开销)。
|
||
HasParkourStateGates bool `json:"hasParkourStateGates"`
|
||
// 跑酷门是否在离开状态时撤回。"onLeave" = 严格跟状态;其余(默认 "session")= 只发不撤。
|
||
// 见 gameplay.webTraversal.parkourStateGateRelease 的注释(瞬时态下 onLeave 会抖动到不可用)。
|
||
ReleaseParkourGatesOnLeave bool `json:"releaseParkourGatesOnLeave"`
|
||
// 飞索 + 暗杀两张能力门,一起通过 SyncPaokuLimitChange 下发。
|
||
AbilityLimitIds []uint32 `json:"abilityLimitIds"`
|
||
// 是否下发原生飞索能力门。关掉即回滚(回到只有 buff、没有 C 键白圈的状态)。
|
||
PushFeisuoAbilityGate bool `json:"pushFeisuoAbilityGate"`
|
||
//
|
||
// 是否回应蹲伏暗杀裁决(ReportCanAssassinateEnemies → SyncEnemyCanAssassinate)。
|
||
// 关掉即回滚到「HUD 没有暗杀提示」的状态。
|
||
//
|
||
AnswerCrouchAssassination bool `json:"answerCrouchAssassination"`
|
||
//
|
||
// ★ 主动播种 SyncEnemyCanAssassinate —— 不等客户端上报(硬规则 192)。
|
||
// 客户端的候选筛选是自举死锁:PreCheckCanAss 要求目标
|
||
// BattleDataModule.canAssassinate(0xB1) == true,而它只能由这条 S2C 写入;
|
||
// 这条 S2C 名义上又是 ReportCanAssassinateEnemies 的回应,上报却必须先过
|
||
// canAssassinate。不主动播种 ⇒ 循环永远启动不了。
|
||
//
|
||
PushAssassinationSeed bool `json:"pushAssassinationSeed"`
|
||
// 播种粗筛半径(米)。
|
||
AssassinationSeedRadiusMeters float32 `json:"assassinationSeedRadiusMeters"`
|
||
// 播种扫描间隔(毫秒)。
|
||
AssassinationSeedIntervalMs int32 `json:"assassinationSeedIntervalMs"`
|
||
// Resident build/web buffs, published only when the config keeps them on.
|
||
// These carry real damage bonuses but one of them is the only non-hidden entry in the
|
||
// whole capability set, which is what puts a permanent icon on the HUD.
|
||
ResidentBuildBuffs []uint32 `json:"residentBuildBuffs"`
|
||
// Capability buffs every controllable spirit gets, protagonists included.
|
||
// See gameplay.webTraversal.commonCapabilityBuffIds.
|
||
CommonCapabilityBuffIds []uint32 `json:"commonCapabilityBuffIds"`
|
||
InitialCapabilityBuffIds []uint32 `json:"initialCapabilityBuffIds"`
|
||
FemaleCapabilityBuffIds []uint32 `json:"femaleCapabilityBuffIds"`
|
||
}
|
||
|
||
const (
|
||
WebTraversal_SwingBuff4229938 uint32 = 52_853_761
|
||
WebTraversal_WallRushBuff4229938 uint32 = 52_853_762
|
||
WebTraversal_GrappleDiveDamageBuff4229938 uint32 = 52_959_114
|
||
WebTraversal_DefaultFeisuoAbilityLimitId uint32 = 3013
|
||
WebTraversal_DefaultAssassinationAbilityLimitId uint32 = 5051
|
||
WebTraversal_DefaultKillingAbilityLimitId uint32 = 3040
|
||
WebTraversal_DefaultKillingSpiritId uint32 = 15021040
|
||
)
|
||
|