2022-05-11 12:43:39 +00:00
class SpawnListSpecialWaves extends Object
dependson ( ZedSpawner )
config ( ZedSpawner ) ;
struct S _SpawnEntryCfg
{
var EAIType Wave ;
var String ZedClass ;
2022-05-16 02:42:13 +00:00
var int RelativeStart ;
2022-05-11 12:43:39 +00:00
var int Delay ;
var int Probability ;
2022-05-16 02:42:13 +00:00
var int SpawnCountBase ;
var int SingleSpawnLimit ;
2022-05-11 12:43:39 +00:00
} ;
2022-05-20 21:31:35 +00:00
var public config bool bStopRegularSpawn ;
var private config Array < S _SpawnEntryCfg > Spawn ;
2022-05-11 12:43:39 +00:00
2022-05-20 20:45:26 +00:00
public static function InitConfig ( int Version , int LatestVersion )
{
switch ( Version )
{
case ` NO_CONFIG:
ApplyDefault ( ) ;
default : break ;
}
if ( LatestVersion != Version )
{
StaticSaveConfig ( ) ;
}
}
private static function ApplyDefault ( )
2022-05-11 12:43:39 +00:00
{
local S _SpawnEntryCfg SpawnEntry ;
2022-06-01 00:03:02 +00:00
local EAIType AIType ;
2022-05-11 12:43:39 +00:00
default . bStopRegularSpawn = true ;
default . Spawn . Length = 0 ;
2022-05-17 09:56:31 +00:00
SpawnEntry . ZedClass = "SomePackage.SomeClass" ;
2022-05-16 02:42:13 +00:00
SpawnEntry . SpawnCountBase = 2 ;
SpawnEntry . SingleSpawnLimit = 1 ;
SpawnEntry . RelativeStart = 0 ;
2022-05-11 12:43:39 +00:00
SpawnEntry . Delay = 60 ;
2022-05-16 02:42:13 +00:00
SpawnEntry . Probability = 100 ;
2022-05-20 20:45:26 +00:00
foreach class 'KFGameInfo_Endless' . default . SpecialWaveTypes ( AIType )
{
SpawnEntry . Wave = AIType ;
default . Spawn . AddItem ( SpawnEntry ) ;
}
2022-05-11 12:43:39 +00:00
}
public static function Array < S _SpawnEntry > Load ( KFGameInfo _Endless KFGIE , E _LogLevel LogLevel )
{
local Array < S _SpawnEntry > SpawnList ;
local S _SpawnEntryCfg SpawnEntryCfg ;
local S _SpawnEntry SpawnEntry ;
local int Line ;
local bool Errors ;
2022-06-01 00:03:02 +00:00
local int Loaded ;
2022-05-11 12:43:39 +00:00
if ( KFGIE == None )
{
2022-05-17 09:56:31 +00:00
` ZS_Info("Not Endless mode, skip loading special waves");
2022-05-11 12:43:39 +00:00
return SpawnList ;
}
2022-05-17 09:56:31 +00:00
` ZS_Info("Load special waves spawn list:");
2022-05-11 12:43:39 +00:00
foreach default . Spawn ( SpawnEntryCfg , Line )
{
Errors = false ;
SpawnEntry . Wave = SpawnEntryCfg . Wave ;
if ( KFGIE . SpecialWaveTypes . Find ( EAIType ( SpawnEntryCfg . Wave ) ) == INDEX _NONE )
{
2022-05-17 09:56:31 +00:00
` ZS_Warn("[" $ Line + 1 $ "]" @ "Unknown special wave:" @ SpawnEntryCfg.Wave);
2022-05-11 12:43:39 +00:00
Errors = true ;
}
SpawnEntry . ZedClass = class < KFPawn _Monster > ( DynamicLoadObject ( SpawnEntryCfg . ZedClass , class 'Class' ) ) ;
if ( SpawnEntry . ZedClass == None )
{
2022-05-17 09:56:31 +00:00
` ZS_Warn("[" $ Line + 1 $ "]" @ "Can't load zed class:" @ SpawnEntryCfg.ZedClass);
2022-05-11 12:43:39 +00:00
Errors = true ;
}
2022-05-16 02:42:13 +00:00
SpawnEntry . RelativeStartDefault = SpawnEntryCfg . RelativeStart / 100. f ;
if ( SpawnEntryCfg . RelativeStart < 0 || SpawnEntryCfg . RelativeStart > 100 )
2022-05-11 12:43:39 +00:00
{
2022-05-17 09:56:31 +00:00
` ZS_Warn("[" $ Line + 1 $ "]" @ "RelativeStart" @ "(" $ SpawnEntryCfg.RelativeStart $ ")" @ "must be greater than or equal 0 and less than or equal 100");
2022-05-11 12:43:39 +00:00
Errors = true ;
}
2022-05-16 02:42:13 +00:00
SpawnEntry . DelayDefault = SpawnEntryCfg . Delay ;
if ( SpawnEntryCfg . Delay <= 0 )
2022-05-11 12:43:39 +00:00
{
2022-05-17 09:56:31 +00:00
` ZS_Warn("[" $ Line + 1 $ "]" @ "Delay" @ "(" $ SpawnEntryCfg.Delay $ ")" @ "must be greater than 0");
2022-05-11 12:43:39 +00:00
Errors = true ;
}
2022-05-16 02:42:13 +00:00
SpawnEntry . Probability = SpawnEntryCfg . Probability / 100. f ;
if ( SpawnEntryCfg . Probability <= 0 || SpawnEntryCfg . Probability > 100 )
2022-05-11 12:43:39 +00:00
{
2022-05-17 09:56:31 +00:00
` ZS_Warn("[" $ Line + 1 $ "]" @ "Probability" @ "(" $ SpawnEntryCfg.Probability $ ")" @ "must be greater than 0 and less than or equal 100");
2022-05-11 12:43:39 +00:00
Errors = true ;
}
2022-05-16 02:42:13 +00:00
SpawnEntry . SpawnCountBase = SpawnEntryCfg . SpawnCountBase ;
if ( SpawnEntry . SpawnCountBase <= 0 )
2022-05-11 12:43:39 +00:00
{
2022-05-17 09:56:31 +00:00
` ZS_Warn("[" $ Line + 1 $ "]" @ "SpawnCountBase" @ "(" $ SpawnEntryCfg.SpawnCountBase $ ")" @ "must be greater than 0");
2022-05-11 12:43:39 +00:00
Errors = true ;
}
2022-05-16 02:42:13 +00:00
SpawnEntry . SingleSpawnLimitDefault = SpawnEntryCfg . SingleSpawnLimit ;
if ( SpawnEntry . SingleSpawnLimit < 0 )
2022-05-11 12:43:39 +00:00
{
2022-05-17 09:56:31 +00:00
` ZS_Warn("[" $ Line + 1 $ "]" @ "SingleSpawnLimit" @ "(" $ SpawnEntryCfg.SingleSpawnLimit $ ")" @ "must be equal or greater than 0");
2022-05-11 12:43:39 +00:00
Errors = true ;
}
2022-05-16 02:42:13 +00:00
2022-05-11 12:43:39 +00:00
if ( ! Errors )
{
2022-06-01 00:03:02 +00:00
Loaded ++ ;
2022-05-11 12:43:39 +00:00
SpawnList . AddItem ( SpawnEntry ) ;
2022-06-01 00:03:02 +00:00
` ZS_Debug("[" $ Line + 1 $ "]" @ "Loaded successfully: (" $ SpawnEntryCfg.Wave $ ")" @ SpawnEntryCfg.ZedClass);
2022-05-11 12:43:39 +00:00
}
}
2022-06-01 00:03:02 +00:00
if ( Loaded == default . Spawn . Length )
{
2022-06-13 14:02:03 +00:00
` ZS_Info("Special spawn list loaded successfully (" $ default.Spawn.Length @ "entries)");
2022-06-01 00:03:02 +00:00
}
else
{
` ZS_Info("Special spawn list: loaded" @ Loaded @ "of" @ default.Spawn.Length @ "entries");
}
2022-05-11 12:43:39 +00:00
return SpawnList ;
}
defaultproperties
{
}