This commit is contained in:
2022-08-17 02:07:11 +03:00
parent c406220e99
commit 1ffd0119fa
568 changed files with 1021 additions and 939 deletions

View File

@ -1,54 +0,0 @@
class CfgLifespan extends Object
config(MSKGS)
abstract;
var public config int Weap;
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();
if (default.Weap < 0)
{
`Log_Error("Weap" @ "(" $ default.Weap $ ")" @ "must be equal or greater than 0");
default.Weap = 60 * 60;
}
if (default.Dosh < 0)
{
`Log_Error("Dosh" @ "(" $ default.Dosh $ ")" @ "must be equal or greater than 0");
default.Dosh = 60 * 5;
}
}
protected static function ApplyDefault(E_LogLevel LogLevel)
{
`Log_TraceStatic();
default.Weap = 60 * 60; // 1 hour
default.Dosh = 60 * 5; // 5 min
}
defaultproperties
{
}

View File

@ -1,57 +0,0 @@
class CfgSpawnManager extends Object
config(MSKGS)
abstract;
var public config Array<int> MaxMonsters;
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)
{
local int MM, PL;
`Log_TraceStatic();
foreach default.MaxMonsters(MM, PL)
{
if (MM <= 0)
{
`Log_Error("MaxMonsters[" $ PL $ "] =" @ MM @ "must be greater than 0");
default.MaxMonsters[PL] = 32;
}
}
}
protected static function ApplyDefault(E_LogLevel LogLevel)
{
`Log_TraceStatic();
default.MaxMonsters.Length = 0;
default.MaxMonsters.AddItem(12);
default.MaxMonsters.AddItem(18);
default.MaxMonsters.AddItem(24);
default.MaxMonsters.AddItem(30);
default.MaxMonsters.AddItem(34);
default.MaxMonsters.AddItem(36);
}
defaultproperties
{
}

View File

@ -1,42 +0,0 @@
class CfgSrvRank extends Object
config(MSKGS)
abstract;
var public config bool bCustom;
var public config bool bUsesStats;
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();
}
protected static function ApplyDefault(E_LogLevel LogLevel)
{
`Log_TraceStatic();
default.bCustom = false;
default.bUsesStats = true;
}
defaultproperties
{
}

View File

@ -1,142 +0,0 @@
class CfgXPBoost extends Object
config(MSKGS)
abstract;
var private config String OwnerId;
var private config String GroupID;
var public config int MaxBoost;
var public config int BoostOwner;
var public config int BoostAdmin;
var public config int BoostGroup;
var public config int BoostPlayer;
var public config int CheckGroupTimer;
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();
if (default.MaxBoost < 0)
{
`Log_Error("MaxBoost" @ "(" $ default.MaxBoost $ ")" @ "must be equal or greater than 0");
default.MaxBoost = 30;
}
if (default.BoostOwner < 0)
{
`Log_Error("BoostOwner" @ "(" $ default.BoostOwner $ ")" @ "must be equal or greater than 0");
default.BoostOwner = 30;
}
if (default.BoostAdmin < 0)
{
`Log_Error("BoostAdmin" @ "(" $ default.BoostAdmin $ ")" @ "must be equal or greater than 0");
default.BoostAdmin = 20;
}
if (default.BoostGroup < 0)
{
`Log_Error("BoostGroup" @ "(" $ default.BoostGroup $ ")" @ "must be equal or greater than 0");
default.BoostGroup = 10;
}
if (default.BoostPlayer < 0)
{
`Log_Error("BoostPlayer" @ "(" $ default.BoostPlayer $ ")" @ "must be equal or greater than 0");
default.BoostPlayer = 0;
}
if (default.CheckGroupTimer < 0)
{
`Log_Error("CheckGroupTimer" @ "(" $ default.CheckGroupTimer $ ")" @ "must be equal or greater than 0");
default.CheckGroupTimer = 10;
}
}
public static function UniqueNetId LoadOwnerId(OnlineSubsystem OS, E_LogLevel LogLevel)
{
local UniqueNetId UID;
if (AnyToUID(OS, default.OwnerId, UID, LogLevel))
{
`Log_Debug("Loaded OwnerId:" @ default.OwnerId);
}
else
{
`Log_Warn("Can't load OwnerId:" @ default.OwnerId);
}
return UID;
}
public static function UniqueNetId LoadGroupID(OnlineSubsystem OS, E_LogLevel LogLevel)
{
local UniqueNetId UID;
if (AnyToUID(OS, default.GroupID, UID, LogLevel))
{
`Log_Debug("Loaded GroupID:" @ default.GroupID);
}
else
{
`Log_Warn("Can't load GroupID:" @ default.GroupID);
}
return UID;
}
protected static function ApplyDefault(E_LogLevel LogLevel)
{
`Log_TraceStatic();
default.OwnerId = "76561198001617867";
default.GroupID = "0x017000000223386E";
default.MaxBoost = 100;
default.BoostOwner = 30;
default.BoostAdmin = 20;
default.BoostGroup = 10;
default.BoostPlayer = 0;
default.CheckGroupTimer = 10;
}
private static function bool IsUID(String ID, E_LogLevel LogLevel)
{
`Log_TraceStatic();
return (Locs(Left(ID, 2)) == "0x");
}
private static function bool AnyToUID(OnlineSubsystem OS, String ID, out UniqueNetId UID, E_LogLevel LogLevel)
{
`Log_TraceStatic();
return IsUID(ID, LogLevel) ? OS.StringToUniqueNetId(ID, UID) : OS.Int64ToUniqueNetId(ID, UID);
}
defaultproperties
{
}

7
MskGs/Classes/IMSKGS.uc Normal file
View File

@ -0,0 +1,7 @@
interface IMSKGS;
public function IncreaseXPBoost(KFPlayerController Booster);
public function int GetXPBoost();
public function bool GetXPNotifications();
public function E_LogLevel GetLogLevel();
public function class<KFPawn_Monster> PickProxyZed(class<KFPawn_Monster> MonsterClass);

View File

@ -0,0 +1,3 @@
interface IMSKGS_GameInfo;
public static function UpdateGameSettings(KFGameInfo_Survival KFGI, string GameModeClass, IMSKGS MSKGS);

View File

@ -1,417 +0,0 @@
class MSKGS extends Info
config(MSKGS);
const LatestVersion = 1;
const CfgLifespan = class'CfgLifespan';
const CfgSpawnManager = class'CfgSpawnManager';
const CfgXPBoost = class'CfgXPBoost';
const CfgSrvRank = class'CfgSrvRank';
var public int XPBoost;
var public bool XPNotifications;
var private config int Version;
var private config E_LogLevel LogLevel;
var private OnlineSubsystem OS;
var private KFGameInfo KFGI;
var private KFGameReplicationInfo KFGRI;
var private Array<MSKGS_RepInfo> RepInfos;
var private UniqueNetId OwnerID;
var private UniqueNetId GroupID;
public simulated function bool SafeDestroy()
{
`Log_Trace();
return (bPendingDelete || bDeleteMe || Destroy());
}
public event PreBeginPlay()
{
`Log_Trace();
if (WorldInfo.NetMode == NM_Client)
{
`Log_Fatal("NetMode:" @ WorldInfo.NetMode);
SafeDestroy();
return;
}
Super.PreBeginPlay();
PreInit();
}
public event PostBeginPlay()
{
`Log_Trace();
if (bPendingDelete || bDeleteMe) return;
Super.PostBeginPlay();
PostInit();
}
private function PreInit()
{
`Log_Trace();
if (Version == `NO_CONFIG)
{
LogLevel = LL_Info;
SaveConfig();
}
CfgLifespan.static.InitConfig(Version, LatestVersion, LogLevel);
CfgSpawnManager.static.InitConfig(Version, LatestVersion, LogLevel);
CfgXPBoost.static.InitConfig(Version, LatestVersion, LogLevel);
CfgSrvRank.static.InitConfig(Version, LatestVersion, LogLevel);
switch (Version)
{
case `NO_CONFIG:
`Log_Info("Config created");
case MaxInt:
`Log_Info("Config updated to version" @ LatestVersion);
break;
case LatestVersion:
`Log_Info("Config is up-to-date");
break;
default:
`Log_Warn("The config version is higher than the current version (are you using an old mutator?)");
`Log_Warn("Config version is" @ Version @ "but current version is" @ LatestVersion);
`Log_Warn("The config version will be changed to" @ LatestVersion);
break;
}
if (LatestVersion != Version)
{
Version = LatestVersion;
SaveConfig();
}
if (LogLevel == LL_WrongLevel)
{
LogLevel = LL_Info;
`Log_Warn("Wrong 'LogLevel', return to default value");
SaveConfig();
}
`Log_Base("LogLevel:" @ LogLevel);
CfgLifespan.static.Load(LogLevel);
CfgSpawnManager.static.Load(LogLevel);
CfgXPBoost.static.Load(LogLevel);
CfgSrvRank.static.Load(LogLevel);
OS = class'GameEngine'.static.GetOnlineSubsystem();
if (OS == None)
{
`Log_Fatal("Can't get online subsystem!");
SafeDestroy();
return;
}
OwnerID = CfgXPBoost.static.LoadOwnerID(OS, LogLevel);
GroupID = CfgXPBoost.static.LoadGroupID(OS, LogLevel);
}
private function PostInit()
{
`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 (MSKGS_GM_Endless(KFGI) != None)
{
XPNotifications = true;
MSKGS_GM_Endless(KFGI).MSKGS = Self;
MSKGS_GM_Endless(KFGI).LogLevel = LogLevel;
}
else if (MSKGS_GM_Objective(KFGI) != None)
{
XPNotifications = (KFGI.GameDifficulty != 3);
MSKGS_GM_Objective(KFGI).MSKGS = Self;
MSKGS_GM_Objective(KFGI).LogLevel = LogLevel;
}
else if (MSKGS_GM_Survival(KFGI) != None)
{
XPNotifications = (KFGI.GameDifficulty != 3);
MSKGS_GM_Survival(KFGI).MSKGS = Self;
MSKGS_GM_Survival(KFGI).LogLevel = LogLevel;
}
else if (MSKGS_GM_VersusSurvival(KFGI) != None)
{
XPNotifications = false;
MSKGS_GM_VersusSurvival(KFGI).MSKGS = Self;
MSKGS_GM_VersusSurvival(KFGI).LogLevel = LogLevel;
}
else if (MSKGS_GM_WeeklySurvival(KFGI) != None)
{
XPNotifications = true;
MSKGS_GM_WeeklySurvival(KFGI).MSKGS = Self;
MSKGS_GM_WeeklySurvival(KFGI).LogLevel = LogLevel;
}
ModifySpawnManager();
}
private function ModifySpawnManager()
{
local byte Difficulty, Players;
if (KFGI.SpawnManager == None)
{
SetTimer(1.f, false, nameof(ModifySpawnManager));
return;
}
for (Difficulty = 0; Difficulty < KFGI.SpawnManager.PerDifficultyMaxMonsters.Length; Difficulty++)
{
for (Players = 0; Players < KFGI.SpawnManager.PerDifficultyMaxMonsters[Difficulty].MaxMonsters.Length; Players++)
{
KFGI.SpawnManager.PerDifficultyMaxMonsters[Difficulty].MaxMonsters[Players] = CfgSpawnManager.default.MaxMonsters[Players];
}
}
}
public function ModifyLifespan(Actor A)
{
if (KFDroppedPickup_Cash(A) != None)
{
if (CfgLifespan.default.Dosh != 0)
{
A.Lifespan = float(CfgLifespan.default.Dosh);
}
}
else if (KFDroppedPickup(A) != None)
{
if (CfgLifespan.default.Weap != 0)
{
A.Lifespan = float(CfgLifespan.default.Weap);
}
}
}
public function SetMaxPlayers(int MaxPlayers)
{
if (MaxPlayers != INDEX_NONE)
{
KFGI.MaxPlayers = MaxPlayers;
KFGI.MaxPlayersAllowed = MaxPlayers;
}
}
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();
if (!DestroyRepInfo(C))
{
`Log_Error("Can't destroy RepInfo of:" @ C);
}
}
public function bool CreateRepInfo(Controller C)
{
local MSKGS_RepInfo RepInfo;
`Log_Trace();
if (C == None) return false;
RepInfo = Spawn(class'MSKGS_RepInfo', C);
if (RepInfo == None) return false;
RepInfo.LogLevel = LogLevel;
RepInfo.MSKGS = Self;
RepInfo.GroupID = GroupID;
RepInfo.ServerOwner = false;
RepInfos.AddItem(RepInfo);
return true;
}
public function bool DestroyRepInfo(Controller C)
{
local MSKGS_RepInfo RepInfo;
`Log_Trace();
if (C == None) return false;
foreach RepInfos(RepInfo)
{
if (RepInfo.Owner == C)
{
RepInfo.SafeDestroy();
RepInfos.RemoveItem(RepInfo);
return true;
}
}
return false;
}
public function IncreaseXPBoost(KFPlayerController Booster)
{
local MSKGS_RepInfo RepInfo;
UpdateXPBoost();
foreach RepInfos(RepInfo)
{
if (RepInfo.Owner == Booster)
{
// TODO: Recive localized message
// You give boost to this server
}
else
{
// TODO: Recive localized message
// Booster give boost to this server
}
}
KFGI.UpdateGameSettings();
}
public function DecreaseXPBoost(KFPlayerController Booster)
{
local MSKGS_RepInfo RepInfo;
UpdateXPBoost();
foreach RepInfos(RepInfo)
{
if (RepInfo.Owner != Booster)
{
// TODO: Recive localized message
// Booster left the game
}
}
KFGI.UpdateGameSettings();
}
public function UpdateXPBoost()
{
local MSKGS_RepInfo RepInfo;
local int NextBoost;
NextBoost = 0;
foreach RepInfos(RepInfo)
{
NextBoost += RepInfo.XPBoost();
}
XPBoost = NextBoost;
}
/*
function AddMskGsMember(Controller C)
{
MskGsMemberList.AddItem(C);
if (XpNotifications)
{
if (MskGsMemberList.Length >= 10)
{
if (C.PlayerReplicationInfo != NONE)
WorldInfo.Game.Broadcast(C, C.PlayerReplicationInfo.PlayerName$" gives a boost to this server! XP bonus: +100% (MAX!)");
else
WorldInfo.Game.Broadcast(C, "XP bonus: +100% (MAX!)");
}
else
{
if (C.PlayerReplicationInfo != NONE)
WorldInfo.Game.Broadcast(C, C.PlayerReplicationInfo.PlayerName$" gives a boost to this server! XP bonus: +"$string(MskGsMemberList.Length * 10)$"%");
else
WorldInfo.Game.Broadcast(C, "XP bonus: +"$string(MskGsMemberList.Length * 10)$"%");
}
}
MyKFGI.UpdateGameSettings();
}
function DelMskGsMember(Controller C)
{
Initialize();
if (MskGsMemberList.Find(C) != INDEX_NONE)
{
MskGsMemberList.RemoveItem(C);
if (XpNotifications)
{
if (MskGsMemberList.Length >= 10)
{
if (C.PlayerReplicationInfo != NONE)
WorldInfo.Game.Broadcast(C, C.PlayerReplicationInfo.PlayerName$" left the game. XP bonus: +100% (MAX!)");
else
WorldInfo.Game.Broadcast(C, "XP bonus: +100% (MAX!)");
}
else if (MskGsMemberList.Length > 0)
{
if (C.PlayerReplicationInfo != NONE)
WorldInfo.Game.Broadcast(C, C.PlayerReplicationInfo.PlayerName$" left the game. XP bonus: +"$string(MskGsMemberList.Length * 10)$"%");
else
WorldInfo.Game.Broadcast(C, "XP bonus: +"$string(MskGsMemberList.Length * 10)$"%");
}
else
{
if (C.PlayerReplicationInfo != NONE)
WorldInfo.Game.Broadcast(C, C.PlayerReplicationInfo.PlayerName$" left the game. No XP bonus now.");
else
WorldInfo.Game.Broadcast(C, "No XP bonus now.");
}
}
MyKFGI.UpdateGameSettings();
}
}
*/
DefaultProperties
{
}

