├── .clang-format ├── .git-blame-ignore-revs ├── .gitattributes ├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ ├── docs_report.md │ ├── feature_request.md │ └── upgrade_problem.md ├── pull_request_template.md └── workflows │ ├── UpdateUESubmodule.yml │ ├── experimental.yml │ ├── msvc_build_ue4ss.yml │ ├── pushdocs.yml │ ├── release.yml │ └── ue4ss-ci.yml ├── .gitignore ├── .gitmodules ├── CNAME ├── LICENSE ├── README.md ├── UE4SS ├── generated_include │ └── MacroSetter.hpp ├── generated_src │ └── version.cache ├── include │ ├── Common.hpp │ ├── CrashDumper.hpp │ ├── ExceptionHandling.hpp │ ├── GUI │ │ ├── BPMods.hpp │ │ ├── Console.hpp │ │ ├── ConsoleOutputDevice.hpp │ │ ├── DX11.hpp │ │ ├── Dumpers.hpp │ │ ├── GLFW3_OpenGL3.hpp │ │ ├── GUI.hpp │ │ ├── GUITab.hpp │ │ ├── ImGuiUtility.hpp │ │ ├── LiveView.hpp │ │ ├── LiveView │ │ │ └── Filter │ │ │ │ ├── ClassNamesFilter.hpp │ │ │ │ ├── DefaultObjectsOnly.hpp │ │ │ │ ├── FunctionParamFlags.hpp │ │ │ │ ├── HasProperty.hpp │ │ │ │ ├── HasPropertyType.hpp │ │ │ │ ├── IncludeDefaultObjects.hpp │ │ │ │ ├── InstancesOnly.hpp │ │ │ │ ├── NonInstancesOnly.hpp │ │ │ │ └── SearchFilter.hpp │ │ ├── SearcherWidget.hpp │ │ ├── UFunctionCallerWidget.hpp │ │ └── Windows.hpp │ ├── LuaCustomMemberFunctions.hpp │ ├── LuaLibrary.hpp │ ├── LuaScriptMemoryAccess.hpp │ ├── LuaTests.hpp │ ├── LuaType │ │ ├── LuaAActor.hpp │ │ ├── LuaCustomProperty.hpp │ │ ├── LuaFName.hpp │ │ ├── LuaFOutputDevice.hpp │ │ ├── LuaFSoftObjectPath.hpp │ │ ├── LuaFString.hpp │ │ ├── LuaFText.hpp │ │ ├── LuaFURL.hpp │ │ ├── LuaFWeakObjectPtr.hpp │ │ ├── LuaModRef.hpp │ │ ├── LuaTArray.hpp │ │ ├── LuaTMap.hpp │ │ ├── LuaTSoftClassPtr.hpp │ │ ├── LuaUClass.hpp │ │ ├── LuaUEnum.hpp │ │ ├── LuaUFunction.hpp │ │ ├── LuaUInterface.hpp │ │ ├── LuaUObject.hpp │ │ ├── LuaUScriptStruct.hpp │ │ ├── LuaUStruct.hpp │ │ ├── LuaUWorld.hpp │ │ ├── LuaXArrayProperty.hpp │ │ ├── LuaXBoolProperty.hpp │ │ ├── LuaXEnumProperty.hpp │ │ ├── LuaXFieldClass.hpp │ │ ├── LuaXInterfaceProperty.hpp │ │ ├── LuaXObjectProperty.hpp │ │ ├── LuaXProperty.hpp │ │ └── LuaXStructProperty.hpp │ ├── Mod │ │ ├── CppMod.hpp │ │ ├── CppUserModBase.hpp │ │ ├── LuaMod.hpp │ │ └── Mod.hpp │ ├── ObjectDumper │ │ └── ObjectToString.hpp │ ├── SDKGenerator │ │ ├── Common.hpp │ │ ├── Generator.hpp │ │ ├── JSONDumper.hpp │ │ ├── TMapOverrideGen.hpp │ │ └── UEHeaderGenerator.hpp │ ├── SettingsManager.hpp │ ├── Signatures.hpp │ ├── UE4SSProgram.hpp │ ├── USMapGenerator │ │ ├── Generator.hpp │ │ └── writer.h │ ├── UnrealCustom │ │ └── CustomProperty.hpp │ ├── UnrealDef.hpp │ └── fonts │ │ ├── NOTICE.txt │ │ └── droidsansfallback.cpp ├── proxy_generator │ ├── exports │ │ ├── dwmapi.exports │ │ └── xinput1_3.exports │ ├── main.cpp │ ├── proxy │ │ ├── proxy.rc │ │ └── xmake.lua │ └── xmake.lua ├── src │ ├── CrashDumper.cpp │ ├── GUI │ │ ├── BPMods.cpp │ │ ├── Console.cpp │ │ ├── ConsoleOutputDevice.cpp │ │ ├── DX11.cpp │ │ ├── Dumpers.cpp │ │ ├── FaSolid900.hpp │ │ ├── GLFW3_OpenGL3.cpp │ │ ├── GUI.cpp │ │ ├── GUITab.cpp │ │ ├── ImGuiUtility.cpp │ │ ├── LiveView.1.PVS-Studio.cfg │ │ ├── LiveView.cpp │ │ ├── Roboto.hpp │ │ ├── SearcherWidget.cpp │ │ ├── UFunctionCallerWidget.cpp │ │ └── Windows.cpp │ ├── LuaLibrary.cpp │ ├── LuaType │ │ ├── LuaAActor.cpp │ │ ├── LuaCustomProperty.cpp │ │ ├── LuaFName.cpp │ │ ├── LuaFOutputDevice.cpp │ │ ├── LuaFSoftObjectPath.cpp │ │ ├── LuaFString.cpp │ │ ├── LuaFText.cpp │ │ ├── LuaFURL.cpp │ │ ├── LuaFWeakObjectPtr.cpp │ │ ├── LuaModRef.cpp │ │ ├── LuaTArray.cpp │ │ ├── LuaTMap.cpp │ │ ├── LuaTSoftClassPtr.cpp │ │ ├── LuaUClass.cpp │ │ ├── LuaUEnum.cpp │ │ ├── LuaUFunction.cpp │ │ ├── LuaUInterface.cpp │ │ ├── LuaUObject.cpp │ │ ├── LuaUScriptStruct.cpp │ │ ├── LuaUStruct.cpp │ │ ├── LuaUWorld.cpp │ │ ├── LuaXArrayProperty.cpp │ │ ├── LuaXBoolProperty.cpp │ │ ├── LuaXEnumProperty.cpp │ │ ├── LuaXFieldClass.cpp │ │ ├── LuaXInterfaceProperty.cpp │ │ ├── LuaXObjectProperty.cpp │ │ ├── LuaXProperty.cpp │ │ └── LuaXStructProperty.cpp │ ├── Mod │ │ ├── CppMod.cpp │ │ ├── CppUserModBase.cpp │ │ ├── LuaMod.cpp │ │ └── Mod.cpp │ ├── ObjectDumper │ │ └── ObjectToString.cpp │ ├── SDKGenerator │ │ ├── Common.cpp │ │ ├── Generator.cpp │ │ ├── JSONDumper.cpp │ │ ├── TMapOverrideGen.cpp │ │ └── UEHeaderGenerator.cpp │ ├── SettingsManager.cpp │ ├── Signatures.cpp │ ├── UE4SSProgram.cpp │ ├── USMapGenerator │ │ ├── Generator.cpp │ │ └── LICENSE │ ├── UnrealCustom │ │ └── CustomProperty.cpp │ └── main_ue4ss_rewritten.cpp └── xmake.lua ├── UVTD ├── .clang-format ├── LICENSE ├── README.md ├── include │ └── UVTD │ │ ├── Config.hpp │ │ ├── ConfigUtil.hpp │ │ ├── ExceptionHandling.hpp │ │ ├── Helpers.hpp │ │ ├── MemberVarsDumper.hpp │ │ ├── MemberVarsWrapperGenerator.hpp │ │ ├── SolBindingsGenerator.hpp │ │ ├── Symbols.hpp │ │ ├── TemplateClassParser.hpp │ │ ├── TypeContainer.hpp │ │ ├── UVTD.hpp │ │ ├── UnrealVirtualGenerator.hpp │ │ └── VTableDumper.hpp ├── src │ ├── Config.cpp │ ├── Helpers.cpp │ ├── MemberVarsDumper.cpp │ ├── MemberVarsWrapperGenerator.cpp │ ├── SolBindingsGenerator.cpp │ ├── Symbols.cpp │ ├── TemplateClassParser.cpp │ ├── TypeContainer.cpp │ ├── UVTD.cpp │ ├── UnrealVirtualGenerator.cpp │ ├── VTableDumper.cpp │ └── main.cpp └── xmake.lua ├── assets ├── Changelog.md ├── CustomGameConfigs │ ├── Abiotic Factor │ │ ├── MemberVariableLayout.ini │ │ ├── Readme.md │ │ └── VTableLayout.ini │ ├── Atomic Heart │ │ ├── MemberVariableLayout.ini │ │ └── UE4SS-settings.ini │ ├── Borderlands 3 │ │ ├── UE4SS-settings.ini │ │ └── VTableLayout.ini │ ├── Final Fantasy 7 Rebirth │ │ ├── MemberVariableLayout.ini │ │ ├── UE4SS-settings.ini │ │ ├── UE4SS_Signatures │ │ │ ├── FName_Constructor.lua │ │ │ ├── FText_Constructor.lua │ │ │ ├── GNatives.lua │ │ │ ├── GUObjectArray.lua │ │ │ └── ProcessLocalScriptFunction.lua │ │ └── VTableLayout.ini │ ├── Final Fantasy 7 Remake │ │ ├── MemberVariableLayout.ini │ │ ├── UE4SS-settings.ini │ │ ├── UE4SS_Signatures │ │ │ └── GUObjectArray.lua │ │ └── VTableLayout.ini │ ├── Fuser │ │ └── VTableLayout.ini │ ├── Ghost Wire Tokyo │ │ └── UE4SS_Signatures │ │ │ ├── FName_Constructor.lua │ │ │ ├── FName_ToString.lua │ │ │ ├── GMalloc.lua │ │ │ └── StaticConstructObject.lua │ ├── Kingdom Hearts 3 │ │ ├── MemberVariableLayout.ini │ │ ├── UE4SS-settings.ini │ │ ├── UE4SS_Signatures │ │ │ ├── FName_Constructor.lua │ │ │ ├── FName_ToString.lua │ │ │ └── StaticConstructObject.lua │ │ └── VTableLayout.ini │ ├── Lies of P │ │ ├── UE4SS-settings.ini │ │ └── UE4SS_Signatures │ │ │ ├── FText_Constructor.lua │ │ │ └── StaticConstructObject.lua │ ├── Like a Dragon Ishin! │ │ └── UE4SS_Signatures │ │ │ └── GUObjectArray.lua │ ├── Psychonauts 2 │ │ └── VTableLayout.ini │ ├── Readme.md │ ├── Returnal │ │ └── UE4SS_Signatures │ │ │ ├── FName_Constructor.lua │ │ │ └── FName_ToString.lua │ ├── SCP 5K │ │ ├── Readme.md │ │ └── UE4SS_Signatures │ │ │ ├── FName_Constructor.lua │ │ │ └── FName_ToString.lua │ ├── Satisfactory │ │ └── UE4SS_Signatures │ │ │ └── FName_Constructor.lua │ ├── Split Fiction │ │ ├── MemberVariableLayout.ini │ │ ├── UE4SS-settings.ini │ │ ├── UE4SS_Signatures │ │ │ ├── FText_Constructor.lua │ │ │ ├── GUObjectArray.lua │ │ │ └── Gnatives.lua │ │ └── VTableLayout.ini │ ├── Star Wars Jedi Fallen Order │ │ └── MemberVariableLayout.ini │ ├── Star Wars Jedi Survivor │ │ ├── MemberVariableLayout.ini │ │ ├── UE4SS-settings.ini │ │ └── VTableLayout.ini │ ├── The Outer Worlds │ │ ├── MemberVariableLayout.ini │ │ ├── Readme.md │ │ ├── UE4SS-settings.ini │ │ └── VTableLayout.ini │ └── Walking Dead Saints & Sinners │ │ └── UE4SS_Signatures │ │ ├── FName_Constructor.lua │ │ ├── FName_ToString.lua │ │ └── StaticConstructObject.lua ├── Default_UVTD_Configs │ └── Config │ │ ├── case_preserving_variants.json │ │ ├── member_rename_map.json │ │ ├── object_items.json │ │ ├── pdbs_to_dump.json │ │ ├── private_variables.json │ │ ├── types_not_to_dump.json │ │ ├── uprefix_to_fprefix.json │ │ ├── valid_udt_names.json │ │ └── virtual_generator_includes.json ├── MapGenBP │ ├── Content │ │ └── MapGen │ │ │ ├── MapCreator.uasset │ │ │ ├── MapSpawnStruct.uasset │ │ │ └── MeshStruct.uasset │ └── Readme.md ├── MemberVarLayoutTemplates │ ├── MemberVariableLayout.ini │ ├── MemberVariableLayout_4_10_Template.ini │ ├── MemberVariableLayout_4_11_Template.ini │ ├── MemberVariableLayout_4_12_Template.ini │ ├── MemberVariableLayout_4_13_Template.ini │ ├── MemberVariableLayout_4_14_Template.ini │ ├── MemberVariableLayout_4_15_Template.ini │ ├── MemberVariableLayout_4_16_Template.ini │ ├── MemberVariableLayout_4_17_Template.ini │ ├── MemberVariableLayout_4_18_Template.ini │ ├── MemberVariableLayout_4_19_Template.ini │ ├── MemberVariableLayout_4_20_Template.ini │ ├── MemberVariableLayout_4_21_Template.ini │ ├── MemberVariableLayout_4_22_Template.ini │ ├── MemberVariableLayout_4_23_Template.ini │ ├── MemberVariableLayout_4_24_Template.ini │ ├── MemberVariableLayout_4_25_Template.ini │ ├── MemberVariableLayout_4_26_Template.ini │ ├── MemberVariableLayout_4_27_CasePreserving_Template.ini │ ├── MemberVariableLayout_4_27_Template.ini │ ├── MemberVariableLayout_5_00_Template.ini │ ├── MemberVariableLayout_5_01_Template.ini │ ├── MemberVariableLayout_5_02_Template.ini │ ├── MemberVariableLayout_5_03_Template.ini │ ├── MemberVariableLayout_5_04_Template.ini │ └── MemberVariableLayout_5_05_Template.ini ├── Mods │ ├── ActorDumperMod │ │ └── Scripts │ │ │ └── main.lua │ ├── BPML_GenericFunctions │ │ └── Scripts │ │ │ └── main.lua │ ├── BPModLoaderMod │ │ ├── Scripts │ │ │ └── main.lua │ │ └── load_order.txt │ ├── CheatManagerEnablerMod │ │ └── Scripts │ │ │ └── main.lua │ ├── ConsoleCommandsMod │ │ └── Scripts │ │ │ ├── dump_object.lua │ │ │ ├── main.lua │ │ │ ├── set.lua │ │ │ └── summon_unloaded_assets.lua │ ├── ConsoleEnablerMod │ │ └── Scripts │ │ │ └── main.lua │ ├── Keybinds │ │ └── Scripts │ │ │ └── main.lua │ ├── LineTraceMod │ │ └── Scripts │ │ │ └── main.lua │ ├── SplitScreenMod │ │ └── Scripts │ │ │ └── main.lua │ ├── jsbLuaProfilerMod │ │ └── Scripts │ │ │ └── main.lua │ ├── mods.json │ ├── mods.txt │ └── shared │ │ ├── Types.lua │ │ ├── UEHelpers │ │ └── UEHelpers.lua │ │ └── jsbProfiler │ │ └── jsbProfi.lua ├── UE4SS-settings.ini ├── UE4SS_Signatures │ ├── FName_ToString.lua.example │ └── GUObjectArray.lua.example └── VTableLayoutTemplates │ ├── VTableLayout_4_10_Template.ini │ ├── VTableLayout_4_11_Template.ini │ ├── VTableLayout_4_12_Template.ini │ ├── VTableLayout_4_13_Template.ini │ ├── VTableLayout_4_14_Template.ini │ ├── VTableLayout_4_15_Template.ini │ ├── VTableLayout_4_16_Template.ini │ ├── VTableLayout_4_17_Template.ini │ ├── VTableLayout_4_18_Template.ini │ ├── VTableLayout_4_19_Template.ini │ ├── VTableLayout_4_20_Template.ini │ ├── VTableLayout_4_21_Template.ini │ ├── VTableLayout_4_22_Template.ini │ ├── VTableLayout_4_23_Template.ini │ ├── VTableLayout_4_24_Template.ini │ ├── VTableLayout_4_25_Template.ini │ ├── VTableLayout_4_26_Template.ini │ ├── VTableLayout_4_27_CasePreserving_Template.ini │ ├── VTableLayout_4_27_Template.ini │ ├── VTableLayout_5_00_Template.ini │ ├── VTableLayout_5_01_Template.ini │ ├── VTableLayout_5_02_Template.ini │ ├── VTableLayout_5_03_Template.ini │ ├── VTableLayout_5_04_Template.ini │ └── VTableLayout_5_05_Template.ini ├── cppmods ├── KismetDebuggerMod │ ├── include │ │ └── KismetDebugger.hpp │ ├── src │ │ ├── KismetDebugger.cpp │ │ └── dllmain.cpp │ └── xmake.lua └── xmake.lua ├── deps ├── first │ ├── ASMHelper │ │ ├── LICENSE │ │ ├── include │ │ │ └── ASMHelper │ │ │ │ ├── ASMHelper.hpp │ │ │ │ └── Common.hpp │ │ ├── src │ │ │ └── ASMHelper.cpp │ │ └── xmake.lua │ ├── ArgsParser │ │ ├── include │ │ │ └── ArgsParser │ │ │ │ └── ArgsParser.hpp │ │ ├── src │ │ │ └── ArgsParser │ │ │ │ └── main.cpp │ │ └── xmake.lua │ ├── Constructs │ │ ├── LICENSE │ │ ├── include │ │ │ └── Constructs │ │ │ │ ├── Annotated.hpp │ │ │ │ ├── CompileTimeString.hpp │ │ │ │ ├── Generator.hpp │ │ │ │ ├── Loop.hpp │ │ │ │ └── Views │ │ │ │ └── EnumerateView.hpp │ │ └── xmake.lua │ ├── DynamicOutput │ │ ├── LICENSE │ │ ├── include │ │ │ └── DynamicOutput │ │ │ │ ├── Common.hpp │ │ │ │ ├── DebugConsoleDevice.hpp │ │ │ │ ├── DynamicOutput.hpp │ │ │ │ ├── FileDevice.hpp │ │ │ │ ├── Macros.hpp │ │ │ │ ├── NewFileDevice.hpp │ │ │ │ ├── Output.hpp │ │ │ │ ├── OutputDevice.hpp │ │ │ │ └── TestDevice.hpp │ │ ├── src │ │ │ ├── DebugConsoleDevice.cpp │ │ │ ├── Output.cpp │ │ │ └── OutputDevice.cpp │ │ └── xmake.lua │ ├── File │ │ ├── LICENSE │ │ ├── include │ │ │ └── File │ │ │ │ ├── Common.hpp │ │ │ │ ├── Enums.hpp │ │ │ │ ├── Exceptions.hpp │ │ │ │ ├── File.hpp │ │ │ │ ├── FileDef.hpp │ │ │ │ ├── FileType │ │ │ │ ├── All.hpp │ │ │ │ ├── FileBase.hpp │ │ │ │ └── WinFile.hpp │ │ │ │ ├── HandleTemplate.hpp │ │ │ │ ├── InternalFile.hpp │ │ │ │ └── Macros.hpp │ │ ├── src │ │ │ ├── File.cpp │ │ │ └── FileType │ │ │ │ └── WinFile.cpp │ │ └── xmake.lua │ ├── Function │ │ ├── LICENSE │ │ ├── include │ │ │ └── Function │ │ │ │ └── Function.hpp │ │ └── xmake.lua │ ├── Helpers │ │ ├── LICENSE │ │ ├── include │ │ │ └── Helpers │ │ │ │ ├── ASM.hpp │ │ │ │ ├── Casting.hpp │ │ │ │ ├── Format.hpp │ │ │ │ ├── Integer.hpp │ │ │ │ └── String.hpp │ │ ├── src │ │ │ └── Casting.cpp │ │ └── xmake.lua │ ├── IniParser │ │ ├── LICENSE │ │ ├── include │ │ │ └── IniParser │ │ │ │ ├── Common.hpp │ │ │ │ ├── Experimental.hpp │ │ │ │ ├── Ini.hpp │ │ │ │ ├── JSON.hpp │ │ │ │ ├── Section.hpp │ │ │ │ ├── TokenParser.hpp │ │ │ │ ├── Tokens.hpp │ │ │ │ └── Value.hpp │ │ ├── src │ │ │ ├── Experimental.cpp │ │ │ ├── Ini.cpp │ │ │ ├── JSON.cpp │ │ │ ├── TokenParser.cpp │ │ │ └── Value.cpp │ │ └── xmake.lua │ ├── Input │ │ ├── LICENSE │ │ ├── include │ │ │ └── Input │ │ │ │ ├── Common.hpp │ │ │ │ ├── Handler.hpp │ │ │ │ ├── KeyDef.hpp │ │ │ │ ├── Platform │ │ │ │ ├── GLFW3InputSource.hpp │ │ │ │ ├── QueueInputSource.hpp │ │ │ │ └── Win32AsyncInputSource.hpp │ │ │ │ ├── PlatformInputSource.hpp │ │ │ │ └── RingBuffer.hpp │ │ ├── src │ │ │ ├── Handler.cpp │ │ │ ├── KeyDef.cpp │ │ │ ├── Platform │ │ │ │ ├── GLFW3InputSource.cpp │ │ │ │ ├── QueueInputSource.cpp │ │ │ │ └── Win32AsyncInputSource.cpp │ │ │ └── PlatformInit.cpp │ │ └── xmake.lua │ ├── JSON │ │ ├── LICENSE │ │ ├── include │ │ │ └── JSON │ │ │ │ ├── Array.hpp │ │ │ │ ├── Bool.hpp │ │ │ │ ├── Common.hpp │ │ │ │ ├── JSON.hpp │ │ │ │ ├── KeyValuePair.hpp │ │ │ │ ├── Null.hpp │ │ │ │ ├── Number.hpp │ │ │ │ ├── Object.hpp │ │ │ │ ├── Parser │ │ │ │ ├── Parser.hpp │ │ │ │ ├── TokenParser.hpp │ │ │ │ └── Tokens.hpp │ │ │ │ ├── String.hpp │ │ │ │ └── Value.hpp │ │ ├── src │ │ │ ├── Array.cpp │ │ │ ├── Bool.cpp │ │ │ ├── Null.cpp │ │ │ ├── Number.cpp │ │ │ ├── Object.cpp │ │ │ ├── Parser │ │ │ │ ├── Parser.cpp │ │ │ │ └── TokenParser.cpp │ │ │ └── String.cpp │ │ └── xmake.lua │ ├── LuaMadeSimple │ │ ├── LICENSE │ │ ├── include │ │ │ └── LuaMadeSimple │ │ │ │ ├── Common.hpp │ │ │ │ ├── LuaMadeSimple.hpp │ │ │ │ └── LuaObject.hpp │ │ ├── src │ │ │ ├── LuaMadeSimple.cpp │ │ │ └── LuaObject.cpp │ │ └── xmake.lua │ ├── LuaRaw │ │ ├── LICENSE │ │ ├── include │ │ │ ├── lapi.h │ │ │ ├── lauxlib.h │ │ │ ├── lcode.h │ │ │ ├── lctype.h │ │ │ ├── ldebug.h │ │ │ ├── ldo.h │ │ │ ├── lfunc.h │ │ │ ├── lgc.h │ │ │ ├── ljumptab.h │ │ │ ├── llex.h │ │ │ ├── llimits.h │ │ │ ├── lmem.h │ │ │ ├── lobject.h │ │ │ ├── lopcodes.h │ │ │ ├── lopnames.h │ │ │ ├── lparser.h │ │ │ ├── lprefix.h │ │ │ ├── lstate.h │ │ │ ├── lstring.h │ │ │ ├── ltable.h │ │ │ ├── ltests.h │ │ │ ├── ltm.h │ │ │ ├── lua.h │ │ │ ├── lua.hpp │ │ │ ├── luaconf.h │ │ │ ├── lualib.h │ │ │ ├── lundump.h │ │ │ ├── lvm.h │ │ │ └── lzio.h │ │ ├── src │ │ │ ├── lapi.c │ │ │ ├── lauxlib.c │ │ │ ├── lbaselib.c │ │ │ ├── lcode.c │ │ │ ├── lcorolib.c │ │ │ ├── lctype.c │ │ │ ├── ldblib.c │ │ │ ├── ldebug.c │ │ │ ├── ldo.c │ │ │ ├── ldump.c │ │ │ ├── lfunc.c │ │ │ ├── lgc.c │ │ │ ├── linit.c │ │ │ ├── liolib.c │ │ │ ├── llex.c │ │ │ ├── lmathlib.c │ │ │ ├── lmem.c │ │ │ ├── loadlib.c │ │ │ ├── lobject.c │ │ │ ├── lopcodes.c │ │ │ ├── loslib.c │ │ │ ├── lparser.c │ │ │ ├── lstate.c │ │ │ ├── lstring.c │ │ │ ├── lstrlib.c │ │ │ ├── ltable.c │ │ │ ├── ltablib.c │ │ │ ├── ltm.c │ │ │ ├── lua.c │ │ │ ├── luac.c │ │ │ ├── luauser.c │ │ │ ├── lundump.c │ │ │ ├── lutf8lib.c │ │ │ ├── lvm.c │ │ │ └── lzio.c │ │ └── xmake.lua │ ├── MProgram │ │ ├── LICENSE │ │ ├── include │ │ │ ├── ErrorObject.hpp │ │ │ ├── MProgram.hpp │ │ │ └── ProgramFeatures │ │ │ │ └── CanError.hpp │ │ └── xmake.lua │ ├── ParserBase │ │ ├── LICENSE │ │ ├── include │ │ │ └── ParserBase │ │ │ │ ├── Common.hpp │ │ │ │ ├── Token.hpp │ │ │ │ ├── TokenParser.hpp │ │ │ │ └── Tokenizer.hpp │ │ ├── src │ │ │ ├── Token.PVS-Studio.cfg │ │ │ ├── Token.cpp │ │ │ ├── TokenParser.cpp │ │ │ └── Tokenizer.cpp │ │ └── xmake.lua │ ├── Profiler │ │ ├── include │ │ │ └── Profiler │ │ │ │ └── Profiler.hpp │ │ └── xmake.lua │ ├── ScopedTimer │ │ ├── LICENSE │ │ ├── include │ │ │ └── Timer │ │ │ │ └── ScopedTimer.hpp │ │ └── xmake.lua │ ├── SinglePassSigScanner │ │ ├── LICENSE │ │ ├── include │ │ │ └── SigScanner │ │ │ │ ├── Common.hpp │ │ │ │ └── SinglePassSigScanner.hpp │ │ ├── src │ │ │ └── SinglePassSigScanner.cpp │ │ └── xmake.lua │ ├── String │ │ ├── include │ │ │ └── String │ │ │ │ └── StringType.hpp │ │ └── xmake.lua │ ├── patternsleuth_bind │ │ ├── Cargo.lock │ │ ├── Cargo.toml │ │ ├── src │ │ │ └── lib.rs │ │ └── xmake.lua │ └── xmake.lua ├── fonts │ └── droid │ │ ├── DroidSansFallback.ttf │ │ └── NOTICE.txt ├── third-repo │ └── packages │ │ ├── i │ │ ├── iconfontcppheaders │ │ │ └── xmake.lua │ │ └── imguitextedit │ │ │ └── xmake.lua │ │ ├── p │ │ └── polyhook_2 │ │ │ ├── CMakeLists.txt │ │ │ └── xmake.lua │ │ ├── r │ │ └── raw_pdb │ │ │ └── xmake.lua │ │ ├── t │ │ └── tracy │ │ │ └── xmake.lua │ │ └── z │ │ ├── zycore │ │ └── xmake.lua │ │ └── zydis │ │ └── xmake.lua ├── third │ ├── glad │ │ ├── include │ │ │ ├── KHR │ │ │ │ └── khrplatform.h │ │ │ └── glad │ │ │ │ └── glad.h │ │ ├── src │ │ │ └── glad.c │ │ └── xmake.lua │ └── xmake.lua └── xmake.lua ├── docs-export ├── book.toml ├── css │ └── custom.css └── export.py ├── docs-repo-template ├── .nojekyll ├── README.md ├── build.py └── gen-ps-games.py ├── docs ├── SUMMARY.md ├── contributing.md ├── cpp-api.md ├── cpp-api │ ├── bp-macros.md │ └── cpp-examples.md ├── custom-game-configs.md ├── devlogs.md ├── devlogs │ └── datatables-in-ue4ss.md ├── feature-overview │ ├── blueprint-modloader.md │ ├── dumpers.md │ ├── experimental.md │ ├── live-view.md │ └── universal-mods.md ├── guides │ ├── accessing-ue-properties-c++.md │ ├── creating-a-c++-mod.md │ ├── creating-a-lua-mod.md │ ├── creating-gui-tabs-with-c++-mod.md │ ├── fixing-compatibility-problems-advanced.md │ ├── fixing-compatibility-problems.md │ ├── generating-uht-compatible-headers.md │ ├── installing-a-c++-mod.md │ └── using-custom-lua-bindings.md ├── installation-guide.md ├── lua-api.md ├── lua-api │ ├── classes │ │ ├── aactor.md │ │ ├── arrayproperty.md │ │ ├── boolproperty.md │ │ ├── fieldclass.md │ │ ├── fname.md │ │ ├── foutputdevice.md │ │ ├── fstring.md │ │ ├── ftext.md │ │ ├── fweakobjectptr.md │ │ ├── localobject.md │ │ ├── localunrealparam.md │ │ ├── mod.md │ │ ├── objectproperty.md │ │ ├── property.md │ │ ├── remoteobject.md │ │ ├── remoteunrealparam.md │ │ ├── structproperty.md │ │ ├── tarray.md │ │ ├── tmap.md │ │ ├── uclass.md │ │ ├── ue4ss.md │ │ ├── uenum.md │ │ ├── ufunction.md │ │ ├── unrealversion.md │ │ ├── uobject.md │ │ ├── uobjectreflection.md │ │ ├── uscriptstruct.md │ │ ├── ustruct.md │ │ └── uworld.md │ ├── examples.md │ ├── global-functions │ │ ├── createinvalidobject.md │ │ ├── dumpallactors.md │ │ ├── dumpallobjects.md │ │ ├── dumpstaticmeshes.md │ │ ├── dumpusmap.md │ │ ├── executeasync.md │ │ ├── executeingamethread.md │ │ ├── executewithdelay.md │ │ ├── findallof.md │ │ ├── findfirstof.md │ │ ├── findobject.md │ │ ├── findobjects.md │ │ ├── fname.md │ │ ├── foreachuobject.md │ │ ├── ftext.md │ │ ├── generateluatypes.md │ │ ├── generatesdk.md │ │ ├── generateuhtcompatibleheaders.md │ │ ├── iskeybindregistered.md │ │ ├── iterategamedirectories.md │ │ ├── loadasset.md │ │ ├── loopasync.md │ │ ├── notifyonnewobject.md │ │ ├── print.md │ │ ├── registerbeginplayposthook.md │ │ ├── registerbeginplayprehook.md │ │ ├── registercallfunctionbynamewithargumentsposthook.md │ │ ├── registercallfunctionbynamewithargumentsprehook.md │ │ ├── registerconsolecommandglobalhandler.md │ │ ├── registerconsolecommandhandler.md │ │ ├── registercustomevent.md │ │ ├── registercustomproperty.md │ │ ├── registerhook.md │ │ ├── registerinitgamestateposthook.md │ │ ├── registerinitgamestateprehook.md │ │ ├── registerkeybind.md │ │ ├── registerprocessconsoleexecposthook.md │ │ ├── registerprocessconsoleexecprehook.md │ │ ├── registerulocalplayerexecposthook.md │ │ ├── registerulocalplayerexecprehook.md │ │ ├── staticconstructobject.md │ │ ├── staticfindobject.md │ │ └── unregisterhook.md │ └── table-definitions │ │ ├── arraypropertyinfo.md │ │ ├── custompropertyinfo.md │ │ ├── efindname.md │ │ ├── einternalobjectflags.md │ │ ├── eobjectflags.md │ │ ├── key.md │ │ ├── modifierkey.md │ │ ├── offsetinternalinfo.md │ │ └── propertytypes.md ├── patternsleuth-games.md └── upgrade-guide.md ├── tools ├── buildscripts │ ├── build_auto.bat │ ├── build_auto_both_configs.bat │ ├── build_auto_clang_ninja.bat │ ├── build_clang_ninja_debug.bat │ ├── build_clang_ninja_release.bat │ ├── internal_build_tools │ │ ├── cleanup_build_option_files.bat │ │ ├── generate_clang_ninja_internal.bat │ │ ├── generate_vs_solution_internal.bat │ │ ├── package_all_distributions.bat │ │ ├── package_binary.bat │ │ ├── packaging_header.bat │ │ ├── reload_cmake.bat │ │ ├── set_build_switches.bat │ │ └── set_version.bat │ ├── internal_generate_build_files.bat │ ├── rebuild_auto.bat │ └── release.py └── xmakescripts │ ├── build_configs.lua │ ├── modules │ ├── cargo │ │ └── cargo_helpers.lua │ ├── mode_builder.lua │ ├── mods │ │ └── install.lua │ └── target_helpers.lua │ ├── plugins │ └── ci │ │ ├── dump │ │ ├── modes.lua │ │ └── targets.lua │ │ ├── main.lua │ │ └── xmake.lua │ └── rules │ ├── build_rules.lua │ ├── rust_rules.lua │ └── version_rules.lua └── xmake.lua /.clang-format: -------------------------------------------------------------------------------- 1 | # Format Style Options - Created with Clang Power Tools 2 | --- 3 | AllowAllArgumentsOnNextLine: false 4 | AllowShortBlocksOnASingleLine: Empty 5 | AllowShortLambdasOnASingleLine: Empty 6 | AllowShortIfStatementsOnASingleLine: WithoutElse 7 | AlwaysBreakTemplateDeclarations: Yes 8 | BasedOnStyle: Microsoft 9 | BinPackArguments: false 10 | BinPackParameters: false 11 | ColumnLimit: 160 12 | ContinuationIndentWidth: 8 13 | NamespaceIndentation: All 14 | ObjCBreakBeforeNestedBlockParam: false 15 | PenaltyBreakBeforeFirstCallParameter: 120 16 | PenaltyExcessCharacter: 5 17 | PointerAlignment: Left 18 | Standard: Latest 19 | SortIncludes: false 20 | ... 21 | -------------------------------------------------------------------------------- /.git-blame-ignore-revs: -------------------------------------------------------------------------------- 1 | # add .clang-format 2 | c3eaefbd993dd0f3c8b9d440b7d5b9cc7528732c 3 | 4 | # Ran clang-format before sort-include update 5 | 5462e5d96ad2e409f90bb21d33c22e5580ba3260 6 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: "[BUG - Release]" 5 | labels: 'bug' 6 | --- 7 | 8 | **Branch or Release** 9 | 10 | 11 | 12 | **Game and Engine Version** 13 | 14 | 15 | 16 | **Describe the bug** 17 | 18 | 19 | 20 | **Mods directory** 21 | 22 | 23 | 24 | **To reproduce** 25 | 31 | 32 | **Expected behavior** 33 | 34 | 35 | 36 | **Screenshots, UE4SS Log, and .dmp file** 37 | 38 | 39 | 40 | **Desktop (please complete the following information):** 41 | - OS: [e.g. Win10, Win11] 42 | 43 | 44 | **Additional context** 45 | 46 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/docs_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Docs Report 3 | about: Create a report to help us improve the documentation 4 | title: "[Docs]" 5 | labels: 'documentation' 6 | --- 7 | 8 | 9 | 10 | **Description** 11 | 12 | 13 | 14 | **Pages to update** 15 | 16 | 17 | 18 | **Screenshots** 19 | 20 | 21 | 22 | **Additional context** 23 | 24 | 25 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea 4 | labels: feature request 5 | --- 6 | 7 | **Is your feature request related to a problem? Please describe.** 8 | 9 | 10 | 11 | **Describe the solution you'd like** 12 | 13 | 14 | 15 | **Describe alternatives you've considered** 16 | 17 | 18 | 19 | 20 | **Additional context** 21 | 22 | 23 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/upgrade_problem.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Upgrade Problem 3 | about: Report issues encountered upgrading your mod to a new version 4 | title: "[Upgrade Problem]" 5 | labels: 'upgrade problem' 6 | --- 7 | 8 | **Current UE4SS Version** 9 | 10 | 11 | 12 | **Target UE4SS Version** 13 | 14 | 15 | 16 | **Describe the Problem** 17 | 18 | 19 | 20 | **Logs and Configuration** 21 | 22 | 23 | 24 | **Screenshots** 25 | 26 | 27 | 28 | **Desktop (please complete the following information):** 29 | - OS: [e.g. Win10, Win11] 30 | 31 | 32 | **Additional Context** 33 | 34 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "deps/first/Unreal"] 2 | path = deps/first/Unreal 3 | url = git@github.com:Re-UE4SS/UEPseudo.git 4 | [submodule "deps/first/patternsleuth"] 5 | path = deps/first/patternsleuth 6 | url = git@github.com:trumank/patternsleuth.git 7 | -------------------------------------------------------------------------------- /CNAME: -------------------------------------------------------------------------------- 1 | ue4ss.com -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Narknon 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /UE4SS/generated_src/version.cache: -------------------------------------------------------------------------------- 1 | 3.0.1.0.0 2 | -------------------------------------------------------------------------------- /UE4SS/include/Common.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifndef RC_UE4SS_EXPORTS 4 | #ifndef RC_UE4SS_API 5 | #define RC_UE4SS_API __declspec(dllimport) 6 | #endif 7 | #else 8 | #ifndef RC_UE4SS_API 9 | #define RC_UE4SS_API __declspec(dllexport) 10 | #endif 11 | #endif 12 | -------------------------------------------------------------------------------- /UE4SS/include/CrashDumper.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace PLH 6 | { 7 | class IatHook; 8 | } 9 | 10 | namespace RC 11 | { 12 | class CrashDumper 13 | { 14 | private: 15 | bool enabled = false; 16 | void* m_previous_exception_filter = nullptr; 17 | std::unique_ptr m_set_unhandled_exception_filter_hook; 18 | uint64_t m_hook_trampoline_set_unhandled_exception_filter_hook; 19 | 20 | public: 21 | CrashDumper(); 22 | ~CrashDumper(); 23 | 24 | public: 25 | void enable(); 26 | void set_full_memory_dump(bool enabled); 27 | }; 28 | 29 | }; // namespace RC 30 | -------------------------------------------------------------------------------- /UE4SS/include/GUI/BPMods.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace RC::GUI::BPMods 4 | { 5 | auto render() -> void; 6 | } 7 | -------------------------------------------------------------------------------- /UE4SS/include/GUI/ConsoleOutputDevice.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifdef UE4SS_CONSOLE_COLORS_ENABLED 4 | #include 5 | #endif 6 | 7 | #include 8 | #include 9 | #include 10 | 11 | namespace RC::Output 12 | { 13 | // Very simple class that outputs to stdout 14 | class ConsoleDevice : public OutputDevice 15 | { 16 | public: 17 | #if ENABLE_OUTPUT_DEVICE_DEBUG_MODE 18 | ConsoleDevice() 19 | { 20 | fmt::print("ConsoleDevice opening...\n"); 21 | } 22 | 23 | ~ConsoleDevice() override 24 | { 25 | fmt::print("ConsoleDevice closing...\n"); 26 | } 27 | #else 28 | ~ConsoleDevice() override = default; 29 | #endif 30 | 31 | public: 32 | auto has_optional_arg() const -> bool override; 33 | auto receive(File::StringViewType fmt) const -> void override; 34 | auto receive_with_optional_arg(File::StringViewType fmt, int32_t optional_arg = 0) const -> void override; 35 | }; 36 | } // namespace RC::Output 37 | -------------------------------------------------------------------------------- /UE4SS/include/GUI/DX11.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC::GUI 6 | { 7 | class Backend_DX11 : public GfxBackendBase 8 | { 9 | public: 10 | ~Backend_DX11() = default; 11 | 12 | public: 13 | auto init() -> void override; 14 | auto imgui_backend_newframe() -> void override; 15 | auto render(const float clear_color_with_alpha[4]) -> void override; 16 | auto shutdown() -> void override; 17 | auto cleanup() -> void override; 18 | auto create_device() -> bool override; 19 | auto cleanup_device() -> void override; 20 | auto handle_window_resize(int64_t param_1, int64_t param_2) -> void override; 21 | auto on_os_backend_set() -> void override; 22 | }; 23 | } // namespace RC::GUI 24 | -------------------------------------------------------------------------------- /UE4SS/include/GUI/Dumpers.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace RC::GUI::Dumpers 4 | { 5 | struct MapDumpFileName 6 | { 7 | int8_t currentSMdumpnum{0}; 8 | int8_t currentAAdumpnum{0}; 9 | }; 10 | 11 | auto render() -> void; 12 | 13 | void call_generate_static_mesh_file(); 14 | void call_generate_all_actor_file(); 15 | 16 | } // namespace RC::GUI::Dumpers 17 | -------------------------------------------------------------------------------- /UE4SS/include/GUI/GLFW3_OpenGL3.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | struct GLFWwindow; 6 | 7 | namespace RC::GUI 8 | { 9 | class Backend_GLFW3_OpenGL3 : public GfxBackendBase 10 | { 11 | private: 12 | GLFWwindow* m_window{}; 13 | 14 | public: 15 | ~Backend_GLFW3_OpenGL3() = default; 16 | 17 | public: 18 | auto init() -> void override; 19 | auto imgui_backend_newframe() -> void override; 20 | auto render(const float clear_color_with_alpha[4]) -> void override; 21 | auto shutdown() -> void override; 22 | auto cleanup() -> void override; 23 | auto create_device() -> bool override; 24 | auto cleanup_device() -> void override; 25 | auto handle_window_resize(int64_t param_1, int64_t param_2) -> void override; 26 | auto on_os_backend_set() -> void override; 27 | auto get_window_size() -> WindowSize override; 28 | auto get_window_position() -> WindowPosition override; 29 | auto exit_requested() -> bool override; 30 | }; 31 | } // namespace RC::GUI 32 | -------------------------------------------------------------------------------- /UE4SS/include/GUI/GUITab.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | #include 7 | 8 | namespace RC 9 | { 10 | class CppUserModBase; 11 | } 12 | 13 | namespace RC::GUI 14 | { 15 | class GUITab 16 | { 17 | friend class DebuggingGUI; 18 | 19 | public: 20 | using RenderFunctionType = void (*)(CppUserModBase*); 21 | 22 | private: 23 | RenderFunctionType render_function{}; 24 | CppUserModBase* owner{}; 25 | StringType tab_name{}; 26 | 27 | public: 28 | GUITab() = delete; 29 | GUITab(StringViewType name, RenderFunctionType render_function) : tab_name(name), render_function(render_function) {}; 30 | GUITab(StringViewType name, RenderFunctionType render_function, CppUserModBase* owner) 31 | : tab_name(name), render_function(render_function), owner(owner) {}; 32 | ~GUITab() = default; 33 | 34 | private: 35 | auto get_owner() -> CppUserModBase* 36 | { 37 | return owner; 38 | } 39 | }; 40 | } // namespace RC::GUI 41 | -------------------------------------------------------------------------------- /UE4SS/include/GUI/LiveView/Filter/ClassNamesFilter.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | namespace RC::GUI::Filter 7 | { 8 | class ClassNamesFilter 9 | { 10 | public: 11 | static inline StringType s_debug_name{STR("ClassNamesFilter")}; 12 | static inline std::string s_internal_class_names{}; 13 | static inline std::vector list_class_names; 14 | static inline bool b_is_exclude{true}; 15 | 16 | static auto post_eval(UObject* object) -> bool 17 | { 18 | if (!list_class_names.empty() && object) 19 | { 20 | auto class_name = object->GetClassPrivate()->GetName(); 21 | if (b_is_exclude) 22 | { 23 | return std::ranges::find(list_class_names, class_name) != list_class_names.end(); 24 | } 25 | else 26 | { 27 | auto it = std::ranges::find(list_class_names, class_name); 28 | return it == list_class_names.end(); 29 | } 30 | } 31 | return false; 32 | } 33 | }; 34 | } // namespace RC::GUI::Filter 35 | -------------------------------------------------------------------------------- /UE4SS/include/GUI/LiveView/Filter/DefaultObjectsOnly.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC::GUI::Filter 6 | { 7 | class DefaultObjectsOnly 8 | { 9 | public: 10 | static inline StringType s_debug_name{STR("DefaultObjectsOnly")}; 11 | static inline bool s_enabled{}; 12 | 13 | static auto pre_eval(UObject* object) -> bool 14 | { 15 | return s_enabled && !object->HasAnyFlags(static_cast(RF_ClassDefaultObject | RF_ArchetypeObject)); 16 | } 17 | }; 18 | } // namespace RC::GUI::Filter 19 | -------------------------------------------------------------------------------- /UE4SS/include/GUI/LiveView/Filter/HasProperty.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | namespace RC::GUI::Filter 7 | { 8 | class HasProperty 9 | { 10 | public: 11 | static inline StringType s_debug_name{STR("HasProperty")}; 12 | static inline std::string s_internal_properties{}; 13 | static inline std::vector list_properties{}; 14 | 15 | static auto post_eval(UObject* object) -> bool 16 | { 17 | for (const auto& property : list_properties) 18 | { 19 | if (!property.empty() && !object->GetPropertyByNameInChain(FromCharTypePtr(property.c_str()))) return true; 20 | } 21 | return false; 22 | } 23 | }; 24 | } // namespace RC::GUI::Filter 25 | -------------------------------------------------------------------------------- /UE4SS/include/GUI/LiveView/Filter/IncludeDefaultObjects.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC::GUI::Filter 6 | { 7 | class IncludeDefaultObjects 8 | { 9 | public: 10 | static inline StringType s_debug_name{STR("IncludeDefaultObjects")}; 11 | static inline bool s_enabled{true}; 12 | 13 | static auto pre_eval(UObject* object) -> bool 14 | { 15 | return !s_enabled && object->HasAnyFlags(static_cast(RF_ClassDefaultObject | RF_ArchetypeObject)); 16 | } 17 | }; 18 | } // namespace RC::GUI::Filter 19 | -------------------------------------------------------------------------------- /UE4SS/include/GUI/LiveView/Filter/InstancesOnly.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC::GUI::Filter 6 | { 7 | class InstancesOnly 8 | { 9 | public: 10 | static inline StringType s_debug_name{STR("InstancesOnly")}; 11 | static inline bool s_enabled{}; 12 | static auto pre_eval(UObject* object) -> bool 13 | { 14 | return s_enabled && !is_instance(object); 15 | } 16 | }; 17 | } // namespace RC::GUI::Filter 18 | -------------------------------------------------------------------------------- /UE4SS/include/GUI/LiveView/Filter/NonInstancesOnly.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | namespace RC::GUI::Filter 7 | { 8 | class NonInstancesOnly 9 | { 10 | public: 11 | static inline StringType s_debug_name{STR("NonInstancesOnly")}; 12 | static inline bool s_enabled{}; 13 | 14 | static auto pre_eval(UObject* object) -> bool 15 | { 16 | return s_enabled && (object->IsA() || is_instance(object)); 17 | } 18 | }; 19 | } // namespace RC::GUI::Filter 20 | -------------------------------------------------------------------------------- /UE4SS/include/GUI/Windows.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC::GUI 6 | { 7 | class Backend_Windows : public OSBackendBase 8 | { 9 | public: 10 | ~Backend_Windows() = default; 11 | 12 | public: 13 | auto init() -> void override; 14 | auto imgui_backend_newframe() -> void override; 15 | auto create_window(int loc_x, int loc_y, int size_x, int size_y) -> void override; 16 | auto exec_message_loop(bool* exit_requested) -> void override; 17 | auto shutdown() -> void override; 18 | auto cleanup() -> void override; 19 | auto get_window_handle() -> void* override; 20 | auto get_window_size() -> WindowSize override; 21 | auto get_window_position() -> WindowPosition override; 22 | auto on_gfx_backend_set() -> void override; 23 | }; 24 | } // namespace RC::GUI 25 | -------------------------------------------------------------------------------- /UE4SS/include/LuaTests.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | #include 7 | 8 | namespace RC 9 | { 10 | using namespace Unreal; 11 | 12 | struct MemoryItem; 13 | 14 | auto Test_GetUnsignedMemorySetup() -> MemoryItem*; 15 | auto Test_GetSignedMemorySetup() -> MemoryItem*; 16 | auto Test_GetPlayerControllerVTablePointer() -> MemoryItem*; 17 | 18 | auto GetWorldTest() -> UWorld*; 19 | auto GetArrayTest() -> Unreal::TArray&; 20 | auto GetArrayTest2() -> Unreal::TArray&; 21 | auto GetArrayTest3() -> Unreal::TArray; 22 | auto Test_Get_UObject_Nullptr() -> UObject*; 23 | } // namespace RC 24 | -------------------------------------------------------------------------------- /UE4SS/include/LuaType/LuaAActor.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | namespace RC::Unreal 7 | { 8 | class AActor; 9 | } 10 | 11 | namespace RC::LuaType 12 | { 13 | struct AActorName 14 | { 15 | constexpr static const char* ToString() 16 | { 17 | return "AActor"; 18 | } 19 | }; 20 | class AActor : public UObjectBase 21 | { 22 | private: 23 | explicit AActor(Unreal::AActor* object); 24 | 25 | public: 26 | AActor() = delete; 27 | auto static construct(const LuaMadeSimple::Lua&, Unreal::AActor*) -> const LuaMadeSimple::Lua::Table; 28 | auto static construct(const LuaMadeSimple::Lua&, BaseObject&) -> const LuaMadeSimple::Lua::Table; 29 | 30 | private: 31 | auto static setup_metamethods(BaseObject&) -> void; 32 | 33 | private: 34 | template 35 | auto static setup_member_functions(const LuaMadeSimple::Lua::Table&) -> void; 36 | }; 37 | } // namespace RC::LuaType 38 | -------------------------------------------------------------------------------- /UE4SS/include/LuaType/LuaCustomProperty.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | #include 8 | 9 | namespace RC::Unreal 10 | { 11 | class UObject; 12 | class UClass; 13 | class FProperty; 14 | class CustomProperty; 15 | } // namespace RC::Unreal 16 | 17 | namespace RC::LuaType 18 | { 19 | class LuaCustomProperty 20 | { 21 | public: 22 | StringType m_name{}; 23 | std::unique_ptr m_property; 24 | 25 | public: 26 | LuaCustomProperty(StringType name, std::unique_ptr property); 27 | 28 | private: 29 | class PropertyList 30 | { 31 | private: 32 | std::vector properties; 33 | 34 | public: 35 | auto add(StringType property_name, std::unique_ptr) -> void; 36 | auto clear() -> void; 37 | auto find_or_nullptr(Unreal::UObject* base, StringType property_name) -> Unreal::FProperty*; 38 | }; 39 | 40 | public: 41 | struct StaticStorage 42 | { 43 | static PropertyList property_list; 44 | }; 45 | }; 46 | } // namespace RC::LuaType 47 | -------------------------------------------------------------------------------- /UE4SS/include/LuaType/LuaFName.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | namespace RC::LuaType 7 | { 8 | struct FNameName 9 | { 10 | constexpr static const char* ToString() 11 | { 12 | return "FName"; 13 | } 14 | }; 15 | class FName : public LocalObjectBase 16 | { 17 | private: 18 | explicit FName(Unreal::FName object); 19 | 20 | public: 21 | FName() = delete; 22 | auto static construct(const LuaMadeSimple::Lua&, Unreal::FName) -> const LuaMadeSimple::Lua::Table; 23 | auto static construct(const LuaMadeSimple::Lua&, BaseObject&) -> const LuaMadeSimple::Lua::Table; 24 | 25 | private: 26 | auto static setup_metamethods(BaseObject&) -> void; 27 | 28 | private: 29 | template 30 | auto static setup_member_functions(LuaMadeSimple::Lua::Table&) -> void; 31 | }; 32 | } // namespace RC::LuaType 33 | -------------------------------------------------------------------------------- /UE4SS/include/LuaType/LuaFOutputDevice.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC::Unreal 6 | { 7 | class FOutputDevice; 8 | } 9 | 10 | namespace RC::LuaType 11 | { 12 | struct FOutputDeviceName 13 | { 14 | constexpr static const char* ToString() 15 | { 16 | return "FOutputDevice"; 17 | } 18 | }; 19 | class FOutputDevice : public RemoteObjectBase 20 | { 21 | private: 22 | explicit FOutputDevice(Unreal::FOutputDevice* object); 23 | 24 | public: 25 | FOutputDevice() = delete; 26 | auto static construct(const LuaMadeSimple::Lua&, Unreal::FOutputDevice*) -> const LuaMadeSimple::Lua::Table; 27 | auto static construct(const LuaMadeSimple::Lua&, BaseObject&) -> const LuaMadeSimple::Lua::Table; 28 | 29 | private: 30 | auto static setup_metamethods(BaseObject&) -> void; 31 | 32 | private: 33 | template 34 | auto static setup_member_functions(const LuaMadeSimple::Lua::Table&) -> void; 35 | }; 36 | } // namespace RC::LuaType 37 | -------------------------------------------------------------------------------- /UE4SS/include/LuaType/LuaFSoftObjectPath.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | namespace RC::LuaType 7 | { 8 | struct FSoftObjectPathName 9 | { 10 | constexpr static const char* ToString() 11 | { 12 | return "FSoftObjectPath"; 13 | } 14 | }; 15 | class FSoftObjectPath : public LocalObjectBase 16 | { 17 | private: 18 | explicit FSoftObjectPath(Unreal::FSoftObjectPath& object); 19 | 20 | public: 21 | FSoftObjectPath() = delete; 22 | auto static construct(const LuaMadeSimple::Lua&, Unreal::FSoftObjectPath&) -> const LuaMadeSimple::Lua::Table; 23 | auto static construct(const LuaMadeSimple::Lua&, BaseObject&) -> const LuaMadeSimple::Lua::Table; 24 | 25 | private: 26 | auto static setup_metamethods(BaseObject&) -> void; 27 | 28 | private: 29 | template 30 | auto static setup_member_functions(LuaMadeSimple::Lua::Table&, std::string_view) -> void; 31 | }; 32 | } // namespace RC::LuaType 33 | -------------------------------------------------------------------------------- /UE4SS/include/LuaType/LuaFString.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC::Unreal 6 | { 7 | class FString; 8 | } 9 | 10 | namespace RC::LuaType 11 | { 12 | struct FStringName 13 | { 14 | constexpr static const char* ToString() 15 | { 16 | return "FString"; 17 | } 18 | }; 19 | class FString : public LocalObjectBase 20 | { 21 | private: 22 | explicit FString(Unreal::FString* object); 23 | 24 | public: 25 | FString() = delete; 26 | auto static construct(const LuaMadeSimple::Lua&, Unreal::FString*) -> const LuaMadeSimple::Lua::Table; 27 | auto static construct(const LuaMadeSimple::Lua&, BaseObject&) -> const LuaMadeSimple::Lua::Table; 28 | 29 | private: 30 | auto static setup_metamethods(BaseObject&) -> void; 31 | 32 | private: 33 | template 34 | auto static setup_member_functions(const LuaMadeSimple::Lua::Table&) -> void; 35 | }; 36 | } // namespace RC::LuaType 37 | -------------------------------------------------------------------------------- /UE4SS/include/LuaType/LuaFText.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | namespace RC::Unreal 7 | { 8 | class FText; 9 | } 10 | 11 | namespace RC::LuaType 12 | { 13 | struct FTextName 14 | { 15 | constexpr static const char* ToString() 16 | { 17 | return "FText"; 18 | } 19 | }; 20 | class FText : public LocalObjectBase 21 | { 22 | private: 23 | explicit FText(Unreal::FText object); 24 | 25 | public: 26 | FText() = delete; 27 | auto static construct(const LuaMadeSimple::Lua&, Unreal::FText) -> const LuaMadeSimple::Lua::Table; 28 | auto static construct(const LuaMadeSimple::Lua&, BaseObject&) -> const LuaMadeSimple::Lua::Table; 29 | 30 | private: 31 | auto static setup_metamethods(BaseObject&) -> void; 32 | 33 | private: 34 | template 35 | auto static setup_member_functions(const LuaMadeSimple::Lua::Table&) -> void; 36 | }; 37 | } // namespace RC::LuaType 38 | -------------------------------------------------------------------------------- /UE4SS/include/LuaType/LuaFURL.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | namespace RC::LuaType 7 | { 8 | struct FURLName 9 | { 10 | constexpr static const char* ToString() 11 | { 12 | return "FURL"; 13 | } 14 | }; 15 | 16 | class FURL : public LocalObjectBase 17 | { 18 | private: 19 | explicit FURL(Unreal::FURL object); 20 | 21 | public: 22 | FURL() = delete; 23 | auto static construct(const LuaMadeSimple::Lua&, Unreal::FURL) -> const LuaMadeSimple::Lua::Table; 24 | auto static construct(const LuaMadeSimple::Lua&, BaseObject&) -> const LuaMadeSimple::Lua::Table; 25 | 26 | private: 27 | auto static setup_metamethods(BaseObject&) -> void; 28 | 29 | private: 30 | template 31 | auto static setup_member_functions(LuaMadeSimple::Lua::Table&) -> void; 32 | }; 33 | } // namespace RC::LuaType 34 | -------------------------------------------------------------------------------- /UE4SS/include/LuaType/LuaFWeakObjectPtr.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #pragma warning(disable : 4005) 5 | #include 6 | #pragma warning(default : 4005) 7 | 8 | namespace RC::Unreal 9 | { 10 | class UClass; 11 | } 12 | 13 | namespace RC::LuaType 14 | { 15 | struct FWeakObjectPtrName 16 | { 17 | constexpr static const char* ToString() 18 | { 19 | return "FWeakObjectPtr"; 20 | } 21 | }; 22 | class FWeakObjectPtr : public LocalObjectBase 23 | { 24 | private: 25 | explicit FWeakObjectPtr(Unreal::FWeakObjectPtr object); 26 | 27 | public: 28 | FWeakObjectPtr() = delete; 29 | auto static construct(const LuaMadeSimple::Lua&, Unreal::FWeakObjectPtr) -> const LuaMadeSimple::Lua::Table; 30 | auto static construct(const LuaMadeSimple::Lua&, BaseObject&) -> const LuaMadeSimple::Lua::Table; 31 | 32 | private: 33 | auto static setup_metamethods(BaseObject&) -> void; 34 | 35 | private: 36 | template 37 | auto static setup_member_functions(const LuaMadeSimple::Lua::Table&) -> void; 38 | }; 39 | } // namespace RC::LuaType 40 | -------------------------------------------------------------------------------- /UE4SS/include/LuaType/LuaModRef.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC 6 | { 7 | class LuaMod; 8 | } 9 | 10 | namespace RC::LuaType 11 | { 12 | struct ModName 13 | { 14 | constexpr static const char* ToString() 15 | { 16 | return "ModRef"; 17 | } 18 | }; 19 | class LuaModRef : public RemoteObjectBase 20 | { 21 | private: 22 | explicit LuaModRef(RC::LuaMod* object); 23 | 24 | public: 25 | LuaModRef() = delete; 26 | auto static construct(const LuaMadeSimple::Lua&, RC::LuaMod*) -> const LuaMadeSimple::Lua::Table; 27 | 28 | private: 29 | auto static setup_metamethods(BaseObject&) -> void; 30 | 31 | private: 32 | template 33 | auto static setup_member_functions(const LuaMadeSimple::Lua::Table&) -> void; 34 | }; 35 | } // namespace RC::LuaType 36 | -------------------------------------------------------------------------------- /UE4SS/include/LuaType/LuaTSoftClassPtr.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | namespace RC::LuaType 7 | { 8 | struct TSoftClassPtrName 9 | { 10 | constexpr static const char* ToString() 11 | { 12 | return "TSoftClassPtr"; 13 | } 14 | }; 15 | class TSoftClassPtr : public LocalObjectBase 16 | { 17 | private: 18 | explicit TSoftClassPtr(Unreal::FSoftObjectPtr object); 19 | 20 | public: 21 | TSoftClassPtr() = delete; 22 | auto static construct(const LuaMadeSimple::Lua&, Unreal::FSoftObjectPtr&) -> const LuaMadeSimple::Lua::Table; 23 | auto static construct(const LuaMadeSimple::Lua&, BaseObject&) -> const LuaMadeSimple::Lua::Table; 24 | 25 | private: 26 | auto static setup_metamethods(BaseObject&) -> void; 27 | 28 | private: 29 | template 30 | auto static setup_member_functions(LuaMadeSimple::Lua::Table&, std::string_view) -> void; 31 | }; 32 | } // namespace RC::LuaType 33 | -------------------------------------------------------------------------------- /UE4SS/include/LuaType/LuaUEnum.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC::Unreal 6 | { 7 | class UEnum; 8 | } 9 | 10 | namespace RC::LuaType 11 | { 12 | struct UEnumName 13 | { 14 | constexpr static const char* ToString() 15 | { 16 | return "UEnum"; 17 | } 18 | }; 19 | class UEnum : public RemoteObjectBase 20 | { 21 | public: 22 | using Super = UObject; 23 | 24 | private: 25 | explicit UEnum(Unreal::UEnum* object); 26 | 27 | public: 28 | UEnum() = delete; 29 | auto static construct(const LuaMadeSimple::Lua&, Unreal::UEnum*) -> const LuaMadeSimple::Lua::Table; 30 | auto static construct(const LuaMadeSimple::Lua&, BaseObject&) -> const LuaMadeSimple::Lua::Table; 31 | 32 | private: 33 | auto static setup_metamethods(BaseObject&) -> void; 34 | 35 | private: 36 | template 37 | auto static setup_member_functions(const LuaMadeSimple::Lua::Table&) -> void; 38 | }; 39 | } // namespace RC::LuaType 40 | -------------------------------------------------------------------------------- /UE4SS/include/LuaType/LuaUWorld.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | namespace RC::Unreal 7 | { 8 | class UWorld; 9 | } 10 | 11 | namespace RC::LuaType 12 | { 13 | struct UWorldName 14 | { 15 | constexpr static const char* ToString() 16 | { 17 | return "UWorld"; 18 | } 19 | }; 20 | class UWorld : public RemoteObjectBase 21 | { 22 | private: 23 | explicit UWorld(Unreal::UWorld* object); 24 | 25 | public: 26 | UWorld() = delete; 27 | auto static construct(const LuaMadeSimple::Lua&, Unreal::UWorld*) -> const LuaMadeSimple::Lua::Table; 28 | auto static construct(const LuaMadeSimple::Lua&, BaseObject&) -> const LuaMadeSimple::Lua::Table; 29 | 30 | private: 31 | auto static setup_metamethods(BaseObject&) -> void; 32 | 33 | private: 34 | template 35 | auto static setup_member_functions(const LuaMadeSimple::Lua::Table&) -> void; 36 | }; 37 | } // namespace RC::LuaType 38 | -------------------------------------------------------------------------------- /UE4SS/include/LuaType/LuaXArrayProperty.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC::Unreal 6 | { 7 | class FArrayProperty; 8 | } 9 | 10 | namespace RC::LuaType 11 | { 12 | struct FArrayPropertyName 13 | { 14 | constexpr static const char* ToString() 15 | { 16 | return "ArrayProperty"; 17 | } 18 | }; 19 | class XArrayProperty : public RemoteObjectBase 20 | { 21 | public: 22 | using Super = XProperty; 23 | 24 | private: 25 | explicit XArrayProperty(Unreal::FArrayProperty* object); 26 | 27 | public: 28 | XArrayProperty() = delete; 29 | auto static construct(const LuaMadeSimple::Lua&, Unreal::FArrayProperty*) -> const LuaMadeSimple::Lua::Table; 30 | auto static construct(const LuaMadeSimple::Lua&, BaseObject&) -> const LuaMadeSimple::Lua::Table; 31 | 32 | private: 33 | auto static setup_metamethods(BaseObject&) -> void; 34 | 35 | private: 36 | template 37 | auto static setup_member_functions(const LuaMadeSimple::Lua::Table&) -> void; 38 | }; 39 | } // namespace RC::LuaType 40 | -------------------------------------------------------------------------------- /UE4SS/include/LuaType/LuaXBoolProperty.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC::Unreal 6 | { 7 | class FBoolProperty; 8 | } 9 | 10 | namespace RC::LuaType 11 | { 12 | struct FBoolPropertyName 13 | { 14 | constexpr static const char* ToString() 15 | { 16 | return "ObjectProperty"; 17 | } 18 | }; 19 | class XBoolProperty : public RemoteObjectBase 20 | { 21 | public: 22 | using Super = XProperty; 23 | 24 | private: 25 | explicit XBoolProperty(Unreal::FBoolProperty* object); 26 | 27 | public: 28 | XBoolProperty() = delete; 29 | auto static construct(const LuaMadeSimple::Lua&, Unreal::FBoolProperty*) -> const LuaMadeSimple::Lua::Table; 30 | auto static construct(const LuaMadeSimple::Lua&, BaseObject&) -> const LuaMadeSimple::Lua::Table; 31 | 32 | private: 33 | auto static setup_metamethods(BaseObject&) -> void; 34 | 35 | private: 36 | template 37 | auto static setup_member_functions(const LuaMadeSimple::Lua::Table&) -> void; 38 | }; 39 | } // namespace RC::LuaType 40 | -------------------------------------------------------------------------------- /UE4SS/include/LuaType/LuaXEnumProperty.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC::Unreal 6 | { 7 | class FEnumProperty; 8 | } 9 | 10 | namespace RC::LuaType 11 | { 12 | struct FEnumPropertyName 13 | { 14 | constexpr static const char* ToString() 15 | { 16 | return "EnumProperty"; 17 | } 18 | }; 19 | class XEnumProperty : public RemoteObjectBase 20 | { 21 | public: 22 | using Super = XProperty; 23 | 24 | private: 25 | explicit XEnumProperty(Unreal::FEnumProperty* object); 26 | 27 | public: 28 | XEnumProperty() = delete; 29 | auto static construct(const LuaMadeSimple::Lua&, Unreal::FEnumProperty*) -> const LuaMadeSimple::Lua::Table; 30 | auto static construct(const LuaMadeSimple::Lua&, BaseObject&) -> const LuaMadeSimple::Lua::Table; 31 | 32 | private: 33 | auto static setup_metamethods(BaseObject&) -> void; 34 | 35 | private: 36 | template 37 | auto static setup_member_functions(const LuaMadeSimple::Lua::Table&) -> void; 38 | }; 39 | } // namespace RC::LuaType 40 | -------------------------------------------------------------------------------- /UE4SS/include/LuaType/LuaXInterfaceProperty.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC::Unreal 6 | { 7 | class FInterfaceProperty; 8 | } 9 | 10 | namespace RC::LuaType 11 | { 12 | struct FInterfacePropertyName 13 | { 14 | constexpr static const char* ToString() 15 | { 16 | return "InterfaceProperty"; 17 | } 18 | }; 19 | class XInterfaceProperty : public RemoteObjectBase 20 | { 21 | public: 22 | using Super = XProperty; 23 | 24 | private: 25 | explicit XInterfaceProperty(Unreal::FInterfaceProperty* object); 26 | 27 | public: 28 | XInterfaceProperty() = delete; 29 | auto static construct(const LuaMadeSimple::Lua&, Unreal::FInterfaceProperty*) -> const LuaMadeSimple::Lua::Table; 30 | auto static construct(const LuaMadeSimple::Lua&, BaseObject&) -> const LuaMadeSimple::Lua::Table; 31 | 32 | private: 33 | auto static setup_metamethods(BaseObject&) -> void; 34 | 35 | private: 36 | template 37 | auto static setup_member_functions(const LuaMadeSimple::Lua::Table&) -> void; 38 | }; 39 | } // namespace RC::LuaType 40 | -------------------------------------------------------------------------------- /UE4SS/include/LuaType/LuaXObjectProperty.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC::Unreal 6 | { 7 | class FObjectProperty; 8 | } 9 | 10 | namespace RC::LuaType 11 | { 12 | struct FObjectPropertyName 13 | { 14 | constexpr static const char* ToString() 15 | { 16 | return "ObjectProperty"; 17 | } 18 | }; 19 | class XObjectProperty : public RemoteObjectBase 20 | { 21 | public: 22 | using Super = XProperty; 23 | 24 | private: 25 | explicit XObjectProperty(Unreal::FObjectProperty* object); 26 | 27 | public: 28 | XObjectProperty() = delete; 29 | auto static construct(const LuaMadeSimple::Lua&, Unreal::FObjectProperty*) -> const LuaMadeSimple::Lua::Table; 30 | auto static construct(const LuaMadeSimple::Lua&, BaseObject&) -> const LuaMadeSimple::Lua::Table; 31 | 32 | private: 33 | auto static setup_metamethods(BaseObject&) -> void; 34 | 35 | private: 36 | template 37 | auto static setup_member_functions(const LuaMadeSimple::Lua::Table&) -> void; 38 | }; 39 | } // namespace RC::LuaType 40 | -------------------------------------------------------------------------------- /UE4SS/include/LuaType/LuaXProperty.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC::Unreal 6 | { 7 | class FProperty; 8 | } 9 | 10 | namespace RC::LuaType 11 | { 12 | auto auto_construct_property(const LuaMadeSimple::Lua&, Unreal::FProperty*) -> void; 13 | 14 | struct FPropertyName 15 | { 16 | constexpr static const char* ToString() 17 | { 18 | return "Property"; 19 | } 20 | }; 21 | class XProperty : public RemoteObjectBase 22 | { 23 | public: 24 | using Super = RemoteObjectBase; 25 | 26 | private: 27 | explicit XProperty(Unreal::FProperty* object); 28 | 29 | public: 30 | XProperty() = delete; 31 | auto static construct(const LuaMadeSimple::Lua&, Unreal::FProperty*) -> const LuaMadeSimple::Lua::Table; 32 | auto static construct(const LuaMadeSimple::Lua&, BaseObject&) -> const LuaMadeSimple::Lua::Table; 33 | 34 | private: 35 | auto static setup_metamethods(BaseObject&) -> void; 36 | 37 | public: 38 | template 39 | auto static setup_member_functions(const LuaMadeSimple::Lua::Table&) -> void; 40 | }; 41 | } // namespace RC::LuaType 42 | -------------------------------------------------------------------------------- /UE4SS/include/LuaType/LuaXStructProperty.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC::Unreal 6 | { 7 | class FStructProperty; 8 | } 9 | 10 | namespace RC::LuaType 11 | { 12 | struct FStructPropertyName 13 | { 14 | constexpr static const char* ToString() 15 | { 16 | return "StructProperty"; 17 | } 18 | }; 19 | class XStructProperty : public RemoteObjectBase 20 | { 21 | public: 22 | using Super = XProperty; 23 | 24 | private: 25 | explicit XStructProperty(Unreal::FStructProperty* object); 26 | 27 | public: 28 | XStructProperty() = delete; 29 | auto static construct(const LuaMadeSimple::Lua&, Unreal::FStructProperty*) -> const LuaMadeSimple::Lua::Table; 30 | auto static construct(const LuaMadeSimple::Lua&, BaseObject&) -> const LuaMadeSimple::Lua::Table; 31 | 32 | private: 33 | auto static setup_metamethods(BaseObject&) -> void; 34 | 35 | private: 36 | template 37 | auto static setup_member_functions(const LuaMadeSimple::Lua::Table&) -> void; 38 | }; 39 | } // namespace RC::LuaType 40 | -------------------------------------------------------------------------------- /UE4SS/include/SDKGenerator/Generator.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | #include 8 | #include 9 | 10 | namespace RC::Unreal 11 | { 12 | class UObject; 13 | class UFunction; 14 | class UStruct; 15 | class UClass; 16 | class UScriptStruct; 17 | class FProperty; 18 | } // namespace RC::Unreal 19 | 20 | namespace RC::UEGenerator 21 | { 22 | enum class IsDelegateFunction 23 | { 24 | Yes, 25 | No, 26 | }; 27 | 28 | auto generate_cxx_headers(const std::filesystem::path directory_to_generate_in) -> void; 29 | auto generate_lua_types(const std::filesystem::path directory_to_generate_in) -> void; 30 | } // namespace RC::UEGenerator 31 | -------------------------------------------------------------------------------- /UE4SS/include/SDKGenerator/JSONDumper.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC 6 | { 7 | class UE4SSProgram; 8 | } 9 | 10 | namespace RC::UEGenerator::JSONDumper 11 | { 12 | auto dump_to_json(File::StringViewType file_name) -> void; 13 | } 14 | -------------------------------------------------------------------------------- /UE4SS/include/SDKGenerator/TMapOverrideGen.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | namespace RC::UEGenerator 9 | { 10 | using RC::Unreal::FName; 11 | 12 | class TMapOverrideGenerator 13 | { 14 | public: 15 | static std::unordered_set MapProperties; 16 | static auto generate_tmapoverride() -> void; 17 | }; 18 | } // namespace RC::UEGenerator 19 | -------------------------------------------------------------------------------- /UE4SS/include/Signatures.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | 7 | namespace RC::Unreal::UnrealInitializer 8 | { 9 | struct Config; 10 | } 11 | 12 | namespace RC 13 | { 14 | class SignatureContainer; 15 | 16 | enum class DidLuaScanSucceed 17 | { 18 | Yes, 19 | No, 20 | }; 21 | 22 | auto scan_complete_default_func(DidLuaScanSucceed) -> void; 23 | 24 | using LuaScriptMatchFoundFunc = const std::function; 25 | using LuaScriptScanCompleteFunc = const std::function; 26 | auto scan_from_lua_script(std::filesystem::path& script_file_path_and_name, 27 | std::vector&, 28 | LuaScriptMatchFoundFunc& match_found_func, 29 | LuaScriptScanCompleteFunc& scan_complete_func = &scan_complete_default_func) -> void; 30 | 31 | auto setup_lua_scan_overrides(std::filesystem::path& working_directory, Unreal::UnrealInitializer::Config&) -> void; 32 | } // namespace RC 33 | -------------------------------------------------------------------------------- /UE4SS/include/USMapGenerator/Generator.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace RC::OutTheShade 4 | { 5 | auto generate_usmap() -> void; 6 | } 7 | -------------------------------------------------------------------------------- /UE4SS/proxy_generator/exports/xinput1_3.exports: -------------------------------------------------------------------------------- 1 | Path: C:\Windows\System32\xinput1_3.dll 2 | 3 | 1 DllMain 4 | 5 XInputEnable 5 | 7 XInputGetBatteryInformation 6 | 4 XInputGetCapabilities 7 | 6 XInputGetDSoundAudioDeviceGuids 8 | 8 XInputGetKeystroke 9 | 2 XInputGetState 10 | 3 XInputSetState 11 | 100 12 | 101 13 | 102 14 | 103 15 | -------------------------------------------------------------------------------- /UE4SS/proxy_generator/proxy/proxy.rc: -------------------------------------------------------------------------------- 1 | 1 VERSIONINFO 2 | FILEVERSION 0,0,0,0 3 | PRODUCTVERSION 0,0,0,0 4 | FILEFLAGSMASK 0x17L 5 | #ifdef _DEBUG 6 | FILEFLAGS 0x1L 7 | #else 8 | FILEFLAGS 0x0L 9 | #endif 10 | FILEOS 0x4L 11 | FILETYPE 0x1L 12 | FILESUBTYPE 0x0L 13 | BEGIN 14 | BLOCK "StringFileInfo" 15 | BEGIN 16 | BLOCK "040904b0" 17 | BEGIN 18 | VALUE "FileDescription", "UE4SS Injection Proxy" 19 | VALUE "FileVersion", "0.0.0.0" 20 | VALUE "InternalName", "proxy.rc" 21 | VALUE "LegalCopyright", "Copyright (C) 2023" 22 | VALUE "OriginalFilename", "proxy.rc" 23 | VALUE "ProductName", "UE4SS Injection Proxy" 24 | VALUE "ProductVersion", "0.0.0.0" 25 | END 26 | END 27 | BLOCK "VarFileInfo" 28 | BEGIN 29 | VALUE "Translation", 0x409, 1200 30 | END 31 | END -------------------------------------------------------------------------------- /UE4SS/src/GUI/GUITab.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | -------------------------------------------------------------------------------- /UE4SS/src/GUI/LiveView.1.PVS-Studio.cfg: -------------------------------------------------------------------------------- 1 | analysis-mode=12 2 | disable-ms-extensions=yes 3 | exclude-path=*\boost\* 4 | exclude-path=*\zlib\* 5 | exclude-path=*\png\* 6 | exclude-path=*\libpng\* 7 | exclude-path=*\pnglib\* 8 | exclude-path=*\freetype\* 9 | exclude-path=*\ImageMagick\* 10 | exclude-path=*\jpeglib\* 11 | exclude-path=*\libxml\* 12 | exclude-path=*\libxslt\* 13 | exclude-path=*\tifflib\* 14 | exclude-path=*\wxWidgets\* 15 | exclude-path=*\libtiff\* 16 | exclude-path=*\mesa\* 17 | exclude-path=*\cximage\* 18 | exclude-path=*\bzip2-* 19 | exclude-path=*\bzip2\* 20 | exclude-path=*\UE_*\Engine\Source\* 21 | exclude-path=*\wxWidgets\* 22 | exclude-path=*\libtiff\* 23 | exclude-path=*\glm\* 24 | exclude-path=*\spdlog\* 25 | exclude-path=*\cgltf\* 26 | force-stdout-output=yes 27 | fshort-double=no 28 | fshort-float=no 29 | funsigned-char=no 30 | i-file=C:\Users\Kate\Desktop\ue4sswork\RE-UE4SS\UE4SS\src\GUI\LiveView.1.PVS-Studio.i 31 | language=C++ 32 | lic-file=C:\Users\Kate\AppData\Local\Temp\12156350750924277543.lic 33 | new-output-format=yes 34 | output-file=C:\Users\Kate\Desktop\ue4sswork\RE-UE4SS\.PVS-Studio\logs\LiveView.cpp.364.log 35 | platform=x64 36 | preprocessor=visualcpp 37 | source-file=C:\Users\Kate\Desktop\ue4sswork\RE-UE4SS\UE4SS\src\GUI\LiveView.cpp 38 | sourcetree-root= 39 | std=c++20 40 | timeout=600 41 | -------------------------------------------------------------------------------- /UE4SS/src/USMapGenerator/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Shade 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /UVTD/.clang-format: -------------------------------------------------------------------------------- 1 | # Format Style Options - Created with Clang Power Tools 2 | --- 3 | AllowAllArgumentsOnNextLine: false 4 | AllowShortBlocksOnASingleLine: Empty 5 | AllowShortLambdasOnASingleLine: Empty 6 | AllowShortIfStatementsOnASingleLine: WithoutElse 7 | AlwaysBreakTemplateDeclarations: Yes 8 | BasedOnStyle: Microsoft 9 | BinPackArguments: false 10 | BinPackParameters: false 11 | ColumnLimit: 160 12 | ContinuationIndentWidth: 8 13 | NamespaceIndentation: All 14 | ObjCBreakBeforeNestedBlockParam: false 15 | PenaltyBreakBeforeFirstCallParameter: 120 16 | PenaltyExcessCharacter: 5 17 | PointerAlignment: Left 18 | Standard: Latest 19 | ... 20 | -------------------------------------------------------------------------------- /UVTD/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Narknon 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /UVTD/include/UVTD/ExceptionHandling.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | #include 7 | 8 | namespace RC 9 | { 10 | // Will try some code and properly propagate any exceptions 11 | // This is a simple helper function to avoid having 15 extra lines of code everywhere 12 | template 13 | auto constexpr TRY(CodeToTry code_to_try) -> void 14 | { 15 | try 16 | { 17 | code_to_try(); 18 | } 19 | catch (std::exception& e) 20 | { 21 | if (!Output::has_internal_error()) 22 | { 23 | Output::send(STR("Error: {}\n"), to_wstring(e.what())); 24 | } 25 | else 26 | { 27 | printf_s("Internal Error: %s\n", e.what()); 28 | } 29 | } 30 | } 31 | } // namespace RC 32 | -------------------------------------------------------------------------------- /UVTD/include/UVTD/MemberVarsWrapperGenerator.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC::UVTD 6 | { 7 | class MemberVarsWrapperGenerator 8 | { 9 | private: 10 | TypeContainer type_container; 11 | 12 | public: 13 | MemberVarsWrapperGenerator() = delete; 14 | 15 | explicit MemberVarsWrapperGenerator(TypeContainer container) : type_container(std::move(container)) 16 | { 17 | } 18 | 19 | public: 20 | auto generate_files() -> void; 21 | 22 | public: 23 | static auto output_cleanup() -> void; 24 | }; 25 | } // namespace RC::UVTD -------------------------------------------------------------------------------- /UVTD/include/UVTD/SolBindingsGenerator.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | #include 7 | #include 8 | 9 | namespace RC::UVTD 10 | { 11 | class SolBindingsGenerator 12 | { 13 | private: 14 | Symbols symbols; 15 | TypeContainer type_container; 16 | 17 | public: 18 | SolBindingsGenerator() = delete; 19 | 20 | explicit SolBindingsGenerator(Symbols symbols) : symbols(std::move(symbols)) 21 | { 22 | } 23 | 24 | public: 25 | auto generate_code() -> void; 26 | auto generate_files() -> void; 27 | 28 | public: 29 | static auto output_cleanup() -> void; 30 | }; 31 | } // namespace RC::UVTD -------------------------------------------------------------------------------- /UVTD/include/UVTD/TemplateClassParser.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | 7 | namespace RC::UVTD 8 | { 9 | struct ParsedTemplateClass 10 | { 11 | File::StringType class_name; 12 | std::vector template_args; 13 | }; 14 | 15 | class TemplateClassParser 16 | { 17 | public: 18 | static ParsedTemplateClass Parse(File::StringViewType input); 19 | }; 20 | } // namespace RC::UVTD -------------------------------------------------------------------------------- /UVTD/include/UVTD/TypeContainer.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | #include 7 | 8 | namespace RC::UVTD 9 | { 10 | class TypeContainer 11 | { 12 | private: 13 | using ClassEntries = std::unordered_map; 14 | 15 | ClassEntries class_entries; 16 | 17 | public: 18 | auto join(const TypeContainer& other) -> void; 19 | 20 | public: 21 | constexpr auto get_class_entries() const -> const ClassEntries& 22 | { 23 | return class_entries; 24 | } 25 | 26 | public: 27 | auto get_or_create_class_entry(const File::StringType& symbol_name, const File::StringType& symbol_name_clean, const SymbolNameInfo& name_info) -> Class&; 28 | }; 29 | } // namespace RC::UVTD -------------------------------------------------------------------------------- /UVTD/include/UVTD/UVTD.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | 14 | namespace RC::UVTD 15 | { 16 | extern bool processing_events; 17 | 18 | auto main(DumpSettings) -> void; 19 | } // namespace RC::UVTD // RC_UVTD_HPP 20 | -------------------------------------------------------------------------------- /UVTD/include/UVTD/UnrealVirtualGenerator.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC::UVTD 6 | { 7 | class UnrealVirtualGenerator 8 | { 9 | private: 10 | File::StringType pdb_name; 11 | TypeContainer type_container; 12 | 13 | public: 14 | UnrealVirtualGenerator() = delete; 15 | 16 | explicit UnrealVirtualGenerator(File::StringType pdb_name, TypeContainer container) 17 | : pdb_name(std::move(pdb_name)), type_container(std::move(container)) 18 | { 19 | } 20 | 21 | public: 22 | auto generate_files() -> void; 23 | 24 | public: 25 | static auto output_cleanup() -> void; 26 | }; 27 | } // namespace RC::UVTD -------------------------------------------------------------------------------- /UVTD/xmake.lua: -------------------------------------------------------------------------------- 1 | local projectName = "UVTD" 2 | 3 | add_requires("raw_pdb", { debug = is_mode_debug(), configs = {runtimes = get_mode_runtimes()} }) 4 | 5 | target(projectName) 6 | set_kind("binary") 7 | set_languages("cxx23") 8 | set_exceptions("cxx") 9 | 10 | add_includedirs("include", { public = true }) 11 | add_headerfiles("include/**.hpp") 12 | 13 | add_files("src/**.cpp") 14 | 15 | add_deps("File", "Input", "DynamicOutput", "Helpers") 16 | 17 | add_packages("glaze", "raw_pdb") 18 | -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Abiotic Factor/Readme.md: -------------------------------------------------------------------------------- 1 | Abiotic Factor is game made completely with Blueprints and is currently in Early Access. 2 | Right now it uses UE 5.4.4. 3 | UE4SS works, but is unstable. It often crashes when leaving the game to main menu or sometimes after loading into a game. 4 | But works during a play session most of the time, with rare crashes. 5 | -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Final Fantasy 7 Rebirth/UE4SS_Signatures/FName_Constructor.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "41 B8 01 00 00 00 48 8D 4C 24 ?? E8 ?? ?? ?? ?? C6 44 24 48 00" 3 | end 4 | 5 | function OnMatchFound(matchAddress) 6 | local nextInstr = matchAddress + 16 7 | local offset = matchAddress + 12 8 | local dataMoved = nextInstr + DerefToInt32(offset) 9 | 10 | return dataMoved 11 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Final Fantasy 7 Rebirth/UE4SS_Signatures/FText_Constructor.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "E8 ?? ?? ?? ?? 45 33 C0 48 8D 55 ?? 49 8B CF 4C 8B E8 E8 ?? ?? ?? ??" 3 | end 4 | 5 | function OnMatchFound(matchAddress) 6 | local nextInstr = matchAddress + 5 7 | local offset = matchAddress + 1 8 | local dataMoved = nextInstr + DerefToInt32(offset) 9 | 10 | return dataMoved 11 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Final Fantasy 7 Rebirth/UE4SS_Signatures/GNatives.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "80 3d ?? ?? ?? ?? 00 48 8d 15 ?? ?? ?? ?? 75 ?? c6 05 ?? ?? ?? ?? 01 48 8d 05 ?? ?? ?? ?? b9" 3 | end 4 | 5 | function OnMatchFound(matchAddress) 6 | local nextInstr = matchAddress + 30 7 | local offset = matchAddress + 26 8 | local dataMoved = nextInstr + DerefToInt32(offset) 9 | 10 | return dataMoved 11 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Final Fantasy 7 Rebirth/UE4SS_Signatures/GUObjectArray.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "03 ?? ?? ?? ?? ?? FF C8 3B D0 0F 8D ?? ?? ?? ?? 44 8B" 3 | end 4 | 5 | function OnMatchFound(matchAddress) 6 | local nextInstr = matchAddress + 6 7 | local offset = matchAddress + 2 8 | local dataMoved = nextInstr + DerefToInt32(offset) 9 | 10 | return dataMoved 11 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Final Fantasy 7 Rebirth/UE4SS_Signatures/ProcessLocalScriptFunction.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "48 89 5C 24 08 48 89 74 24 20 57 B8 70 00 00 00 E8 ?? ?? ?? ?? 48 2B E0 48 8B ?? ?? ?? ?? ?? 48 33 C4 48 89 44 24 60 48 8B 42 20 49 8B F0 48 8B DA EB 15" 3 | -- return "40 55 53 56 57 41 54 41 55 41 56 41 57 B8 E8 00 00 00" 4 | end 5 | 6 | function OnMatchFound(matchAddress) 7 | 8 | return matchAddress 9 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Final Fantasy 7 Remake/UE4SS_Signatures/GUObjectArray.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "48 8B ?? ?? ?? ?? ?? 4C 8B 04 C8 4D 85 C0 74 07 ?? ?? ?? 0F 94" 3 | end 4 | 5 | function OnMatchFound(matchAddress) 6 | local nextInstr = matchAddress + 0x7 7 | local offset = matchAddress + 0x3 8 | local dataMoved = nextInstr + DerefToInt32(offset)-0x10 9 | 10 | return dataMoved 11 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Ghost Wire Tokyo/UE4SS_Signatures/FName_Constructor.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "48 89 5C 24 10 48 89 74 24 18 57 48 81 EC 40 04 00 00" 3 | end 4 | 5 | function OnMatchFound(MatchAddress) 6 | return MatchAddress 7 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Ghost Wire Tokyo/UE4SS_Signatures/FName_ToString.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "48 89 5C 24 08 48 89 6C 24 18 48 89 74 24 20 57 41 56 41 57 48 81 EC 50 08 00 00" 3 | end 4 | 5 | function OnMatchFound(MatchAddress) 6 | return MatchAddress 7 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Ghost Wire Tokyo/UE4SS_Signatures/GMalloc.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | --return "48 8B ?? ?? ?? ?? ?? 49 8B F1 49 8B E8 4C 8B F2 48 85 C9 74 50" 3 | return "4C 8B ?? ?? ?? ?? ?? 49 8B 00 48 8B D3 49 8B C8 FF 50 30 48 8B 5C 24 50 48 85 DB 74 3A" 4 | end 5 | 6 | function OnMatchFound(MatchAddress) 7 | local MovInstr = MatchAddress 8 | local NextInstr = MovInstr + 0x7 9 | local Offset = MovInstr + 0x3 10 | local DataMoved = NextInstr + DerefToInt32(Offset) 11 | 12 | return DataMoved 13 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Ghost Wire Tokyo/UE4SS_Signatures/StaticConstructObject.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "48 89 5C 24 10 48 89 74 24 18 55 57 41 54 41 56 41 57 48 8D AC 24 50 FF FF FF 48 81 EC B0 01 00 00 48 8B ?? ?? ?? ?? ?? 48 33 C4 48 89 85 A8 00 00 00" 3 | end 4 | 5 | function OnMatchFound(MatchAddress) 6 | return MatchAddress 7 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Kingdom Hearts 3/UE4SS_Signatures/FName_Constructor.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "4053 4883EC30 488BD9 4885D2 7421 458BC8 C74424 28 FFFFFFFF 4533C0 C644242001 E8DA040000 488BC3" 3 | end 4 | 5 | function OnMatchFound(MatchAddress) 6 | return MatchAddress 7 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Kingdom Hearts 3/UE4SS_Signatures/FName_ToString.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "4 8/8 9/5 C/2 4/0 8/4 8/8 9/7 4/2 4/1 0/4 8/8 9/7 C/2 4/1 8/4 1/5 6/4 8/8 3/E C/2 0/4 8/8 B/D A/4 C/8 B/F 1/? ?/? ?/? ?/? ?/? ?/4 C/8 B/C 8/4 1/8 B/0 6/9 9" 3 | end 4 | 5 | function OnMatchFound(MatchAddress) 6 | return MatchAddress 7 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Kingdom Hearts 3/UE4SS_Signatures/StaticConstructObject.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "4 0/5 5/5 6/5 7/4 1/5 4/4 1/5 5/4 1/5 6/4 1/5 7/4 8/8 1/E C/B 0/0 1/0 0/0 0" 3 | end 4 | 5 | function OnMatchFound(MatchAddress) 6 | return MatchAddress 7 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Lies of P/UE4SS_Signatures/FText_Constructor.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "48 89 5C 24 ?? 48 89 6C 24 ?? 56 57 41 54 41 56 41 57 48 83 EC ?? 45 33 E4 48 8B F1 48 8B 0D" 3 | end 4 | 5 | function OnMatchFound(MatchAddress) 6 | return MatchAddress 7 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Lies of P/UE4SS_Signatures/StaticConstructObject.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "48 89 ?? 24 30 89 ?? 24 38 E8 ?? ?? ?? ?? 48 ?? ?? 24 70 48 ?? ?? 24 78" 3 | end 4 | 5 | function OnMatchFound(MatchAddress) 6 | local NextInstr = MatchAddress + 14 7 | local Offset = MatchAddress + 10 8 | local AddressLoaded = NextInstr + DerefToInt32(Offset) 9 | return AddressLoaded 10 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Like a Dragon Ishin!/UE4SS_Signatures/GUObjectArray.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "48 8D ?? ?? ?? ?? ?? 44 8B 84 24 90 00 00 00 8B 94 24 98 00 00 00 E8 ?? ?? ?? ?? E8" 3 | end 4 | 5 | function OnMatchFound(MatchAddress) 6 | local LeaInstr = MatchAddress 7 | local NextInstr = LeaInstr + 0x7 8 | local Offset = LeaInstr + 0x3 9 | local AddressLoaded = NextInstr + DerefToInt32(Offset) 10 | return AddressLoaded 11 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Readme.md: -------------------------------------------------------------------------------- 1 | These settings are for games that have altered the engine in ways that make UE4SS not work out of the box. 2 | The folder structure in each game folder is the same as the regular UE4SS structure, meaning that files in the root directory go in the UE4SS root directory. 3 | 4 | IMPORTANT: Some of these files may be out of date as the games/UE4ss updates. If you find that a game's custom game config is out of date, please open an issue on the UE4SS-RE/RE-UE4SS repository. Make sure that you first test if the game works without the custom game config, as it may have been fixed in the latest version of UE4SS. -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Returnal/UE4SS_Signatures/FName_Constructor.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "48 89 5C 24 08 57 48 83 EC 30 45 33 DB 48 89 54 24 20 41 8B F9 48 8B D9 48 8B C2 48 85 D2 74 25 44 0F B7 12 66 45 85 D2 74 1B 66 0F 1F 44 00 00 48 83 C0 02 41 0F B7 CA 44 0B D9 44 0F B7 10 66 45 85 D2" 3 | end 4 | 5 | function OnMatchFound(MatchAddress) 6 | return MatchAddress 7 | end 8 | 9 | -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Returnal/UE4SS_Signatures/FName_ToString.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "48 89 5C 24 10 48 89 6C 24 18 48 89 74 24 20 57 48 83 EC 20 8B 01 48 8B DA 8B F8 44 0F B7 C0 C1 EF 10 48 8B F1 80 3D ?? ?? ?? ?? ?? 89 7C 24 30 44 89 44 24 34 74 09 48 8D ?? ?? ?? ?? ?? EB 16 48 8D ?? ?? ?? ?? ?? E8 ?? ?? ?? ?? 48 8B D0" 3 | end 4 | 5 | function OnMatchFound(MatchAddress) 6 | return MatchAddress 7 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/SCP 5K/Readme.md: -------------------------------------------------------------------------------- 1 | This game is still in early access, so these may break at some point. Last updated for v0.12.1.34. -------------------------------------------------------------------------------- /assets/CustomGameConfigs/SCP 5K/UE4SS_Signatures/FName_Constructor.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "48 89 5C 24 08 57 48 83 EC 30 48 8B D9 48 89 54 24 20 33 C9 41 8B F8 4C 8B DA 44 8B D1 4C 8B CA" 3 | end 4 | 5 | function OnMatchFound(MatchAddress) 6 | return MatchAddress 7 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/SCP 5K/UE4SS_Signatures/FName_ToString.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "48 89 5C 24 10 48 89 6C 24 18 48 89 74 24 20 57 48 83 EC 20 8B 01" 3 | end 4 | 5 | function OnMatchFound(MatchAddress) 6 | return MatchAddress 7 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Satisfactory/UE4SS_Signatures/FName_Constructor.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "E 8/? ?/? ?/? ?/? ?/4 8/8 B/4 4/2 4/3 0/4 8/8 9/? ?/? ?/? ?/? ?/? ?/C 7/0 5" 3 | end 4 | 5 | function OnMatchFound(MatchAddress) 6 | local CallInstr = MatchAddress 7 | local InstrSize = 5 8 | local NextInstr = CallInstr + InstrSize 9 | local Offset = DerefToInt32(CallInstr + 1) 10 | local FNameConstructorAddress = NextInstr + Offset 11 | return FNameConstructorAddress 12 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Split Fiction/UE4SS_Signatures/FText_Constructor.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "E8 ?? ?? ?? ?? 48 8B 7D 78 4C 8B F0" 3 | end 4 | 5 | function OnMatchFound(matchAddress) 6 | local nextInstr = matchAddress + 5 7 | local offset = matchAddress + 1 8 | local dataMoved = nextInstr + DerefToInt32(offset) 9 | 10 | return dataMoved 11 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Split Fiction/UE4SS_Signatures/GUObjectArray.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "48 8D 0D ? ? ? ? E8 ? ? ? ? E8 ? ? ? ? E8 ? ? ? ? C6 05 ? ? ? ? 01" 3 | end 4 | 5 | function OnMatchFound(MatchAddress) 6 | local LeaInstr = MatchAddress 7 | local NextInstr = LeaInstr + 0x7 8 | local Offset = LeaInstr + 0x3 9 | local AddressLoaded = NextInstr + DerefToInt32(Offset) - 0x10 10 | return AddressLoaded 11 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Split Fiction/UE4SS_Signatures/Gnatives.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "48 8D 05 ?? ?? ?? ?? B9 1F 00 00 00 0F" 3 | end 4 | 5 | function OnMatchFound(matchAddress) 6 | local nextInstr = matchAddress + 7 7 | local offset = matchAddress + 3 8 | local dataMoved = nextInstr + DerefToInt32(offset) 9 | 10 | return dataMoved 11 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/The Outer Worlds/Readme.md: -------------------------------------------------------------------------------- 1 | This game is currently unsupported. 2 | These files are here just for future reference if support is ever added. -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Walking Dead Saints & Sinners/UE4SS_Signatures/FName_Constructor.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "48 89 5C 24 08 57 48 83 EC 30 48 8B D9 48 89 54 24 20 33 C9 41 8B F8 4C 8B DA 44" 3 | end 4 | 5 | function OnMatchFound(MatchAddress) 6 | return MatchAddress 7 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Walking Dead Saints & Sinners/UE4SS_Signatures/FName_ToString.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "48 89 5C 24 08 48 89 6C 24 10 48 89 74 24 18 57 48 83 EC 20 48 8B DA 48 8B F1 E8 ?? ?? ?? ?? 44 8B 46 04" 3 | end 4 | 5 | function OnMatchFound(MatchAddress) 6 | return MatchAddress 7 | end -------------------------------------------------------------------------------- /assets/CustomGameConfigs/Walking Dead Saints & Sinners/UE4SS_Signatures/StaticConstructObject.lua: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "48 89 5C 24 10 48 89 6C 24 18 48 89 74 24 20 57 41 56 41 57 48 81 EC A0 01 00 00" 3 | end 4 | 5 | function OnMatchFound(MatchAddress) 6 | return MatchAddress 7 | end -------------------------------------------------------------------------------- /assets/Default_UVTD_Configs/Config/case_preserving_variants.json: -------------------------------------------------------------------------------- 1 | { 2 | "non_case_preserving": [ 3 | "4_27" 4 | ], 5 | "case_preserving": [ 6 | "4_27_CasePreserving" 7 | ] 8 | } -------------------------------------------------------------------------------- /assets/Default_UVTD_Configs/Config/member_rename_map.json: -------------------------------------------------------------------------------- 1 | { 2 | "Class": "ClassPrivate", 3 | "Name": "NamePrivate", 4 | "Outer": "OuterPrivate" 5 | } -------------------------------------------------------------------------------- /assets/Default_UVTD_Configs/Config/pdbs_to_dump.json: -------------------------------------------------------------------------------- 1 | [ 2 | "PDBs/4_10.pdb", 3 | "PDBs/4_11.pdb", 4 | "PDBs/4_12.pdb", 5 | "PDBs/4_13.pdb", 6 | "PDBs/4_14.pdb", 7 | "PDBs/4_15.pdb", 8 | "PDBs/4_16.pdb", 9 | "PDBs/4_17.pdb", 10 | "PDBs/4_18.pdb", 11 | "PDBs/4_19.pdb", 12 | "PDBs/4_20.pdb", 13 | "PDBs/4_21.pdb", 14 | "PDBs/4_22.pdb", 15 | "PDBs/4_23.pdb", 16 | "PDBs/4_24.pdb", 17 | "PDBs/4_25.pdb", 18 | "PDBs/4_26.pdb", 19 | "PDBs/4_27.pdb", 20 | "PDBs/4_27_CasePreserving.pdb", 21 | "PDBs/5_00.pdb", 22 | "PDBs/5_01.pdb", 23 | "PDBs/5_02.pdb", 24 | "PDBs/5_03.pdb", 25 | "PDBs/5_04.pdb", 26 | "PDBs/5_05.pdb" 27 | ] -------------------------------------------------------------------------------- /assets/Default_UVTD_Configs/Config/private_variables.json: -------------------------------------------------------------------------------- 1 | { 2 | "FField": [ 3 | "ClassPrivate", 4 | "NamePrivate", 5 | "Next", 6 | "Owner" 7 | ] 8 | } -------------------------------------------------------------------------------- /assets/Default_UVTD_Configs/Config/uprefix_to_fprefix.json: -------------------------------------------------------------------------------- 1 | [ 2 | "UProperty", 3 | "UMulticastDelegateProperty", 4 | "UObjectPropertyBase", 5 | "UStructProperty", 6 | "UArrayProperty", 7 | "UMapProperty", 8 | "UBoolProperty", 9 | "UByteProperty", 10 | "UNumericProperty", 11 | "UEnumProperty", 12 | "UClassProperty", 13 | "USoftClassProperty", 14 | "UDelegateProperty", 15 | "UInterfaceProperty", 16 | "USetProperty" 17 | ] -------------------------------------------------------------------------------- /assets/Default_UVTD_Configs/Config/virtual_generator_includes.json: -------------------------------------------------------------------------------- 1 | [ 2 | "UObject", 3 | "UEngine", 4 | "UScriptStruct", 5 | "FOutputDevice", 6 | "FField", 7 | "FProperty", 8 | "Property/FNumericProperty", 9 | "Property/FObjectProperty", 10 | "Property/FMulticastDelegateProperty", 11 | "Property/FStructProperty", 12 | "Property/FArrayProperty", 13 | "Property/FMapProperty", 14 | "Property/FBoolProperty", 15 | "Property/NumericPropertyTypes", 16 | "Property/FSetProperty", 17 | "Property/FInterfaceProperty", 18 | "Property/FClassProperty", 19 | "Property/FSoftClassProperty", 20 | "Property/FEnumProperty", 21 | "Property/FFieldPathProperty", 22 | "UFunction", 23 | "UClass", 24 | "World", 25 | "UEnum", 26 | "FWorldContext", 27 | "FArchive", 28 | "AGameModeBase", 29 | "AGameMode", 30 | "UPlayer", 31 | "ULocalPlayer", 32 | "ITextData", 33 | "UGameViewportClient" 34 | ] -------------------------------------------------------------------------------- /assets/MapGenBP/Content/MapGen/MapCreator.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UE4SS-RE/RE-UE4SS/4a887193eb9fd785ef79a07f0754184946e534e4/assets/MapGenBP/Content/MapGen/MapCreator.uasset -------------------------------------------------------------------------------- /assets/MapGenBP/Content/MapGen/MapSpawnStruct.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UE4SS-RE/RE-UE4SS/4a887193eb9fd785ef79a07f0754184946e534e4/assets/MapGenBP/Content/MapGen/MapSpawnStruct.uasset -------------------------------------------------------------------------------- /assets/MapGenBP/Content/MapGen/MeshStruct.uasset: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UE4SS-RE/RE-UE4SS/4a887193eb9fd785ef79a07f0754184946e534e4/assets/MapGenBP/Content/MapGen/MeshStruct.uasset -------------------------------------------------------------------------------- /assets/MapGenBP/Readme.md: -------------------------------------------------------------------------------- 1 | ## UE4SS Map Dumper - Map Gen Editor BP 2 | 3 | Extract to your project's content folder (Content/MapGen/) 4 | 5 | Import the dumped .csv file as a datatable based on "MapSpawnStruct". 6 | 7 | Drag the BP onto an empty map. 8 | 9 | Select the Actor within the map, and set the relevant datatable. 10 | 11 | Press "Create Map" under default in the details tab. -------------------------------------------------------------------------------- /assets/Mods/ActorDumperMod/Scripts/main.lua: -------------------------------------------------------------------------------- 1 | RegisterCustomProperty({ 2 | ["Name"] = "Actors", 3 | ["Type"] = PropertyTypes.ArrayProperty, 4 | ["BelongsToClass"] = "/Script/Engine.Level", 5 | ["OffsetInternal"] = 0x98, 6 | ["ArrayProperty"] = { 7 | ["Type"] = PropertyTypes.ObjectProperty 8 | } 9 | }) 10 | 11 | RegisterKeyBind(Key.NUM_THREE, {ModifierKey.CONTROL}, function() 12 | local Level = FindFirstOf("Level") 13 | local Actors = Level.Actors 14 | 15 | Actors:ForEach(function(Index, ElemWrapper) 16 | local Actor = ElemWrapper:get() 17 | 18 | print(string.format("0x%X %s\n", Actor:GetAddress(), Actor:GetFullName())) 19 | end) 20 | end) 21 | -------------------------------------------------------------------------------- /assets/Mods/BPModLoaderMod/load_order.txt: -------------------------------------------------------------------------------- 1 | ; You only have to include BP mods where load order matters, mods not included here will be loaded in any random order after loading the prioritized mods. 2 | ; Add your BP mods below by their name without .pak at the end, they will be loaded in top to bottom order. 3 | -------------------------------------------------------------------------------- /assets/Mods/CheatManagerEnablerMod/Scripts/main.lua: -------------------------------------------------------------------------------- 1 | RegisterHook("/Script/Engine.PlayerController:ClientRestart", function(self, NewPawn) 2 | local PlayerController = self:get() 3 | 4 | local CheatManagerClass = PlayerController.CheatClass 5 | if not CheatManagerClass:IsValid() then 6 | print("[CheatManager Creator] Controller:CheatClass is nullptr, using default CheatClass instead\n") 7 | 8 | CheatManagerClass = StaticFindObject("/Script/Engine.CheatManager") 9 | end 10 | 11 | if not CheatManagerClass:IsValid() then 12 | print("[CheatManager Creator] Couldn't find default CheatClass, therefore, could not enable Cheat Manager\n") 13 | return 14 | end 15 | 16 | local CreatedCheatManager = StaticConstructObject(CheatManagerClass, PlayerController, 0, 0, 0, nil, false, false, nil) 17 | if CreatedCheatManager:IsValid() then 18 | print(string.format("[CheatManager Creator] Constructed CheatManager [0x%X]\n", CreatedCheatManager:GetAddress())) 19 | 20 | PlayerController.CheatManager = CreatedCheatManager 21 | print("[CheatManager Creator] Enabled CheatManager\n") 22 | else 23 | print("[CheatManager Creator] Was unable to construct CheatManager, therefore, could not enable Cheat Manager\n") 24 | end 25 | end) 26 | -------------------------------------------------------------------------------- /assets/Mods/ConsoleCommandsMod/Scripts/main.lua: -------------------------------------------------------------------------------- 1 | GlobalAr = nil 2 | 3 | function Log(Message) 4 | print("[ConsoleCommandsMod] " .. Message .. "\n") 5 | if type(GlobalAr) == "userdata" and GlobalAr:type() == "FOutputDevice" then 6 | GlobalAr:Log(Message) 7 | end 8 | end 9 | 10 | require("summon_unloaded_assets") 11 | require("set") 12 | require("dump_object") -------------------------------------------------------------------------------- /assets/Mods/ConsoleCommandsMod/Scripts/summon_unloaded_assets.lua: -------------------------------------------------------------------------------- 1 | RegisterConsoleCommandHandler("summon", function(FullCommand, Parameters) 2 | -- If we have no parameters then just let someone else handle this command 3 | if #Parameters < 1 then return false end 4 | 5 | LoadAsset(Parameters[1]) 6 | 7 | -- Return true if this is the final handler for this command 8 | -- Return false if you want another handler to be able to handle this command 9 | -- In this case, we want the CheatManager to also handle this command 10 | return false 11 | end) -------------------------------------------------------------------------------- /assets/Mods/jsbLuaProfilerMod/Scripts/main.lua: -------------------------------------------------------------------------------- 1 | local jsb = require "jsbProfi" 2 | 3 | -- jsb.simpleBenchMulti("test123", 50, print, "testing") 4 | 5 | -- jsb.simpleBench("looptest", ForEachUObject, function(Object, ChunkIndex, ObjectIndex) 6 | -- print(string.format("Chunk: %X | Object: %X | Name: %s\n", ChunkIndex, ObjectIndex, Object:GetFullName())) 7 | -- end) 8 | 9 | -- jsb.profile(15, "testing vm_hook") 10 | 11 | -- ForEachUObject( function(Object, ChunkIndex, ObjectIndex) 12 | -- print(string.format("Chunk: %X | Object: %X | Name: %s\n", ChunkIndex, ObjectIndex, Object:GetFullName())) 13 | -- end) 14 | 15 | -- for i = 1, 50 do print("TEST"..i) end -------------------------------------------------------------------------------- /assets/Mods/mods.json: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "mod_name": "CheatManagerEnablerMod", 4 | "mod_enabled": true 5 | }, 6 | { 7 | "mod_name": "ActorDumperMod", 8 | "mod_enabled": false 9 | }, 10 | { 11 | "mod_name": "ConsoleCommandsMod", 12 | "mod_enabled": true 13 | }, 14 | { 15 | "mod_name": "ConsoleEnablerMod", 16 | "mod_enabled": true 17 | }, 18 | { 19 | "mod_name": "SplitScreenMod", 20 | "mod_enabled": false 21 | }, 22 | { 23 | "mod_name": "LineTraceMod", 24 | "mod_enabled": true 25 | }, 26 | { 27 | "mod_name": "BPML_GenericFunctions", 28 | "mod_enabled": true 29 | }, 30 | { 31 | "mod_name": "BPModLoaderMod", 32 | "mod_enabled": true 33 | }, 34 | { 35 | "mod_name": "jsbLuaProfilerMod", 36 | "mod_enabled": false 37 | }, 38 | { 39 | "mod_name": "Keybinds", 40 | "mod_enabled": true 41 | } 42 | ] -------------------------------------------------------------------------------- /assets/Mods/mods.txt: -------------------------------------------------------------------------------- 1 | CheatManagerEnablerMod : 1 2 | ActorDumperMod : 0 3 | ConsoleCommandsMod : 1 4 | ConsoleEnablerMod : 1 5 | SplitScreenMod : 0 6 | LineTraceMod : 1 7 | BPML_GenericFunctions : 1 8 | BPModLoaderMod : 1 9 | jsbLuaProfilerMod : 0 10 | 11 | 12 | 13 | 14 | ; Built-in keybinds, do not move up! 15 | Keybinds : 1 16 | -------------------------------------------------------------------------------- /assets/UE4SS_Signatures/FName_ToString.lua.example: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "C 3/3 3/C 0/4 8/8 D/5 4/2 4/2 0/4 8/8 B/C F/4 8/8 9/4 4/2 4/2 0/4 8/8 9/4 4/2 4/2 8/E 8" 3 | end 4 | 5 | function OnMatchFound(MatchAddress) 6 | local AOBSize = 22 7 | local CallInstr = MatchAddress + AOBSize - 1 8 | local InstrSize = 5 9 | local NextInstr = CallInstr + InstrSize 10 | local Offset = DerefToInt32(CallInstr + 1) 11 | local ToStringAddress = NextInstr + Offset 12 | return ToStringAddress 13 | end -------------------------------------------------------------------------------- /assets/UE4SS_Signatures/GUObjectArray.lua.example: -------------------------------------------------------------------------------- 1 | function Register() 2 | return "8 B/5 1/0 4/8 5/D 2/7 4/5 A/4 8/6 3/0 1/8 5/C 0/7 8/5 3/4 4/8 B/? ?/? ?/? ?/? ?/? ?/4 1/3 B/C 0/7 D/4 7/4 C/8 B" 3 | end 4 | 5 | function OnMatchFound(matchAddress) 6 | local movInstr = matchAddress + 0x1A 7 | local nextInstr = movInstr + 0x7 8 | local offset = movInstr + 0x3 9 | local dataMoved = nextInstr + DerefToInt32(offset) - 0x10 10 | 11 | return dataMoved 12 | end -------------------------------------------------------------------------------- /cppmods/KismetDebuggerMod/src/dllmain.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | 8 | class KismetDebuggerMod : public RC::CppUserModBase 9 | { 10 | private: 11 | RC::GUI::KismetDebuggerMod::Debugger m_debugger{}; 12 | 13 | public: 14 | KismetDebuggerMod() : CppUserModBase() 15 | { 16 | ModName = STR("KismetDebugger"); 17 | ModVersion = STR("1.0"); 18 | ModDescription = STR("Debugging interface for kismet bytecode"); 19 | ModAuthors = STR("truman"); 20 | 21 | register_tab(STR("Kismet Debugger"), [](CppUserModBase* mod) { 22 | UE4SS_ENABLE_IMGUI() 23 | dynamic_cast(mod)->m_debugger.render(); 24 | }); 25 | } 26 | 27 | ~KismetDebuggerMod() override = default; 28 | }; 29 | 30 | #define KISMET_DEBUGGER_MOD_API __declspec(dllexport) 31 | extern "C" 32 | { 33 | KISMET_DEBUGGER_MOD_API RC::CppUserModBase* start_mod() 34 | { 35 | return new KismetDebuggerMod(); 36 | } 37 | 38 | KISMET_DEBUGGER_MOD_API void uninstall_mod(RC::CppUserModBase* mod) 39 | { 40 | delete mod; 41 | } 42 | } 43 | 44 | -------------------------------------------------------------------------------- /cppmods/KismetDebuggerMod/xmake.lua: -------------------------------------------------------------------------------- 1 | local projectName = "KismetDebuggerMod" 2 | 3 | target(projectName) 4 | add_rules("ue4ss.mod") 5 | add_includedirs("include") 6 | add_files("src/dllmain.cpp", "src/KismetDebugger.cpp") -------------------------------------------------------------------------------- /cppmods/xmake.lua: -------------------------------------------------------------------------------- 1 | includes("KismetDebuggerMod") 2 | -------------------------------------------------------------------------------- /deps/first/ASMHelper/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Narknon 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /deps/first/ASMHelper/include/ASMHelper/ASMHelper.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | namespace RC::ASM 7 | { 8 | struct Instruction 9 | { 10 | void* address{}; 11 | ZydisDecodedInstruction raw{}; 12 | ZydisDecodedOperand* operands{}; 13 | }; 14 | 15 | RC_ASM_API auto resolve_jmp(void* instruction_ptr) -> void*; 16 | RC_ASM_API auto resolve_call(void* instruction_ptr) -> void*; 17 | 18 | RC_ASM_API auto resolve_function_address_from_potential_jmp(void* function_ptr) -> void*; 19 | } // namespace RC::ASM 20 | -------------------------------------------------------------------------------- /deps/first/ASMHelper/include/ASMHelper/Common.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifndef RC_ASM_HELPER_EXPORTS 4 | #ifndef RC_ASM_HELPER_BUILD_STATIC 5 | #ifndef RC_ASM_API 6 | #define RC_ASM_API __declspec(dllimport) 7 | #endif 8 | #else 9 | #ifndef RC_ASM_API 10 | #define RC_ASM_API 11 | #endif 12 | #endif 13 | #else 14 | #ifndef RC_ASM_API 15 | #define RC_ASM_API __declspec(dllexport) 16 | #endif 17 | #endif 18 | -------------------------------------------------------------------------------- /deps/first/ASMHelper/xmake.lua: -------------------------------------------------------------------------------- 1 | local projectName = "ASMHelper" 2 | 3 | target(projectName) 4 | set_kind("static") 5 | set_languages("cxx23") 6 | set_exceptions("cxx") 7 | add_rules("ue4ss.dependency") 8 | 9 | add_includedirs("include", { public = true }) 10 | add_headerfiles("include/**.hpp") 11 | 12 | add_files("src/**.cpp") 13 | 14 | add_deps("File", "DynamicOutput", "Constructs") 15 | add_packages("zydis") -------------------------------------------------------------------------------- /deps/first/ArgsParser/xmake.lua: -------------------------------------------------------------------------------- 1 | local projectName = "ArgsParser" 2 | 3 | target(projectName) 4 | set_kind("binary") 5 | set_languages("cxx23") 6 | set_exceptions("cxx") 7 | add_rules("ue4ss.dependency") 8 | 9 | add_includedirs("include", { public = true }) 10 | add_headerfiles("include/**.hpp") 11 | 12 | add_files("src/**.cpp") 13 | 14 | 15 | add_deps("Helpers") -------------------------------------------------------------------------------- /deps/first/Constructs/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Narknon 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /deps/first/Constructs/include/Constructs/CompileTimeString.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | namespace RC 8 | { 9 | /* 10 | * A compile-time string 11 | * 12 | * @tparam N string size 13 | */ 14 | template 15 | struct ConstString 16 | { 17 | constexpr ConstString(const char (&str)[N]) 18 | { 19 | std::copy_n(str, N, value); 20 | } 21 | 22 | /* 23 | * String value 24 | */ 25 | char value[N]; 26 | }; 27 | 28 | template 29 | ConstString(const char (&)[N]) -> ConstString; 30 | 31 | /* 32 | * A compile-time collection of compile-time strings 33 | * 34 | * @tparam C compile-time strings 35 | * 36 | * Example: 37 | * 38 | * @code{.cpp} 39 | * Strings<"Hi", "Bye"> strings; 40 | * @endcode 41 | */ 42 | template 43 | struct Strings 44 | { 45 | /* 46 | * Compile-time strings storage 47 | */ 48 | constexpr static std::array strings = {std::string_view{C.value}...}; 49 | }; 50 | 51 | } // namespace RC 52 | -------------------------------------------------------------------------------- /deps/first/Constructs/include/Constructs/Loop.hpp: -------------------------------------------------------------------------------- 1 | #ifndef UE4SS_REWRITTEN_LOOP_HPP 2 | #define UE4SS_REWRITTEN_LOOP_HPP 3 | 4 | namespace RC 5 | { 6 | enum class LoopAction 7 | { 8 | Continue, 9 | Break, 10 | }; 11 | } // namespace RC 12 | 13 | #endif // UE4SS_REWRITTEN_LOOP_HPP 14 | -------------------------------------------------------------------------------- /deps/first/Constructs/xmake.lua: -------------------------------------------------------------------------------- 1 | local projectName = "Constructs" 2 | 3 | target(projectName) 4 | set_kind("headeronly") 5 | set_languages("cxx23") 6 | set_exceptions("cxx") 7 | add_rules("ue4ss.dependency") 8 | 9 | add_includedirs("include", { public = true }) 10 | add_headerfiles("include/**.hpp") -------------------------------------------------------------------------------- /deps/first/DynamicOutput/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Narknon 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /deps/first/DynamicOutput/include/DynamicOutput/Common.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifndef RC_DYNAMIC_OUTPUT_EXPORTS 4 | #ifndef RC_DYNAMIC_OUTPUT_BUILD_STATIC 5 | #ifndef RC_DYNOUT_API 6 | #define RC_DYNOUT_API __declspec(dllimport) 7 | #endif 8 | #else 9 | #ifndef RC_DYNOUT_API 10 | #define RC_DYNOUT_API 11 | #endif 12 | #endif 13 | #else 14 | #ifndef RC_DYNOUT_API 15 | #define RC_DYNOUT_API __declspec(dllexport) 16 | #endif 17 | #endif 18 | -------------------------------------------------------------------------------- /deps/first/DynamicOutput/include/DynamicOutput/DynamicOutput.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | // Include this file when using the default output devices 4 | 5 | #include // Line numbers etc... 6 | #include 7 | 8 | #include // stdout 9 | #include // File on drive 10 | #include // Internal & external utility macros 11 | #include // File on drive that gets deleted and re-created before receiving output 12 | #include // Core 13 | #include // Debugging & developing only, remove later 14 | 15 | namespace RC::Output 16 | { 17 | // Change this to whatever you want the default to be for your entire system 18 | // You can explicitly specify a different one when using non-default output devices 19 | using DefaultFileDevice = FileDevice; 20 | } // namespace RC::Output 21 | -------------------------------------------------------------------------------- /deps/first/DynamicOutput/include/DynamicOutput/NewFileDevice.hpp: -------------------------------------------------------------------------------- 1 | #ifndef UE4SS_REWRITTEN_NEWFILEDEVICE_HPP 2 | #define UE4SS_REWRITTEN_NEWFILEDEVICE_HPP 3 | 4 | namespace RC::Output 5 | { 6 | 7 | // Behavior defined as: 8 | // Identical to FileDevice except it deletes the file & re-creates it before outputting anything 9 | class NewFileDevice : public FileDevice 10 | { 11 | public: 12 | NewFileDevice() 13 | { 14 | this->m_always_create_file = true; 15 | } 16 | }; 17 | 18 | } // namespace RC::Output 19 | 20 | #endif // UE4SS_REWRITTEN_NEWFILEDEVICE_HPP 21 | -------------------------------------------------------------------------------- /deps/first/DynamicOutput/xmake.lua: -------------------------------------------------------------------------------- 1 | local projectName = "DynamicOutput" 2 | 3 | target(projectName) 4 | set_kind("static") 5 | set_languages("cxx23") 6 | set_exceptions("cxx") 7 | add_rules("ue4ss.dependency") 8 | 9 | add_includedirs("include", { public = true }) 10 | add_headerfiles("include/**.hpp") 11 | 12 | add_files("src/**.cpp") 13 | 14 | add_deps("File") -------------------------------------------------------------------------------- /deps/first/File/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Narknon 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /deps/first/File/include/File/Common.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifndef RC_FILE_EXPORTS 4 | #ifndef RC_FILE_BUILD_STATIC 5 | #ifndef RC_FILE_API 6 | #define RC_FILE_API __declspec(dllimport) 7 | #endif 8 | #else 9 | #ifndef RC_FILE_API 10 | #define RC_FILE_API 11 | #endif 12 | #endif 13 | #else 14 | #ifndef RC_FILE_API 15 | #define RC_FILE_API __declspec(dllexport) 16 | #endif 17 | #endif 18 | -------------------------------------------------------------------------------- /deps/first/File/include/File/Enums.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace RC::File 4 | { 5 | enum class OpenFor 6 | { 7 | Writing, 8 | Appending, 9 | Reading, 10 | ReadWrite, 11 | }; 12 | 13 | enum class OverwriteExistingFile 14 | { 15 | Yes, 16 | No, 17 | }; 18 | 19 | enum class CreateIfNonExistent 20 | { 21 | Yes, 22 | No, 23 | }; 24 | 25 | enum class IsCachedHandle 26 | { 27 | Yes, 28 | No, 29 | }; 30 | 31 | enum class GenericDataType 32 | { 33 | UnsignedLong, 34 | SignedLong, 35 | UnsignedLongLong, 36 | SignedLongLong, 37 | }; 38 | } // namespace RC::File 39 | -------------------------------------------------------------------------------- /deps/first/File/include/File/Exceptions.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC::File 6 | { 7 | class FileNotFoundException : public std::runtime_error 8 | { 9 | public: 10 | explicit FileNotFoundException(const char* msg) : std::runtime_error(msg) 11 | { 12 | } 13 | explicit FileNotFoundException(const std::string& msg) : std::runtime_error(msg) 14 | { 15 | } 16 | }; 17 | } // namespace RC::File 18 | -------------------------------------------------------------------------------- /deps/first/File/include/File/File.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include RC_OS_FILE_TYPE_INCLUDE_FILE 7 | 8 | namespace RC::File 9 | { 10 | RC_FILE_API auto open(const std::filesystem::path& file_path_and_name, 11 | OpenFor = OpenFor::Reading, 12 | OverwriteExistingFile = OverwriteExistingFile::No, 13 | CreateIfNonExistent = CreateIfNonExistent::No) -> Handle; 14 | 15 | RC_FILE_API auto delete_file(const std::filesystem::path& file_path_and_name) -> void; 16 | } // namespace RC::File 17 | -------------------------------------------------------------------------------- /deps/first/File/include/File/FileDef.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | namespace RC::File 4 | { 5 | #ifndef RC_DETECTED_OS 6 | #ifdef _WIN32 7 | #define RC_DETECTED_OS _WIN32 8 | #else 9 | static_assert(false, "Could not setup the 'Handle' typedef because a supported OS was not detected."); 10 | #endif 11 | #endif 12 | 13 | #if RC_DETECTED_OS == _WIN32 14 | #ifndef RC_OS_FILE_TYPE_INCLUDE_FILE 15 | #define RC_OS_FILE_TYPE_INCLUDE_FILE 16 | #else 17 | static_assert(false, "Could not setup the 'RC_OS_FILE_TYPE_INCLUDE_FILE' macro because a supported OS was not detected."); 18 | #endif 19 | #endif 20 | 21 | } // namespace RC::File 22 | -------------------------------------------------------------------------------- /deps/first/File/include/File/FileType/All.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | -------------------------------------------------------------------------------- /deps/first/File/include/File/InternalFile.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | namespace RC::File 7 | { 8 | namespace Internal 9 | { 10 | struct StaticStorage 11 | { 12 | static inline bool internal_error{}; 13 | }; 14 | } // namespace Internal 15 | 16 | struct RC_FILE_API OpenProperties 17 | { 18 | OpenFor open_for; 19 | OverwriteExistingFile overwrite_existing_file; 20 | CreateIfNonExistent create_if_non_existent; 21 | }; 22 | 23 | struct RC_FILE_API GenericItemData 24 | { 25 | GenericDataType data_type; 26 | 27 | union { 28 | unsigned long data_ulong; 29 | signed long data_long; 30 | unsigned long long data_ulonglong; 31 | signed long long data_longlong; 32 | }; 33 | }; 34 | } // namespace RC::File 35 | -------------------------------------------------------------------------------- /deps/first/File/include/File/Macros.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #define THROW_INTERNAL_FILE_ERROR(msg) \ 6 | RC::File::Internal::StaticStorage::internal_error = true; \ 7 | throw std::runtime_error{msg}; 8 | 9 | // This macro needs to be moved into the DynamicOutput system 10 | /* 11 | #define ASSERT_DEFAULT_OUTPUT_DEVICE_IS_VALID(param_device) \ 12 | if (DefaultTargets::get_default_devices_ref().empty() || !param_device){ \ 13 | THROW_INTERNAL_OUTPUT_ERROR("[Output::send] Attempted to send but there were no default devices. Please specify at least one default device or 14 | construct a Targets object and supply your own devices.") \ 15 | } 16 | //*/ 17 | 18 | namespace RC::File 19 | { 20 | using StringType = RC::StringType; 21 | using StringViewType = RC::StringViewType; 22 | using CharType = RC::CharType; 23 | using StreamIType = RC::StreamIType; 24 | using StreamOType = RC::StreamOType; 25 | using StreamType = StreamIType; 26 | } // namespace RC::File 27 | -------------------------------------------------------------------------------- /deps/first/File/src/File.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace RC::File 4 | { 5 | auto construct_handle(const std::filesystem::path& file_name, const OpenProperties& open_properties) -> Handle 6 | { 7 | auto internal_handle = Handle::FileType::open_file(file_name, open_properties); 8 | return Handle{std::move(internal_handle)}; 9 | } 10 | 11 | auto open(const std::filesystem::path& file_path_and_name, 12 | OpenFor open_for, 13 | OverwriteExistingFile overwrite_existing_file, 14 | CreateIfNonExistent create_if_non_existent) -> Handle 15 | { 16 | OpenProperties open_properties{ 17 | .open_for = open_for, 18 | .overwrite_existing_file = overwrite_existing_file, 19 | .create_if_non_existent = create_if_non_existent, 20 | }; 21 | 22 | return construct_handle(file_path_and_name, open_properties); 23 | } 24 | 25 | auto delete_file(const std::filesystem::path& file_path_and_name) -> void 26 | { 27 | Handle::FileType::delete_file(file_path_and_name); 28 | } 29 | } // namespace RC::File -------------------------------------------------------------------------------- /deps/first/File/xmake.lua: -------------------------------------------------------------------------------- 1 | local projectName = "File" 2 | 3 | target(projectName) 4 | set_kind("static") 5 | set_languages("cxx23") 6 | set_exceptions("cxx") 7 | add_rules("ue4ss.dependency") 8 | 9 | add_deps("String") 10 | 11 | add_includedirs("include", { public = true }) 12 | add_headerfiles("include/**.hpp") 13 | 14 | add_files("src/**.cpp") 15 | add_packages("fmt", { public = true }) -------------------------------------------------------------------------------- /deps/first/Function/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Narknon 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /deps/first/Function/xmake.lua: -------------------------------------------------------------------------------- 1 | local projectName = "Function" 2 | 3 | target(projectName) 4 | set_kind("headeronly") 5 | set_languages("cxx23") 6 | set_exceptions("cxx") 7 | add_rules("ue4ss.dependency") 8 | 9 | add_includedirs("include", { public = true }) 10 | add_headerfiles("include/**.hpp") -------------------------------------------------------------------------------- /deps/first/Helpers/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Narknon 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /deps/first/Helpers/src/Casting.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #ifdef _WIN32 4 | #define WINDOWS 5 | #define NOMINMAX 6 | #include "Windows.h" 7 | #endif 8 | 9 | namespace RC::Helper::Casting 10 | { 11 | 12 | #ifdef WINDOWS 13 | auto check_readable(void* handle, void* src_ptr) -> bool 14 | { 15 | uintptr_t is_valid_ptr_buffer; 16 | size_t bytes_read; 17 | 18 | return ReadProcessMemory(*reinterpret_cast(handle), src_ptr, &is_valid_ptr_buffer, 0x8, &bytes_read) != 0; 19 | } 20 | #endif 21 | 22 | } // namespace RC::Helper::Casting 23 | -------------------------------------------------------------------------------- /deps/first/Helpers/xmake.lua: -------------------------------------------------------------------------------- 1 | local projectName = "Helpers" 2 | 3 | target(projectName) 4 | set_kind("static") 5 | set_languages("cxx23") 6 | set_exceptions("cxx") 7 | add_rules("ue4ss.dependency") 8 | 9 | add_deps("String") 10 | 11 | add_includedirs("include", { public = true }) 12 | add_headerfiles("include/**.hpp") 13 | 14 | add_files("src/**.cpp") -------------------------------------------------------------------------------- /deps/first/IniParser/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Narknon 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /deps/first/IniParser/include/IniParser/Common.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifndef RC_INI_PARSER_EXPORTS 4 | #ifndef RC_INI_PARSER_BUILD_STATIC 5 | #ifndef RC_INI_PARSER_API 6 | #define RC_INI_PARSER_API __declspec(dllimport) 7 | #endif 8 | #else 9 | #ifndef RC_INI_PARSER_API 10 | #define RC_INI_PARSER_API 11 | #endif 12 | #endif 13 | #else 14 | #ifndef RC_INI_PARSER_API 15 | #define RC_INI_PARSER_API __declspec(dllexport) 16 | #endif 17 | #endif 18 | -------------------------------------------------------------------------------- /deps/first/IniParser/include/IniParser/Tokens.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | enum TokenType : int 4 | { 5 | CarriageReturn, 6 | NewLine, 7 | Space, 8 | Characters, 9 | Equals, 10 | ClosingSquareBracket, 11 | OpeningSquareBracket, 12 | SemiColon, 13 | EndOfFile, 14 | }; 15 | using IniTokenType = TokenType; 16 | -------------------------------------------------------------------------------- /deps/first/IniParser/xmake.lua: -------------------------------------------------------------------------------- 1 | local projectName = "IniParser" 2 | 3 | target(projectName) 4 | set_kind("static") 5 | set_languages("cxx23") 6 | set_exceptions("cxx") 7 | add_rules("ue4ss.dependency") 8 | 9 | add_includedirs("include", { public = true }) 10 | add_headerfiles("include/**.hpp") 11 | 12 | add_files( 13 | "src/Ini.cpp", "src/Value.cpp", "src/TokenParser.cpp" 14 | ) 15 | 16 | add_deps("File", "Helpers", "ParserBase") -------------------------------------------------------------------------------- /deps/first/Input/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Narknon 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /deps/first/Input/include/Input/Common.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifndef RC_INPUT_EXPORTS 4 | #ifndef RC_INPUT_BUILD_STATIC 5 | #ifndef RC_INPUT_API 6 | #define RC_INPUT_API __declspec(dllimport) 7 | #endif 8 | #else 9 | #ifndef RC_INPUT_API 10 | #define RC_INPUT_API 11 | #endif 12 | #endif 13 | #else 14 | #ifndef RC_INPUT_API 15 | #define RC_INPUT_API __declspec(dllexport) 16 | #endif 17 | #endif 18 | -------------------------------------------------------------------------------- /deps/first/Input/include/Input/Platform/GLFW3InputSource.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | 7 | namespace RC::Input 8 | { 9 | 10 | class GLFW3InputSource : public QueueInputSource 11 | { 12 | public: 13 | auto begin_frame() -> void; 14 | auto receive_input(int key, int action, int mods) -> void; 15 | auto end_frame() -> void; 16 | 17 | private: 18 | Key m_translate_key[512]; 19 | 20 | public: 21 | auto is_available() -> bool override; 22 | const char* get_name() override 23 | { 24 | return "GLFW3"; 25 | } 26 | GLFW3InputSource(); 27 | }; 28 | 29 | } // namespace RC::Input 30 | -------------------------------------------------------------------------------- /deps/first/Input/include/Input/PlatformInputSource.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | 8 | namespace RC::Input 9 | { 10 | 11 | class PlatformInputSource 12 | { 13 | public: 14 | /// Check if the input source is available 15 | virtual bool is_available() 16 | { 17 | return false; 18 | }; 19 | 20 | /// Initialize the input source 21 | virtual bool activate() 22 | { 23 | return false; 24 | }; 25 | 26 | /// Initialize the input source 27 | virtual bool deactivate() 28 | { 29 | return false; 30 | }; 31 | 32 | /// Get the priority of the input source, smaller number means higher priority 33 | virtual int source_priority() 34 | { 35 | return 999; 36 | }; 37 | 38 | /// Process the event and return the input events in the frame 39 | virtual std::vector& process_event(Handler* handler) = 0; 40 | 41 | virtual ~PlatformInputSource() = default; 42 | 43 | virtual const char* get_name() 44 | { 45 | return "Unknown"; 46 | } 47 | }; 48 | 49 | }; // namespace RC::Input 50 | -------------------------------------------------------------------------------- /deps/first/Input/src/PlatformInit.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | namespace RC::Input 6 | { 7 | auto Handler::init() -> void 8 | { 9 | register_input_source(std::make_shared(L"ConsoleWindowClass", L"UnrealWindow")); 10 | register_input_source(std::make_shared()); 11 | } 12 | } // namespace RC::Input -------------------------------------------------------------------------------- /deps/first/Input/xmake.lua: -------------------------------------------------------------------------------- 1 | local projectName = "Input" 2 | 3 | target(projectName) 4 | set_kind("static") 5 | set_languages("cxx23") 6 | set_exceptions("cxx") 7 | add_rules("ue4ss.dependency") 8 | add_options("ue4ssInput") 9 | 10 | add_includedirs("include", { public = true }) 11 | add_headerfiles("include/**.hpp") 12 | 13 | if get_config("ue4ssInput") then 14 | add_files("src/**.cpp|Platform/**.cpp") 15 | end 16 | 17 | add_deps("DynamicOutput") 18 | 19 | if is_plat("windows") then 20 | if get_config("ue4ssInput") then 21 | add_files("src/Platform/Win32AsyncInputSource.cpp") 22 | add_files("src/Platform/GLFW3InputSource.cpp") 23 | add_files("src/Platform/QueueInputSource.cpp") 24 | end 25 | end 26 | -------------------------------------------------------------------------------- /deps/first/JSON/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Narknon 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /deps/first/JSON/include/JSON/Bool.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC::JSON 6 | { 7 | class RC_JSON_API Bool : public Value 8 | { 9 | public: 10 | constexpr static Type static_type = Type::Bool; 11 | 12 | private: 13 | bool m_underlying_value{}; 14 | 15 | public: 16 | explicit Bool(bool value); 17 | ~Bool() override = default; 18 | 19 | public: 20 | auto get() -> bool 21 | { 22 | return m_underlying_value; 23 | } 24 | 25 | public: 26 | auto serialize([[maybe_unused]] ShouldFormat should_format = ShouldFormat::No, [[maybe_unused]] int32_t* indent_level = nullptr) -> StringType override; 27 | auto get_type() const -> Type override 28 | { 29 | return Type::Bool; 30 | } 31 | }; 32 | } // namespace RC::JSON 33 | -------------------------------------------------------------------------------- /deps/first/JSON/include/JSON/Common.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifndef RC_JSON_EXPORTS 4 | #ifndef RC_JSON_BUILD_STATIC 5 | #ifndef RC_JSON_API 6 | #define RC_JSON_API __declspec(dllimport) 7 | #endif 8 | #else 9 | #ifndef RC_JSON_API 10 | #define RC_JSON_API 11 | #endif 12 | #endif 13 | #else 14 | #ifndef RC_JSON_API 15 | #define RC_JSON_API __declspec(dllexport) 16 | #endif 17 | #endif 18 | 19 | #define JSON_DEPRECATED [[deprecated("JSON Module deprecated and may be removed in next release. Please migrate to Glz.")]] 20 | 21 | #include 22 | 23 | #include 24 | 25 | namespace RC::JSON 26 | { 27 | class Value; 28 | 29 | namespace Parser 30 | { 31 | class ScopeStack; 32 | } 33 | 34 | auto inline indent(int32_t* indent_level, File::StringType& string) -> void 35 | { 36 | if (!indent_level) 37 | { 38 | throw std::runtime_error{"Must supply an indent_level pointer"}; 39 | }; 40 | 41 | for (int32_t i = 0; i < *indent_level; ++i) 42 | { 43 | string.append(STR(" ")); 44 | } 45 | } 46 | } // namespace RC::JSON 47 | -------------------------------------------------------------------------------- /deps/first/JSON/include/JSON/JSON.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | 11 | namespace RC::JSON 12 | { 13 | /* 14 | JSON Help 15 | {} = an object 16 | [] = an array 17 | : = set value of key to something, eg "my_key": 3 18 | First item must an anonymous object 19 | */ 20 | } 21 | -------------------------------------------------------------------------------- /deps/first/JSON/include/JSON/Null.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | namespace RC::JSON 6 | { 7 | class RC_JSON_API Null : public Value 8 | { 9 | public: 10 | constexpr static Type static_type = Type::Null; 11 | 12 | public: 13 | ~Null() override = default; 14 | 15 | public: 16 | auto serialize([[maybe_unused]] ShouldFormat should_format = ShouldFormat::No, [[maybe_unused]] int32_t* indent_level = nullptr) -> StringType override; 17 | auto get_type() const -> Type override 18 | { 19 | return Type::Null; 20 | } 21 | }; 22 | } // namespace RC::JSON 23 | -------------------------------------------------------------------------------- /deps/first/JSON/include/JSON/Parser/Parser.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | #include 7 | #include 8 | #include 9 | // #include 10 | 11 | namespace RC::JSON::Parser 12 | { 13 | RC_JSON_API auto parse(StringType& input) -> std::unique_ptr; 14 | RC_JSON_API auto parse(const File::Handle&) -> std::unique_ptr; 15 | } // namespace RC::JSON::Parser 16 | -------------------------------------------------------------------------------- /deps/first/JSON/include/JSON/String.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #include 4 | 5 | #include 6 | #include 7 | #include 8 | 9 | namespace RC::JSON 10 | { 11 | class String : public Value 12 | { 13 | public: 14 | RC_JSON_API constexpr static Type static_type = Type::String; 15 | 16 | private: 17 | StringType m_data{}; 18 | 19 | public: 20 | RC_JSON_API String() = default; 21 | RC_JSON_API explicit String(StringViewType string); 22 | RC_JSON_API ~String() override = default; 23 | 24 | public: 25 | RC_JSON_API auto get() -> StringType& 26 | { 27 | return m_data; 28 | } 29 | RC_JSON_API auto get_view() const -> StringViewType 30 | { 31 | return m_data; 32 | } 33 | 34 | public: 35 | JSON_DEPRECATED RC_JSON_API auto serialize(ShouldFormat should_format = ShouldFormat::No, int32_t* indent_level = nullptr) -> StringType override; 36 | JSON_DEPRECATED RC_JSON_API auto get_type() const -> Type override 37 | { 38 | return Type::String; 39 | } 40 | }; 41 | } // namespace RC::JSON 42 | -------------------------------------------------------------------------------- /deps/first/JSON/src/Bool.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace RC::JSON 4 | { 5 | Bool::Bool(bool value) : m_underlying_value(value) 6 | { 7 | } 8 | 9 | auto Bool::serialize(ShouldFormat should_format, int32_t* indent_level) -> StringType 10 | { 11 | (void)should_format; 12 | (void)indent_level; 13 | return m_underlying_value ? STR("true") : STR("false"); 14 | } 15 | } // namespace RC::JSON 16 | -------------------------------------------------------------------------------- /deps/first/JSON/src/Null.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace RC::JSON 4 | { 5 | auto Null::serialize(ShouldFormat should_format, int32_t* indent_level) -> StringType 6 | { 7 | (void)should_format; 8 | (void)indent_level; 9 | return STR("null"); 10 | } 11 | } // namespace RC::JSON 12 | -------------------------------------------------------------------------------- /deps/first/JSON/src/String.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | #include 5 | 6 | namespace RC::JSON 7 | { 8 | String::String(StringViewType string) : m_data(string) 9 | { 10 | } 11 | 12 | auto String::serialize([[maybe_unused]] ShouldFormat should_format, [[maybe_unused]] int32_t* indent_level) -> StringType 13 | { 14 | return fmt::format(STR("\"{}\""), m_data); 15 | } 16 | } // namespace RC::JSON 17 | -------------------------------------------------------------------------------- /deps/first/JSON/xmake.lua: -------------------------------------------------------------------------------- 1 | local projectName = "JSON" 2 | 3 | target(projectName) 4 | set_kind("static") 5 | set_languages("cxx23") 6 | set_exceptions("cxx") 7 | add_rules("ue4ss.dependency") 8 | 9 | add_includedirs("include", { public = true }) 10 | add_headerfiles("include/**.hpp") 11 | 12 | add_files("src/**.cpp") 13 | 14 | 15 | add_deps("File", "Constructs", "Helpers", "ParserBase") -------------------------------------------------------------------------------- /deps/first/LuaMadeSimple/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Narknon 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /deps/first/LuaMadeSimple/include/LuaMadeSimple/Common.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifndef RC_LUA_MADE_SIMPLE_EXPORTS 4 | #ifndef RC_LUA_MADE_SIMPLE_BUILD_STATIC 5 | #ifndef RC_LMS_API 6 | #define RC_LMS_API __declspec(dllimport) 7 | #endif 8 | #else 9 | #ifndef RC_LMS_API 10 | #define RC_LMS_API 11 | #endif 12 | #endif 13 | #else 14 | #ifndef RC_LMS_API 15 | #define RC_LMS_API __declspec(dllexport) 16 | #endif 17 | #endif 18 | -------------------------------------------------------------------------------- /deps/first/LuaMadeSimple/src/LuaObject.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace RC::LuaMadeSimple::Type 4 | { 5 | 6 | } 7 | -------------------------------------------------------------------------------- /deps/first/LuaMadeSimple/xmake.lua: -------------------------------------------------------------------------------- 1 | local projectName = "LuaMadeSimple" 2 | 3 | target(projectName) 4 | set_kind("static") 5 | set_languages("cxx23") 6 | set_exceptions("cxx") 7 | add_rules("ue4ss.dependency") 8 | 9 | add_includedirs("include", { public = true }) 10 | add_headerfiles("include/**.hpp") 11 | 12 | add_files("src/**.cpp") 13 | 14 | add_deps("LuaRaw", { public = true }) 15 | add_deps("Helpers") 16 | add_packages("fmt") -------------------------------------------------------------------------------- /deps/first/LuaRaw/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Narknon 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /deps/first/LuaRaw/include/lprefix.h: -------------------------------------------------------------------------------- 1 | /* 2 | ** $Id: lprefix.h $ 3 | ** Definitions for Lua code that must come before any other header file 4 | ** See Copyright Notice in lua.h 5 | */ 6 | 7 | #ifndef lprefix_h 8 | #define lprefix_h 9 | 10 | 11 | /* 12 | ** Allows POSIX/XSI stuff 13 | */ 14 | #if !defined(LUA_USE_C89) /* { */ 15 | 16 | #if !defined(_XOPEN_SOURCE) 17 | #define _XOPEN_SOURCE 600 18 | #elif _XOPEN_SOURCE == 0 19 | #undef _XOPEN_SOURCE /* use -D_XOPEN_SOURCE=0 to undefine it */ 20 | #endif 21 | 22 | /* 23 | ** Allows manipulation of large files in gcc and some other compilers 24 | */ 25 | #if !defined(LUA_32BITS) && !defined(_FILE_OFFSET_BITS) 26 | #define _LARGEFILE_SOURCE 1 27 | #define _FILE_OFFSET_BITS 64 28 | #endif 29 | 30 | #endif /* } */ 31 | 32 | 33 | /* 34 | ** Windows stuff 35 | */ 36 | #if defined(_WIN32) /* { */ 37 | 38 | #if !defined(_CRT_SECURE_NO_WARNINGS) 39 | #define _CRT_SECURE_NO_WARNINGS /* avoid warnings about ISO C functions */ 40 | #endif 41 | 42 | #endif /* } */ 43 | 44 | #endif 45 | 46 | -------------------------------------------------------------------------------- /deps/first/LuaRaw/include/lua.hpp: -------------------------------------------------------------------------------- 1 | // lua.hpp 2 | // Lua header files for C++ 3 | // <> not supplied automatically because Lua also compiles as C++ 4 | 5 | 6 | extern "C" { 7 | #include "lauxlib.h" 8 | #include "lua.h" 9 | #include "lualib.h" 10 | } 11 | -------------------------------------------------------------------------------- /deps/first/LuaRaw/include/lundump.h: -------------------------------------------------------------------------------- 1 | /* 2 | ** $Id: lundump.h $ 3 | ** load precompiled Lua chunks 4 | ** See Copyright Notice in lua.h 5 | */ 6 | 7 | #ifndef lundump_h 8 | #define lundump_h 9 | 10 | #include "llimits.h" 11 | #include "lobject.h" 12 | #include "lzio.h" 13 | 14 | 15 | /* data to catch conversion errors */ 16 | #define LUAC_DATA "\x19\x93\r\n\x1a\n" 17 | 18 | #define LUAC_INT 0x5678 19 | #define LUAC_NUM cast_num(370.5) 20 | 21 | /* 22 | ** Encode major-minor version in one byte, one nibble for each 23 | */ 24 | #define LUAC_VERSION (((LUA_VERSION_NUM / 100) * 16) + LUA_VERSION_NUM % 100) 25 | 26 | #define LUAC_FORMAT 0 /* this is the official format */ 27 | 28 | /* load one chunk; from lundump.c */ 29 | LUAI_FUNC LClosure* luaU_undump (lua_State* L, ZIO* Z, const char* name); 30 | 31 | /* dump one chunk; from ldump.c */ 32 | LUAI_FUNC int luaU_dump (lua_State* L, const Proto* f, lua_Writer w, 33 | void* data, int strip); 34 | 35 | #endif 36 | -------------------------------------------------------------------------------- /deps/first/LuaRaw/src/luauser.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include "lua.h" 3 | 4 | static struct { 5 | CRITICAL_SECTION LockSct; 6 | BOOL Init; 7 | } Gl; 8 | 9 | void LuaLockInitial(lua_State* L) 10 | { 11 | if (!Gl.Init) 12 | { 13 | /* Create a mutex */ 14 | InitializeCriticalSection(&Gl.LockSct); 15 | Gl.Init = TRUE; 16 | } 17 | } 18 | 19 | void LuaLockFinal(lua_State* L) 20 | { 21 | /* Destroy a mutex. */ 22 | if (Gl.Init) 23 | { 24 | DeleteCriticalSection(&Gl.LockSct); 25 | Gl.Init = FALSE; 26 | } 27 | } 28 | 29 | void LuaLock(lua_State* L) 30 | { 31 | LuaLockInitial(L); 32 | /* Wait for control of mutex */ 33 | EnterCriticalSection(&Gl.LockSct); 34 | } 35 | 36 | void LuaUnlock(lua_State* L) 37 | { 38 | /* Release control of mutex */ 39 | LeaveCriticalSection(&Gl.LockSct); 40 | } -------------------------------------------------------------------------------- /deps/first/LuaRaw/xmake.lua: -------------------------------------------------------------------------------- 1 | local projectName = "LuaRaw" 2 | 3 | target(projectName) 4 | set_kind("static") 5 | set_languages("cxx23") 6 | set_exceptions("cxx") 7 | add_rules("ue4ss.dependency") 8 | add_includedirs("include", { public = true }) 9 | add_headerfiles("include/**.hpp") 10 | 11 | add_files( 12 | "src/lapi.c", "src/lauxlib.c", "src/lbaselib.c", "src/lcode.c", 13 | "src/lcorolib.c", "src/lctype.c", "src/ldblib.c", "src/ldebug.c", 14 | "src/ldo.c", "src/ldump.c", "src/lfunc.c", "src/lgc.c", 15 | "src/linit.c", "src/liolib.c", "src/llex.c", "src/lmathlib.c", 16 | "src/lmem.c", "src/loadlib.c", "src/lobject.c", "src/lopcodes.c", 17 | "src/loslib.c", "src/lparser.c", "src/lstate.c", "src/lstring.c", 18 | "src/lstrlib.c", "src/ltable.c", "src/ltablib.c", "src/ltm.c", 19 | "src/luauser.c", "src/lundump.c", "src/lutf8lib.c", "src/lvm.c", 20 | "src/lzio.c" 21 | ) 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /deps/first/MProgram/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Narknon 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /deps/first/MProgram/xmake.lua: -------------------------------------------------------------------------------- 1 | local projectName = "MProgram" 2 | 3 | target(projectName) 4 | set_kind("headeronly") 5 | set_languages("cxx23") 6 | set_exceptions("cxx") 7 | add_rules("ue4ss.dependency") 8 | 9 | add_includedirs("include", { public = true }) 10 | add_headerfiles("include/**.hpp") -------------------------------------------------------------------------------- /deps/first/ParserBase/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Narknon 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /deps/first/ParserBase/include/ParserBase/Common.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifndef RC_PARSER_BASE_EXPORTS 4 | #ifndef RC_PARSER_BASE_BUILD_STATIC 5 | #ifndef RC_PB_API 6 | #define RC_PB_API __declspec(dllimport) 7 | #endif 8 | #else 9 | #ifndef RC_PB_API 10 | #define RC_PB_API 11 | #endif 12 | #endif 13 | #else 14 | #ifndef RC_PB_API 15 | #define RC_PB_API __declspec(dllexport) 16 | #endif 17 | #endif 18 | -------------------------------------------------------------------------------- /deps/first/ParserBase/src/Token.PVS-Studio.cfg: -------------------------------------------------------------------------------- 1 | analysis-mode=12 2 | disable-ms-extensions=yes 3 | exclude-path=*\boost\* 4 | exclude-path=*\zlib\* 5 | exclude-path=*\png\* 6 | exclude-path=*\libpng\* 7 | exclude-path=*\pnglib\* 8 | exclude-path=*\freetype\* 9 | exclude-path=*\ImageMagick\* 10 | exclude-path=*\jpeglib\* 11 | exclude-path=*\libxml\* 12 | exclude-path=*\libxslt\* 13 | exclude-path=*\tifflib\* 14 | exclude-path=*\wxWidgets\* 15 | exclude-path=*\libtiff\* 16 | exclude-path=*\mesa\* 17 | exclude-path=*\cximage\* 18 | exclude-path=*\bzip2-* 19 | exclude-path=*\bzip2\* 20 | exclude-path=*\UE_*\Engine\Source\* 21 | exclude-path=*\wxWidgets\* 22 | exclude-path=*\libtiff\* 23 | exclude-path=*\glm\* 24 | exclude-path=*\spdlog\* 25 | exclude-path=*\cgltf\* 26 | force-stdout-output=yes 27 | fshort-double=no 28 | fshort-float=no 29 | funsigned-char=no 30 | i-file=C:\Users\Kate\Desktop\ue4sswork\RE-UE4SS\deps\first\ParserBase\src\Token.PVS-Studio.i 31 | language=C++ 32 | lic-file=C:\Users\Kate\AppData\Local\Temp\7107947031950933436.lic 33 | new-output-format=yes 34 | output-file=C:\Users\Kate\Desktop\ue4sswork\RE-UE4SS\.PVS-Studio\PVS-Studio.log 35 | platform=x64 36 | preprocessor=visualcpp 37 | source-file=C:\Users\Kate\Desktop\ue4sswork\RE-UE4SS\deps\first\ParserBase\src\Token.cpp 38 | sourcetree-root= 39 | std=c++20 40 | timeout=600 41 | -------------------------------------------------------------------------------- /deps/first/ParserBase/xmake.lua: -------------------------------------------------------------------------------- 1 | local projectName = "ParserBase" 2 | 3 | target(projectName) 4 | set_kind("static") 5 | set_languages("cxx23") 6 | set_exceptions("cxx") 7 | add_rules("ue4ss.dependency") 8 | 9 | add_includedirs("include", { public = true }) 10 | add_headerfiles("include/**.hpp") 11 | 12 | add_files("src/**.cpp") 13 | 14 | 15 | add_deps("File") -------------------------------------------------------------------------------- /deps/first/ScopedTimer/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Narknon 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /deps/first/ScopedTimer/include/Timer/ScopedTimer.hpp: -------------------------------------------------------------------------------- 1 | #ifndef UE4SS_REWRITTEN_SCOPEDTIMER_HPP 2 | #define UE4SS_REWRITTEN_SCOPEDTIMER_HPP 3 | 4 | #include 5 | 6 | namespace RC 7 | { 8 | class ScopedTimer 9 | { 10 | private: 11 | std::chrono::time_point m_start; 12 | double* m_dur_storage; 13 | bool m_timer_stopped{}; 14 | 15 | public: 16 | ScopedTimer(double* dur_storage) : m_start(std::chrono::steady_clock::now()), m_dur_storage(dur_storage) 17 | { 18 | } 19 | 20 | ~ScopedTimer() 21 | { 22 | stop_timer(); 23 | } 24 | 25 | public: 26 | auto stop_timer() -> void 27 | { 28 | if (!m_timer_stopped) 29 | { 30 | std::chrono::time_point end = std::chrono::steady_clock::now(); 31 | std::chrono::duration a = end - m_start; 32 | *m_dur_storage = a.count(); 33 | m_timer_stopped = true; 34 | } 35 | } 36 | }; 37 | } // namespace RC 38 | 39 | #endif // UE4SS_REWRITTEN_SCOPEDTIMER_HPP 40 | -------------------------------------------------------------------------------- /deps/first/ScopedTimer/xmake.lua: -------------------------------------------------------------------------------- 1 | local projectName = "ScopedTimer" 2 | 3 | target(projectName) 4 | set_kind("headeronly") 5 | set_languages("cxx23") 6 | set_exceptions("cxx") 7 | add_rules("ue4ss.dependency") 8 | 9 | add_includedirs("include", { public = true }) 10 | add_headerfiles("include/**.hpp") -------------------------------------------------------------------------------- /deps/first/SinglePassSigScanner/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Narknon 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /deps/first/SinglePassSigScanner/include/SigScanner/Common.hpp: -------------------------------------------------------------------------------- 1 | #pragma once 2 | 3 | #ifndef RC_SINGLE_PASS_SIG_SCANNER_EXPORTS 4 | #ifndef RC_SINGLE_PASS_SIG_SCANNER_BUILD_STATIC 5 | #ifndef RC_SPSS_API 6 | #define RC_SPSS_API __declspec(dllimport) 7 | #endif 8 | #else 9 | #ifndef RC_SPSS_API 10 | #define RC_SPSS_API 11 | #endif 12 | #endif 13 | #else 14 | #ifndef RC_SPSS_API 15 | #define RC_SPSS_API __declspec(dllexport) 16 | #endif 17 | #endif 18 | -------------------------------------------------------------------------------- /deps/first/SinglePassSigScanner/xmake.lua: -------------------------------------------------------------------------------- 1 | local projectName = "SinglePassSigScanner" 2 | 3 | target(projectName) 4 | set_kind("static") 5 | set_languages("cxx23") 6 | set_exceptions("cxx") 7 | add_rules("ue4ss.dependency") 8 | 9 | add_includedirs("include", { public = true }) 10 | add_headerfiles("include/**.hpp") 11 | 12 | add_files("src/**.cpp") 13 | 14 | add_deps("Profiler") 15 | add_packages("fmt") -------------------------------------------------------------------------------- /deps/first/String/xmake.lua: -------------------------------------------------------------------------------- 1 | local projectName = "String" 2 | 3 | target(projectName) 4 | set_kind("headeronly") 5 | set_languages("cxx23") 6 | set_exceptions("cxx") 7 | add_rules("ue4ss.dependency") 8 | 9 | add_includedirs("include", { public = true }) 10 | add_headerfiles("include/**.hpp") -------------------------------------------------------------------------------- /deps/first/patternsleuth_bind/Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "patternsleuth_bind" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | patternsleuth = { path = "../patternsleuth/patternsleuth", features = ["process-internal", "image-pe"] } -------------------------------------------------------------------------------- /deps/fonts/droid/DroidSansFallback.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UE4SS-RE/RE-UE4SS/4a887193eb9fd785ef79a07f0754184946e534e4/deps/fonts/droid/DroidSansFallback.ttf -------------------------------------------------------------------------------- /deps/third-repo/packages/i/iconfontcppheaders/xmake.lua: -------------------------------------------------------------------------------- 1 | package("IconFontCppHeaders") 2 | add_urls("git@github.com:juliettef/IconFontCppHeaders.git") 3 | add_urls("https://github.com/juliettef/IconFontCppHeaders.git") 4 | set_kind("library", { headeronly = true }) 5 | 6 | add_versions("v1.0", "main") 7 | 8 | on_install(function (package) 9 | os.cp("**.h", package:installdir("include")) 10 | end) 11 | 12 | on_test(function (package) 13 | assert(package:check_cxxsnippets({ test = [[ 14 | void test() { 15 | ICON_FA_TERMINAL; 16 | } 17 | ]]}, { includes = { "IconsFontAwesome5.h" } })) 18 | end) 19 | package_end() -------------------------------------------------------------------------------- /deps/third-repo/packages/i/imguitextedit/xmake.lua: -------------------------------------------------------------------------------- 1 | package("ImGuiTextEdit") 2 | add_urls("git@github.com:UE4SS-RE/ImGuiColorTextEdit.git") 3 | add_urls("https://github.com/UE4SS-RE/ImGuiColorTextEdit.git") 4 | 5 | add_versions("v1.1.0", "master") 6 | 7 | add_deps("cmake", "imgui v1.91.9b") 8 | 9 | add_includedirs("include", { public = true }) 10 | 11 | on_install(function (package) 12 | local imgui = package:dep("imgui") 13 | local configs = imgui:requireinfo().configs 14 | 15 | if configs then 16 | configs = string.serialize(configs, { strip = true, indent = false }) 17 | end 18 | 19 | local xmake_lua = ([[ 20 | add_rules("mode.debug", "mode.release") 21 | 22 | add_requires("imgui %s", { configs = %s }) 23 | 24 | target("ImGuiTextEdit") 25 | set_kind("static") 26 | set_languages("cxx23") 27 | 28 | add_includedirs(".", { public = true }) 29 | add_headerfiles("*.h") 30 | 31 | add_files("*.cpp") 32 | 33 | add_packages("imgui") 34 | ]]):format(imgui:version_str(), configs) 35 | io.writefile("xmake.lua", xmake_lua) 36 | 37 | import("package.tools.xmake").install(package) 38 | end) 39 | package_end() -------------------------------------------------------------------------------- /deps/third-repo/packages/p/polyhook_2/xmake.lua: -------------------------------------------------------------------------------- 1 | package("polyhook_2") 2 | set_sourcedir(os.scriptdir()) 3 | 4 | add_deps("cmake", "zydis", "zycore") 5 | 6 | on_install(function (package) 7 | local configs = {} 8 | 9 | table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release")) 10 | table.insert(configs, "-DBUILD_SHARED_LIBS=OFF") 11 | if get_config("ue4ssCross") == "msvc-wine" then 12 | table.insert(configs, "-Due4ssCross=msvc-wine") 13 | else 14 | table.insert(configs, "-Due4ssCross=None") 15 | end 16 | 17 | import("package.tools.cmake").install(package, configs, { packagedeps = { "zycore", "zydis" } }) 18 | 19 | end) 20 | package_end() -------------------------------------------------------------------------------- /deps/third-repo/packages/r/raw_pdb/xmake.lua: -------------------------------------------------------------------------------- 1 | package("raw_pdb") 2 | add_urls("git@github.com:MolecularMatters/raw_pdb.git") 3 | add_urls("https://github.com/MolecularMatters/raw_pdb.git") 4 | 5 | add_versions("v1.0.0", "8c6a7146393c83d27fa101e8bc8017f2a7f151df") 6 | 7 | add_deps("cmake") 8 | 9 | on_install(function (package) 10 | local configs = {} 11 | table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release")) 12 | table.insert(configs, "-DBUILD_SHARED_LIBS=OFF") 13 | import("package.tools.cmake").install(package, configs) 14 | 15 | os.cp("src/*.h", package:installdir("include")) 16 | os.cp("src/Foundation/*.h", package:installdir("include/Foundation")) 17 | end) 18 | package_end() -------------------------------------------------------------------------------- /deps/third-repo/packages/t/tracy/xmake.lua: -------------------------------------------------------------------------------- 1 | package("Tracy") 2 | add_urls("git@github.com:wolfpld/tracy.git") 3 | add_urls("https://github.com/wolfpld/tracy.git") 4 | 5 | add_versions("v0.10", "37aff70dfa50cf6307b3fee6074d627dc2929143") 6 | 7 | add_deps("cmake") 8 | 9 | on_install(function (package) 10 | local configs = {} 11 | 12 | table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release")) 13 | table.insert(configs, "-DBUILD_SHARED_LIBS=OFF") 14 | 15 | import("package.tools.cmake").install(package, configs) 16 | end) 17 | 18 | on_test(function (package) 19 | assert(package:check_cxxsnippets({test = [[ 20 | static void test() { 21 | FrameMarkStart("Test start"); 22 | FrameMarkEnd("Test end"); 23 | } 24 | ]]}, {configs = {languages = "c++17"}, includes = {"tracy/Tracy.hpp"}})) 25 | end) -------------------------------------------------------------------------------- /deps/third-repo/packages/z/zycore/xmake.lua: -------------------------------------------------------------------------------- 1 | package("zycore") 2 | add_urls("git@github.com:zyantific/zycore-c.git") 3 | add_urls("https://github.com/zyantific/zycore-c.git") 4 | 5 | add_versions("v1.5.1", "53f6d2730d29b7d6399154501bc65c1c89f0b0fd") 6 | 7 | add_deps("cmake") 8 | 9 | add_defines("ZYCORE_STATIC_BUILD", { public = true }) 10 | 11 | on_install(function (package) 12 | local configs = {} 13 | table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release")) 14 | table.insert(configs, "-DZYCORE_BUILD_SHARED_LIB=OFF") 15 | import("package.tools.cmake").install(package, configs) 16 | end) 17 | 18 | on_test(function (package) 19 | assert(package:check_cxxsnippets({test = [[ 20 | #include 21 | #include 22 | void test() { 23 | ZyanVector vector; 24 | ZyanU16 buffer[32]; 25 | } 26 | ]]})) 27 | end) 28 | -------------------------------------------------------------------------------- /deps/third-repo/packages/z/zydis/xmake.lua: -------------------------------------------------------------------------------- 1 | package("zydis") 2 | add_urls("git@github.com:zyantific/zydis.git") 3 | add_urls("https://github.com/zyantific/zydis.git") 4 | 5 | add_versions("v4.1.1", "a2278f1d254e492f6a6b39f6cb5d1f5d515659dc") 6 | 7 | add_deps("zycore", "cmake") 8 | 9 | add_defines("ZYDIS_STATIC_BUILD", { public = true }) 10 | 11 | on_install(function (package) 12 | local configs = {} 13 | 14 | table.insert(configs, "-DCMAKE_BUILD_TYPE=" .. (package:debug() and "Debug" or "Release")) 15 | table.insert(configs, "-DZYDIS_BUILD_SHARED_LIB=OFF") 16 | 17 | table.insert(configs, "-DZYDIS_BUILD_TOOLS=OFF") 18 | table.insert(configs, "-DZYDIS_BUILD_EXAMPLES=OFF") 19 | 20 | import("package.tools.cmake").install(package, configs, { packagedeps = "zycore" }) 21 | end) 22 | 23 | on_test(function (package) 24 | assert(package:check_cxxsnippets({test = [[ 25 | #include 26 | #include 27 | void test() { 28 | ZyanU8 encoded_instruction[ZYDIS_MAX_INSTRUCTION_LENGTH]; 29 | ZyanUSize encoded_length = sizeof(encoded_instruction); 30 | } 31 | ]]}, {configs = {languages = "c++11"}})) 32 | end) 33 | package_end() -------------------------------------------------------------------------------- /deps/third/glad/xmake.lua: -------------------------------------------------------------------------------- 1 | target("glad") 2 | set_kind("static") 3 | set_languages("cxx23") 4 | set_exceptions("cxx") 5 | 6 | add_includedirs("include", { public = true }) 7 | add_headerfiles("include/**.h") 8 | 9 | add_files("src/glad.c") -------------------------------------------------------------------------------- /deps/third/xmake.lua: -------------------------------------------------------------------------------- 1 | includes("glad") -------------------------------------------------------------------------------- /deps/xmake.lua: -------------------------------------------------------------------------------- 1 | -- First party dependencies 2 | includes("first") 3 | -- Third party dependencies 4 | includes("third") 5 | -- Third party dependencies repository 6 | -- Everything that is an xmake package should be inside of this repository 7 | add_repositories("third-party deps/third-repo", { rootdir = get_config("ue4ssRoot") }) 8 | 9 | add_requires("zycore v1.5.1", { debug = is_mode_debug(), configs = {runtimes = get_mode_runtimes()} }) 10 | add_requires("zydis v4.1.1", { debug = is_mode_debug(), configs = {runtimes = get_mode_runtimes()} }) 11 | add_requires("polyhook_2", { debug = is_mode_debug(), configs = {runtimes = get_mode_runtimes()} }) -------------------------------------------------------------------------------- /docs-export/book.toml: -------------------------------------------------------------------------------- 1 | [book] 2 | language = "en" 3 | multilingual = false 4 | src = "src" 5 | title = "UE4SS Documentation" 6 | 7 | [output.html] 8 | additional-css = ["css/custom.css"] 9 | 10 | [output.html.fold] 11 | enable = true 12 | level = 1 13 | 14 | [preprocessor.alerts] -------------------------------------------------------------------------------- /docs-export/css/custom.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --content-max-width: 80%; 3 | } 4 | 5 | .chapter li.part-title { 6 | color: var(--sidebar-fg); 7 | margin-bottom: -5px; 8 | margin-top: 11px; 9 | font-weight: bold; 10 | } 11 | 12 | .chapter li.chapter-item { 13 | line-height: 1.5em; 14 | margin-left: 0.5em; 15 | margin-top: 0.6em; 16 | } -------------------------------------------------------------------------------- /docs-repo-template/.nojekyll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/UE4SS-RE/RE-UE4SS/4a887193eb9fd785ef79a07f0754184946e534e4/docs-repo-template/.nojekyll -------------------------------------------------------------------------------- /docs-repo-template/README.md: -------------------------------------------------------------------------------- 1 | # Wiki 2 | 3 | https://docs.ue4ss.com/ 4 | -------------------------------------------------------------------------------- /docs-repo-template/build.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import subprocess 4 | import os 5 | 6 | # change dir to repo root 7 | os.chdir(os.path.dirname(__file__)) 8 | 9 | build_dir = 'docs' 10 | 11 | # build release as the root 12 | subprocess.run(['mdbook', 'build', os.path.join('versions', 'release'), '-d', os.path.abspath(build_dir)]) 13 | 14 | for version in os.listdir('versions'): 15 | version_build_dir = os.path.join(build_dir, version) 16 | subprocess.run(['mdbook', 'build', os.path.join('versions', version), '-d', os.path.abspath(version_build_dir)]) 17 | -------------------------------------------------------------------------------- /docs/cpp-api.md: -------------------------------------------------------------------------------- 1 | # C++ API 2 | 3 | These are the C++ API functions available in UE4SS, on top of the standard libraries that C++ comes with by default and the reflected functions available in Unreal Engine. 4 | 5 | You are expected to have a basic understanding of C++ and Unreal Engine's C++ API before using these functions. 6 | 7 | You may need to read code in the [UEPsuedo](https://github.com/Re-UE4SS/UEPseudo) repository (more specifically, the `include/Unreal` directory) to understand how to use these functions. 8 | 9 | For version: **3.1.0** 10 | 11 | Current status: **incomplete** -------------------------------------------------------------------------------- /docs/cpp-api/cpp-examples.md: -------------------------------------------------------------------------------- 1 | # C++ Examples 2 | 3 | Template repository for making UE4SS C++ mods: [UE4SSCPPTemplate](https://github.com/UE4SS-RE/UE4SSCPPTemplate) - note that if you are developing on latest main branch, you should use the `dev` branch of this template repo if there are any changes to the template that are not yet merged into `main`. 4 | 5 | Search GitHub for any Lua code calling reasonably uniquely-named UE4SS API functions, excluding the actual UE4SS repository from the search: 6 | 7 | https://github.com/search?q=language%3Acpp++%22+%3A+public+CppUserModBase%22+NOT+repo%3AUE4SS-RE%2FRE-UE4SS+NOT+repo%3AEpicGames%2FUnrealEngine&type=code -------------------------------------------------------------------------------- /docs/devlogs.md: -------------------------------------------------------------------------------- 1 | # Devlogs 2 | 3 | This section will contain a list of development logs that have been written by contributors of UE4SS. These logs are intended to be a way for contributors to share their experiences and knowledge with the community, and to provide a way for the community to understand the development process of UE4SS. 4 | 5 | ### [DataTables in UE4SS](./devlogs/datatables-in-ue4ss.md) - bitonality (2024-02-07) -------------------------------------------------------------------------------- /docs/feature-overview/blueprint-modloader.md: -------------------------------------------------------------------------------- 1 | # Blueprint Modloader 2 | 3 | As our BP system is based on RussellJ's, this tutorial video is applicable for creating a blueprint mod for UE4SS: 4 | 5 | -------------------------------------------------------------------------------- /docs/feature-overview/experimental.md: -------------------------------------------------------------------------------- 1 | WIP -------------------------------------------------------------------------------- /docs/feature-overview/universal-mods.md: -------------------------------------------------------------------------------- 1 | WIP -------------------------------------------------------------------------------- /docs/lua-api/classes/aactor.md: -------------------------------------------------------------------------------- 1 | # AActor 2 | 3 | ## Inheritance 4 | [UObject](./uobject.md) 5 | 6 | ## Methods 7 | 8 | ### GetWorld() 9 | - **Return types:** `UObject` 10 | - **Returns:** the `UWorld` that this actor belongs to or an invalid `UObject` 11 | 12 | ### GetLevel() 13 | - **Return type:** `UObject` 14 | - **Returns:** the `ULevel` that this actor belongs to or an invalid `UObject` -------------------------------------------------------------------------------- /docs/lua-api/classes/arrayproperty.md: -------------------------------------------------------------------------------- 1 | # ArrayProperty 2 | 3 | ## Inheritance 4 | [Property](./property.md) 5 | 6 | ## Methods 7 | 8 | ### GetInner() 9 | 10 | - **Return type:** `Property` 11 | - **Returns:** the inner property of the array. -------------------------------------------------------------------------------- /docs/lua-api/classes/boolproperty.md: -------------------------------------------------------------------------------- 1 | # BoolProperty 2 | 3 | ## Inheritance 4 | [Property](./property.md) 5 | 6 | ## Methods 7 | 8 | ### GetByteMask() 9 | 10 | - **Return type:** `integer` 11 | 12 | ### GetByteOffset() 13 | 14 | - **Return type:** `integer` 15 | 16 | ### GetFieldMask() 17 | 18 | - **Return type:** `integer` 19 | 20 | ### GetFieldSize() 21 | 22 | - **Return type:** `integer` -------------------------------------------------------------------------------- /docs/lua-api/classes/fieldclass.md: -------------------------------------------------------------------------------- 1 | # FieldClass 2 | 3 | ## Inheritance 4 | [LocalObject](./localobject.md) 5 | 6 | ## Methods 7 | 8 | ### GetFName() 9 | 10 | - **Return type:** `FName` 11 | - **Returns:** the FName of this class by copy. -------------------------------------------------------------------------------- /docs/lua-api/classes/fname.md: -------------------------------------------------------------------------------- 1 | # FName 2 | 3 | ## Inheritance 4 | [LocalObject](./localobject.md) 5 | 6 | ## Methods 7 | 8 | ### ToString() 9 | 10 | - **Return type:** `string` 11 | - **Returns:** the string for this `FName`. 12 | 13 | ### GetComparisonIndex() 14 | 15 | - **Return type:** `integer` 16 | - **Returns:** the `ComparisonIndex` for this `FName` (index into global names array). -------------------------------------------------------------------------------- /docs/lua-api/classes/foutputdevice.md: -------------------------------------------------------------------------------- 1 | # FOutputDevice 2 | 3 | ## Inheritance 4 | [RemoteObject](./remoteobject.md) 5 | 6 | ## Methods 7 | 8 | ### Log(string Message) 9 | 10 | - Logs a message to the output device (i.e: the in-game console). -------------------------------------------------------------------------------- /docs/lua-api/classes/fstring.md: -------------------------------------------------------------------------------- 1 | # FString 2 | 3 | `FString` is a [TArray](./tarray.md) of characters. 4 | 5 | ## Inheritance 6 | [RemoteObject](./remoteobject.md) 7 | 8 | ## Methods 9 | 10 | ### ToString() 11 | 12 | - **Return type:** `string` 13 | - **Returns:** a string that Lua can understand. 14 | 15 | ### Clear() 16 | 17 | - Clears the string by setting the number of elements in the `TArray` to 0. -------------------------------------------------------------------------------- /docs/lua-api/classes/ftext.md: -------------------------------------------------------------------------------- 1 | # FText 2 | 3 | ## Inheritance 4 | [LocalObject](./localobject.md) 5 | 6 | ## Methods 7 | 8 | ### ToString() 9 | 10 | - **Return type:** `string` 11 | - **Returns:** the string representation of this `FText`. 12 | -------------------------------------------------------------------------------- /docs/lua-api/classes/fweakobjectptr.md: -------------------------------------------------------------------------------- 1 | # FWeakObjectPtr 2 | 3 | ## Inheritance 4 | [LocalObject](./localobject.md) 5 | 6 | ## Methods 7 | 8 | ### Get() / get() 9 | 10 | - **Return type:** `UObjectDerivative` 11 | - **Returns:** the pointed to `UObject` or `UObject` derivative. 12 | > The return can be invalid, so call `UObject:IsValid` after calling this function. -------------------------------------------------------------------------------- /docs/lua-api/classes/localobject.md: -------------------------------------------------------------------------------- 1 | # LocalObject 2 | 3 | The `LocalObject` class is the second of two base objects that all other objects inherits from, the other one being [RemoteObject](./remoteobject.md). 4 | 5 | It contains an inlined C++ object that is owned by Lua. 6 | 7 | ## Inheritance 8 | None 9 | 10 | ## Methods 11 | None -------------------------------------------------------------------------------- /docs/lua-api/classes/localunrealparam.md: -------------------------------------------------------------------------------- 1 | # LocalUnrealParam 2 | 3 | This is a dynamic wrapper for any and all types & classes. 4 | 5 | > Whether the Remote or Local variant is used depends on the requirements of the data but the usage is identical with either param types. 6 | 7 | ## Inheritance 8 | [LocalObject](./localobject.md) 9 | 10 | ## Methods 11 | 12 | ### Get() / get() 13 | 14 | - **Return type:** `auto` 15 | - **Returns:** the underlying value for this param. 16 | 17 | ## set(auto NewValue) 18 | 19 | - Sets the underlying value for this param. 20 | 21 | ## type() 22 | 23 | - **Return type:** `string` 24 | - **Returns:** "LocalUnrealParam". -------------------------------------------------------------------------------- /docs/lua-api/classes/objectproperty.md: -------------------------------------------------------------------------------- 1 | # ObjectProperty 2 | 3 | ## Inheritance 4 | [Property](./property.md) 5 | 6 | ## Methods 7 | 8 | ### GetPropertyClass() 9 | 10 | - **Return type:** `UClass` 11 | - **Returns:** the class that this property holds. -------------------------------------------------------------------------------- /docs/lua-api/classes/property.md: -------------------------------------------------------------------------------- 1 | # Property 2 | 3 | ## Inheritance 4 | [RemoteObject](./remoteobject.md) 5 | 6 | ## Methods 7 | 8 | ### GetFullName() 9 | 10 | - **Return type:** `string` 11 | - **Returns:** the full name & path for this property. 12 | 13 | ### GetFName() 14 | 15 | - **Return type:** `FName` 16 | - **Returns:** the FName of this property by copy. 17 | > All FNames returned by `__index` are returned by reference. 18 | 19 | ### IsA(PropertyTypes PropertyType) 20 | 21 | - **Return type:** `bool` 22 | - **Returns:** `true` if the property is of type `PropertyType`. 23 | 24 | ### GetClass() 25 | 26 | - **Return type:** `PropertyClass` 27 | 28 | ### ContainerPtrToValuePtr(UObjectDerivative Container, integer ArrayIndex) 29 | 30 | - **Return type:** `LightUserdata` 31 | - Equivalent to `FProperty::ContainerPtrToValuePtr` in UE. 32 | 33 | ### ImportText(string Buffer, LightUserdata Data, integer PortFlags, UObject OwnerObject) 34 | 35 | - Equivalent to `FProperty::ImportText` in UE, except without the `ErrorText` param. -------------------------------------------------------------------------------- /docs/lua-api/classes/remoteobject.md: -------------------------------------------------------------------------------- 1 | # RemoteObject 2 | 3 | The `RemoteObject` class is the first of two base objects that all other objects inherits from, the other one being [LocalObject](./localobject.md). 4 | 5 | It contains a pointer to a C++ object that is typically owned by the game. 6 | 7 | ## Inheritance 8 | None 9 | 10 | ## Methods 11 | 12 | ### IsValid() 13 | 14 | - **Return type:** `bool` 15 | - **Returns:** whether this object is valid or not 16 | 17 | **Example** 18 | ```lua 19 | -- 'StaticFindObject' returns a UObject which inherits from RemoteObject. 20 | local Object = StaticFindObject("/Script/CoreUObject.Object") 21 | if Object:IsValid() then 22 | print("Object is valid\n") 23 | else 24 | print("Object is NOT valid\n") 25 | end 26 | ``` 27 | -------------------------------------------------------------------------------- /docs/lua-api/classes/remoteunrealparam.md: -------------------------------------------------------------------------------- 1 | # RemoteUnrealParam 2 | 3 | This is a dynamic wrapper for any and all types & classes. 4 | 5 | > Whether the Remote or Local variant is used depends on the requirements of the data but the usage is identical with either param types. 6 | 7 | ## Inheritance 8 | [RemoteObject](./remoteobject.md) 9 | 10 | ## Methods 11 | 12 | ### Get() / get() 13 | 14 | - **Return type:** `auto` 15 | - **Returns:** the underlying value for this param. 16 | 17 | ## set(auto NewValue) 18 | 19 | - Sets the underlying value for this param. 20 | 21 | ## type() 22 | 23 | - **Return type:** `string` 24 | - **Returns:** "RemoteUnrealParam". -------------------------------------------------------------------------------- /docs/lua-api/classes/structproperty.md: -------------------------------------------------------------------------------- 1 | # StructProperty 2 | 3 | ## Inheritance 4 | [Property](./property.md) 5 | 6 | ## Methods 7 | 8 | ### GetStruct() 9 | 10 | - **Return type:** `UScriptStruct` 11 | - **Returns:** the `UScriptStruct` that's mapped to this property. -------------------------------------------------------------------------------- /docs/lua-api/classes/tmap.md: -------------------------------------------------------------------------------- 1 | # TMap 2 | 3 | ## Inheritance 4 | [RemoteObject](./remoteobject.md) 5 | 6 | ## Metamethods 7 | 8 | ### __len 9 | - **Usage:** `#TMap` 10 | - **Return type:** `integer` 11 | - Returns the number of current pairs in the map. 12 | 13 | ## Methods 14 | 15 | ### Find(key) 16 | - **Return type:** `RemoteUnrealParam` | `LocalUnrealParam` 17 | - **Returns:** the element found in the map 18 | - **Throws:** if an element was not found in the map 19 | - Finds the specified key in the map 20 | 21 | ### Add(key, value) 22 | - Inserts a key/value pair into the map. If the key already exists in the map, replaces the value. 23 | 24 | ### Contains(key) 25 | - **Return type:** `bool` 26 | - **Returns:** if the element exists in the map. 27 | - Checks if a key exists inside of the map. 28 | 29 | ### Remove(key) 30 | - Removes an element from the map. If an element doesn't exist, does nothing. 31 | 32 | ### Empty() 33 | - Clears the map. 34 | 35 | ### ForEach(function Callback) 36 | - Iterates the entire `TMap` and calls the callback function for each element in the array. 37 | - The callback params are: `RemoteUnrealParam key`, `RemoteUnrealParam value` | `LocalUnrealParam value`. 38 | - Use `elem:get()` and `elem:set()` to access/mutate the value. 39 | - Mutating the key is undefined behavior. 40 | -------------------------------------------------------------------------------- /docs/lua-api/classes/uclass.md: -------------------------------------------------------------------------------- 1 | # UClass 2 | 3 | ## Inheritance 4 | [UStruct](./ustruct.md) 5 | 6 | ## Methods 7 | 8 | ### GetCDO() 9 | 10 | - **Return type:** `UClass` 11 | - **Returns:** the `ClassDefaultObject` of a `UClass`. 12 | 13 | ## IsChildOf(UClass Class) 14 | 15 | - **Return type:** `bool` 16 | - **Returns:** whether or not the class is a child of another class. -------------------------------------------------------------------------------- /docs/lua-api/classes/ue4ss.md: -------------------------------------------------------------------------------- 1 | # UE4SS 2 | 3 | The `UE4SS` class is for interacting with UE4SS metadata. 4 | 5 | ## Inheritance 6 | None 7 | 8 | ## Methods 9 | 10 | ### GetVersion() 11 | 12 | **Returns:** the current version of UE4SS that is being used. 13 | **Return Value:** 14 | 15 | | # | Type | Information | 16 | |---|-------- |-------------| 17 | | 1 | integer | Major version | 18 | | 2 | integer | Minor version | 19 | | 3 | integer | Hotfix version | 20 | 21 | **Example #1** 22 | > Warning: This only works in UE4SS 1.1+. See example #2 for UE4SS <=1.0. 23 | ```lua 24 | local Major, Minor, Hotfix = UE4SS.GetVersion() 25 | print(string.format("UE4SS v%d.%d.%d\n", Major, Minor, Hotfix)) 26 | ``` 27 | 28 | **Example #2** 29 | 30 | This example shows how to distinguish between UE4SS <=1.0, which didn't have the `UE4SS` class, and UE4SS >=1.1. 31 | ```lua 32 | if UE4SS == nil then 33 | print("Running UE4SS <=1.0\n") 34 | end 35 | ``` 36 | -------------------------------------------------------------------------------- /docs/lua-api/classes/ufunction.md: -------------------------------------------------------------------------------- 1 | # UFunction 2 | 3 | ## Inheritance 4 | [UObject](./uobject.md) 5 | 6 | ## Metamethods 7 | 8 | ### __call 9 | - **Usage:** `UFunction(UFunctionParams...)` 10 | - **Return type:** `auto` 11 | - Attempts to call the `UFunction` and returns the result, if any. 12 | - If the `UFunction` is obtained without a context (e.g. from `StaticFindObject`), a `UObject` context must be passed as the first parameter. 13 | 14 | ## Methods 15 | 16 | ### GetFunctionFlags() 17 | 18 | - **Return type:** `integer` 19 | - **Returns:** the flags for the `UFunction`. 20 | 21 | ### SetFunctionFlags(integer Flags) 22 | - Sets the flags for the `UFunction`. 23 | -------------------------------------------------------------------------------- /docs/lua-api/classes/uobjectreflection.md: -------------------------------------------------------------------------------- 1 | # UObjectReflection 2 | 3 | ## Inheritance 4 | None 5 | 6 | ## Methods 7 | 8 | ### GetProperty(string PropertyName) 9 | 10 | - **Return type:** `Property` 11 | - **Returns:** a property meta-data object. -------------------------------------------------------------------------------- /docs/lua-api/classes/ustruct.md: -------------------------------------------------------------------------------- 1 | # UStruct 2 | 3 | ## Inheritance 4 | [UObject](./uobject.md) 5 | 6 | ## Methods 7 | 8 | ### GetSuperStruct() 9 | 10 | - **Return type:** `UClass` 11 | - **Returns:** the `SuperStruct` of this struct (can be invalid). 12 | 13 | ## ForEachFunction(function Callback) 14 | 15 | - Iterates every `UFunction` that belongs to this struct. 16 | - The callback has one param: `UFunction Function`. 17 | - Return `true` in the callback to stop iterating. 18 | 19 | ## ForEachProperty(function Callback) 20 | 21 | - Iterates every `Property` that belongs to this struct. 22 | - The callback has one param: `Property Property`. 23 | - Return `true` in the callback to stop iterating. -------------------------------------------------------------------------------- /docs/lua-api/classes/uworld.md: -------------------------------------------------------------------------------- 1 | # UWorld 2 | ## Inheritance 3 | [RemoteObject](./remoteobject.md) 4 | 5 | ## Methods 6 | 7 | ### SpawnActor(UClass ActorClass, FVector Location, FRotator Rotation) 8 | This function uses `UGameplayStatics:BeginDeferredActorSpawnFromClass` and `UGameplayStatics:FinishSpawningActor` to spawn an actor. 9 | - **Return type:** `AActor` 10 | - **Returns:** Spawned actor object or an invalid object. 11 | -------------------------------------------------------------------------------- /docs/lua-api/examples.md: -------------------------------------------------------------------------------- 1 | # Examples 2 | 3 | * Check the code snippets at the bottom of the individual pages in the Lua API section and [tutorials](../guides/creating-a-lua-mod.md) in this repository. 4 | * Hogwarts Legacy modding uses UE4SS' Lua API for its primary logic mods. This [website](https://modding.wiki/en/hogwartslegacy/developers/luaexamples) contains example code for some of the mods. 5 | * You can search for interesting code in that page, the collapsed sections of the webpage will auto-expand when the text is found. 6 | * The [Palworld modding wiki](https://pwmodding.wiki/docs/category/lua-modding) has some decent docs and examples on how to develop Lua mods for new learners. 7 | * Search GitHub for any Lua code calling reasonably uniquely-named UE4SS API functions, excluding the actual UE4SS repository from the search: 8 | * https://github.com/search?q=language%3ALua+StaticFindObject+NOT+repo%3AUE4SS-RE%2FRE-UE4SS&type=code 9 | * https://github.com/search?q=language%3ALua+FindFirstOf+NOT+repo%3AUE4SS-RE%2FRE-UE4SS&type=code 10 | * and so on, as long as `language:Lua` is specified in the query -------------------------------------------------------------------------------- /docs/lua-api/global-functions/createinvalidobject.md: -------------------------------------------------------------------------------- 1 | # CreateInvalidObject 2 | 3 | The function `CreateInvalidObject` always returns an object with an `IsValid` function that returns `flase`. 4 | 5 | The sole purpose of the function is to ensure that the mod's Lua code adheres to UE4SS code conventions, where all functions return an invalid `UObject` instead of `nil`. 6 | 7 | ## Example 8 | The example code below ensures that you never need to check if `EngineCache` is `nil`, and the same applies to the return value of `GetEngine()`. 9 | ```lua 10 | local EngineCache = CreateInvalidObject() ---@cast EngineCache UEngine 11 | ---Returns instance of UEngine 12 | ---@return UEngine 13 | function GetEngine() 14 | if EngineCache:IsValid() then return EngineCache end 15 | 16 | EngineCache = FindFirstOf("Engine") ---@type UEngine 17 | return EngineCache 18 | end 19 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/dumpallactors.md: -------------------------------------------------------------------------------- 1 | # DumpAllActors 2 | Dumps all actors from memory to the file `(timestamp here)-ue4ss_actor_data.csv`. 3 | 4 | The function does the same as the `Dump all actors to file` button in the UE4SS Debugging Tools aka. the GUI Console under the `Dumpers` tab. 5 | 6 | ## Example 7 | ```lua 8 | RegisterKeyBind(Key.F1, function() 9 | DumpAllActors() 10 | end) 11 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/dumpallobjects.md: -------------------------------------------------------------------------------- 1 | # DumpAllObjects 2 | Dumps all objects from memory to the file `UE4SS_ObjectDump.txt`. 3 | 4 | The function does the same as the `Dump Objects & Properties` button in the UE4SS Debugging Tools aka. the GUI Console. 5 | 6 | ## Example 7 | ```lua 8 | RegisterKeyBind(Key.F1, function() 9 | DumpAllObjects() 10 | end) 11 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/dumpstaticmeshes.md: -------------------------------------------------------------------------------- 1 | # DumpStaticMeshes 2 | Dumps all static actor meshes from memory to the file `(timestamp here)-ue4ss_static_mesh_data.csv`. 3 | 4 | The function does the same as the `Dump all static actor meshes to file` button in the UE4SS Debugging Tools aka. the GUI Console under the `Dumpers` tab. 5 | 6 | ## Example 7 | ```lua 8 | RegisterKeyBind(Key.F1, function() 9 | DumpStaticMeshes() 10 | end) 11 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/dumpusmap.md: -------------------------------------------------------------------------------- 1 | # DumpUSMAP 2 | Generates an Unreal Mapping file `Mappings.usmap`. 3 | 4 | The function does the same as the `Generate .usmap file UnrealMappingsDumper by OutTheShade` button in the UE4SS Debugging Tools aka. the GUI Console under the `Dumpers` tab. 5 | 6 | ## Example 7 | ```lua 8 | RegisterKeyBind(Key.F1, function() 9 | DumpUSMAP() 10 | end) 11 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/executeasync.md: -------------------------------------------------------------------------------- 1 | # ExecuteAsync 2 | 3 | The `ExecuteAsync` function asynchronously executes the supplied callback. 4 | 5 | It works in a similar manner to [ExecuteWithDelay](https://github.com/UE4SS/UE4SS/wiki/Global-Function%3A-ExecuteWithDelay), except that there is no delay beyond the cost of registering the callback. 6 | 7 | ## Parameters 8 | 9 | | # | Type | Information | 10 | |---|----------|-------------| 11 | | 1 | function | The callback to execute| 12 | 13 | ## Example 14 | ```lua 15 | ExecuteAsync(function() 16 | print("Executed asynchronously\n") 17 | end) 18 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/executeingamethread.md: -------------------------------------------------------------------------------- 1 | # ExecuteInGameThread 2 | 3 | `ExecuteInGameThread` is a function that allows you to execute code using `ProcessEvent`. 4 | 5 | It will execute as soon as the game has time to execute it. 6 | 7 | ## Parameters 8 | 9 | | # | Type | Information | 10 | |---|----------|-------------| 11 | | 1 | function | Callback to execute when the game has time | 12 | 13 | ## Example 14 | 15 | ```lua 16 | ExecuteInGameThread(function() 17 | print("Hello from the game thread!\n") 18 | end) 19 | ``` 20 | -------------------------------------------------------------------------------- /docs/lua-api/global-functions/executewithdelay.md: -------------------------------------------------------------------------------- 1 | # ExecuteWithDelay 2 | 3 | The `ExecuteWithDelay` function asynchronously executes the supplied callback after the supplied delay is over. 4 | 5 | ## Parameters 6 | 7 | | # | Type | Information | 8 | |---|----------|-------------| 9 | | 1 | integer | Delay, in milliseconds, to wait before executing the supplied callback | 10 | | 2 | function | The callback to execute after the supplied delay is over | 11 | 12 | ## Example 13 | ```lua 14 | ExecuteWithDelay(2000, function() 15 | print("Executed asynchronously after a 2 second delay\n") 16 | end) 17 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/findallof.md: -------------------------------------------------------------------------------- 1 | # FindAllOf 2 | 3 | The `FindAllOf` function will find all non-default instances of the supplied class name. 4 | 5 | > This function cannot be used to find non-instances or default instances. 6 | 7 | ## Parameters 8 | 9 | | # | Type | Information | 10 | |---|---------|-------------| 11 | | 1 | string | Short name of the class to find instances of | 12 | 13 | ## Return Value 14 | 15 | | # | Type | Sub Type | Information | 16 | |---|--------------|----------|-------------| 17 | | 1 | nil or table | UObject, UClass, or AActor | nil if no instances were found, otherwise a numerically indexed table of all instances | 18 | 19 | ## Example 20 | Outputs the name of all objects that inherit from the `Actor` class. 21 | ```lua 22 | local ActorInstances = FindAllOf("Actor") 23 | if not ActorInstances then 24 | print("No instances of 'Actor' were found\n") 25 | else 26 | for Index, ActorInstance in pairs(ActorInstances) do 27 | print(string.format("[%d] %s\n", Index, ActorInstance:GetFullName())) 28 | end 29 | end 30 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/findfirstof.md: -------------------------------------------------------------------------------- 1 | # FindFirstOf 2 | 3 | The `FindFirstOf` function will find the first non-default instance of the supplied class name. 4 | 5 | > This function cannot be used to find non-instances or default instances. 6 | 7 | ## Parameters 8 | 9 | | # | Type | Information | 10 | |---|---------|-------------| 11 | | 1 | string | Short name of the class to find an instance of | 12 | 13 | ## Return Value 14 | 15 | | # | Type | Information | 16 | |---|---------------|-------------| 17 | | 1 | UObject, UClass, or AActor | Object is only valid if an instance was found | 18 | 19 | ## Example 20 | ```lua 21 | local CharacterInstance = FindFirstOf("Character") 22 | if not CharacterInstance:IsValid() then 23 | print("No instance of class 'Character' was found.") 24 | end 25 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/findobjects.md: -------------------------------------------------------------------------------- 1 | # FindObjects 2 | 3 | Finds the first specified number of objects by class name or short object name. 4 | 5 | To find all objects that match your criteria, set param 1 to `0` or `nil`. 6 | 7 | ## Parameters 8 | 9 | | # | Type | Information | 10 | |---|------|-------------| 11 | | 1 | integer | The number of objects to find | 12 | | 1 | string\|FName\|nil | The short name of the class of the object | 13 | | 2 | string\|FName\|nil | The short name of the object itself | 14 | | 3 | EObjectFlags | Any flags that the object cannot have. Uses \| as a seperator | 15 | | 4 | EObjectFlags | Any flags that the object must have. Uses \| as a seperator | 16 | | 6 | bool | Whether to require an exact match with the UClass parameter | 17 | 18 | ## Return Value 19 | 20 | | # | Type | Sub Type | Information | 21 | |---|------|----------|-------------| 22 | | 1 | table | UObject | The derivative of the UObject | 23 | 24 | ## Example 25 | 26 | ```lua 27 | local Object = FindObjects(4, "SceneComponent", "TransformComponent0", EObjectFlags.RF_NoFlags, EObjectFlags.RF_ClassDefaultObject, true) 28 | 29 | for _, Object in pairs(Objects) do 30 | -- Do something with Object 31 | end 32 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/foreachuobject.md: -------------------------------------------------------------------------------- 1 | # ForEachUObject 2 | 3 | The `ForEachUObject` function iterates every UObject that currently exists in `GUObjectArray`. 4 | 5 | The `GUObjectArray` UE4 variable is a large chunked array that contains UObjects. 6 | 7 | The structure of this array has changed over the years and the `ForEachUObject` function is designed to work identically across all engine versions. 8 | 9 | ## Parameters 10 | 11 | | # | Type | Information | 12 | |---|----------|-------------| 13 | | 1 | function | Callback to execute for every UObject in GUObjectArray | 14 | 15 | ## Callback Parameters 16 | 17 | | # | Type | Information | 18 | |---|----------|-------------| 19 | | 1 | UObject | The UObject | 20 | | 2 | integer | The chunk index of the UObject | 21 | | 3 | integer | The object index of the UObject | 22 | 23 | ## Example 24 | ```lua 25 | -- Warning: This will take quite a while to finish executing due to all of the 'print' calls 26 | ForEachUObject(function(Object, ChunkIndex, ObjectIndex) 27 | print(string.format("Chunk: %X | Object: %X | Name: %s\n", ChunkIndex, ObjectIndex, Object:GetFullName())) 28 | end) 29 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/ftext.md: -------------------------------------------------------------------------------- 1 | # FText 2 | 3 | The `FText` function is used to create an `FText` object from a `string`. 4 | 5 | Useful when you have to interact with `UserWidget`-related classes for the UI of your mods, and call their `SetText(FText("My New Text"))` methods. 6 | 7 | ## Parameters (overload #1) 8 | 9 | This overload uses [FText::FText( FString&& InSourceString )](https://docs.unrealengine.com/4.27/en-US/API/Runtime/Core/Internationalization/FText/__ctor/6/) to create a new `FText` object. 10 | 11 | # | Type | Information 12 | ---|----------|------------- 13 | 1 | string | Content with which FText will to be created 14 | 15 | ## Return Value 16 | 17 | # | Type | Information 18 | ---|-------|------------- 19 | 1 | FText | FText object that contains the passed `string` 20 | 21 | ## Example 22 | Code: 23 | ```lua 24 | local my_text = FText("My Text") 25 | print(string.format("Lua type: %s\n", type(my_text))) 26 | print(string.format("Object type: %s\n", my_text:type())) 27 | print(string.format("Content: %s\n", my_text:ToString())) 28 | ``` 29 | Output: 30 | ``` 31 | [Lua] Lua type: userdata 32 | [Lua] Object type: FText 33 | [Lua] Content: My Text 34 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/generateluatypes.md: -------------------------------------------------------------------------------- 1 | # GenerateLuaTypes 2 | Generates Lua types for [Custom Lua Bindings](../../guides/using-custom-lua-bindings.md) in the `Mods/shared/types` directory. 3 | 4 | The function does the same as the `Generate Lua Types` button in the UE4SS Debugging Tools aka. the GUI Console under the `Dumpers` tab. 5 | 6 | ## Example 7 | ```lua 8 | RegisterKeyBind(Key.F1, function() 9 | GenerateLuaTypes() 10 | end) 11 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/generatesdk.md: -------------------------------------------------------------------------------- 1 | # GenerateSDK 2 | Generates C++ Headers in the `CXXHeaderDump` directory. 3 | 4 | The function does the same as the `Dump CXX Headers` button in the UE4SS Debugging Tools aka. the GUI Console under the `Dumpers` tab. 5 | 6 | ## Example 7 | ```lua 8 | RegisterKeyBind(Key.F1, function() 9 | GenerateSDK() 10 | end) 11 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/generateuhtcompatibleheaders.md: -------------------------------------------------------------------------------- 1 | # GenerateUHTCompatibleHeaders 2 | Generates [Unreal Header Tool](https://dev.epicgames.com/documentation/de-de/unreal-engine/unreal-header-tool-for-unreal-engine) Headers in the `UHTHeaderDump` directory. 3 | 4 | The function does the same as the `Generate UHT Compatible Headers` button in the UE4SS Debugging Tools aka. the GUI Console under the `Dumpers` tab. 5 | 6 | ## Example 7 | ```lua 8 | RegisterKeyBind(Key.F1, function() 9 | GenerateUHTCompatibleHeaders() 10 | end) 11 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/iskeybindregistered.md: -------------------------------------------------------------------------------- 1 | # IsKeyBindRegistered 2 | 3 | The `IsKeyBindRegistered` checks if, at the time of the invocation, the supplied keys have been registered 4 | 5 | ## Parameters (overload #1) 6 | 7 | | # | Type | Sub Type | Information | 8 | |---|----------|-------------|-------------| 9 | | 1 | integer | Key | Key to check | 10 | 11 | ## Parameters (overload #2) 12 | 13 | | # | Type | Sub Type | Information | 14 | |---|----------|-------------|-------------| 15 | | 1 | integer | Key | Key to bind, use the 'Key' table | 16 | | 2 | table | ModifierKeys | Modifier keys to check alongside the 'Key' parameter | -------------------------------------------------------------------------------- /docs/lua-api/global-functions/iterategamedirectories.md: -------------------------------------------------------------------------------- 1 | # IterateGameDirectories 2 | 3 | Returns a table of all game directories. 4 | 5 | An example of an absolute path to `Win64`: `Q:\SteamLibrary\steamapps\common\Deep Rock Galactic\FSD\Binaries\Win64`. 6 | 7 | To get to the same directory, do `IterateGameDirectories()..Binaries.Win64`. 8 | 9 | - You can use `.__name` and `.__absolute_path` to retrieve values. 10 | - You can use `.__files` to retrieve a table containing all files in this directory. 11 | - You also use `.__name` and `.__absolute_path` for files. 12 | 13 | ## Return Value 14 | 15 | | # | Type | Information | 16 | |---|------|-------------| 17 | | 1 | table | The game directories table | 18 | 19 | ## Example 20 | 21 | ```lua 22 | for _, GameDirectory in pairs(IterateGameDirectories()) do 23 | print(GameDirectory.__name) 24 | print(GameDirectory.__absolute_path) 25 | end 26 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/loadasset.md: -------------------------------------------------------------------------------- 1 | # LoadAsset 2 | 3 | The `LoadAsset` function loads an asset by name. 4 | 5 | > It must only be called from within the game thread. For example, from within a `UFunction` hook or `RegisterConsoleCommandHandler` callback. 6 | 7 | ## Parameters 8 | 9 | | # | Type | Information | 10 | |---|----------|-------------| 11 | | 1 | string | Path and name of the asset | 12 | 13 | ## Example 14 | ```lua 15 | RegisterConsoleCommandHandler("summon", function(FullCommand, Parameters) 16 | if #Parameters < 1 then return false end 17 | 18 | -- Parameters[1] example: /Game/LevelElements/Refinery/Pipeline/BP_Pipeline_Start 19 | LoadAsset(Parameters[1]) 20 | 21 | return false 22 | end) 23 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/loopasync.md: -------------------------------------------------------------------------------- 1 | # LoopAsync 2 | 3 | Starts a loop that sleeps for the supplied number of milliseconds and stops when the callback returns true. 4 | 5 | ## Parameters 6 | 7 | | # | Type | Information | 8 | |---|------|-------------| 9 | | 1 | integer | The number of milliseconds to sleep | 10 | | 2 | function | The callback function | 11 | 12 | ## Example 13 | 14 | ```lua 15 | LoopAsync(1000, function() 16 | print("Hello World!") 17 | return false -- Loops forever 18 | end) 19 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/print.md: -------------------------------------------------------------------------------- 1 | # print 2 | 3 | The `print` function is used for debugging and outputs a string to the debug console. 4 | 5 | This function cannot be used to format strings, please use `string.format` for string formatting purposes. 6 | 7 | > New lines are not automatically appended, so make sure to use `\n` whenever you want a new line. 8 | 9 | ## Parameters 10 | 11 | | # | Type | Information | 12 | |-----|-------|------------------| 13 | | ... | any | String or variable to output | 14 | 15 | ## Example 16 | ```lua 17 | print("Hello Debug Console\n") 18 | ``` 19 | -------------------------------------------------------------------------------- /docs/lua-api/global-functions/registerbeginplayposthook.md: -------------------------------------------------------------------------------- 1 | # RegisterBeginPlayPostHook 2 | 3 | This registers a callback that will get called after `AActor::BeginPlay` is called. 4 | 5 | Parameters (except strings & bools & `FOutputDevice`) must be retrieved via `Param:Get()` and set via `Param:Set()`. 6 | 7 | ## Parameters 8 | 9 | | # | Type | Information | 10 | |---|------|-------------| 11 | | 1 | function | The callback to register | 12 | 13 | ## Callback Parameters 14 | 15 | | # | Type | Information | 16 | |---|------|-------------| 17 | | 1 | AActor | The actor context | 18 | 19 | ## Example 20 | 21 | ```lua 22 | RegisterBeginPlayPostHook(function(Actor) 23 | print("BeginPlayPostHook") 24 | end) 25 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/registerbeginplayprehook.md: -------------------------------------------------------------------------------- 1 | # RegisterBeginPlayPreHook 2 | 3 | This registers a callback that will get called before `AActor::BeginPlay` is called. 4 | 5 | Parameters (except strings & bools & `FOutputDevice`) must be retrieved via `Param:Get()` and set via `Param:Set()`. 6 | 7 | ## Parameters 8 | 9 | | # | Type | Information | 10 | |---|------|-------------| 11 | | 1 | function | The callback to register | 12 | 13 | ## Callback Parameters 14 | 15 | | # | Type | Information | 16 | |---|------|-------------| 17 | | 1 | AActor | The actor context | 18 | 19 | ## Example 20 | 21 | ```lua 22 | RegisterBeginPlayPreHook(function(Actor) 23 | print("BeginPlayPreHook") 24 | end) 25 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/registercustomevent.md: -------------------------------------------------------------------------------- 1 | # RegisterCustomEvent 2 | 3 | This registers a callback that will get called when a blueprint function or event is called with the name `EventName`. 4 | 5 | ## Parameters 6 | 7 | | # | Type | Information | 8 | |---|----------|-------------| 9 | | 1 | string | Name of the event to hook. | 10 | | 2 | function | The callback to call when the event is called. | 11 | 12 | ## Example 13 | 14 | ```lua 15 | RegisterCustomEvent("MyCustomEvent", function() 16 | print("MyCustomEvent was called\n") 17 | end) 18 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/registerinitgamestateposthook.md: -------------------------------------------------------------------------------- 1 | # RegisterInitGameStatePostHook 2 | 3 | This registers a callback that will get called after `AGameModeBase::InitGameState` is called. 4 | 5 | Parameters (except strings & bools & `FOutputDevice`) must be retrieved via `Param:Get()` and set via `Param:Set()`. 6 | 7 | ## Parameters 8 | 9 | | # | Type | Information | 10 | |---|------|-------------| 11 | | 1 | function | The callback to register | 12 | 13 | ## Callback Parameters 14 | 15 | | # | Type | Information | 16 | |---|------|-------------| 17 | | 1 | AGameStateBase | The game state context | 18 | 19 | ## Example 20 | 21 | ```lua 22 | RegisterInitGameStatePostHook(function(GameState) 23 | print("InitGameStatePostHook") 24 | end) 25 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/registerinitgamestateprehook.md: -------------------------------------------------------------------------------- 1 | # RegisterInitGameStatePreHook 2 | 3 | This registers a callback that will get called before `AGameModeBase::InitGameState` is called. 4 | 5 | Parameters (except strings & bools & `FOutputDevice`) must be retrieved via `Param:Get()` and set via `Param:Set()`. 6 | 7 | ## Parameters 8 | 9 | | # | Type | Information | 10 | |---|------|-------------| 11 | | 1 | function | The callback to register | 12 | 13 | ## Callback Parameters 14 | 15 | | # | Type | Information | 16 | |---|------|-------------| 17 | | 1 | AGameStateBase | The game state context | 18 | 19 | ## Example 20 | 21 | ```lua 22 | RegisterInitGameStatePreHook(function(GameState) 23 | print("InitGameStatePreHook") 24 | end) 25 | ``` -------------------------------------------------------------------------------- /docs/lua-api/global-functions/unregisterhook.md: -------------------------------------------------------------------------------- 1 | # UnregisterHook 2 | 3 | The `UnregisterHook` unregisters a callback for a `UFunction`. 4 | 5 | ## Parameters 6 | 7 | | # | Type | Information | 8 | |---|----------|-------------| 9 | | 1 | string | Full name of the UFunction to hook. Type prefix has no effect. | 10 | | 2 | integer | The PreId of the hook | 11 | | 3 | integer | The PostId of the hook | 12 | 13 | ## Example 14 | ```lua 15 | local preId, postId = RegisterHook("/Script/Engine.PlayerController:ClientRestart", function() 16 | print("PlayerController restarted\n") 17 | end) 18 | 19 | UnregisterHook("/Script/Engine.PlayerController:ClientRestart", preId, postId) 20 | ``` -------------------------------------------------------------------------------- /docs/lua-api/table-definitions/arraypropertyinfo.md: -------------------------------------------------------------------------------- 1 | # ArrayPropertyInfo 2 | 3 | The `ArrayPropertyInfo` table contains type information for custom ArrayProperty properties. 4 | 5 | **You must supply data yourself when using this table.** 6 | 7 | ## Structure 8 | | Key | Value Type | Sub Type | 9 | |----------------|------------------------|---------------| 10 | | Type | table | [PropertyTypes](./propertytypes.md) | 11 | 12 | ## Example 13 | ```lua 14 | local ArrayPropertyInfo = { 15 | ["Type"] = PropertyTypes.IntProperty 16 | } 17 | ``` -------------------------------------------------------------------------------- /docs/lua-api/table-definitions/efindname.md: -------------------------------------------------------------------------------- 1 | # EFindName 2 | 3 | Field Name | Field Value Type 4 | --------- | -------------- 5 | FNAME_Find | 0 6 | FNAME_Add | 1 7 | -------------------------------------------------------------------------------- /docs/lua-api/table-definitions/einternalobjectflags.md: -------------------------------------------------------------------------------- 1 | # EInternalObjectFlags 2 | 3 | A table of internal object flags that can be or'd together by using `|` 4 | 5 | Field Name | Field Value Type 6 | --------- | -------------- 7 | ReachableInCluster | 0x00800000 8 | ClusterRoot | 0x01000000 9 | Native | 0x02000000 10 | Async | 0x04000000 11 | AsyncLoading | 0x08000000 12 | Unreachable | 0x10000000 13 | PendingKill | 0x20000000 14 | RootSet | 0x40000000 15 | GarbageCollectionKeepFlags | 0x0E000000 16 | AllFlags | 0x7F800000 -------------------------------------------------------------------------------- /docs/lua-api/table-definitions/modifierkey.md: -------------------------------------------------------------------------------- 1 | # ModifierKey 2 | 3 | The `ModifierKey` table contains Microsoft virtual key-code strings that are meant to be modifier keys such as `CONTROL` and `ALT`. 4 | 5 | **This table is automatically populated with data. 6 | Do not modify the data inside this table.** 7 | 8 | ## Modifier key-code strings 9 | ```md 10 | SHIFT 11 | CONTROL 12 | ALT 13 | ``` 14 | 15 | ## Example 16 | ```lua 17 | local CTRL_Key = ModifierKey.CONTROL 18 | ``` -------------------------------------------------------------------------------- /docs/lua-api/table-definitions/offsetinternalinfo.md: -------------------------------------------------------------------------------- 1 | # OffsetInternalInfo 2 | 3 | The `OffsetInternalInfo` table contains information related to a custom property. 4 | 5 | **You must supply data yourself when using this table.** 6 | 7 | ## Structure 8 | | Key | Value Type | Information | 9 | |----------------|----------------|-------------| 10 | | Property | string | Name of the property to use as relative start instead of base | 11 | | RelativeOffset | integer | Offset from relative start to this property | 12 | 13 | ## Example 14 | ```lua 15 | local PropertyInfo = { 16 | ["Property"] = "HistoryBuffer", 17 | ["RelativeOffset"] = 0x10 18 | } 19 | ``` -------------------------------------------------------------------------------- /tools/buildscripts/build_auto.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | set BuildMode=%1 4 | set TargetName=%2 5 | 6 | IF NOT DEFINED %BuildMode ( 7 | set BuildMode=Release 8 | ) 9 | 10 | IF NOT DEFINED %TargetName ( 11 | set TargetName=ue4ss 12 | ) 13 | 14 | set IsBuildConfigValid=1 15 | 16 | IF NOT %BuildMode% == Release ( 17 | IF NOT %BuildMode% == Debug ( 18 | set IsBuildConfigValid=0 19 | echo Build mode must be either Release or Debug, not %BuildMode%. 20 | ) 21 | ) 22 | 23 | if NOT %TargetName% == ue4ss ( 24 | if NOT %TargetName% == xinput1_3 ( 25 | set IsBuildConfigValid=0 26 | echo Target name must be either ue4ss or xinput1_3, not %TargetName% 27 | ) 28 | ) 29 | 30 | IF %IsBuildConfigValid% == 1 ( 31 | echo Target Name: %TargetName% 32 | echo Build Mode: %BuildMode% 33 | 34 | call internal_generate_build_files.bat %BuildMode% 35 | cd .... 36 | MSBuild.exe /m "VS_Solution\%TargetName%.vcxproj" /property:Configuration=%BuildMode% 37 | ) else ( 38 | echo Could not build, the build configuration is invalid. 39 | pause 40 | exit /b 41 | ) -------------------------------------------------------------------------------- /tools/buildscripts/build_auto_both_configs.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | call internal_generate_build_files.bat Release 4 | MSBuild.exe /m "VS_Solution\ue4ss.vcxproj" /property:Configuration=Release 5 | 6 | call internal_generate_build_files.bat Release 7 | MSBuild.exe /m "VS_Solution\xinput1_3.vcxproj" /property:Configuration=Release 8 | -------------------------------------------------------------------------------- /tools/buildscripts/build_auto_clang_ninja.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | set BuildMode=%1 4 | set TargetName=%2 5 | 6 | IF NOT DEFINED %BuildMode ( 7 | set BuildMode=Release 8 | ) 9 | 10 | IF NOT DEFINED %TargetName ( 11 | set TargetName=ue4ss 12 | ) 13 | 14 | set IsBuildConfigValid=1 15 | 16 | IF NOT %BuildMode% == Release ( 17 | IF NOT %BuildMode% == Debug ( 18 | set IsBuildConfigValid=0 19 | echo Build mode must be either Release or Debug, not %BuildMode%. 20 | ) 21 | ) 22 | 23 | if NOT %TargetName% == ue4ss ( 24 | if NOT %TargetName% == xinput1_3 ( 25 | set IsBuildConfigValid=0 26 | echo Target name must be either ue4ss or xinput1_3, not %TargetName% 27 | ) 28 | ) 29 | 30 | IF %IsBuildConfigValid% == 1 ( 31 | echo Target Name: %TargetName% 32 | echo Build Mode: %BuildMode% 33 | 34 | call internal_generate_build_files.bat %BuildMode% ClangNinja 35 | cd ClangNinja 36 | ninja 37 | cd .. 38 | ) else ( 39 | echo Could not build, the build configuration is invalid. 40 | pause 41 | exit /b 42 | ) -------------------------------------------------------------------------------- /tools/buildscripts/build_clang_ninja_debug.bat: -------------------------------------------------------------------------------- 1 | build_auto_clang_ninja.bat Debug xinput1_3 2 | pause 3 | -------------------------------------------------------------------------------- /tools/buildscripts/build_clang_ninja_release.bat: -------------------------------------------------------------------------------- 1 | build_auto_clang_ninja.bat Release xinput1_3 2 | pause 3 | -------------------------------------------------------------------------------- /tools/buildscripts/internal_build_tools/cleanup_build_option_files.bat: -------------------------------------------------------------------------------- 1 | cd generated_src 2 | if exist %enable_with_case_preserving_file% ( 3 | del "%enable_with_case_preserving_file%" 4 | ) 5 | if exist %disable_with_case_preserving_file% ( 6 | del "%disable_with_case_preserving_file%" 7 | ) 8 | cd .. -------------------------------------------------------------------------------- /tools/buildscripts/internal_build_tools/generate_clang_ninja_internal.bat: -------------------------------------------------------------------------------- 1 | set BuildMode=%1 2 | 3 | IF NOT DEFINED %BuildMode ( 4 | set BuildMode=Release 5 | ) 6 | 7 | cd ../../../ClangNinja 8 | cmake -DCMAKE_BUILD_TYPE=%BuildMode% -DRC_FORCE_ALL_STATIC_LIBS= -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ -G"Ninja" .. 9 | -------------------------------------------------------------------------------- /tools/buildscripts/internal_build_tools/generate_vs_solution_internal.bat: -------------------------------------------------------------------------------- 1 | set BuildMode=%1 2 | 3 | IF NOT DEFINED %BuildMode ( 4 | set BuildMode=Release 5 | ) 6 | 7 | cd ../../../VS_Solution 8 | cmake -DCMAKE_BUILD_TYPE=%BuildMode% -DRC_FORCE_ALL_STATIC_LIBS= -G"Visual Studio 17 2022" .. 9 | -------------------------------------------------------------------------------- /tools/buildscripts/internal_build_tools/package_all_distributions.bat: -------------------------------------------------------------------------------- 1 | :: Case-preserving builds have been turned off because we no longer support them widely. 2 | :: set CASE_PRESERVING=1 3 | :: call internal_build_tools/package_binary.bat "UE4SS - XInput - Case Preserving" "xinput1_3" 4 | 5 | :: set CASE_PRESERVING=1 6 | :: call internal_build_tools/package_binary.bat "UE4SS - Standard - Case Preserving" "ue4ss" 7 | 8 | set CASE_PRESERVING=0 9 | call internal_build_tools/package_binary.bat "UE4SS - Standard" "ue4ss" 10 | 11 | :: Cleanup 12 | call internal_build_tools/cleanup_build_option_files.bat 13 | 14 | :: Set version numbers -> After compiling 15 | if %IS_MINOR_RELEASE%==1 ( 16 | set /a minor_version=%minor_version%+1 17 | ) 18 | if %IS_MAJOR_RELEASE%==1 ( 19 | set /a major_version=%major_version%+1 20 | ) 21 | call internal_build_tools/set_version.bat %major_version% %minor_version% %hotfix_version% %pre_release_version% %beta_version% 22 | -------------------------------------------------------------------------------- /tools/buildscripts/internal_build_tools/reload_cmake.bat: -------------------------------------------------------------------------------- 1 | if %LOG_LEVEL%==VERBOSE echo Reloading CMake 2 | cd VS_Solution 3 | cmake -DCMAKE_BUILD_TYPE=Release -DRC_FORCE_ALL_STATIC_LIBS= -G"Visual Studio 16 2019" .. > nul 2>&1 4 | cd .. -------------------------------------------------------------------------------- /tools/buildscripts/internal_build_tools/set_build_switches.bat: -------------------------------------------------------------------------------- 1 | set param_one=%1% 2 | if not defined param_one ( 3 | echo Was unable to call 'set_build_switches' because no build variant was passed 4 | pause 5 | exit 6 | ) 7 | 8 | if %LOG_LEVEL%==VERBOSE echo Setting up build switches for %~1% 9 | 10 | cd generated_src 11 | 12 | if %LOG_LEVEL%==VERBOSE ( 13 | echo generated src directory contents... 14 | dir /b /a-d 15 | ) 16 | 17 | Rem Case Preserving - START 18 | if exist %enable_with_case_preserving_file% ( 19 | if %LOG_LEVEL%==VERBOSE echo Deleting 'enable_with_case_preserving_file' 20 | del "%enable_with_case_preserving_file%" 21 | ) 22 | 23 | if exist %disable_with_case_preserving_file% ( 24 | if %LOG_LEVEL%==VERBOSE echo Deleting 'disable_with_case_preserving_file' 25 | del "%disable_with_case_preserving_file%" 26 | ) 27 | 28 | if %CASE_PRESERVING% == 1 ( 29 | if %LOG_LEVEL%==VERBOSE echo Creating 'enable_with_case_preserving_file' 30 | type NUL > %enable_with_case_preserving_file% 31 | ) else ( 32 | if %LOG_LEVEL%==VERBOSE echo Creating 'disable_with_case_preserving_file' 33 | type NUL > %disable_with_case_preserving_file% 34 | ) 35 | Rem Case Preserving - END 36 | 37 | cd .. 38 | -------------------------------------------------------------------------------- /tools/buildscripts/internal_generate_build_files.bat: -------------------------------------------------------------------------------- 1 | set BuildMode=%1 2 | set Compiler=%2 3 | 4 | IF NOT DEFINED %BuildMode ( 5 | set BuildMode=Release 6 | ) 7 | 8 | IF NOT DEFINED %Compiler ( 9 | set Compiler=MSVC 10 | ) 11 | 12 | if %Compiler% == MSVC ( 13 | if not exist "../../VS_Solution" ( 14 | mkdir "../../VS_Solution" 15 | ) 16 | 17 | cd internal_build_tools 18 | call generate_vs_solution_internal.bat %BuildMode% 19 | ) 20 | 21 | if %Compiler% == ClangNinja ( 22 | if not exist "../../ClangNinja" ( 23 | mkdir "../../ClangNinja" 24 | ) 25 | 26 | cd internal_build_tools 27 | call generate_clang_ninja_internal.bat %BuildMode% 28 | ) 29 | 30 | cd .. 31 | -------------------------------------------------------------------------------- /tools/buildscripts/rebuild_auto.bat: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | set BuildMode=%1 4 | set TargetName=%2 5 | 6 | IF NOT DEFINED %BuildMode ( 7 | set BuildMode=Release 8 | ) 9 | 10 | IF NOT DEFINED %TargetName ( 11 | set TargetName=ue4ss 12 | ) 13 | 14 | set IsBuildConfigValid=1 15 | 16 | IF NOT %BuildMode% == Release ( 17 | IF NOT %BuildMode% == Debug ( 18 | set IsBuildConfigValid=0 19 | echo Build mode must be either Release or Debug, not %BuildMode%. 20 | ) 21 | ) 22 | 23 | if NOT %TargetName% == ue4ss ( 24 | if NOT %TargetName% == xinput1_3 ( 25 | set IsBuildConfigValid=0 26 | echo Target name must be either ue4ss or xinput1_3, not %TargetName% 27 | ) 28 | ) 29 | 30 | IF %IsBuildConfigValid% == 1 ( 31 | echo Target Name: %TargetName% 32 | echo Build Mode: %BuildMode% 33 | 34 | call internal_generate_build_files.bat %BuildMode% 35 | MSBuild.exe /m "VS_Solution\%TargetName%.vcxproj" /property:Configuration=%BuildMode% /t:Clean,Build 36 | ) else ( 37 | echo Could not build, the build configuration is invalid. 38 | pause 39 | exit /b 40 | ) -------------------------------------------------------------------------------- /tools/xmakescripts/build_configs.lua: -------------------------------------------------------------------------------- 1 | -- TODO: This file should be deleted before the next release? 2 | -- It helps people with old mod templates upgrade to the new template. 3 | local build_configs = build_configs or {} 4 | 5 | function config(self, target) 6 | if target:name() == "Unreal" then 7 | _warn_unreal_submod_outdated() 8 | else 9 | _warn_mod_template_outdated(target) 10 | end 11 | end 12 | 13 | function set_output_dir(self, target) 14 | if target:name() == "Unreal" then 15 | _warn_unreal_submod_outdated() 16 | else 17 | _warn_mod_template_outdated(target) 18 | end 19 | end 20 | 21 | function clean_output_dir(self, target) 22 | if target:name() == "Unreal" then 23 | _warn_unreal_submod_outdated() 24 | else 25 | _warn_mod_template_outdated(target) 26 | end 27 | end 28 | 29 | function _warn_mod_template_outdated(target) 30 | print("SUGGESTED TEMPLATE:") 31 | print(format('target("%s")', target:name())) 32 | print(' add_rules("ue4ss.mod")') 33 | print(' add_includedirs(".")') 34 | print(' add_files("*.cpp")') 35 | raise("Your mod's xmake.lua file needs updating.") 36 | end 37 | 38 | function _warn_unreal_submod_outdated() 39 | raise("Unreal submodule needs updating.") 40 | end 41 | 42 | return build_configs -------------------------------------------------------------------------------- /tools/xmakescripts/modules/mode_builder.lua: -------------------------------------------------------------------------------- 1 | --- Applies options to a target. 2 | ---@param target any xmake target 3 | ---@param opts table xmake options ex. ["defines"] = { "UE_GAME" } 4 | function apply_mode_options(target, opts) 5 | for option, values in pairs(opts) do 6 | target:add(option, values, { public = true }) 7 | end 8 | end 9 | 10 | --- Applies build options to a target. 11 | ---@param target any xmake target 12 | ---@param opts table Map of xmake flag types to flags. Ex. ["ldflags"] = {"/DEBUG:FULL"} 13 | ---@param tools string[] xmake compiler/linker tools. Ex {"gcc", "ld" } 14 | function apply_compiler_options(target, opts, tools) 15 | for option, values in pairs(opts) do 16 | target:add(option, values, { tools = tools }) 17 | end 18 | end -------------------------------------------------------------------------------- /tools/xmakescripts/modules/mods/install.lua: -------------------------------------------------------------------------------- 1 | --- Install the mod and dependencies to the installdir. 2 | --- The installldir can be specified when running `xmake install --installdir="x/y/z/"` 3 | ---@param target any 4 | function install(target) 5 | local mod_dir = path.join(target:installdir(), "Mods", target:name()) 6 | os.cp(target:targetfile(), path.join(mod_dir, "dlls", "main.dll")) 7 | os.trycp(target:symbolfile(), path.join(mod_dir, "dlls", "main.pdb")) 8 | if not os.exists(path.join(mod_dir, "enabled.txt")) then 9 | io.writefile(path.join(mod_dir, "enabled.txt")) 10 | end 11 | 12 | -- Make sure we install any extra files. We can add these to the mod target by using 13 | -- add_extrafiles("xxx.yyy") 14 | for _, extrafile in ipairs(target:extrafiles()) do 15 | os.cp(extrafile, mod_dir) 16 | end 17 | end -------------------------------------------------------------------------------- /tools/xmakescripts/modules/target_helpers.lua: -------------------------------------------------------------------------------- 1 | --- Convert to SCREAMING_SNAKE_CASE 2 | ---@param s string 3 | ---@return string 4 | function _to_screaming_snake_case(s) 5 | if s == "ASMHelper" then 6 | return "ASM_HELPER" 7 | end 8 | 9 | if s:find("_") == nil and s:upper() == s then 10 | return s 11 | end 12 | return string.upper(string.gsub(s, "(.)([A-Z])", "%1_%2")) 13 | end 14 | 15 | --- Convert project name to exports define 16 | ---@param name string 17 | ---@return string 18 | function project_name_to_exports_define(name) 19 | return "RC_" .. _to_screaming_snake_case(name) .. "_EXPORTS" 20 | end 21 | 22 | --- Convert project name to build static define 23 | ---@param name string 24 | ---@return string 25 | function project_name_to_build_static_define(name) 26 | return "RC_" .. _to_screaming_snake_case(name) .. "_BUILD_STATIC" 27 | end -------------------------------------------------------------------------------- /tools/xmakescripts/plugins/ci/dump/modes.lua: -------------------------------------------------------------------------------- 1 | import("core.project.project") 2 | import("core.base.json") 3 | 4 | function main() 5 | local modes = {} 6 | for _, mode in pairs(project.modes()) do 7 | table.append(modes, mode) 8 | end 9 | local jsonString = json.encode(modes) 10 | io.write(jsonString) 11 | end -------------------------------------------------------------------------------- /tools/xmakescripts/plugins/ci/dump/targets.lua: -------------------------------------------------------------------------------- 1 | import("core.project.config") 2 | import("core.project.project") 3 | import("core.base.json") 4 | import("core.base.task") 5 | 6 | function main() 7 | project.lock() 8 | -- Check to ensure that config has been run. This will not trample the existing config if it exists. 9 | task.run("config", {yes=true}, {disable_dump = true}) 10 | project.load_targets() 11 | project.unlock() 12 | 13 | local targets = {} 14 | for targetname, target in pairs(project.targets()) do 15 | targets[targetname] = {target = target:targetfile(), symbol = target:symbolfile()} 16 | end 17 | 18 | local jsonString = json.encode(targets) 19 | io.write(jsonString) 20 | end -------------------------------------------------------------------------------- /tools/xmakescripts/plugins/ci/main.lua: -------------------------------------------------------------------------------- 1 | import("core.base.option") 2 | 3 | function main() 4 | if option.get("dump") then 5 | local module_name = string.format("dump.%s", string.lower(option.get("dump"))) 6 | assert(import(module_name, {try = true, anonymous = true}))() 7 | else 8 | raise("No options provided to the xmake ci command.") 9 | end 10 | end -------------------------------------------------------------------------------- /tools/xmakescripts/plugins/ci/xmake.lua: -------------------------------------------------------------------------------- 1 | task("ci") 2 | set_category("plugin") 3 | on_run("main") 4 | 5 | set_menu { 6 | usage = "xmake ci [options]", 7 | description = "Pass build information to external tools.", 8 | options = 9 | { 10 | {'d', "dump", "kv", nil, "Dump the specified information in JSON format.", 11 | values = {"modes", "targets"} } 12 | } 13 | } --------------------------------------------------------------------------------