diff --git a/AAL/Classes/AAL.uc b/AAL/Classes/AAL.uc index 6a26b1f..e7af82d 100644 --- a/AAL/Classes/AAL.uc +++ b/AAL/Classes/AAL.uc @@ -1,187 +1,187 @@ -class AAL extends Info - config(AAL); - -const LatestVersion = 2; - -const ProfileURL = "https://steamcommunity.com/profiles/"; - -const CfgAdminList = class'AdminList'; - -var private config int Version; -var private config E_LogLevel LogLevel; -var private config bool bAutoEnableCheats; - -var private OnlineSubsystem OS; -var private Array AdminUIDList; -var private Array AdminUIDListActive; - -public simulated function bool SafeDestroy() -{ - `Log_Trace(); - - return (bPendingDelete || bDeleteMe || Destroy()); -} - -public event PreBeginPlay() -{ - `Log_Trace(); - - if (WorldInfo.NetMode == NM_Client) - { - `Log_Fatal("Wrong NetMode:" @ WorldInfo.NetMode); - SafeDestroy(); - return; - } - - Super.PreBeginPlay(); - - PreInit(); -} - -public event PostBeginPlay() -{ - `Log_Trace(); - - if (bPendingDelete || bDeleteMe) return; - - Super.PostBeginPlay(); - - PostInit(); -} - -private function PreInit() -{ - `Log_Trace(); - - if (Version == `NO_CONFIG) - { - LogLevel = LL_Info; - SaveConfig(); - } - - CfgAdminList.static.InitConfig(Version, LatestVersion, LogLevel); - - switch (Version) - { - case `NO_CONFIG: - `Log_Info("Config created"); - - case 1: - bAutoEnableCheats = false; - - case MaxInt: - `Log_Info("Config updated to version" @ LatestVersion); - break; - - case LatestVersion: - `Log_Info("Config is up-to-date"); - break; - - default: - `Log_Warn("The config version is higher than the current version (are you using an old mutator?)"); - `Log_Warn("Config version is" @ Version @ "but current version is" @ LatestVersion); - `Log_Warn("The config version will be changed to" @ LatestVersion); - break; - } - - if (LatestVersion != Version) - { - Version = LatestVersion; - SaveConfig(); - } - - if (LogLevel == LL_WrongLevel) - { - LogLevel = LL_Info; - - `Log_Warn("Wrong 'LogLevel', return to default value"); - - SaveConfig(); - } - `Log_Base("LogLevel:" @ LogLevel); - - OS = class'GameEngine'.static.GetOnlineSubsystem(); - if (OS != None) - { - AdminUIDList = CfgAdminList.static.Load(OS, LogLevel); - } - else - { - `Log_Fatal("Can't get online subsystem!"); - SafeDestroy(); - } -} - -private function PostInit() -{ - `Log_Trace(); -} - -public function NotifyLogin(Controller C) -{ - local PlayerController PC; - local PlayerReplicationInfo PRI; - local String UniqueID; - local String SteamID; - - `Log_Trace(); - - if (C == None || C.PlayerReplicationInfo == None) return; - - PRI = C.PlayerReplicationInfo; - - if (AdminUIDList.Find('Uid', PRI.UniqueId.Uid) != INDEX_NONE) - { - PRI.bAdmin = true; - } - - if (PRI.bAdmin) - { - AdminUIDListActive.AddItem(PRI.UniqueId); - - UniqueID = OS.UniqueNetIdToString(PRI.UniqueId); - - PC = PlayerController(C); - - if (PC != None && bAutoEnableCheats) - { - PC.AddCheats(true); - } - - if (PC != None && !PC.bIsEosPlayer) - { - SteamID = OS.UniqueNetIdToInt64(PRI.UniqueId); - `Log_Info("Admin login:" @ PRI.PlayerName @ "(" $ UniqueID $ "," @ SteamID $ "," @ ProfileURL $ SteamID $ ")"); - } - else - { - `Log_Info("Admin login:" @ PRI.PlayerName @ "(" $ UniqueID $ ")"); - } - } -} - -public function NotifyLogout(Controller C) -{ - local PlayerReplicationInfo PRI; - local String UniqueID; - local String SteamID; - - `Log_Trace(); - - if (C == None || C.PlayerReplicationInfo == None) return; - - PRI = C.PlayerReplicationInfo; - - if (PRI.bAdmin || AdminUIDListActive.Find('Uid', PRI.UniqueId.Uid) != INDEX_NONE) - { - AdminUIDListActive.RemoveItem(PRI.UniqueId); - UniqueID = OS.UniqueNetIdToString(PRI.UniqueId); - SteamID = OS.UniqueNetIdToInt64(PRI.UniqueId); - `Log_Info("Admin logout:" @ PRI.PlayerName @ "(" $ UniqueID $ "," @ SteamID $ "," @ ProfileURL $ SteamID $ ")"); - } -} - -defaultproperties -{ - -} \ No newline at end of file +class AAL extends Info + config(AAL); + +const LatestVersion = 2; + +const ProfileURL = "https://steamcommunity.com/profiles/"; + +const CfgAdminList = class'AdminList'; + +var private config int Version; +var private config E_LogLevel LogLevel; +var private config bool bAutoEnableCheats; + +var private OnlineSubsystem OS; +var private Array AdminUIDList; +var private Array AdminUIDListActive; + +public simulated function bool SafeDestroy() +{ + `Log_Trace(); + + return (bPendingDelete || bDeleteMe || Destroy()); +} + +public event PreBeginPlay() +{ + `Log_Trace(); + + if (WorldInfo.NetMode == NM_Client) + { + `Log_Fatal("Wrong NetMode:" @ WorldInfo.NetMode); + SafeDestroy(); + return; + } + + Super.PreBeginPlay(); + + PreInit(); +} + +public event PostBeginPlay() +{ + `Log_Trace(); + + if (bPendingDelete || bDeleteMe) return; + + Super.PostBeginPlay(); + + PostInit(); +} + +private function PreInit() +{ + `Log_Trace(); + + if (Version == `NO_CONFIG) + { + LogLevel = LL_Info; + SaveConfig(); + } + + CfgAdminList.static.InitConfig(Version, LatestVersion, LogLevel); + + switch (Version) + { + case `NO_CONFIG: + `Log_Info("Config created"); + + case 1: + bAutoEnableCheats = false; + + case MaxInt: + `Log_Info("Config updated to version" @ LatestVersion); + break; + + case LatestVersion: + `Log_Info("Config is up-to-date"); + break; + + default: + `Log_Warn("The config version is higher than the current version (are you using an old mutator?)"); + `Log_Warn("Config version is" @ Version @ "but current version is" @ LatestVersion); + `Log_Warn("The config version will be changed to" @ LatestVersion); + break; + } + + if (LatestVersion != Version) + { + Version = LatestVersion; + SaveConfig(); + } + + if (LogLevel == LL_WrongLevel) + { + LogLevel = LL_Info; + + `Log_Warn("Wrong 'LogLevel', return to default value"); + + SaveConfig(); + } + `Log_Base("LogLevel:" @ LogLevel); + + OS = class'GameEngine'.static.GetOnlineSubsystem(); + if (OS != None) + { + AdminUIDList = CfgAdminList.static.Load(OS, LogLevel); + } + else + { + `Log_Fatal("Can't get online subsystem!"); + SafeDestroy(); + } +} + +private function PostInit() +{ + `Log_Trace(); +} + +public function NotifyLogin(Controller C) +{ + local PlayerController PC; + local PlayerReplicationInfo PRI; + local String UniqueID; + local String SteamID; + + `Log_Trace(); + + if (C == None || C.PlayerReplicationInfo == None) return; + + PRI = C.PlayerReplicationInfo; + + if (AdminUIDList.Find('Uid', PRI.UniqueId.Uid) != INDEX_NONE) + { + PRI.bAdmin = true; + } + + if (PRI.bAdmin) + { + AdminUIDListActive.AddItem(PRI.UniqueId); + + UniqueID = OS.UniqueNetIdToString(PRI.UniqueId); + + PC = PlayerController(C); + + if (PC != None && bAutoEnableCheats) + { + PC.AddCheats(true); + } + + if (PC != None && !PC.bIsEosPlayer) + { + SteamID = OS.UniqueNetIdToInt64(PRI.UniqueId); + `Log_Info("Admin login:" @ PRI.PlayerName @ "(" $ UniqueID $ "," @ SteamID $ "," @ ProfileURL $ SteamID $ ")"); + } + else + { + `Log_Info("Admin login:" @ PRI.PlayerName @ "(" $ UniqueID $ ")"); + } + } +} + +public function NotifyLogout(Controller C) +{ + local PlayerReplicationInfo PRI; + local String UniqueID; + local String SteamID; + + `Log_Trace(); + + if (C == None || C.PlayerReplicationInfo == None) return; + + PRI = C.PlayerReplicationInfo; + + if (PRI.bAdmin || AdminUIDListActive.Find('Uid', PRI.UniqueId.Uid) != INDEX_NONE) + { + AdminUIDListActive.RemoveItem(PRI.UniqueId); + UniqueID = OS.UniqueNetIdToString(PRI.UniqueId); + SteamID = OS.UniqueNetIdToInt64(PRI.UniqueId); + `Log_Info("Admin logout:" @ PRI.PlayerName @ "(" $ UniqueID $ "," @ SteamID $ "," @ ProfileURL $ SteamID $ ")"); + } +} + +defaultproperties +{ + +} diff --git a/AAL/Classes/AAL.upkg b/AAL/Classes/AAL.upkg index 7d148dd..ae6c83c 100644 --- a/AAL/Classes/AAL.upkg +++ b/AAL/Classes/AAL.upkg @@ -1,4 +1,4 @@ -[Flags] -AllowDownload=False -ClientOptional=False -ServerSideOnly=True +[Flags] +AllowDownload=False +ClientOptional=False +ServerSideOnly=True diff --git a/AAL/Classes/AALMut.uc b/AAL/Classes/AALMut.uc index feb79a6..a8e7867 100644 --- a/AAL/Classes/AALMut.uc +++ b/AAL/Classes/AALMut.uc @@ -1,60 +1,60 @@ -class AALMut extends KFMutator; - -var private AAL AAL; - -public simulated function bool SafeDestroy() -{ - return (bPendingDelete || bDeleteMe || Destroy()); -} - -public event PreBeginPlay() -{ - Super.PreBeginPlay(); - - if (WorldInfo.NetMode == NM_Client) return; - - foreach WorldInfo.DynamicActors(class'AAL', AAL) - { - break; - } - - if (AAL == None) - { - AAL = WorldInfo.Spawn(class'AAL'); - } - - if (AAL == None) - { - `Log_Base("FATAL: Can't Spawn 'AAL'"); - SafeDestroy(); - } -} - -public function AddMutator(Mutator Mut) -{ - if (Mut == Self) return; - - if (Mut.Class == Class) - Mut.Destroy(); - else - Super.AddMutator(Mut); -} - -public function NotifyLogin(Controller C) -{ - AAL.NotifyLogin(C); - - Super.NotifyLogin(C); -} - -public function NotifyLogout(Controller C) -{ - AAL.NotifyLogout(C); - - Super.NotifyLogout(C); -} - -defaultproperties -{ - -} \ No newline at end of file +class AALMut extends KFMutator; + +var private AAL AAL; + +public simulated function bool SafeDestroy() +{ + return (bPendingDelete || bDeleteMe || Destroy()); +} + +public event PreBeginPlay() +{ + Super.PreBeginPlay(); + + if (WorldInfo.NetMode == NM_Client) return; + + foreach WorldInfo.DynamicActors(class'AAL', AAL) + { + break; + } + + if (AAL == None) + { + AAL = WorldInfo.Spawn(class'AAL'); + } + + if (AAL == None) + { + `Log_Base("FATAL: Can't Spawn 'AAL'"); + SafeDestroy(); + } +} + +public function AddMutator(Mutator Mut) +{ + if (Mut == Self) return; + + if (Mut.Class == Class) + Mut.Destroy(); + else + Super.AddMutator(Mut); +} + +public function NotifyLogin(Controller C) +{ + AAL.NotifyLogin(C); + + Super.NotifyLogin(C); +} + +public function NotifyLogout(Controller C) +{ + AAL.NotifyLogout(C); + + Super.NotifyLogout(C); +} + +defaultproperties +{ + +} diff --git a/AAL/Classes/AdminList.uc b/AAL/Classes/AdminList.uc index efe7945..5d3d635 100644 --- a/AAL/Classes/AdminList.uc +++ b/AAL/Classes/AdminList.uc @@ -1,84 +1,84 @@ -class AdminList extends Object - config(AAL) - abstract; - -var private config Array AdminId; - -public static function InitConfig(int Version, int LatestVersion, E_LogLevel LogLevel) -{ - `Log_TraceStatic(); - - switch (Version) - { - case `NO_CONFIG: - ApplyDefault(LogLevel); - - default: break; - } - - if (LatestVersion != Version) - { - StaticSaveConfig(); - } -} - -public static function Array Load(OnlineSubsystem OS, E_LogLevel LogLevel) -{ - local Array UIDs; - local UniqueNetId UID; - local String ID; - - `Log_TraceStatic(); - - foreach default.AdminId(ID) - { - if (AnyToUID(OS, ID, UID, LogLevel)) - { - UIDs.AddItem(UID); - `Log_Debug("Loaded:" @ ID); - } - else - { - `Log_Warn("Can't load AdminId:" @ ID); - } - } - - if (default.AdminId.Length == UIDs.Length) - { - `Log_Info("Loaded" @ UIDs.Length @ "entries"); - } - else - { - `Log_Info("Loaded" @ UIDs.Length @ "of" @ default.AdminId.Length @ "entries"); - } - - return UIDs; -} - -private static function ApplyDefault(E_LogLevel LogLevel) -{ - `Log_TraceStatic(); - - default.AdminId.Length = 0; - default.AdminId.AddItem("76561190000000000"); - default.AdminId.AddItem("0x0000000000000000"); -} - -private static function bool IsUID(String ID, E_LogLevel LogLevel) -{ - `Log_TraceStatic(); - - return (Left(ID, 2) ~= "0x"); -} - -private static function bool AnyToUID(OnlineSubsystem OS, String ID, out UniqueNetId UID, E_LogLevel LogLevel) -{ - `Log_TraceStatic(); - - return IsUID(ID, LogLevel) ? OS.StringToUniqueNetId(ID, UID) : OS.Int64ToUniqueNetId(ID, UID); -} - -defaultproperties -{ - -} +class AdminList extends Object + config(AAL) + abstract; + +var private config Array AdminId; + +public static function InitConfig(int Version, int LatestVersion, E_LogLevel LogLevel) +{ + `Log_TraceStatic(); + + switch (Version) + { + case `NO_CONFIG: + ApplyDefault(LogLevel); + + default: break; + } + + if (LatestVersion != Version) + { + StaticSaveConfig(); + } +} + +public static function Array Load(OnlineSubsystem OS, E_LogLevel LogLevel) +{ + local Array UIDs; + local UniqueNetId UID; + local String ID; + + `Log_TraceStatic(); + + foreach default.AdminId(ID) + { + if (AnyToUID(OS, ID, UID, LogLevel)) + { + UIDs.AddItem(UID); + `Log_Debug("Loaded:" @ ID); + } + else + { + `Log_Warn("Can't load AdminId:" @ ID); + } + } + + if (default.AdminId.Length == UIDs.Length) + { + `Log_Info("Loaded" @ UIDs.Length @ "entries"); + } + else + { + `Log_Info("Loaded" @ UIDs.Length @ "of" @ default.AdminId.Length @ "entries"); + } + + return UIDs; +} + +private static function ApplyDefault(E_LogLevel LogLevel) +{ + `Log_TraceStatic(); + + default.AdminId.Length = 0; + default.AdminId.AddItem("76561190000000000"); + default.AdminId.AddItem("0x0000000000000000"); +} + +private static function bool IsUID(String ID, E_LogLevel LogLevel) +{ + `Log_TraceStatic(); + + return (Left(ID, 2) ~= "0x"); +} + +private static function bool AnyToUID(OnlineSubsystem OS, String ID, out UniqueNetId UID, E_LogLevel LogLevel) +{ + `Log_TraceStatic(); + + return IsUID(ID, LogLevel) ? OS.StringToUniqueNetId(ID, UID) : OS.Int64ToUniqueNetId(ID, UID); +} + +defaultproperties +{ + +} diff --git a/AAL/Classes/_Logger.uc b/AAL/Classes/_Logger.uc index 93fc28a..d9cfb52 100644 --- a/AAL/Classes/_Logger.uc +++ b/AAL/Classes/_Logger.uc @@ -1,20 +1,20 @@ -class _Logger extends Object - abstract; - -enum E_LogLevel -{ - LL_WrongLevel, - LL_None, - LL_Fatal, - LL_Error, - LL_Warning, - LL_Info, - LL_Debug, - LL_Trace, - LL_All -}; - -defaultproperties -{ - -} +class _Logger extends Object + abstract; + +enum E_LogLevel +{ + LL_WrongLevel, + LL_None, + LL_Fatal, + LL_Error, + LL_Warning, + LL_Info, + LL_Debug, + LL_Trace, + LL_All +}; + +defaultproperties +{ + +} diff --git a/AAL/Constants.uci b/AAL/Constants.uci index 1003f19..432fa68 100644 --- a/AAL/Constants.uci +++ b/AAL/Constants.uci @@ -1,2 +1,2 @@ -// Constants -`define NO_CONFIG 0 +// Constants +`define NO_CONFIG 0 diff --git a/AAL/Globals.uci b/AAL/Globals.uci index a48ac52..4dcd4fb 100644 --- a/AAL/Globals.uci +++ b/AAL/Globals.uci @@ -1,3 +1,3 @@ -// Imports -`include(Logger.uci) -`include(Constants.uci) +// Imports +`include(Logger.uci) +`include(Constants.uci) diff --git a/AAL/Logger.uci b/AAL/Logger.uci index 793f846..8fadbb5 100644 --- a/AAL/Logger.uci +++ b/AAL/Logger.uci @@ -1,15 +1,15 @@ -// Logger -`define Log_Tag 'AAL' - -`define LocationStatic "`{ClassName}::" $ GetFuncName() - -`define Log_Base(msg, cond) `log(`msg `if(`cond), `cond`{endif}, `Log_Tag) - -`define Log_Fatal(msg) `log("FATAL:" @ `msg, (LogLevel >= LL_Fatal), `Log_Tag) -`define Log_Error(msg) `log("ERROR:" @ `msg, (LogLevel >= LL_Error), `Log_Tag) -`define Log_Warn(msg) `log("WARN:" @ `msg, (LogLevel >= LL_Warning), `Log_Tag) -`define Log_Info(msg) `log("INFO:" @ `msg, (LogLevel >= LL_Info), `Log_Tag) -`define Log_Debug(msg) `log("DEBUG:" @ `msg, (LogLevel >= LL_Debug), `Log_Tag) - -`define Log_Trace(msg) `log("TRACE:" @ `Location `if(`msg) @ `msg`{endif}, (LogLevel >= LL_Trace), `Log_Tag) -`define Log_TraceStatic(msg) `log("TRACE:" @ `LocationStatic `if(`msg) @ `msg`{endif}, (LogLevel >= LL_Trace), `Log_Tag) +// Logger +`define Log_Tag 'AAL' + +`define LocationStatic "`{ClassName}::" $ GetFuncName() + +`define Log_Base(msg, cond) `log(`msg `if(`cond), `cond`{endif}, `Log_Tag) + +`define Log_Fatal(msg) `log("FATAL:" @ `msg, (LogLevel >= LL_Fatal), `Log_Tag) +`define Log_Error(msg) `log("ERROR:" @ `msg, (LogLevel >= LL_Error), `Log_Tag) +`define Log_Warn(msg) `log("WARN:" @ `msg, (LogLevel >= LL_Warning), `Log_Tag) +`define Log_Info(msg) `log("INFO:" @ `msg, (LogLevel >= LL_Info), `Log_Tag) +`define Log_Debug(msg) `log("DEBUG:" @ `msg, (LogLevel >= LL_Debug), `Log_Tag) + +`define Log_Trace(msg) `log("TRACE:" @ `Location `if(`msg) @ `msg`{endif}, (LogLevel >= LL_Trace), `Log_Tag) +`define Log_TraceStatic(msg) `log("TRACE:" @ `LocationStatic `if(`msg) @ `msg`{endif}, (LogLevel >= LL_Trace), `Log_Tag) diff --git a/README.md b/README.md index 051b4e8..fca9ea3 100644 --- a/README.md +++ b/README.md @@ -6,13 +6,13 @@ [![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/GenZmeY/KF2-AdminAutoLogin)](https://github.com/GenZmeY/KF2-AdminAutoLogin/tags) [![GitHub](https://img.shields.io/github/license/GenZmeY/KF2-AdminAutoLogin)](LICENSE) -# Description +## Description Small server-side mutator that allows specified players to automatically login as an admin. -# Usage & Setup +## Usage & Setup [See steam workshop page](https://steamcommunity.com/sharedfiles/filedetails/?id=2848836389) -# Build +## Build **Note:** If you want to build/test/brew/publish a mutator without git-bash and/or scripts, follow [these instructions](https://tripwireinteractive.atlassian.net/wiki/spaces/KF2SW/pages/26247172/KF2+Code+Modding+How-to) instead of what is described here. 1. Install [Killing Floor 2](https://store.steampowered.com/app/232090/Killing_Floor_2/), Killing Floor 2 - SDK and [git for windows](https://git-scm.com/download/win); 2. open git-bash and go to any folder where you want to store sources: @@ -26,9 +26,9 @@ Small server-side mutator that allows specified players to automatically login a 5. The compiled files will be here: `C:\Users\\Documents\My Games\KillingFloor2\KFGame\Unpublished\BrewedPC\Script\` -# Bug reports +## Bug reports If you find a bug, go to the [issue page](https://github.com/GenZmeY/KF2-AdminAutoLogin/issues) and check if there is a description of your bug. If not, create a new issue. Describe what the bug looks like and how reproduce it. -# License +## License [GNU GPLv3](LICENSE) diff --git a/builder.cfg b/builder.cfg index 0de802e..06bcfd2 100644 --- a/builder.cfg +++ b/builder.cfg @@ -7,7 +7,7 @@ StripSource="True" # Mutators to be compiled # Specify them with a space as a separator, -# Mutators will be compiled in the specified order +# Mutators will be compiled in the specified order PackageBuildOrder="AAL" @@ -16,7 +16,7 @@ PackageBuildOrder="AAL" # Packages you want to brew using @peelz's patched KFEditor. # Useful for cases where regular brew doesn't put *.upk inside the package. # Specify them with a space as a separator, -# The order doesn't matter +# The order doesn't matter PackagePeelzBrew="" @@ -24,7 +24,7 @@ PackagePeelzBrew="" # Mutators that will be uploaded to the workshop # Specify them with a space as a separator, -# The order doesn't matter +# The order doesn't matter PackageUpload="AAL"