View File

@ -1,4 +0,0 @@
[Flags]
AllowDownload=True
ClientOptional=False
ServerSideOnly=False

View File

@ -1,24 +1,33 @@
class MSKGS_GM_Endless extends KFGameInfo_Endless;
const GI = class'MSKGS_GameInfo';
const GIC = "KFGameContent.KFGameInfo_Endless";
var public MSKGS MSKGS;
var public E_LogLevel LogLevel;
var public IMSKGS_GameInfo GI;
var public IMSKGS MSKGS;
var public E_LogLevel LogLevel;
public simulated function ExileServerUsingKickBan()
{
`Log_Trace();
return;
}
public function UpdateGameSettings()
{
GI.static.UpdateGameSettings(Self, GIC, MSKGS);
`Log_Trace();
if (GI != None)
{
GI.UpdateGameSettings(Self, GIC, MSKGS);
}
}
protected function DistributeMoneyAndXP(class<KFPawn_Monster> MonsterClass, const out array<DamageInfo> DamageHistory, Controller Killer)
{
Super.DistributeMoneyAndXP(GI.static.PickProxyZed(MonsterClass, MSKGS), DamageHistory, Killer);
`Log_Trace();
Super.DistributeMoneyAndXP(MSKGS == None ? MonsterClass : MSKGS.PickProxyZed(MonsterClass), DamageHistory, Killer);
}
defaultproperties

View File

@ -1,24 +1,33 @@
class MSKGS_GM_Objective extends KFGameInfo_Objective;
const GI = class'MSKGS_GameInfo';
const GIC = "KFGameContent.KFGameInfo_Objective";
var public MSKGS MSKGS;
var public E_LogLevel LogLevel;
var public IMSKGS_GameInfo GI;
var public IMSKGS MSKGS;
var public E_LogLevel LogLevel;
simulated function ExileServerUsingKickBan()
public simulated function ExileServerUsingKickBan()
{
`Log_Trace();
return;
}
public function UpdateGameSettings()
{
GI.static.UpdateGameSettings(Self, GIC, MSKGS);
`Log_Trace();
if (GI != None)
{
GI.UpdateGameSettings(Self, GIC, MSKGS);
}
}
protected function DistributeMoneyAndXP(class<KFPawn_Monster> MonsterClass, const out array<DamageInfo> DamageHistory, Controller Killer)
{
Super.DistributeMoneyAndXP(GI.static.PickProxyZed(MonsterClass, MSKGS), DamageHistory, Killer);
`Log_Trace();
Super.DistributeMoneyAndXP(MSKGS == None ? MonsterClass : MSKGS.PickProxyZed(MonsterClass), DamageHistory, Killer);
}
defaultproperties

View File

@ -1,24 +1,33 @@
class MSKGS_GM_Survival extends KFGameInfo_Survival;
const GI = class'MSKGS_GameInfo';
const GIC = "KFGameContent.KFGameInfo_Survival";
var public MSKGS MSKGS;
var public E_LogLevel LogLevel;
var public IMSKGS_GameInfo GI;
var public IMSKGS MSKGS;
var public E_LogLevel LogLevel;
simulated function ExileServerUsingKickBan()
public simulated function ExileServerUsingKickBan()
{
`Log_Trace();
return;
}
public function UpdateGameSettings()
{
GI.static.UpdateGameSettings(Self, GIC, MSKGS);
`Log_Trace();
if (GI != None)
{
GI.UpdateGameSettings(Self, GIC, MSKGS);
}
}
protected function DistributeMoneyAndXP(class<KFPawn_Monster> MonsterClass, const out array<DamageInfo> DamageHistory, Controller Killer)
{
Super.DistributeMoneyAndXP(GI.static.PickProxyZed(MonsterClass, MSKGS), DamageHistory, Killer);
`Log_Trace();
Super.DistributeMoneyAndXP(MSKGS == None ? MonsterClass : MSKGS.PickProxyZed(MonsterClass), DamageHistory, Killer);
}
defaultproperties

View File

@ -1,24 +1,33 @@
class MSKGS_GM_VersusSurvival extends KFGameInfo_VersusSurvival;
const GI = class'MSKGS_GameInfo';
const GIC = "KFGameContent.KFGameInfo_VersusSurvival";
var public MSKGS MSKGS;
var public E_LogLevel LogLevel;
var public IMSKGS_GameInfo GI;
var public IMSKGS MSKGS;
var public E_LogLevel LogLevel;
simulated function ExileServerUsingKickBan()
public simulated function ExileServerUsingKickBan()
{
`Log_Trace();
return;
}
public function UpdateGameSettings()
{
GI.static.UpdateGameSettings(Self, GIC, MSKGS);
`Log_Trace();
if (GI != None)
{
GI.UpdateGameSettings(Self, GIC, MSKGS);
}
}
protected function DistributeMoneyAndXP(class<KFPawn_Monster> MonsterClass, const out array<DamageInfo> DamageHistory, Controller Killer)
{
Super.DistributeMoneyAndXP(GI.static.PickProxyZed(MonsterClass, MSKGS), DamageHistory, Killer);
`Log_Trace();
Super.DistributeMoneyAndXP(MSKGS == None ? MonsterClass : MSKGS.PickProxyZed(MonsterClass), DamageHistory, Killer);
}
defaultproperties

View File

