From c56e1faa0a8a265002064583387c8fdfd22a8efe Mon Sep 17 00:00:00 2001 From: Kein Date: Mon, 21 Apr 2025 00:11:11 +0300 Subject: [PATCH 01/10] Update Types.lua --- assets/Mods/shared/Types.lua | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/assets/Mods/shared/Types.lua b/assets/Mods/shared/Types.lua index d26b41fac..bac5706d9 100644 --- a/assets/Mods/shared/Types.lua +++ b/assets/Mods/shared/Types.lua @@ -1140,3 +1140,18 @@ function UEnum:RemoveFromNamesAt(Index, Count) end ---@param Count integer ---@param AllowShrinking boolean function UEnum:RemoveFromNamesAt(Index, Count, AllowShrinking) end + +--- Registers a callback that will get called before UEngine::LoadMap is called. +--- The callback params are: UEngine Engine, struct FWorldContext& WorldContext, FURL URL, class UPendingNetGame* PendingGame, FString& Error +--- Params (except strings & bools & FOutputDevice) must be retrieved via 'Param:Get()' and set via 'Param:Set()'. +---@param Callback fun(Engine: RemoteUnrealParam, World: RemoteUnrealParam, FURL: RemoteUnrealParam, PendingGame: RemoteUnrealParam, Error: RemoteUnrealParam) +function RegisterLoadMapPreHook(Callback) end + +--- Registers a callback that will get called after UEngine::LoadMap is called. +--- The callback params are: UEngine Enigne, struct FWorldContext& WorldContext, FURL URL, class UPendingNetGame* PendingGame, FString& Error +--- Params (except strings & bools & FOutputDevice) must be retrieved via 'Param:Get()' and set via 'Param:Set()'. +---@param Callback fun(Engine: RemoteUnrealParam, World: RemoteUnrealParam, FURL: RemoteUnrealParam, PendingGame: RemoteUnrealParam, Error: RemoteUnrealParam) +function RegisterLoadMapPostHook(Callback) end + +--- Creates LogicMods/ directory inside app's Paks/ folder +function CreateLogicModsDirectory() end From 1f998b903d124558a3cc692ffb03271881e7fa17 Mon Sep 17 00:00:00 2001 From: Kein Date: Mon, 21 Apr 2025 00:53:43 +0300 Subject: [PATCH 02/10] Update Types.lua `ModRef` roo --- assets/Mods/shared/Types.lua | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/assets/Mods/shared/Types.lua b/assets/Mods/shared/Types.lua index bac5706d9..f192cbf62 100644 --- a/assets/Mods/shared/Types.lua +++ b/assets/Mods/shared/Types.lua @@ -618,6 +618,27 @@ function UE4SS:GetVersion() end ---@return integer, integer, integer function UE4SS.GetVersion() end +--- The 'ModRef' variable is a global variable that's automatically created and is the instance of the current mod. +---@class ModRef +ModRef = {} + +--- Sets a variable that can be accessed by any mod. +--- The second parameter `Value` can only be one of the following types: `nil`, `string`, `number`, `bool`, `UObject` (+derivatives), `lightuserdata`. +---@param VariableName string +---@param Value any +function ModRef:SetSharedVariable(VariableName, Value) end + +--- Returns a variable that could've been set by another mod. +--- The return value can only be one of the following types: `nil`, `string`, `number`, `bool`, `UObject`(+derivatives), `lightuserdata`. +---@param VariableName string +---@param Value any +---@return any +function ModRef:GetSharedVariable(VariableName, Value) end + +---Returns the type of the shared variable (if it is valid) +---@return string +function ModRef:type() end + ---Contains helper functions for retrieving which version of Unreal Engine that is being used. ---@class UnrealVersion UnrealVersion = {} From bef6ca6fa3efcf2e07798e4b57b9ebea57e75aa1 Mon Sep 17 00:00:00 2001 From: Kein Date: Mon, 21 Apr 2025 21:49:23 +0300 Subject: [PATCH 03/10] GetPlayer != GetPawn This is misleading and incorrect. "Player" in the context of UE is a completely different to a pawn object. You always have a player on a client, be it `LocalPlayer` or `NetClient`, but there are plenty of games that never use Pawn, nor for PlayerController nor for any of the other entities. This should be removed in major release or rewritten to return actual player Object --- assets/Mods/shared/UEHelpers/UEHelpers.lua | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/assets/Mods/shared/UEHelpers/UEHelpers.lua b/assets/Mods/shared/UEHelpers/UEHelpers.lua index 7960d2b8a..e0d90bc07 100644 --- a/assets/Mods/shared/UEHelpers/UEHelpers.lua +++ b/assets/Mods/shared/UEHelpers/UEHelpers.lua @@ -88,6 +88,7 @@ end ---Returns local player pawn ---@return APawn +---@deprecated function UEHelpers.GetPlayer() local playerController = UEHelpers.GetPlayerController() if playerController:IsValid() and playerController.Pawn then @@ -96,6 +97,16 @@ function UEHelpers.GetPlayer() return CreateInvalidObject() ---@type APawn end +---Returns a pawn, if any, controlled/owned by first found PlayerController +---@return APawn +function UEHelpers.GetPawn() + local playerController = UEHelpers.GetPlayerController() + if playerController:IsValid() and playerController.Pawn then + return playerController.Pawn + end + return CreateInvalidObject() ---@type APawn +end + local WorldCache = CreateInvalidObject() ---@cast WorldCache UWorld ---Returns the main UWorld ---@return UWorld From c7f7b5edbb9d41188884f820593ae257623a3665 Mon Sep 17 00:00:00 2001 From: Kein Date: Thu, 24 Apr 2025 01:49:18 +0300 Subject: [PATCH 04/10] GetPlayer deprecation description --- assets/Mods/shared/UEHelpers/UEHelpers.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/assets/Mods/shared/UEHelpers/UEHelpers.lua b/assets/Mods/shared/UEHelpers/UEHelpers.lua index e0d90bc07..2b1936456 100644 --- a/assets/Mods/shared/UEHelpers/UEHelpers.lua +++ b/assets/Mods/shared/UEHelpers/UEHelpers.lua @@ -89,6 +89,7 @@ end ---Returns local player pawn ---@return APawn ---@deprecated +---The behaviour of this function will be changed in future versions to return a correct UPlayer object, please use GetPawn() instead function UEHelpers.GetPlayer() local playerController = UEHelpers.GetPlayerController() if playerController:IsValid() and playerController.Pawn then From 9f6c3ed20275af7600f6539cf3c3b887ba828457 Mon Sep 17 00:00:00 2001 From: Kein Date: Thu, 24 Apr 2025 01:54:59 +0300 Subject: [PATCH 05/10] Fixes for GetShared and MapLoadHooks --- assets/Mods/shared/Types.lua | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/assets/Mods/shared/Types.lua b/assets/Mods/shared/Types.lua index f192cbf62..fb0452481 100644 --- a/assets/Mods/shared/Types.lua +++ b/assets/Mods/shared/Types.lua @@ -623,17 +623,14 @@ function UE4SS.GetVersion() end ModRef = {} --- Sets a variable that can be accessed by any mod. ---- The second parameter `Value` can only be one of the following types: `nil`, `string`, `number`, `bool`, `UObject` (+derivatives), `lightuserdata`. ---@param VariableName string ----@param Value any +---@param Value nil|string|number|bool|UObject function ModRef:SetSharedVariable(VariableName, Value) end --- Returns a variable that could've been set by another mod. ---- The return value can only be one of the following types: `nil`, `string`, `number`, `bool`, `UObject`(+derivatives), `lightuserdata`. ---@param VariableName string ----@param Value any ----@return any -function ModRef:GetSharedVariable(VariableName, Value) end +---@return nil|string|number|bool|UObject +function ModRef:GetSharedVariable(VariableName) end ---Returns the type of the shared variable (if it is valid) ---@return string @@ -1165,13 +1162,13 @@ function UEnum:RemoveFromNamesAt(Index, Count, AllowShrinking) end --- Registers a callback that will get called before UEngine::LoadMap is called. --- The callback params are: UEngine Engine, struct FWorldContext& WorldContext, FURL URL, class UPendingNetGame* PendingGame, FString& Error --- Params (except strings & bools & FOutputDevice) must be retrieved via 'Param:Get()' and set via 'Param:Set()'. ----@param Callback fun(Engine: RemoteUnrealParam, World: RemoteUnrealParam, FURL: RemoteUnrealParam, PendingGame: RemoteUnrealParam, Error: RemoteUnrealParam) +---@param Callback fun(Engine: RemoteUnrealParam, World: RemoteUnrealParam, FURL: FURL, PendingGame: RemoteUnrealParam, Error: FString) function RegisterLoadMapPreHook(Callback) end --- Registers a callback that will get called after UEngine::LoadMap is called. --- The callback params are: UEngine Enigne, struct FWorldContext& WorldContext, FURL URL, class UPendingNetGame* PendingGame, FString& Error --- Params (except strings & bools & FOutputDevice) must be retrieved via 'Param:Get()' and set via 'Param:Set()'. ----@param Callback fun(Engine: RemoteUnrealParam, World: RemoteUnrealParam, FURL: RemoteUnrealParam, PendingGame: RemoteUnrealParam, Error: RemoteUnrealParam) +---@param Callback fun(Engine: RemoteUnrealParam, World: RemoteUnrealParam, FURL: FURL, PendingGame: RemoteUnrealParam, Error: FString) function RegisterLoadMapPostHook(Callback) end --- Creates LogicMods/ directory inside app's Paks/ folder From a167c845d91bfc1ef857a93d3b7ec1375f724019 Mon Sep 17 00:00:00 2001 From: Kein Date: Thu, 22 May 2025 17:14:54 +0300 Subject: [PATCH 06/10] Added RegisterKeyBindAsync --- assets/Mods/shared/Types.lua | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/assets/Mods/shared/Types.lua b/assets/Mods/shared/Types.lua index fb0452481..9646990d0 100644 --- a/assets/Mods/shared/Types.lua +++ b/assets/Mods/shared/Types.lua @@ -340,6 +340,19 @@ function RegisterKeyBind(Key, Callback) end ---@param Callback fun() function RegisterKeyBind(Key, ModifierKeys, Callback) end +--- Registers a callback for a key-bind, asynchronously +--- Callbacks can only be triggered while the game or debug console is on focus +---@param Key Key +---@param Callback fun() +function RegisterKeyBindAsync(Key, Callback) end + +--- Registers a callback for a key-bind, asynchronously +--- Callbacks can only be triggered while the game or debug console is on focus +---@param Key Key +---@param ModifierKeys ModifierKey[] +---@param Callback fun() +function RegisterKeyBindAsync(Key, Modifiers, Callback) end + ---Checks if, at the time of the invocation, the supplied keys have been registered ---@param Key integer function IsKeyBindRegistered(Key) end From f8f3dfe75e635c7230448d2d7a24f81840a09204 Mon Sep 17 00:00:00 2001 From: Kein Date: Thu, 22 May 2025 17:17:39 +0300 Subject: [PATCH 07/10] Param type fix --- assets/Mods/shared/Types.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/assets/Mods/shared/Types.lua b/assets/Mods/shared/Types.lua index 9646990d0..de79cde24 100644 --- a/assets/Mods/shared/Types.lua +++ b/assets/Mods/shared/Types.lua @@ -1173,15 +1173,15 @@ function UEnum:RemoveFromNamesAt(Index, Count) end function UEnum:RemoveFromNamesAt(Index, Count, AllowShrinking) end --- Registers a callback that will get called before UEngine::LoadMap is called. ---- The callback params are: UEngine Engine, struct FWorldContext& WorldContext, FURL URL, class UPendingNetGame* PendingGame, FString& Error +--- The callback params are: UEngine Engine, struct FWorldContext& WorldContext, FURL URL, class UPendingNetGame* PendingGame, string Error --- Params (except strings & bools & FOutputDevice) must be retrieved via 'Param:Get()' and set via 'Param:Set()'. ----@param Callback fun(Engine: RemoteUnrealParam, World: RemoteUnrealParam, FURL: FURL, PendingGame: RemoteUnrealParam, Error: FString) +---@param Callback fun(Engine: RemoteUnrealParam, World: RemoteUnrealParam, FURL: FURL, PendingGame: RemoteUnrealParam, Error: string) function RegisterLoadMapPreHook(Callback) end --- Registers a callback that will get called after UEngine::LoadMap is called. ---- The callback params are: UEngine Enigne, struct FWorldContext& WorldContext, FURL URL, class UPendingNetGame* PendingGame, FString& Error +--- The callback params are: UEngine Enigne, struct FWorldContext& WorldContext, FURL URL, class UPendingNetGame* PendingGame, string Error --- Params (except strings & bools & FOutputDevice) must be retrieved via 'Param:Get()' and set via 'Param:Set()'. ----@param Callback fun(Engine: RemoteUnrealParam, World: RemoteUnrealParam, FURL: FURL, PendingGame: RemoteUnrealParam, Error: FString) +---@param Callback fun(Engine: RemoteUnrealParam, World: RemoteUnrealParam, FURL: FURL, PendingGame: RemoteUnrealParam, Error: string) function RegisterLoadMapPostHook(Callback) end --- Creates LogicMods/ directory inside app's Paks/ folder From 00972e824404b88aaa7af2a0a95cf5703e807443 Mon Sep 17 00:00:00 2001 From: Kein Date: Sun, 25 May 2025 13:31:56 +0300 Subject: [PATCH 08/10] boolean --- assets/Mods/shared/Types.lua | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/Mods/shared/Types.lua b/assets/Mods/shared/Types.lua index de79cde24..27386a48d 100644 --- a/assets/Mods/shared/Types.lua +++ b/assets/Mods/shared/Types.lua @@ -637,12 +637,12 @@ ModRef = {} --- Sets a variable that can be accessed by any mod. ---@param VariableName string ----@param Value nil|string|number|bool|UObject +---@param Value nil|string|number|boolean|UObject function ModRef:SetSharedVariable(VariableName, Value) end --- Returns a variable that could've been set by another mod. ---@param VariableName string ----@return nil|string|number|bool|UObject +---@return nil|string|number|boolean|UObject function ModRef:GetSharedVariable(VariableName) end ---Returns the type of the shared variable (if it is valid) From 5dacd74962b7a083117b2fa834c9f21c26058a79 Mon Sep 17 00:00:00 2001 From: Kein Date: Fri, 6 Jun 2025 00:41:19 +0300 Subject: [PATCH 09/10] Add FPackageName --- assets/Mods/shared/Types.lua | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/assets/Mods/shared/Types.lua b/assets/Mods/shared/Types.lua index 27386a48d..e7c5703f5 100644 --- a/assets/Mods/shared/Types.lua +++ b/assets/Mods/shared/Types.lua @@ -649,6 +649,20 @@ function ModRef:GetSharedVariable(VariableName) end ---@return string function ModRef:type() end +---Exposes some of the CoreUObject API functionality +---@class FPackageName +FPackageName = {} + +---Checks if the string is a ShortPackageName. A ShortPackageName is the leaf name after the last slash in a LongPackageName +---@param PossiblyLongName string +---@return boolean +function FPackageName:IsShortPackageName(PossiblyLongName) end + +---Returns true if the path starts with a valid root (i.e. /Game/, /Engine/, etc) and contains no illegal characters. +---@param PathName string +---@return boolean +function FPackageName:IsValidLongPackageName(PathName) end + ---Contains helper functions for retrieving which version of Unreal Engine that is being used. ---@class UnrealVersion UnrealVersion = {} From afc1f1bd8df68cb5baa0d4c63c5c0057a178361f Mon Sep 17 00:00:00 2001 From: Kein Date: Fri, 6 Jun 2025 02:02:20 +0300 Subject: [PATCH 10/10] add self-func as well --- assets/Mods/shared/Types.lua | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/assets/Mods/shared/Types.lua b/assets/Mods/shared/Types.lua index e7c5703f5..39cb91a62 100644 --- a/assets/Mods/shared/Types.lua +++ b/assets/Mods/shared/Types.lua @@ -653,11 +653,21 @@ function ModRef:type() end ---@class FPackageName FPackageName = {} +---Checks if the string is a ShortPackageName. A ShortPackageName is the leaf name after the last slash in a LongPackageName +---@param PossiblyLongName string +---@return boolean +function FPackageName.IsShortPackageName(PossiblyLongName) end + ---Checks if the string is a ShortPackageName. A ShortPackageName is the leaf name after the last slash in a LongPackageName ---@param PossiblyLongName string ---@return boolean function FPackageName:IsShortPackageName(PossiblyLongName) end +---Returns true if the path starts with a valid root (i.e. /Game/, /Engine/, etc) and contains no illegal characters. +---@param PathName string +---@return boolean +function FPackageName.IsValidLongPackageName(PathName) end + ---Returns true if the path starts with a valid root (i.e. /Game/, /Engine/, etc) and contains no illegal characters. ---@param PathName string ---@return boolean