diff --git a/src/v2_types/mod.rs b/src/v2_types/mod.rs index 9d68a1d..2b018b8 100644 --- a/src/v2_types/mod.rs +++ b/src/v2_types/mod.rs @@ -22,39 +22,133 @@ pub struct VTbl(NonNull<()>); impl VTbl {} +bitflags! { + #[repr(C)] + pub struct EPropertyFlags: u64 { + const None = 0x0000000000000000; + const Edit = 0x0000000000000001; + const ConstParm = 0x0000000000000002; + const BlueprintVisible = 0x0000000000000004; + const ExportObject = 0x0000000000000008; + const BlueprintReadOnly = 0x0000000000000010; + const Net = 0x0000000000000020; + const EditFixedSize = 0x0000000000000040; + const Parm = 0x0000000000000080; + const OutParm = 0x0000000000000100; + const ZeroConstructor = 0x0000000000000200; + const ReturnParm = 0x0000000000000400; + const DisableEditOnTemplate = 0x0000000000000800; + const Transient = 0x0000000000002000; + const Config = 0x0000000000004000; + const DisableEditOnInstance = 0x0000000000010000; + const EditConst = 0x0000000000020000; + const GlobalConfig = 0x0000000000040000; + const InstancedReference = 0x0000000000080000; + const DuplicateTransient = 0x0000000000200000; + const SaveGame = 0x0000000001000000; + const NoClear = 0x0000000002000000; + const ReferenceParm = 0x0000000008000000; + const BlueprintAssignable = 0x0000000010000000; + const Deprecated = 0x0000000020000000; + const IsPlainOldData = 0x0000000040000000; + const RepSkip = 0x0000000080000000; + const RepNotify = 0x0000000100000000; + const Interp = 0x0000000200000000; + const NonTransactional = 0x0000000400000000; + const EditorOnly = 0x0000000800000000; + const NoDestructor = 0x0000001000000000; + const AutoWeak = 0x0000004000000000; + const ContainsInstancedReference = 0x0000008000000000; + const AssetRegistrySearchable = 0x0000010000000000; + const SimpleDisplay = 0x0000020000000000; + const AdvancedDisplay = 0x0000040000000000; + const Protected = 0x0000080000000000; + const BlueprintCallable = 0x0000100000000000; + const BlueprintAuthorityOnly = 0x0000200000000000; + const TextExportTransient = 0x0000400000000000; + const NonPIEDuplicateTransient = 0x0000800000000000; + const ExposeOnSpawn = 0x0001000000000000; + const PersistentInstance = 0x0002000000000000; + const UObjectWrapper = 0x0004000000000000; + const HasGetValueTypeHash = 0x0008000000000000; + const NativeAccessSpecifierPublic = 0x0010000000000000; + const NativeAccessSpecifierProtected = 0x0020000000000000; + const NativeAccessSpecifierPrivate = 0x0040000000000000; + const SkipSerialization = 0x0080000000000000; + } +} + +bitflags! { + #[repr(C)] + pub struct EFunctionFlags: u32 { + const None = 0x00000000; + const Final = 0x00000001; + const RequiredAPI = 0x00000002; + const BlueprintAuthorityOnly = 0x00000004; + const BlueprintCosmetic = 0x00000008; + const Net = 0x00000040; + const NetReliable = 0x00000080; + const NetRequest = 0x00000100; + const Exec = 0x00000200; + const Native = 0x00000400; + const Event = 0x00000800; + const NetResponse = 0x00001000; + const Static = 0x00002000; + const NetMulticast = 0x00004000; + const UbergraphFunction = 0x00008000; + const MulticastDelegate = 0x00010000; + const Public = 0x00020000; + const Private = 0x00040000; + const Protected = 0x00080000; + const Delegate = 0x00100000; + const NetServer = 0x00200000; + const HasOutParms = 0x00400000; + const HasDefaults = 0x00800000; + const NetClient = 0x01000000; + const DLLImport = 0x02000000; + const BlueprintCallable = 0x04000000; + const BlueprintEvent = 0x08000000; + const BlueprintPure = 0x10000000; + const EditorOnly = 0x20000000; + const Const = 0x40000000; + const NetValidate = 0x80000000; + const AllFlags = 0xFFFFFFFF; + } +} + bitflags! { #[repr(C)] pub struct EObjectFlags: u32 { - const RF_NoFlags = 0x00000000; - const RF_Public = 0x00000001; - const RF_Standalone = 0x00000002; - const RF_MarkAsNative = 0x00000004; - const RF_Transactional = 0x00000008; - const RF_ClassDefaultObject = 0x00000010; - const RF_ArchetypeObject = 0x00000020; - const RF_Transient = 0x00000040; - const RF_MarkAsRootSet = 0x00000080; - const RF_TagGarbageTemp = 0x00000100; - const RF_NeedInitialization = 0x00000200; - const RF_NeedLoad = 0x00000400; - const RF_KeepForCooker = 0x00000800; - const RF_NeedPostLoad = 0x00001000; - const RF_NeedPostLoadSubobjects = 0x00002000; - const RF_NewerVersionExists = 0x00004000; - const RF_BeginDestroyed = 0x00008000; - const RF_FinishDestroyed = 0x00010000; - const RF_BeingRegenerated = 0x00020000; - const RF_DefaultSubObject = 0x00040000; - const RF_WasLoaded = 0x00080000; - const RF_TextExportTransient = 0x00100000; - const RF_LoadCompleted = 0x00200000; - const RF_InheritableComponentTemplate = 0x00400000; - const RF_DuplicateTransient = 0x00800000; - const RF_StrongRefOnFrame = 0x01000000; - const RF_NonPIEDuplicateTransient = 0x02000000; - const RF_Dynamic = 0x04000000; - const RF_WillBeLoaded = 0x08000000; - const RF_HasExternalPackage = 0x10000000; + const NoFlags = 0x00000000; + const Public = 0x00000001; + const Standalone = 0x00000002; + const MarkAsNative = 0x00000004; + const Transactional = 0x00000008; + const ClassDefaultObject = 0x00000010; + const ArchetypeObject = 0x00000020; + const Transient = 0x00000040; + const MarkAsRootSet = 0x00000080; + const TagGarbageTemp = 0x00000100; + const NeedInitialization = 0x00000200; + const NeedLoad = 0x00000400; + const KeepForCooker = 0x00000800; + const NeedPostLoad = 0x00001000; + const NeedPostLoadSubobjects = 0x00002000; + const NewerVersionExists = 0x00004000; + const BeginDestroyed = 0x00008000; + const FinishDestroyed = 0x00010000; + const BeingRegenerated = 0x00020000; + const DefaultSubObject = 0x00040000; + const WasLoaded = 0x00080000; + const TextExportTransient = 0x00100000; + const LoadCompleted = 0x00200000; + const InheritableComponentTemplate = 0x00400000; + const DuplicateTransient = 0x00800000; + const StrongRefOnFrame = 0x01000000; + const NonPIEDuplicateTransient = 0x02000000; + const Dynamic = 0x04000000; + const WillBeLoaded = 0x08000000; + const HasExternalPackage = 0x10000000; } } @@ -603,7 +697,7 @@ pub mod traits { #[const_trait] pub trait UFunctionTrait: ~const AsUObject { - fn function_flags(&self) -> &u32 { + fn function_flags(&self) -> &super::EFunctionFlags { unsafe { &*self.as_uobject().raw_ptr().offset(144).cast() } } fn rep_offset(&self) -> &u16 { @@ -640,7 +734,7 @@ pub mod traits { fn element_size(&self) -> &i32 { unsafe { &*self.as_uobject().raw_ptr().offset(52).cast() } } - fn property_flags(&self) -> &u64 { + fn property_flags(&self) -> &super::EPropertyFlags { unsafe { &*self.as_uobject().raw_ptr().offset(56).cast() } } fn rep_index(&self) -> &i16 {