@ -1,24 +1,33 @@
class MSKGS_GM_WeeklySurvival extends KFGameInfo_WeeklySurvival;
const GI = class'MSKGS_GameInfo';
const GIC = "KFGameContent.KFGameInfo_WeeklySurvival";
var public MSKGS MSKGS;
var public E_LogLevel LogLevel;
var public IMSKGS_GameInfo GI;
var public IMSKGS MSKGS;
var public E_LogLevel LogLevel;
simulated function ExileServerUsingKickBan()
public simulated function ExileServerUsingKickBan()
{
`Log_Trace();
return;
}
public function UpdateGameSettings()
{
GI.static.UpdateGameSettings(Self, GIC, MSKGS);
`Log_Trace();
if (GI != None)
{
GI.UpdateGameSettings(Self, GIC, MSKGS);
}
}
protected function DistributeMoneyAndXP(class<KFPawn_Monster> MonsterClass, const out array<DamageInfo> DamageHistory, Controller Killer)
{
Super.DistributeMoneyAndXP(GI.static.PickProxyZed(MonsterClass, MSKGS), DamageHistory, Killer);
`Log_Trace();
Super.DistributeMoneyAndXP(MSKGS == None ? MonsterClass : MSKGS.PickProxyZed(MonsterClass), DamageHistory, Killer);
}
defaultproperties

View File

@ -1,636 +0,0 @@
class MSKGS_GameInfo extends Object;
const CfgXPBoost = class'CfgXPBoost';
const CfgSrvRank = class'CfgSrvRank';
public static function UpdateGameSettings(KFGameInfo_Survival KFGI, string GameModeClass, MSKGS MSKGS)
{
local name SessionName;
local KFOnlineGameSettings KFGameSettings;
local int NumHumanPlayers;
local KFGameEngine KFEngine;
local PlayerController PC;
if (KFGI.WorldInfo.NetMode == NM_DedicatedServer || KFGI.WorldInfo.NetMode == NM_ListenServer)
{
if (KFGI.GameInterface != None)
{
KFEngine = KFGameEngine(class'Engine'.static.GetEngine());
SessionName = KFGI.PlayerReplicationInfoClass.default.SessionName;
if (KFGI.PlayfabInter != None && KFGI.PlayfabInter.GetGameSettings() != None)
{
KFGameSettings = KFOnlineGameSettings(KFGI.PlayfabInter.GetGameSettings());
KFGameSettings.bAvailableForTakeover = KFEngine.bAvailableForTakeover;
}
else
{
KFGameSettings = KFOnlineGameSettings(KFGI.GameInterface.GetGameSettings(SessionName));
}
if (KFGameSettings != None)
{
KFGameSettings.Mode = KFGI.default.GameModes.Find('ClassNameAndPath', GameModeClass);
KFGameSettings.Difficulty = KFGI.GameDifficulty;
if (KFGI.WaveNum == 0)
{
KFGameSettings.bInProgress = false;
KFGameSettings.CurrentWave = 1;
}
else
{
KFGameSettings.bInProgress = true;
KFGameSettings.CurrentWave = KFGI.WaveNum;
}
if (KFGI.MyKFGRI != None)
{
KFGameSettings.NumWaves = KFGI.MyKFGRI.GetFinalWaveNum();
KFGI.MyKFGRI.bCustom = CfgSrvRank.default.bCustom;
}
else
{
KFGameSettings.NumWaves = KFGI.WaveMax - 1;
}
if (MSKGS == None || !MSKGS.XPNotifications || MSKGS.XPBoost <= 0)
{
KFGameSettings.OwningPlayerName = class'GameReplicationInfo'.default.ServerName;
}
else if (MSKGS.XPBoost >= CfgXPBoost.default.MaxBoost)
{
KFGameSettings.OwningPlayerName = class'GameReplicationInfo'.default.ServerName $ " | +" $ CfgXPBoost.default.MaxBoost $ "% XP";
}
else
{
KFGameSettings.OwningPlayerName = class'GameReplicationInfo'.default.ServerName $ " | +" $ MSKGS.XPBoost $ "% XP";
}
KFGameSettings.NumPublicConnections = KFGI.MaxPlayersAllowed;
KFGameSettings.bRequiresPassword = KFGI.RequiresPassword();
KFGameSettings.bCustom = CfgSrvRank.default.bCustom;
KFGameSettings.bUsesStats = CfgSrvRank.default.bUsesStats;
KFGameSettings.NumSpectators = KFGI.NumSpectators;
if (KFGI.WorldInfo.IsConsoleDedicatedServer() || KFGI.WorldInfo.IsEOSDedicatedServer())
{
KFGameSettings.MapName = KFGI.WorldInfo.GetMapName(true);
foreach KFGI.WorldInfo.AllControllers(class'PlayerController', PC)
if (PC.bIsPlayer
&& PC.PlayerReplicationInfo != None
&& !PC.PlayerReplicationInfo.bOnlySpectator
&& !PC.PlayerReplicationInfo.bBot)
NumHumanPlayers++;
KFGameSettings.NumOpenPublicConnections = KFGameSettings.NumPublicConnections - NumHumanPlayers;
}
if (KFGI.PlayfabInter != None && KFGI.PlayfabInter.IsRegisteredWithPlayfab())
{
KFGI.PlayfabInter.ServerUpdateOnlineGame();
if (KFGI.WorldInfo.IsEOSDedicatedServer())
{
KFGI.GameInterface.UpdateOnlineGame(SessionName, KFGameSettings, true);
}
}
else
{
KFGI.GameInterface.UpdateOnlineGame(SessionName, KFGameSettings, true);
}
}
}
}
}
public static function class<KFPawn_Monster> PickProxyZed(class<KFPawn_Monster> MonsterClass, MSKGS MSKGS)
{
local String SMC;
local Name NMC;
SMC = String(MonsterClass);
NMC = Name(SMC);
switch (MSKGS.XPBoost)
{
case 0: return MonsterClass;
case 10: return PickProxyZed010(NMC, MonsterClass);
case 20: return PickProxyZed020(NMC, MonsterClass);
case 30: return PickProxyZed030(NMC, MonsterClass);
case 40: return PickProxyZed040(NMC, MonsterClass);
case 50: return PickProxyZed050(NMC, MonsterClass);
case 60: return PickProxyZed060(NMC, MonsterClass);
case 70: return PickProxyZed070(NMC, MonsterClass);
case 80: return PickProxyZed080(NMC, MonsterClass);
case 90: return PickProxyZed090(NMC, MonsterClass);
case 100: return PickProxyZed100(NMC, MonsterClass);
default: return PickProxyZed100(NMC, MonsterClass);
}
}
private static function class<KFPawn_Monster> PickProxyZed010(Name MonsterClass, class<KFPawn_Monster> DefMonsterClass)
{
switch (MonsterClass)
{
case 'KFPawn_ZedBloat': return class'Proxy_KFPawn_ZedBloat_010';
case 'KFPawn_ZedBloatKing': return class'Proxy_KFPawn_ZedBloatKing_010';
case 'KFPawn_ZedBloatKing_SantasWorkshop': return class'Proxy_KFPawn_ZedBloatKing_SantasWorkshop_010';
case 'KFPawn_ZedBloatKingSubspawn': return class'Proxy_KFPawn_ZedBloatKingSubspawn_010';
case 'KFPawn_ZedClot_Alpha': return class'Proxy_KFPawn_ZedClot_Alpha_010';
case 'KFPawn_ZedClot_AlphaKing': return class'Proxy_KFPawn_ZedClot_AlphaKing_010';
case 'KFPawn_ZedClot_Cyst': return class'Proxy_KFPawn_ZedClot_Cyst_010';
case 'KFPawn_ZedClot_Slasher': return class'Proxy_KFPawn_ZedClot_Slasher_010';
case 'KFPawn_ZedCrawler': return class'Proxy_KFPawn_ZedCrawler_010';
case 'KFPawn_ZedCrawlerKing': return class'Proxy_KFPawn_ZedCrawlerKing_010';
case 'KFPawn_ZedDAR': return class'Proxy_KFPawn_ZedDAR_010';
case 'KFPawn_ZedDAR_EMP': return class'Proxy_KFPawn_ZedDAR_EMP_010';
case 'KFPawn_ZedDAR_Laser': return class'Proxy_KFPawn_ZedDAR_Laser_010';
case 'KFPawn_ZedDAR_Rocket': return class'Proxy_KFPawn_ZedDAR_Rocket_010';
case 'KFPawn_ZedFleshpound': return class'Proxy_KFPawn_ZedFleshpound_010';
case 'KFPawn_ZedFleshpoundKing': return class'Proxy_KFPawn_ZedFleshpoundKing_010';
case 'KFPawn_ZedFleshpoundMini': return class'Proxy_KFPawn_ZedFleshpoundMini_010';
case 'KFPawn_ZedGorefast': return class'Proxy_KFPawn_ZedGorefast_010';
case 'KFPawn_ZedGorefastDualBlade': return class'Proxy_KFPawn_ZedGorefastDualBlade_010';
case 'KFPawn_ZedHans': return class'Proxy_KFPawn_ZedHans_010';
case 'KFPawn_ZedHusk': return class'Proxy_KFPawn_ZedHusk_010';
case 'KFPawn_ZedMatriarch': return class'Proxy_KFPawn_ZedMatriarch_010';
case 'KFPawn_ZedPatriarch': return class'Proxy_KFPawn_ZedPatriarch_010';
case 'KFPawn_ZedScrake': return class'Proxy_KFPawn_ZedScrake_010';
case 'KFPawn_ZedSiren': return class'Proxy_KFPawn_ZedSiren_010';
case 'KFPawn_ZedStalker': return class'Proxy_KFPawn_ZedStalker_010';
case 'WMPawn_ZedClot_Slasher_Omega': return class'Proxy_WMPawn_ZedClot_Slasher_Omega_010';
case 'WMPawn_ZedCrawler_Mini': return class'Proxy_WMPawn_ZedCrawler_Mini_010';
case 'WMPawn_ZedCrawler_Medium': return class'Proxy_WMPawn_ZedCrawler_Medium_010';
case 'WMPawn_ZedCrawler_Big': return class'Proxy_WMPawn_ZedCrawler_Big_010';
case 'WMPawn_ZedCrawler_Huge': return class'Proxy_WMPawn_ZedCrawler_Huge_010';
case 'WMPawn_ZedCrawler_Ultra': return class'Proxy_WMPawn_ZedCrawler_Ultra_010';
case 'WMPawn_ZedFleshpound_Predator': return class'Proxy_WMPawn_ZedFleshpound_Predator_010';
case 'WMPawn_ZedFleshpound_Omega': return class'Proxy_WMPawn_ZedFleshpound_Omega_010';
case 'WMPawn_ZedGorefast_Omega': return class'Proxy_WMPawn_ZedGorefast_Omega_010';
case 'WMPawn_ZedHusk_Tiny': return class'Proxy_WMPawn_ZedHusk_Tiny_010';
case 'WMPawn_ZedHusk_Omega': return class'Proxy_WMPawn_ZedHusk_Omega_010';
case 'WMPawn_ZedScrake_Tiny': return class'Proxy_WMPawn_ZedScrake_Tiny_010';
case 'WMPawn_ZedScrake_Omega': return class'Proxy_WMPawn_ZedScrake_Omega_010';
case 'WMPawn_ZedScrake_Emperor': return class'Proxy_WMPawn_ZedScrake_Emperor_010';
case 'WMPawn_ZedSiren_Omega': return class'Proxy_WMPawn_ZedSiren_Omega_010';
case 'WMPawn_ZedStalker_Omega': return class'Proxy_WMPawn_ZedStalker_Omega_010';
default: return DefMonsterClass;
}
}
private static function class<KFPawn_Monster> PickProxyZed020(Name MonsterClass, class<KFPawn_Monster> DefMonsterClass)
{
switch (MonsterClass)
{
case 'KFPawn_ZedBloat': return class'Proxy_KFPawn_ZedBloat_020';
case 'KFPawn_ZedBloatKing': return class'Proxy_KFPawn_ZedBloatKing_020';
case 'KFPawn_ZedBloatKing_SantasWorkshop': return class'Proxy_KFPawn_ZedBloatKing_SantasWorkshop_020';
case 'KFPawn_ZedBloatKingSubspawn': return class'Proxy_KFPawn_ZedBloatKingSubspawn_020';
case 'KFPawn_ZedClot_Alpha': return class'Proxy_KFPawn_ZedClot_Alpha_020';
case 'KFPawn_ZedClot_AlphaKing': return class'Proxy_KFPawn_ZedClot_AlphaKing_020';
case 'KFPawn_ZedClot_Cyst': return class'Proxy_KFPawn_ZedClot_Cyst_020';
case 'KFPawn_ZedClot_Slasher': return class'Proxy_KFPawn_ZedClot_Slasher_020';
case 'KFPawn_ZedCrawler': return class'Proxy_KFPawn_ZedCrawler_020';
case 'KFPawn_ZedCrawlerKing': return class'Proxy_KFPawn_ZedCrawlerKing_020';
case 'KFPawn_ZedDAR': return class'Proxy_KFPawn_ZedDAR_020';
case 'KFPawn_ZedDAR_EMP': return class'Proxy_KFPawn_ZedDAR_EMP_020';
case 'KFPawn_ZedDAR_Laser': return class'Proxy_KFPawn_ZedDAR_Laser_020';
case 'KFPawn_ZedDAR_Rocket': return class'Proxy_KFPawn_ZedDAR_Rocket_020';
case 'KFPawn_ZedFleshpound': return class'Proxy_KFPawn_ZedFleshpound_020';
case 'KFPawn_ZedFleshpoundKing': return class'Proxy_KFPawn_ZedFleshpoundKing_020';
case 'KFPawn_ZedFleshpoundMini': return class'Proxy_KFPawn_ZedFleshpoundMini_020';
case 'KFPawn_ZedGorefast': return class'Proxy_KFPawn_ZedGorefast_020';
case 'KFPawn_ZedGorefastDualBlade': return class'Proxy_KFPawn_ZedGorefastDualBlade_020';
case 'KFPawn_ZedHans': return class'Proxy_KFPawn_ZedHans_020';
case 'KFPawn_ZedHusk': return class'Proxy_KFPawn_ZedHusk_020';
case 'KFPawn_ZedMatriarch': return class'Proxy_KFPawn_ZedMatriarch_020';
case 'KFPawn_ZedPatriarch': return class'Proxy_KFPawn_ZedPatriarch_020';
case 'KFPawn_ZedScrake': return class'Proxy_KFPawn_ZedScrake_020';
case 'KFPawn_ZedSiren': return class'Proxy_KFPawn_ZedSiren_020';
case 'KFPawn_ZedStalker': return class'Proxy_KFPawn_ZedStalker_020';
case 'WMPawn_ZedClot_Slasher_Omega': return class'Proxy_WMPawn_ZedClot_Slasher_Omega_020';
case 'WMPawn_ZedCrawler_Mini': return class'Proxy_WMPawn_ZedCrawler_Mini_020';
case 'WMPawn_ZedCrawler_Medium': return class'Proxy_WMPawn_ZedCrawler_Medium_020';
case 'WMPawn_ZedCrawler_Big': return class'Proxy_WMPawn_ZedCrawler_Big_020';
case 'WMPawn_ZedCrawler_Huge': return class'Proxy_WMPawn_ZedCrawler_Huge_020';
case 'WMPawn_ZedCrawler_Ultra': return class'Proxy_WMPawn_ZedCrawler_Ultra_020';
case 'WMPawn_ZedFleshpound_Predator': return class'Proxy_WMPawn_ZedFleshpound_Predator_020';
case 'WMPawn_ZedFleshpound_Omega': return class'Proxy_WMPawn_ZedFleshpound_Omega_020';
case 'WMPawn_ZedGorefast_Omega': return class'Proxy_WMPawn_ZedGorefast_Omega_020';
case 'WMPawn_ZedHusk_Tiny': return class'Proxy_WMPawn_ZedHusk_Tiny_020';
case 'WMPawn_ZedHusk_Omega': return class'Proxy_WMPawn_ZedHusk_Omega_020';
case 'WMPawn_ZedScrake_Tiny': return class'Proxy_WMPawn_ZedScrake_Tiny_020';
case 'WMPawn_ZedScrake_Omega': return class'Proxy_WMPawn_ZedScrake_Omega_020';
case 'WMPawn_ZedScrake_Emperor': return class'Proxy_WMPawn_ZedScrake_Emperor_020';
case 'WMPawn_ZedSiren_Omega': return class'Proxy_WMPawn_ZedSiren_Omega_020';
case 'WMPawn_ZedStalker_Omega': return class'Proxy_WMPawn_ZedStalker_Omega_020';
default: return DefMonsterClass;
}
}
private static function class<KFPawn_Monster> PickProxyZed030(Name MonsterClass, class<KFPawn_Monster> DefMonsterClass)
{
switch (MonsterClass)
{
case 'KFPawn_ZedBloat': return class'Proxy_KFPawn_ZedBloat_030';
case 'KFPawn_ZedBloatKing': return class'Proxy_KFPawn_ZedBloatKing_030';
case 'KFPawn_ZedBloatKing_SantasWorkshop': return class'Proxy_KFPawn_ZedBloatKing_SantasWorkshop_030';
case 'KFPawn_ZedBloatKingSubspawn': return class'Proxy_KFPawn_ZedBloatKingSubspawn_030';
case 'KFPawn_ZedClot_Alpha': return class'Proxy_KFPawn_ZedClot_Alpha_030';
case 'KFPawn_ZedClot_AlphaKing': return class'Proxy_KFPawn_ZedClot_AlphaKing_030';
case 'KFPawn_ZedClot_Cyst': return class'Proxy_KFPawn_ZedClot_Cyst_030';
case 'KFPawn_ZedClot_Slasher': return class'Proxy_KFPawn_ZedClot_Slasher_030';
case 'KFPawn_ZedCrawler': return class'Proxy_KFPawn_ZedCrawler_030';
case 'KFPawn_ZedCrawlerKing': return class'Proxy_KFPawn_ZedCrawlerKing_030';
case 'KFPawn_ZedDAR': return class'Proxy_KFPawn_ZedDAR_030';
case 'KFPawn_ZedDAR_EMP': return class'Proxy_KFPawn_ZedDAR_EMP_030';
case 'KFPawn_ZedDAR_Laser': return class'Proxy_KFPawn_ZedDAR_Laser_030';
case 'KFPawn_ZedDAR_Rocket': return class'Proxy_KFPawn_ZedDAR_Rocket_030';
case 'KFPawn_ZedFleshpound': return class'Proxy_KFPawn_ZedFleshpound_030';
case 'KFPawn_ZedFleshpoundKing': return class'Proxy_KFPawn_ZedFleshpoundKing_030';
case 'KFPawn_ZedFleshpoundMini': return class'Proxy_KFPawn_ZedFleshpoundMini_030';
case 'KFPawn_ZedGorefast': return class'Proxy_KFPawn_ZedGorefast_030';
case 'KFPawn_ZedGorefastDualBlade': return class'Proxy_KFPawn_ZedGorefastDualBlade_030';
case 'KFPawn_ZedHans': return class'Proxy_KFPawn_ZedHans_030';
case 'KFPawn_ZedHusk': return class'Proxy_KFPawn_ZedHusk_030';
case 'KFPawn_ZedMatriarch': return class'Proxy_KFPawn_ZedMatriarch_030';
case 'KFPawn_ZedPatriarch': return class'Proxy_KFPawn_ZedPatriarch_030';
case 'KFPawn_ZedScrake': return class'Proxy_KFPawn_ZedScrake_030';
case 'KFPawn_ZedSiren': return class'Proxy_KFPawn_ZedSiren_030';
case 'KFPawn_ZedStalker': return class'Proxy_KFPawn_ZedStalker_030';
case 'WMPawn_ZedClot_Slasher_Omega': return class'Proxy_WMPawn_ZedClot_Slasher_Omega_030';
case 'WMPawn_ZedCrawler_Mini': return class'Proxy_WMPawn_ZedCrawler_Mini_030';
case 'WMPawn_ZedCrawler_Medium': return class'Proxy_WMPawn_ZedCrawler_Medium_030';
case 'WMPawn_ZedCrawler_Big': return class'Proxy_WMPawn_ZedCrawler_Big_030';
case 'WMPawn_ZedCrawler_Huge': return class'Proxy_WMPawn_ZedCrawler_Huge_030';
case 'WMPawn_ZedCrawler_Ultra': return class'Proxy_WMPawn_ZedCrawler_Ultra_030';
case 'WMPawn_ZedFleshpound_Predator': return class'Proxy_WMPawn_ZedFleshpound_Predator_030';
case 'WMPawn_ZedFleshpound_Omega': return class'Proxy_WMPawn_ZedFleshpound_Omega_030';
case 'WMPawn_ZedGorefast_Omega': return class'Proxy_WMPawn_ZedGorefast_Omega_030';
case 'WMPawn_ZedHusk_Tiny': return class'Proxy_WMPawn_ZedHusk_Tiny_030';
case 'WMPawn_ZedHusk_Omega': return class'Proxy_WMPawn_ZedHusk_Omega_030';
case 'WMPawn_ZedScrake_Tiny': return class'Proxy_WMPawn_ZedScrake_Tiny_030';
case 'WMPawn_ZedScrake_Omega': return class'Proxy_WMPawn_ZedScrake_Omega_030';
case 'WMPawn_ZedScrake_Emperor': return class'Proxy_WMPawn_ZedScrake_Emperor_030';
case 'WMPawn_ZedSiren_Omega': return class'Proxy_WMPawn_ZedSiren_Omega_030';
case 'WMPawn_ZedStalker_Omega': return class'Proxy_WMPawn_ZedStalker_Omega_030';
default: return DefMonsterClass;
}
}
private static function class<KFPawn_Monster> PickProxyZed040(Name MonsterClass, class<KFPawn_Monster> DefMonsterClass)
{
switch (MonsterClass)
{
case 'KFPawn_ZedBloat': return class'Proxy_KFPawn_ZedBloat_040';
case 'KFPawn_ZedBloatKing': return class'Proxy_KFPawn_ZedBloatKing_040';
case 'KFPawn_ZedBloatKing_SantasWorkshop': return class'Proxy_KFPawn_ZedBloatKing_SantasWorkshop_040';
case 'KFPawn_ZedBloatKingSubspawn': return class'Proxy_KFPawn_ZedBloatKingSubspawn_040';
case 'KFPawn_ZedClot_Alpha': return class'Proxy_KFPawn_ZedClot_Alpha_040';
case 'KFPawn_ZedClot_AlphaKing': return class'Proxy_KFPawn_ZedClot_AlphaKing_040';
case 'KFPawn_ZedClot_Cyst': return class'Proxy_KFPawn_ZedClot_Cyst_040';
case 'KFPawn_ZedClot_Slasher': return class'Proxy_KFPawn_ZedClot_Slasher_040';
case 'KFPawn_ZedCrawler': return class'Proxy_KFPawn_ZedCrawler_040';
case 'KFPawn_ZedCrawlerKing': return class'Proxy_KFPawn_ZedCrawlerKing_040';
case 'KFPawn_ZedDAR': return class'Proxy_KFPawn_ZedDAR_040';
case 'KFPawn_ZedDAR_EMP': return class'Proxy_KFPawn_ZedDAR_EMP_040';
case 'KFPawn_ZedDAR_Laser': return class'Proxy_KFPawn_ZedDAR_Laser_040';
case 'KFPawn_ZedDAR_Rocket': return class'Proxy_KFPawn_ZedDAR_Rocket_040';
case 'KFPawn_ZedFleshpound': return class'Proxy_KFPawn_ZedFleshpound_040';
case 'KFPawn_ZedFleshpoundKing': return class'Proxy_KFPawn_ZedFleshpoundKing_040';
case 'KFPawn_ZedFleshpoundMini': return class'Proxy_KFPawn_ZedFleshpoundMini_040';
case 'KFPawn_ZedGorefast': return class'Proxy_KFPawn_ZedGorefast_040';
case 'KFPawn_ZedGorefastDualBlade': return class'Proxy_KFPawn_ZedGorefastDualBlade_040';
case 'KFPawn_ZedHans': return class'Proxy_KFPawn_ZedHans_040';
case 'KFPawn_ZedHusk': return class'Proxy_KFPawn_ZedHusk_040';
case 'KFPawn_ZedMatriarch': return class'Proxy_KFPawn_ZedMatriarch_040';
case 'KFPawn_ZedPatriarch': return class'Proxy_KFPawn_ZedPatriarch_040';
case 'KFPawn_ZedScrake': return class'Proxy_KFPawn_ZedScrake_040';
case 'KFPawn_ZedSiren': return class'Proxy_KFPawn_ZedSiren_040';
case 'KFPawn_ZedStalker': return class'Proxy_KFPawn_ZedStalker_040';
case 'WMPawn_ZedClot_Slasher_Omega': return class'Proxy_WMPawn_ZedClot_Slasher_Omega_040';
case 'WMPawn_ZedCrawler_Mini': return class'Proxy_WMPawn_ZedCrawler_Mini_040';
case 'WMPawn_ZedCrawler_Medium': return class'Proxy_WMPawn_ZedCrawler_Medium_040';
case 'WMPawn_ZedCrawler_Big': return class'Proxy_WMPawn_ZedCrawler_Big_040';
case 'WMPawn_ZedCrawler_Huge': return class'Proxy_WMPawn_ZedCrawler_Huge_040';
case 'WMPawn_ZedCrawler_Ultra': return class'Proxy_WMPawn_ZedCrawler_Ultra_040';
case 'WMPawn_ZedFleshpound_Predator': return class'Proxy_WMPawn_ZedFleshpound_Predator_040';
case 'WMPawn_ZedFleshpound_Omega': return class'Proxy_WMPawn_ZedFleshpound_Omega_040';
case 'WMPawn_ZedGorefast_Omega': return class'Proxy_WMPawn_ZedGorefast_Omega_040';
case 'WMPawn_ZedHusk_Tiny': return class'Proxy_WMPawn_ZedHusk_Tiny_040';
case 'WMPawn_ZedHusk_Omega': return class'Proxy_WMPawn_ZedHusk_Omega_040';
case 'WMPawn_ZedScrake_Tiny': return class'Proxy_WMPawn_ZedScrake_Tiny_040';
case 'WMPawn_ZedScrake_Omega': return class'Proxy_WMPawn_ZedScrake_Omega_040';
case 'WMPawn_ZedScrake_Emperor': return class'Proxy_WMPawn_ZedScrake_Emperor_040';
case 'WMPawn_ZedSiren_Omega': return class'Proxy_WMPawn_ZedSiren_Omega_040';
case 'WMPawn_ZedStalker_Omega': return class'Proxy_WMPawn_ZedStalker_Omega_040';
default: return DefMonsterClass;
}
}
private static function class<KFPawn_Monster> PickProxyZed050(Name MonsterClass, class<KFPawn_Monster> DefMonsterClass)
{
switch (MonsterClass)
{
case 'KFPawn_ZedBloat': return class'Proxy_KFPawn_ZedBloat_050';
case 'KFPawn_ZedBloatKing': return class'Proxy_KFPawn_ZedBloatKing_050';
case 'KFPawn_ZedBloatKing_SantasWorkshop': return class'Proxy_KFPawn_ZedBloatKing_SantasWorkshop_050';
case 'KFPawn_ZedBloatKingSubspawn': return class'Proxy_KFPawn_ZedBloatKingSubspawn_050';
case 'KFPawn_ZedClot_Alpha': return class'Proxy_KFPawn_ZedClot_Alpha_050';
case 'KFPawn_ZedClot_AlphaKing': return class'Proxy_KFPawn_ZedClot_AlphaKing_050';
case 'KFPawn_ZedClot_Cyst': return class'Proxy_KFPawn_ZedClot_Cyst_050';
case 'KFPawn_ZedClot_Slasher': return class'Proxy_KFPawn_ZedClot_Slasher_050';
case 'KFPawn_ZedCrawler': return class'Proxy_KFPawn_ZedCrawler_050';
case 'KFPawn_ZedCrawlerKing': return class'Proxy_KFPawn_ZedCrawlerKing_050';
case 'KFPawn_ZedDAR': return class'Proxy_KFPawn_ZedDAR_050';
case 'KFPawn_ZedDAR_EMP': return class'Proxy_KFPawn_ZedDAR_EMP_050';
case 'KFPawn_ZedDAR_Laser': return class'Proxy_KFPawn_ZedDAR_Laser_050';
case 'KFPawn_ZedDAR_Rocket': return class'Proxy_KFPawn_ZedDAR_Rocket_050';
case 'KFPawn_ZedFleshpound': return class'Proxy_KFPawn_ZedFleshpound_050';
case 'KFPawn_ZedFleshpoundKing': return class'Proxy_KFPawn_ZedFleshpoundKing_050';
case 'KFPawn_ZedFleshpoundMini': return class'Proxy_KFPawn_ZedFleshpoundMini_050';
case 'KFPawn_ZedGorefast': return class'Proxy_KFPawn_ZedGorefast_050';
case 'KFPawn_ZedGorefastDualBlade': return class'Proxy_KFPawn_ZedGorefastDualBlade_050';
case 'KFPawn_ZedHans': return class'Proxy_KFPawn_ZedHans_050';
case 'KFPawn_ZedHusk': return class'Proxy_KFPawn_ZedHusk_050';
case 'KFPawn_ZedMatriarch': return class'Proxy_KFPawn_ZedMatriarch_050';
case 'KFPawn_ZedPatriarch': return class'Proxy_KFPawn_ZedPatriarch_050';
case 'KFPawn_ZedScrake': return class'Proxy_KFPawn_ZedScrake_050';
case 'KFPawn_ZedSiren': return class'Proxy_KFPawn_ZedSiren_050';
case 'KFPawn_ZedStalker': return class'Proxy_KFPawn_ZedStalker_050';
case 'WMPawn_ZedClot_Slasher_Omega': return class'Proxy_WMPawn_ZedClot_Slasher_Omega_050';
case 'WMPawn_ZedCrawler_Mini': return class'Proxy_WMPawn_ZedCrawler_Mini_050';
case 'WMPawn_ZedCrawler_Medium': return class'Proxy_WMPawn_ZedCrawler_Medium_050';
case 'WMPawn_ZedCrawler_Big': return class'Proxy_WMPawn_ZedCrawler_Big_050';
case 'WMPawn_ZedCrawler_Huge': return class'Proxy_WMPawn_ZedCrawler_Huge_050';
case 'WMPawn_ZedCrawler_Ultra': return class'Proxy_WMPawn_ZedCrawler_Ultra_050';
case 'WMPawn_ZedFleshpound_Predator': return class'Proxy_WMPawn_ZedFleshpound_Predator_050';
case 'WMPawn_ZedFleshpound_Omega': return class'Proxy_WMPawn_ZedFleshpound_Omega_050';
case 'WMPawn_ZedGorefast_Omega': return class'Proxy_WMPawn_ZedGorefast_Omega_050';
case 'WMPawn_ZedHusk_Tiny': return class'Proxy_WMPawn_ZedHusk_Tiny_050';
case 'WMPawn_ZedHusk_Omega': return class'Proxy_WMPawn_ZedHusk_Omega_050';
case 'WMPawn_ZedScrake_Tiny': return class'Proxy_WMPawn_ZedScrake_Tiny_050';
case 'WMPawn_ZedScrake_Omega': return class'Proxy_WMPawn_ZedScrake_Omega_050';
case 'WMPawn_ZedScrake_Emperor': return class'Proxy_WMPawn_ZedScrake_Emperor_050';
case 'WMPawn_ZedSiren_Omega': return class'Proxy_WMPawn_ZedSiren_Omega_050';
case 'WMPawn_ZedStalker_Omega': return class'Proxy_WMPawn_ZedStalker_Omega_050';
default: return DefMonsterClass;
}
}
private static function class<KFPawn_Monster> PickProxyZed060(Name MonsterClass, class<KFPawn_Monster> DefMonsterClass)
{
switch (MonsterClass)
{
case 'KFPawn_ZedBloat': return class'Proxy_KFPawn_ZedBloat_060';
case 'KFPawn_ZedBloatKing': return class'Proxy_KFPawn_ZedBloatKing_060';
case 'KFPawn_ZedBloatKing_SantasWorkshop': return class'Proxy_KFPawn_ZedBloatKing_SantasWorkshop_060';
case 'KFPawn_ZedBloatKingSubspawn': return class'Proxy_KFPawn_ZedBloatKingSubspawn_060';
case 'KFPawn_ZedClot_Alpha': return class'Proxy_KFPawn_ZedClot_Alpha_060';
case 'KFPawn_ZedClot_AlphaKing': return class'Proxy_KFPawn_ZedClot_AlphaKing_060';
case 'KFPawn_ZedClot_Cyst': return class'Proxy_KFPawn_ZedClot_Cyst_060';
case 'KFPawn_ZedClot_Slasher': return class'Proxy_KFPawn_ZedClot_Slasher_060';
case 'KFPawn_ZedCrawler': return class'Proxy_KFPawn_ZedCrawler_060';
case 'KFPawn_ZedCrawlerKing': return class'Proxy_KFPawn_ZedCrawlerKing_060';
case 'KFPawn_ZedDAR': return class'Proxy_KFPawn_ZedDAR_060';
case 'KFPawn_ZedDAR_EMP': return class'Proxy_KFPawn_ZedDAR_EMP_060';
case 'KFPawn_ZedDAR_Laser': return class'Proxy_KFPawn_ZedDAR_Laser_060';
case 'KFPawn_ZedDAR_Rocket': return class'Proxy_KFPawn_ZedDAR_Rocket_060';
case 'KFPawn_ZedFleshpound': return class'Proxy_KFPawn_ZedFleshpound_060';
case 'KFPawn_ZedFleshpoundKing': return class'Proxy_KFPawn_ZedFleshpoundKing_060';
case 'KFPawn_ZedFleshpoundMini': return class'Proxy_KFPawn_ZedFleshpoundMini_060';
case 'KFPawn_ZedGorefast': return class'Proxy_KFPawn_ZedGorefast_060';
case 'KFPawn_ZedGorefastDualBlade': return class'Proxy_KFPawn_ZedGorefastDualBlade_060';
case 'KFPawn_ZedHans': return class'Proxy_KFPawn_ZedHans_060';
case 'KFPawn_ZedHusk': return class'Proxy_KFPawn_ZedHusk_060';
case 'KFPawn_ZedMatriarch': return class'Proxy_KFPawn_ZedMatriarch_060';
case 'KFPawn_ZedPatriarch': return class'Proxy_KFPawn_ZedPatriarch_060';
case 'KFPawn_ZedScrake': return class'Proxy_KFPawn_ZedScrake_060';
case 'KFPawn_ZedSiren': return class'Proxy_KFPawn_ZedSiren_060';
case 'KFPawn_ZedStalker': return class'Proxy_KFPawn_ZedStalker_060';
case 'WMPawn_ZedClot_Slasher_Omega': return class'Proxy_WMPawn_ZedClot_Slasher_Omega_060';
case 'WMPawn_ZedCrawler_Mini': return class'Proxy_WMPawn_ZedCrawler_Mini_060';
case 'WMPawn_ZedCrawler_Medium': return class'Proxy_WMPawn_ZedCrawler_Medium_060';
case 'WMPawn_ZedCrawler_Big': return class'Proxy_WMPawn_ZedCrawler_Big_060';
case 'WMPawn_ZedCrawler_Huge': return class'Proxy_WMPawn_ZedCrawler_Huge_060';
case 'WMPawn_ZedCrawler_Ultra': return class'Proxy_WMPawn_ZedCrawler_Ultra_060';
case 'WMPawn_ZedFleshpound_Predator': return class'Proxy_WMPawn_ZedFleshpound_Predator_060';
case 'WMPawn_ZedFleshpound_Omega': return class'Proxy_WMPawn_ZedFleshpound_Omega_060';
case 'WMPawn_ZedGorefast_Omega': return class'Proxy_WMPawn_ZedGorefast_Omega_060';
case 'WMPawn_ZedHusk_Tiny': return class'Proxy_WMPawn_ZedHusk_Tiny_060';
case 'WMPawn_ZedHusk_Omega': return class'Proxy_WMPawn_ZedHusk_Omega_060';
case 'WMPawn_ZedScrake_Tiny': return class'Proxy_WMPawn_ZedScrake_Tiny_060';
case 'WMPawn_ZedScrake_Omega': return class'Proxy_WMPawn_ZedScrake_Omega_060';
case 'WMPawn_ZedScrake_Emperor': return class'Proxy_WMPawn_ZedScrake_Emperor_060';
case 'WMPawn_ZedSiren_Omega': return class'Proxy_WMPawn_ZedSiren_Omega_060';
case 'WMPawn_ZedStalker_Omega': return class'Proxy_WMPawn_ZedStalker_Omega_060';
default: return DefMonsterClass;
}
}
private static function class<KFPawn_Monster> PickProxyZed070(Name MonsterClass, class<KFPawn_Monster> DefMonsterClass)
{
switch (MonsterClass)
{
case 'KFPawn_ZedBloat': return class'Proxy_KFPawn_ZedBloat_070';
case 'KFPawn_ZedBloatKing': return class'Proxy_KFPawn_ZedBloatKing_070';
case 'KFPawn_ZedBloatKing_SantasWorkshop': return class'Proxy_KFPawn_ZedBloatKing_SantasWorkshop_070';
case 'KFPawn_ZedBloatKingSubspawn': return class'Proxy_KFPawn_ZedBloatKingSubspawn_070';
case 'KFPawn_ZedClot_Alpha': return class'Proxy_KFPawn_ZedClot_Alpha_070';
case 'KFPawn_ZedClot_AlphaKing': return class'Proxy_KFPawn_ZedClot_AlphaKing_070';
case 'KFPawn_ZedClot_Cyst': return class'Proxy_KFPawn_ZedClot_Cyst_070';
case 'KFPawn_ZedClot_Slasher': return class'Proxy_KFPawn_ZedClot_Slasher_070';
case 'KFPawn_ZedCrawler': return class'Proxy_KFPawn_ZedCrawler_070';
case 'KFPawn_ZedCrawlerKing': return class'Proxy_KFPawn_ZedCrawlerKing_070';
case 'KFPawn_ZedDAR': return class'Proxy_KFPawn_ZedDAR_070';
case 'KFPawn_ZedDAR_EMP': return class'Proxy_KFPawn_ZedDAR_EMP_070';
case 'KFPawn_ZedDAR_Laser': return class'Proxy_KFPawn_ZedDAR_Laser_070';
case 'KFPawn_ZedDAR_Rocket': return class'Proxy_KFPawn_ZedDAR_Rocket_070';
case 'KFPawn_ZedFleshpound': return class'Proxy_KFPawn_ZedFleshpound_070';
case 'KFPawn_ZedFleshpoundKing': return class'Proxy_KFPawn_ZedFleshpoundKing_070';
case 'KFPawn_ZedFleshpoundMini': return class'Proxy_KFPawn_ZedFleshpoundMini_070';
case 'KFPawn_ZedGorefast': return class'Proxy_KFPawn_ZedGorefast_070';
case 'KFPawn_ZedGorefastDualBlade': return class'Proxy_KFPawn_ZedGorefastDualBlade_070';
case 'KFPawn_ZedHans': return class'Proxy_KFPawn_ZedHans_070';
case 'KFPawn_ZedHusk': return class'Proxy_KFPawn_ZedHusk_070';
case 'KFPawn_ZedMatriarch': return class'Proxy_KFPawn_ZedMatriarch_070';
case 'KFPawn_ZedPatriarch': return class'Proxy_KFPawn_ZedPatriarch_070';
case 'KFPawn_ZedScrake': return class'Proxy_KFPawn_ZedScrake_070';
case 'KFPawn_ZedSiren': return class'Proxy_KFPawn_ZedSiren_070';
case 'KFPawn_ZedStalker': return class'Proxy_KFPawn_ZedStalker_070';
case 'WMPawn_ZedClot_Slasher_Omega': return class'Proxy_WMPawn_ZedClot_Slasher_Omega_070';
case 'WMPawn_ZedCrawler_Mini': return class'Proxy_WMPawn_ZedCrawler_Mini_070';
case 'WMPawn_ZedCrawler_Medium': return class'Proxy_WMPawn_ZedCrawler_Medium_070';
case 'WMPawn_ZedCrawler_Big': return class'Proxy_WMPawn_ZedCrawler_Big_070';
case 'WMPawn_ZedCrawler_Huge': return class'Proxy_WMPawn_ZedCrawler_Huge_070';
case 'WMPawn_ZedCrawler_Ultra': return class'Proxy_WMPawn_ZedCrawler_Ultra_070';
case 'WMPawn_ZedFleshpound_Predator': return class'Proxy_WMPawn_ZedFleshpound_Predator_070';
case 'WMPawn_ZedFleshpound_Omega': return class'Proxy_WMPawn_ZedFleshpound_Omega_070';
case 'WMPawn_ZedGorefast_Omega': return class'Proxy_WMPawn_ZedGorefast_Omega_070';
case 'WMPawn_ZedHusk_Tiny': return class'Proxy_WMPawn_ZedHusk_Tiny_070';
case 'WMPawn_ZedHusk_Omega': return class'Proxy_WMPawn_ZedHusk_Omega_070';
case 'WMPawn_ZedScrake_Tiny': return class'Proxy_WMPawn_ZedScrake_Tiny_070';
case 'WMPawn_ZedScrake_Omega': return class'Proxy_WMPawn_ZedScrake_Omega_070';
case 'WMPawn_ZedScrake_Emperor': return class'Proxy_WMPawn_ZedScrake_Emperor_070';
case 'WMPawn_ZedSiren_Omega': return class'Proxy_WMPawn_ZedSiren_Omega_070';
case 'WMPawn_ZedStalker_Omega': return class'Proxy_WMPawn_ZedStalker_Omega_070';
default: return DefMonsterClass;
}
}
private static function class<KFPawn_Monster> PickProxyZed080(Name MonsterClass, class<KFPawn_Monster> DefMonsterClass)
{
switch (MonsterClass)
{
case 'KFPawn_ZedBloat': return class'Proxy_KFPawn_ZedBloat_080';
case 'KFPawn_ZedBloatKing': return class'Proxy_KFPawn_ZedBloatKing_080';
case 'KFPawn_ZedBloatKing_SantasWorkshop': return class'Proxy_KFPawn_ZedBloatKing_SantasWorkshop_080';
case 'KFPawn_ZedBloatKingSubspawn': return class'Proxy_KFPawn_ZedBloatKingSubspawn_080';
case 'KFPawn_ZedClot_Alpha': return class'Proxy_KFPawn_ZedClot_Alpha_080';
case 'KFPawn_ZedClot_AlphaKing': return class'Proxy_KFPawn_ZedClot_AlphaKing_080';
case 'KFPawn_ZedClot_Cyst': return class'Proxy_KFPawn_ZedClot_Cyst_080';
case 'KFPawn_ZedClot_Slasher': return class'Proxy_KFPawn_ZedClot_Slasher_080';
case 'KFPawn_ZedCrawler': return class'Proxy_KFPawn_ZedCrawler_080';
case 'KFPawn_ZedCrawlerKing': return class'Proxy_KFPawn_ZedCrawlerKing_080';
case 'KFPawn_ZedDAR': return class'Proxy_KFPawn_ZedDAR_080';
case 'KFPawn_ZedDAR_EMP': return class'Proxy_KFPawn_ZedDAR_EMP_080';
case 'KFPawn_ZedDAR_Laser': return class'Proxy_KFPawn_ZedDAR_Laser_080';
case 'KFPawn_ZedDAR_Rocket': return class'Proxy_KFPawn_ZedDAR_Rocket_080';
case 'KFPawn_ZedFleshpound': return class'Proxy_KFPawn_ZedFleshpound_080';
case 'KFPawn_ZedFleshpoundKing': return class'Proxy_KFPawn_ZedFleshpoundKing_080';
case 'KFPawn_ZedFleshpoundMini': return class'Proxy_KFPawn_ZedFleshpoundMini_080';
case 'KFPawn_ZedGorefast': return class'Proxy_KFPawn_ZedGorefast_080';
case 'KFPawn_ZedGorefastDualBlade': return class'Proxy_KFPawn_ZedGorefastDualBlade_080';
case 'KFPawn_ZedHans': return class'Proxy_KFPawn_ZedHans_080';
case 'KFPawn_ZedHusk': return class'Proxy_KFPawn_ZedHusk_080';
case 'KFPawn_ZedMatriarch': return class'Proxy_KFPawn_ZedMatriarch_080';
case 'KFPawn_ZedPatriarch': return class'Proxy_KFPawn_ZedPatriarch_080';
case 'KFPawn_ZedScrake': return class'Proxy_KFPawn_ZedScrake_080';
case 'KFPawn_ZedSiren': return class'Proxy_KFPawn_ZedSiren_080';
case 'KFPawn_ZedStalker': return class'Proxy_KFPawn_ZedStalker_080';
case 'WMPawn_ZedClot_Slasher_Omega': return class'Proxy_WMPawn_ZedClot_Slasher_Omega_080';
case 'WMPawn_ZedCrawler_Mini': return class'Proxy_WMPawn_ZedCrawler_Mini_080';
case 'WMPawn_ZedCrawler_Medium': return class'Proxy_WMPawn_ZedCrawler_Medium_080';
case 'WMPawn_ZedCrawler_Big': return class'Proxy_WMPawn_ZedCrawler_Big_080';
case 'WMPawn_ZedCrawler_Huge': return class'Proxy_WMPawn_ZedCrawler_Huge_080';
case 'WMPawn_ZedCrawler_Ultra': return class'Proxy_WMPawn_ZedCrawler_Ultra_080';
case 'WMPawn_ZedFleshpound_Predator': return class'Proxy_WMPawn_ZedFleshpound_Predator_080';
case 'WMPawn_ZedFleshpound_Omega': return class'Proxy_WMPawn_ZedFleshpound_Omega_080';
case 'WMPawn_ZedGorefast_Omega': return class'Proxy_WMPawn_ZedGorefast_Omega_080';
case 'WMPawn_ZedHusk_Tiny': return class'Proxy_WMPawn_ZedHusk_Tiny_080';
case 'WMPawn_ZedHusk_Omega': return class'Proxy_WMPawn_ZedHusk_Omega_080';
case 'WMPawn_ZedScrake_Tiny': return class'Proxy_WMPawn_ZedScrake_Tiny_080';
case 'WMPawn_ZedScrake_Omega': return class'Proxy_WMPawn_ZedScrake_Omega_080';
case 'WMPawn_ZedScrake_Emperor': return class'Proxy_WMPawn_ZedScrake_Emperor_080';
case 'WMPawn_ZedSiren_Omega': return class'Proxy_WMPawn_ZedSiren_Omega_080';
case 'WMPawn_ZedStalker_Omega': return class'Proxy_WMPawn_ZedStalker_Omega_080';
default: return DefMonsterClass;
}
}
private static function class<KFPawn_Monster> PickProxyZed090(Name MonsterClass, class<KFPawn_Monster> DefMonsterClass)
{
switch (MonsterClass)
{
case 'KFPawn_ZedBloat': return class'Proxy_KFPawn_ZedBloat_090';
case 'KFPawn_ZedBloatKing': return class'Proxy_KFPawn_ZedBloatKing_090';
case 'KFPawn_ZedBloatKing_SantasWorkshop': return class'Proxy_KFPawn_ZedBloatKing_SantasWorkshop_090';
case 'KFPawn_ZedBloatKingSubspawn': return class'Proxy_KFPawn_ZedBloatKingSubspawn_090';
case 'KFPawn_ZedClot_Alpha': return class'Proxy_KFPawn_ZedClot_Alpha_090';
case 'KFPawn_ZedClot_AlphaKing': return class'Proxy_KFPawn_ZedClot_AlphaKing_090';
case 'KFPawn_ZedClot_Cyst': return class'Proxy_KFPawn_ZedClot_Cyst_090';
case 'KFPawn_ZedClot_Slasher': return class'Proxy_KFPawn_ZedClot_Slasher_090';
case 'KFPawn_ZedCrawler': return class'Proxy_KFPawn_ZedCrawler_090';
case 'KFPawn_ZedCrawlerKing': return class'Proxy_KFPawn_ZedCrawlerKing_090';
case 'KFPawn_ZedDAR': return class'Proxy_KFPawn_ZedDAR_090';
case 'KFPawn_ZedDAR_EMP': return class'Proxy_KFPawn_ZedDAR_EMP_090';
case 'KFPawn_ZedDAR_Laser': return class'Proxy_KFPawn_ZedDAR_Laser_090';
case 'KFPawn_ZedDAR_Rocket': return class'Proxy_KFPawn_ZedDAR_Rocket_090';
case 'KFPawn_ZedFleshpound': return class'Proxy_KFPawn_ZedFleshpound_090';
case 'KFPawn_ZedFleshpoundKing': return class'Proxy_KFPawn_ZedFleshpoundKing_090';
case 'KFPawn_ZedFleshpoundMini': return class'Proxy_KFPawn_ZedFleshpoundMini_090';
case 'KFPawn_ZedGorefast': return class'Proxy_KFPawn_ZedGorefast_090';
case 'KFPawn_ZedGorefastDualBlade': return class'Proxy_KFPawn_ZedGorefastDualBlade_090';
case 'KFPawn_ZedHans': return class'Proxy_KFPawn_ZedHans_090';
case 'KFPawn_ZedHusk': return class'Proxy_KFPawn_ZedHusk_090';
case 'KFPawn_ZedMatriarch': return class'Proxy_KFPawn_ZedMatriarch_090';
case 'KFPawn_ZedPatriarch': return class'Proxy_KFPawn_ZedPatriarch_090';
case 'KFPawn_ZedScrake': return class'Proxy_KFPawn_ZedScrake_090';
case 'KFPawn_ZedSiren': return class'Proxy_KFPawn_ZedSiren_090';
case 'KFPawn_ZedStalker': return class'Proxy_KFPawn_ZedStalker_090';
case 'WMPawn_ZedClot_Slasher_Omega': return class'Proxy_WMPawn_ZedClot_Slasher_Omega_090';
case 'WMPawn_ZedCrawler_Mini': return class'Proxy_WMPawn_ZedCrawler_Mini_090';
case 'WMPawn_ZedCrawler_Medium': return class'Proxy_WMPawn_ZedCrawler_Medium_090';
case 'WMPawn_ZedCrawler_Big': return class'Proxy_WMPawn_ZedCrawler_Big_090';
case 'WMPawn_ZedCrawler_Huge': return class'Proxy_WMPawn_ZedCrawler_Huge_090';
case 'WMPawn_ZedCrawler_Ultra': return class'Proxy_WMPawn_ZedCrawler_Ultra_090';
case 'WMPawn_ZedFleshpound_Predator': return class'Proxy_WMPawn_ZedFleshpound_Predator_090';
case 'WMPawn_ZedFleshpound_Omega': return class'Proxy_WMPawn_ZedFleshpound_Omega_090';
case 'WMPawn_ZedGorefast_Omega': return class'Proxy_WMPawn_ZedGorefast_Omega_090';
case 'WMPawn_ZedHusk_Tiny': return class'Proxy_WMPawn_ZedHusk_Tiny_090';
case 'WMPawn_ZedHusk_Omega': return class'Proxy_WMPawn_ZedHusk_Omega_090';
case 'WMPawn_ZedScrake_Tiny': return class'Proxy_WMPawn_ZedScrake_Tiny_090';
case 'WMPawn_ZedScrake_Omega': return class'Proxy_WMPawn_ZedScrake_Omega_090';
case 'WMPawn_ZedScrake_Emperor': return class'Proxy_WMPawn_ZedScrake_Emperor_090';
case 'WMPawn_ZedSiren_Omega': return class'Proxy_WMPawn_ZedSiren_Omega_090';
case 'WMPawn_ZedStalker_Omega': return class'Proxy_WMPawn_ZedStalker_Omega_090';
default: return DefMonsterClass;
}
}
private static function class<KFPawn_Monster> PickProxyZed100(Name MonsterClass, class<KFPawn_Monster> DefMonsterClass)
{
switch (MonsterClass)
{
case 'KFPawn_ZedBloat': return class'Proxy_KFPawn_ZedBloat_100';
case 'KFPawn_ZedBloatKing': return class'Proxy_KFPawn_ZedBloatKing_100';
case 'KFPawn_ZedBloatKing_SantasWorkshop': return class'Proxy_KFPawn_ZedBloatKing_SantasWorkshop_100';
case 'KFPawn_ZedBloatKingSubspawn': return class'Proxy_KFPawn_ZedBloatKingSubspawn_100';
case 'KFPawn_ZedClot_Alpha': return class'Proxy_KFPawn_ZedClot_Alpha_100';
case 'KFPawn_ZedClot_AlphaKing': return class'Proxy_KFPawn_ZedClot_AlphaKing_100';
case 'KFPawn_ZedClot_Cyst': return class'Proxy_KFPawn_ZedClot_Cyst_100';
case 'KFPawn_ZedClot_Slasher': return class'Proxy_KFPawn_ZedClot_Slasher_100';
case 'KFPawn_ZedCrawler': return class'Proxy_KFPawn_ZedCrawler_100';
case 'KFPawn_ZedCrawlerKing': return class'Proxy_KFPawn_ZedCrawlerKing_100';
case 'KFPawn_ZedDAR': return class'Proxy_KFPawn_ZedDAR_100';
case 'KFPawn_ZedDAR_EMP': return class'Proxy_KFPawn_ZedDAR_EMP_100';
case 'KFPawn_ZedDAR_Laser': return class'Proxy_KFPawn_ZedDAR_Laser_100';
case 'KFPawn_ZedDAR_Rocket': return class'Proxy_KFPawn_ZedDAR_Rocket_100';
case 'KFPawn_ZedFleshpound': return class'Proxy_KFPawn_ZedFleshpound_100';
case 'KFPawn_ZedFleshpoundKing': return class'Proxy_KFPawn_ZedFleshpoundKing_100';
case 'KFPawn_ZedFleshpoundMini': return class'Proxy_KFPawn_ZedFleshpoundMini_100';
case 'KFPawn_ZedGorefast': return class'Proxy_KFPawn_ZedGorefast_100';
case 'KFPawn_ZedGorefastDualBlade': return class'Proxy_KFPawn_ZedGorefastDualBlade_100';
case 'KFPawn_ZedHans': return class'Proxy_KFPawn_ZedHans_100';
case 'KFPawn_ZedHusk': return class'Proxy_KFPawn_ZedHusk_100';
case 'KFPawn_ZedMatriarch': return class'Proxy_KFPawn_ZedMatriarch_100';
case 'KFPawn_ZedPatriarch': return class'Proxy_KFPawn_ZedPatriarch_100';
case 'KFPawn_ZedScrake': return class'Proxy_KFPawn_ZedScrake_100';
case 'KFPawn_ZedSiren': return class'Proxy_KFPawn_ZedSiren_100';
case 'KFPawn_ZedStalker': return class'Proxy_KFPawn_ZedStalker_100';
case 'WMPawn_ZedClot_Slasher_Omega': return class'Proxy_WMPawn_ZedClot_Slasher_Omega_100';
case 'WMPawn_ZedCrawler_Mini': return class'Proxy_WMPawn_ZedCrawler_Mini_100';
case 'WMPawn_ZedCrawler_Medium': return class'Proxy_WMPawn_ZedCrawler_Medium_100';
case 'WMPawn_ZedCrawler_Big': return class'Proxy_WMPawn_ZedCrawler_Big_100';
case 'WMPawn_ZedCrawler_Huge': return class'Proxy_WMPawn_ZedCrawler_Huge_100';
case 'WMPawn_ZedCrawler_Ultra': return class'Proxy_WMPawn_ZedCrawler_Ultra_100';
case 'WMPawn_ZedFleshpound_Predator': return class'Proxy_WMPawn_ZedFleshpound_Predator_100';
case 'WMPawn_ZedFleshpound_Omega': return class'Proxy_WMPawn_ZedFleshpound_Omega_100';
case 'WMPawn_ZedGorefast_Omega': return class'Proxy_WMPawn_ZedGorefast_Omega_100';
case 'WMPawn_ZedHusk_Tiny': return class'Proxy_WMPawn_ZedHusk_Tiny_100';
case 'WMPawn_ZedHusk_Omega': return class'Proxy_WMPawn_ZedHusk_Omega_100';
case 'WMPawn_ZedScrake_Tiny': return class'Proxy_WMPawn_ZedScrake_Tiny_100';
case 'WMPawn_ZedScrake_Omega': return class'Proxy_WMPawn_ZedScrake_Omega_100';
case 'WMPawn_ZedScrake_Emperor': return class'Proxy_WMPawn_ZedScrake_Emperor_100';
case 'WMPawn_ZedSiren_Omega': return class'Proxy_WMPawn_ZedSiren_Omega_100';
case 'WMPawn_ZedStalker_Omega': return class'Proxy_WMPawn_ZedStalker_Omega_100';
default: return DefMonsterClass;
}
}
defaultproperties
{
}

View File

@ -0,0 +1,113 @@
class MSKGS_LocalMessage extends Object;
enum E_MSKGS_LocalMessageType
{
MSKGS_PlayerGiveBoostToServer,
MSKGS_PlayerGiveBoostToServerFirst,
MSKGS_PlayerGiveBoostToServerMax,
MSKGS_BoosterLeaveServer,
MSKGS_BoosterLeaveServerMax,
MSKGS_BoosterLeaveServerNoBoost
};
var const String PlayerGivesBoostDefault;
var private localized String PlayerGivesBoost;
var const String PlayerGivesBoostFirstDefault;
var private localized String PlayerGivesBoostFirst;
var const String TotalBoostDefault;
var private localized String TotalBoost;
var const String MaxDefault;
var private localized String Max;
var const String PlayerLeftDefault;
var private localized String PlayerLeft;
var const String NoBoostDefault;
var private localized String NoBoost;
private static function String ReplPlayer(String Str, String Player)
{
return Repl(Str, "<player>", Player, false);
}
private static function String ReplPlayerBoost(String Str, String Boost)
{
return Repl(Str, "<playerboost>", Boost, false);
}
private static function String ReplTotalBoost(String Str, String Boost)
{
return Repl(Str, "<totalboost>", Boost, false);
}
public static function String GetLocalizedString(
E_LogLevel LogLevel,
E_MSKGS_LocalMessageType LMT,
optional String String1,
optional String String2,
optional String String3)
{
local String RV;
`Log_TraceStatic();
RV = "";
switch (LMT)
{
case MSKGS_PlayerGiveBoostToServer:
RV = (default.PlayerGivesBoost != "" ? default.PlayerGivesBoost : default.PlayerGivesBoostDefault)
@ (default.TotalBoost != "" ? default.TotalBoost : default.TotalBoostDefault);
RV = ReplPlayer(RV, String1);
RV = ReplPlayerBoost(RV, String2);
RV = ReplTotalBoost(RV, String3);
break;
case MSKGS_PlayerGiveBoostToServerFirst:
RV = (default.PlayerGivesBoostFirst != "" ? default.PlayerGivesBoostFirst : default.PlayerGivesBoostFirstDefault)
@ (default.TotalBoost != "" ? default.TotalBoost : default.TotalBoostDefault);
RV = ReplPlayer(RV, String1);
RV = ReplTotalBoost(RV, String2);
break;
case MSKGS_PlayerGiveBoostToServerMax:
RV = (default.PlayerGivesBoost != "" ? default.PlayerGivesBoost : default.PlayerGivesBoostDefault)
@ (default.TotalBoost != "" ? default.TotalBoost : default.TotalBoostDefault)
@ (default.Max != "" ? default.Max : default.MaxDefault);
RV = ReplPlayer(RV, String1);
RV = ReplPlayerBoost(RV, String2);
RV = ReplTotalBoost(RV, String3);
break;
case MSKGS_BoosterLeaveServer:
RV = (default.PlayerLeft != "" ? default.PlayerLeft : default.PlayerLeftDefault)
@ (default.TotalBoost != "" ? default.TotalBoost : default.TotalBoostDefault);
RV = ReplPlayer(RV, String1);
RV = ReplTotalBoost(RV, String2);
break;
case MSKGS_BoosterLeaveServerMax:
RV = (default.PlayerLeft != "" ? default.PlayerLeft : default.PlayerLeftDefault)
@ (default.TotalBoost != "" ? default.TotalBoost : default.TotalBoostDefault)
@ (default.Max != "" ? default.Max : default.MaxDefault);
RV = ReplPlayer(RV, String1);
RV = ReplTotalBoost(RV, String2);
break;
case MSKGS_BoosterLeaveServerNoBoost:
RV = (default.PlayerLeft != "" ? default.PlayerLeft : default.PlayerLeftDefault)
@ (default.NoBoost != "" ? default.NoBoost : default.NoBoostDefault);
RV = ReplPlayer(RV, String1);
break;
}
return RV;
}
defaultproperties
{
PlayerGivesBoostFirstDefault = "<player> gives boost to this server!"
PlayerGivesBoostDefault = "<player> gives +<playerboost>% XP boost to this server!"
TotalBoostDefault = "XP boost: +<totalboost>%"
MaxDefault = "(MAX)"
PlayerLeftDefault = "<player> left the server."
NoBoostDefault = "Now there is no XP boost."
}

