-- Function to return a table of fields and their offsets for the specified class name -- params: -- className: name of the class to get a structure definition for -- namespace (OPTIONAL): namespace of the class to get a structure definition for -- img (OPTIONAL): mono image in which to search for class, speeds up the process -- static (OPTIONAL): set to true if you want static fields -- Returns table setup like this: -- k: 'field name', v: { offset, CE vartype, mono vartype } -- Get values like: fields["fieldName"][1] for offset function getMonoFields(className, nameSpace, img, static) nameSpace = type(nameSpace) == 'string' and nameSpace or '' img = type(img) == 'number' and img or nil static = static and true or false local searchslow = className:find("+") ~= nil local classId if img then if searchslow then classId = mono_image_findClassSlow(img, nameSpace, className) else classId = mono_image_findClass(img, nameSpace, className) end else classId = mono_findClass(nameSpace, className) end if classId==nil or classId==0 then return nil end local fields=mono_class_enumFields(classId,true,true) local tFields = {} for i=1, #fields do if fields[i].isStatic == static and not fields[i].isConst then local fname = fields[i].name local foffset = fields[i].offset local fmonotype = fields[i].monotype local fvartype if _G.libmono then -- new functions in CE 7.6+ fvartype = mono_class_isEnum(mono_field_getClass( fields[i].field )) and vtDword or monoTypeToVarType(fmonotype) else fvartype = monoTypeToVarType(fmonotype) end tFields[fname] = {foffset, fvartype, fmonotype} end end if next(tFields) == nil then tFields = nil end -- nil on empty table return tFields end -- ORIGINAL FUNCTION: --function to return a table of fields and their offsets for the specified class name --params: -- namespace: namespace of the class to get a structure definition for -- className: name of the class to get a structure definition for -- Get values like: fields["fieldName"] -- from: https://www.cheatengine.org/forum/viewtopic.php?t=608935 --function getMonoFields(namespace, className) -- local classId = mono_findClass(namespace, className) -- local struct = monoform_exportStructInternal(createStructure(''), classId, -- true --[[recursive]], false --[[not static]], {'some struct map thing'}, false --[[not global]]) -- -- local fields = {} -- for i=0, struct.Count-1 do -- local e = struct.getElement(i) -- fields[e.name] = e.offset -- end -- return fields --end