-- Narrow metadata/read-only scalar state from the already resolved CW panel. -- At most eight members per heartbeat; no assembly scan or gameplay calls. do local function capture() local s=_G.__gacCwBookActivityMetadata1 or {index=0,target=1};_G.__gacCwBookActivityMetadata1=s if s.done then return end local function log(v)CS.UnityEngine.Debug.Log('[GAC_CW_BOOK_ACTIVITY] '..tostring(v))end local ok,err=pcall(function() if not s.objects then local class=package.loaded['Ui.DailyMission.Rogue.GridFight.HandbookRogueGridFightTabItem'] local constants for i=1,16 do local n,v=debug.getupvalue(class._on_click_go,i);if not n then break end;if n=='_GRID_FIGHT_CONSTANTS'then constants=v;break end end local panel=CS.RPG.Client.GlobalVars.s_ModuleManager.ActivityModule:GetPanelData(constants.ActivityID) if not panel or not panel.StateData then error('Resolved CW panel/state unavailable')end s.objects={panel.StateData,panel};s.flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60) end local value=s.objects[s.target] if not s.members then local t=value:GetType();s.members=t:GetFields(s.flags) log('TYPE '..t.FullName..' FIELDS '..s.members.Length) end for i=s.index,math.min(s.index+7,s.members.Length-1)do local m=s.members[i];local v=m:GetValue(value) local text=v==nil and 'nil' or (m.FieldType.IsPrimitive or m.FieldType.IsEnum or m.FieldType.FullName=='System.String') and tostring(v) or tostring(m.FieldType.FullName) log('FIELD '..m.Name..' TYPE '..m.FieldType.FullName..' VALUE '..text) end s.index=s.index+8 if s.index>=s.members.Length or s.index>=64 then s.members=nil;s.index=0;s.target=s.target+1;if s.target>#s.objects then s.done=true;log('END')end end end) if not ok then s.done=true;log('ERROR '..tostring(err))end end;capture()end