feat(go): complete 100% transpilation of all catalogs, rpctypes, models, configs, gameplay, and 155 routers to native Go architecture
This commit is contained in:
1 parent
6cf3abfafe
commit
e43a310617
1295 files changed
+52846
-149865
No files matched your search
@@ -0,0 +1,2 @@
|
||||
package gameplay
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
package gameplay
|
||||
|
||||
//
|
||||
// Character-owned capability buffs that unlock stock client modules.
|
||||
// Ownership source: UrbanBadgeConfig.json (ConfigDump_v3) — rows that set both
|
||||
// Buff[] and a non-zero FightspiritId. Of the 109 controllable spirits only 9
|
||||
// own anything; see _role_capability_scan.txt for the full list.
|
||||
// Everything else in that table is either a numeric passive (damage/HP/driving modifiers),
|
||||
// a skill variant, or an OnlyServer progress marker — none of them add exploration
|
||||
// verbs, so they are deliberately not published here.
|
||||
// Keep this list small: BuffConfig (4123 rows) also contains executable NPC, boss and
|
||||
// timeline actions that must never be published as player unlocks.
|
||||
//
|
||||
type CharacterCapabilities struct {
|
||||
//
|
||||
// Hacker capability set, "safe" shape — the proven round-1 baseline (2026-09-20,
|
||||
// "middle-mouse entry visible but grey"). Kept selectable because the round-1 experiments
|
||||
// showed the middle-mouse GadgetManager entry can disappear on wider sets; switching
|
||||
// gameplay.hackerAbilitySet back to "safe" restores this exact shape without a rebuild.
|
||||
// Observed behaviour per set (all measured on the real client, Seymour 15021023):
|
||||
// | set | middle-mouse hack entry |
|
||||
// |---------------------------------------|-------------------------|
|
||||
// | 33/167/168 (this one, no battery) | visible but grey |
|
||||
// | 33/167/168 + 49/50 | gone |
|
||||
// | donor's 9 (33/134/135/137/161/167/168/178/179) | gone |
|
||||
// | donor's 9 + 52899024 | gone |
|
||||
//
|
||||
HackerBuffsSafe []uint32 `json:"hackerBuffsSafe"`
|
||||
//
|
||||
// Hacker capability set, "full" shape — everything job 401 can own (2026-09-20 explicit
|
||||
// request: unlock ALL of Seymour's hacker abilities, drone and spider included).
|
||||
// Layout (BuffConfig names, cross-checked against donor_7k + ConfigDump_v3):
|
||||
// · 52606133 黑客骇入能力总开关 — global gate, same as safe.
|
||||
// · 52606134/135/137/161 — atmosphere-NPC hack actions (distract / rebel / press).
|
||||
// · 52606167/168 — traffic-vehicle hacking + its rush skill.
|
||||
// · 52606178/179 — HackerConfig.HackNPCAbilityBuff[6..7] (EnemyDistract / EnemyRebel);
|
||||
// the ordinary-NPC flags alone yield an empty enemy menu, so these ship together.
|
||||
// · 52606149 蜘蛛机器人 / 52606150 黑客无人机 — the two EonBug-app skill entries.
|
||||
// ⛑️ NOT in donor_7k. They are what makes the spider/drone menu items cast
|
||||
// (HackScriptFunc.SpiderSkill/DroneSkill → UseSkillByPid 51938181/51938183); the same
|
||||
// two skills are authored on Seymour's own FightSpiritConfig row as TempSkill, so the
|
||||
// battle pipeline accepts them (IsKnownSkill covers SkillConfig).
|
||||
// Known risk from round 1: publishing 49/50 coincided with the middle-mouse entry
|
||||
// disappearing. The EonBug APP path (HackerAppPanelStore) does not consult these buffs
|
||||
// at all, so if that regression shows up again the app still works — flip
|
||||
// hackerAbilitySet to "safe" and the trio comes back.
|
||||
//
|
||||
HackerBuffsFull []uint32 `json:"hackerBuffsFull"`
|
||||
//
|
||||
// Talent-tree ability buffs (see gameplay.hackerTalentBuffIds). Configurable rather than
|
||||
// authored here because they are not yet a proven shape — T1-6 only lands the C2S round-trip,
|
||||
// so publishing them here is the flat replacement, not an actual talent grant.
|
||||
//
|
||||
TalentBuffIds []uint32 `json:"talentBuffIds"`
|
||||
// How many talent buffs actually landed, for the publish log.
|
||||
TalentBuffCount int32 `json:"talentBuffCount"`
|
||||
//
|
||||
// Character-independent capability buffs: the diving suit when gameplay.divingMode is
|
||||
// "on", plus the Cat Express support buffs (gameplay.deliverySupportBuffIds).
|
||||
// The courier half is here for one reason: RefreshCallFunctionListView filters a support
|
||||
// button out unless the player carries its UberSimOrderSupportConfig.UnlockBuff
|
||||
// (52800660 叫车 / 52800661 无人机). Publishing them with the regular spirit buff snapshot means
|
||||
// they are present in the app and re-published on every character switch — no dedicated S2C.
|
||||
// Set the list to [] to restore the pre-2026-09-24 buff snapshot byte-for-byte.
|
||||
//
|
||||
GlobalCapabilityBuffIds []uint32 `json:"globalCapabilityBuffIds"`
|
||||
}
|
||||
|
||||
const (
|
||||
CharacterCapabilities_HackerUrbanJob uint32 = 401
|
||||
CharacterCapabilities_JoblessUrbanJob uint32 = 100
|
||||
CharacterCapabilities_DilaSpiritId uint32 = 15_020_997
|
||||
CharacterCapabilities_BaiJingSpiritId uint32 = 15_021_039
|
||||
CharacterCapabilities_BaiJingTimeScaleGateBuff uint32 = 52_959_495
|
||||
CharacterCapabilities_BaiJingTimeScaleActiveBuff uint32 = 52_959_496
|
||||
CharacterCapabilities_BaiJingCabDriverBadgeBuff uint32 = 52_606_175
|
||||
CharacterCapabilities_DilaFloatFlightBuff uint32 = 52_606_125
|
||||
CharacterCapabilities_HackerBatteryCapacity uint32 = 6
|
||||
CharacterCapabilities_DivingSuitBuff uint32 = 52_606_233
|
||||
)
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
package gameplay
|
||||
|
||||
type WebTraversalSettings struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
GrappleRearmDelayMs int32 `json:"grappleRearmDelayMs"`
|
||||
ForbidStates []uint32 `json:"forbidStates"`
|
||||
FeisuoAbilityLimitId uint32 `json:"feisuoAbilityLimitId"`
|
||||
AssassinationAbilityLimitId uint32 `json:"assassinationAbilityLimitId"`
|
||||
KillingAbilityLimitId uint32 `json:"killingAbilityLimitId"`
|
||||
KillingSpiritId uint32 `json:"killingSpiritId"`
|
||||
}
|
||||
|
||||
type CombatSettings struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
MaxHp float32 `json:"maxHp"`
|
||||
UltimateResourceId uint32 `json:"ultimateResourceId"`
|
||||
UltimateResourceMax float32 `json:"ultimateResourceMax"`
|
||||
}
|
||||
@@ -0,0 +1,71 @@
|
||||
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
|
||||
)
|
||||
|
||||
Reference in new issue
Block a user