-- Only the owned single-banner tab: bounded visual hierarchy/binder read. do local function capture() local s=_G.__gacOwnedPrefabTree1 or {queue={},index=1,started=false};_G.__gacOwnedPrefabTree1=s if s.done then return end local log=function(v)CS.UnityEngine.Debug.Log('[GAC_OWNED_TREE] '..tostring(v))end if not s.started then local page=_G.__gacWarpCreateTrace1 and _G.__gacWarpCreateTrace1.page local state=_G.__GAC_GACHA_PRESENTATION_STATE if not page or not state then return end for _,tab in pairs(page._gacha_tab_items or {})do local pool=tab._gacha_pool_data if pool and state.installed[pool.GachaID] and state.installed[pool.GachaID].pool==pool then local content=tab._binder.node_content s.queue={{t=content.transform,path='content',depth=0}};s.started=true for k,v in pairs(tab._binder)do log('BINDER '..tostring(k)..' '..type(v))end break end end if not s.started then return end end for n=1,12 do local node=s.queue[s.index] if not node then s.done=true;log('END');return end s.index=s.index+1 local t=node.t local image=t.gameObject:GetComponent(typeof(CS.UnityEngine.UI.Image)) local text=t.gameObject:GetComponent(typeof(CS.RPG.Client.LocalizedText)) log(node.path..' active='..tostring(t.gameObject.activeSelf)..' image='..tostring(image and image.sprite and image.sprite.name)..' text='..tostring(text and text.text)) if node.depth<5 then for i=0,math.min(t.childCount-1,31)do if #s.queue>=192 then break end local child=t:GetChild(i) if child.name~='GaCCharacterBanner'then s.queue[#s.queue+1]={t=child,path=node.path..'/'..child.name,depth=node.depth+1}end end end end end local ok,e=pcall(capture);if not ok then _G.__gacOwnedPrefabTree1={done=true};CS.UnityEngine.Debug.Log('[GAC_OWNED_TREE] ERROR '..tostring(e))end end