From f99b8cdb39ffc745c5a4ba83eb2b7949d602e9bb Mon Sep 17 00:00:00 2001 From: GenZmeY Date: Sat, 13 May 2023 02:33:32 +0300 Subject: [PATCH] update style --- .editorconfig | 13 +- CTI/Classes/AddItems.uc | 158 ++--- CTI/Classes/CTI.uc | 652 +++++++++--------- CTI/Classes/CTI.upkg | 8 +- CTI/Classes/CTIMut.uc | 118 ++-- CTI/Classes/CTI_GFxMenu_Trader.uc | 16 +- CTI/Classes/CTI_GFxMoviePlayer_Manager.uc | 16 +- .../CTI_GFxMoviePlayer_Manager_Versus.uc | 16 +- CTI/Classes/CTI_GFxTraderContainer_Store.uc | 40 +- CTI/Classes/CTI_LocalMessage.uc | 144 ++-- CTI/Classes/CTI_RepInfo.uc | 596 ++++++++-------- CTI/Classes/CTI_WeapDef_AutoTurret.uc | 12 +- CTI/Classes/CTI_WeapDef_BladedPistol.uc | 12 +- CTI/Classes/CTI_WeapDef_Blunderbuss.uc | 12 +- CTI/Classes/CTI_WeapDef_ChainBat.uc | 12 +- CTI/Classes/CTI_WeapDef_ChiappaRhino.uc | 12 +- CTI/Classes/CTI_WeapDef_ChiappaRhinoDual.uc | 12 +- CTI/Classes/CTI_WeapDef_CompoundBow.uc | 12 +- CTI/Classes/CTI_WeapDef_Doshinegun.uc | 12 +- CTI/Classes/CTI_WeapDef_DualBladed.uc | 12 +- CTI/Classes/CTI_WeapDef_FAMAS.uc | 12 +- CTI/Classes/CTI_WeapDef_G18.uc | 12 +- CTI/Classes/CTI_WeapDef_G36C.uc | 12 +- CTI/Classes/CTI_WeapDef_GravityImploder.uc | 12 +- CTI/Classes/CTI_WeapDef_HVStormCannon.uc | 12 +- CTI/Classes/CTI_WeapDef_IonThruster.uc | 12 +- CTI/Classes/CTI_WeapDef_Mine_Reconstructor.uc | 12 +- CTI/Classes/CTI_WeapDef_Minigun.uc | 12 +- CTI/Classes/CTI_WeapDef_MosinNagant.uc | 12 +- CTI/Classes/CTI_WeapDef_ParasiteImplanter.uc | 12 +- CTI/Classes/CTI_WeapDef_Pistol_DualG18.uc | 12 +- CTI/Classes/CTI_WeapDef_Pistol_G18C.uc | 12 +- .../CTI_WeapDef_Rifle_FrostShotgunAxe.uc | 12 +- CTI/Classes/CTI_WeapDef_Scythe.uc | 12 +- CTI/Classes/CTI_WeapDef_ShrinkRayGun.uc | 12 +- CTI/Classes/CTI_WeapDef_ThermiteBore.uc | 12 +- CTI/Classes/CTI_WeapDef_ZedMKIII.uc | 12 +- CTI/Classes/CTI_WeapDef_Zweihander.uc | 12 +- CTI/Classes/OfficialWeapons.uc | 86 +-- CTI/Classes/RemoveItems.uc | 210 +++--- CTI/Classes/Trader.uc | 330 ++++----- CTI/Classes/Unlocker.uc | 398 +++++------ CTI/Classes/_Logger.uc | 40 +- CTI/Constants.uci | 4 +- CTI/Globals.uci | 6 +- CTI/Logger.uci | 30 +- Localization/INT/CTI.int | Bin 378 -> 364 bytes Localization/RUS/CTI.rus | Bin 374 -> 360 bytes PublicationContent/description.txt | 2 +- builder.cfg | 6 +- 50 files changed, 1607 insertions(+), 1606 deletions(-) diff --git a/.editorconfig b/.editorconfig index 6d0bef4..b60821d 100644 --- a/.editorconfig +++ b/.editorconfig @@ -10,13 +10,15 @@ charset = utf-8 trim_trailing_whitespace = true insert_final_newline = unset -# Source -[*.{sh,bash,dash,ksh}] +# Unreal Engine 3 / Source +[*.uc] indent_style = tab -insert_final_newline = true -[builder] -insert_final_newline = true +[*.{uci,upkg}] + +# Unreal Engine 3 / i18n +[*.{chn,cht,cze,dan,deu,dut,esl,esn,fra,frc,hun,int,ita,jpn,kor,pol,por,ptb,rus,tur,ukr}] +charset = utf-16le # Other [*.md] @@ -25,7 +27,6 @@ trim_trailing_whitespace = false [*.yml] indent_style = space indent_size = 2 -insert_final_newline = true [*.{txt,cfg,conf}] indent_style = tab diff --git a/CTI/Classes/AddItems.uc b/CTI/Classes/AddItems.uc index d82e6c6..c38b5bb 100644 --- a/CTI/Classes/AddItems.uc +++ b/CTI/Classes/AddItems.uc @@ -1,79 +1,79 @@ -class AddItems extends Object - dependson(CTI) - config(CTI); - -var private config Array Item; - -public static function InitConfig(int Version, int LatestVersion) -{ - switch (Version) - { - case `NO_CONFIG: - ApplyDefault(); - - default: break; - } - - if (LatestVersion != Version) - { - StaticSaveConfig(); - } -} - -private static function ApplyDefault() -{ - default.Item.Length = 0; - default.Item.AddItem("SomePackage.SomeWeapon"); -} - -public static function Array > Load(E_LogLevel LogLevel) -{ - local Array > ItemList; - local class ItemWeapDef; - local class ItemWeapon; - local String ItemRaw; - local int Line; - - `Log_Info("Load Items to add:"); - foreach default.Item(ItemRaw, Line) - { - ItemWeapDef = class(DynamicLoadObject(ItemRaw, class'Class')); - if (ItemWeapDef == None) - { - `Log_Warn("[" $ Line + 1 $ "]" @ "Can't load weapon definition:" @ ItemRaw); - continue; - } - - ItemWeapon = class(DynamicLoadObject(ItemWeapDef.default.WeaponClassPath, class'Class')); - if (ItemWeapon == None) - { - `Log_Warn("[" $ Line + 1 $ "]" @ "Can't load weapon:" @ ItemWeapDef.default.WeaponClassPath); - continue; - } - - if (ItemList.Find(ItemWeapDef) != INDEX_NONE) - { - `Log_Warn("[" $ Line + 1 $ "]" @ "Duplicate item:" @ ItemRaw @ "(skip)"); - continue; - } - - ItemList.AddItem(ItemWeapDef); - `Log_Debug("[" $ Line + 1 $ "]" @ "Loaded successfully:" @ ItemRaw); - } - - if (ItemList.Length == default.Item.Length) - { - `Log_Info("Items to add list loaded successfully (" $ default.Item.Length @ "entries)"); - } - else - { - `Log_Info("Items to add list: loaded" @ ItemList.Length @ "of" @ default.Item.Length @ "entries"); - } - - return ItemList; -} - -defaultproperties -{ - -} +class AddItems extends Object + dependson(CTI) + config(CTI); + +var private config Array Item; + +public static function InitConfig(int Version, int LatestVersion) +{ + switch (Version) + { + case `NO_CONFIG: + ApplyDefault(); + + default: break; + } + + if (LatestVersion != Version) + { + StaticSaveConfig(); + } +} + +private static function ApplyDefault() +{ + default.Item.Length = 0; + default.Item.AddItem("SomePackage.SomeWeapon"); +} + +public static function Array > Load(E_LogLevel LogLevel) +{ + local Array > ItemList; + local class ItemWeapDef; + local class ItemWeapon; + local String ItemRaw; + local int Line; + + `Log_Info("Load Items to add:"); + foreach default.Item(ItemRaw, Line) + { + ItemWeapDef = class(DynamicLoadObject(ItemRaw, class'Class')); + if (ItemWeapDef == None) + { + `Log_Warn("[" $ Line + 1 $ "]" @ "Can't load weapon definition:" @ ItemRaw); + continue; + } + + ItemWeapon = class(DynamicLoadObject(ItemWeapDef.default.WeaponClassPath, class'Class')); + if (ItemWeapon == None) + { + `Log_Warn("[" $ Line + 1 $ "]" @ "Can't load weapon:" @ ItemWeapDef.default.WeaponClassPath); + continue; + } + + if (ItemList.Find(ItemWeapDef) != INDEX_NONE) + { + `Log_Warn("[" $ Line + 1 $ "]" @ "Duplicate item:" @ ItemRaw @ "(skip)"); + continue; + } + + ItemList.AddItem(ItemWeapDef); + `Log_Debug("[" $ Line + 1 $ "]" @ "Loaded successfully:" @ ItemRaw); + } + + if (ItemList.Length == default.Item.Length) + { + `Log_Info("Items to add list loaded successfully (" $ default.Item.Length @ "entries)"); + } + else + { + `Log_Info("Items to add list: loaded" @ ItemList.Length @ "of" @ default.Item.Length @ "entries"); + } + + return ItemList; +} + +defaultproperties +{ + +} diff --git a/CTI/Classes/CTI.uc b/CTI/Classes/CTI.uc index a1f7a44..12de0cf 100644 --- a/CTI/Classes/CTI.uc +++ b/CTI/Classes/CTI.uc @@ -1,327 +1,327 @@ -class CTI extends Info - config(CTI); - -const LatestVersion = 3; - -const CfgRemoveItems = class'RemoveItems'; -const CfgAddItems = class'AddItems'; -const CfgOfficialWeapons = class'OfficialWeapons'; -const Trader = class'Trader'; -const Unlocker = class'Unlocker'; - -struct S_PreloadContent -{ - var class KFWD; - var class KFWC; - var KFWeapon KFW; - var KFW_Access KFWA; -}; - -var private config int Version; -var private config E_LogLevel LogLevel; -var private config String UnlockDLC; -var private config bool bPreloadContent; -var private config bool bOfficialWeaponsList; - -var private KFGameInfo KFGI; -var private KFGameReplicationInfo KFGRI; - -var private Array > RemoveItems; -var private Array > AddItems; - -var private Array RepInfos; - -var private bool ReadyToSync; - -var private Array PreloadContent; - -public simulated function bool SafeDestroy() -{ - `Log_Trace(); - - return (bPendingDelete || bDeleteMe || Destroy()); -} - -public event PreBeginPlay() -{ - `Log_Trace(); - - `Log_Debug("PreBeginPlay readyToSync" @ ReadyToSync); - - if (WorldInfo.NetMode == NM_Client) - { - `Log_Fatal("NetMode == NM_Client, Destroy..."); - 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; - bPreloadContent = true; - UnlockDLC = "False"; - SaveConfig(); - } - - CfgRemoveItems.static.InitConfig(Version, LatestVersion); - CfgAddItems.static.InitConfig(Version, LatestVersion); - - switch (Version) - { - case `NO_CONFIG: - `Log_Info("Config created"); - - case 1: - bOfficialWeaponsList = false; - - case 2: - - 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; - } - - CfgOfficialWeapons.static.Update(bOfficialWeaponsList); - - 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); - - if (!Unlocker.static.IsValidTypeUnlockDLC(UnlockDLC, LogLevel)) - { - `Log_Warn("Wrong 'UnlockDLC' (" $ UnlockDLC $ "), return to default value (False)"); - UnlockDLC = "False"; - SaveConfig(); - } - - RemoveItems = CfgRemoveItems.static.Load(LogLevel); - AddItems = CfgAddItems.static.Load(LogLevel); -} - -private function PostInit() -{ - local CTI_RepInfo RepInfo; - - `Log_Trace(); - - if (WorldInfo == None || WorldInfo.Game == None) - { - SetTimer(1.0f, false, nameof(PostInit)); - return; - } - - KFGI = KFGameInfo(WorldInfo.Game); - if (KFGI == None) - { - `Log_Fatal("Incompatible gamemode:" @ WorldInfo.Game); - SafeDestroy(); - return; - } - - if (KFGI.GameReplicationInfo == None) - { - SetTimer(1.0f, false, nameof(PostInit)); - return; - } - - KFGRI = KFGameReplicationInfo(KFGI.GameReplicationInfo); - if (KFGRI == None) - { - `Log_Fatal("Incompatible Replication info:" @ KFGI.GameReplicationInfo); - SafeDestroy(); - return; - } - - if (Unlocker.static.UnlockDLC(KFGI, KFGRI, UnlockDLC, RemoveItems, AddItems, LogLevel)) - { - `Log_Info("DLC unlocked"); - } - - if (bPreloadContent) - { - Preload(AddItems); - } - - Trader.static.ModifyTrader( - KFGRI, - RemoveItems, - AddItems, - CfgRemoveItems.default.bAll, - CfgRemoveItems.default.bHRG, - CfgRemoveItems.default.bDLC, - LogLevel); - - ReadyToSync = true; - - foreach RepInfos(RepInfo) - { - if (RepInfo.PendingSync) - { - RepInfo.ServerSync(); - } - } -} - -private function Preload(Array > Content) -{ - local Array > OfficialWeapons; - local S_PreloadContent SPC; - - `Log_Trace(); - - OfficialWeapons = Trader.static.GetTraderWeapons(); - - foreach Content(SPC.KFWD) - { - SPC.KFWC = class (DynamicLoadObject(SPC.KFWD.default.WeaponClassPath, class'Class')); - if (SPC.KFWC != None) - { - if (OfficialWeapons.Find(SPC.KFWC) != INDEX_NONE) - { - `Log_Debug("Skip preload:" @ SPC.KFWD.GetPackageName() $ "." $ SPC.KFWD); - continue; - } - - SPC.KFW = KFGI.Spawn(SPC.KFWC); - if (SPC.KFW == None) - { - `Log_Warn("Spawn failed:" @ SPC.KFWD.default.WeaponClassPath); - continue; - } - - SPC.KFWA = new (SPC.KFW) class'KFW_Access'; - if (SPC.KFWA == None) - { - `Log_Warn("Spawn failed:" @ SPC.KFWD.default.WeaponClassPath @ "KFW_Access"); - continue; - } - - PreloadContent.AddItem(SPC); - } - } - - foreach PreloadContent(SPC) - { - SPC.KFWA.KFW_StartLoadWeaponContent(); - } - - `Log_Info("Preloaded" @ PreloadContent.Length @ "weapon models"); -} - -public function NotifyLogin(Controller C) -{ - `Log_Trace(); - - if (!CreateRepInfo(C)) - { - `Log_Error("Can't create RepInfo for:" @ C); - } -} - -public function NotifyLogout(Controller C) -{ - `Log_Trace(); - - DestroyRepInfo(C); -} - -public function bool CreateRepInfo(Controller C) -{ - local CTI_RepInfo RepInfo; - - `Log_Trace(); - - if (C == None) return false; - - RepInfo = Spawn(class'CTI_RepInfo', C); - - if (RepInfo == None) return false; - - RepInfo.PrepareSync( - Self, - LogLevel, - RemoveItems, - AddItems, - CfgRemoveItems.default.bAll, - CfgRemoveItems.default.bHRG, - CfgRemoveItems.default.bDLC); - - RepInfos.AddItem(RepInfo); - - if (ReadyToSync) - { - RepInfo.ServerSync(); - } - else - { - RepInfo.PendingSync = true; - } - - return true; -} - -public function bool DestroyRepInfo(Controller C) -{ - local CTI_RepInfo RepInfo; - - `Log_Trace(); - - if (C == None) return false; - - foreach RepInfos(RepInfo) - { - if (RepInfo.Owner == C) - { - RepInfos.RemoveItem(RepInfo); - RepInfo.SafeDestroy(); - return true; - } - } - - return false; -} - -DefaultProperties -{ - ReadyToSync = false +class CTI extends Info + config(CTI); + +const LatestVersion = 3; + +const CfgRemoveItems = class'RemoveItems'; +const CfgAddItems = class'AddItems'; +const CfgOfficialWeapons = class'OfficialWeapons'; +const Trader = class'Trader'; +const Unlocker = class'Unlocker'; + +struct S_PreloadContent +{ + var class KFWD; + var class KFWC; + var KFWeapon KFW; + var KFW_Access KFWA; +}; + +var private config int Version; +var private config E_LogLevel LogLevel; +var private config String UnlockDLC; +var private config bool bPreloadContent; +var private config bool bOfficialWeaponsList; + +var private KFGameInfo KFGI; +var private KFGameReplicationInfo KFGRI; + +var private Array > RemoveItems; +var private Array > AddItems; + +var private Array RepInfos; + +var private bool ReadyToSync; + +var private Array PreloadContent; + +public simulated function bool SafeDestroy() +{ + `Log_Trace(); + + return (bPendingDelete || bDeleteMe || Destroy()); +} + +public event PreBeginPlay() +{ + `Log_Trace(); + + `Log_Debug("PreBeginPlay readyToSync" @ ReadyToSync); + + if (WorldInfo.NetMode == NM_Client) + { + `Log_Fatal("NetMode == NM_Client, Destroy..."); + 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; + bPreloadContent = true; + UnlockDLC = "False"; + SaveConfig(); + } + + CfgRemoveItems.static.InitConfig(Version, LatestVersion); + CfgAddItems.static.InitConfig(Version, LatestVersion); + + switch (Version) + { + case `NO_CONFIG: + `Log_Info("Config created"); + + case 1: + bOfficialWeaponsList = false; + + case 2: + + 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; + } + + CfgOfficialWeapons.static.Update(bOfficialWeaponsList); + + 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); + + if (!Unlocker.static.IsValidTypeUnlockDLC(UnlockDLC, LogLevel)) + { + `Log_Warn("Wrong 'UnlockDLC' (" $ UnlockDLC $ "), return to default value (False)"); + UnlockDLC = "False"; + SaveConfig(); + } + + RemoveItems = CfgRemoveItems.static.Load(LogLevel); + AddItems = CfgAddItems.static.Load(LogLevel); +} + +private function PostInit() +{ + local CTI_RepInfo RepInfo; + + `Log_Trace(); + + if (WorldInfo == None || WorldInfo.Game == None) + { + SetTimer(1.0f, false, nameof(PostInit)); + return; + } + + KFGI = KFGameInfo(WorldInfo.Game); + if (KFGI == None) + { + `Log_Fatal("Incompatible gamemode:" @ WorldInfo.Game); + SafeDestroy(); + return; + } + + if (KFGI.GameReplicationInfo == None) + { + SetTimer(1.0f, false, nameof(PostInit)); + return; + } + + KFGRI = KFGameReplicationInfo(KFGI.GameReplicationInfo); + if (KFGRI == None) + { + `Log_Fatal("Incompatible Replication info:" @ KFGI.GameReplicationInfo); + SafeDestroy(); + return; + } + + if (Unlocker.static.UnlockDLC(KFGI, KFGRI, UnlockDLC, RemoveItems, AddItems, LogLevel)) + { + `Log_Info("DLC unlocked"); + } + + if (bPreloadContent) + { + Preload(AddItems); + } + + Trader.static.ModifyTrader( + KFGRI, + RemoveItems, + AddItems, + CfgRemoveItems.default.bAll, + CfgRemoveItems.default.bHRG, + CfgRemoveItems.default.bDLC, + LogLevel); + + ReadyToSync = true; + + foreach RepInfos(RepInfo) + { + if (RepInfo.PendingSync) + { + RepInfo.ServerSync(); + } + } +} + +private function Preload(Array > Content) +{ + local Array > OfficialWeapons; + local S_PreloadContent SPC; + + `Log_Trace(); + + OfficialWeapons = Trader.static.GetTraderWeapons(); + + foreach Content(SPC.KFWD) + { + SPC.KFWC = class (DynamicLoadObject(SPC.KFWD.default.WeaponClassPath, class'Class')); + if (SPC.KFWC != None) + { + if (OfficialWeapons.Find(SPC.KFWC) != INDEX_NONE) + { + `Log_Debug("Skip preload:" @ SPC.KFWD.GetPackageName() $ "." $ SPC.KFWD); + continue; + } + + SPC.KFW = KFGI.Spawn(SPC.KFWC); + if (SPC.KFW == None) + { + `Log_Warn("Spawn failed:" @ SPC.KFWD.default.WeaponClassPath); + continue; + } + + SPC.KFWA = new (SPC.KFW) class'KFW_Access'; + if (SPC.KFWA == None) + { + `Log_Warn("Spawn failed:" @ SPC.KFWD.default.WeaponClassPath @ "KFW_Access"); + continue; + } + + PreloadContent.AddItem(SPC); + } + } + + foreach PreloadContent(SPC) + { + SPC.KFWA.KFW_StartLoadWeaponContent(); + } + + `Log_Info("Preloaded" @ PreloadContent.Length @ "weapon models"); +} + +public function NotifyLogin(Controller C) +{ + `Log_Trace(); + + if (!CreateRepInfo(C)) + { + `Log_Error("Can't create RepInfo for:" @ C); + } +} + +public function NotifyLogout(Controller C) +{ + `Log_Trace(); + + DestroyRepInfo(C); +} + +public function bool CreateRepInfo(Controller C) +{ + local CTI_RepInfo RepInfo; + + `Log_Trace(); + + if (C == None) return false; + + RepInfo = Spawn(class'CTI_RepInfo', C); + + if (RepInfo == None) return false; + + RepInfo.PrepareSync( + Self, + LogLevel, + RemoveItems, + AddItems, + CfgRemoveItems.default.bAll, + CfgRemoveItems.default.bHRG, + CfgRemoveItems.default.bDLC); + + RepInfos.AddItem(RepInfo); + + if (ReadyToSync) + { + RepInfo.ServerSync(); + } + else + { + RepInfo.PendingSync = true; + } + + return true; +} + +public function bool DestroyRepInfo(Controller C) +{ + local CTI_RepInfo RepInfo; + + `Log_Trace(); + + if (C == None) return false; + + foreach RepInfos(RepInfo) + { + if (RepInfo.Owner == C) + { + RepInfos.RemoveItem(RepInfo); + RepInfo.SafeDestroy(); + return true; + } + } + + return false; +} + +DefaultProperties +{ + ReadyToSync = false } \ No newline at end of file diff --git a/CTI/Classes/CTI.upkg b/CTI/Classes/CTI.upkg index 29cb156..09febdf 100644 --- a/CTI/Classes/CTI.upkg +++ b/CTI/Classes/CTI.upkg @@ -1,4 +1,4 @@ -[Flags] -AllowDownload=True -ClientOptional=False -ServerSideOnly=False +[Flags] +AllowDownload=True +ClientOptional=False +ServerSideOnly=False diff --git a/CTI/Classes/CTIMut.uc b/CTI/Classes/CTIMut.uc index c27c7dc..a626753 100644 --- a/CTI/Classes/CTIMut.uc +++ b/CTI/Classes/CTIMut.uc @@ -1,60 +1,60 @@ -class CTIMut extends KFMutator; - -var private CTI CTI; - -public simulated function bool SafeDestroy() -{ - return (bPendingDelete || bDeleteMe || Destroy()); -} - -public event PreBeginPlay() -{ - Super.PreBeginPlay(); - - if (WorldInfo.NetMode == NM_Client) return; - - foreach WorldInfo.DynamicActors(class'CTI', CTI) - { - break; - } - - if (CTI == None) - { - CTI = WorldInfo.Spawn(class'CTI'); - } - - if (CTI == None) - { - `Log_Base("FATAL: Can't Spawn 'CTI'"); - 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) -{ - CTI.NotifyLogin(C); - - Super.NotifyLogin(C); -} - -public function NotifyLogout(Controller C) -{ - CTI.NotifyLogout(C); - - Super.NotifyLogout(C); -} - -DefaultProperties -{ - +class CTIMut extends KFMutator; + +var private CTI CTI; + +public simulated function bool SafeDestroy() +{ + return (bPendingDelete || bDeleteMe || Destroy()); +} + +public event PreBeginPlay() +{ + Super.PreBeginPlay(); + + if (WorldInfo.NetMode == NM_Client) return; + + foreach WorldInfo.DynamicActors(class'CTI', CTI) + { + break; + } + + if (CTI == None) + { + CTI = WorldInfo.Spawn(class'CTI'); + } + + if (CTI == None) + { + `Log_Base("FATAL: Can't Spawn 'CTI'"); + 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) +{ + CTI.NotifyLogin(C); + + Super.NotifyLogin(C); +} + +public function NotifyLogout(Controller C) +{ + CTI.NotifyLogout(C); + + Super.NotifyLogout(C); +} + +DefaultProperties +{ + } \ No newline at end of file diff --git a/CTI/Classes/CTI_GFxMenu_Trader.uc b/CTI/Classes/CTI_GFxMenu_Trader.uc index 09faf43..0997ce9 100644 --- a/CTI/Classes/CTI_GFxMenu_Trader.uc +++ b/CTI/Classes/CTI_GFxMenu_Trader.uc @@ -1,8 +1,8 @@ -class CTI_GFxMenu_Trader extends KFGFxMenu_Trader - dependsOn(CTI_GFxTraderContainer_Store); - -defaultproperties -{ - SubWidgetBindings.Remove((WidgetName="shopContainer",WidgetClass=class'KFGFxTraderContainer_Store')) - SubWidgetBindings.Add((WidgetName="shopContainer",WidgetClass=class'CTI_GFxTraderContainer_Store')) -} +class CTI_GFxMenu_Trader extends KFGFxMenu_Trader + dependsOn(CTI_GFxTraderContainer_Store); + +defaultproperties +{ + SubWidgetBindings.Remove((WidgetName="shopContainer",WidgetClass=class'KFGFxTraderContainer_Store')) + SubWidgetBindings.Add((WidgetName="shopContainer",WidgetClass=class'CTI_GFxTraderContainer_Store')) +} diff --git a/CTI/Classes/CTI_GFxMoviePlayer_Manager.uc b/CTI/Classes/CTI_GFxMoviePlayer_Manager.uc index 78604f3..9ce5e85 100644 --- a/CTI/Classes/CTI_GFxMoviePlayer_Manager.uc +++ b/CTI/Classes/CTI_GFxMoviePlayer_Manager.uc @@ -1,8 +1,8 @@ -class CTI_GFxMoviePlayer_Manager extends KFGFxMoviePlayer_Manager - dependsOn(CTI_GFxMenu_Trader); - -defaultproperties -{ - WidgetBindings.Remove((WidgetName="traderMenu",WidgetClass=class'KFGFxMenu_Trader')) - WidgetBindings.Add((WidgetName="traderMenu",WidgetClass=class'CTI_GFxMenu_Trader')) -} +class CTI_GFxMoviePlayer_Manager extends KFGFxMoviePlayer_Manager + dependsOn(CTI_GFxMenu_Trader); + +defaultproperties +{ + WidgetBindings.Remove((WidgetName="traderMenu",WidgetClass=class'KFGFxMenu_Trader')) + WidgetBindings.Add((WidgetName="traderMenu",WidgetClass=class'CTI_GFxMenu_Trader')) +} diff --git a/CTI/Classes/CTI_GFxMoviePlayer_Manager_Versus.uc b/CTI/Classes/CTI_GFxMoviePlayer_Manager_Versus.uc index bb5a29f..ce45666 100644 --- a/CTI/Classes/CTI_GFxMoviePlayer_Manager_Versus.uc +++ b/CTI/Classes/CTI_GFxMoviePlayer_Manager_Versus.uc @@ -1,8 +1,8 @@ -class CTI_GFxMoviePlayer_Manager_Versus extends KFGFxMoviePlayer_Manager_Versus - dependsOn(CTI_GFxMenu_Trader); - -defaultproperties -{ - WidgetBindings.Remove((WidgetName="traderMenu",WidgetClass=class'KFGFxMenu_Trader')) - WidgetBindings.Add((WidgetName="traderMenu",WidgetClass=class'CTI_GFxMenu_Trader')) -} +class CTI_GFxMoviePlayer_Manager_Versus extends KFGFxMoviePlayer_Manager_Versus + dependsOn(CTI_GFxMenu_Trader); + +defaultproperties +{ + WidgetBindings.Remove((WidgetName="traderMenu",WidgetClass=class'KFGFxMenu_Trader')) + WidgetBindings.Add((WidgetName="traderMenu",WidgetClass=class'CTI_GFxMenu_Trader')) +} diff --git a/CTI/Classes/CTI_GFxTraderContainer_Store.uc b/CTI/Classes/CTI_GFxTraderContainer_Store.uc index 37ce4be..3bab72c 100644 --- a/CTI/Classes/CTI_GFxTraderContainer_Store.uc +++ b/CTI/Classes/CTI_GFxTraderContainer_Store.uc @@ -1,20 +1,20 @@ -class CTI_GFxTraderContainer_Store extends KFGFxTraderContainer_Store; - -function bool IsItemFiltered(STraderItem Item, optional bool bDebug) -{ - if (KFPC.GetPurchaseHelper().IsInOwnedItemList(Item.ClassName)) - return true; - if (KFPC.GetPurchaseHelper().IsInOwnedItemList(Item.DualClassName)) - return true; - if (!KFPC.GetPurchaseHelper().IsSellable(Item)) - return true; - if (Item.WeaponDef.default.PlatformRestriction != PR_All && class'KFUnlockManager'.static.IsPlatformRestricted(Item.WeaponDef.default.PlatformRestriction)) - return true; - - return false; -} - -defaultproperties -{ - -} +class CTI_GFxTraderContainer_Store extends KFGFxTraderContainer_Store; + +function bool IsItemFiltered(STraderItem Item, optional bool bDebug) +{ + if (KFPC.GetPurchaseHelper().IsInOwnedItemList(Item.ClassName)) + return true; + if (KFPC.GetPurchaseHelper().IsInOwnedItemList(Item.DualClassName)) + return true; + if (!KFPC.GetPurchaseHelper().IsSellable(Item)) + return true; + if (Item.WeaponDef.default.PlatformRestriction != PR_All && class'KFUnlockManager'.static.IsPlatformRestricted(Item.WeaponDef.default.PlatformRestriction)) + return true; + + return false; +} + +defaultproperties +{ + +} diff --git a/CTI/Classes/CTI_LocalMessage.uc b/CTI/Classes/CTI_LocalMessage.uc index 9167b67..2b9ad86 100644 --- a/CTI/Classes/CTI_LocalMessage.uc +++ b/CTI/Classes/CTI_LocalMessage.uc @@ -1,73 +1,73 @@ -class CTI_LocalMessage extends Object - abstract; - -var const String SyncItemsDefault; -var private localized String SyncItems; - -var const String SyncFinishedDefault; -var private localized String SyncFinished; - -var const String WaitingGRIDefault; -var private localized String WaitingGRI; - -var const String IncompatibleGRIDefault; -var private localized String IncompatibleGRI; - -var const String DisconnectDefault; -var private localized String Disconnect; - -var const String SecondsShortDefault; -var private localized String SecondsShort; - -enum E_CTI_LocalMessageType -{ - CTI_SyncItems, - CTI_SyncFinished, - CTI_WaitingGRI, - CTI_IncompatibleGRI, - CTI_Disconnect, - CTI_SecondsShort -}; - -public static function String GetLocalizedString( - E_LogLevel LogLevel, - E_CTI_LocalMessageType LMT, - optional String String1, - optional String String2, - optional String String3) -{ - `Log_TraceStatic(); - - switch (LMT) - { - case CTI_SyncItems: - return (default.SyncItems != "" ? default.SyncItems : default.SyncItemsDefault); - - case CTI_SyncFinished: - return (default.SyncFinished != "" ? default.SyncFinished : default.SyncFinishedDefault); - - case CTI_WaitingGRI: - return (default.WaitingGRI != "" ? default.WaitingGRI : default.WaitingGRIDefault); - - case CTI_IncompatibleGRI: - return (default.IncompatibleGRI != "" ? default.IncompatibleGRI : default.IncompatibleGRIDefault); - - case CTI_Disconnect: - return (default.Disconnect != "" ? default.Disconnect : default.DisconnectDefault); - - case CTI_SecondsShort: - return (default.SecondsShort != "" ? default.SecondsShort : default.SecondsShortDefault); - } - - return ""; -} - -defaultproperties -{ - SyncItemsDefault = "Sync items:" - SyncFinishedDefault = "Sync finished." - WaitingGRIDefault = "Waiting GRI..." - IncompatibleGRIDefault = "Incompatible GRI:" - DisconnectDefault = "Disconnect..." - SecondsShortDefault = "s" +class CTI_LocalMessage extends Object + abstract; + +var const String SyncItemsDefault; +var private localized String SyncItems; + +var const String SyncFinishedDefault; +var private localized String SyncFinished; + +var const String WaitingGRIDefault; +var private localized String WaitingGRI; + +var const String IncompatibleGRIDefault; +var private localized String IncompatibleGRI; + +var const String DisconnectDefault; +var private localized String Disconnect; + +var const String SecondsShortDefault; +var private localized String SecondsShort; + +enum E_CTI_LocalMessageType +{ + CTI_SyncItems, + CTI_SyncFinished, + CTI_WaitingGRI, + CTI_IncompatibleGRI, + CTI_Disconnect, + CTI_SecondsShort +}; + +public static function String GetLocalizedString( + E_LogLevel LogLevel, + E_CTI_LocalMessageType LMT, + optional String String1, + optional String String2, + optional String String3) +{ + `Log_TraceStatic(); + + switch (LMT) + { + case CTI_SyncItems: + return (default.SyncItems != "" ? default.SyncItems : default.SyncItemsDefault); + + case CTI_SyncFinished: + return (default.SyncFinished != "" ? default.SyncFinished : default.SyncFinishedDefault); + + case CTI_WaitingGRI: + return (default.WaitingGRI != "" ? default.WaitingGRI : default.WaitingGRIDefault); + + case CTI_IncompatibleGRI: + return (default.IncompatibleGRI != "" ? default.IncompatibleGRI : default.IncompatibleGRIDefault); + + case CTI_Disconnect: + return (default.Disconnect != "" ? default.Disconnect : default.DisconnectDefault); + + case CTI_SecondsShort: + return (default.SecondsShort != "" ? default.SecondsShort : default.SecondsShortDefault); + } + + return ""; +} + +defaultproperties +{ + SyncItemsDefault = "Sync items:" + SyncFinishedDefault = "Sync finished." + WaitingGRIDefault = "Waiting GRI..." + IncompatibleGRIDefault = "Incompatible GRI:" + DisconnectDefault = "Disconnect..." + SecondsShortDefault = "s" } \ No newline at end of file diff --git a/CTI/Classes/CTI_RepInfo.uc b/CTI/Classes/CTI_RepInfo.uc index 043da90..40fb5eb 100644 --- a/CTI/Classes/CTI_RepInfo.uc +++ b/CTI/Classes/CTI_RepInfo.uc @@ -1,298 +1,298 @@ -class CTI_RepInfo extends ReplicationInfo; - -const Trader = class'Trader'; -const LocalMessage = class'CTI_LocalMessage'; - -var public bool PendingSync; - -var private CTI CTI; -var private E_LogLevel LogLevel; -var private Array > RemoveItems; -var private Array > AddItems; -var private bool ReplaceMode; -var private bool RemoveHRG; -var private bool RemoveDLC; -var private bool PreloadContent; - -var private int Recieved; -var private int SyncSize; - -var private KFPlayerController KFPC; -var private KFGFxWidget_PartyInGame PartyInGameWidget; -var private GFxObject Notification; - -var private String NotificationHeaderText; -var private String NotificationLeftText; -var private String NotificationRightText; -var private int NotificationPercent; - -var private int WaitingGRI; - -replication -{ - if (bNetInitial && Role == ROLE_Authority) - LogLevel, ReplaceMode, RemoveHRG, RemoveDLC, SyncSize; -} - -public simulated function bool SafeDestroy() -{ - `Log_Trace(); - - return (bPendingDelete || bDeleteMe || Destroy()); -} - -public function PrepareSync( - CTI _CTI, - E_LogLevel _LogLevel, - Array > _RemoveItems, - Array > _AddItems, - bool _ReplaceMode, - bool _RemoveHRG, - bool _RemoveDLC) -{ - `Log_Trace(); - - CTI = _CTI; - LogLevel = _LogLevel; - RemoveItems = _RemoveItems; - AddItems = _AddItems; - ReplaceMode = _ReplaceMode; - RemoveHRG = _RemoveHRG; - RemoveDLC = _RemoveDLC; - SyncSize = RemoveItems.Length + AddItems.Length; -} - -private simulated function KFPlayerController GetKFPC() -{ - `Log_Trace(); - - if (KFPC != None) return KFPC; - - KFPC = KFPlayerController(Owner); - - if (KFPC == None && ROLE < ROLE_Authority) - { - KFPC = KFPlayerController(GetALocalPlayerController()); - } - - return KFPC; -} - -private simulated function SetPartyInGameWidget() -{ - `Log_Trace(); - - if (GetKFPC() == None) return; - - if (KFPC.MyGFxManager == None) return; - if (KFPC.MyGFxManager.PartyWidget == None) return; - - PartyInGameWidget = KFGFxWidget_PartyInGame(KFPC.MyGFxManager.PartyWidget); - Notification = PartyInGameWidget.Notification; -} - -private simulated function bool CheckPartyInGameWidget() -{ - `Log_Trace(); - - if (PartyInGameWidget == None) - { - SetPartyInGameWidget(); - } - - return (PartyInGameWidget != None); -} - -private simulated function HideReadyButton() -{ - `Log_Trace(); - - if (CheckPartyInGameWidget()) - { - PartyInGameWidget.SetReadyButtonVisibility(false); - } -} - -private simulated function ShowReadyButton() -{ - `Log_Trace(); - - if (CheckPartyInGameWidget()) - { - Notification.SetVisible(false); - PartyInGameWidget.SetReadyButtonVisibility(true); - PartyInGameWidget.UpdateReadyButtonText(); - PartyInGameWidget.UpdateReadyButtonVisibility(); - } -} - -private simulated function UpdateNotification(String Title, String Left, String Right, int Percent) -{ - `Log_Trace(); - - if (CheckPartyInGameWidget() && Notification != None) - { - Notification.SetString("itemName", Title); - Notification.SetFloat("percent", Percent); - Notification.SetInt("queue", 0); - Notification.SetString("downLoading", Left); - Notification.SetString("remaining", Right); - Notification.SetObject("notificationInfo", Notification); - Notification.SetVisible(true); - } -} - -private reliable client function ClientSync(class WeapDef, optional bool Remove = false) -{ - `Log_Trace(); - - if (WeapDef == None) - { - `Log_Fatal("WeapDef is:" @ WeapDef); - Cleanup(); - ConsoleCommand("Disconnect"); - SafeDestroy(); - return; - } - - if (!IsTimerActive(nameof(KeepNotification))) - { - SetTimer(0.1f, true, nameof(KeepNotification)); - } - - if (Remove) - { - RemoveItems.AddItem(WeapDef); - } - else - { - AddItems.AddItem(WeapDef); - } - - Recieved = RemoveItems.Length + AddItems.Length; - - NotificationHeaderText = (Remove ? "-" : "+") @ WeapDef.static.GetItemName(); - NotificationLeftText = LocalMessage.static.GetLocalizedString(LogLevel, CTI_SyncItems); - NotificationRightText = Recieved @ "/" @ SyncSize; - if (SyncSize != 0) - { - NotificationPercent = (float(Recieved) / float(SyncSize)) * 100; - } - - `Log_Debug("ClientSync:" @ (Remove ? "-" : "+") @ String(WeapDef) @ NotificationRightText); - - ServerSync(); -} - -private simulated function KeepNotification() -{ - HideReadyButton(); - UpdateNotification( - NotificationHeaderText, - NotificationLeftText, - NotificationRightText, - NotificationPercent); -} - -private simulated reliable client function ClientSyncFinished() -{ - local KFGameReplicationInfo KFGRI; - - `Log_Trace(); - - NotificationLeftText = ""; - NotificationRightText = ""; - NotificationPercent = 0; - - if (WorldInfo.GRI == None) - { - `Log_Debug("ClientSyncFinished: Waiting GRI"); - NotificationHeaderText = LocalMessage.static.GetLocalizedString(LogLevel, CTI_WaitingGRI); - NotificationLeftText = String(++WaitingGRI) $ LocalMessage.static.GetLocalizedString(LogLevel, CTI_SecondsShort); - NotificationRightText = ""; - SetTimer(1.0f, false, nameof(ClientSyncFinished)); - return; - } - - KFGRI = KFGameReplicationInfo(WorldInfo.GRI); - if (KFGRI == None) - { - `Log_Fatal("Incompatible Replication info:" @ String(WorldInfo.GRI)); - ClearTimer(nameof(KeepNotification)); - UpdateNotification( - LocalMessage.static.GetLocalizedString(LogLevel, CTI_IncompatibleGRI) @ String(WorldInfo.GRI), - LocalMessage.static.GetLocalizedString(LogLevel, CTI_Disconnect), "", 0); - Cleanup(); - ConsoleCommand("Disconnect"); - SafeDestroy(); - return; - } - - NotificationHeaderText = LocalMessage.static.GetLocalizedString(LogLevel, CTI_SyncFinished); - NotificationLeftText = ""; - NotificationRightText = ""; - NotificationPercent = 0; - - Trader.static.ModifyTrader(KFGRI, RemoveItems, AddItems, ReplaceMode, RemoveHRG, RemoveDLC, LogLevel); - `Log_Debug("ClientSyncFinished: Trader.static.ModifyTrader"); - - ClearTimer(nameof(KeepNotification)); - ShowReadyButton(); - - Cleanup(); - - SafeDestroy(); -} - -private reliable server function Cleanup() -{ - `Log_Trace(); - - `Log_Debug("Cleanup"); - if (!CTI.DestroyRepInfo(Controller(Owner))) - { - `Log_Debug("Cleanup (forced)"); - SafeDestroy(); - } -} - -public reliable server function ServerSync() -{ - `Log_Trace(); - - PendingSync = false; - - if (bPendingDelete || bDeleteMe) return; - - if (SyncSize <= Recieved || WorldInfo.NetMode == NM_StandAlone) - { - `Log_Debug("ServerSync: Finished"); - ClientSyncFinished(); - } - else - { - if (Recieved < RemoveItems.Length) - { - `Log_Debug("ServerSync[-]:" @ (Recieved + 1) @ "/" @ SyncSize @ RemoveItems[Recieved]); - ClientSync(RemoveItems[Recieved++], true); - } - else - { - `Log_Debug("ServerSync[+]:" @ (Recieved + 1) @ "/" @ SyncSize @ AddItems[Recieved - RemoveItems.Length]); - ClientSync(AddItems[Recieved++ - RemoveItems.Length], false); - } - } -} - -defaultproperties -{ - bAlwaysRelevant = false - bOnlyRelevantToOwner = true - bSkipActorPropertyReplication = false - - PendingSync = false - Recieved = 0 - - NotificationPercent = 0 - WaitingGRI = 0 -} +class CTI_RepInfo extends ReplicationInfo; + +const Trader = class'Trader'; +const LocalMessage = class'CTI_LocalMessage'; + +var public bool PendingSync; + +var private CTI CTI; +var private E_LogLevel LogLevel; +var private Array > RemoveItems; +var private Array > AddItems; +var private bool ReplaceMode; +var private bool RemoveHRG; +var private bool RemoveDLC; +var private bool PreloadContent; + +var private int Recieved; +var private int SyncSize; + +var private KFPlayerController KFPC; +var private KFGFxWidget_PartyInGame PartyInGameWidget; +var private GFxObject Notification; + +var private String NotificationHeaderText; +var private String NotificationLeftText; +var private String NotificationRightText; +var private int NotificationPercent; + +var private int WaitingGRI; + +replication +{ + if (bNetInitial && Role == ROLE_Authority) + LogLevel, ReplaceMode, RemoveHRG, RemoveDLC, SyncSize; +} + +public simulated function bool SafeDestroy() +{ + `Log_Trace(); + + return (bPendingDelete || bDeleteMe || Destroy()); +} + +public function PrepareSync( + CTI _CTI, + E_LogLevel _LogLevel, + Array > _RemoveItems, + Array > _AddItems, + bool _ReplaceMode, + bool _RemoveHRG, + bool _RemoveDLC) +{ + `Log_Trace(); + + CTI = _CTI; + LogLevel = _LogLevel; + RemoveItems = _RemoveItems; + AddItems = _AddItems; + ReplaceMode = _ReplaceMode; + RemoveHRG = _RemoveHRG; + RemoveDLC = _RemoveDLC; + SyncSize = RemoveItems.Length + AddItems.Length; +} + +private simulated function KFPlayerController GetKFPC() +{ + `Log_Trace(); + + if (KFPC != None) return KFPC; + + KFPC = KFPlayerController(Owner); + + if (KFPC == None && ROLE < ROLE_Authority) + { + KFPC = KFPlayerController(GetALocalPlayerController()); + } + + return KFPC; +} + +private simulated function SetPartyInGameWidget() +{ + `Log_Trace(); + + if (GetKFPC() == None) return; + + if (KFPC.MyGFxManager == None) return; + if (KFPC.MyGFxManager.PartyWidget == None) return; + + PartyInGameWidget = KFGFxWidget_PartyInGame(KFPC.MyGFxManager.PartyWidget); + Notification = PartyInGameWidget.Notification; +} + +private simulated function bool CheckPartyInGameWidget() +{ + `Log_Trace(); + + if (PartyInGameWidget == None) + { + SetPartyInGameWidget(); + } + + return (PartyInGameWidget != None); +} + +private simulated function HideReadyButton() +{ + `Log_Trace(); + + if (CheckPartyInGameWidget()) + { + PartyInGameWidget.SetReadyButtonVisibility(false); + } +} + +private simulated function ShowReadyButton() +{ + `Log_Trace(); + + if (CheckPartyInGameWidget()) + { + Notification.SetVisible(false); + PartyInGameWidget.SetReadyButtonVisibility(true); + PartyInGameWidget.UpdateReadyButtonText(); + PartyInGameWidget.UpdateReadyButtonVisibility(); + } +} + +private simulated function UpdateNotification(String Title, String Left, String Right, int Percent) +{ + `Log_Trace(); + + if (CheckPartyInGameWidget() && Notification != None) + { + Notification.SetString("itemName", Title); + Notification.SetFloat("percent", Percent); + Notification.SetInt("queue", 0); + Notification.SetString("downLoading", Left); + Notification.SetString("remaining", Right); + Notification.SetObject("notificationInfo", Notification); + Notification.SetVisible(true); + } +} + +private reliable client function ClientSync(class WeapDef, optional bool Remove = false) +{ + `Log_Trace(); + + if (WeapDef == None) + { + `Log_Fatal("WeapDef is:" @ WeapDef); + Cleanup(); + ConsoleCommand("Disconnect"); + SafeDestroy(); + return; + } + + if (!IsTimerActive(nameof(KeepNotification))) + { + SetTimer(0.1f, true, nameof(KeepNotification)); + } + + if (Remove) + { + RemoveItems.AddItem(WeapDef); + } + else + { + AddItems.AddItem(WeapDef); + } + + Recieved = RemoveItems.Length + AddItems.Length; + + NotificationHeaderText = (Remove ? "-" : "+") @ WeapDef.static.GetItemName(); + NotificationLeftText = LocalMessage.static.GetLocalizedString(LogLevel, CTI_SyncItems); + NotificationRightText = Recieved @ "/" @ SyncSize; + if (SyncSize != 0) + { + NotificationPercent = (float(Recieved) / float(SyncSize)) * 100; + } + + `Log_Debug("ClientSync:" @ (Remove ? "-" : "+") @ String(WeapDef) @ NotificationRightText); + + ServerSync(); +} + +private simulated function KeepNotification() +{ + HideReadyButton(); + UpdateNotification( + NotificationHeaderText, + NotificationLeftText, + NotificationRightText, + NotificationPercent); +} + +private simulated reliable client function ClientSyncFinished() +{ + local KFGameReplicationInfo KFGRI; + + `Log_Trace(); + + NotificationLeftText = ""; + NotificationRightText = ""; + NotificationPercent = 0; + + if (WorldInfo.GRI == None) + { + `Log_Debug("ClientSyncFinished: Waiting GRI"); + NotificationHeaderText = LocalMessage.static.GetLocalizedString(LogLevel, CTI_WaitingGRI); + NotificationLeftText = String(++WaitingGRI) $ LocalMessage.static.GetLocalizedString(LogLevel, CTI_SecondsShort); + NotificationRightText = ""; + SetTimer(1.0f, false, nameof(ClientSyncFinished)); + return; + } + + KFGRI = KFGameReplicationInfo(WorldInfo.GRI); + if (KFGRI == None) + { + `Log_Fatal("Incompatible Replication info:" @ String(WorldInfo.GRI)); + ClearTimer(nameof(KeepNotification)); + UpdateNotification( + LocalMessage.static.GetLocalizedString(LogLevel, CTI_IncompatibleGRI) @ String(WorldInfo.GRI), + LocalMessage.static.GetLocalizedString(LogLevel, CTI_Disconnect), "", 0); + Cleanup(); + ConsoleCommand("Disconnect"); + SafeDestroy(); + return; + } + + NotificationHeaderText = LocalMessage.static.GetLocalizedString(LogLevel, CTI_SyncFinished); + NotificationLeftText = ""; + NotificationRightText = ""; + NotificationPercent = 0; + + Trader.static.ModifyTrader(KFGRI, RemoveItems, AddItems, ReplaceMode, RemoveHRG, RemoveDLC, LogLevel); + `Log_Debug("ClientSyncFinished: Trader.static.ModifyTrader"); + + ClearTimer(nameof(KeepNotification)); + ShowReadyButton(); + + Cleanup(); + + SafeDestroy(); +} + +private reliable server function Cleanup() +{ + `Log_Trace(); + + `Log_Debug("Cleanup"); + if (!CTI.DestroyRepInfo(Controller(Owner))) + { + `Log_Debug("Cleanup (forced)"); + SafeDestroy(); + } +} + +public reliable server function ServerSync() +{ + `Log_Trace(); + + PendingSync = false; + + if (bPendingDelete || bDeleteMe) return; + + if (SyncSize <= Recieved || WorldInfo.NetMode == NM_StandAlone) + { + `Log_Debug("ServerSync: Finished"); + ClientSyncFinished(); + } + else + { + if (Recieved < RemoveItems.Length) + { + `Log_Debug("ServerSync[-]:" @ (Recieved + 1) @ "/" @ SyncSize @ RemoveItems[Recieved]); + ClientSync(RemoveItems[Recieved++], true); + } + else + { + `Log_Debug("ServerSync[+]:" @ (Recieved + 1) @ "/" @ SyncSize @ AddItems[Recieved - RemoveItems.Length]); + ClientSync(AddItems[Recieved++ - RemoveItems.Length], false); + } + } +} + +defaultproperties +{ + bAlwaysRelevant = false + bOnlyRelevantToOwner = true + bSkipActorPropertyReplication = false + + PendingSync = false + Recieved = 0 + + NotificationPercent = 0 + WaitingGRI = 0 +} diff --git a/CTI/Classes/CTI_WeapDef_AutoTurret.uc b/CTI/Classes/CTI_WeapDef_AutoTurret.uc index 1a8e7da..8eddc73 100644 --- a/CTI/Classes/CTI_WeapDef_AutoTurret.uc +++ b/CTI/Classes/CTI_WeapDef_AutoTurret.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_AutoTurret extends KFWeapDef_AutoTurret - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_AutoTurret extends KFWeapDef_AutoTurret + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_BladedPistol.uc b/CTI/Classes/CTI_WeapDef_BladedPistol.uc index 79987a5..57dcf2d 100644 --- a/CTI/Classes/CTI_WeapDef_BladedPistol.uc +++ b/CTI/Classes/CTI_WeapDef_BladedPistol.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_BladedPistol extends KFWeapDef_BladedPistol - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_BladedPistol extends KFWeapDef_BladedPistol + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_Blunderbuss.uc b/CTI/Classes/CTI_WeapDef_Blunderbuss.uc index b0a9c3e..1d57363 100644 --- a/CTI/Classes/CTI_WeapDef_Blunderbuss.uc +++ b/CTI/Classes/CTI_WeapDef_Blunderbuss.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_Blunderbuss extends KFWeapDef_Blunderbuss - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_Blunderbuss extends KFWeapDef_Blunderbuss + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_ChainBat.uc b/CTI/Classes/CTI_WeapDef_ChainBat.uc index 6cd0bcf..2360d74 100644 --- a/CTI/Classes/CTI_WeapDef_ChainBat.uc +++ b/CTI/Classes/CTI_WeapDef_ChainBat.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_ChainBat extends KFWeapDef_ChainBat - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_ChainBat extends KFWeapDef_ChainBat + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_ChiappaRhino.uc b/CTI/Classes/CTI_WeapDef_ChiappaRhino.uc index 610e4b2..fca0104 100644 --- a/CTI/Classes/CTI_WeapDef_ChiappaRhino.uc +++ b/CTI/Classes/CTI_WeapDef_ChiappaRhino.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_ChiappaRhino extends KFWeapDef_ChiappaRhino - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_ChiappaRhino extends KFWeapDef_ChiappaRhino + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_ChiappaRhinoDual.uc b/CTI/Classes/CTI_WeapDef_ChiappaRhinoDual.uc index a6a5e1f..5ef4ec1 100644 --- a/CTI/Classes/CTI_WeapDef_ChiappaRhinoDual.uc +++ b/CTI/Classes/CTI_WeapDef_ChiappaRhinoDual.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_ChiappaRhinoDual extends KFWeapDef_ChiappaRhinoDual - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_ChiappaRhinoDual extends KFWeapDef_ChiappaRhinoDual + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_CompoundBow.uc b/CTI/Classes/CTI_WeapDef_CompoundBow.uc index 2b0e548..973725b 100644 --- a/CTI/Classes/CTI_WeapDef_CompoundBow.uc +++ b/CTI/Classes/CTI_WeapDef_CompoundBow.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_CompoundBow extends KFWeapDef_CompoundBow - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_CompoundBow extends KFWeapDef_CompoundBow + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_Doshinegun.uc b/CTI/Classes/CTI_WeapDef_Doshinegun.uc index 1cbfaa9..9e5442e 100644 --- a/CTI/Classes/CTI_WeapDef_Doshinegun.uc +++ b/CTI/Classes/CTI_WeapDef_Doshinegun.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_Doshinegun extends KFWeapDef_Doshinegun - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_Doshinegun extends KFWeapDef_Doshinegun + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_DualBladed.uc b/CTI/Classes/CTI_WeapDef_DualBladed.uc index 46e0816..78088fa 100644 --- a/CTI/Classes/CTI_WeapDef_DualBladed.uc +++ b/CTI/Classes/CTI_WeapDef_DualBladed.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_DualBladed extends KFWeapDef_DualBladed - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_DualBladed extends KFWeapDef_DualBladed + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_FAMAS.uc b/CTI/Classes/CTI_WeapDef_FAMAS.uc index d313dde..a07388d 100644 --- a/CTI/Classes/CTI_WeapDef_FAMAS.uc +++ b/CTI/Classes/CTI_WeapDef_FAMAS.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_FAMAS extends KFWeapDef_FAMAS - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_FAMAS extends KFWeapDef_FAMAS + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_G18.uc b/CTI/Classes/CTI_WeapDef_G18.uc index c660fba..5e128c0 100644 --- a/CTI/Classes/CTI_WeapDef_G18.uc +++ b/CTI/Classes/CTI_WeapDef_G18.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_G18 extends KFWeapDef_G18 - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_G18 extends KFWeapDef_G18 + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_G36C.uc b/CTI/Classes/CTI_WeapDef_G36C.uc index 04a1e6e..a2c66d3 100644 --- a/CTI/Classes/CTI_WeapDef_G36C.uc +++ b/CTI/Classes/CTI_WeapDef_G36C.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_G36C extends KFWeapDef_G36C - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_G36C extends KFWeapDef_G36C + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_GravityImploder.uc b/CTI/Classes/CTI_WeapDef_GravityImploder.uc index 4edfdb9..7514cd5 100644 --- a/CTI/Classes/CTI_WeapDef_GravityImploder.uc +++ b/CTI/Classes/CTI_WeapDef_GravityImploder.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_GravityImploder extends KFWeapDef_GravityImploder - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_GravityImploder extends KFWeapDef_GravityImploder + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_HVStormCannon.uc b/CTI/Classes/CTI_WeapDef_HVStormCannon.uc index aa6f4f7..9d1bde2 100644 --- a/CTI/Classes/CTI_WeapDef_HVStormCannon.uc +++ b/CTI/Classes/CTI_WeapDef_HVStormCannon.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_HVStormCannon extends KFWeapDef_HVStormCannon - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_HVStormCannon extends KFWeapDef_HVStormCannon + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_IonThruster.uc b/CTI/Classes/CTI_WeapDef_IonThruster.uc index 176003e..70814a9 100644 --- a/CTI/Classes/CTI_WeapDef_IonThruster.uc +++ b/CTI/Classes/CTI_WeapDef_IonThruster.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_IonThruster extends KFWeapDef_IonThruster - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_IonThruster extends KFWeapDef_IonThruster + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_Mine_Reconstructor.uc b/CTI/Classes/CTI_WeapDef_Mine_Reconstructor.uc index 901878f..8890438 100644 --- a/CTI/Classes/CTI_WeapDef_Mine_Reconstructor.uc +++ b/CTI/Classes/CTI_WeapDef_Mine_Reconstructor.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_Mine_Reconstructor extends KFWeapDef_Mine_Reconstructor - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_Mine_Reconstructor extends KFWeapDef_Mine_Reconstructor + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_Minigun.uc b/CTI/Classes/CTI_WeapDef_Minigun.uc index 0878682..33d3cb9 100644 --- a/CTI/Classes/CTI_WeapDef_Minigun.uc +++ b/CTI/Classes/CTI_WeapDef_Minigun.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_Minigun extends KFWeapDef_Minigun - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_Minigun extends KFWeapDef_Minigun + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_MosinNagant.uc b/CTI/Classes/CTI_WeapDef_MosinNagant.uc index 6b0323d..361d14a 100644 --- a/CTI/Classes/CTI_WeapDef_MosinNagant.uc +++ b/CTI/Classes/CTI_WeapDef_MosinNagant.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_MosinNagant extends KFWeapDef_MosinNagant - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_MosinNagant extends KFWeapDef_MosinNagant + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_ParasiteImplanter.uc b/CTI/Classes/CTI_WeapDef_ParasiteImplanter.uc index 2156e61..7a3fa19 100644 --- a/CTI/Classes/CTI_WeapDef_ParasiteImplanter.uc +++ b/CTI/Classes/CTI_WeapDef_ParasiteImplanter.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_ParasiteImplanter extends KFWeapDef_ParasiteImplanter - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_ParasiteImplanter extends KFWeapDef_ParasiteImplanter + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_Pistol_DualG18.uc b/CTI/Classes/CTI_WeapDef_Pistol_DualG18.uc index af84f73..42c9f5f 100644 --- a/CTI/Classes/CTI_WeapDef_Pistol_DualG18.uc +++ b/CTI/Classes/CTI_WeapDef_Pistol_DualG18.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_Pistol_DualG18 extends KFWeapDef_Pistol_DualG18 - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_Pistol_DualG18 extends KFWeapDef_Pistol_DualG18 + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_Pistol_G18C.uc b/CTI/Classes/CTI_WeapDef_Pistol_G18C.uc index 396d357..16ca275 100644 --- a/CTI/Classes/CTI_WeapDef_Pistol_G18C.uc +++ b/CTI/Classes/CTI_WeapDef_Pistol_G18C.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_Pistol_G18C extends KFWeapDef_Pistol_G18C - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_Pistol_G18C extends KFWeapDef_Pistol_G18C + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_Rifle_FrostShotgunAxe.uc b/CTI/Classes/CTI_WeapDef_Rifle_FrostShotgunAxe.uc index ea6248e..5196d7f 100644 --- a/CTI/Classes/CTI_WeapDef_Rifle_FrostShotgunAxe.uc +++ b/CTI/Classes/CTI_WeapDef_Rifle_FrostShotgunAxe.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_Rifle_FrostShotgunAxe extends KFWeapDef_Rifle_FrostShotgunAxe - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_Rifle_FrostShotgunAxe extends KFWeapDef_Rifle_FrostShotgunAxe + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_Scythe.uc b/CTI/Classes/CTI_WeapDef_Scythe.uc index f9bc8e9..9959af6 100644 --- a/CTI/Classes/CTI_WeapDef_Scythe.uc +++ b/CTI/Classes/CTI_WeapDef_Scythe.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_Scythe extends KFWeapDef_Scythe - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_Scythe extends KFWeapDef_Scythe + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_ShrinkRayGun.uc b/CTI/Classes/CTI_WeapDef_ShrinkRayGun.uc index da36a18..22c53fb 100644 --- a/CTI/Classes/CTI_WeapDef_ShrinkRayGun.uc +++ b/CTI/Classes/CTI_WeapDef_ShrinkRayGun.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_ShrinkRayGun extends KFWeapDef_ShrinkRayGun - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_ShrinkRayGun extends KFWeapDef_ShrinkRayGun + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_ThermiteBore.uc b/CTI/Classes/CTI_WeapDef_ThermiteBore.uc index c0cbfe8..0c38eed 100644 --- a/CTI/Classes/CTI_WeapDef_ThermiteBore.uc +++ b/CTI/Classes/CTI_WeapDef_ThermiteBore.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_ThermiteBore extends KFWeapDef_ThermiteBore - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_ThermiteBore extends KFWeapDef_ThermiteBore + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_ZedMKIII.uc b/CTI/Classes/CTI_WeapDef_ZedMKIII.uc index 73623ea..52a6ef6 100644 --- a/CTI/Classes/CTI_WeapDef_ZedMKIII.uc +++ b/CTI/Classes/CTI_WeapDef_ZedMKIII.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_ZedMKIII extends KFWeapDef_ZedMKIII - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_ZedMKIII extends KFWeapDef_ZedMKIII + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/CTI_WeapDef_Zweihander.uc b/CTI/Classes/CTI_WeapDef_Zweihander.uc index f7243cd..de53dd8 100644 --- a/CTI/Classes/CTI_WeapDef_Zweihander.uc +++ b/CTI/Classes/CTI_WeapDef_Zweihander.uc @@ -1,7 +1,7 @@ -class CTI_WeapDef_Zweihander extends KFWeapDef_Zweihander - abstract; - -defaultproperties -{ - SharedUnlockId = SCU_None +class CTI_WeapDef_Zweihander extends KFWeapDef_Zweihander + abstract; + +defaultproperties +{ + SharedUnlockId = SCU_None } \ No newline at end of file diff --git a/CTI/Classes/OfficialWeapons.uc b/CTI/Classes/OfficialWeapons.uc index df7de33..e2b5438 100644 --- a/CTI/Classes/OfficialWeapons.uc +++ b/CTI/Classes/OfficialWeapons.uc @@ -1,43 +1,43 @@ -class OfficialWeapons extends Object - config(CTI); - -const Trader = class'Trader'; -const DefaultComment = "Auto-generated list of official weapons for your convenience, copy-paste ready"; - -var private config String Comment; -var private config Array Item; - -private delegate int ByName(String A, String B) -{ - return A > B ? -1 : 0; -} - -public static function Update(bool Enabled) -{ - local Array > KFWeapDefs; - local class KFWeapDef; - - if (!Enabled) return; - - KFWeapDefs = Trader.static.GetTraderWeapDefs(); - - if (default.Item.Length != KFWeapDefs.Length || default.Comment != DefaultComment) - { - default.Comment = DefaultComment; - default.Item.Length = 0; - - foreach KFWeapDefs(KFWeapDef) - { - default.Item.AddItem(KFWeapDef.GetPackageName() $ "." $ KFWeapDef); - } - - default.Item.Sort(ByName); - - StaticSaveConfig(); - } -} - -defaultproperties -{ - -} +class OfficialWeapons extends Object + config(CTI); + +const Trader = class'Trader'; +const DefaultComment = "Auto-generated list of official weapons for your convenience, copy-paste ready"; + +var private config String Comment; +var private config Array Item; + +private delegate int ByName(String A, String B) +{ + return A > B ? -1 : 0; +} + +public static function Update(bool Enabled) +{ + local Array > KFWeapDefs; + local class KFWeapDef; + + if (!Enabled) return; + + KFWeapDefs = Trader.static.GetTraderWeapDefs(); + + if (default.Item.Length != KFWeapDefs.Length || default.Comment != DefaultComment) + { + default.Comment = DefaultComment; + default.Item.Length = 0; + + foreach KFWeapDefs(KFWeapDef) + { + default.Item.AddItem(KFWeapDef.GetPackageName() $ "." $ KFWeapDef); + } + + default.Item.Sort(ByName); + + StaticSaveConfig(); + } +} + +defaultproperties +{ + +} diff --git a/CTI/Classes/RemoveItems.uc b/CTI/Classes/RemoveItems.uc index c9864ff..fa6914d 100644 --- a/CTI/Classes/RemoveItems.uc +++ b/CTI/Classes/RemoveItems.uc @@ -1,105 +1,105 @@ -class RemoveItems extends Object - dependson(CTI) - config(CTI); - -var public config bool bAll; -var public config bool bHRG; -var public config bool bDLC; -var private config Array Item; - -public static function InitConfig(int Version, int LatestVersion) -{ - switch (Version) - { - case `NO_CONFIG: - ApplyDefault(); - - case 2: - default.bHRG = false; - default.bDLC = false; - - default: break; - } - - if (LatestVersion != Version) - { - StaticSaveConfig(); - } -} - -private static function ApplyDefault() -{ - default.bAll = false; - default.bHRG = false; - default.bDLC = false; - default.Item.Length = 0; - default.Item.AddItem("KFGame.KFWeapDef_9mmDual"); -} - -public static function Array > Load(E_LogLevel LogLevel) -{ - local Array > ItemList; - local class ItemWeapDef; - local class ItemWeapon; - local String ItemRaw; - local int Line; - - `Log_Info("Load items to remove:"); - if (default.bAll) - { - `Log_Info("Remove all default items"); - } - else - { - if (default.bHRG) - { - `Log_Info("Remove all HRG items"); - } - if (default.bDLC) - { - `Log_Info("Remove all DLC items"); - } - - foreach default.Item(ItemRaw, Line) - { - ItemWeapDef = class(DynamicLoadObject(ItemRaw, class'Class')); - if (ItemWeapDef == None) - { - `Log_Warn("[" $ Line + 1 $ "]" @ "Can't load weapon definition:" @ ItemRaw); - continue; - } - - ItemWeapon = class(DynamicLoadObject(ItemWeapDef.default.WeaponClassPath, class'Class')); - if (ItemWeapon == None) - { - `Log_Warn("[" $ Line + 1 $ "]" @ "Can't load weapon:" @ ItemWeapDef.default.WeaponClassPath); - continue; - } - - if (ItemList.Find(ItemWeapDef) != INDEX_NONE) - { - `Log_Warn("[" $ Line + 1 $ "]" @ "Duplicate item:" @ ItemRaw @ "(skip)"); - continue; - } - - ItemList.AddItem(ItemWeapDef); - `Log_Debug("[" $ Line + 1 $ "]" @ "Loaded successfully:" @ ItemRaw); - } - - if (ItemList.Length == default.Item.Length) - { - `Log_Info("Items to remove list loaded successfully (" $ ItemList.Length @ "entries)"); - } - else - { - `Log_Info("Items to remove list: loaded" @ ItemList.Length @ "of" @ default.Item.Length @ "entries"); - } - } - - return ItemList; -} - -defaultproperties -{ - -} +class RemoveItems extends Object + dependson(CTI) + config(CTI); + +var public config bool bAll; +var public config bool bHRG; +var public config bool bDLC; +var private config Array Item; + +public static function InitConfig(int Version, int LatestVersion) +{ + switch (Version) + { + case `NO_CONFIG: + ApplyDefault(); + + case 2: + default.bHRG = false; + default.bDLC = false; + + default: break; + } + + if (LatestVersion != Version) + { + StaticSaveConfig(); + } +} + +private static function ApplyDefault() +{ + default.bAll = false; + default.bHRG = false; + default.bDLC = false; + default.Item.Length = 0; + default.Item.AddItem("KFGame.KFWeapDef_9mmDual"); +} + +public static function Array > Load(E_LogLevel LogLevel) +{ + local Array > ItemList; + local class ItemWeapDef; + local class ItemWeapon; + local String ItemRaw; + local int Line; + + `Log_Info("Load items to remove:"); + if (default.bAll) + { + `Log_Info("Remove all default items"); + } + else + { + if (default.bHRG) + { + `Log_Info("Remove all HRG items"); + } + if (default.bDLC) + { + `Log_Info("Remove all DLC items"); + } + + foreach default.Item(ItemRaw, Line) + { + ItemWeapDef = class(DynamicLoadObject(ItemRaw, class'Class')); + if (ItemWeapDef == None) + { + `Log_Warn("[" $ Line + 1 $ "]" @ "Can't load weapon definition:" @ ItemRaw); + continue; + } + + ItemWeapon = class(DynamicLoadObject(ItemWeapDef.default.WeaponClassPath, class'Class')); + if (ItemWeapon == None) + { + `Log_Warn("[" $ Line + 1 $ "]" @ "Can't load weapon:" @ ItemWeapDef.default.WeaponClassPath); + continue; + } + + if (ItemList.Find(ItemWeapDef) != INDEX_NONE) + { + `Log_Warn("[" $ Line + 1 $ "]" @ "Duplicate item:" @ ItemRaw @ "(skip)"); + continue; + } + + ItemList.AddItem(ItemWeapDef); + `Log_Debug("[" $ Line + 1 $ "]" @ "Loaded successfully:" @ ItemRaw); + } + + if (ItemList.Length == default.Item.Length) + { + `Log_Info("Items to remove list loaded successfully (" $ ItemList.Length @ "entries)"); + } + else + { + `Log_Info("Items to remove list: loaded" @ ItemList.Length @ "of" @ default.Item.Length @ "entries"); + } + } + + return ItemList; +} + +defaultproperties +{ + +} diff --git a/CTI/Classes/Trader.uc b/CTI/Classes/Trader.uc index d552762..2d938a3 100644 --- a/CTI/Classes/Trader.uc +++ b/CTI/Classes/Trader.uc @@ -1,165 +1,165 @@ -class Trader extends Object - abstract; - -private delegate int ByPrice(class A, class B) -{ - return A.default.BuyPrice > B.default.BuyPrice ? -1 : 0; -} - -public static function KFGFxObject_TraderItems GetTraderItems(optional KFGameReplicationInfo KFGRI = None, optional E_LogLevel LogLevel = LL_Trace) -{ - local String TraderItemsPath; - - if (KFGRI == None) - { - TraderItemsPath = class'KFGameReplicationInfo'.default.TraderItemsPath; - } - else - { - TraderItemsPath = KFGRI.TraderItemsPath; - } - - return KFGFxObject_TraderItems(DynamicLoadObject(TraderItemsPath, class'KFGFxObject_TraderItems')); -} - -public static function Array > GetTraderWeapDefs(optional KFGameReplicationInfo KFGRI = None,optional E_LogLevel LogLevel = LL_Trace) -{ - local Array > KFWeapDefs; - local KFGFxObject_TraderItems TraderItems; - local STraderItem Item; - - TraderItems = GetTraderItems(KFGRI, LogLevel); - - foreach TraderItems.SaleItems(Item) - { - if (Item.WeaponDef != None) - { - KFWeapDefs.AddItem(Item.WeaponDef); - } - } - - return KFWeapDefs; -} - -public static function Array > GetTraderWeapons(optional KFGameReplicationInfo KFGRI = None,optional E_LogLevel LogLevel = LL_Trace) -{ - local Array > KFWeapons; - local class KFWeapon; - local KFGFxObject_TraderItems TraderItems; - local STraderItem Item; - - TraderItems = GetTraderItems(KFGRI, LogLevel); - - foreach TraderItems.SaleItems(Item) - { - if (Item.WeaponDef != None) - { - KFWeapon = class (DynamicLoadObject(Item.WeaponDef.default.WeaponClassPath, class'Class')); - if (KFWeapon != None) - { - KFWeapons.AddItem(KFWeapon); - } - } - } - - return KFWeapons; -} - -public static function Array > GetTraderWeapDefsDLC(KFGameReplicationInfo KFGRI, E_LogLevel LogLevel) -{ - local KFGFxObject_TraderItems TraderItems; - local STraderItem Item; - local Array > WeapDefs; - - `Log_TraceStatic(); - - TraderItems = GetTraderItems(KFGRI, LogLevel); - - foreach TraderItems.SaleItems(Item) - { - if (Item.WeaponDef != None && Item.WeaponDef.default.SharedUnlockId != SCU_None) - { - WeapDefs.AddItem(Item.WeaponDef); - } - } - - return WeapDefs; -} - -public static simulated function ModifyTrader( - KFGameReplicationInfo KFGRI, - Array > RemoveItems, - Array > AddItems, - bool ReplaceMode, - bool RemoveHRG, - bool RemoveDLC, - E_LogLevel LogLevel) -{ - local KFGFxObject_TraderItems TraderItems; - local STraderItem Item; - local class WeapDef; - local Array > WeapDefs; - local int Index; - local int MaxItemID; - - `Log_TraceStatic(); - - TraderItems = GetTraderItems(KFGRI, LogLevel); - - if (!ReplaceMode) - { - foreach TraderItems.SaleItems(Item) - { - if (Item.WeaponDef != None - && RemoveItems.Find(Item.WeaponDef) == INDEX_NONE - && (!RemoveHRG || (RemoveHRG && InStr(Item.WeaponDef, "_HRG", true) == INDEX_NONE)) - && (!RemoveDLC || (RemoveDLC && Item.WeaponDef.default.SharedUnlockId == SCU_None)) - && WeaponClassIsUnique(Item.WeaponDef.default.WeaponClassPath, AddItems, LogLevel)) - { - WeapDefs.AddItem(Item.WeaponDef); - } - } - } - - for (Index = 0; Index < AddItems.Length; ++Index) - { - WeapDefs.AddItem(AddItems[Index]); - } - - WeapDefs.Sort(ByPrice); - - TraderItems.SaleItems.Length = 0; - MaxItemID = 0; - foreach WeapDefs(WeapDef) - { - Item.WeaponDef = WeapDef; - Item.ItemID = ++MaxItemID; - TraderItems.SaleItems.AddItem(Item); - } - - TraderItems.SetItemsInfo(TraderItems.SaleItems); - - KFGRI.TraderItems = TraderItems; -} - -private static function bool WeaponClassIsUnique(String WeaponClassPath, Array > WeapDefs, E_LogLevel LogLevel) -{ - local class WeapDef; - - `Log_TraceStatic(); - - foreach WeapDefs(WeapDef) - { - if (WeapDef.default.WeaponClassPath == WeaponClassPath) - { - return false; - } - } - - return true; -} - -defaultproperties -{ - -} +class Trader extends Object + abstract; + +private delegate int ByPrice(class A, class B) +{ + return A.default.BuyPrice > B.default.BuyPrice ? -1 : 0; +} + +public static function KFGFxObject_TraderItems GetTraderItems(optional KFGameReplicationInfo KFGRI = None, optional E_LogLevel LogLevel = LL_Trace) +{ + local String TraderItemsPath; + + if (KFGRI == None) + { + TraderItemsPath = class'KFGameReplicationInfo'.default.TraderItemsPath; + } + else + { + TraderItemsPath = KFGRI.TraderItemsPath; + } + + return KFGFxObject_TraderItems(DynamicLoadObject(TraderItemsPath, class'KFGFxObject_TraderItems')); +} + +public static function Array > GetTraderWeapDefs(optional KFGameReplicationInfo KFGRI = None,optional E_LogLevel LogLevel = LL_Trace) +{ + local Array > KFWeapDefs; + local KFGFxObject_TraderItems TraderItems; + local STraderItem Item; + + TraderItems = GetTraderItems(KFGRI, LogLevel); + + foreach TraderItems.SaleItems(Item) + { + if (Item.WeaponDef != None) + { + KFWeapDefs.AddItem(Item.WeaponDef); + } + } + + return KFWeapDefs; +} + +public static function Array > GetTraderWeapons(optional KFGameReplicationInfo KFGRI = None,optional E_LogLevel LogLevel = LL_Trace) +{ + local Array > KFWeapons; + local class KFWeapon; + local KFGFxObject_TraderItems TraderItems; + local STraderItem Item; + + TraderItems = GetTraderItems(KFGRI, LogLevel); + + foreach TraderItems.SaleItems(Item) + { + if (Item.WeaponDef != None) + { + KFWeapon = class (DynamicLoadObject(Item.WeaponDef.default.WeaponClassPath, class'Class')); + if (KFWeapon != None) + { + KFWeapons.AddItem(KFWeapon); + } + } + } + + return KFWeapons; +} + +public static function Array > GetTraderWeapDefsDLC(KFGameReplicationInfo KFGRI, E_LogLevel LogLevel) +{ + local KFGFxObject_TraderItems TraderItems; + local STraderItem Item; + local Array > WeapDefs; + + `Log_TraceStatic(); + + TraderItems = GetTraderItems(KFGRI, LogLevel); + + foreach TraderItems.SaleItems(Item) + { + if (Item.WeaponDef != None && Item.WeaponDef.default.SharedUnlockId != SCU_None) + { + WeapDefs.AddItem(Item.WeaponDef); + } + } + + return WeapDefs; +} + +public static simulated function ModifyTrader( + KFGameReplicationInfo KFGRI, + Array > RemoveItems, + Array > AddItems, + bool ReplaceMode, + bool RemoveHRG, + bool RemoveDLC, + E_LogLevel LogLevel) +{ + local KFGFxObject_TraderItems TraderItems; + local STraderItem Item; + local class WeapDef; + local Array > WeapDefs; + local int Index; + local int MaxItemID; + + `Log_TraceStatic(); + + TraderItems = GetTraderItems(KFGRI, LogLevel); + + if (!ReplaceMode) + { + foreach TraderItems.SaleItems(Item) + { + if (Item.WeaponDef != None + && RemoveItems.Find(Item.WeaponDef) == INDEX_NONE + && (!RemoveHRG || (RemoveHRG && InStr(Item.WeaponDef, "_HRG", true) == INDEX_NONE)) + && (!RemoveDLC || (RemoveDLC && Item.WeaponDef.default.SharedUnlockId == SCU_None)) + && WeaponClassIsUnique(Item.WeaponDef.default.WeaponClassPath, AddItems, LogLevel)) + { + WeapDefs.AddItem(Item.WeaponDef); + } + } + } + + for (Index = 0; Index < AddItems.Length; ++Index) + { + WeapDefs.AddItem(AddItems[Index]); + } + + WeapDefs.Sort(ByPrice); + + TraderItems.SaleItems.Length = 0; + MaxItemID = 0; + foreach WeapDefs(WeapDef) + { + Item.WeaponDef = WeapDef; + Item.ItemID = ++MaxItemID; + TraderItems.SaleItems.AddItem(Item); + } + + TraderItems.SetItemsInfo(TraderItems.SaleItems); + + KFGRI.TraderItems = TraderItems; +} + +private static function bool WeaponClassIsUnique(String WeaponClassPath, Array > WeapDefs, E_LogLevel LogLevel) +{ + local class WeapDef; + + `Log_TraceStatic(); + + foreach WeapDefs(WeapDef) + { + if (WeapDef.default.WeaponClassPath == WeaponClassPath) + { + return false; + } + } + + return true; +} + +defaultproperties +{ + +} diff --git a/CTI/Classes/Unlocker.uc b/CTI/Classes/Unlocker.uc index 6082b60..8ec17c7 100644 --- a/CTI/Classes/Unlocker.uc +++ b/CTI/Classes/Unlocker.uc @@ -1,199 +1,199 @@ -class Unlocker extends Object - abstract; - -// TODO: -// replace shopContainer (KFGFxTraderContainer_Store) -// without replacing KFGFxMoviePlayer_Manager -// but how? 🤔 - -const Trader = class'Trader'; - -var private const Array > WeapDefDLCReplacements; - -public static function bool IsValidTypeUnlockDLC(String UnlockType, E_LogLevel LogLevel) -{ - `Log_TraceStatic(); - - switch (Locs(UnlockType)) - { - case "true": - case "false": - case "auto": - case "replaceweapons": - case "replacefilter": - return true; - } - - return false; -} - -public static function bool UnlockDLC( - KFGameInfo KFGI, - KFGameReplicationInfo KFGRI, - String UnlockType, - out Array > RemoveItems, - out Array > AddItems, - E_LogLevel LogLevel) -{ - `Log_TraceStatic(); - - switch (Locs(UnlockType)) - { - case "true": - case "auto": - return Auto(KFGI, KFGRI, RemoveItems, AddItems, LogLevel); - - case "replaceweapons": - return ReplaceWeapons(KFGRI, RemoveItems, AddItems, LogLevel); - - case "replacefilter": - return ReplaceFilter(KFGI, LogLevel); - - case "false": - default: - return false; - } -} - -private static function bool Auto( - KFGameInfo KFGI, - KFGameReplicationInfo KFGRI, - out Array > RemoveItems, - out Array > AddItems, - E_LogLevel LogLevel) -{ - local bool CustomGFxManager; - - `Log_TraceStatic(); - - if (KFGI == None) return false; - - if (KFGameInfo_VersusSurvival(KFGI) != None) - { - CustomGFxManager = (KFGI.KFGFxManagerClass != class'KFGameInfo_VersusSurvival'.default.KFGFxManagerClass); - } - else - { - CustomGFxManager = (KFGI.KFGFxManagerClass != class'KFGameInfo'.default.KFGFxManagerClass); - } - - if (CustomGFxManager) - { - return ReplaceWeapons(KFGRI, RemoveItems, AddItems, LogLevel); - } - else - { - return ReplaceFilter(KFGI, LogLevel); - } -} - -private static function bool ReplaceWeapons( - KFGameReplicationInfo KFGRI, - out Array > RemoveItems, - out Array > AddItems, - E_LogLevel LogLevel) -{ - local Array > WeapDefsDLCs; - local class WeapDefDLC; - local class WeapDefReplacement; - local bool Unlock, PartialUnlock; - - `Log_TraceStatic(); - - Unlock = false; - PartialUnlock = false; - - WeapDefsDLCs = Trader.static.GetTraderWeapDefsDLC(KFGRI, LogLevel); - - foreach WeapDefsDLCs(WeapDefDLC) - { - WeapDefReplacement = PickReplacementWeapDefDLC(WeapDefDLC, LogLevel); - if (WeapDefReplacement != None) - { - Unlock = true; - if (AddItems.Find(WeapDefReplacement) == INDEX_NONE) - { - AddItems.AddItem(WeapDefReplacement); - } - `Log_Debug(WeapDefDLC @ "replaced by" @ WeapDefReplacement); - } - else - { - PartialUnlock = true; - `Log_Warn("Can't unlock item:" @ WeapDefDLC @ "SharedUnlockId:" @ WeapDefDLC.default.SharedUnlockId); - } - } - - if (PartialUnlock) - { - `Log_Warn("Some DLCs are not unlocked. Try to set 'UnlockDLC=ReplaceFilter' or ask the author to update the mod"); - } - - return Unlock; -} - -private static function class PickReplacementWeapDefDLC(class WeapDefDLC, E_LogLevel LogLevel) -{ - local class WeapDef; - - `Log_TraceStatic(); - - foreach default.WeapDefDLCReplacements(WeapDef) - { - if (ClassIsChildOf(WeapDef, WeapDefDLC)) - { - return WeapDef; - } - } - - return None; -} - -private static function bool ReplaceFilter(KFGameInfo KFGI, E_LogLevel LogLevel) -{ - `Log_TraceStatic(); - - if (KFGI == None) return false; - - if (KFGameInfo_VersusSurvival(KFGI) != None) - { - KFGI.KFGFxManagerClass = class'CTI_GFxMoviePlayer_Manager_Versus'; - } - else - { - KFGI.KFGFxManagerClass = class'CTI_GFxMoviePlayer_Manager'; - } - - return true; -} - -defaultproperties -{ - WeapDefDLCReplacements.Add(class'CTI_WeapDef_AutoTurret') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_BladedPistol') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_Blunderbuss') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_ChainBat') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_ChiappaRhino') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_ChiappaRhinoDual') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_CompoundBow') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_Doshinegun') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_DualBladed') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_FAMAS') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_G18') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_G36C') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_GravityImploder') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_HVStormCannon') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_IonThruster') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_Mine_Reconstructor') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_Minigun') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_MosinNagant') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_ParasiteImplanter') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_Pistol_DualG18') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_Pistol_G18C') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_Rifle_FrostShotgunAxe') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_Scythe') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_ShrinkRayGun') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_ThermiteBore') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_ZedMKIII') - WeapDefDLCReplacements.Add(class'CTI_WeapDef_Zweihander') -} +class Unlocker extends Object + abstract; + +// TODO: +// replace shopContainer (KFGFxTraderContainer_Store) +// without replacing KFGFxMoviePlayer_Manager +// but how? 🤔 + +const Trader = class'Trader'; + +var private const Array > WeapDefDLCReplacements; + +public static function bool IsValidTypeUnlockDLC(String UnlockType, E_LogLevel LogLevel) +{ + `Log_TraceStatic(); + + switch (Locs(UnlockType)) + { + case "true": + case "false": + case "auto": + case "replaceweapons": + case "replacefilter": + return true; + } + + return false; +} + +public static function bool UnlockDLC( + KFGameInfo KFGI, + KFGameReplicationInfo KFGRI, + String UnlockType, + out Array > RemoveItems, + out Array > AddItems, + E_LogLevel LogLevel) +{ + `Log_TraceStatic(); + + switch (Locs(UnlockType)) + { + case "true": + case "auto": + return Auto(KFGI, KFGRI, RemoveItems, AddItems, LogLevel); + + case "replaceweapons": + return ReplaceWeapons(KFGRI, RemoveItems, AddItems, LogLevel); + + case "replacefilter": + return ReplaceFilter(KFGI, LogLevel); + + case "false": + default: + return false; + } +} + +private static function bool Auto( + KFGameInfo KFGI, + KFGameReplicationInfo KFGRI, + out Array > RemoveItems, + out Array > AddItems, + E_LogLevel LogLevel) +{ + local bool CustomGFxManager; + + `Log_TraceStatic(); + + if (KFGI == None) return false; + + if (KFGameInfo_VersusSurvival(KFGI) != None) + { + CustomGFxManager = (KFGI.KFGFxManagerClass != class'KFGameInfo_VersusSurvival'.default.KFGFxManagerClass); + } + else + { + CustomGFxManager = (KFGI.KFGFxManagerClass != class'KFGameInfo'.default.KFGFxManagerClass); + } + + if (CustomGFxManager) + { + return ReplaceWeapons(KFGRI, RemoveItems, AddItems, LogLevel); + } + else + { + return ReplaceFilter(KFGI, LogLevel); + } +} + +private static function bool ReplaceWeapons( + KFGameReplicationInfo KFGRI, + out Array > RemoveItems, + out Array > AddItems, + E_LogLevel LogLevel) +{ + local Array > WeapDefsDLCs; + local class WeapDefDLC; + local class WeapDefReplacement; + local bool Unlock, PartialUnlock; + + `Log_TraceStatic(); + + Unlock = false; + PartialUnlock = false; + + WeapDefsDLCs = Trader.static.GetTraderWeapDefsDLC(KFGRI, LogLevel); + + foreach WeapDefsDLCs(WeapDefDLC) + { + WeapDefReplacement = PickReplacementWeapDefDLC(WeapDefDLC, LogLevel); + if (WeapDefReplacement != None) + { + Unlock = true; + if (AddItems.Find(WeapDefReplacement) == INDEX_NONE) + { + AddItems.AddItem(WeapDefReplacement); + } + `Log_Debug(WeapDefDLC @ "replaced by" @ WeapDefReplacement); + } + else + { + PartialUnlock = true; + `Log_Warn("Can't unlock item:" @ WeapDefDLC @ "SharedUnlockId:" @ WeapDefDLC.default.SharedUnlockId); + } + } + + if (PartialUnlock) + { + `Log_Warn("Some DLCs are not unlocked. Try to set 'UnlockDLC=ReplaceFilter' or ask the author to update the mod"); + } + + return Unlock; +} + +private static function class PickReplacementWeapDefDLC(class WeapDefDLC, E_LogLevel LogLevel) +{ + local class WeapDef; + + `Log_TraceStatic(); + + foreach default.WeapDefDLCReplacements(WeapDef) + { + if (ClassIsChildOf(WeapDef, WeapDefDLC)) + { + return WeapDef; + } + } + + return None; +} + +private static function bool ReplaceFilter(KFGameInfo KFGI, E_LogLevel LogLevel) +{ + `Log_TraceStatic(); + + if (KFGI == None) return false; + + if (KFGameInfo_VersusSurvival(KFGI) != None) + { + KFGI.KFGFxManagerClass = class'CTI_GFxMoviePlayer_Manager_Versus'; + } + else + { + KFGI.KFGFxManagerClass = class'CTI_GFxMoviePlayer_Manager'; + } + + return true; +} + +defaultproperties +{ + WeapDefDLCReplacements.Add(class'CTI_WeapDef_AutoTurret') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_BladedPistol') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_Blunderbuss') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_ChainBat') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_ChiappaRhino') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_ChiappaRhinoDual') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_CompoundBow') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_Doshinegun') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_DualBladed') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_FAMAS') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_G18') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_G36C') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_GravityImploder') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_HVStormCannon') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_IonThruster') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_Mine_Reconstructor') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_Minigun') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_MosinNagant') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_ParasiteImplanter') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_Pistol_DualG18') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_Pistol_G18C') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_Rifle_FrostShotgunAxe') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_Scythe') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_ShrinkRayGun') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_ThermiteBore') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_ZedMKIII') + WeapDefDLCReplacements.Add(class'CTI_WeapDef_Zweihander') +} diff --git a/CTI/Classes/_Logger.uc b/CTI/Classes/_Logger.uc index 93fc28a..d9cfb52 100644 --- a/CTI/Classes/_Logger.uc +++ b/CTI/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/CTI/Constants.uci b/CTI/Constants.uci index 1003f19..432fa68 100644 --- a/CTI/Constants.uci +++ b/CTI/Constants.uci @@ -1,2 +1,2 @@ -// Constants -`define NO_CONFIG 0 +// Constants +`define NO_CONFIG 0 diff --git a/CTI/Globals.uci b/CTI/Globals.uci index a48ac52..4dcd4fb 100644 --- a/CTI/Globals.uci +++ b/CTI/Globals.uci @@ -1,3 +1,3 @@ -// Imports -`include(Logger.uci) -`include(Constants.uci) +// Imports +`include(Logger.uci) +`include(Constants.uci) diff --git a/CTI/Logger.uci b/CTI/Logger.uci index 0f59dd3..c0815b7 100644 --- a/CTI/Logger.uci +++ b/CTI/Logger.uci @@ -1,15 +1,15 @@ -// Logger -`define Log_Tag 'CTI' - -`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 'CTI' + +`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/Localization/INT/CTI.int b/Localization/INT/CTI.int index 8f142f4813aadc7ed75110d6363a56839dbb8a2d..5875dd11a42d181023c5bd3cb3d15e77cbac7066 100644 GIT binary patch delta 29 lcmeyx^oD7I+C&Y5iBUEaXIM(QI-EqY@Jr0|2fk3Aq3O delta 48 zcmaFE^owbN8YAySRYM>VY6~PLS~Bx8a7}zGIq``eBkyEEMspzP&Zx`+6lDMaO%)53 diff --git a/Localization/RUS/CTI.rus b/Localization/RUS/CTI.rus index 80396b83a1e46564ab1417668e221033e7cba966..f8b03d1c9e02c5b80bed55a21930e0f05af46a4c 100644 GIT binary patch delta 29 lcmeyy^nz)E+C&Yri3xfWCs<89<26}=(QI-6qY@Jr0|2aJ37r4{ delta 43 tcmaFC^o?nP8YAySRdXN_tq&wRt%1a0Z${q9yo^A>$