From 76a9f2353028036def0e7aa70a0cb838f780d4e2 Mon Sep 17 00:00:00 2001 From: GenZmeY Date: Sun, 14 Aug 2022 20:47:13 +0300 Subject: [PATCH] wip --- MskGs/Classes/CFG_Lifespan.uc | 57 +++++++++++++++++++++++++++++ MskGs/Classes/CFG_SpawnManager.uc | 57 +++++++++++++++++++++++++++++ MskGs/Classes/CFG_XPBoost.uc | 57 +++++++++++++++++++++++++++++ MskGs/Classes/MSKGS.uc | 2 +- MskGs/Classes/MSKGS_GM_Endless.uc | 2 +- MskGs/generate_proxies.sh | 2 +- PublicationContent/description.txt | 10 ++++- PublicationContent/preview.png | Bin 264083 -> 275130 bytes 8 files changed, 183 insertions(+), 4 deletions(-) create mode 100644 MskGs/Classes/CFG_Lifespan.uc create mode 100644 MskGs/Classes/CFG_SpawnManager.uc create mode 100644 MskGs/Classes/CFG_XPBoost.uc diff --git a/MskGs/Classes/CFG_Lifespan.uc b/MskGs/Classes/CFG_Lifespan.uc new file mode 100644 index 0000000..621e943 --- /dev/null +++ b/MskGs/Classes/CFG_Lifespan.uc @@ -0,0 +1,57 @@ +class CFG_Lifespan extends Object + config(MSKGS) + abstract; + +var public config int Weapon; +var public config int Dosh; + +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 Load(E_LogLevel LogLevel) +{ + `Log_TraceStatic(); + + switch (Locs(default.SortPolicy)) + { + case "counterasc": return; + case "counterdesc": return; + case "nameasc": return; + case "namedesc": return; + case "playtimetotalasc": return; + case "playtimetotaldesc": return; + case "playtimeavgasc": return; + case "playtimeavgdesc": return; + } + + `Log_Error("Can't load SortPolicy (" $ default.SortPolicy $ "), must be one of: CounterAsc CounterDesc NameAsc NameDesc PlaytimeTotalAsc PlaytimeTotalDesc PlaytimeAvgAsc PlaytimeAvgDesc"); + default.SortPolicy = "CounterDesc"; +} + +protected static function ApplyDefault(E_LogLevel LogLevel) +{ + `Log_TraceStatic(); + + default.bEnable = false; + default.SortPolicy = "CounterDesc"; +} + +defaultproperties +{ + +} diff --git a/MskGs/Classes/CFG_SpawnManager.uc b/MskGs/Classes/CFG_SpawnManager.uc new file mode 100644 index 0000000..255215c --- /dev/null +++ b/MskGs/Classes/CFG_SpawnManager.uc @@ -0,0 +1,57 @@ +class MapStat extends Object + config(MSKGS) + abstract; + +var public config bool bEnable; +var public config String SortPolicy; + +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 Load(E_LogLevel LogLevel) +{ + `Log_TraceStatic(); + + switch (Locs(default.SortPolicy)) + { + case "counterasc": return; + case "counterdesc": return; + case "nameasc": return; + case "namedesc": return; + case "playtimetotalasc": return; + case "playtimetotaldesc": return; + case "playtimeavgasc": return; + case "playtimeavgdesc": return; + } + + `Log_Error("Can't load SortPolicy (" $ default.SortPolicy $ "), must be one of: CounterAsc CounterDesc NameAsc NameDesc PlaytimeTotalAsc PlaytimeTotalDesc PlaytimeAvgAsc PlaytimeAvgDesc"); + default.SortPolicy = "CounterDesc"; +} + +protected static function ApplyDefault(E_LogLevel LogLevel) +{ + `Log_TraceStatic(); + + default.bEnable = false; + default.SortPolicy = "CounterDesc"; +} + +defaultproperties +{ + +} diff --git a/MskGs/Classes/CFG_XPBoost.uc b/MskGs/Classes/CFG_XPBoost.uc new file mode 100644 index 0000000..255215c --- /dev/null +++ b/MskGs/Classes/CFG_XPBoost.uc @@ -0,0 +1,57 @@ +class MapStat extends Object + config(MSKGS) + abstract; + +var public config bool bEnable; +var public config String SortPolicy; + +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 Load(E_LogLevel LogLevel) +{ + `Log_TraceStatic(); + + switch (Locs(default.SortPolicy)) + { + case "counterasc": return; + case "counterdesc": return; + case "nameasc": return; + case "namedesc": return; + case "playtimetotalasc": return; + case "playtimetotaldesc": return; + case "playtimeavgasc": return; + case "playtimeavgdesc": return; + } + + `Log_Error("Can't load SortPolicy (" $ default.SortPolicy $ "), must be one of: CounterAsc CounterDesc NameAsc NameDesc PlaytimeTotalAsc PlaytimeTotalDesc PlaytimeAvgAsc PlaytimeAvgDesc"); + default.SortPolicy = "CounterDesc"; +} + +protected static function ApplyDefault(E_LogLevel LogLevel) +{ + `Log_TraceStatic(); + + default.bEnable = false; + default.SortPolicy = "CounterDesc"; +} + +defaultproperties +{ + +} diff --git a/MskGs/Classes/MSKGS.uc b/MskGs/Classes/MSKGS.uc index ac36e8c..674cb1c 100644 --- a/MskGs/Classes/MSKGS.uc +++ b/MskGs/Classes/MSKGS.uc @@ -7,7 +7,7 @@ const CfgRemoveItems = class'RemoveItems'; var private config int Version; var private config E_LogLevel LogLevel; -var private KFGameInfo KFGI; +var private KFGameInfo KFGI; var private KFGameReplicationInfo KFGRI; var private Array RepInfos; diff --git a/MskGs/Classes/MSKGS_GM_Endless.uc b/MskGs/Classes/MSKGS_GM_Endless.uc index 59b5ca0..14ae8ab 100644 --- a/MskGs/Classes/MSKGS_GM_Endless.uc +++ b/MskGs/Classes/MSKGS_GM_Endless.uc @@ -5,7 +5,7 @@ const GIC = "KFGameContent.KFGameInfo_Endless"; var public MSKGS_Mut Mut; -simulated function ExileServerUsingKickBan() +public simulated function ExileServerUsingKickBan() { return; } diff --git a/MskGs/generate_proxies.sh b/MskGs/generate_proxies.sh index 284d88a..c15726d 100644 --- a/MskGs/generate_proxies.sh +++ b/MskGs/generate_proxies.sh @@ -41,7 +41,7 @@ function main () ( ProxyZed="Proxy_${Zed}_${PercentStr}" TmpZed="$TmpDir/$ProxyZed.uc" - echo $ProxyZed + echo "$ProxyZed" cp "$PawnsDir/$Zed.uc" "$TmpZed" sed -i "s|$Zed|$ProxyZed|g" "$TmpZed" grep -Po 'XPValues\(\d\)=(\d+)' "$TmpZed" | \ diff --git a/PublicationContent/description.txt b/PublicationContent/description.txt index 16b56fa..b599c25 100644 --- a/PublicationContent/description.txt +++ b/PublicationContent/description.txt @@ -1 +1,9 @@ -Who are you? What are you doing here? O_o \ No newline at end of file +Mutator providing some functions of [url=https://steamcommunity.com/groups/msk-gs]MSK-GS[/url] servers. + +Contains implementations of my ideas and/or combinations of other mutators for compatibility. + +Not intended for use with other servers and will never be made available to the public, so don't ask me how to use it. + +Of course I can't forbid you to use it, but then don't be surprised that your server can break at any second due to the fact that I suddenly decided to delete or redo something in this mutator. + +If you are interested in some feature from this mutator, you can subscribe to [url=https://steamcommunity.com/id/GenZmeY/myworkshopfiles/]me in the steam workshop[/url] and follow my work. I try to post everything I do to the public. I think someday I will be able to put everything into separate mutators and abandon this hodgepodge. \ No newline at end of file diff --git a/PublicationContent/preview.png b/PublicationContent/preview.png index 2263ae29fe397d446e758358c5853429fb3c31b1..ff8e5844cc89d6163a58277ca0f9f121966d196a 100644 GIT binary patch literal 275130 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