Files
GaCy-GO/tools/cw_bonfire_live_pending.lua
2026-10-28 18:54:43 +07:00

41 lines
2.4 KiB
Lua

-- Read only the active dialog's pending instance, not all runtime types.
do local function capture()
if _G.__gacBonfireLivePending1 then return end
local page=CS.RPG.Client.GlobalVars.s_UIManager:GetPageByName('GridFightBonfireDialog')
local lua=page and page.LuaTable;local action=lua and lua._pending_action
if not action then
local session=CS.RPG.Client.GlobalVars.s_ModuleManager.GridFightModule.CurGameSession
local manager=session and session.PrepPendingAction
if manager then
local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60)
local f=manager:GetType():GetField('_ActionQueue',flags);local queue=f and f:GetValue(manager)
if queue and queue.Count<=16 then
for i=0,queue.Count-1 do local v=queue[i];if v and v:GetType().Name:find('Bonfire',1,true)then action=v;break end end
end
end
if manager and not _G.__gacBonfireManagerMetadata1 then
_G.__gacBonfireManagerMetadata1=true
local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60)
local fs=manager:GetType():GetFields(flags)
for i=0,math.min(fs.Length-1,31)do local f=fs[i];local v=f:GetValue(manager);CS.UnityEngine.Debug.Log('[GAC_BONFIRE_PENDING] MANAGER '..f.Name..' '..f.FieldType.FullName..' '..tostring(v))end
end
if not action then return end
end
_G.__gacBonfireLivePending1=true
local log=function(v)CS.UnityEngine.Debug.Log('[GAC_BONFIRE_PENDING] '..tostring(v))end
local flags=CS.System.Enum.ToObject(typeof(CS.System.Reflection.BindingFlags),60)
local t=action:GetType();log('TYPE '..t.FullName);log('HAS_SELECTED '..tostring(action.HasSelected))
for _,name in ipairs({'get_HasSelected','Sync','TakeReward','SelectOption','HealHp'})do
local ms=t:GetMethods(flags)
for i=0,math.min(ms.Length-1,127)do local m=ms[i];if m.Name==name then log('METHOD '..tostring(m)..' HANDLE '..tostring(m.MethodHandle.Value))end end
end
local fs=t:GetFields(flags)
for i=0,math.min(fs.Length-1,31)do
local f=fs[i];local v=f:GetValue(action);log('FIELD '..f.Name..' '..f.FieldType.FullName..' '..tostring(v))
if f.FieldType.IsEnum then
local names=CS.System.Enum.GetNames(f.FieldType);local values=CS.System.Enum.GetValues(f.FieldType)
for j=0,math.min(names.Length-1,15)do log('ENUM '..names[j]..' '..CS.System.Convert.ToInt32(values:GetValue(j)))end
end
end
end local ok,e=pcall(capture);if not ok then _G.__gacBonfireLivePending1=true;CS.UnityEngine.Debug.Log('[GAC_BONFIRE_PENDING] ERROR '..tostring(e))end end