Files
Ananta-ps/internal/gameplay/character_capabilities.go

82 lines
4.7 KiB
Go

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
)