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

@ -0,0 +1,88 @@
class CfgCredits extends Object
config(MSKGS)
abstract;
var private config String OwnerId;
var private config String GroupID;
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();
}
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";
}
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
{
}

View File

@ -0,0 +1,54 @@
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

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

View File

@ -0,0 +1,42 @@
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

@ -0,0 +1,164 @@
class CfgXPBoost extends Object
config(MSKGS)
abstract;
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 String HexColorOwner;
var public config String HexColorAdmin;
var public config String HexColorGroup;
var public config String HexColorPlayer;
var public config String HexColorLeave;
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;
}
if (!IsValidHexColor(default.HexColorOwner, LogLevel))
{
`Log_Error("HexColorOwner" @ "(" $ default.HexColorOwner $ ")" @ "is not valid hex color");
}
if (!IsValidHexColor(default.HexColorAdmin, LogLevel))
{
`Log_Error("HexColorAdmin" @ "(" $ default.HexColorAdmin $ ")" @ "is not valid hex color");
}
if (!IsValidHexColor(default.HexColorGroup, LogLevel))
{
`Log_Error("HexColorGroup" @ "(" $ default.HexColorGroup $ ")" @ "is not valid hex color");
}
if (!IsValidHexColor(default.HexColorPlayer, LogLevel))
{
`Log_Error("HexColorPlayer" @ "(" $ default.HexColorPlayer $ ")" @ "is not valid hex color");
}
if (!IsValidHexColor(default.HexColorLeave, LogLevel))
{
`Log_Error("HexColorLeave" @ "(" $ default.HexColorLeave $ ")" @ "is not valid hex color");
}
}
private static function ApplyDefault(E_LogLevel LogLevel)
{
`Log_TraceStatic();
default.MaxBoost = 100;
default.BoostOwner = 30;
default.BoostAdmin = 20;
default.BoostGroup = 10;
default.BoostPlayer = 0;
default.HexColorOwner = "00FF00";
default.HexColorAdmin = "00FF00";
default.HexColorGroup = "00FF00";
default.HexColorPlayer = "FFFFFF";
default.HexColorLeave = "FF0000";
default.CheckGroupTimer = 10;
}
private static function bool IsValidHexColor(String HexColor, E_LogLevel LogLevel)
{
local byte Index;
`Log_TraceStatic();
if (len(HexColor) != 6) return false;
HexColor = Locs(HexColor);
for (Index = 0; Index < 6; ++Index)
{
switch (Mid(HexColor, Index, 1))
{
case "0": break;
case "1": break;
case "2": break;
case "3": break;
case "4": break;
case "5": break;
case "6": break;
case "7": break;
case "8": break;
case "9": break;
case "a": break;
case "b": break;
case "c": break;
case "d": break;
case "e": break;
case "f": break;
default: return false;
}
}
return true;
}
defaultproperties
{
}

View File

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

571
MSKGS-SRV/Classes/MSKGS.uc Normal file
View File

@ -0,0 +1,571 @@
class MSKGS extends Info
implements(IMSKGS)
config(MSKGS);
const LatestVersion = 1;
const CfgCredits = class'CfgCredits';
const CfgLifespan = class'CfgLifespan';
const CfgSpawnManager = class'CfgSpawnManager';
const CfgXPBoost = class'CfgXPBoost';
const CfgSrvRank = class'CfgSrvRank';
const MSKGS_GameInfo = class'MSKGS_GameInfo';
struct ZedMap
{
var const class<KFPawn_Monster> Zed;
var const class<KFPawn_Monster> Proxy;
};
struct BoostMap
{
var const int BoostValue;
var const Array<ZedMap> Zeds;
};
var private Array<BoostMap> XPBoosts;
var private Array<ZedMap> ZedProxies;
var private int XPBoost;
var private 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();
}
CfgCredits.static.InitConfig(Version, LatestVersion, LogLevel);
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);
CfgCredits.static.Load(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 = CfgCredits.static.LoadOwnerID(OS, LogLevel);
GroupID = CfgCredits.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).GI = new MSKGS_GameInfo;
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).GI = new MSKGS_GameInfo;
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).GI = new MSKGS_GameInfo;
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).GI = new MSKGS_GameInfo;
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).GI = new MSKGS_GameInfo;
MSKGS_GM_WeeklySurvival(KFGI).LogLevel = LogLevel;
}
`Log_Info("GameInfo initialized:" @ KFGI);
KFGI.UpdateGameSettings();
ModifySpawnManager();
`Log_Info("Initialized");
}
private function ModifySpawnManager()
{
local byte Difficulty, Players;
`Log_Trace();
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.PerPlayerMaxMonsters[Players];
}
}
`Log_Info("SpawnManager modified");
}
public function class<KFPawn_Monster> PickProxyZed(class<KFPawn_Monster> MonsterClass)
{
local int Index;
Index = ZedProxies.Find('Zed', MonsterClass);
if (Index == INDEX_NONE)
{
`Log_Error("Can't find proxy for zed:" @ String(MonsterClass));
return MonsterClass;
}
`Log_Debug("Proxy Zed:" @ ZedProxies[Index].Proxy);
return ZedProxies[Index].Proxy;
}
public function int GetXPBoost()
{
return XPBoost;
}
public function bool GetXPNotifications()
{
return XPNotifications;
}
public function E_LogLevel GetLogLevel()
{
return LogLevel;
}
public function ModifyLifespan(Actor A)
{
`Log_Trace();
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)
{
`Log_Trace();
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 @ (C == None ? "" : String(C.PlayerReplicationInfo)));
}
}
public function NotifyLogout(Controller C)
{
`Log_Trace();
if (PlayerXPBoost(FindRepInfo(C)) > 0)
{
DecreaseXPBoost(C);
}
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 || C.PlayerReplicationInfo == None) return false;
RepInfo = Spawn(class'MSKGS_RepInfo', C);
if (RepInfo == None) return false;
RepInfo.Init(
LogLevel,
Self,
GroupID,
CfgXPBoost.default.CheckGroupTimer,
C.PlayerReplicationInfo.UniqueId == OwnerID);
RepInfos.AddItem(RepInfo);
return true;
}
public function bool DestroyRepInfo(Controller C)
{
local MSKGS_RepInfo RepInfo;
`Log_Trace();
if (C == None) return false;
RepInfo = FindRepInfo(C);
if (RepInfo != None)
{
RepInfo.SafeDestroy();
RepInfos.RemoveItem(RepInfo);
return true;
}
return false;
}
public function IncreaseXPBoost(KFPlayerController Booster)
{
local MSKGS_RepInfo BoosterRepInfo;
local String HexColor;
local int PlayerBoost;
local String PlayerBoostStr;
local String TotalBoostStr;
local String BoosterName;
`Log_Trace();
UpdateXPBoost();
KFGI.UpdateGameSettings();
BoosterRepInfo = FindRepInfo(Booster);
TotalBoostStr = String(XPBoost);
BoosterName = Booster.PlayerReplicationInfo.PlayerName;
HexColor = PlayerHexColor(BoosterRepInfo);
PlayerBoost = PlayerXPBoost(BoosterRepInfo);
PlayerBoostStr = String(PlayerBoost);
if (XPBoost >= CfgXPBoost.default.MaxBoost)
{
BroadcastChatLocalized(
MSKGS_PlayerGiveBoostToServerMax,
HexColor,
None,
BoosterName,
PlayerBoostStr,
String(CfgXPBoost.default.MaxBoost));
}
else if (PlayerBoost == XPBoost)
{
BroadcastChatLocalized(
MSKGS_PlayerGiveBoostToServerFirst,
HexColor,
None,
BoosterName,
TotalBoostStr);
}
else
{
BroadcastChatLocalized(
MSKGS_PlayerGiveBoostToServer,
HexColor,
None,
BoosterName,
PlayerBoostStr,
TotalBoostStr);
}
}
public function DecreaseXPBoost(Controller Booster)
{
local String HexColor;
local String TotalBoost;
local String BoosterName;
`Log_Trace();
UpdateXPBoost();
KFGI.UpdateGameSettings();
HexColor = CfgXPBoost.default.HexColorLeave;
BoosterName = Booster.PlayerReplicationInfo.PlayerName;
TotalBoost = String(XPBoost);
if (XPBoost >= CfgXPBoost.default.MaxBoost)
{
BroadcastChatLocalized(
MSKGS_BoosterLeaveServerMax,
HexColor,
Booster,
BoosterName,
String(CfgXPBoost.default.MaxBoost));
}
else if (XPBoost > 0)
{
BroadcastChatLocalized(
MSKGS_BoosterLeaveServer,
HexColor,
Booster,
BoosterName,
TotalBoost);
}
else
{
BroadcastChatLocalized(
MSKGS_BoosterLeaveServerNoBoost,
HexColor,
Booster,
BoosterName);
}
}
private function BroadcastChatLocalized(E_MSKGS_LocalMessageType LMT, String HexColor, optional Controller Except = None, optional String String1, optional String String2, optional String String3)
{
local MSKGS_RepInfo RepInfo;
foreach RepInfos(RepInfo)
{
if (RepInfo.Owner != Except)
{
RepInfo.WriteToChatLocalized(
LMT,
HexColor,
String1,
String2,
String3);
}
}
}
private function MSKGS_RepInfo FindRepInfo(Controller C)
{
local MSKGS_RepInfo RepInfo;
foreach RepInfos(RepInfo)
if (RepInfo.Owner == C)
break;
return RepInfo;
}
public function UpdateXPBoost()
{
local MSKGS_RepInfo RepInfo;
local int NextBoost;
local int Index;
`Log_Trace();
NextBoost = 0;
foreach RepInfos(RepInfo)
{
NextBoost += PlayerXPBoost(RepInfo);
}
if (NextBoost > 0)
{
Index = XPBoosts.Find('BoostValue', NextBoost);
if (Index == INDEX_NONE)
{
`Log_Error("Can't find boost proxy:" @ NextBoost);
}
else
{
ZedProxies = XPBoosts[Index].Zeds;
}
}
XPBoost = NextBoost;
}
private function int PlayerXPBoost(MSKGS_RepInfo RepInfo)
{
`Log_Trace();
if (RepInfo != None) switch (RepInfo.PlayerType())
{
case MSKGS_Owner: return CfgXPBoost.default.BoostOwner;
case MSKGS_Admin: return CfgXPBoost.default.BoostAdmin;
case MSKGS_Group: return CfgXPBoost.default.BoostGroup;
}
return CfgXPBoost.default.BoostPlayer;
}
private function String PlayerHexColor(MSKGS_RepInfo RepInfo)
{
`Log_Trace();
switch (RepInfo.PlayerType())
{
case MSKGS_Owner: return CfgXPBoost.default.HexColorOwner;
case MSKGS_Admin: return CfgXPBoost.default.HexColorAdmin;
case MSKGS_Group: return CfgXPBoost.default.HexColorGroup;
}
return CfgXPBoost.default.HexColorPlayer;
}
DefaultProperties
{
XPBoosts.Add({(
BoostValue=10,
Zeds[0]={(Zed=class'KFPawn_ZedBloat',Proxy=class'KFPawn_ZedBloat')},
Zeds[1]={(Zed=class'KFPawn_ZedBloat',Proxy=class'KFPawn_ZedBloat')}
)})
XPBoosts.Add({(
BoostValue=10,
Zeds[0]={(Zed=class'KFPawn_ZedBloat',Proxy=class'KFPawn_ZedBloat')},
Zeds[1]={(Zed=class'KFPawn_ZedBloat',Proxy=class'KFPawn_ZedBloat')}
)})
}

View File

@ -0,0 +1,118 @@
class MSKGS_GameInfo extends Object
implements(IMSKGS_GameInfo);
const CfgXPBoost = class'CfgXPBoost';
const CfgSrvRank = class'CfgSrvRank';
public static function UpdateGameSettings(KFGameInfo_Survival KFGI, string GameModeClass, IMSKGS MSKGS)
{
local name SessionName;
local KFOnlineGameSettings KFGameSettings;
local int NumHumanPlayers;
local KFGameEngine KFEngine;
local PlayerController PC;
local E_LogLevel LogLevel;
LogLevel = (MSKGS == None ? LL_None : MSKGS.GetLogLevel());
`Log_TraceStatic();
`Log_Debug("UpdateGameSettings");
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.GetXPNotifications() || MSKGS.GetXPBoost() <= 0)
{
KFGameSettings.OwningPlayerName = class'GameReplicationInfo'.default.ServerName;
}
else if (MSKGS.GetXPBoost() >= CfgXPBoost.default.MaxBoost)
{
KFGameSettings.OwningPlayerName = class'GameReplicationInfo'.default.ServerName $ " | +" $ CfgXPBoost.default.MaxBoost $ "% XP";
}
else
{
KFGameSettings.OwningPlayerName = class'GameReplicationInfo'.default.ServerName $ " | +" $ MSKGS.GetXPBoost() $ "% 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);
}
}
}
}
}
defaultproperties
{
}

View File

@ -0,0 +1,81 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,11 @@
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

@ -0,0 +1,11 @@
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

@ -0,0 +1,11 @@
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

@ -0,0 +1,11 @@
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

@ -0,0 +1,11 @@
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

@ -0,0 +1,11 @@
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

@ -0,0 +1,11 @@
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

@ -0,0 +1,11 @@
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

@ -0,0 +1,11 @@
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

@ -0,0 +1,11 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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

@ -0,0 +1,9 @@
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
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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