Files

20 lines
1.3 KiB
Go

package methods
//
// SyncTaskRoleTeam (64534724) — the server's handle on the character wheel / Z rotation list.
// Signature (dump.cs:1732654):
// void SyncTaskRoleTeam(uint[] roleTeam, uint[] enableRoleIds, uint tipRoleId, bool enableSwitch)
// Why this exists: pressing Z sends nothing at all (measured — 0 packets across a whole session),
// so the rotation list is client-side only. In lua the arrival path is
// SpiritManager.lua:233 -> GameToClientImpl.lua:2311 and it fills gSpiritManager.taskRoleTeam
// from enableRoleIds; the retail server never called it, which is why the client has always used
// its own fallback (the FightSpiritConfig rows with CanJoin=true — exactly the 15 the player sees).
// Payload notes: four bare arguments, so Inline is mandatory (no 0xFF/0x00 envelope). Both arrays
// are plain uint lists and therefore use the default Int7 count like every other List<uint>
// in these contracts (see Auto/Client4229938Contracts.Auto.cs InstalledApps).
// ⚠️ Safety: this is a standalone notify, never part of the login payload. Sending nothing is the
// default (see RosterSettings.SwitchableRoles) precisely so an encoding mistake here can brick
// nothing until the config opts in — unlike adding a field to the login contract, which did take
// the client down once. Do not move this into the login payload.
//