View File

@ -1,81 +0,0 @@
class MSKGS_Mut extends KFMutator
config(MSKGS);
var private MSKGS MSKGS;
public simulated function bool SafeDestroy()
{
return (bPendingDelete || bDeleteMe || Destroy());
}
public event PreBeginPlay()
{
Super.PreBeginPlay();
if (WorldInfo.NetMode == NM_Client) return;
foreach WorldInfo.DynamicActors(class'MSKGS', MSKGS)
{
break;
}
if (MSKGS == None)
{
MSKGS = WorldInfo.Spawn(class'MSKGS');
}
if (MSKGS == None)
{
`Log_Base("FATAL: Can't Spawn 'MSKGS'");
SafeDestroy();
}
}
public function InitMutator(String Options, out String ErrorMessage)
{
Super.InitMutator(Options, ErrorMessage);
MSKGS.SetMaxPlayers(class'GameInfo'.static.GetIntOption(Options, "MaxPlayers", INDEX_NONE));
}
public function AddMutator(Mutator Mut)
{
if (Mut == Self) return;
if (Mut.Class == Class)
Mut.Destroy();
else
Super.AddMutator(Mut);
}
public function bool CheckRelevance(Actor A)
{
local bool Relevance;
Relevance = Super.CheckRelevance(A);
if (Relevance)
{
MSKGS.ModifyLifespan(A);
}
return Relevance;
}
public function NotifyLogin(Controller C)
{
MSKGS.NotifyLogin(C);
Super.NotifyLogin(C);
}
public function NotifyLogout(Controller C)
{
MSKGS.NotifyLogout(C);
Super.NotifyLogout(C);
}
defaultproperties
{
}

View File

@ -1,11 +0,0 @@
class MSKGS_OnlineSubsystem extends Object;
static simulated function bool IsUID()
{
}
defaultproperties
{
}

View File

@ -1,22 +1,78 @@
class MSKGS_RepInfo extends ReplicationInfo;
const CfgXPBoost = class'CfgXPBoost';
const MSKGS_LMT = class'MSKGS_LocalMessage';
var public E_LogLevel LogLevel;
var public MSKGS MSKGS;
var public UniqueNetId GroupID;
var public float CheckGroupTimer;
enum MSKGS_PlayerType
{
MSKGS_Unknown,
MSKGS_Owner,
MSKGS_Admin,
MSKGS_Group,
MSKGS_Player
};
var private KFPlayerController KFPC;
var private OnlineSubsystem OS;
var private IMSKGS MSKGS;
var private bool ServerOwner;
var private bool GroupMember;
var public bool ServerOwner;
var private bool GroupMember;
var private repnotify E_LogLevel LogLevel;
var private repnotify UniqueNetId GroupID;
var private repnotify float CheckGroupTimer;
var private bool ObtainLogLevel;
var private bool ObtainGroupID;
var private bool ObtainCheckGroupTimer;
var private KFPlayerController KFPC;
var private OnlineSubsystemSteamworks OSS;
replication
{
if (bNetInitial && Role == ROLE_Authority)
LogLevel, GroupID, CheckGroupTimer;
if (bNetInitial)
LogLevel, GroupID, CheckGroupTimer, ServerOwner;
}
public simulated event ReplicatedEvent(name VarName)
{
`Log_Trace();
switch (VarName)
{
case 'LogLevel':
ObtainLogLevel = true;
CheckGroupMembership();
break;
case 'GroupID':
ObtainGroupID = true;
CheckGroupMembership();
break;
case 'CheckGroupTimer':
ObtainCheckGroupTimer = true;
CheckGroupMembership();
break;
default:
super.ReplicatedEvent(VarName);
break;
}
}
public function Init(
E_LogLevel _LogLevel,
IMSKGS _MSKGS,
UniqueNetId _GroupID,
float _CheckGroupTimer,
bool _ServerOwner)
{
LogLevel = _LogLevel;
MSKGS = _MSKGS;
GroupID = _GroupID;
CheckGroupTimer = _CheckGroupTimer;
ServerOwner = _ServerOwner;
`Log_Trace();
}
public simulated function bool SafeDestroy()
@ -30,19 +86,6 @@ public simulated event PreBeginPlay()
{
`Log_Trace();
if (Role < ROLE_Authority || WorldInfo.NetMode == NM_StandAlone)
{
OS = class'GameEngine'.static.GetOnlineSubsystem();
if (OS != None)
{
CheckGroupMembership();
}
else
{
`Log_Error("Can't get online subsystem!");
}
}
Super.PreBeginPlay();
}
@ -57,46 +100,74 @@ public simulated event PostBeginPlay()
private simulated function CheckGroupMembership()
{
if (OS.CheckPlayerGroup(GroupID))
`Log_Trace();
if (WorldInfo.NetMode == NM_StandAlone
|| (ObtainLogLevel && ObtainGroupID && ObtainCheckGroupTimer && Role < ROLE_Authority))
{
ClearTimer(nameof(CheckGroupMembership));
ServerApplyMembership();
}
else if (CheckGroupTimer > 0.0f && !IsTimerActive(nameof(CheckGroupMembership)))
{
SetTimer(CheckGroupTimer, true, nameof(CheckGroupMembership));
if (OSS == None)
{
OSS = OnlineSubsystemSteamworks(class'GameEngine'.static.GetOnlineSubsystem());
}
if (OSS != None)
{
if (OSS.CheckPlayerGroup(GroupID))
{
ClearTimer(nameof(CheckGroupMembership));
GroupMember = true;
ServerApplyMembership();
}
else if (!IsTimerActive(nameof(CheckGroupMembership)) && CheckGroupTimer > 0.0f)
{
SetTimer(CheckGroupTimer, true, nameof(CheckGroupMembership));
}
}
else
{
`Log_Error("Can't get online subsystem steamworks!");
}
}
}
private reliable server function ServerApplyMembership()
{
GroupMember = true;
MSKGS.IncreaseXPBoost(GetKFPC());
}
public function int XPBoost()
public simulated function MSKGS_PlayerType PlayerType()
{
`Log_Trace();
if (ServerOwner)
if (IsServerOwner())
{
return CfgXPBoost.default.BoostOwner;
return MSKGS_Owner;
}
if (GetKFPC() != None && GetKFPC().PlayerReplicationInfo != None && GetKFPC().PlayerReplicationInfo.bAdmin)
if (IsAdmin())
{
return CfgXPBoost.default.BoostAdmin;
return MSKGS_Admin;
}
if (GroupMember)
if (IsGroupMember())
{
return CfgXPBoost.default.BoostGroup;
return MSKGS_Group;
}
return CfgXPBoost.default.BoostPlayer;
return MSKGS_Player;
}
private simulated function KFPlayerController GetKFPC()
public simulated function bool IsServerOwner()
{
return ServerOwner;
}
public simulated function bool IsAdmin()
{
return (GetKFPC() != None && KFPC.PlayerReplicationInfo != None && KFPC.PlayerReplicationInfo.bAdmin);
}
public simulated function bool IsGroupMember()
{
return GroupMember;
}
public simulated function KFPlayerController GetKFPC()
{
`Log_Trace();
@ -112,6 +183,92 @@ private simulated function KFPlayerController GetKFPC()
return KFPC;
}
private reliable server function ServerApplyMembership()
{
`Log_Trace();
GroupMember = true;
MSKGS.IncreaseXPBoost(GetKFPC());
}
public reliable client function WriteToChatLocalized(E_MSKGS_LocalMessageType LMT, String HexColor, optional String String1, optional String String2, optional String String3)
{
`Log_Trace();
WriteToChat(MSKGS_LMT.static.GetLocalizedString(LogLevel, LMT, String1, String2, String3), HexColor);
}
public reliable client function WriteToChat(String Message, String HexColor)
{
local KFGFxHudWrapper HUD;
`Log_Trace();
if (GetKFPC() == None) return;
if (KFPC.MyGFxManager.PartyWidget != None && KFPC.MyGFxManager.PartyWidget.PartyChatWidget != None)
{
KFPC.MyGFxManager.PartyWidget.PartyChatWidget.AddChatMessage(Message, HexColor);
}
HUD = KFGFxHudWrapper(KFPC.myHUD);
if (HUD != None && HUD.HUDMovie != None && HUD.HUDMovie.HudChatBox != None)
{
HUD.HUDMovie.HudChatBox.AddChatMessage(Message, HexColor);
}
}
public reliable client function WriteToHUDLocalized(E_MSKGS_LocalMessageType LMT, optional String String1, optional String String2, optional String String3, optional float DisplayTime = 0.0f)
{
`Log_Trace();
WriteToHUD(MSKGS_LMT.static.GetLocalizedString(LogLevel, LMT, String1, String2, String3), DisplayTime);
}
public reliable client function WriteToHUD(String Message, optional float DisplayTime = 0.0f)
{
`Log_Trace();
if (GetKFPC() == None) return;
if (DisplayTime <= 0.0f)
{
DisplayTime = CalcDisplayTime(Message);
}
if (KFPC.MyGFxHUD != None)
{
KFPC.MyGFxHUD.DisplayMapText(Message, DisplayTime, false);
}
}
public reliable client function DefferedClearMessageHUD(optional float Time = 0.0f)
{
`Log_Trace();
SetTimer(Time, false, nameof(ClearMessageHUD));
}
public reliable client function ClearMessageHUD()
{
`Log_Trace();
if (GetKFPC() == None) return;
if (KFPC.MyGFxHUD != None && KFPC.MyGFxHUD.MapTextWidget != None)
{
KFPC.MyGFxHUD.MapTextWidget.StoredMessageList.Length = 0;
KFPC.MyGFxHUD.MapTextWidget.HideMessage();
}
}
private simulated function float CalcDisplayTime(String Message)
{
`Log_Trace();
return FClamp(Len(Message) / 20.0f, 3, 30);
}
defaultproperties
{
bAlwaysRelevant = false
@ -120,4 +277,8 @@ defaultproperties
GroupMember = false;
ServerOwner = false;
ObtainLogLevel = false;
ObtainGroupID = false;
ObtainCheckGroupTimer = false;
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKingSubspawn_010 extends KFPawn_ZedBloatKingSubspawn;
defaultproperties
{
XPValues(0)=9 // 8
XPValues(1)=11 // 10
XPValues(2)=11 // 10
XPValues(3)=11 // 10
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKingSubspawn_020 extends KFPawn_ZedBloatKingSubspawn;
defaultproperties
{
XPValues(0)=10 // 8
XPValues(1)=12 // 10
XPValues(2)=12 // 10
XPValues(3)=12 // 10
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKingSubspawn_030 extends KFPawn_ZedBloatKingSubspawn;
defaultproperties
{
XPValues(0)=10 // 8
XPValues(1)=13 // 10
XPValues(2)=13 // 10
XPValues(3)=13 // 10
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKingSubspawn_040 extends KFPawn_ZedBloatKingSubspawn;
defaultproperties
{
XPValues(0)=11 // 8
XPValues(1)=14 // 10
XPValues(2)=14 // 10
XPValues(3)=14 // 10
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKingSubspawn_050 extends KFPawn_ZedBloatKingSubspawn;
defaultproperties
{
XPValues(0)=12 // 8
XPValues(1)=15 // 10
XPValues(2)=15 // 10
XPValues(3)=15 // 10
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKingSubspawn_060 extends KFPawn_ZedBloatKingSubspawn;
defaultproperties
{
XPValues(0)=13 // 8
XPValues(1)=16 // 10
XPValues(2)=16 // 10
XPValues(3)=16 // 10
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKingSubspawn_070 extends KFPawn_ZedBloatKingSubspawn;
defaultproperties
{
XPValues(0)=14 // 8
XPValues(1)=17 // 10
XPValues(2)=17 // 10
XPValues(3)=17 // 10
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKingSubspawn_080 extends KFPawn_ZedBloatKingSubspawn;
defaultproperties
{
XPValues(0)=14 // 8
XPValues(1)=18 // 10
XPValues(2)=18 // 10
XPValues(3)=18 // 10
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKingSubspawn_090 extends KFPawn_ZedBloatKingSubspawn;
defaultproperties
{
XPValues(0)=15 // 8
XPValues(1)=19 // 10
XPValues(2)=19 // 10
XPValues(3)=19 // 10
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKingSubspawn_100 extends KFPawn_ZedBloatKingSubspawn;
defaultproperties
{
XPValues(0)=16 // 8
XPValues(1)=20 // 10
XPValues(2)=20 // 10
XPValues(3)=20 // 10
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKing_010 extends KFPawn_ZedBloatKing;
defaultproperties
{
XPValues(0)=1420 // 1291
XPValues(1)=1863 // 1694
XPValues(2)=1969 // 1790
XPValues(3)=2027 // 1843
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKing_020 extends KFPawn_ZedBloatKing;
defaultproperties
{
XPValues(0)=1549 // 1291
XPValues(1)=2033 // 1694
XPValues(2)=2148 // 1790
XPValues(3)=2212 // 1843
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKing_030 extends KFPawn_ZedBloatKing;
defaultproperties
{
XPValues(0)=1678 // 1291
XPValues(1)=2202 // 1694
XPValues(2)=2327 // 1790
XPValues(3)=2396 // 1843
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKing_040 extends KFPawn_ZedBloatKing;
defaultproperties
{
XPValues(0)=1807 // 1291
XPValues(1)=2372 // 1694
XPValues(2)=2506 // 1790
XPValues(3)=2580 // 1843
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKing_050 extends KFPawn_ZedBloatKing;
defaultproperties
{
XPValues(0)=1936 // 1291
XPValues(1)=2541 // 1694
XPValues(2)=2685 // 1790
XPValues(3)=2764 // 1843
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKing_060 extends KFPawn_ZedBloatKing;
defaultproperties
{
XPValues(0)=2066 // 1291
XPValues(1)=2710 // 1694
XPValues(2)=2864 // 1790
XPValues(3)=2949 // 1843
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKing_070 extends KFPawn_ZedBloatKing;
defaultproperties
{
XPValues(0)=2195 // 1291
XPValues(1)=2880 // 1694
XPValues(2)=3043 // 1790
XPValues(3)=3133 // 1843
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKing_080 extends KFPawn_ZedBloatKing;
defaultproperties
{
XPValues(0)=2324 // 1291
XPValues(1)=3049 // 1694
XPValues(2)=3222 // 1790
XPValues(3)=3317 // 1843
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKing_090 extends KFPawn_ZedBloatKing;
defaultproperties
{
XPValues(0)=2453 // 1291
XPValues(1)=3219 // 1694
XPValues(2)=3401 // 1790
XPValues(3)=3502 // 1843
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKing_100 extends KFPawn_ZedBloatKing;
defaultproperties
{
XPValues(0)=2582 // 1291
XPValues(1)=3388 // 1694
XPValues(2)=3580 // 1790
XPValues(3)=3686 // 1843
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_010 extends KFPawn_ZedBloatKing_SantasWorkshop;
defaultproperties
{
XPValues(0)=1420 // 1291
XPValues(1)=1863 // 1694
XPValues(2)=1969 // 1790
XPValues(3)=2027 // 1843
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_020 extends KFPawn_ZedBloatKing_SantasWorkshop;
defaultproperties
{
XPValues(0)=1549 // 1291
XPValues(1)=2033 // 1694
XPValues(2)=2148 // 1790
XPValues(3)=2212 // 1843
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_030 extends KFPawn_ZedBloatKing_SantasWorkshop;
defaultproperties
{
XPValues(0)=1678 // 1291
XPValues(1)=2202 // 1694
XPValues(2)=2327 // 1790
XPValues(3)=2396 // 1843
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_040 extends KFPawn_ZedBloatKing_SantasWorkshop;
defaultproperties
{
XPValues(0)=1807 // 1291
XPValues(1)=2372 // 1694
XPValues(2)=2506 // 1790
XPValues(3)=2580 // 1843
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_050 extends KFPawn_ZedBloatKing_SantasWorkshop;
defaultproperties
{
XPValues(0)=1936 // 1291
XPValues(1)=2541 // 1694
XPValues(2)=2685 // 1790
XPValues(3)=2764 // 1843
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_060 extends KFPawn_ZedBloatKing_SantasWorkshop;
defaultproperties
{
XPValues(0)=2066 // 1291
XPValues(1)=2710 // 1694
XPValues(2)=2864 // 1790
XPValues(3)=2949 // 1843
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_070 extends KFPawn_ZedBloatKing_SantasWorkshop;
defaultproperties
{
XPValues(0)=2195 // 1291
XPValues(1)=2880 // 1694
XPValues(2)=3043 // 1790
XPValues(3)=3133 // 1843
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_080 extends KFPawn_ZedBloatKing_SantasWorkshop;
defaultproperties
{
XPValues(0)=2324 // 1291
XPValues(1)=3049 // 1694
XPValues(2)=3222 // 1790
XPValues(3)=3317 // 1843
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_090 extends KFPawn_ZedBloatKing_SantasWorkshop;
defaultproperties
{
XPValues(0)=2453 // 1291
XPValues(1)=3219 // 1694
XPValues(2)=3401 // 1790
XPValues(3)=3502 // 1843
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_100 extends KFPawn_ZedBloatKing_SantasWorkshop;
defaultproperties
{
XPValues(0)=2582 // 1291
XPValues(1)=3388 // 1694
XPValues(2)=3580 // 1790
XPValues(3)=3686 // 1843
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloat_010 extends KFPawn_ZedBloat;
DefaultProperties
{
XPValues(0)=19 // 17
XPValues(1)=24 // 22
XPValues(2)=33 // 30
XPValues(3)=37 // 34
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloat_020 extends KFPawn_ZedBloat;
DefaultProperties
{
XPValues(0)=20 // 17
XPValues(1)=26 // 22
XPValues(2)=36 // 30
XPValues(3)=41 // 34
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloat_030 extends KFPawn_ZedBloat;
DefaultProperties
{
XPValues(0)=22 // 17
XPValues(1)=29 // 22
XPValues(2)=39 // 30
XPValues(3)=44 // 34
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloat_040 extends KFPawn_ZedBloat;
DefaultProperties
{
XPValues(0)=24 // 17
XPValues(1)=31 // 22
XPValues(2)=42 // 30
XPValues(3)=48 // 34
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloat_050 extends KFPawn_ZedBloat;
DefaultProperties
{
XPValues(0)=26 // 17
XPValues(1)=33 // 22
XPValues(2)=45 // 30
XPValues(3)=51 // 34
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloat_060 extends KFPawn_ZedBloat;
DefaultProperties
{
XPValues(0)=27 // 17
XPValues(1)=35 // 22
XPValues(2)=48 // 30
XPValues(3)=54 // 34
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloat_070 extends KFPawn_ZedBloat;
DefaultProperties
{
XPValues(0)=29 // 17
XPValues(1)=37 // 22
XPValues(2)=51 // 30
XPValues(3)=58 // 34
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloat_080 extends KFPawn_ZedBloat;
DefaultProperties
{
XPValues(0)=31 // 17
XPValues(1)=40 // 22
XPValues(2)=54 // 30
XPValues(3)=61 // 34
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloat_090 extends KFPawn_ZedBloat;
DefaultProperties
{
XPValues(0)=32 // 17
XPValues(1)=42 // 22
XPValues(2)=57 // 30
XPValues(3)=65 // 34
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedBloat_100 extends KFPawn_ZedBloat;
DefaultProperties
{
XPValues(0)=34 // 17
XPValues(1)=44 // 22
XPValues(2)=60 // 30
XPValues(3)=68 // 34
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_AlphaKing_010 extends KFPawn_ZedClot_AlphaKing;
defaultproperties
{
XPValues(0)=9 // 8
XPValues(1)=12 // 11
XPValues(2)=12 // 11
XPValues(3)=12 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_AlphaKing_020 extends KFPawn_ZedClot_AlphaKing;
defaultproperties
{
XPValues(0)=10 // 8
XPValues(1)=13 // 11
XPValues(2)=13 // 11
XPValues(3)=13 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_AlphaKing_030 extends KFPawn_ZedClot_AlphaKing;
defaultproperties
{
XPValues(0)=10 // 8
XPValues(1)=14 // 11
XPValues(2)=14 // 11
XPValues(3)=14 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_AlphaKing_040 extends KFPawn_ZedClot_AlphaKing;
defaultproperties
{
XPValues(0)=11 // 8
XPValues(1)=15 // 11
XPValues(2)=15 // 11
XPValues(3)=15 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_AlphaKing_050 extends KFPawn_ZedClot_AlphaKing;
defaultproperties
{
XPValues(0)=12 // 8
XPValues(1)=16 // 11
XPValues(2)=16 // 11
XPValues(3)=16 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_AlphaKing_060 extends KFPawn_ZedClot_AlphaKing;
defaultproperties
{
XPValues(0)=13 // 8
XPValues(1)=18 // 11
XPValues(2)=18 // 11
XPValues(3)=18 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_AlphaKing_070 extends KFPawn_ZedClot_AlphaKing;
defaultproperties
{
XPValues(0)=14 // 8
XPValues(1)=19 // 11
XPValues(2)=19 // 11
XPValues(3)=19 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_AlphaKing_080 extends KFPawn_ZedClot_AlphaKing;
defaultproperties
{
XPValues(0)=14 // 8
XPValues(1)=20 // 11
XPValues(2)=20 // 11
XPValues(3)=20 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_AlphaKing_090 extends KFPawn_ZedClot_AlphaKing;
defaultproperties
{
XPValues(0)=15 // 8
XPValues(1)=21 // 11
XPValues(2)=21 // 11
XPValues(3)=21 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_AlphaKing_100 extends KFPawn_ZedClot_AlphaKing;
defaultproperties
{
XPValues(0)=16 // 8
XPValues(1)=22 // 11
XPValues(2)=22 // 11
XPValues(3)=22 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_Alpha_010 extends KFPawn_ZedClot;
DefaultProperties
{
XPValues(0)=9 // 8
XPValues(1)=12 // 11
XPValues(2)=12 // 11
XPValues(3)=12 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_Alpha_020 extends KFPawn_ZedClot;
DefaultProperties
{
XPValues(0)=10 // 8
XPValues(1)=13 // 11
XPValues(2)=13 // 11
XPValues(3)=13 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_Alpha_030 extends KFPawn_ZedClot;
DefaultProperties
{
XPValues(0)=10 // 8
XPValues(1)=14 // 11
XPValues(2)=14 // 11
XPValues(3)=14 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_Alpha_040 extends KFPawn_ZedClot;
DefaultProperties
{
XPValues(0)=11 // 8
XPValues(1)=15 // 11
XPValues(2)=15 // 11
XPValues(3)=15 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_Alpha_050 extends KFPawn_ZedClot;
DefaultProperties
{
XPValues(0)=12 // 8
XPValues(1)=16 // 11
XPValues(2)=16 // 11
XPValues(3)=16 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_Alpha_060 extends KFPawn_ZedClot;
DefaultProperties
{
XPValues(0)=13 // 8
XPValues(1)=18 // 11
XPValues(2)=18 // 11
XPValues(3)=18 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_Alpha_070 extends KFPawn_ZedClot;
DefaultProperties
{
XPValues(0)=14 // 8
XPValues(1)=19 // 11
XPValues(2)=19 // 11
XPValues(3)=19 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_Alpha_080 extends KFPawn_ZedClot;
DefaultProperties
{
XPValues(0)=14 // 8
XPValues(1)=20 // 11
XPValues(2)=20 // 11
XPValues(3)=20 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_Alpha_090 extends KFPawn_ZedClot;
DefaultProperties
{
XPValues(0)=15 // 8
XPValues(1)=21 // 11
XPValues(2)=21 // 11
XPValues(3)=21 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_Alpha_100 extends KFPawn_ZedClot;
DefaultProperties
{
XPValues(0)=16 // 8
XPValues(1)=22 // 11
XPValues(2)=22 // 11
XPValues(3)=22 // 11
}

View File

@ -1,11 +0,0 @@
class Proxy_KFPawn_ZedClot_Cyst_010 extends KFPawn_ZedClot_Cyst;
defaultproperties
{
XPValues(0)=9 // 8
XPValues(1)=12 // 11
XPValues(2)=12 // 11
XPValues(3)=12 // 11
}

View File

@ -1,11 +0,0 @@
class Proxy_KFPawn_ZedClot_Cyst_020 extends KFPawn_ZedClot_Cyst;
defaultproperties
{
XPValues(0)=10 // 8
XPValues(1)=13 // 11
XPValues(2)=13 // 11
XPValues(3)=13 // 11
}

View File

@ -1,11 +0,0 @@
class Proxy_KFPawn_ZedClot_Cyst_030 extends KFPawn_ZedClot_Cyst;
defaultproperties
{
XPValues(0)=10 // 8
XPValues(1)=14 // 11
XPValues(2)=14 // 11
XPValues(3)=14 // 11
}

View File

@ -1,11 +0,0 @@
class Proxy_KFPawn_ZedClot_Cyst_040 extends KFPawn_ZedClot_Cyst;
defaultproperties
{
XPValues(0)=11 // 8
XPValues(1)=15 // 11
XPValues(2)=15 // 11
XPValues(3)=15 // 11
}

View File

@ -1,11 +0,0 @@
class Proxy_KFPawn_ZedClot_Cyst_050 extends KFPawn_ZedClot_Cyst;
defaultproperties
{
XPValues(0)=12 // 8
XPValues(1)=16 // 11
XPValues(2)=16 // 11
XPValues(3)=16 // 11
}

View File

@ -1,11 +0,0 @@
class Proxy_KFPawn_ZedClot_Cyst_060 extends KFPawn_ZedClot_Cyst;
defaultproperties
{
XPValues(0)=13 // 8
XPValues(1)=18 // 11
XPValues(2)=18 // 11
XPValues(3)=18 // 11
}

View File

@ -1,11 +0,0 @@
class Proxy_KFPawn_ZedClot_Cyst_070 extends KFPawn_ZedClot_Cyst;
defaultproperties
{
XPValues(0)=14 // 8
XPValues(1)=19 // 11
XPValues(2)=19 // 11
XPValues(3)=19 // 11
}

View File

@ -1,11 +0,0 @@
class Proxy_KFPawn_ZedClot_Cyst_080 extends KFPawn_ZedClot_Cyst;
defaultproperties
{
XPValues(0)=14 // 8
XPValues(1)=20 // 11
XPValues(2)=20 // 11
XPValues(3)=20 // 11
}

View File

@ -1,11 +0,0 @@
class Proxy_KFPawn_ZedClot_Cyst_090 extends KFPawn_ZedClot_Cyst;
defaultproperties
{
XPValues(0)=15 // 8
XPValues(1)=21 // 11
XPValues(2)=21 // 11
XPValues(3)=21 // 11
}

View File

@ -1,11 +0,0 @@
class Proxy_KFPawn_ZedClot_Cyst_100 extends KFPawn_ZedClot_Cyst;
defaultproperties
{
XPValues(0)=16 // 8
XPValues(1)=22 // 11
XPValues(2)=22 // 11
XPValues(3)=22 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_Slasher_010 extends KFPawn_ZedClot_Slasher;
DefaultProperties
{
XPValues(0)=9 // 8
XPValues(1)=12 // 11
XPValues(2)=12 // 11
XPValues(3)=12 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_Slasher_020 extends KFPawn_ZedClot_Slasher;
DefaultProperties
{
XPValues(0)=10 // 8
XPValues(1)=13 // 11
XPValues(2)=13 // 11
XPValues(3)=13 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_Slasher_030 extends KFPawn_ZedClot_Slasher;
DefaultProperties
{
XPValues(0)=10 // 8
XPValues(1)=14 // 11
XPValues(2)=14 // 11
XPValues(3)=14 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_Slasher_040 extends KFPawn_ZedClot_Slasher;
DefaultProperties
{
XPValues(0)=11 // 8
XPValues(1)=15 // 11
XPValues(2)=15 // 11
XPValues(3)=15 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_Slasher_050 extends KFPawn_ZedClot_Slasher;
DefaultProperties
{
XPValues(0)=12 // 8
XPValues(1)=16 // 11
XPValues(2)=16 // 11
XPValues(3)=16 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_Slasher_060 extends KFPawn_ZedClot_Slasher;
DefaultProperties
{
XPValues(0)=13 // 8
XPValues(1)=18 // 11
XPValues(2)=18 // 11
XPValues(3)=18 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_Slasher_070 extends KFPawn_ZedClot_Slasher;
DefaultProperties
{
XPValues(0)=14 // 8
XPValues(1)=19 // 11
XPValues(2)=19 // 11
XPValues(3)=19 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_Slasher_080 extends KFPawn_ZedClot_Slasher;
DefaultProperties
{
XPValues(0)=14 // 8
XPValues(1)=20 // 11
XPValues(2)=20 // 11
XPValues(3)=20 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_Slasher_090 extends KFPawn_ZedClot_Slasher;
DefaultProperties
{
XPValues(0)=15 // 8
XPValues(1)=21 // 11
XPValues(2)=21 // 11
XPValues(3)=21 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedClot_Slasher_100 extends KFPawn_ZedClot_Slasher;
DefaultProperties
{
XPValues(0)=16 // 8
XPValues(1)=22 // 11
XPValues(2)=22 // 11
XPValues(3)=22 // 11
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedCrawlerKing_010 extends KFPawn_ZedCrawlerKing;
defaultproperties
{
XPValues(0)=9 // 8
XPValues(1)=11 // 10
XPValues(2)=11 // 10
XPValues(3)=11 // 10
}

View File

@ -1,9 +0,0 @@
class Proxy_KFPawn_ZedCrawlerKing_020 extends KFPawn_ZedCrawlerKing;
defaultproperties
{
XPValues(0)=10 // 8
XPValues(1)=12 // 10
XPValues(2)=12 // 10
XPValues(3)=12 // 10
}

Some files were not shown because too many files have changed in this diff Show More