wip
This commit is contained in:
parent
76a9f23530
commit
c406220e99
@ -1,57 +0,0 @@
|
|||||||
class CFG_Lifespan extends Object
|
|
||||||
config(MSKGS)
|
|
||||||
abstract;
|
|
||||||
|
|
||||||
var public config int Weapon;
|
|
||||||
var public config int Dosh;
|
|
||||||
|
|
||||||
public static function InitConfig(int Version, int LatestVersion, E_LogLevel LogLevel)
|
|
||||||
{
|
|
||||||
`Log_TraceStatic();
|
|
||||||
|
|
||||||
switch (Version)
|
|
||||||
{
|
|
||||||
case `NO_CONFIG:
|
|
||||||
ApplyDefault(LogLevel);
|
|
||||||
|
|
||||||
default: break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (LatestVersion != Version)
|
|
||||||
{
|
|
||||||
StaticSaveConfig();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function Load(E_LogLevel LogLevel)
|
|
||||||
{
|
|
||||||
`Log_TraceStatic();
|
|
||||||
|
|
||||||
switch (Locs(default.SortPolicy))
|
|
||||||
{
|
|
||||||
case "counterasc": return;
|
|
||||||
case "counterdesc": return;
|
|
||||||
case "nameasc": return;
|
|
||||||
case "namedesc": return;
|
|
||||||
case "playtimetotalasc": return;
|
|
||||||
case "playtimetotaldesc": return;
|
|
||||||
case "playtimeavgasc": return;
|
|
||||||
case "playtimeavgdesc": return;
|
|
||||||
}
|
|
||||||
|
|
||||||
`Log_Error("Can't load SortPolicy (" $ default.SortPolicy $ "), must be one of: CounterAsc CounterDesc NameAsc NameDesc PlaytimeTotalAsc PlaytimeTotalDesc PlaytimeAvgAsc PlaytimeAvgDesc");
|
|
||||||
default.SortPolicy = "CounterDesc";
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static function ApplyDefault(E_LogLevel LogLevel)
|
|
||||||
{
|
|
||||||
`Log_TraceStatic();
|
|
||||||
|
|
||||||
default.bEnable = false;
|
|
||||||
default.SortPolicy = "CounterDesc";
|
|
||||||
}
|
|
||||||
|
|
||||||
defaultproperties
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
@ -1,57 +0,0 @@
|
|||||||
class MapStat extends Object
|
|
||||||
config(MSKGS)
|
|
||||||
abstract;
|
|
||||||
|
|
||||||
var public config bool bEnable;
|
|
||||||
var public config String SortPolicy;
|
|
||||||
|
|
||||||
public static function InitConfig(int Version, int LatestVersion, E_LogLevel LogLevel)
|
|
||||||
{
|
|
||||||
`Log_TraceStatic();
|
|
||||||
|
|
||||||
switch (Version)
|
|
||||||
{
|
|
||||||
case `NO_CONFIG:
|
|
||||||
ApplyDefault(LogLevel);
|
|
||||||
|
|
||||||
default: break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (LatestVersion != Version)
|
|
||||||
{
|
|
||||||
StaticSaveConfig();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function Load(E_LogLevel LogLevel)
|
|
||||||
{
|
|
||||||
`Log_TraceStatic();
|
|
||||||
|
|
||||||
switch (Locs(default.SortPolicy))
|
|
||||||
{
|
|
||||||
case "counterasc": return;
|
|
||||||
case "counterdesc": return;
|
|
||||||
case "nameasc": return;
|
|
||||||
case "namedesc": return;
|
|
||||||
case "playtimetotalasc": return;
|
|
||||||
case "playtimetotaldesc": return;
|
|
||||||
case "playtimeavgasc": return;
|
|
||||||
case "playtimeavgdesc": return;
|
|
||||||
}
|
|
||||||
|
|
||||||
`Log_Error("Can't load SortPolicy (" $ default.SortPolicy $ "), must be one of: CounterAsc CounterDesc NameAsc NameDesc PlaytimeTotalAsc PlaytimeTotalDesc PlaytimeAvgAsc PlaytimeAvgDesc");
|
|
||||||
default.SortPolicy = "CounterDesc";
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static function ApplyDefault(E_LogLevel LogLevel)
|
|
||||||
{
|
|
||||||
`Log_TraceStatic();
|
|
||||||
|
|
||||||
default.bEnable = false;
|
|
||||||
default.SortPolicy = "CounterDesc";
|
|
||||||
}
|
|
||||||
|
|
||||||
defaultproperties
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
@ -1,57 +0,0 @@
|
|||||||
class MapStat extends Object
|
|
||||||
config(MSKGS)
|
|
||||||
abstract;
|
|
||||||
|
|
||||||
var public config bool bEnable;
|
|
||||||
var public config String SortPolicy;
|
|
||||||
|
|
||||||
public static function InitConfig(int Version, int LatestVersion, E_LogLevel LogLevel)
|
|
||||||
{
|
|
||||||
`Log_TraceStatic();
|
|
||||||
|
|
||||||
switch (Version)
|
|
||||||
{
|
|
||||||
case `NO_CONFIG:
|
|
||||||
ApplyDefault(LogLevel);
|
|
||||||
|
|
||||||
default: break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (LatestVersion != Version)
|
|
||||||
{
|
|
||||||
StaticSaveConfig();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function Load(E_LogLevel LogLevel)
|
|
||||||
{
|
|
||||||
`Log_TraceStatic();
|
|
||||||
|
|
||||||
switch (Locs(default.SortPolicy))
|
|
||||||
{
|
|
||||||
case "counterasc": return;
|
|
||||||
case "counterdesc": return;
|
|
||||||
case "nameasc": return;
|
|
||||||
case "namedesc": return;
|
|
||||||
case "playtimetotalasc": return;
|
|
||||||
case "playtimetotaldesc": return;
|
|
||||||
case "playtimeavgasc": return;
|
|
||||||
case "playtimeavgdesc": return;
|
|
||||||
}
|
|
||||||
|
|
||||||
`Log_Error("Can't load SortPolicy (" $ default.SortPolicy $ "), must be one of: CounterAsc CounterDesc NameAsc NameDesc PlaytimeTotalAsc PlaytimeTotalDesc PlaytimeAvgAsc PlaytimeAvgDesc");
|
|
||||||
default.SortPolicy = "CounterDesc";
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static function ApplyDefault(E_LogLevel LogLevel)
|
|
||||||
{
|
|
||||||
`Log_TraceStatic();
|
|
||||||
|
|
||||||
default.bEnable = false;
|
|
||||||
default.SortPolicy = "CounterDesc";
|
|
||||||
}
|
|
||||||
|
|
||||||
defaultproperties
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
54
MskGs/Classes/CfgLifespan.uc
Normal file
54
MskGs/Classes/CfgLifespan.uc
Normal 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
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
57
MskGs/Classes/CfgSpawnManager.uc
Normal file
57
MskGs/Classes/CfgSpawnManager.uc
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
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
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
42
MskGs/Classes/CfgSrvRank.uc
Normal file
42
MskGs/Classes/CfgSrvRank.uc
Normal 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
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
142
MskGs/Classes/CfgXPBoost.uc
Normal file
142
MskGs/Classes/CfgXPBoost.uc
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
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
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
@ -1,17 +1,28 @@
|
|||||||
class MSKGS extends Info;
|
class MSKGS extends Info
|
||||||
|
config(MSKGS);
|
||||||
|
|
||||||
const LatestVersion = 1;
|
const LatestVersion = 1;
|
||||||
|
|
||||||
const CfgRemoveItems = class'RemoveItems';
|
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 int Version;
|
||||||
var private config E_LogLevel LogLevel;
|
var private config E_LogLevel LogLevel;
|
||||||
|
|
||||||
|
var private OnlineSubsystem OS;
|
||||||
var private KFGameInfo KFGI;
|
var private KFGameInfo KFGI;
|
||||||
var private KFGameReplicationInfo KFGRI;
|
var private KFGameReplicationInfo KFGRI;
|
||||||
|
|
||||||
var private Array<MSKGS_RepInfo> RepInfos;
|
var private Array<MSKGS_RepInfo> RepInfos;
|
||||||
|
|
||||||
|
var private UniqueNetId OwnerID;
|
||||||
|
var private UniqueNetId GroupID;
|
||||||
|
|
||||||
public simulated function bool SafeDestroy()
|
public simulated function bool SafeDestroy()
|
||||||
{
|
{
|
||||||
`Log_Trace();
|
`Log_Trace();
|
||||||
@ -56,7 +67,10 @@ private function PreInit()
|
|||||||
SaveConfig();
|
SaveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
CfgRemoveItems.static.InitConfig(Version, LatestVersion);
|
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)
|
switch (Version)
|
||||||
{
|
{
|
||||||
@ -92,13 +106,25 @@ private function PreInit()
|
|||||||
}
|
}
|
||||||
`Log_Base("LogLevel:" @ LogLevel);
|
`Log_Base("LogLevel:" @ LogLevel);
|
||||||
|
|
||||||
RemoveItems = CfgRemoveItems.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 = CfgXPBoost.static.LoadOwnerID(OS, LogLevel);
|
||||||
|
GroupID = CfgXPBoost.static.LoadGroupID(OS, LogLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function PostInit()
|
private function PostInit()
|
||||||
{
|
{
|
||||||
local MSKGS_RepInfo RepInfo;
|
|
||||||
|
|
||||||
`Log_Trace();
|
`Log_Trace();
|
||||||
|
|
||||||
if (WorldInfo == None || WorldInfo.Game == None)
|
if (WorldInfo == None || WorldInfo.Game == None)
|
||||||
@ -128,6 +154,85 @@ private function PostInit()
|
|||||||
SafeDestroy();
|
SafeDestroy();
|
||||||
return;
|
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)
|
public function NotifyLogin(Controller C)
|
||||||
@ -162,6 +267,11 @@ public function bool CreateRepInfo(Controller C)
|
|||||||
|
|
||||||
if (RepInfo == None) return false;
|
if (RepInfo == None) return false;
|
||||||
|
|
||||||
|
RepInfo.LogLevel = LogLevel;
|
||||||
|
RepInfo.MSKGS = Self;
|
||||||
|
RepInfo.GroupID = GroupID;
|
||||||
|
RepInfo.ServerOwner = false;
|
||||||
|
|
||||||
RepInfos.AddItem(RepInfo);
|
RepInfos.AddItem(RepInfo);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -188,6 +298,119 @@ public function bool DestroyRepInfo(Controller C)
|
|||||||
return false;
|
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
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -3,7 +3,8 @@ class MSKGS_GM_Endless extends KFGameInfo_Endless;
|
|||||||
const GI = class'MSKGS_GameInfo';
|
const GI = class'MSKGS_GameInfo';
|
||||||
const GIC = "KFGameContent.KFGameInfo_Endless";
|
const GIC = "KFGameContent.KFGameInfo_Endless";
|
||||||
|
|
||||||
var public MSKGS_Mut Mut;
|
var public MSKGS MSKGS;
|
||||||
|
var public E_LogLevel LogLevel;
|
||||||
|
|
||||||
public simulated function ExileServerUsingKickBan()
|
public simulated function ExileServerUsingKickBan()
|
||||||
{
|
{
|
||||||
@ -12,12 +13,12 @@ public simulated function ExileServerUsingKickBan()
|
|||||||
|
|
||||||
public function UpdateGameSettings()
|
public function UpdateGameSettings()
|
||||||
{
|
{
|
||||||
GI.static.UpdateGameSettings(Self, GIC, Mut);
|
GI.static.UpdateGameSettings(Self, GIC, MSKGS);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function DistributeMoneyAndXP(class<KFPawn_Monster> MonsterClass, const out array<DamageInfo> DamageHistory, Controller Killer)
|
protected function DistributeMoneyAndXP(class<KFPawn_Monster> MonsterClass, const out array<DamageInfo> DamageHistory, Controller Killer)
|
||||||
{
|
{
|
||||||
Super.DistributeMoneyAndXP(GI.static.PickProxyZed(MonsterClass, Mut), DamageHistory, Killer);
|
Super.DistributeMoneyAndXP(GI.static.PickProxyZed(MonsterClass, MSKGS), DamageHistory, Killer);
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
|
@ -3,7 +3,8 @@ class MSKGS_GM_Objective extends KFGameInfo_Objective;
|
|||||||
const GI = class'MSKGS_GameInfo';
|
const GI = class'MSKGS_GameInfo';
|
||||||
const GIC = "KFGameContent.KFGameInfo_Objective";
|
const GIC = "KFGameContent.KFGameInfo_Objective";
|
||||||
|
|
||||||
var public MSKGSMut Mut;
|
var public MSKGS MSKGS;
|
||||||
|
var public E_LogLevel LogLevel;
|
||||||
|
|
||||||
simulated function ExileServerUsingKickBan()
|
simulated function ExileServerUsingKickBan()
|
||||||
{
|
{
|
||||||
@ -12,12 +13,12 @@ simulated function ExileServerUsingKickBan()
|
|||||||
|
|
||||||
public function UpdateGameSettings()
|
public function UpdateGameSettings()
|
||||||
{
|
{
|
||||||
GI.static.UpdateGameSettings(Self, GIC, Mut);
|
GI.static.UpdateGameSettings(Self, GIC, MSKGS);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function DistributeMoneyAndXP(class<KFPawn_Monster> MonsterClass, const out array<DamageInfo> DamageHistory, Controller Killer)
|
protected function DistributeMoneyAndXP(class<KFPawn_Monster> MonsterClass, const out array<DamageInfo> DamageHistory, Controller Killer)
|
||||||
{
|
{
|
||||||
Super.DistributeMoneyAndXP(GI.static.PickProxyZed(MonsterClass, Mut), DamageHistory, Killer);
|
Super.DistributeMoneyAndXP(GI.static.PickProxyZed(MonsterClass, MSKGS), DamageHistory, Killer);
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
|
@ -3,7 +3,8 @@ class MSKGS_GM_Survival extends KFGameInfo_Survival;
|
|||||||
const GI = class'MSKGS_GameInfo';
|
const GI = class'MSKGS_GameInfo';
|
||||||
const GIC = "KFGameContent.KFGameInfo_Survival";
|
const GIC = "KFGameContent.KFGameInfo_Survival";
|
||||||
|
|
||||||
var public MSKGSMut Mut;
|
var public MSKGS MSKGS;
|
||||||
|
var public E_LogLevel LogLevel;
|
||||||
|
|
||||||
simulated function ExileServerUsingKickBan()
|
simulated function ExileServerUsingKickBan()
|
||||||
{
|
{
|
||||||
@ -12,12 +13,12 @@ simulated function ExileServerUsingKickBan()
|
|||||||
|
|
||||||
public function UpdateGameSettings()
|
public function UpdateGameSettings()
|
||||||
{
|
{
|
||||||
GI.static.UpdateGameSettings(Self, GIC, Mut);
|
GI.static.UpdateGameSettings(Self, GIC, MSKGS);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function DistributeMoneyAndXP(class<KFPawn_Monster> MonsterClass, const out array<DamageInfo> DamageHistory, Controller Killer)
|
protected function DistributeMoneyAndXP(class<KFPawn_Monster> MonsterClass, const out array<DamageInfo> DamageHistory, Controller Killer)
|
||||||
{
|
{
|
||||||
Super.DistributeMoneyAndXP(GI.static.PickProxyZed(MonsterClass, Mut), DamageHistory, Killer);
|
Super.DistributeMoneyAndXP(GI.static.PickProxyZed(MonsterClass, MSKGS), DamageHistory, Killer);
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
|
@ -3,7 +3,8 @@ class MSKGS_GM_VersusSurvival extends KFGameInfo_VersusSurvival;
|
|||||||
const GI = class'MSKGS_GameInfo';
|
const GI = class'MSKGS_GameInfo';
|
||||||
const GIC = "KFGameContent.KFGameInfo_VersusSurvival";
|
const GIC = "KFGameContent.KFGameInfo_VersusSurvival";
|
||||||
|
|
||||||
var public MSKGSMut Mut;
|
var public MSKGS MSKGS;
|
||||||
|
var public E_LogLevel LogLevel;
|
||||||
|
|
||||||
simulated function ExileServerUsingKickBan()
|
simulated function ExileServerUsingKickBan()
|
||||||
{
|
{
|
||||||
@ -12,12 +13,12 @@ simulated function ExileServerUsingKickBan()
|
|||||||
|
|
||||||
public function UpdateGameSettings()
|
public function UpdateGameSettings()
|
||||||
{
|
{
|
||||||
GI.static.UpdateGameSettings(Self, GIC, Mut);
|
GI.static.UpdateGameSettings(Self, GIC, MSKGS);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function DistributeMoneyAndXP(class<KFPawn_Monster> MonsterClass, const out array<DamageInfo> DamageHistory, Controller Killer)
|
protected function DistributeMoneyAndXP(class<KFPawn_Monster> MonsterClass, const out array<DamageInfo> DamageHistory, Controller Killer)
|
||||||
{
|
{
|
||||||
Super.DistributeMoneyAndXP(GI.static.PickProxyZed(MonsterClass, Mut), DamageHistory, Killer);
|
Super.DistributeMoneyAndXP(GI.static.PickProxyZed(MonsterClass, MSKGS), DamageHistory, Killer);
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
|
@ -3,7 +3,8 @@ class MSKGS_GM_WeeklySurvival extends KFGameInfo_WeeklySurvival;
|
|||||||
const GI = class'MSKGS_GameInfo';
|
const GI = class'MSKGS_GameInfo';
|
||||||
const GIC = "KFGameContent.KFGameInfo_WeeklySurvival";
|
const GIC = "KFGameContent.KFGameInfo_WeeklySurvival";
|
||||||
|
|
||||||
var public MSKGSMut Mut;
|
var public MSKGS MSKGS;
|
||||||
|
var public E_LogLevel LogLevel;
|
||||||
|
|
||||||
simulated function ExileServerUsingKickBan()
|
simulated function ExileServerUsingKickBan()
|
||||||
{
|
{
|
||||||
@ -12,12 +13,12 @@ simulated function ExileServerUsingKickBan()
|
|||||||
|
|
||||||
public function UpdateGameSettings()
|
public function UpdateGameSettings()
|
||||||
{
|
{
|
||||||
GI.static.UpdateGameSettings(Self, GIC, Mut);
|
GI.static.UpdateGameSettings(Self, GIC, MSKGS);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function DistributeMoneyAndXP(class<KFPawn_Monster> MonsterClass, const out array<DamageInfo> DamageHistory, Controller Killer)
|
protected function DistributeMoneyAndXP(class<KFPawn_Monster> MonsterClass, const out array<DamageInfo> DamageHistory, Controller Killer)
|
||||||
{
|
{
|
||||||
Super.DistributeMoneyAndXP(GI.static.PickProxyZed(MonsterClass, Mut), DamageHistory, Killer);
|
Super.DistributeMoneyAndXP(GI.static.PickProxyZed(MonsterClass, MSKGS), DamageHistory, Killer);
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
class MSKGS_GameInfo extends Object;
|
class MSKGS_GameInfo extends Object;
|
||||||
|
|
||||||
public static function UpdateGameSettings(KFGameInfo_Survival KFGI, string GameModeClass, MSKGS_Mut Mut)
|
const CfgXPBoost = class'CfgXPBoost';
|
||||||
|
const CfgSrvRank = class'CfgSrvRank';
|
||||||
|
|
||||||
|
public static function UpdateGameSettings(KFGameInfo_Survival KFGI, string GameModeClass, MSKGS MSKGS)
|
||||||
{
|
{
|
||||||
local name SessionName;
|
local name SessionName;
|
||||||
local KFOnlineGameSettings KFGameSettings;
|
local KFOnlineGameSettings KFGameSettings;
|
||||||
@ -45,30 +48,30 @@ public static function UpdateGameSettings(KFGameInfo_Survival KFGI, string GameM
|
|||||||
if (KFGI.MyKFGRI != None)
|
if (KFGI.MyKFGRI != None)
|
||||||
{
|
{
|
||||||
KFGameSettings.NumWaves = KFGI.MyKFGRI.GetFinalWaveNum();
|
KFGameSettings.NumWaves = KFGI.MyKFGRI.GetFinalWaveNum();
|
||||||
KFGI.MyKFGRI.bCustom = False;
|
KFGI.MyKFGRI.bCustom = CfgSrvRank.default.bCustom;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
KFGameSettings.NumWaves = KFGI.WaveMax - 1;
|
KFGameSettings.NumWaves = KFGI.WaveMax - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Mut == None || !Mut.bXpNotifications || Mut.MskGsMemberList.Length == 0)
|
if (MSKGS == None || !MSKGS.XPNotifications || MSKGS.XPBoost <= 0)
|
||||||
{
|
{
|
||||||
KFGameSettings.OwningPlayerName = class'GameReplicationInfo'.default.ServerName;
|
KFGameSettings.OwningPlayerName = class'GameReplicationInfo'.default.ServerName;
|
||||||
}
|
}
|
||||||
else if (Mut.MskGsMemberList.Length > 10)
|
else if (MSKGS.XPBoost >= CfgXPBoost.default.MaxBoost)
|
||||||
{
|
{
|
||||||
KFGameSettings.OwningPlayerName = class'GameReplicationInfo'.default.ServerName $ " | +100% XP";
|
KFGameSettings.OwningPlayerName = class'GameReplicationInfo'.default.ServerName $ " | +" $ CfgXPBoost.default.MaxBoost $ "% XP";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
KFGameSettings.OwningPlayerName = class'GameReplicationInfo'.default.ServerName $ " | +" $ (Mut.MskGsMemberList.Length * 10) $ "% XP";
|
KFGameSettings.OwningPlayerName = class'GameReplicationInfo'.default.ServerName $ " | +" $ MSKGS.XPBoost $ "% XP";
|
||||||
}
|
}
|
||||||
|
|
||||||
KFGameSettings.NumPublicConnections = KFGI.MaxPlayersAllowed;
|
KFGameSettings.NumPublicConnections = KFGI.MaxPlayersAllowed;
|
||||||
KFGameSettings.bRequiresPassword = KFGI.RequiresPassword();
|
KFGameSettings.bRequiresPassword = KFGI.RequiresPassword();
|
||||||
KFGameSettings.bCustom = false;
|
KFGameSettings.bCustom = CfgSrvRank.default.bCustom;
|
||||||
KFGameSettings.bUsesStats = true;
|
KFGameSettings.bUsesStats = CfgSrvRank.default.bUsesStats;
|
||||||
KFGameSettings.NumSpectators = KFGI.NumSpectators;
|
KFGameSettings.NumSpectators = KFGI.NumSpectators;
|
||||||
|
|
||||||
if (KFGI.WorldInfo.IsConsoleDedicatedServer() || KFGI.WorldInfo.IsEOSDedicatedServer())
|
if (KFGI.WorldInfo.IsConsoleDedicatedServer() || KFGI.WorldInfo.IsEOSDedicatedServer())
|
||||||
@ -102,18 +105,15 @@ public static function UpdateGameSettings(KFGameInfo_Survival KFGI, string GameM
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function class<KFPawn_Monster> PickProxyZed(class<KFPawn_Monster> MonsterClass, MSKGS_Mut Mut)
|
public static function class<KFPawn_Monster> PickProxyZed(class<KFPawn_Monster> MonsterClass, MSKGS MSKGS)
|
||||||
{
|
{
|
||||||
local String SMC;
|
local String SMC;
|
||||||
local Name NMC;
|
local Name NMC;
|
||||||
local int Boost;
|
|
||||||
|
|
||||||
SMC = String(MonsterClass);
|
SMC = String(MonsterClass);
|
||||||
NMC = Name(SMC);
|
NMC = Name(SMC);
|
||||||
|
|
||||||
Boost = (Mut == None) ? 0 : Mut.MskGsMemberList.Length;
|
switch (MSKGS.XPBoost)
|
||||||
|
|
||||||
switch (Boost)
|
|
||||||
{
|
{
|
||||||
case 0: return MonsterClass;
|
case 0: return MonsterClass;
|
||||||
case 10: return PickProxyZed010(NMC, MonsterClass);
|
case 10: return PickProxyZed010(NMC, MonsterClass);
|
||||||
|
@ -1,180 +1,44 @@
|
|||||||
class MSKGS_Mut extends KFMutator
|
class MSKGS_Mut extends KFMutator
|
||||||
config(MSKGS);
|
config(MSKGS);
|
||||||
|
|
||||||
const CurrentVersion = 3;
|
var private MSKGS MSKGS;
|
||||||
var config int ConfigVersion;
|
|
||||||
|
|
||||||
var config int WeapLifespan;
|
public simulated function bool SafeDestroy()
|
||||||
var config int DoshLifespan;
|
|
||||||
|
|
||||||
var config array<string> AdminList;
|
|
||||||
var config array<int> PerPlayerMaxMonsters;
|
|
||||||
|
|
||||||
var public bool bXpNotifications;
|
|
||||||
var bool bInitialized;
|
|
||||||
|
|
||||||
var array<MskGsRepInfo> RepClients;
|
|
||||||
var array<Controller> MskGsMemberList;
|
|
||||||
var array<UniqueNetId> AdminUIDList;
|
|
||||||
|
|
||||||
function InitMutator(string Options, out string ErrorMessage)
|
|
||||||
{
|
{
|
||||||
local int MaxPlayers, MaxPlayersAllowed;
|
return (bPendingDelete || bDeleteMe || Destroy());
|
||||||
|
|
||||||
super.InitMutator(Options, ErrorMessage);
|
|
||||||
|
|
||||||
if (MyKFGI == none)
|
|
||||||
{
|
|
||||||
`log("[MskGsMut] Error: can't init, MyKFGI is none");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
MaxPlayers = Clamp(MyKFGI.GetIntOption(Options, "MaxPlayers", MaxPlayers), 6, 128);
|
|
||||||
MaxPlayersAllowed = MaxPlayers;
|
|
||||||
MyKFGI.MaxPlayers = MaxPlayers;
|
|
||||||
MyKFGI.MaxPlayersAllowed = MaxPlayersAllowed;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function InitConfig()
|
public event PreBeginPlay()
|
||||||
{
|
{
|
||||||
// Update from config version to current version if needed
|
Super.PreBeginPlay();
|
||||||
switch (ConfigVersion)
|
|
||||||
|
if (WorldInfo.NetMode == NM_Client) return;
|
||||||
|
|
||||||
|
foreach WorldInfo.DynamicActors(class'MSKGS', MSKGS)
|
||||||
{
|
{
|
||||||
case 0: // which means there is no config right now
|
|
||||||
WeapLifespan = 60 * 60;
|
|
||||||
case 1:
|
|
||||||
if (PerPlayerMaxMonsters.Length != 6)
|
|
||||||
{
|
|
||||||
PerPlayerMaxMonsters.Length = 0;
|
|
||||||
PerPlayerMaxMonsters.AddItem(12);
|
|
||||||
PerPlayerMaxMonsters.AddItem(18);
|
|
||||||
PerPlayerMaxMonsters.AddItem(24);
|
|
||||||
PerPlayerMaxMonsters.AddItem(32);
|
|
||||||
PerPlayerMaxMonsters.AddItem(34);
|
|
||||||
PerPlayerMaxMonsters.AddItem(36);
|
|
||||||
}
|
|
||||||
case 2:
|
|
||||||
if (DoshLifespan == 0)
|
|
||||||
{
|
|
||||||
DoshLifespan = 60 * 5;
|
|
||||||
}
|
|
||||||
case 2147483647:
|
|
||||||
`log("[MskGsMut] Config updated to version"@CurrentVersion);
|
|
||||||
break;
|
|
||||||
case CurrentVersion:
|
|
||||||
`log("[MskGsMut] Config is up-to-date");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
`log("[MskGsMut] Warn: The config version is higher than the current version");
|
|
||||||
`log("[MskGsMut] Warn: Config version is"@ConfigVersion@"but current version is"@CurrentVersion);
|
|
||||||
`log("[MskGsMut] Warn: The config version will be changed to "@CurrentVersion);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
ConfigVersion = CurrentVersion;
|
if (MSKGS == None)
|
||||||
SaveConfig();
|
{
|
||||||
|
MSKGS = WorldInfo.Spawn(class'MSKGS');
|
||||||
|
}
|
||||||
|
|
||||||
|
if (MSKGS == None)
|
||||||
|
{
|
||||||
|
`Log_Base("FATAL: Can't Spawn 'MSKGS'");
|
||||||
|
SafeDestroy();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
simulated event PostBeginPlay()
|
public function InitMutator(String Options, out String ErrorMessage)
|
||||||
{
|
{
|
||||||
super.PostBeginPlay();
|
Super.InitMutator(Options, ErrorMessage);
|
||||||
|
|
||||||
Initialize();
|
MSKGS.SetMaxPlayers(class'GameInfo'.static.GetIntOption(Options, "MaxPlayers", INDEX_NONE));
|
||||||
}
|
}
|
||||||
|
|
||||||
function Initialize()
|
public function AddMutator(Mutator Mut)
|
||||||
{
|
|
||||||
local MskGsVoteCollector VoteCollector;
|
|
||||||
local OnlineSubsystem steamworks;
|
|
||||||
local string Person;
|
|
||||||
local UniqueNetId PersonUID;
|
|
||||||
|
|
||||||
if (bInitialized) return;
|
|
||||||
|
|
||||||
if (MyKFGI == None || MyKFGI.MyKFGRI == None)
|
|
||||||
{
|
|
||||||
SetTimer(1.f, false, nameof(Initialize));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
bInitialized = true;
|
|
||||||
|
|
||||||
InitConfig();
|
|
||||||
|
|
||||||
MyKFGI.KFGFxManagerClass = class'MskGsGFxMoviePlayer_Manager';
|
|
||||||
MyKFGI.MyKFGRI.VoteCollectorClass = class'MskGsVoteCollector';
|
|
||||||
MyKFGI.MyKFGRI.VoteCollector = new(MyKFGI.MyKFGRI) MyKFGI.MyKFGRI.VoteCollectorClass;
|
|
||||||
|
|
||||||
VoteCollector = MskGsVoteCollector(MyKFGI.MyKFGRI.VoteCollector);
|
|
||||||
VoteCollector.bEnableMapStats = bEnableMapStats;
|
|
||||||
VoteCollector.bOfficialNextMapOnly = bOfficialNextMapOnly;
|
|
||||||
VoteCollector.bRandomizeNextMap = bRandomizeNextMap;
|
|
||||||
VoteCollector.SortPolicy = SortStats;
|
|
||||||
|
|
||||||
if (MskGs_Endless(MyKFGI) != None)
|
|
||||||
{
|
|
||||||
bXpNotifications = true;
|
|
||||||
MskGs_Endless(MyKFGI).Mut = Self;
|
|
||||||
}
|
|
||||||
else if (MskGs_Objective(MyKFGI) != None)
|
|
||||||
{
|
|
||||||
bXpNotifications = (MyKFGI.GameDifficulty != 3);
|
|
||||||
MskGs_Objective(MyKFGI).Mut = Self;
|
|
||||||
}
|
|
||||||
else if (MskGs_Survival(MyKFGI) != None)
|
|
||||||
{
|
|
||||||
bXpNotifications = (MyKFGI.GameDifficulty != 3);
|
|
||||||
MskGs_Survival(MyKFGI).Mut = Self;
|
|
||||||
}
|
|
||||||
else if (MskGs_VersusSurvival(MyKFGI) != None)
|
|
||||||
{
|
|
||||||
bXpNotifications = false;
|
|
||||||
MskGs_VersusSurvival(MyKFGI).Mut = Self;
|
|
||||||
}
|
|
||||||
else if (MskGs_WeeklySurvival(MyKFGI) != None)
|
|
||||||
{
|
|
||||||
bXpNotifications = true;
|
|
||||||
MskGs_WeeklySurvival(MyKFGI).Mut = Self;
|
|
||||||
}
|
|
||||||
|
|
||||||
steamworks = class'GameEngine'.static.GetOnlineSubsystem();
|
|
||||||
|
|
||||||
foreach AdminList(Person)
|
|
||||||
{
|
|
||||||
if (IsUID(Person) && steamworks.StringToUniqueNetId(Person, PersonUID))
|
|
||||||
{
|
|
||||||
if (AdminUIDList.Find('Uid', PersonUID.Uid) == -1)
|
|
||||||
AdminUIDList.AddItem(PersonUID);
|
|
||||||
}
|
|
||||||
else if (steamworks.Int64ToUniqueNetId(Person, PersonUID))
|
|
||||||
{
|
|
||||||
if (AdminUIDList.Find('Uid', PersonUID.Uid) == -1)
|
|
||||||
AdminUIDList.AddItem(PersonUID);
|
|
||||||
}
|
|
||||||
else `Log("[MskGsMut] WARN: Can't add admin:"@Person);
|
|
||||||
}
|
|
||||||
|
|
||||||
ModifySpawnManager();
|
|
||||||
|
|
||||||
`Log("[MskGsMut] Mutator loaded.");
|
|
||||||
}
|
|
||||||
|
|
||||||
function ModifySpawnManager()
|
|
||||||
{
|
|
||||||
local int i, j;
|
|
||||||
|
|
||||||
if (MyKFGI.SpawnManager == None)
|
|
||||||
{
|
|
||||||
SetTimer(1.f, false, nameof(ModifySpawnManager));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < MyKFGI.SpawnManager.PerDifficultyMaxMonsters.Length; i++)
|
|
||||||
for (j = 0; j < MyKFGI.SpawnManager.PerDifficultyMaxMonsters[i].MaxMonsters.Length; j++)
|
|
||||||
MyKFGI.SpawnManager.PerDifficultyMaxMonsters[i].MaxMonsters[j] = PerPlayerMaxMonsters[j];
|
|
||||||
}
|
|
||||||
|
|
||||||
function AddMutator(Mutator Mut)
|
|
||||||
{
|
{
|
||||||
if (Mut == Self) return;
|
if (Mut == Self) return;
|
||||||
|
|
||||||
@ -184,133 +48,34 @@ function AddMutator(Mutator Mut)
|
|||||||
Super.AddMutator(Mut);
|
Super.AddMutator(Mut);
|
||||||
}
|
}
|
||||||
|
|
||||||
private function bool IsUID(String ID)
|
public function bool CheckRelevance(Actor A)
|
||||||
{
|
{
|
||||||
return (Left(ID, 2) ~= "0x");
|
local bool Relevance;
|
||||||
|
|
||||||
|
Relevance = Super.CheckRelevance(A);
|
||||||
|
if (Relevance)
|
||||||
|
{
|
||||||
|
MSKGS.ModifyLifespan(A);
|
||||||
|
}
|
||||||
|
|
||||||
|
return Relevance;
|
||||||
}
|
}
|
||||||
|
|
||||||
function bool CheckRelevance(Actor Other)
|
public function NotifyLogin(Controller C)
|
||||||
{
|
{
|
||||||
local bool SuperRelevant;
|
MSKGS.NotifyLogin(C);
|
||||||
|
|
||||||
SuperRelevant = super.CheckRelevance(Other);
|
Super.NotifyLogin(C);
|
||||||
|
|
||||||
// if this actor is going to be destroyed, return now
|
|
||||||
if (!SuperRelevant)
|
|
||||||
{
|
|
||||||
return SuperRelevant;
|
|
||||||
}
|
|
||||||
|
|
||||||
// otherwise modify dosh or weapon lifespan
|
|
||||||
if (KFDroppedPickup_Cash(Other) != None)
|
|
||||||
{
|
|
||||||
if (DoshLifespan != 0) Other.Lifespan = float(DoshLifespan);
|
|
||||||
}
|
|
||||||
else if (KFDroppedPickup(Other) != None)
|
|
||||||
{
|
|
||||||
if (WeapLifespan != 0) Other.Lifespan = float(WeapLifespan);
|
|
||||||
}
|
|
||||||
|
|
||||||
return SuperRelevant;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function AddMskGsMember(Controller C)
|
public function NotifyLogout(Controller C)
|
||||||
{
|
{
|
||||||
MskGsMemberList.AddItem(C);
|
MSKGS.NotifyLogout(C);
|
||||||
if (bXpNotifications)
|
|
||||||
{
|
|
||||||
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 NotifyLogin(Controller C)
|
Super.NotifyLogout(C);
|
||||||
{
|
|
||||||
local MskGsRepInfo RepInfo;
|
|
||||||
|
|
||||||
if (C == None) return;
|
|
||||||
|
|
||||||
Initialize();
|
|
||||||
|
|
||||||
RepInfo = Spawn(class'MskGsRepInfo', KFPlayerController(C));
|
|
||||||
RepInfo.C = C;
|
|
||||||
RepInfo.Mut = Self;
|
|
||||||
RepClients.AddItem(RepInfo);
|
|
||||||
|
|
||||||
if (AdminUIDList.Find('Uid', C.PlayerReplicationInfo.UniqueId.Uid) != -1)
|
|
||||||
C.PlayerReplicationInfo.bAdmin = true;
|
|
||||||
|
|
||||||
super.NotifyLogin(C);
|
|
||||||
}
|
|
||||||
|
|
||||||
function NotifyLogout(Controller C)
|
|
||||||
{
|
|
||||||
local MskGsVoteCollector VoteCollector;
|
|
||||||
local int i;
|
|
||||||
|
|
||||||
if (C == None) return;
|
|
||||||
|
|
||||||
Initialize();
|
|
||||||
|
|
||||||
VoteCollector = MskGsVoteCollector(MyKFGI.MyKFGRI.VoteCollector);
|
|
||||||
VoteCollector.NotifyLogout(C);
|
|
||||||
|
|
||||||
if (MskGsMemberList.Find(C) != INDEX_NONE)
|
|
||||||
{
|
|
||||||
MskGsMemberList.RemoveItem(C);
|
|
||||||
if (bXpNotifications)
|
|
||||||
{
|
|
||||||
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();
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = RepClients.Length - 1; i >= 0; i--)
|
|
||||||
{
|
|
||||||
if (RepClients[i].C == C)
|
|
||||||
{
|
|
||||||
RepClients[i].Destroy();
|
|
||||||
RepClients.Remove(i, 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
super.NotifyLogout(C);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
bInitialized=false
|
|
||||||
}
|
}
|
||||||
|
@ -1,78 +1,123 @@
|
|||||||
class MskGsRepInfo extends ReplicationInfo;
|
class MSKGS_RepInfo extends ReplicationInfo;
|
||||||
|
|
||||||
const GroupUIDStr = "0x017000000223386E";
|
const CfgXPBoost = class'CfgXPBoost';
|
||||||
const MaxRetries = 10;
|
|
||||||
const TimerDelay = 1.0f;
|
|
||||||
|
|
||||||
// Server vars
|
var public E_LogLevel LogLevel;
|
||||||
var public MskGsMut Mut;
|
var public MSKGS MSKGS;
|
||||||
var public Controller C;
|
var public UniqueNetId GroupID;
|
||||||
var private int ServerApplyMembershipRetries;
|
var public float CheckGroupTimer;
|
||||||
|
|
||||||
// Client vars
|
var private KFPlayerController KFPC;
|
||||||
var private OnlineSubsystemSteamworks SW;
|
var private OnlineSubsystem OS;
|
||||||
var private int ClientGetOnlineSubsystemRetries;
|
|
||||||
|
|
||||||
simulated event PostBeginPlay()
|
var public bool ServerOwner;
|
||||||
|
var private bool GroupMember;
|
||||||
|
|
||||||
|
replication
|
||||||
{
|
{
|
||||||
super.PostBeginPlay();
|
if (bNetInitial && Role == ROLE_Authority)
|
||||||
|
LogLevel, GroupID, CheckGroupTimer;
|
||||||
|
}
|
||||||
|
|
||||||
if (bDeleteMe) return;
|
public simulated function bool SafeDestroy()
|
||||||
|
{
|
||||||
|
`Log_Trace();
|
||||||
|
|
||||||
|
return (bPendingDelete || bDeleteMe || Destroy());
|
||||||
|
}
|
||||||
|
|
||||||
|
public simulated event PreBeginPlay()
|
||||||
|
{
|
||||||
|
`Log_Trace();
|
||||||
|
|
||||||
if (Role < ROLE_Authority || WorldInfo.NetMode == NM_StandAlone)
|
if (Role < ROLE_Authority || WorldInfo.NetMode == NM_StandAlone)
|
||||||
{
|
{
|
||||||
ClientGetOnlineSubsystem();
|
OS = class'GameEngine'.static.GetOnlineSubsystem();
|
||||||
}
|
if (OS != None)
|
||||||
}
|
|
||||||
|
|
||||||
private reliable client function ClientGetOnlineSubsystem()
|
|
||||||
{
|
|
||||||
if (SW == None)
|
|
||||||
{
|
{
|
||||||
SW = OnlineSubsystemSteamworks(class'GameEngine'.static.GetOnlineSubsystem());
|
CheckGroupMembership();
|
||||||
}
|
|
||||||
|
|
||||||
if (SW == None && ClientGetOnlineSubsystemRetries < MaxRetries)
|
|
||||||
{
|
|
||||||
ClientGetOnlineSubsystemRetries++;
|
|
||||||
SetTimer(TimerDelay, false, nameof(ClientGetOnlineSubsystem));
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ClearTimer(nameof(ClientGetOnlineSubsystem));
|
`Log_Error("Can't get online subsystem!");
|
||||||
if (SW != None) ClientGetMembership();
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Super.PreBeginPlay();
|
||||||
}
|
}
|
||||||
|
|
||||||
private reliable client function ClientGetMembership()
|
public simulated event PostBeginPlay()
|
||||||
{
|
{
|
||||||
local UniqueNetId GroupID;
|
`Log_Trace();
|
||||||
class'OnlineSubsystem'.Static.StringToUniqueNetId(GroupUIDStr, GroupID);
|
|
||||||
if (SW.CheckPlayerGroup(GroupID)) ServerApplyMembership();
|
if (bPendingDelete || bDeleteMe) return;
|
||||||
|
|
||||||
|
Super.PostBeginPlay();
|
||||||
}
|
}
|
||||||
|
|
||||||
private simulated reliable server function ServerApplyMembership()
|
private simulated function CheckGroupMembership()
|
||||||
{
|
{
|
||||||
if ((Mut == None || C == None) && ServerApplyMembershipRetries < MaxRetries)
|
if (OS.CheckPlayerGroup(GroupID))
|
||||||
{
|
{
|
||||||
ServerApplyMembershipRetries++;
|
ClearTimer(nameof(CheckGroupMembership));
|
||||||
SetTimer(TimerDelay, false, nameof(ServerApplyMembership));
|
ServerApplyMembership();
|
||||||
return;
|
}
|
||||||
|
else if (CheckGroupTimer > 0.0f && !IsTimerActive(nameof(CheckGroupMembership)))
|
||||||
|
{
|
||||||
|
SetTimer(CheckGroupTimer, true, nameof(CheckGroupMembership));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private reliable server function ServerApplyMembership()
|
||||||
|
{
|
||||||
|
GroupMember = true;
|
||||||
|
MSKGS.IncreaseXPBoost(GetKFPC());
|
||||||
|
}
|
||||||
|
|
||||||
|
public function int XPBoost()
|
||||||
|
{
|
||||||
|
`Log_Trace();
|
||||||
|
|
||||||
|
if (ServerOwner)
|
||||||
|
{
|
||||||
|
return CfgXPBoost.default.BoostOwner;
|
||||||
}
|
}
|
||||||
|
|
||||||
ClearTimer(nameof(ServerApplyMembership));
|
if (GetKFPC() != None && GetKFPC().PlayerReplicationInfo != None && GetKFPC().PlayerReplicationInfo.bAdmin)
|
||||||
|
{
|
||||||
|
return CfgXPBoost.default.BoostAdmin;
|
||||||
|
}
|
||||||
|
|
||||||
if (Mut != None && C != None) Mut.AddMskGsMember(C);
|
if (GroupMember)
|
||||||
|
{
|
||||||
|
return CfgXPBoost.default.BoostGroup;
|
||||||
|
}
|
||||||
|
|
||||||
|
return CfgXPBoost.default.BoostPlayer;
|
||||||
}
|
}
|
||||||
|
|
||||||
DefaultProperties
|
private simulated function KFPlayerController GetKFPC()
|
||||||
{
|
{
|
||||||
bAlwaysRelevant = false;
|
`Log_Trace();
|
||||||
bOnlyRelevantToOwner = true;
|
|
||||||
Role = ROLE_Authority;
|
|
||||||
RemoteRole = ROLE_SimulatedProxy;
|
|
||||||
bSkipActorPropertyReplication = false;
|
|
||||||
|
|
||||||
ServerApplyMembershipRetries = 0
|
if (KFPC != None) return KFPC;
|
||||||
ClientGetOnlineSubsystemRetries = 0
|
|
||||||
|
KFPC = KFPlayerController(Owner);
|
||||||
|
|
||||||
|
if (KFPC == None && ROLE < ROLE_Authority)
|
||||||
|
{
|
||||||
|
KFPC = KFPlayerController(GetALocalPlayerController());
|
||||||
|
}
|
||||||
|
|
||||||
|
return KFPC;
|
||||||
|
}
|
||||||
|
|
||||||
|
defaultproperties
|
||||||
|
{
|
||||||
|
bAlwaysRelevant = false
|
||||||
|
bOnlyRelevantToOwner = true
|
||||||
|
bSkipActorPropertyReplication = false
|
||||||
|
|
||||||
|
GroupMember = false;
|
||||||
|
ServerOwner = false;
|
||||||
}
|
}
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKingSubspawn_010 extends Proxy_KFPawn_ZedBloatKingSubspawn_010;
|
class Proxy_KFPawn_ZedBloatKingSubspawn_010 extends KFPawn_ZedBloatKingSubspawn;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKingSubspawn_020 extends Proxy_KFPawn_ZedBloatKingSubspawn_020;
|
class Proxy_KFPawn_ZedBloatKingSubspawn_020 extends KFPawn_ZedBloatKingSubspawn;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKingSubspawn_030 extends Proxy_KFPawn_ZedBloatKingSubspawn_030;
|
class Proxy_KFPawn_ZedBloatKingSubspawn_030 extends KFPawn_ZedBloatKingSubspawn;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKingSubspawn_040 extends Proxy_KFPawn_ZedBloatKingSubspawn_040;
|
class Proxy_KFPawn_ZedBloatKingSubspawn_040 extends KFPawn_ZedBloatKingSubspawn;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKingSubspawn_050 extends Proxy_KFPawn_ZedBloatKingSubspawn_050;
|
class Proxy_KFPawn_ZedBloatKingSubspawn_050 extends KFPawn_ZedBloatKingSubspawn;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKingSubspawn_060 extends Proxy_KFPawn_ZedBloatKingSubspawn_060;
|
class Proxy_KFPawn_ZedBloatKingSubspawn_060 extends KFPawn_ZedBloatKingSubspawn;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKingSubspawn_070 extends Proxy_KFPawn_ZedBloatKingSubspawn_070;
|
class Proxy_KFPawn_ZedBloatKingSubspawn_070 extends KFPawn_ZedBloatKingSubspawn;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKingSubspawn_080 extends Proxy_KFPawn_ZedBloatKingSubspawn_080;
|
class Proxy_KFPawn_ZedBloatKingSubspawn_080 extends KFPawn_ZedBloatKingSubspawn;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKingSubspawn_090 extends Proxy_KFPawn_ZedBloatKingSubspawn_090;
|
class Proxy_KFPawn_ZedBloatKingSubspawn_090 extends KFPawn_ZedBloatKingSubspawn;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKingSubspawn_100 extends Proxy_KFPawn_ZedBloatKingSubspawn_100;
|
class Proxy_KFPawn_ZedBloatKingSubspawn_100 extends KFPawn_ZedBloatKingSubspawn;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKing_010 extends Proxy_KFPawn_ZedBloatKing_010;
|
class Proxy_KFPawn_ZedBloatKing_010 extends KFPawn_ZedBloatKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKing_020 extends Proxy_KFPawn_ZedBloatKing_020;
|
class Proxy_KFPawn_ZedBloatKing_020 extends KFPawn_ZedBloatKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKing_030 extends Proxy_KFPawn_ZedBloatKing_030;
|
class Proxy_KFPawn_ZedBloatKing_030 extends KFPawn_ZedBloatKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKing_040 extends Proxy_KFPawn_ZedBloatKing_040;
|
class Proxy_KFPawn_ZedBloatKing_040 extends KFPawn_ZedBloatKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKing_050 extends Proxy_KFPawn_ZedBloatKing_050;
|
class Proxy_KFPawn_ZedBloatKing_050 extends KFPawn_ZedBloatKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKing_060 extends Proxy_KFPawn_ZedBloatKing_060;
|
class Proxy_KFPawn_ZedBloatKing_060 extends KFPawn_ZedBloatKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKing_070 extends Proxy_KFPawn_ZedBloatKing_070;
|
class Proxy_KFPawn_ZedBloatKing_070 extends KFPawn_ZedBloatKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKing_080 extends Proxy_KFPawn_ZedBloatKing_080;
|
class Proxy_KFPawn_ZedBloatKing_080 extends KFPawn_ZedBloatKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKing_090 extends Proxy_KFPawn_ZedBloatKing_090;
|
class Proxy_KFPawn_ZedBloatKing_090 extends KFPawn_ZedBloatKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKing_100 extends Proxy_KFPawn_ZedBloatKing_100;
|
class Proxy_KFPawn_ZedBloatKing_100 extends KFPawn_ZedBloatKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_010 extends Proxy_KFPawn_ZedBloatKing_SantasWorkshop_010;
|
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_010 extends KFPawn_ZedBloatKing_SantasWorkshop;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_020 extends Proxy_KFPawn_ZedBloatKing_SantasWorkshop_020;
|
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_020 extends KFPawn_ZedBloatKing_SantasWorkshop;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_030 extends Proxy_KFPawn_ZedBloatKing_SantasWorkshop_030;
|
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_030 extends KFPawn_ZedBloatKing_SantasWorkshop;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_040 extends Proxy_KFPawn_ZedBloatKing_SantasWorkshop_040;
|
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_040 extends KFPawn_ZedBloatKing_SantasWorkshop;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_050 extends Proxy_KFPawn_ZedBloatKing_SantasWorkshop_050;
|
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_050 extends KFPawn_ZedBloatKing_SantasWorkshop;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_060 extends Proxy_KFPawn_ZedBloatKing_SantasWorkshop_060;
|
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_060 extends KFPawn_ZedBloatKing_SantasWorkshop;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_070 extends Proxy_KFPawn_ZedBloatKing_SantasWorkshop_070;
|
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_070 extends KFPawn_ZedBloatKing_SantasWorkshop;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_080 extends Proxy_KFPawn_ZedBloatKing_SantasWorkshop_080;
|
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_080 extends KFPawn_ZedBloatKing_SantasWorkshop;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_090 extends Proxy_KFPawn_ZedBloatKing_SantasWorkshop_090;
|
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_090 extends KFPawn_ZedBloatKing_SantasWorkshop;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_100 extends Proxy_KFPawn_ZedBloatKing_SantasWorkshop_100;
|
class Proxy_KFPawn_ZedBloatKing_SantasWorkshop_100 extends KFPawn_ZedBloatKing_SantasWorkshop;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloat_010 extends Proxy_KFPawn_ZedBloat_010;
|
class Proxy_KFPawn_ZedBloat_010 extends KFPawn_ZedBloat;
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloat_020 extends Proxy_KFPawn_ZedBloat_020;
|
class Proxy_KFPawn_ZedBloat_020 extends KFPawn_ZedBloat;
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloat_030 extends Proxy_KFPawn_ZedBloat_030;
|
class Proxy_KFPawn_ZedBloat_030 extends KFPawn_ZedBloat;
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloat_040 extends Proxy_KFPawn_ZedBloat_040;
|
class Proxy_KFPawn_ZedBloat_040 extends KFPawn_ZedBloat;
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloat_050 extends Proxy_KFPawn_ZedBloat_050;
|
class Proxy_KFPawn_ZedBloat_050 extends KFPawn_ZedBloat;
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloat_060 extends Proxy_KFPawn_ZedBloat_060;
|
class Proxy_KFPawn_ZedBloat_060 extends KFPawn_ZedBloat;
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloat_070 extends Proxy_KFPawn_ZedBloat_070;
|
class Proxy_KFPawn_ZedBloat_070 extends KFPawn_ZedBloat;
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloat_080 extends Proxy_KFPawn_ZedBloat_080;
|
class Proxy_KFPawn_ZedBloat_080 extends KFPawn_ZedBloat;
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloat_090 extends Proxy_KFPawn_ZedBloat_090;
|
class Proxy_KFPawn_ZedBloat_090 extends KFPawn_ZedBloat;
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedBloat_100 extends Proxy_KFPawn_ZedBloat_100;
|
class Proxy_KFPawn_ZedBloat_100 extends KFPawn_ZedBloat;
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_AlphaKing_010 extends Proxy_KFPawn_ZedClot_AlphaKing_010;
|
class Proxy_KFPawn_ZedClot_AlphaKing_010 extends KFPawn_ZedClot_AlphaKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_AlphaKing_020 extends Proxy_KFPawn_ZedClot_AlphaKing_020;
|
class Proxy_KFPawn_ZedClot_AlphaKing_020 extends KFPawn_ZedClot_AlphaKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_AlphaKing_030 extends Proxy_KFPawn_ZedClot_AlphaKing_030;
|
class Proxy_KFPawn_ZedClot_AlphaKing_030 extends KFPawn_ZedClot_AlphaKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_AlphaKing_040 extends Proxy_KFPawn_ZedClot_AlphaKing_040;
|
class Proxy_KFPawn_ZedClot_AlphaKing_040 extends KFPawn_ZedClot_AlphaKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_AlphaKing_050 extends Proxy_KFPawn_ZedClot_AlphaKing_050;
|
class Proxy_KFPawn_ZedClot_AlphaKing_050 extends KFPawn_ZedClot_AlphaKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_AlphaKing_060 extends Proxy_KFPawn_ZedClot_AlphaKing_060;
|
class Proxy_KFPawn_ZedClot_AlphaKing_060 extends KFPawn_ZedClot_AlphaKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_AlphaKing_070 extends Proxy_KFPawn_ZedClot_AlphaKing_070;
|
class Proxy_KFPawn_ZedClot_AlphaKing_070 extends KFPawn_ZedClot_AlphaKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_AlphaKing_080 extends Proxy_KFPawn_ZedClot_AlphaKing_080;
|
class Proxy_KFPawn_ZedClot_AlphaKing_080 extends KFPawn_ZedClot_AlphaKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_AlphaKing_090 extends Proxy_KFPawn_ZedClot_AlphaKing_090;
|
class Proxy_KFPawn_ZedClot_AlphaKing_090 extends KFPawn_ZedClot_AlphaKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_AlphaKing_100 extends Proxy_KFPawn_ZedClot_AlphaKing_100;
|
class Proxy_KFPawn_ZedClot_AlphaKing_100 extends KFPawn_ZedClot_AlphaKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_Cyst_010 extends Proxy_KFPawn_ZedClot_Cyst_010;
|
class Proxy_KFPawn_ZedClot_Cyst_010 extends KFPawn_ZedClot_Cyst;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_Cyst_020 extends Proxy_KFPawn_ZedClot_Cyst_020;
|
class Proxy_KFPawn_ZedClot_Cyst_020 extends KFPawn_ZedClot_Cyst;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_Cyst_030 extends Proxy_KFPawn_ZedClot_Cyst_030;
|
class Proxy_KFPawn_ZedClot_Cyst_030 extends KFPawn_ZedClot_Cyst;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_Cyst_040 extends Proxy_KFPawn_ZedClot_Cyst_040;
|
class Proxy_KFPawn_ZedClot_Cyst_040 extends KFPawn_ZedClot_Cyst;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_Cyst_050 extends Proxy_KFPawn_ZedClot_Cyst_050;
|
class Proxy_KFPawn_ZedClot_Cyst_050 extends KFPawn_ZedClot_Cyst;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_Cyst_060 extends Proxy_KFPawn_ZedClot_Cyst_060;
|
class Proxy_KFPawn_ZedClot_Cyst_060 extends KFPawn_ZedClot_Cyst;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_Cyst_070 extends Proxy_KFPawn_ZedClot_Cyst_070;
|
class Proxy_KFPawn_ZedClot_Cyst_070 extends KFPawn_ZedClot_Cyst;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_Cyst_080 extends Proxy_KFPawn_ZedClot_Cyst_080;
|
class Proxy_KFPawn_ZedClot_Cyst_080 extends KFPawn_ZedClot_Cyst;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_Cyst_090 extends Proxy_KFPawn_ZedClot_Cyst_090;
|
class Proxy_KFPawn_ZedClot_Cyst_090 extends KFPawn_ZedClot_Cyst;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_Cyst_100 extends Proxy_KFPawn_ZedClot_Cyst_100;
|
class Proxy_KFPawn_ZedClot_Cyst_100 extends KFPawn_ZedClot_Cyst;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_Slasher_010 extends Proxy_KFPawn_ZedClot_Slasher_010;
|
class Proxy_KFPawn_ZedClot_Slasher_010 extends KFPawn_ZedClot_Slasher;
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_Slasher_020 extends Proxy_KFPawn_ZedClot_Slasher_020;
|
class Proxy_KFPawn_ZedClot_Slasher_020 extends KFPawn_ZedClot_Slasher;
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_Slasher_030 extends Proxy_KFPawn_ZedClot_Slasher_030;
|
class Proxy_KFPawn_ZedClot_Slasher_030 extends KFPawn_ZedClot_Slasher;
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_Slasher_040 extends Proxy_KFPawn_ZedClot_Slasher_040;
|
class Proxy_KFPawn_ZedClot_Slasher_040 extends KFPawn_ZedClot_Slasher;
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_Slasher_050 extends Proxy_KFPawn_ZedClot_Slasher_050;
|
class Proxy_KFPawn_ZedClot_Slasher_050 extends KFPawn_ZedClot_Slasher;
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_Slasher_060 extends Proxy_KFPawn_ZedClot_Slasher_060;
|
class Proxy_KFPawn_ZedClot_Slasher_060 extends KFPawn_ZedClot_Slasher;
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_Slasher_070 extends Proxy_KFPawn_ZedClot_Slasher_070;
|
class Proxy_KFPawn_ZedClot_Slasher_070 extends KFPawn_ZedClot_Slasher;
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_Slasher_080 extends Proxy_KFPawn_ZedClot_Slasher_080;
|
class Proxy_KFPawn_ZedClot_Slasher_080 extends KFPawn_ZedClot_Slasher;
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_Slasher_090 extends Proxy_KFPawn_ZedClot_Slasher_090;
|
class Proxy_KFPawn_ZedClot_Slasher_090 extends KFPawn_ZedClot_Slasher;
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedClot_Slasher_100 extends Proxy_KFPawn_ZedClot_Slasher_100;
|
class Proxy_KFPawn_ZedClot_Slasher_100 extends KFPawn_ZedClot_Slasher;
|
||||||
|
|
||||||
DefaultProperties
|
DefaultProperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedCrawlerKing_010 extends Proxy_KFPawn_ZedCrawlerKing_010;
|
class Proxy_KFPawn_ZedCrawlerKing_010 extends KFPawn_ZedCrawlerKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedCrawlerKing_020 extends Proxy_KFPawn_ZedCrawlerKing_020;
|
class Proxy_KFPawn_ZedCrawlerKing_020 extends KFPawn_ZedCrawlerKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedCrawlerKing_030 extends Proxy_KFPawn_ZedCrawlerKing_030;
|
class Proxy_KFPawn_ZedCrawlerKing_030 extends KFPawn_ZedCrawlerKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedCrawlerKing_040 extends Proxy_KFPawn_ZedCrawlerKing_040;
|
class Proxy_KFPawn_ZedCrawlerKing_040 extends KFPawn_ZedCrawlerKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedCrawlerKing_050 extends Proxy_KFPawn_ZedCrawlerKing_050;
|
class Proxy_KFPawn_ZedCrawlerKing_050 extends KFPawn_ZedCrawlerKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedCrawlerKing_060 extends Proxy_KFPawn_ZedCrawlerKing_060;
|
class Proxy_KFPawn_ZedCrawlerKing_060 extends KFPawn_ZedCrawlerKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedCrawlerKing_070 extends Proxy_KFPawn_ZedCrawlerKing_070;
|
class Proxy_KFPawn_ZedCrawlerKing_070 extends KFPawn_ZedCrawlerKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedCrawlerKing_080 extends Proxy_KFPawn_ZedCrawlerKing_080;
|
class Proxy_KFPawn_ZedCrawlerKing_080 extends KFPawn_ZedCrawlerKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedCrawlerKing_090 extends Proxy_KFPawn_ZedCrawlerKing_090;
|
class Proxy_KFPawn_ZedCrawlerKing_090 extends KFPawn_ZedCrawlerKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedCrawlerKing_100 extends Proxy_KFPawn_ZedCrawlerKing_100;
|
class Proxy_KFPawn_ZedCrawlerKing_100 extends KFPawn_ZedCrawlerKing;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedCrawler_010 extends Proxy_KFPawn_ZedCrawler_010;
|
class Proxy_KFPawn_ZedCrawler_010 extends KFPawn_ZedCrawler;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedCrawler_020 extends Proxy_KFPawn_ZedCrawler_020;
|
class Proxy_KFPawn_ZedCrawler_020 extends KFPawn_ZedCrawler;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedCrawler_030 extends Proxy_KFPawn_ZedCrawler_030;
|
class Proxy_KFPawn_ZedCrawler_030 extends KFPawn_ZedCrawler;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
class Proxy_KFPawn_ZedCrawler_040 extends Proxy_KFPawn_ZedCrawler_040;
|
class Proxy_KFPawn_ZedCrawler_040 extends KFPawn_ZedCrawler;
|
||||||
|
|
||||||
defaultproperties
|
defaultproperties
|
||||||
{
|
{
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user