-- IDs are injected from the current revision's captured role configuration. -- Read config rows only, four traits per heartbeat, never during Battle. do local function capture() local s=_G.__gacCwTraitRows1 or {index=1};_G.__gacCwTraitRows1=s if s.done then return end local ids=_G.__gacCwTraitCaptureIDs if type(ids)~='table'or #ids>256 then error('bounded captured trait ID plan required')end local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) local manager=CS.RPG.Client.GlobalVars.s_GamePhaseManager local phase=manager and typeof(CS.RPG.Client.GamePhaseManager):GetField('_CurrentPhase',flags):GetValue(manager) if not phase or typeof(CS.RPG.Client.BattleGamePhase):IsInstanceOfType(phase)then return end local module=CS.RPG.Client.GlobalVars.s_ModuleManager.GridFightModule local log=function(x)CS.UnityEngine.Debug.Log('[GAC_CW_TRAIT_ROWS] '..tostring(x))end local function rows(label,obj) local fs=obj:GetType():GetFields(flags) for i=0,math.min(fs.Length-1,47)do local f=fs[i] if not f.IsStatic and f.FieldType.FullName:find('Row$')then local row=f:GetValue(obj);if row then local encoded=CS.Newtonsoft.Json.JsonConvert.SerializeObject(row);if #encoded>32768 then error('trait row bound')end;log(label..' '..encoded)end end end end for _=1,4 do if s.index>#ids then s.done=true;log('END');return end local id=ids[s.index];s.index=s.index+1 local config=module:GetTraitConfig(id) if config then rows('BASE',config) local f=config:GetType():GetField('_layerConfigs',flags);local layers=f and f:GetValue(config) if layers then if layers.Count>32 then error('trait layer bound')end;for i=0,layers.Count-1 do rows('LAYER',layers[i])end end local effects=config.TraitEffectList if effects then for i=0,math.min(effects.Length-1,15)do local effect=module:GetTraitEffectConfig(effects[i]);if effect then rows('EFFECT',effect)end end end else log('MISSING '..id)end end end;local ok,e=pcall(capture);if not ok then _G.__gacCwTraitRows1={done=true};CS.UnityEngine.Debug.Log('[GAC_CW_TRAIT_ROWS] ERROR '..tostring(e))end end