package methods // // IGameGMToClient.SyncRunGmUtils(String methodName, List<String> args) — methodId 66042045. // S2C: asks the client to execute a local GM utility command by name — the same native entry // point the in-game ALT+F1 admin console drives (L50Game.dll: // RunGmUtils_Public_Static_String_String_List_1_String_0 / RunGmUtilsCommand_Private_Static_… // resolves the method by name and invokes it with the string args). Execution happens entirely // client-side, so locally-spawned units get the full AI / hit-reaction / stagger stack that // server-authored packets cannot drive. // Field order matches the IL2CPP method signature: string first, then the string list. // // // IGameSceneToClient.SyncDoGmCommand(String command, String[] args) — methodId 68373443. // S2C on the main scene interface (same one as SyncUnitOccur): asks the client to execute a // GM command locally. Implemented by LX6.Service.GameSceneToClientImpl (iFix-proxy virtual in // L50Game.dll), which parses the command line (ParseSpoonLines) and runs it through the local // GM system. Second candidate channel besides SyncRunGmUtils(66042045). // Field order matches the IL2CPP signature: string first, then the string array. // // --------------------------------------------------------------------------- // 7-bit variants. // // Every other DTO in this protocol encodes collection counts as a biased 7-bit // varint — that is literally the default of UxCollectionAttribute.Count, and // lua/LuaGen/AutoGen/RPCSerializeAuto.lua writes list-of-string fields with // Base.WriteList7Bit (540 uses vs 179 plain WriteList). The two DTOs above were // originally written with an unsourced Int32 count, which is why the client kept // receiving an empty first arg and falling back to its default NPC regardless of // the id we sent. These variants exist so both encodings can be probed in one run. // ---------------------------------------------------------------------------