change directory structure and update make process
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -1,8 +1,8 @@
|
||||
class SmartCTFBinds expands UTExtraKeyBindings;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
SectionName="SmartCTF"
|
||||
LabelList(0)="Toggle Stats"
|
||||
AliasNames(0)="mutate smartctf showstats"
|
||||
}
|
||||
class SmartCTFBinds expands UTExtraKeyBindings;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
SectionName="SmartCTF"
|
||||
LabelList(0)="Toggle Stats"
|
||||
AliasNames(0)="mutate smartctf showstats"
|
||||
}
|
||||
@@ -1,100 +1,100 @@
|
||||
class SmartCTFCoolMsg expands LocalMessagePlus;
|
||||
|
||||
var(Messages) string LongRangeString;
|
||||
var(Messages) string UberLongRangeString;
|
||||
var(Messages) string SpawnLamerString;
|
||||
var(Messages) string OvertimeEnabledString;
|
||||
var(Messages) string OvertimeDisabledString;
|
||||
var(Messages) string AirKillMsg;
|
||||
var(Messages) string AirKilledMsg;
|
||||
var(Messages) string NewPlayerMsg;
|
||||
var(Messages) string NewPlayerOtherMsg;
|
||||
var(Messages) string PlayerBackMsg;
|
||||
var(Messages) string PlayerBackOtherMsg;
|
||||
var Color EnabledColor, DisabledColor, SpawnLamerColor,AirKillColor,AirKilledColor,NewPlayerColor,PlayerBackColor;
|
||||
|
||||
|
||||
static function float GetOffset( int Switch, float YL, float ClipY )
|
||||
{
|
||||
switch( Switch )
|
||||
{
|
||||
case 8:
|
||||
case 9:
|
||||
case 8 + 64:
|
||||
case 9 + 64:
|
||||
return ( default.YPos / 768.0 ) * ClipY - 3 * YL;
|
||||
default:
|
||||
return ( default.YPos / 768.0 ) * ClipY - 2 * YL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static function string GetString( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject )
|
||||
{
|
||||
switch( Switch )
|
||||
{
|
||||
case 1: return default.LongRangeString;
|
||||
case 2: return default.UberLongRangeString;
|
||||
case 3: return default.OvertimeEnabledString;
|
||||
case 4: return default.OvertimeDisabledString;
|
||||
case 5: return default.SpawnLamerString;
|
||||
case 6: return default.AirKillMsg;
|
||||
case 7: return default.AirKilledMsg;
|
||||
case 8: return default.NewPlayerMsg @ RelatedPRI_1.PlayerName @ "!";
|
||||
case 9: return default.PlayerBackMsg @ RelatedPRI_1.PlayerName @ "!";
|
||||
|
||||
case 8 + 64: return default.NewPlayerOtherMsg @ RelatedPRI_1.PlayerName @ "!";
|
||||
case 9 + 64: return default.PlayerBackOtherMsg @ RelatedPRI_1.PlayerName @ "!";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
static function Color GetColor( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2 )
|
||||
{
|
||||
switch( Switch )
|
||||
{
|
||||
case 1: return default.DrawColor;
|
||||
case 2: return default.DrawColor;
|
||||
case 3: return default.EnabledColor;
|
||||
case 4: return default.DisabledColor;
|
||||
case 5: return default.SpawnLamerColor;
|
||||
case 6: return default.AirKillColor;
|
||||
case 7: return default.AirKilledColor;
|
||||
case 8: return default.NewPlayerColor;
|
||||
case 9: return default.PlayerBackColor;
|
||||
|
||||
|
||||
case 8+64: return default.NewPlayerColor;
|
||||
case 9+64: return default.PlayerBackColor;
|
||||
}
|
||||
return default.DrawColor;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
LongRangeString="Long Range Kill!"
|
||||
UberLongRangeString="Über Long Range Kill!"
|
||||
SpawnLamerString="Spawnkill..."
|
||||
AirKilledMsg="Killed in the air!"
|
||||
AirKillMsg="Kill in the air!"
|
||||
OvertimeEnabledString="Sudden Death Overtime = Enabled"
|
||||
OvertimeDisabledString="Sudden Death Overtime = DISABLED"
|
||||
NewPlayerMsg="Welcome to you"
|
||||
NewPlayerOtherMsg="Welcome to"
|
||||
PlayerBackMsg="Welcome back"
|
||||
PlayerBackOtherMsg="Welcome back to"
|
||||
EnabledColor=(R=128,G=255,B=192,A=0)
|
||||
DisabledColor=(R=255,G=192,B=128,A=0)
|
||||
SpawnLamerColor=(R=255,G=64,B=0,A=0)
|
||||
AirKillColor=(R=128,G=255,B=192,A=0)
|
||||
AirKilledColor=(R=255,G=192,B=128,A=0)
|
||||
NewPlayerColor=(R=128,G=255,B=192,A=0)
|
||||
PlayerBackColor=(R=128,G=255,B=192,A=0)
|
||||
FontSize=1
|
||||
bIsSpecial=True
|
||||
bIsUnique=True
|
||||
bFadeMessage=True
|
||||
DrawColor=(G=224,B=224)
|
||||
YPos=196.000000
|
||||
bCenter=True
|
||||
}
|
||||
class SmartCTFCoolMsg expands LocalMessagePlus;
|
||||
|
||||
var(Messages) string LongRangeString;
|
||||
var(Messages) string UberLongRangeString;
|
||||
var(Messages) string SpawnLamerString;
|
||||
var(Messages) string OvertimeEnabledString;
|
||||
var(Messages) string OvertimeDisabledString;
|
||||
var(Messages) string AirKillMsg;
|
||||
var(Messages) string AirKilledMsg;
|
||||
var(Messages) string NewPlayerMsg;
|
||||
var(Messages) string NewPlayerOtherMsg;
|
||||
var(Messages) string PlayerBackMsg;
|
||||
var(Messages) string PlayerBackOtherMsg;
|
||||
var Color EnabledColor, DisabledColor, SpawnLamerColor,AirKillColor,AirKilledColor,NewPlayerColor,PlayerBackColor;
|
||||
|
||||
|
||||
static function float GetOffset( int Switch, float YL, float ClipY )
|
||||
{
|
||||
switch( Switch )
|
||||
{
|
||||
case 8:
|
||||
case 9:
|
||||
case 8 + 64:
|
||||
case 9 + 64:
|
||||
return ( default.YPos / 768.0 ) * ClipY - 3 * YL;
|
||||
default:
|
||||
return ( default.YPos / 768.0 ) * ClipY - 2 * YL;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static function string GetString( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject )
|
||||
{
|
||||
switch( Switch )
|
||||
{
|
||||
case 1: return default.LongRangeString;
|
||||
case 2: return default.UberLongRangeString;
|
||||
case 3: return default.OvertimeEnabledString;
|
||||
case 4: return default.OvertimeDisabledString;
|
||||
case 5: return default.SpawnLamerString;
|
||||
case 6: return default.AirKillMsg;
|
||||
case 7: return default.AirKilledMsg;
|
||||
case 8: return default.NewPlayerMsg @ RelatedPRI_1.PlayerName @ "!";
|
||||
case 9: return default.PlayerBackMsg @ RelatedPRI_1.PlayerName @ "!";
|
||||
|
||||
case 8 + 64: return default.NewPlayerOtherMsg @ RelatedPRI_1.PlayerName @ "!";
|
||||
case 9 + 64: return default.PlayerBackOtherMsg @ RelatedPRI_1.PlayerName @ "!";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
static function Color GetColor( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2 )
|
||||
{
|
||||
switch( Switch )
|
||||
{
|
||||
case 1: return default.DrawColor;
|
||||
case 2: return default.DrawColor;
|
||||
case 3: return default.EnabledColor;
|
||||
case 4: return default.DisabledColor;
|
||||
case 5: return default.SpawnLamerColor;
|
||||
case 6: return default.AirKillColor;
|
||||
case 7: return default.AirKilledColor;
|
||||
case 8: return default.NewPlayerColor;
|
||||
case 9: return default.PlayerBackColor;
|
||||
|
||||
|
||||
case 8+64: return default.NewPlayerColor;
|
||||
case 9+64: return default.PlayerBackColor;
|
||||
}
|
||||
return default.DrawColor;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
LongRangeString="Long Range Kill!"
|
||||
UberLongRangeString="Über Long Range Kill!"
|
||||
SpawnLamerString="Spawnkill..."
|
||||
AirKilledMsg="Killed in the air!"
|
||||
AirKillMsg="Kill in the air!"
|
||||
OvertimeEnabledString="Sudden Death Overtime = Enabled"
|
||||
OvertimeDisabledString="Sudden Death Overtime = DISABLED"
|
||||
NewPlayerMsg="Welcome to you"
|
||||
NewPlayerOtherMsg="Welcome to"
|
||||
PlayerBackMsg="Welcome back"
|
||||
PlayerBackOtherMsg="Welcome back to"
|
||||
EnabledColor=(R=128,G=255,B=192,A=0)
|
||||
DisabledColor=(R=255,G=192,B=128,A=0)
|
||||
SpawnLamerColor=(R=255,G=64,B=0,A=0)
|
||||
AirKillColor=(R=128,G=255,B=192,A=0)
|
||||
AirKilledColor=(R=255,G=192,B=128,A=0)
|
||||
NewPlayerColor=(R=128,G=255,B=192,A=0)
|
||||
PlayerBackColor=(R=128,G=255,B=192,A=0)
|
||||
FontSize=1
|
||||
bIsSpecial=True
|
||||
bIsUnique=True
|
||||
bFadeMessage=True
|
||||
DrawColor=(G=224,B=224)
|
||||
YPos=196.000000
|
||||
bCenter=True
|
||||
}
|
||||
@@ -1,32 +1,32 @@
|
||||
class SmartCTFEndStats expands EndStats config( user );
|
||||
|
||||
replication
|
||||
{
|
||||
reliable if( Role == ROLE_Authority )
|
||||
MostPoints, MostFrags, MostCaps, MostFlagKills, MostCovers, MostHeadShots;
|
||||
}
|
||||
|
||||
struct BestSomething {
|
||||
var int Count;
|
||||
var string PlayerName;
|
||||
var string MapName;
|
||||
var string RecordDate;
|
||||
};
|
||||
|
||||
var globalconfig BestSomething MostPoints;
|
||||
var globalconfig BestSomething MostFrags;
|
||||
var globalconfig BestSomething MostCaps;
|
||||
var globalconfig BestSomething MostFlagKills;
|
||||
var globalconfig BestSomething MostCovers;
|
||||
var globalconfig BestSomething MostHeadShots;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MostPoints=(Count=2970,PlayerName="The_Cowboy",MapName="Pure Action",RecordDate="06/03/2009 15:58:14")
|
||||
MostFrags=(Count=406,PlayerName="Aryss",MapName="Pure Action",RecordDate="06/03/2009 21:31:44")
|
||||
MostCaps=(Count=105,PlayerName="Archon",MapName="Liandri Docks",RecordDate="05/29/2009 14:09:35")
|
||||
MostFlagKills=(Count=189,PlayerName="The_Cowboy",MapName="Pure Action",RecordDate="06/03/2009 15:58:14")
|
||||
MostCovers=(Count=61,PlayerName="Aryss",MapName="Pure Action",RecordDate="06/03/2009 21:31:44")
|
||||
MostHeadShots=(Count=64,PlayerName="{-_-}",MapName="Facing Worlds",RecordDate="05/14/2009 23:05:14")
|
||||
bAlwaysRelevant=True
|
||||
}
|
||||
class SmartCTFEndStats expands EndStats config( user );
|
||||
|
||||
replication
|
||||
{
|
||||
reliable if( Role == ROLE_Authority )
|
||||
MostPoints, MostFrags, MostCaps, MostFlagKills, MostCovers, MostHeadShots;
|
||||
}
|
||||
|
||||
struct BestSomething {
|
||||
var int Count;
|
||||
var string PlayerName;
|
||||
var string MapName;
|
||||
var string RecordDate;
|
||||
};
|
||||
|
||||
var globalconfig BestSomething MostPoints;
|
||||
var globalconfig BestSomething MostFrags;
|
||||
var globalconfig BestSomething MostCaps;
|
||||
var globalconfig BestSomething MostFlagKills;
|
||||
var globalconfig BestSomething MostCovers;
|
||||
var globalconfig BestSomething MostHeadShots;
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MostPoints=(Count=2970,PlayerName="The_Cowboy",MapName="Pure Action",RecordDate="06/03/2009 15:58:14")
|
||||
MostFrags=(Count=406,PlayerName="Aryss",MapName="Pure Action",RecordDate="06/03/2009 21:31:44")
|
||||
MostCaps=(Count=105,PlayerName="Archon",MapName="Liandri Docks",RecordDate="05/29/2009 14:09:35")
|
||||
MostFlagKills=(Count=189,PlayerName="The_Cowboy",MapName="Pure Action",RecordDate="06/03/2009 15:58:14")
|
||||
MostCovers=(Count=61,PlayerName="Aryss",MapName="Pure Action",RecordDate="06/03/2009 21:31:44")
|
||||
MostHeadShots=(Count=64,PlayerName="{-_-}",MapName="Facing Worlds",RecordDate="05/14/2009 23:05:14")
|
||||
bAlwaysRelevant=True
|
||||
}
|
||||
@@ -1,54 +1,54 @@
|
||||
class SmartCTFEnhancedDeathMessagePlus extends DeathMessagePlus;
|
||||
|
||||
static function ClientReceive( PlayerPawn P, optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject )
|
||||
{
|
||||
if( RelatedPRI_1 == P.PlayerReplicationInfo )
|
||||
{
|
||||
// Interdict and send the child message instead.
|
||||
if( TournamentPlayer( P ).myHUD != None )
|
||||
{
|
||||
//if( class'DeathMessagePlus'.default.ChildMessage == class'KillerMessagePlus' ) class'KillerMessagePlus'.default.YouKilled = "You" @ TournamentGameInfo( P.Level.Game ).default.deathmessage[Rand(32)];
|
||||
TournamentPlayer( P ).myHUD.LocalizedMessage( default.ChildMessage, Switch, RelatedPRI_1, RelatedPRI_2, OptionalObject );
|
||||
TournamentPlayer( P ).myHUD.LocalizedMessage( default.Class, Switch, RelatedPRI_1, RelatedPRI_2, OptionalObject );
|
||||
}
|
||||
|
||||
if( default.bIsConsoleMessage )
|
||||
{
|
||||
TournamentPlayer( P ).Player.Console.AddString( static.GetString( Switch, RelatedPRI_1, RelatedPRI_2, OptionalObject ) );
|
||||
}
|
||||
|
||||
if( ( RelatedPRI_1 != RelatedPRI_2 ) && ( RelatedPRI_2 != None ) )
|
||||
{
|
||||
if( ( TournamentPlayer( P ).Level.TimeSeconds - TournamentPlayer( P ).LastKillTime < 3 ) && ( Switch != 1 ) )
|
||||
{
|
||||
TournamentPlayer( P ).MultiLevel++;
|
||||
TournamentPlayer( P ).ReceiveLocalizedMessage( class'SmartCTFEnhancedMultiKillMessage', TournamentPlayer( P ).MultiLevel , RelatedPRI_1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
TournamentPlayer( P ).MultiLevel = 0;
|
||||
}
|
||||
TournamentPlayer( P ).LastKillTime = TournamentPlayer( P ).Level.TimeSeconds;
|
||||
}
|
||||
else
|
||||
{
|
||||
TournamentPlayer( P ).MultiLevel = 0;
|
||||
}
|
||||
|
||||
if( ChallengeHUD( P.MyHUD ) != None ) ChallengeHUD( P.MyHUD ).ScoreTime = TournamentPlayer( P ).Level.TimeSeconds;
|
||||
}
|
||||
else if( RelatedPRI_2 == P.PlayerReplicationInfo )
|
||||
{
|
||||
//class'VictimMessage'.default.YouWereKilledBy = "You were" @ TournamentGameInfo( P.Level.Game ).default.deathmessage[Rand(32)] @ "by";
|
||||
TournamentPlayer( P ).ReceiveLocalizedMessage( class'VictimMessage', 0, RelatedPRI_1 );
|
||||
super( LocalMessagePlus ).ClientReceive( P, Switch, RelatedPRI_1, RelatedPRI_2, OptionalObject );
|
||||
}
|
||||
else
|
||||
{
|
||||
super( LocalMessagePlus ).ClientReceive( P, Switch, RelatedPRI_1, RelatedPRI_2, OptionalObject );
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
}
|
||||
class SmartCTFEnhancedDeathMessagePlus extends DeathMessagePlus;
|
||||
|
||||
static function ClientReceive( PlayerPawn P, optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject )
|
||||
{
|
||||
if( RelatedPRI_1 == P.PlayerReplicationInfo )
|
||||
{
|
||||
// Interdict and send the child message instead.
|
||||
if( TournamentPlayer( P ).myHUD != None )
|
||||
{
|
||||
//if( class'DeathMessagePlus'.default.ChildMessage == class'KillerMessagePlus' ) class'KillerMessagePlus'.default.YouKilled = "You" @ TournamentGameInfo( P.Level.Game ).default.deathmessage[Rand(32)];
|
||||
TournamentPlayer( P ).myHUD.LocalizedMessage( default.ChildMessage, Switch, RelatedPRI_1, RelatedPRI_2, OptionalObject );
|
||||
TournamentPlayer( P ).myHUD.LocalizedMessage( default.Class, Switch, RelatedPRI_1, RelatedPRI_2, OptionalObject );
|
||||
}
|
||||
|
||||
if( default.bIsConsoleMessage )
|
||||
{
|
||||
TournamentPlayer( P ).Player.Console.AddString( static.GetString( Switch, RelatedPRI_1, RelatedPRI_2, OptionalObject ) );
|
||||
}
|
||||
|
||||
if( ( RelatedPRI_1 != RelatedPRI_2 ) && ( RelatedPRI_2 != None ) )
|
||||
{
|
||||
if( ( TournamentPlayer( P ).Level.TimeSeconds - TournamentPlayer( P ).LastKillTime < 3 ) && ( Switch != 1 ) )
|
||||
{
|
||||
TournamentPlayer( P ).MultiLevel++;
|
||||
TournamentPlayer( P ).ReceiveLocalizedMessage( class'SmartCTFEnhancedMultiKillMessage', TournamentPlayer( P ).MultiLevel , RelatedPRI_1 );
|
||||
}
|
||||
else
|
||||
{
|
||||
TournamentPlayer( P ).MultiLevel = 0;
|
||||
}
|
||||
TournamentPlayer( P ).LastKillTime = TournamentPlayer( P ).Level.TimeSeconds;
|
||||
}
|
||||
else
|
||||
{
|
||||
TournamentPlayer( P ).MultiLevel = 0;
|
||||
}
|
||||
|
||||
if( ChallengeHUD( P.MyHUD ) != None ) ChallengeHUD( P.MyHUD ).ScoreTime = TournamentPlayer( P ).Level.TimeSeconds;
|
||||
}
|
||||
else if( RelatedPRI_2 == P.PlayerReplicationInfo )
|
||||
{
|
||||
//class'VictimMessage'.default.YouWereKilledBy = "You were" @ TournamentGameInfo( P.Level.Game ).default.deathmessage[Rand(32)] @ "by";
|
||||
TournamentPlayer( P ).ReceiveLocalizedMessage( class'VictimMessage', 0, RelatedPRI_1 );
|
||||
super( LocalMessagePlus ).ClientReceive( P, Switch, RelatedPRI_1, RelatedPRI_2, OptionalObject );
|
||||
}
|
||||
else
|
||||
{
|
||||
super( LocalMessagePlus ).ClientReceive( P, Switch, RelatedPRI_1, RelatedPRI_2, OptionalObject );
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
}
|
||||
@@ -1,108 +1,108 @@
|
||||
//=============================================================================
|
||||
// SmartCTFEnhancedMultiKillMessage.
|
||||
// - v1.0 29-Feb-2004 by {DnF2}SiNiSTeR -
|
||||
//=============================================================================
|
||||
class SmartCTFEnhancedMultiKillMessage extends MultiKillMessage;
|
||||
|
||||
// Extended Multikills adds 2 more to the list :]
|
||||
// These Announcer sounds already were included in the orginal game, just not used.
|
||||
// It also doesn't stop after 9 times ;p
|
||||
|
||||
#exec OBJ LOAD FILE=..\Sounds\Announcer.uax
|
||||
#exec AUDIO IMPORT NAME=LudicrousKill FILE=Sounds\LudicrousKill.wav GROUP=SmartCTF
|
||||
#exec AUDIO IMPORT NAME=HolyShit FILE=Sounds\HolyShit.wav GROUP=SmartCTF
|
||||
|
||||
var(Messages) localized string MegaKillString;
|
||||
var(Messages) localized string LudicrousKillString;
|
||||
var(Messages) localized string HolyShitString;
|
||||
|
||||
static function int GetFontSize( int Switch )
|
||||
{
|
||||
if( Switch < 3 ) return default.FontSize;
|
||||
else return 2;
|
||||
}
|
||||
|
||||
static function string GetString( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject )
|
||||
{
|
||||
switch( Switch )
|
||||
{
|
||||
case 0: return "";
|
||||
break;
|
||||
case 1: return default.DoubleKillString;
|
||||
break;
|
||||
case 2: return default.TripleKillString;
|
||||
break;
|
||||
case 3: return default.MultiKillString;
|
||||
break;
|
||||
case 4: return default.MegaKillString;
|
||||
break;
|
||||
case 5: return default.UltraKillString;
|
||||
break;
|
||||
case 6: return default.MonsterKillString;
|
||||
break;
|
||||
case 7: return default.LudicrousKillString;
|
||||
break;
|
||||
default: return default.HolyShitString;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static function string GetBroadcastString( int MultiLevel )
|
||||
{
|
||||
if( MultiLevel == 5 ) return "had an" @ static.GetString( MultiLevel );
|
||||
else return "had a" @ static.GetString( MultiLevel );
|
||||
}
|
||||
|
||||
static simulated function ClientReceive( PlayerPawn P, optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject )
|
||||
{
|
||||
super( LocalMessagePlus ).ClientReceive( P, Switch, RelatedPRI_1, RelatedPRI_2, OptionalObject );
|
||||
|
||||
switch( Switch )
|
||||
{
|
||||
case 0: break;
|
||||
case 1: P.ClientPlaySound( sound'Announcer.DoubleKill', , true );
|
||||
break;
|
||||
case 2: P.ClientPlaySound( sound'Announcer.TripleKill', , true );
|
||||
break;
|
||||
case 3: P.ClientPlaySound( sound'Announcer.MultiKill', , true );
|
||||
break;
|
||||
case 4: P.ClientPlaySound( sound'Announcer.MegaKill', , true );
|
||||
break;
|
||||
case 5: P.ClientPlaySound( sound'Announcer.UltraKill', , true );
|
||||
break;
|
||||
case 6: P.ClientPlaySound( sound'Announcer.MonsterKill', , true );
|
||||
break;
|
||||
case 7: P.ClientPlaySound( sound'LudicrousKill', , true );
|
||||
break;
|
||||
default: P.ClientPlaySound( sound'HolyShit', , true );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static function color GetColor( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2 )
|
||||
{
|
||||
local Color cres;
|
||||
|
||||
cres = Default.DrawColor;
|
||||
if( Switch >= 1 && Switch <= 5 )
|
||||
{
|
||||
cres.G = 48 * ( 5 - Switch );
|
||||
return cres;
|
||||
}
|
||||
else if( Switch > 5 )
|
||||
{
|
||||
cres.B = Min( 48 * ( Switch - 5 ), 255 );
|
||||
return cres;
|
||||
}
|
||||
else
|
||||
{
|
||||
return cres;
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MegaKillString="MEGA KILL!"
|
||||
LudicrousKillString="L U D I C R O U S K I L L !!!"
|
||||
HolyShitString="H O L Y S H I T!!!"
|
||||
}
|
||||
//=============================================================================
|
||||
// SmartCTFEnhancedMultiKillMessage.
|
||||
// - v1.0 29-Feb-2004 by {DnF2}SiNiSTeR -
|
||||
//=============================================================================
|
||||
class SmartCTFEnhancedMultiKillMessage extends MultiKillMessage;
|
||||
|
||||
// Extended Multikills adds 2 more to the list :]
|
||||
// These Announcer sounds already were included in the orginal game, just not used.
|
||||
// It also doesn't stop after 9 times ;p
|
||||
|
||||
#exec OBJ LOAD FILE=..\Sounds\Announcer.uax
|
||||
#exec AUDIO IMPORT NAME=LudicrousKill FILE=Sounds\LudicrousKill.wav GROUP=SmartCTF
|
||||
#exec AUDIO IMPORT NAME=HolyShit FILE=Sounds\HolyShit.wav GROUP=SmartCTF
|
||||
|
||||
var(Messages) localized string MegaKillString;
|
||||
var(Messages) localized string LudicrousKillString;
|
||||
var(Messages) localized string HolyShitString;
|
||||
|
||||
static function int GetFontSize( int Switch )
|
||||
{
|
||||
if( Switch < 3 ) return default.FontSize;
|
||||
else return 2;
|
||||
}
|
||||
|
||||
static function string GetString( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject )
|
||||
{
|
||||
switch( Switch )
|
||||
{
|
||||
case 0: return "";
|
||||
break;
|
||||
case 1: return default.DoubleKillString;
|
||||
break;
|
||||
case 2: return default.TripleKillString;
|
||||
break;
|
||||
case 3: return default.MultiKillString;
|
||||
break;
|
||||
case 4: return default.MegaKillString;
|
||||
break;
|
||||
case 5: return default.UltraKillString;
|
||||
break;
|
||||
case 6: return default.MonsterKillString;
|
||||
break;
|
||||
case 7: return default.LudicrousKillString;
|
||||
break;
|
||||
default: return default.HolyShitString;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static function string GetBroadcastString( int MultiLevel )
|
||||
{
|
||||
if( MultiLevel == 5 ) return "had an" @ static.GetString( MultiLevel );
|
||||
else return "had a" @ static.GetString( MultiLevel );
|
||||
}
|
||||
|
||||
static simulated function ClientReceive( PlayerPawn P, optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject )
|
||||
{
|
||||
super( LocalMessagePlus ).ClientReceive( P, Switch, RelatedPRI_1, RelatedPRI_2, OptionalObject );
|
||||
|
||||
switch( Switch )
|
||||
{
|
||||
case 0: break;
|
||||
case 1: P.ClientPlaySound( sound'Announcer.DoubleKill', , true );
|
||||
break;
|
||||
case 2: P.ClientPlaySound( sound'Announcer.TripleKill', , true );
|
||||
break;
|
||||
case 3: P.ClientPlaySound( sound'Announcer.MultiKill', , true );
|
||||
break;
|
||||
case 4: P.ClientPlaySound( sound'Announcer.MegaKill', , true );
|
||||
break;
|
||||
case 5: P.ClientPlaySound( sound'Announcer.UltraKill', , true );
|
||||
break;
|
||||
case 6: P.ClientPlaySound( sound'Announcer.MonsterKill', , true );
|
||||
break;
|
||||
case 7: P.ClientPlaySound( sound'LudicrousKill', , true );
|
||||
break;
|
||||
default: P.ClientPlaySound( sound'HolyShit', , true );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static function color GetColor( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2 )
|
||||
{
|
||||
local Color cres;
|
||||
|
||||
cres = Default.DrawColor;
|
||||
if( Switch >= 1 && Switch <= 5 )
|
||||
{
|
||||
cres.G = 48 * ( 5 - Switch );
|
||||
return cres;
|
||||
}
|
||||
else if( Switch > 5 )
|
||||
{
|
||||
cres.B = Min( 48 * ( Switch - 5 ), 255 );
|
||||
return cres;
|
||||
}
|
||||
else
|
||||
{
|
||||
return cres;
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
MegaKillString="MEGA KILL!"
|
||||
LudicrousKillString="L U D I C R O U S K I L L !!!"
|
||||
HolyShitString="H O L Y S H I T!!!"
|
||||
}
|
||||
@@ -1,38 +1,38 @@
|
||||
class SmartCTFFlagCheckerInventory expands TournamentPickup;
|
||||
|
||||
// This inventory item gets added to every player by default.
|
||||
// Now, each time this inventory item gets destroyed it means either the player left the game or died.
|
||||
// If he simply died, then the original code already made sure the flag is dropped, before we get here,
|
||||
// and nothing special happens.
|
||||
// When we're here, we will check if he was actually carrying the flag. If he still has a flag, it means
|
||||
// the player left the server and we drop the flag manually.
|
||||
// All this happens before the code that would send the flag home.
|
||||
// Quite ingenious if I may say so :p (c) {DnF2}SiNiSTeR imo xD
|
||||
|
||||
var string DroppedMessage;
|
||||
|
||||
function Destroyed()
|
||||
{
|
||||
local CTFFlag flag;
|
||||
|
||||
// Use Other.Class==Class'ClassName' if you want a specific Actor type
|
||||
if( Owner != none && Owner.IsA('Pawn') ) {
|
||||
if( Pawn( Owner ).bIsPlayer ) { // Pawn is a player
|
||||
flag = CTFFlag( Pawn( Owner ).PlayerReplicationInfo.HasFlag );
|
||||
|
||||
if( flag != None ) { // Should handle casting failure
|
||||
flag.Drop( 0.5 * Pawn( Owner ).Velocity );
|
||||
BroadcastMessage( Pawn( Owner ).PlayerReplicationInfo.PlayerName @ DroppedMessage );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
super.Destroyed(); // Call Destroyed() on super class TournamentPickup
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
DroppedMessage="had the flag but disconnected. Flag is dropped!"
|
||||
bHeldItem=True
|
||||
bHidden=True
|
||||
}
|
||||
class SmartCTFFlagCheckerInventory expands TournamentPickup;
|
||||
|
||||
// This inventory item gets added to every player by default.
|
||||
// Now, each time this inventory item gets destroyed it means either the player left the game or died.
|
||||
// If he simply died, then the original code already made sure the flag is dropped, before we get here,
|
||||
// and nothing special happens.
|
||||
// When we're here, we will check if he was actually carrying the flag. If he still has a flag, it means
|
||||
// the player left the server and we drop the flag manually.
|
||||
// All this happens before the code that would send the flag home.
|
||||
// Quite ingenious if I may say so :p (c) {DnF2}SiNiSTeR imo xD
|
||||
|
||||
var string DroppedMessage;
|
||||
|
||||
function Destroyed()
|
||||
{
|
||||
local CTFFlag flag;
|
||||
|
||||
// Use Other.Class==Class'ClassName' if you want a specific Actor type
|
||||
if( Owner != none && Owner.IsA('Pawn') ) {
|
||||
if( Pawn( Owner ).bIsPlayer ) { // Pawn is a player
|
||||
flag = CTFFlag( Pawn( Owner ).PlayerReplicationInfo.HasFlag );
|
||||
|
||||
if( flag != None ) { // Should handle casting failure
|
||||
flag.Drop( 0.5 * Pawn( Owner ).Velocity );
|
||||
BroadcastMessage( Pawn( Owner ).PlayerReplicationInfo.PlayerName @ DroppedMessage );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
super.Destroyed(); // Call Destroyed() on super class TournamentPickup
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
DroppedMessage="had the flag but disconnected. Flag is dropped!"
|
||||
bHeldItem=True
|
||||
bHidden=True
|
||||
}
|
||||
@@ -1,209 +1,209 @@
|
||||
// This class gets spawned in the mutator, serverside.
|
||||
// Because of its Role, it will also get copied to clients.
|
||||
// The replicated variables are accessible there.
|
||||
|
||||
class SmartCTFGameReplicationInfo expands ReplicationInfo;
|
||||
|
||||
var int TickRate;
|
||||
var bool bShowFCLocation, bStatsDrawFaces, bPlay30SecSound, bDrawLogo, bExtraStats, bShowSpecs, bDoKeybind, bSCTFSbDef, bSnowyScoreboard, bXmasImages;
|
||||
var float SbDelayC;
|
||||
var color SpectatorColor;
|
||||
var string CountryFlagsPackage;
|
||||
var class<ScoreBoard> NormalScoreBoardClass;
|
||||
var SmartCTFEndStats EndStats;
|
||||
var SmartCTFWelcomeNewPlayers WelcomeNewPlayers;
|
||||
var SmartCTFPlayerReplicationInfo PRIArray[64];
|
||||
var bool bInitialized, bServerInfoSetServerSide, bDoneBind;
|
||||
var class<HUD> DefaultHUDType;
|
||||
|
||||
replication
|
||||
{
|
||||
// Settings
|
||||
reliable if( Role == ROLE_Authority )
|
||||
bShowFCLocation, bPlay30SecSound, bStatsDrawFaces, bDrawLogo, bExtraStats, CountryFlagsPackage, bShowSpecs, bSCTFSbDef, bDoKeybind, bSnowyScoreboard, bXmasImages;
|
||||
|
||||
reliable if( Role == ROLE_Authority )
|
||||
bInitialized, TickRate, NormalScoreBoardClass, EndStats, bServerInfoSetServerSide, DefaultHUDType, DoBind, SbDelayC, SpectatorColor;
|
||||
}
|
||||
|
||||
simulated function PostBeginPlay()
|
||||
{
|
||||
SetTimer( 0.5, True );
|
||||
}
|
||||
|
||||
simulated function Timer()
|
||||
{
|
||||
local PlayerPawn P;
|
||||
|
||||
RefreshPRI();
|
||||
|
||||
if (Level.Netmode == NM_DedicatedServer || bDoneBind || !bDoKeybind) return; // Only execute on clients, if bind hasn't been done yet and if bind should be done.
|
||||
|
||||
foreach AllActors(class 'PlayerPawn', P)
|
||||
if (Viewport(P.Player) != None) break;
|
||||
if(P!=None) DoBind(P);
|
||||
bDoneBind=true;
|
||||
}
|
||||
|
||||
simulated function SmartCTFPlayerReplicationInfo GetStats( Actor P )
|
||||
{
|
||||
local int i;
|
||||
local PlayerReplicationInfo PRI;
|
||||
|
||||
if( !P.IsA( 'Pawn' ) ) return None;
|
||||
PRI = Pawn( P ).PlayerReplicationInfo;
|
||||
if( PRI == None ) return None;
|
||||
|
||||
for( i = 0; i < 64; i++ )
|
||||
{
|
||||
if( PRIArray[i] == None ) break;
|
||||
if( PRIArray[i].Owner == PRI ) return PRIArray[i];
|
||||
}
|
||||
return None;
|
||||
}
|
||||
|
||||
simulated function SmartCTFPlayerReplicationInfo GetStatsByPRI( PlayerReplicationInfo PRI )
|
||||
{
|
||||
local int i;
|
||||
|
||||
if( PRI == None ) return None;
|
||||
for( i = 0; i < 64; i++ )
|
||||
{
|
||||
if( PRIArray[i] == None ) break;
|
||||
if( PRIArray[i].Owner == PRI ) return PRIArray[i];
|
||||
}
|
||||
return None;
|
||||
}
|
||||
|
||||
simulated function SmartCTFPlayerReplicationInfo GetStatNr( byte i )
|
||||
{
|
||||
return PRIArray[i];
|
||||
}
|
||||
|
||||
simulated function ClearStats()
|
||||
{
|
||||
local int i;
|
||||
for( i = 0; i < 64; i++ )
|
||||
{
|
||||
if( PRIArray[i] == None ) break;
|
||||
PRIArray[i].ClearStats();
|
||||
}
|
||||
}
|
||||
|
||||
simulated function RefreshPRI()
|
||||
{
|
||||
local SmartCTFPlayerReplicationInfo PRI;
|
||||
local int i;
|
||||
|
||||
for( i = 0; i < 64; i++ ) PRIArray[i] = None;
|
||||
|
||||
i = 0;
|
||||
ForEach AllActors( class'SmartCTFPlayerReplicationInfo', PRI )
|
||||
{
|
||||
if( i < 64 )
|
||||
{
|
||||
if( PRI.Owner != None ) PRIArray[i++] = PRI;
|
||||
}
|
||||
else break;
|
||||
}
|
||||
}
|
||||
|
||||
simulated function DoBind(PlayerPawn P)
|
||||
{
|
||||
local string keyBinding;
|
||||
|
||||
if ((InStr( Caps(P.ConsoleCommand("Keybinding F3")), "MUTATE SMARTCTF SHOWSTATS") == -1))
|
||||
{
|
||||
keyBinding = P.ConsoleCommand("Keybinding F3");
|
||||
P.ConsoleCommand("SET INPUT F3 mutate smartctf showstats|"$keyBinding);
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
TickRate=0
|
||||
bShowFCLocation=False
|
||||
bStatsDrawFaces=False
|
||||
bPlay30SecSound=False
|
||||
bDrawLogo=False
|
||||
bExtraStats=False
|
||||
bShowSpecs=False
|
||||
bDoKeybind=False
|
||||
bSCTFSbDef=False
|
||||
bSnowyScoreboard=False
|
||||
bXmasImages=False
|
||||
SbDelayC=0.000000
|
||||
SpectatorColor=(R=0,G=0,B=0,A=0)
|
||||
CountryFlagsPackage=""
|
||||
NormalScoreBoardClass=None
|
||||
EndStats=None
|
||||
PRIArray(0)=None
|
||||
PRIArray(1)=None
|
||||
PRIArray(2)=None
|
||||
PRIArray(3)=None
|
||||
PRIArray(4)=None
|
||||
PRIArray(5)=None
|
||||
PRIArray(6)=None
|
||||
PRIArray(7)=None
|
||||
PRIArray(8)=None
|
||||
PRIArray(9)=None
|
||||
PRIArray(10)=None
|
||||
PRIArray(11)=None
|
||||
PRIArray(12)=None
|
||||
PRIArray(13)=None
|
||||
PRIArray(14)=None
|
||||
PRIArray(15)=None
|
||||
PRIArray(16)=None
|
||||
PRIArray(17)=None
|
||||
PRIArray(18)=None
|
||||
PRIArray(19)=None
|
||||
PRIArray(20)=None
|
||||
PRIArray(21)=None
|
||||
PRIArray(22)=None
|
||||
PRIArray(23)=None
|
||||
PRIArray(24)=None
|
||||
PRIArray(25)=None
|
||||
PRIArray(26)=None
|
||||
PRIArray(27)=None
|
||||
PRIArray(28)=None
|
||||
PRIArray(29)=None
|
||||
PRIArray(30)=None
|
||||
PRIArray(31)=None
|
||||
PRIArray(32)=None
|
||||
PRIArray(33)=None
|
||||
PRIArray(34)=None
|
||||
PRIArray(35)=None
|
||||
PRIArray(36)=None
|
||||
PRIArray(37)=None
|
||||
PRIArray(38)=None
|
||||
PRIArray(39)=None
|
||||
PRIArray(40)=None
|
||||
PRIArray(41)=None
|
||||
PRIArray(42)=None
|
||||
PRIArray(43)=None
|
||||
PRIArray(44)=None
|
||||
PRIArray(45)=None
|
||||
PRIArray(46)=None
|
||||
PRIArray(47)=None
|
||||
PRIArray(48)=None
|
||||
PRIArray(49)=None
|
||||
PRIArray(50)=None
|
||||
PRIArray(51)=None
|
||||
PRIArray(52)=None
|
||||
PRIArray(53)=None
|
||||
PRIArray(54)=None
|
||||
PRIArray(55)=None
|
||||
PRIArray(56)=None
|
||||
PRIArray(57)=None
|
||||
PRIArray(58)=None
|
||||
PRIArray(59)=None
|
||||
PRIArray(60)=None
|
||||
PRIArray(61)=None
|
||||
PRIArray(62)=None
|
||||
PRIArray(63)=None
|
||||
bInitialized=False
|
||||
bServerInfoSetServerSide=False
|
||||
bDoneBind=False
|
||||
DefaultHUDType=None
|
||||
RemoteRole=ROLE_SimulatedProxy
|
||||
}
|
||||
// This class gets spawned in the mutator, serverside.
|
||||
// Because of its Role, it will also get copied to clients.
|
||||
// The replicated variables are accessible there.
|
||||
|
||||
class SmartCTFGameReplicationInfo expands ReplicationInfo;
|
||||
|
||||
var int TickRate;
|
||||
var bool bShowFCLocation, bStatsDrawFaces, bPlay30SecSound, bDrawLogo, bExtraStats, bShowSpecs, bDoKeybind, bSCTFSbDef, bSnowyScoreboard, bXmasImages;
|
||||
var float SbDelayC;
|
||||
var color SpectatorColor;
|
||||
var string CountryFlagsPackage;
|
||||
var class<ScoreBoard> NormalScoreBoardClass;
|
||||
var SmartCTFEndStats EndStats;
|
||||
var SmartCTFWelcomeNewPlayers WelcomeNewPlayers;
|
||||
var SmartCTFPlayerReplicationInfo PRIArray[64];
|
||||
var bool bInitialized, bServerInfoSetServerSide, bDoneBind;
|
||||
var class<HUD> DefaultHUDType;
|
||||
|
||||
replication
|
||||
{
|
||||
// Settings
|
||||
reliable if( Role == ROLE_Authority )
|
||||
bShowFCLocation, bPlay30SecSound, bStatsDrawFaces, bDrawLogo, bExtraStats, CountryFlagsPackage, bShowSpecs, bSCTFSbDef, bDoKeybind, bSnowyScoreboard, bXmasImages;
|
||||
|
||||
reliable if( Role == ROLE_Authority )
|
||||
bInitialized, TickRate, NormalScoreBoardClass, EndStats, bServerInfoSetServerSide, DefaultHUDType, DoBind, SbDelayC, SpectatorColor;
|
||||
}
|
||||
|
||||
simulated function PostBeginPlay()
|
||||
{
|
||||
SetTimer( 0.5, True );
|
||||
}
|
||||
|
||||
simulated function Timer()
|
||||
{
|
||||
local PlayerPawn P;
|
||||
|
||||
RefreshPRI();
|
||||
|
||||
if (Level.Netmode == NM_DedicatedServer || bDoneBind || !bDoKeybind) return; // Only execute on clients, if bind hasn't been done yet and if bind should be done.
|
||||
|
||||
foreach AllActors(class 'PlayerPawn', P)
|
||||
if (Viewport(P.Player) != None) break;
|
||||
if(P!=None) DoBind(P);
|
||||
bDoneBind=true;
|
||||
}
|
||||
|
||||
simulated function SmartCTFPlayerReplicationInfo GetStats( Actor P )
|
||||
{
|
||||
local int i;
|
||||
local PlayerReplicationInfo PRI;
|
||||
|
||||
if( !P.IsA( 'Pawn' ) ) return None;
|
||||
PRI = Pawn( P ).PlayerReplicationInfo;
|
||||
if( PRI == None ) return None;
|
||||
|
||||
for( i = 0; i < 64; i++ )
|
||||
{
|
||||
if( PRIArray[i] == None ) break;
|
||||
if( PRIArray[i].Owner == PRI ) return PRIArray[i];
|
||||
}
|
||||
return None;
|
||||
}
|
||||
|
||||
simulated function SmartCTFPlayerReplicationInfo GetStatsByPRI( PlayerReplicationInfo PRI )
|
||||
{
|
||||
local int i;
|
||||
|
||||
if( PRI == None ) return None;
|
||||
for( i = 0; i < 64; i++ )
|
||||
{
|
||||
if( PRIArray[i] == None ) break;
|
||||
if( PRIArray[i].Owner == PRI ) return PRIArray[i];
|
||||
}
|
||||
return None;
|
||||
}
|
||||
|
||||
simulated function SmartCTFPlayerReplicationInfo GetStatNr( byte i )
|
||||
{
|
||||
return PRIArray[i];
|
||||
}
|
||||
|
||||
simulated function ClearStats()
|
||||
{
|
||||
local int i;
|
||||
for( i = 0; i < 64; i++ )
|
||||
{
|
||||
if( PRIArray[i] == None ) break;
|
||||
PRIArray[i].ClearStats();
|
||||
}
|
||||
}
|
||||
|
||||
simulated function RefreshPRI()
|
||||
{
|
||||
local SmartCTFPlayerReplicationInfo PRI;
|
||||
local int i;
|
||||
|
||||
for( i = 0; i < 64; i++ ) PRIArray[i] = None;
|
||||
|
||||
i = 0;
|
||||
ForEach AllActors( class'SmartCTFPlayerReplicationInfo', PRI )
|
||||
{
|
||||
if( i < 64 )
|
||||
{
|
||||
if( PRI.Owner != None ) PRIArray[i++] = PRI;
|
||||
}
|
||||
else break;
|
||||
}
|
||||
}
|
||||
|
||||
simulated function DoBind(PlayerPawn P)
|
||||
{
|
||||
local string keyBinding;
|
||||
|
||||
if ((InStr( Caps(P.ConsoleCommand("Keybinding F3")), "MUTATE SMARTCTF SHOWSTATS") == -1))
|
||||
{
|
||||
keyBinding = P.ConsoleCommand("Keybinding F3");
|
||||
P.ConsoleCommand("SET INPUT F3 mutate smartctf showstats|"$keyBinding);
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
TickRate=0
|
||||
bShowFCLocation=False
|
||||
bStatsDrawFaces=False
|
||||
bPlay30SecSound=False
|
||||
bDrawLogo=False
|
||||
bExtraStats=False
|
||||
bShowSpecs=False
|
||||
bDoKeybind=False
|
||||
bSCTFSbDef=False
|
||||
bSnowyScoreboard=False
|
||||
bXmasImages=False
|
||||
SbDelayC=0.000000
|
||||
SpectatorColor=(R=0,G=0,B=0,A=0)
|
||||
CountryFlagsPackage=""
|
||||
NormalScoreBoardClass=None
|
||||
EndStats=None
|
||||
PRIArray(0)=None
|
||||
PRIArray(1)=None
|
||||
PRIArray(2)=None
|
||||
PRIArray(3)=None
|
||||
PRIArray(4)=None
|
||||
PRIArray(5)=None
|
||||
PRIArray(6)=None
|
||||
PRIArray(7)=None
|
||||
PRIArray(8)=None
|
||||
PRIArray(9)=None
|
||||
PRIArray(10)=None
|
||||
PRIArray(11)=None
|
||||
PRIArray(12)=None
|
||||
PRIArray(13)=None
|
||||
PRIArray(14)=None
|
||||
PRIArray(15)=None
|
||||
PRIArray(16)=None
|
||||
PRIArray(17)=None
|
||||
PRIArray(18)=None
|
||||
PRIArray(19)=None
|
||||
PRIArray(20)=None
|
||||
PRIArray(21)=None
|
||||
PRIArray(22)=None
|
||||
PRIArray(23)=None
|
||||
PRIArray(24)=None
|
||||
PRIArray(25)=None
|
||||
PRIArray(26)=None
|
||||
PRIArray(27)=None
|
||||
PRIArray(28)=None
|
||||
PRIArray(29)=None
|
||||
PRIArray(30)=None
|
||||
PRIArray(31)=None
|
||||
PRIArray(32)=None
|
||||
PRIArray(33)=None
|
||||
PRIArray(34)=None
|
||||
PRIArray(35)=None
|
||||
PRIArray(36)=None
|
||||
PRIArray(37)=None
|
||||
PRIArray(38)=None
|
||||
PRIArray(39)=None
|
||||
PRIArray(40)=None
|
||||
PRIArray(41)=None
|
||||
PRIArray(42)=None
|
||||
PRIArray(43)=None
|
||||
PRIArray(44)=None
|
||||
PRIArray(45)=None
|
||||
PRIArray(46)=None
|
||||
PRIArray(47)=None
|
||||
PRIArray(48)=None
|
||||
PRIArray(49)=None
|
||||
PRIArray(50)=None
|
||||
PRIArray(51)=None
|
||||
PRIArray(52)=None
|
||||
PRIArray(53)=None
|
||||
PRIArray(54)=None
|
||||
PRIArray(55)=None
|
||||
PRIArray(56)=None
|
||||
PRIArray(57)=None
|
||||
PRIArray(58)=None
|
||||
PRIArray(59)=None
|
||||
PRIArray(60)=None
|
||||
PRIArray(61)=None
|
||||
PRIArray(62)=None
|
||||
PRIArray(63)=None
|
||||
bInitialized=False
|
||||
bServerInfoSetServerSide=False
|
||||
bDoneBind=False
|
||||
DefaultHUDType=None
|
||||
RemoteRole=ROLE_SimulatedProxy
|
||||
}
|
||||
@@ -1,97 +1,97 @@
|
||||
// Above all other messages.
|
||||
class SmartCTFMessage extends LocalMessagePlus;
|
||||
|
||||
var string CoveredMsg, YouCoveredMsg;
|
||||
var string CoverSpreeMsg, YouCoverSpreeMsg;
|
||||
var string UltraCoverMsg, YouUltraCoverMsg;
|
||||
var string SealMsg, YouSealMsg;
|
||||
var string SavedMsg, YouSavedMsg;
|
||||
var string SpawnKillMsg;
|
||||
var string DeniedMsg, YouDeniedMsg;
|
||||
|
||||
static function float GetOffset( int Switch, float YL, float ClipY )
|
||||
{
|
||||
return ( default.YPos / 768.0 ) * ClipY - 3 * YL;
|
||||
}
|
||||
|
||||
static function string GetString( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject )
|
||||
{
|
||||
if (RelatedPRI_1 == None) return "";
|
||||
|
||||
switch( Switch )
|
||||
{
|
||||
case 0: // Cover FC
|
||||
return RelatedPRI_1.PlayerName @ default.CoveredMsg;
|
||||
case 1: // Seal base
|
||||
return RelatedPRI_1.PlayerName @ default.SealMsg;
|
||||
case 4: // Ultra cover
|
||||
return RelatedPRI_1.PlayerName @ default.UltraCoverMsg;
|
||||
case 5: // Cover spree
|
||||
return RelatedPRI_1.PlayerName @ default.CoverSpreeMsg;
|
||||
case 7: // Saved by ...
|
||||
return default.SavedMsg @ RelatedPRI_1.PlayerName $ "!";
|
||||
case 10: // Spawnkilling
|
||||
return RelatedPRI_1.PlayerName @ default.SpawnKillMsg;
|
||||
case 11: // Denied
|
||||
return default.DeniedMsg @ RelatedPRI_1.PlayerName;
|
||||
|
||||
case 0 + 64:
|
||||
return default.YouCoveredMsg;
|
||||
case 1 + 64:
|
||||
return default.YouSealMsg;
|
||||
case 4 + 64:
|
||||
return default.YouUltraCoverMsg;
|
||||
case 5 + 64:
|
||||
return default.YouCoverSpreeMsg;
|
||||
case 7 + 64:
|
||||
return default.YouSavedMsg;
|
||||
case 11 + 64:
|
||||
return default.YouDeniedMsg;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
static simulated function ClientReceive( PlayerPawn P, optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject )
|
||||
{
|
||||
super.ClientReceive( P, Switch, RelatedPRI_1, RelatedPRI_2, OptionalObject );
|
||||
|
||||
switch( Switch )
|
||||
{
|
||||
|
||||
case 5:
|
||||
// Cover spree - guitarsound for player, spreesound for all
|
||||
if( RelatedPRI_1 == P.PlayerReplicationInfo )
|
||||
{
|
||||
P.ClientPlaySound( sound'CaptureSound', , true );
|
||||
}
|
||||
else
|
||||
{
|
||||
P.PlaySound( sound'SpreeSound', , 4.0 );
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
CoveredMsg="covered the flagcarrier!"
|
||||
YouCoveredMsg="You covered the flagcarrier!"
|
||||
CoverSpreeMsg="is on a cover spree!"
|
||||
YouCoverSpreeMsg="You are on a cover spree!"
|
||||
UltraCoverMsg="got a multi cover!"
|
||||
YouUltraCoverMsg="You got a multi cover!"
|
||||
SealMsg="is sealing off the base!"
|
||||
YouSealMsg="You are sealing off the base!"
|
||||
SavedMsg="Saved By"
|
||||
YouSavedMsg="Close save!!"
|
||||
DeniedMsg="Denied By"
|
||||
YouDeniedMsg="Nide deny!!"
|
||||
SpawnKillMsg="is a spawnkilling lamer!"
|
||||
FontSize=1
|
||||
bIsSpecial=True
|
||||
bIsUnique=True
|
||||
bFadeMessage=True
|
||||
DrawColor=(R=24,G=192,B=24)
|
||||
YPos=196.000000
|
||||
bCenter=True
|
||||
}
|
||||
// Above all other messages.
|
||||
class SmartCTFMessage extends LocalMessagePlus;
|
||||
|
||||
var string CoveredMsg, YouCoveredMsg;
|
||||
var string CoverSpreeMsg, YouCoverSpreeMsg;
|
||||
var string UltraCoverMsg, YouUltraCoverMsg;
|
||||
var string SealMsg, YouSealMsg;
|
||||
var string SavedMsg, YouSavedMsg;
|
||||
var string SpawnKillMsg;
|
||||
var string DeniedMsg, YouDeniedMsg;
|
||||
|
||||
static function float GetOffset( int Switch, float YL, float ClipY )
|
||||
{
|
||||
return ( default.YPos / 768.0 ) * ClipY - 3 * YL;
|
||||
}
|
||||
|
||||
static function string GetString( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject )
|
||||
{
|
||||
if (RelatedPRI_1 == None) return "";
|
||||
|
||||
switch( Switch )
|
||||
{
|
||||
case 0: // Cover FC
|
||||
return RelatedPRI_1.PlayerName @ default.CoveredMsg;
|
||||
case 1: // Seal base
|
||||
return RelatedPRI_1.PlayerName @ default.SealMsg;
|
||||
case 4: // Ultra cover
|
||||
return RelatedPRI_1.PlayerName @ default.UltraCoverMsg;
|
||||
case 5: // Cover spree
|
||||
return RelatedPRI_1.PlayerName @ default.CoverSpreeMsg;
|
||||
case 7: // Saved by ...
|
||||
return default.SavedMsg @ RelatedPRI_1.PlayerName $ "!";
|
||||
case 10: // Spawnkilling
|
||||
return RelatedPRI_1.PlayerName @ default.SpawnKillMsg;
|
||||
case 11: // Denied
|
||||
return default.DeniedMsg @ RelatedPRI_1.PlayerName;
|
||||
|
||||
case 0 + 64:
|
||||
return default.YouCoveredMsg;
|
||||
case 1 + 64:
|
||||
return default.YouSealMsg;
|
||||
case 4 + 64:
|
||||
return default.YouUltraCoverMsg;
|
||||
case 5 + 64:
|
||||
return default.YouCoverSpreeMsg;
|
||||
case 7 + 64:
|
||||
return default.YouSavedMsg;
|
||||
case 11 + 64:
|
||||
return default.YouDeniedMsg;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
static simulated function ClientReceive( PlayerPawn P, optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject )
|
||||
{
|
||||
super.ClientReceive( P, Switch, RelatedPRI_1, RelatedPRI_2, OptionalObject );
|
||||
|
||||
switch( Switch )
|
||||
{
|
||||
|
||||
case 5:
|
||||
// Cover spree - guitarsound for player, spreesound for all
|
||||
if( RelatedPRI_1 == P.PlayerReplicationInfo )
|
||||
{
|
||||
P.ClientPlaySound( sound'CaptureSound', , true );
|
||||
}
|
||||
else
|
||||
{
|
||||
P.PlaySound( sound'SpreeSound', , 4.0 );
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
CoveredMsg="covered the flagcarrier!"
|
||||
YouCoveredMsg="You covered the flagcarrier!"
|
||||
CoverSpreeMsg="is on a cover spree!"
|
||||
YouCoverSpreeMsg="You are on a cover spree!"
|
||||
UltraCoverMsg="got a multi cover!"
|
||||
YouUltraCoverMsg="You got a multi cover!"
|
||||
SealMsg="is sealing off the base!"
|
||||
YouSealMsg="You are sealing off the base!"
|
||||
SavedMsg="Saved By"
|
||||
YouSavedMsg="Close save!!"
|
||||
DeniedMsg="Denied By"
|
||||
YouDeniedMsg="Nide deny!!"
|
||||
SpawnKillMsg="is a spawnkilling lamer!"
|
||||
FontSize=1
|
||||
bIsSpecial=True
|
||||
bIsUnique=True
|
||||
bFadeMessage=True
|
||||
DrawColor=(R=24,G=192,B=24)
|
||||
YPos=196.000000
|
||||
bCenter=True
|
||||
}
|
||||
@@ -1,192 +1,192 @@
|
||||
class SmartCTFPlayerReplicationInfo expands ReplicationInfo;
|
||||
|
||||
// Replicated
|
||||
var int Captures, Assists, Grabs, Covers, Seals, FlagKills, DefKills;
|
||||
var int Frags, HeadShots, ShieldBelts, Amps;
|
||||
|
||||
var string CountryPrefix; // for IpToCountry
|
||||
|
||||
// Server side
|
||||
var float LastKillTime;
|
||||
var int MultiLevel;
|
||||
var int FragSpree, CoverSpree, SealSpree, SpawnKillSpree;
|
||||
var float SpawnTime;
|
||||
var bool bHadFirstSpawn;
|
||||
|
||||
// Client side
|
||||
var bool bViewingStats;
|
||||
var bool bEndStats;
|
||||
var float IndicatorStartShow;
|
||||
var byte IndicatorVisibility;
|
||||
|
||||
var Actor IpToCountry;
|
||||
var bool bIpToCountry;
|
||||
|
||||
replication
|
||||
{
|
||||
// Stats
|
||||
reliable if( Role == ROLE_Authority )
|
||||
Captures, Assists, Grabs, Covers, Seals, FlagKills, DefKills,
|
||||
Frags, HeadShots, ShieldBelts, Amps, CountryPrefix;
|
||||
|
||||
// Toggle stats functions
|
||||
reliable if( Role == ROLE_Authority )
|
||||
ToggleStats, ShowStats;
|
||||
}
|
||||
|
||||
function PostBeginPlay()
|
||||
{
|
||||
|
||||
super.PostBeginPlay();
|
||||
|
||||
SetTimer( 0.5, True );
|
||||
}
|
||||
|
||||
function Timer()
|
||||
{
|
||||
local string temp;
|
||||
local PlayerPawn P;
|
||||
if( Owner == None )
|
||||
{
|
||||
SetTimer( 0.0, False );
|
||||
Destroy();
|
||||
return;
|
||||
}
|
||||
if(bIpToCountry)
|
||||
{
|
||||
if(CountryPrefix == "")
|
||||
{
|
||||
if(Owner.Owner.IsA('PlayerPawn'))
|
||||
{
|
||||
P=PlayerPawn(Owner.Owner);
|
||||
if(NetConnection(P.Player) != None)
|
||||
{
|
||||
temp=P.GetPlayerNetworkAddress();
|
||||
temp=Left(temp, InStr(temp, ":"));
|
||||
temp=IpToCountry.GetItemName(temp);
|
||||
if(temp == "!Disabled") /* after this return, iptocountry won't resolve anything anyway */
|
||||
bIpToCountry=False;
|
||||
else if(Left(temp, 1) != "!") /* good response */
|
||||
{
|
||||
CountryPrefix=SelElem(temp, 5);
|
||||
if(CountryPrefix=="") /* the country is probably unknown(maybe LAN), so as the prefix */
|
||||
bIpToCountry=False;
|
||||
}
|
||||
}
|
||||
else
|
||||
bIpToCountry=False;
|
||||
}
|
||||
else
|
||||
bIpToCountry=False;
|
||||
}
|
||||
else
|
||||
bIpToCountry=False;
|
||||
}
|
||||
}
|
||||
|
||||
static final function string SelElem(string Str, int Elem)
|
||||
{
|
||||
local int pos;
|
||||
while(Elem-->1)
|
||||
Str=Mid(Str, InStr(Str,":")+1);
|
||||
pos=InStr(Str, ":");
|
||||
if(pos != -1)
|
||||
Str=Left(Str, pos);
|
||||
return Str;
|
||||
}
|
||||
|
||||
// Called on the server, executed on the client
|
||||
simulated function ToggleStats()
|
||||
{
|
||||
local PlayerPawn P;
|
||||
|
||||
if( Owner == None ) return;
|
||||
P = PlayerPawn( Owner.Owner );
|
||||
if( P == None ) return;
|
||||
|
||||
if( P.Scoring != None && !P.Scoring.IsA( 'SmartCTFScoreBoard' ) )
|
||||
{
|
||||
P.ClientMessage( "Problem loading the SmartCTF ScoreBoard..." );
|
||||
}
|
||||
else
|
||||
{
|
||||
bViewingStats = !bViewingStats;
|
||||
IndicatorStartShow = Level.TimeSeconds;
|
||||
IndicatorVisibility = 255;
|
||||
P.bShowScores = True;
|
||||
}
|
||||
}
|
||||
|
||||
// Called on the client
|
||||
simulated function ShowStats(optional bool bHide)
|
||||
{
|
||||
local PlayerPawn P;
|
||||
|
||||
if( Owner == None ) return;
|
||||
P = PlayerPawn( Owner.Owner );
|
||||
if( P == None ) return;
|
||||
|
||||
if( P.Scoring != None && !P.Scoring.IsA( 'SmartCTFScoreBoard' ) )
|
||||
{
|
||||
P.ClientMessage( "Problem loading the SmartCTF ScoreBoard..." );
|
||||
}
|
||||
else
|
||||
{
|
||||
bViewingStats = True;
|
||||
if(!bHide) P.bShowScores = True;
|
||||
}
|
||||
}
|
||||
|
||||
function ClearStats()
|
||||
{
|
||||
Captures = 0;
|
||||
Assists = 0;
|
||||
Grabs = 0;
|
||||
Covers = 0;
|
||||
Seals = 0;
|
||||
DefKills = 0;
|
||||
FlagKills = 0;
|
||||
Frags = 0;
|
||||
HeadShots = 0;
|
||||
ShieldBelts = 0;
|
||||
Amps = 0;
|
||||
|
||||
FragSpree = 0;
|
||||
CoverSpree = 0;
|
||||
SealSpree = 0;
|
||||
SpawnKillSpree = 0;
|
||||
SpawnTime = 0;
|
||||
|
||||
LastKillTime = 0;
|
||||
MultiLevel = 0;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Captures=0
|
||||
Assists=0
|
||||
Grabs=0
|
||||
Covers=0
|
||||
Seals=0
|
||||
FlagKills=0
|
||||
DefKills=0
|
||||
Frags=0
|
||||
HeadShots=0
|
||||
ShieldBelts=0
|
||||
Amps=0
|
||||
CountryPrefix=""
|
||||
LastKillTime=0.000000
|
||||
MultiLevel=0
|
||||
FragSpree=0
|
||||
CoverSpree=0
|
||||
SealSpree=0
|
||||
SpawnKillSpree=0
|
||||
SpawnTime=0.000000
|
||||
bHadFirstSpawn=False
|
||||
bViewingStats=False
|
||||
bEndStats=False
|
||||
IndicatorStartShow=0.000000
|
||||
IndicatorVisibility=0
|
||||
ipToCountry=None
|
||||
bIpToCountry=False
|
||||
}
|
||||
class SmartCTFPlayerReplicationInfo expands ReplicationInfo;
|
||||
|
||||
// Replicated
|
||||
var int Captures, Assists, Grabs, Covers, Seals, FlagKills, DefKills;
|
||||
var int Frags, HeadShots, ShieldBelts, Amps;
|
||||
|
||||
var string CountryPrefix; // for IpToCountry
|
||||
|
||||
// Server side
|
||||
var float LastKillTime;
|
||||
var int MultiLevel;
|
||||
var int FragSpree, CoverSpree, SealSpree, SpawnKillSpree;
|
||||
var float SpawnTime;
|
||||
var bool bHadFirstSpawn;
|
||||
|
||||
// Client side
|
||||
var bool bViewingStats;
|
||||
var bool bEndStats;
|
||||
var float IndicatorStartShow;
|
||||
var byte IndicatorVisibility;
|
||||
|
||||
var Actor IpToCountry;
|
||||
var bool bIpToCountry;
|
||||
|
||||
replication
|
||||
{
|
||||
// Stats
|
||||
reliable if( Role == ROLE_Authority )
|
||||
Captures, Assists, Grabs, Covers, Seals, FlagKills, DefKills,
|
||||
Frags, HeadShots, ShieldBelts, Amps, CountryPrefix;
|
||||
|
||||
// Toggle stats functions
|
||||
reliable if( Role == ROLE_Authority )
|
||||
ToggleStats, ShowStats;
|
||||
}
|
||||
|
||||
function PostBeginPlay()
|
||||
{
|
||||
|
||||
super.PostBeginPlay();
|
||||
|
||||
SetTimer( 0.5, True );
|
||||
}
|
||||
|
||||
function Timer()
|
||||
{
|
||||
local string temp;
|
||||
local PlayerPawn P;
|
||||
if( Owner == None )
|
||||
{
|
||||
SetTimer( 0.0, False );
|
||||
Destroy();
|
||||
return;
|
||||
}
|
||||
if(bIpToCountry)
|
||||
{
|
||||
if(CountryPrefix == "")
|
||||
{
|
||||
if(Owner.Owner.IsA('PlayerPawn'))
|
||||
{
|
||||
P=PlayerPawn(Owner.Owner);
|
||||
if(NetConnection(P.Player) != None)
|
||||
{
|
||||
temp=P.GetPlayerNetworkAddress();
|
||||
temp=Left(temp, InStr(temp, ":"));
|
||||
temp=IpToCountry.GetItemName(temp);
|
||||
if(temp == "!Disabled") /* after this return, iptocountry won't resolve anything anyway */
|
||||
bIpToCountry=False;
|
||||
else if(Left(temp, 1) != "!") /* good response */
|
||||
{
|
||||
CountryPrefix=SelElem(temp, 5);
|
||||
if(CountryPrefix=="") /* the country is probably unknown(maybe LAN), so as the prefix */
|
||||
bIpToCountry=False;
|
||||
}
|
||||
}
|
||||
else
|
||||
bIpToCountry=False;
|
||||
}
|
||||
else
|
||||
bIpToCountry=False;
|
||||
}
|
||||
else
|
||||
bIpToCountry=False;
|
||||
}
|
||||
}
|
||||
|
||||
static final function string SelElem(string Str, int Elem)
|
||||
{
|
||||
local int pos;
|
||||
while(Elem-->1)
|
||||
Str=Mid(Str, InStr(Str,":")+1);
|
||||
pos=InStr(Str, ":");
|
||||
if(pos != -1)
|
||||
Str=Left(Str, pos);
|
||||
return Str;
|
||||
}
|
||||
|
||||
// Called on the server, executed on the client
|
||||
simulated function ToggleStats()
|
||||
{
|
||||
local PlayerPawn P;
|
||||
|
||||
if( Owner == None ) return;
|
||||
P = PlayerPawn( Owner.Owner );
|
||||
if( P == None ) return;
|
||||
|
||||
if( P.Scoring != None && !P.Scoring.IsA( 'SmartCTFScoreBoard' ) )
|
||||
{
|
||||
P.ClientMessage( "Problem loading the SmartCTF ScoreBoard..." );
|
||||
}
|
||||
else
|
||||
{
|
||||
bViewingStats = !bViewingStats;
|
||||
IndicatorStartShow = Level.TimeSeconds;
|
||||
IndicatorVisibility = 255;
|
||||
P.bShowScores = True;
|
||||
}
|
||||
}
|
||||
|
||||
// Called on the client
|
||||
simulated function ShowStats(optional bool bHide)
|
||||
{
|
||||
local PlayerPawn P;
|
||||
|
||||
if( Owner == None ) return;
|
||||
P = PlayerPawn( Owner.Owner );
|
||||
if( P == None ) return;
|
||||
|
||||
if( P.Scoring != None && !P.Scoring.IsA( 'SmartCTFScoreBoard' ) )
|
||||
{
|
||||
P.ClientMessage( "Problem loading the SmartCTF ScoreBoard..." );
|
||||
}
|
||||
else
|
||||
{
|
||||
bViewingStats = True;
|
||||
if(!bHide) P.bShowScores = True;
|
||||
}
|
||||
}
|
||||
|
||||
function ClearStats()
|
||||
{
|
||||
Captures = 0;
|
||||
Assists = 0;
|
||||
Grabs = 0;
|
||||
Covers = 0;
|
||||
Seals = 0;
|
||||
DefKills = 0;
|
||||
FlagKills = 0;
|
||||
Frags = 0;
|
||||
HeadShots = 0;
|
||||
ShieldBelts = 0;
|
||||
Amps = 0;
|
||||
|
||||
FragSpree = 0;
|
||||
CoverSpree = 0;
|
||||
SealSpree = 0;
|
||||
SpawnKillSpree = 0;
|
||||
SpawnTime = 0;
|
||||
|
||||
LastKillTime = 0;
|
||||
MultiLevel = 0;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
Captures=0
|
||||
Assists=0
|
||||
Grabs=0
|
||||
Covers=0
|
||||
Seals=0
|
||||
FlagKills=0
|
||||
DefKills=0
|
||||
Frags=0
|
||||
HeadShots=0
|
||||
ShieldBelts=0
|
||||
Amps=0
|
||||
CountryPrefix=""
|
||||
LastKillTime=0.000000
|
||||
MultiLevel=0
|
||||
FragSpree=0
|
||||
CoverSpree=0
|
||||
SealSpree=0
|
||||
SpawnKillSpree=0
|
||||
SpawnTime=0.000000
|
||||
bHadFirstSpawn=False
|
||||
bViewingStats=False
|
||||
bEndStats=False
|
||||
IndicatorStartShow=0.000000
|
||||
IndicatorVisibility=0
|
||||
ipToCountry=None
|
||||
bIpToCountry=False
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
1094
Classes/SmartCTFScoreBoard.UC.bak
Normal file
1094
Classes/SmartCTFScoreBoard.UC.bak
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,16 +1,16 @@
|
||||
class SmartCTFServerActor expands Actor;
|
||||
|
||||
function PostBeginPlay()
|
||||
{
|
||||
if( CTFGame( Level.Game ) != None )
|
||||
{
|
||||
Log( "ServerActor, Spawning and adding Mutator...", 'SmartCTF' );
|
||||
Level.Game.BaseMutator.AddMutator( Level.Game.Spawn( class'SmartCTF' ) );
|
||||
}
|
||||
Destroy();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
bHidden=True
|
||||
}
|
||||
class SmartCTFServerActor expands Actor;
|
||||
|
||||
function PostBeginPlay()
|
||||
{
|
||||
if( CTFGame( Level.Game ) != None )
|
||||
{
|
||||
Log( "ServerActor, Spawning and adding Mutator...", 'SmartCTF' );
|
||||
Level.Game.BaseMutator.AddMutator( Level.Game.Spawn( class'SmartCTF' ) );
|
||||
}
|
||||
Destroy();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
bHidden=True
|
||||
}
|
||||
@@ -1,375 +1,375 @@
|
||||
class SmartCTFServerInfo expands ServerInfoCTF;
|
||||
|
||||
var SmartCTFGameReplicationInfo SCTFGame;
|
||||
var PlayerPawn PlayerOwner;
|
||||
var string MapNameText;
|
||||
var bool bFontUpdated;
|
||||
var float LastUpdateTime;
|
||||
var float HeaderHeight, CatHeight, TextHeight, SmallTextHeight, VSpacing, BorderSpacing, TotalHeight;
|
||||
var float StartY, Y, SideSpacing;
|
||||
var Color HeaderBlue, TextBlue, InfoWhite;
|
||||
|
||||
function PostBeginPlay()
|
||||
{
|
||||
if( SCTFGame == None )
|
||||
{
|
||||
ForEach AllActors( class'SmartCTFGameReplicationInfo', SCTFGame ) break;
|
||||
}
|
||||
|
||||
super.PostBeginPlay();
|
||||
}
|
||||
|
||||
function RenderInfo( Canvas C )
|
||||
{
|
||||
local float XL;
|
||||
local GameReplicationInfo GRI;
|
||||
|
||||
if( Level.TimeSeconds - LastUpdateTime > 0.5 ) bFontUpdated = False;
|
||||
if( !bFontUpdated )
|
||||
{
|
||||
C.Font = MyFonts.GetHugeFont( C.ClipX );
|
||||
C.StrLen( "Test", XL, HeaderHeight );
|
||||
C.Font = MyFonts.GetBigFont( C.ClipX );
|
||||
C.StrLen( "Test", XL, CatHeight );
|
||||
C.Font = MyFonts.GetSmallFont( C.ClipX );
|
||||
C.StrLen( "Test", XL, TextHeight );
|
||||
C.Font = MyFonts.GetSmallFont( C.ClipX );
|
||||
C.StrLen( "Test", XL, SmallTextHeight );
|
||||
CatHeight = CatHeight * 1.2;
|
||||
TextHeight = TextHeight * 1.2;
|
||||
SmallTextHeight = SmallTextHeight * 1.1;
|
||||
VSpacing = HeaderHeight * 0.8;
|
||||
BorderSpacing = VSpacing;
|
||||
TotalHeight = 1.5 * HeaderHeight + 2 * BorderSpacing + CatHeight * 3 + TextHeight * 6 + SmallTextHeight * 7 + VSpacing * 3;
|
||||
StartY = C.ClipY / 2 - TotalHeight / 2;
|
||||
SideSpacing = C.ClipX / 10;
|
||||
bFontUpdated = True;
|
||||
LastUpdateTime = Level.TimeSeconds;
|
||||
}
|
||||
|
||||
GRI = PlayerPawn(Owner).GameReplicationInfo;
|
||||
|
||||
DrawTitle( C );
|
||||
DrawContactInfo( C, GRI );
|
||||
DrawMOTD( C, GRI );
|
||||
DrawGameStats( C, GRI );
|
||||
DrawServerStats( C, GRI );
|
||||
DrawLeaderBoard( C, GRI );
|
||||
}
|
||||
|
||||
function DrawTitle( Canvas C )
|
||||
{
|
||||
Y = StartY;
|
||||
|
||||
C.Style = ERenderStyle.STY_Modulated;
|
||||
C.SetPos( SideSpacing - BorderSpacing, Y );
|
||||
C.DrawRect( texture'shade', C.ClipX - 2 * SideSpacing + 2 * BorderSpacing , TotalHeight );
|
||||
C.Style = ERenderStyle.STY_Translucent;
|
||||
C.DrawColor.R = 32;
|
||||
C.DrawColor.G = 32;
|
||||
C.DrawColor.B = 32;
|
||||
C.SetPos( SideSpacing - BorderSpacing, Y );
|
||||
C.DrawPattern( texture'newblue', C.ClipX - 2 * SideSpacing + 2 * BorderSpacing , 1.5 * HeaderHeight, 1.0 );
|
||||
C.Style = ERenderStyle.STY_Normal;
|
||||
|
||||
C.Font = MyFonts.GetHugeFont( C.ClipX );
|
||||
C.DrawColor = HeaderBlue;
|
||||
|
||||
C.bCenter = True;
|
||||
C.SetPos( 0, Y + 0.25 * HeaderHeight );
|
||||
C.DrawText( ServerInfoText, True );
|
||||
C.bCenter = False;
|
||||
|
||||
Y += 1.5 * HeaderHeight + BorderSpacing;
|
||||
}
|
||||
|
||||
function DrawContactInfo( Canvas C, GameReplicationInfo GRI )
|
||||
{
|
||||
local float XL, YL, XL2, YL2;
|
||||
|
||||
C.DrawColor = HeaderBlue;
|
||||
C.Font = MyFonts.GetBigFont( C.ClipX );
|
||||
C.StrLen( "TEMP", XL, YL );
|
||||
|
||||
C.SetPos( SideSpacing, Y );
|
||||
C.DrawText( ContactInfoText, True);
|
||||
|
||||
C.DrawColor = TextBlue;
|
||||
C.Font = MyFonts.GetSmallFont( C.ClipX );
|
||||
C.StrLen( "TEMP", XL2, YL2 );
|
||||
|
||||
C.SetPos( SideSpacing, Y + CatHeight );
|
||||
C.DrawText( NameText, True);
|
||||
|
||||
C.SetPos( SideSpacing, Y + CatHeight + TextHeight );
|
||||
C.DrawText( AdminText, True);
|
||||
|
||||
C.SetPos( SideSpacing, Y + CatHeight + 2 * TextHeight);
|
||||
C.DrawText( EMailText, True);
|
||||
|
||||
C.DrawColor = InfoWhite;
|
||||
C.SetPos( SideSpacing + XL2 * 2, Y + CatHeight );
|
||||
C.DrawText( GRI.ServerName, True);
|
||||
|
||||
C.SetPos( SideSpacing + XL2 * 2, Y + CatHeight + TextHeight );
|
||||
if( GRI.AdminName != "" )
|
||||
C.DrawText( GRI.AdminName, True );
|
||||
else
|
||||
C.DrawText( UnknownText, True );
|
||||
|
||||
C.SetPos( SideSpacing + XL2 * 2, Y + CatHeight + 2 * TextHeight );
|
||||
if( GRI.AdminEmail != "" )
|
||||
C.DrawText( GRI.AdminEmail, True );
|
||||
else
|
||||
C.DrawText( UnknownText, True );
|
||||
}
|
||||
|
||||
function DrawMOTD( Canvas C, GameReplicationInfo GRI )
|
||||
{
|
||||
local float XL, YL, XL2, YL2;
|
||||
|
||||
C.DrawColor = HeaderBlue;
|
||||
|
||||
C.Font = MyFonts.GetBigFont( C.ClipX );
|
||||
C.StrLen( "TEMP", XL, YL );
|
||||
|
||||
C.SetPos( SideSpacing * 6, Y );
|
||||
C.DrawText( MOTD, True );
|
||||
|
||||
C.DrawColor = InfoWhite;
|
||||
|
||||
C.Font = MyFonts.GetSmallFont( C.ClipX );
|
||||
C.StrLen( "TEMP", XL2, YL2 );
|
||||
|
||||
C.StrLen( GRI.MOTDLine1, XL2, YL2 );
|
||||
C.SetPos( SideSpacing * 6, Y + CatHeight );
|
||||
C.DrawText( GRI.MOTDLine1, True );
|
||||
|
||||
C.StrLen( GRI.MOTDLine2, XL2, YL2 );
|
||||
C.SetPos( SideSpacing * 6, Y + CatHeight + TextHeight );
|
||||
C.DrawText( GRI.MOTDLine2, True );
|
||||
|
||||
C.StrLen( GRI.MOTDLine3, XL2, YL2 );
|
||||
C.SetPos( SideSpacing * 6, Y + CatHeight + 2 * TextHeight );
|
||||
C.DrawText( GRI.MOTDLine3, True );
|
||||
|
||||
C.StrLen( GRI.MOTDLine4, XL2, YL2 );
|
||||
C.SetPos( SideSpacing * 6, Y + CatHeight + 3 * TextHeight );
|
||||
C.DrawText( GRI.MOTDLine4, True );
|
||||
|
||||
Y += CatHeight + 4 * TextHeight + VSpacing;
|
||||
}
|
||||
|
||||
function DrawGameStats( Canvas C, GameReplicationInfo GRI )
|
||||
{
|
||||
local float XL, YL, XL2, YL2;
|
||||
local int i, NumBots;
|
||||
|
||||
C.DrawColor = HeaderBlue;
|
||||
|
||||
C.Font = MyFonts.GetBigFont( C.ClipX );
|
||||
C.StrLen( "TEMP", XL, YL );
|
||||
|
||||
C.SetPos( SideSpacing, Y );
|
||||
C.DrawText( GameStatsText, True );
|
||||
|
||||
C.DrawColor = TextBlue;
|
||||
|
||||
C.Font = MyFonts.GetSmallFont( C.ClipX );
|
||||
C.StrLen( "TEMP", XL2, YL2 );
|
||||
|
||||
C.SetPos( SideSpacing, Y + CatHeight );
|
||||
C.DrawText( GameTypeText, True );
|
||||
|
||||
C.SetPos( SideSpacing, Y + CatHeight + TextHeight );
|
||||
C.DrawText( PlayersText, True );
|
||||
|
||||
C.DrawColor = InfoWhite;
|
||||
|
||||
C.SetPos( SideSpacing * 2, Y + CatHeight );
|
||||
C.DrawText( "Smart Capture The Flag", True); // GRI.GameName
|
||||
|
||||
for( i = 0; i < 32; i++ )
|
||||
{
|
||||
if( ( GRI.PRIArray[i] != None ) && ( GRI.PRIArray[i].bIsABot ) ) NumBots++;
|
||||
}
|
||||
C.SetPos( SideSpacing * 2, Y + CatHeight + TextHeight );
|
||||
C.DrawText( GRI.NumPlayers $ " [" $ NumBots @ BotText $ "]", True );
|
||||
}
|
||||
|
||||
function DrawServerStats( canvas C, GameReplicationInfo GRI )
|
||||
{
|
||||
local float XL, YL, XL2, YL2;
|
||||
local TournamentGameReplicationInfo TGRI;
|
||||
|
||||
C.DrawColor = HeaderBlue;
|
||||
|
||||
C.Font = MyFonts.GetBigFont( C.ClipX );
|
||||
C.StrLen( "TEMP", XL, YL );
|
||||
|
||||
C.SetPos( SideSpacing * 6, Y );
|
||||
C.DrawText( ServerStatsText, True );
|
||||
|
||||
C.DrawColor = TextBlue;
|
||||
|
||||
C.Font = MyFonts.GetSmallFont( C.ClipX );
|
||||
C.StrLen( "TEMP", XL2, YL2 );
|
||||
|
||||
C.SetPos( SideSpacing * 6, Y + CatHeight );
|
||||
C.DrawText( GamesHostedText, True);
|
||||
|
||||
C.SetPos( SideSpacing * 6, Y + CatHeight + TextHeight );
|
||||
C.DrawText( FlagsCapturedText, True);
|
||||
|
||||
C.DrawColor = InfoWhite;
|
||||
|
||||
TGRI = TournamentGameReplicationInfo( GRI );
|
||||
|
||||
C.SetPos( SideSpacing * 7.25, Y + CatHeight );
|
||||
C.DrawText( TGRI.TotalGames, True );
|
||||
|
||||
C.SetPos( SideSpacing * 7.25, Y + CatHeight + TextHeight );
|
||||
C.DrawText( TGRI.TotalFlags, True );
|
||||
|
||||
Y += CatHeight + 2 * TextHeight + VSpacing;
|
||||
}
|
||||
|
||||
function DrawLeaderBoard( Canvas C, GameReplicationInfo GRI )
|
||||
{
|
||||
local float YL;
|
||||
local int i;
|
||||
local SmartCTFEndStats EndStats;
|
||||
local string Title, What, Who, Where, When;
|
||||
|
||||
C.DrawColor = HeaderBlue;
|
||||
|
||||
YL = ( CatHeight + SmallTextHeight - 4 ) / 64;
|
||||
C.Font = MyFonts.GetBigFont( C.ClipX );
|
||||
C.SetPos( SideSpacing + 68 * YL, Y );
|
||||
C.DrawText( TopPlayersText, True );
|
||||
|
||||
C.DrawColor = InfoWhite;
|
||||
C.Style = ERenderStyle.STY_Translucent;
|
||||
C.bNoSmooth = False;
|
||||
C.SetPos( SideSpacing, Y );
|
||||
C.DrawIcon( texture'UTMenu.TrophyCTF', YL );
|
||||
C.SetPos( SideSpacing, Y );
|
||||
|
||||
C.bNoSmooth = True;
|
||||
C.Style = ERenderStyle.STY_Normal;
|
||||
|
||||
C.Font = MyFonts.GetSmallestFont( C.ClipX );
|
||||
C.DrawColor = TextBlue;
|
||||
|
||||
C.SetPos( SideSpacing * 2.5, Y + CatHeight );
|
||||
C.DrawText( BestFPHText, True );
|
||||
|
||||
C.SetPos( SideSpacing * 3.75, Y + CatHeight );
|
||||
C.DrawText( BestNameText, True );
|
||||
|
||||
C.SetPos( SideSpacing * 5.75, Y + CatHeight );
|
||||
C.DrawText( MapNameText, True );
|
||||
|
||||
C.SetPos( SideSpacing * 7.5, Y + CatHeight );
|
||||
C.DrawText( BestRecordSetText, True );
|
||||
|
||||
C.DrawColor = InfoWhite;
|
||||
|
||||
if( SCTFGame != None ) EndStats = SCTFGame.EndStats;
|
||||
if( EndStats != None )
|
||||
{
|
||||
for( i = 0; i < 6; i++ )
|
||||
{
|
||||
switch( i )
|
||||
{
|
||||
case 0:
|
||||
Title = "Greatest Point 'Ho";
|
||||
What = EndStats.MostPoints.Count @ "points/h";
|
||||
Who = EndStats.MostPoints.PlayerName;
|
||||
Where = EndStats.MostPoints.MapName;
|
||||
When = EndStats.MostPoints.RecordDate;
|
||||
break;
|
||||
case 1:
|
||||
Title = "Biggest DM'er";
|
||||
What = EndStats.MostFrags.Count @ "frags/h";
|
||||
Who = EndStats.MostFrags.PlayerName;
|
||||
Where = EndStats.MostFrags.MapName;
|
||||
When = EndStats.MostFrags.RecordDate;
|
||||
break;
|
||||
case 2:
|
||||
Title = "Best Flagcapper";
|
||||
What = EndStats.MostCaps.Count @ "caps/h";
|
||||
Who = EndStats.MostCaps.PlayerName;
|
||||
Where = EndStats.MostCaps.MapName;
|
||||
When = EndStats.MostCaps.RecordDate;
|
||||
break;
|
||||
case 3:
|
||||
Title = "Best Flagkiller";
|
||||
What = EndStats.MostFlagkills.Count @ "flagk./h";
|
||||
Who = EndStats.MostFlagkills.PlayerName;
|
||||
Where = EndStats.MostFlagkills.MapName;
|
||||
When = EndStats.MostFlagkills.RecordDate;
|
||||
break;
|
||||
case 4:
|
||||
Title = "Most Cover";
|
||||
What = EndStats.MostCovers.Count @ "covers/h";
|
||||
Who = EndStats.MostCovers.PlayerName;
|
||||
Where = EndStats.MostCovers.MapName;
|
||||
When = EndStats.MostCovers.RecordDate;
|
||||
break;
|
||||
case 5:
|
||||
Title = "Hardcore Sniper";
|
||||
What = EndStats.MostHeadShots.Count @ "HS/h";
|
||||
Who = EndStats.MostHeadShots.PlayerName;
|
||||
Where = EndStats.MostHeadShots.MapName;
|
||||
When = EndStats.MostHeadShots.RecordDate;
|
||||
break;
|
||||
}
|
||||
if( What == "" ) What = "--";
|
||||
if( Who == "" ) Who = "--";
|
||||
if( Where == "" ) Where = "--";
|
||||
if( When == "" ) When = "--";
|
||||
if( Len( Where ) > 20 ) Where = Left( Where, 20 ) $ "..";
|
||||
if( Len( Who ) > 25 ) Who = Left( Who, 25 ) $ "..";
|
||||
|
||||
C.DrawColor = TextBlue;
|
||||
C.SetPos( SideSpacing, Y + CatHeight + ( ( i + 1 ) * SmallTextHeight ) );
|
||||
C.DrawText( Title, True );
|
||||
C.DrawColor = InfoWhite;
|
||||
C.SetPos( SideSpacing * 2.5, Y + CatHeight + ( ( i + 1 ) * SmallTextHeight ) );
|
||||
C.DrawText( What, True );
|
||||
C.SetPos( SideSpacing * 3.75, Y + CatHeight + ( ( i + 1 ) * SmallTextHeight ) );
|
||||
C.DrawText( Who, True );
|
||||
C.SetPos( SideSpacing * 5.75, Y + CatHeight + ( ( i + 1 ) * SmallTextHeight ) );
|
||||
C.DrawText( Where, True );
|
||||
C.SetPos( SideSpacing * 7.5, Y + CatHeight + ( ( i + 1 ) * SmallTextHeight ) );
|
||||
C.DrawText( When, True );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
SCTFGame=None
|
||||
PlayerOwner=None
|
||||
MapNameText="Where"
|
||||
bFontUpdated=False
|
||||
LastUpdateTime=0.000000
|
||||
HeaderHeight=0.000000
|
||||
CatHeight=0.000000
|
||||
textHeight=0.000000
|
||||
SmallTextHeight=0.000000
|
||||
VSpacing=0.000000
|
||||
BorderSpacing=0.000000
|
||||
TotalHeight=0.000000
|
||||
StartY=0.000000
|
||||
Y=0.000000
|
||||
SideSpacing=0.000000
|
||||
HeaderBlue=(R=9,G=151,B=247,A=0)
|
||||
TextBlue=(R=0,G=128,B=255,A=0)
|
||||
InfoWhite=(R=255,G=255,B=255,A=0)
|
||||
TopPlayersText="SmartCTF Record Holders [Numbers per Hour]"
|
||||
BestNameText="Who"
|
||||
BestFPHText="What"
|
||||
BestRecordSetText="When"
|
||||
}
|
||||
class SmartCTFServerInfo expands ServerInfoCTF;
|
||||
|
||||
var SmartCTFGameReplicationInfo SCTFGame;
|
||||
var PlayerPawn PlayerOwner;
|
||||
var string MapNameText;
|
||||
var bool bFontUpdated;
|
||||
var float LastUpdateTime;
|
||||
var float HeaderHeight, CatHeight, TextHeight, SmallTextHeight, VSpacing, BorderSpacing, TotalHeight;
|
||||
var float StartY, Y, SideSpacing;
|
||||
var Color HeaderBlue, TextBlue, InfoWhite;
|
||||
|
||||
function PostBeginPlay()
|
||||
{
|
||||
if( SCTFGame == None )
|
||||
{
|
||||
ForEach AllActors( class'SmartCTFGameReplicationInfo', SCTFGame ) break;
|
||||
}
|
||||
|
||||
super.PostBeginPlay();
|
||||
}
|
||||
|
||||
function RenderInfo( Canvas C )
|
||||
{
|
||||
local float XL;
|
||||
local GameReplicationInfo GRI;
|
||||
|
||||
if( Level.TimeSeconds - LastUpdateTime > 0.5 ) bFontUpdated = False;
|
||||
if( !bFontUpdated )
|
||||
{
|
||||
C.Font = MyFonts.GetHugeFont( C.ClipX );
|
||||
C.StrLen( "Test", XL, HeaderHeight );
|
||||
C.Font = MyFonts.GetBigFont( C.ClipX );
|
||||
C.StrLen( "Test", XL, CatHeight );
|
||||
C.Font = MyFonts.GetSmallFont( C.ClipX );
|
||||
C.StrLen( "Test", XL, TextHeight );
|
||||
C.Font = MyFonts.GetSmallFont( C.ClipX );
|
||||
C.StrLen( "Test", XL, SmallTextHeight );
|
||||
CatHeight = CatHeight * 1.2;
|
||||
TextHeight = TextHeight * 1.2;
|
||||
SmallTextHeight = SmallTextHeight * 1.1;
|
||||
VSpacing = HeaderHeight * 0.8;
|
||||
BorderSpacing = VSpacing;
|
||||
TotalHeight = 1.5 * HeaderHeight + 2 * BorderSpacing + CatHeight * 3 + TextHeight * 6 + SmallTextHeight * 7 + VSpacing * 3;
|
||||
StartY = C.ClipY / 2 - TotalHeight / 2;
|
||||
SideSpacing = C.ClipX / 10;
|
||||
bFontUpdated = True;
|
||||
LastUpdateTime = Level.TimeSeconds;
|
||||
}
|
||||
|
||||
GRI = PlayerPawn(Owner).GameReplicationInfo;
|
||||
|
||||
DrawTitle( C );
|
||||
DrawContactInfo( C, GRI );
|
||||
DrawMOTD( C, GRI );
|
||||
DrawGameStats( C, GRI );
|
||||
DrawServerStats( C, GRI );
|
||||
DrawLeaderBoard( C, GRI );
|
||||
}
|
||||
|
||||
function DrawTitle( Canvas C )
|
||||
{
|
||||
Y = StartY;
|
||||
|
||||
C.Style = ERenderStyle.STY_Modulated;
|
||||
C.SetPos( SideSpacing - BorderSpacing, Y );
|
||||
C.DrawRect( texture'shade', C.ClipX - 2 * SideSpacing + 2 * BorderSpacing , TotalHeight );
|
||||
C.Style = ERenderStyle.STY_Translucent;
|
||||
C.DrawColor.R = 32;
|
||||
C.DrawColor.G = 32;
|
||||
C.DrawColor.B = 32;
|
||||
C.SetPos( SideSpacing - BorderSpacing, Y );
|
||||
C.DrawPattern( texture'newblue', C.ClipX - 2 * SideSpacing + 2 * BorderSpacing , 1.5 * HeaderHeight, 1.0 );
|
||||
C.Style = ERenderStyle.STY_Normal;
|
||||
|
||||
C.Font = MyFonts.GetHugeFont( C.ClipX );
|
||||
C.DrawColor = HeaderBlue;
|
||||
|
||||
C.bCenter = True;
|
||||
C.SetPos( 0, Y + 0.25 * HeaderHeight );
|
||||
C.DrawText( ServerInfoText, True );
|
||||
C.bCenter = False;
|
||||
|
||||
Y += 1.5 * HeaderHeight + BorderSpacing;
|
||||
}
|
||||
|
||||
function DrawContactInfo( Canvas C, GameReplicationInfo GRI )
|
||||
{
|
||||
local float XL, YL, XL2, YL2;
|
||||
|
||||
C.DrawColor = HeaderBlue;
|
||||
C.Font = MyFonts.GetBigFont( C.ClipX );
|
||||
C.StrLen( "TEMP", XL, YL );
|
||||
|
||||
C.SetPos( SideSpacing, Y );
|
||||
C.DrawText( ContactInfoText, True);
|
||||
|
||||
C.DrawColor = TextBlue;
|
||||
C.Font = MyFonts.GetSmallFont( C.ClipX );
|
||||
C.StrLen( "TEMP", XL2, YL2 );
|
||||
|
||||
C.SetPos( SideSpacing, Y + CatHeight );
|
||||
C.DrawText( NameText, True);
|
||||
|
||||
C.SetPos( SideSpacing, Y + CatHeight + TextHeight );
|
||||
C.DrawText( AdminText, True);
|
||||
|
||||
C.SetPos( SideSpacing, Y + CatHeight + 2 * TextHeight);
|
||||
C.DrawText( EMailText, True);
|
||||
|
||||
C.DrawColor = InfoWhite;
|
||||
C.SetPos( SideSpacing + XL2 * 2, Y + CatHeight );
|
||||
C.DrawText( GRI.ServerName, True);
|
||||
|
||||
C.SetPos( SideSpacing + XL2 * 2, Y + CatHeight + TextHeight );
|
||||
if( GRI.AdminName != "" )
|
||||
C.DrawText( GRI.AdminName, True );
|
||||
else
|
||||
C.DrawText( UnknownText, True );
|
||||
|
||||
C.SetPos( SideSpacing + XL2 * 2, Y + CatHeight + 2 * TextHeight );
|
||||
if( GRI.AdminEmail != "" )
|
||||
C.DrawText( GRI.AdminEmail, True );
|
||||
else
|
||||
C.DrawText( UnknownText, True );
|
||||
}
|
||||
|
||||
function DrawMOTD( Canvas C, GameReplicationInfo GRI )
|
||||
{
|
||||
local float XL, YL, XL2, YL2;
|
||||
|
||||
C.DrawColor = HeaderBlue;
|
||||
|
||||
C.Font = MyFonts.GetBigFont( C.ClipX );
|
||||
C.StrLen( "TEMP", XL, YL );
|
||||
|
||||
C.SetPos( SideSpacing * 6, Y );
|
||||
C.DrawText( MOTD, True );
|
||||
|
||||
C.DrawColor = InfoWhite;
|
||||
|
||||
C.Font = MyFonts.GetSmallFont( C.ClipX );
|
||||
C.StrLen( "TEMP", XL2, YL2 );
|
||||
|
||||
C.StrLen( GRI.MOTDLine1, XL2, YL2 );
|
||||
C.SetPos( SideSpacing * 6, Y + CatHeight );
|
||||
C.DrawText( GRI.MOTDLine1, True );
|
||||
|
||||
C.StrLen( GRI.MOTDLine2, XL2, YL2 );
|
||||
C.SetPos( SideSpacing * 6, Y + CatHeight + TextHeight );
|
||||
C.DrawText( GRI.MOTDLine2, True );
|
||||
|
||||
C.StrLen( GRI.MOTDLine3, XL2, YL2 );
|
||||
C.SetPos( SideSpacing * 6, Y + CatHeight + 2 * TextHeight );
|
||||
C.DrawText( GRI.MOTDLine3, True );
|
||||
|
||||
C.StrLen( GRI.MOTDLine4, XL2, YL2 );
|
||||
C.SetPos( SideSpacing * 6, Y + CatHeight + 3 * TextHeight );
|
||||
C.DrawText( GRI.MOTDLine4, True );
|
||||
|
||||
Y += CatHeight + 4 * TextHeight + VSpacing;
|
||||
}
|
||||
|
||||
function DrawGameStats( Canvas C, GameReplicationInfo GRI )
|
||||
{
|
||||
local float XL, YL, XL2, YL2;
|
||||
local int i, NumBots;
|
||||
|
||||
C.DrawColor = HeaderBlue;
|
||||
|
||||
C.Font = MyFonts.GetBigFont( C.ClipX );
|
||||
C.StrLen( "TEMP", XL, YL );
|
||||
|
||||
C.SetPos( SideSpacing, Y );
|
||||
C.DrawText( GameStatsText, True );
|
||||
|
||||
C.DrawColor = TextBlue;
|
||||
|
||||
C.Font = MyFonts.GetSmallFont( C.ClipX );
|
||||
C.StrLen( "TEMP", XL2, YL2 );
|
||||
|
||||
C.SetPos( SideSpacing, Y + CatHeight );
|
||||
C.DrawText( GameTypeText, True );
|
||||
|
||||
C.SetPos( SideSpacing, Y + CatHeight + TextHeight );
|
||||
C.DrawText( PlayersText, True );
|
||||
|
||||
C.DrawColor = InfoWhite;
|
||||
|
||||
C.SetPos( SideSpacing * 2, Y + CatHeight );
|
||||
C.DrawText( "Smart Capture The Flag", True); // GRI.GameName
|
||||
|
||||
for( i = 0; i < 32; i++ )
|
||||
{
|
||||
if( ( GRI.PRIArray[i] != None ) && ( GRI.PRIArray[i].bIsABot ) ) NumBots++;
|
||||
}
|
||||
C.SetPos( SideSpacing * 2, Y + CatHeight + TextHeight );
|
||||
C.DrawText( GRI.NumPlayers $ " [" $ NumBots @ BotText $ "]", True );
|
||||
}
|
||||
|
||||
function DrawServerStats( canvas C, GameReplicationInfo GRI )
|
||||
{
|
||||
local float XL, YL, XL2, YL2;
|
||||
local TournamentGameReplicationInfo TGRI;
|
||||
|
||||
C.DrawColor = HeaderBlue;
|
||||
|
||||
C.Font = MyFonts.GetBigFont( C.ClipX );
|
||||
C.StrLen( "TEMP", XL, YL );
|
||||
|
||||
C.SetPos( SideSpacing * 6, Y );
|
||||
C.DrawText( ServerStatsText, True );
|
||||
|
||||
C.DrawColor = TextBlue;
|
||||
|
||||
C.Font = MyFonts.GetSmallFont( C.ClipX );
|
||||
C.StrLen( "TEMP", XL2, YL2 );
|
||||
|
||||
C.SetPos( SideSpacing * 6, Y + CatHeight );
|
||||
C.DrawText( GamesHostedText, True);
|
||||
|
||||
C.SetPos( SideSpacing * 6, Y + CatHeight + TextHeight );
|
||||
C.DrawText( FlagsCapturedText, True);
|
||||
|
||||
C.DrawColor = InfoWhite;
|
||||
|
||||
TGRI = TournamentGameReplicationInfo( GRI );
|
||||
|
||||
C.SetPos( SideSpacing * 7.25, Y + CatHeight );
|
||||
C.DrawText( TGRI.TotalGames, True );
|
||||
|
||||
C.SetPos( SideSpacing * 7.25, Y + CatHeight + TextHeight );
|
||||
C.DrawText( TGRI.TotalFlags, True );
|
||||
|
||||
Y += CatHeight + 2 * TextHeight + VSpacing;
|
||||
}
|
||||
|
||||
function DrawLeaderBoard( Canvas C, GameReplicationInfo GRI )
|
||||
{
|
||||
local float YL;
|
||||
local int i;
|
||||
local SmartCTFEndStats EndStats;
|
||||
local string Title, What, Who, Where, When;
|
||||
|
||||
C.DrawColor = HeaderBlue;
|
||||
|
||||
YL = ( CatHeight + SmallTextHeight - 4 ) / 64;
|
||||
C.Font = MyFonts.GetBigFont( C.ClipX );
|
||||
C.SetPos( SideSpacing + 68 * YL, Y );
|
||||
C.DrawText( TopPlayersText, True );
|
||||
|
||||
C.DrawColor = InfoWhite;
|
||||
C.Style = ERenderStyle.STY_Translucent;
|
||||
C.bNoSmooth = False;
|
||||
C.SetPos( SideSpacing, Y );
|
||||
C.DrawIcon( texture'UTMenu.TrophyCTF', YL );
|
||||
C.SetPos( SideSpacing, Y );
|
||||
|
||||
C.bNoSmooth = True;
|
||||
C.Style = ERenderStyle.STY_Normal;
|
||||
|
||||
C.Font = MyFonts.GetSmallestFont( C.ClipX );
|
||||
C.DrawColor = TextBlue;
|
||||
|
||||
C.SetPos( SideSpacing * 2.5, Y + CatHeight );
|
||||
C.DrawText( BestFPHText, True );
|
||||
|
||||
C.SetPos( SideSpacing * 3.75, Y + CatHeight );
|
||||
C.DrawText( BestNameText, True );
|
||||
|
||||
C.SetPos( SideSpacing * 5.75, Y + CatHeight );
|
||||
C.DrawText( MapNameText, True );
|
||||
|
||||
C.SetPos( SideSpacing * 7.5, Y + CatHeight );
|
||||
C.DrawText( BestRecordSetText, True );
|
||||
|
||||
C.DrawColor = InfoWhite;
|
||||
|
||||
if( SCTFGame != None ) EndStats = SCTFGame.EndStats;
|
||||
if( EndStats != None )
|
||||
{
|
||||
for( i = 0; i < 6; i++ )
|
||||
{
|
||||
switch( i )
|
||||
{
|
||||
case 0:
|
||||
Title = "Greatest Point 'Ho";
|
||||
What = EndStats.MostPoints.Count @ "points/h";
|
||||
Who = EndStats.MostPoints.PlayerName;
|
||||
Where = EndStats.MostPoints.MapName;
|
||||
When = EndStats.MostPoints.RecordDate;
|
||||
break;
|
||||
case 1:
|
||||
Title = "Biggest DM'er";
|
||||
What = EndStats.MostFrags.Count @ "frags/h";
|
||||
Who = EndStats.MostFrags.PlayerName;
|
||||
Where = EndStats.MostFrags.MapName;
|
||||
When = EndStats.MostFrags.RecordDate;
|
||||
break;
|
||||
case 2:
|
||||
Title = "Best Flagcapper";
|
||||
What = EndStats.MostCaps.Count @ "caps/h";
|
||||
Who = EndStats.MostCaps.PlayerName;
|
||||
Where = EndStats.MostCaps.MapName;
|
||||
When = EndStats.MostCaps.RecordDate;
|
||||
break;
|
||||
case 3:
|
||||
Title = "Best Flagkiller";
|
||||
What = EndStats.MostFlagkills.Count @ "flagk./h";
|
||||
Who = EndStats.MostFlagkills.PlayerName;
|
||||
Where = EndStats.MostFlagkills.MapName;
|
||||
When = EndStats.MostFlagkills.RecordDate;
|
||||
break;
|
||||
case 4:
|
||||
Title = "Most Cover";
|
||||
What = EndStats.MostCovers.Count @ "covers/h";
|
||||
Who = EndStats.MostCovers.PlayerName;
|
||||
Where = EndStats.MostCovers.MapName;
|
||||
When = EndStats.MostCovers.RecordDate;
|
||||
break;
|
||||
case 5:
|
||||
Title = "Hardcore Sniper";
|
||||
What = EndStats.MostHeadShots.Count @ "HS/h";
|
||||
Who = EndStats.MostHeadShots.PlayerName;
|
||||
Where = EndStats.MostHeadShots.MapName;
|
||||
When = EndStats.MostHeadShots.RecordDate;
|
||||
break;
|
||||
}
|
||||
if( What == "" ) What = "--";
|
||||
if( Who == "" ) Who = "--";
|
||||
if( Where == "" ) Where = "--";
|
||||
if( When == "" ) When = "--";
|
||||
if( Len( Where ) > 20 ) Where = Left( Where, 20 ) $ "..";
|
||||
if( Len( Who ) > 25 ) Who = Left( Who, 25 ) $ "..";
|
||||
|
||||
C.DrawColor = TextBlue;
|
||||
C.SetPos( SideSpacing, Y + CatHeight + ( ( i + 1 ) * SmallTextHeight ) );
|
||||
C.DrawText( Title, True );
|
||||
C.DrawColor = InfoWhite;
|
||||
C.SetPos( SideSpacing * 2.5, Y + CatHeight + ( ( i + 1 ) * SmallTextHeight ) );
|
||||
C.DrawText( What, True );
|
||||
C.SetPos( SideSpacing * 3.75, Y + CatHeight + ( ( i + 1 ) * SmallTextHeight ) );
|
||||
C.DrawText( Who, True );
|
||||
C.SetPos( SideSpacing * 5.75, Y + CatHeight + ( ( i + 1 ) * SmallTextHeight ) );
|
||||
C.DrawText( Where, True );
|
||||
C.SetPos( SideSpacing * 7.5, Y + CatHeight + ( ( i + 1 ) * SmallTextHeight ) );
|
||||
C.DrawText( When, True );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
SCTFGame=None
|
||||
PlayerOwner=None
|
||||
MapNameText="Where"
|
||||
bFontUpdated=False
|
||||
LastUpdateTime=0.000000
|
||||
HeaderHeight=0.000000
|
||||
CatHeight=0.000000
|
||||
textHeight=0.000000
|
||||
SmallTextHeight=0.000000
|
||||
VSpacing=0.000000
|
||||
BorderSpacing=0.000000
|
||||
TotalHeight=0.000000
|
||||
StartY=0.000000
|
||||
Y=0.000000
|
||||
SideSpacing=0.000000
|
||||
HeaderBlue=(R=9,G=151,B=247,A=0)
|
||||
TextBlue=(R=0,G=128,B=255,A=0)
|
||||
InfoWhite=(R=255,G=255,B=255,A=0)
|
||||
TopPlayersText="SmartCTF Record Holders [Numbers per Hour]"
|
||||
BestNameText="Who"
|
||||
BestFPHText="What"
|
||||
BestRecordSetText="When"
|
||||
}
|
||||
@@ -1,428 +1,428 @@
|
||||
// SnowyScoreboard original from CTT. Thanks to Defrost!
|
||||
// Brought to SmartCTF by Sp0ngeb0b
|
||||
// spongebobut@yahoo.com
|
||||
class SmartCTFSnowyScoreboard extends SmartCTFScoreBoard;
|
||||
|
||||
#exec texture import name=snowFlake1 file="Textures\SnowFlake1.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake2 file="Textures\SnowFlake2.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake3 file="Textures\SnowFlake3.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake4 file="Textures\SnowFlake4.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake5 file="Textures\SnowFlake5.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake6 file="Textures\SnowFlake6.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake7 file="Textures\SnowFlake7.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake8 file="Textures\SnowFlake8.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake9 file="Textures\SnowFlake9.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake10 file="Textures\SnowFlake10.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake11 file="Textures\SnowFlake11.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake12 file="Textures\SnowFlake12.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake13 file="Textures\SnowFlake13.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake14 file="Textures\SnowFlake14.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake15 file="Textures\SnowFlake15.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake16 file="Textures\SnowFlake16.pcx" mips=off flags=2
|
||||
//#exec texture import name=lights file="Textures\Lights2.pcx" mips=off flags=2
|
||||
#exec texture import name=santa file="Textures\santa.pcx" mips=off flags=2
|
||||
#exec texture import name=present file="Textures\presents.pcx" mips=off flags=2
|
||||
|
||||
struct ParticleInfo { // Snow particle description struct.
|
||||
var int spriteNum; // The snow flake sprite to use.
|
||||
var float cx; // Horizontal offset.
|
||||
var float cy; // Vertical offset.
|
||||
var float ct; // Time offset.
|
||||
var float waveFreq; // Particle wave frequency.
|
||||
var float waveAmplitude; // Amplitude of the wave.
|
||||
var float dy; // Vertical base velocity.
|
||||
var float dx; // Horizontal base velocity.
|
||||
var color col; // Color of the particle.
|
||||
};
|
||||
|
||||
var color baseColor; // Base color of the snow flakes.
|
||||
var bool bSnowInitialized; // Whether the particles have been initialized.
|
||||
var Texture sprites[16]; // Snow flake sprites.
|
||||
var ParticleInfo particles[100]; // Current particles displayed.
|
||||
var float lastUpdateTime; // Last time the particles were rendered.
|
||||
|
||||
var float minDX; // Minimum horizontal base velocity.
|
||||
var float maxDX; // Maximum horizontal base velocity.
|
||||
var float minDY; // Minimum vertical base velocity.
|
||||
var float maxDY; // Maximum vertical base velocity.
|
||||
var float minWaveAmplitude; // Minimum wave amplitude.
|
||||
var float maxWaveAmplitude; // Maximum wave amplitude.
|
||||
|
||||
// Non scaled constants.
|
||||
const minWaveFreq = 0.25; // Minimum wave frequency.
|
||||
const maxWaveFreq = 1.0; // Maximum wave frequency.
|
||||
const minGlow = 0.40; // Minimum snow flake sprite glow.
|
||||
const maxGlow = 1.00; // Maximum snow flake sprite glow.
|
||||
|
||||
// Scaled constants (set for a resolution of 1280x1024 px).
|
||||
const scaleMinDX = -20.0;
|
||||
const scaleMaxDX = 20.0;
|
||||
const scaleMinDY = 100.0;
|
||||
const scaleMaxDY = 300.0;
|
||||
const scaleMinWaveAmplitude = 8;
|
||||
const scaleMaxWaveAmplitude = 22;
|
||||
const scaleWidth = 1280;
|
||||
const scaleHeight = 1024;
|
||||
|
||||
// Texture constants
|
||||
const santaTextureWidth = 128; // Width of the santa texture.
|
||||
const santaTextureHeight = 128; // Height of the santa texture.
|
||||
|
||||
const presentTextureWidth = 128; // Width of the present texture.
|
||||
const presentTextureHeight = 128; // Height of the present texture.
|
||||
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
*
|
||||
* $DESCRIPTION Renders the scoreboard.
|
||||
* $PARAM c The canvas on which the rendering should be performed.
|
||||
* $REQUIRE c != none
|
||||
* $OVERRIDE
|
||||
*
|
||||
**************************************************************************************************/
|
||||
function showScores(Canvas c)
|
||||
{
|
||||
super.showScores(c);
|
||||
renderSnow(c);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
*
|
||||
* $DESCRIPTION Renders the scoreboard in small scale?
|
||||
* $PARAM c The canvas on which the rendering should be performed.
|
||||
* $REQUIRE c != none
|
||||
* $OVERRIDE
|
||||
*
|
||||
**************************************************************************************************/
|
||||
function showMiniScores(Canvas c)
|
||||
{
|
||||
super.showMiniScores(c);
|
||||
renderSnow(c);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
*
|
||||
* $DESCRIPTION Renders the snow particles. Also adds the XmasImages.
|
||||
* $PARAM c The canvas on which the rendering should be performed.
|
||||
* $REQUIRE c != none
|
||||
* $OVERRIDE
|
||||
*
|
||||
**************************************************************************************************/
|
||||
simulated function renderSnow(Canvas c)
|
||||
{
|
||||
local int baseX, baseY;
|
||||
local int index;
|
||||
local Texture sprite;
|
||||
local float cx, cy;
|
||||
|
||||
// Update position of each particle.
|
||||
updateSnow(c);
|
||||
|
||||
// Draw each particle.
|
||||
c.style = ERenderStyle.STY_Translucent;
|
||||
for (index = 0; index < arrayCount(particles); index++)
|
||||
{
|
||||
// Set position.
|
||||
cx = particles[index].cx;
|
||||
cy = particles[index].cy;
|
||||
cx += sin(particles[index].ct * particles[index].waveFreq * 2 * pi) * particles[index].waveAmplitude;
|
||||
c.setPos(cx, cy);
|
||||
|
||||
// Draw particle sprite.
|
||||
c.drawColor = particles[index].col;
|
||||
sprite = sprites[particles[index].spriteNum];
|
||||
c.drawTile(sprite, sprite.uSize, sprite.vSize, 0, 0, sprite.uSize, sprite.vSize);
|
||||
}
|
||||
|
||||
if (SCTFGame.bXmasImages) // whether to display the Sexy Xmas images! :D
|
||||
{
|
||||
// Draw Santa
|
||||
baseX = c.clipX - santaTextureWidth - 16;
|
||||
baseY = c.clipY - santaTextureHeight - 16;
|
||||
|
||||
c.style = ERenderStyle.STY_Normal;
|
||||
c.drawColor = BaseColor;
|
||||
|
||||
c.setPos(baseX, baseY);
|
||||
c.drawTile(Texture'santa', santaTextureWidth, santaTextureHeight, 0.0, 0.0, santaTextureWidth, santaTextureHeight);
|
||||
|
||||
// Draw presents
|
||||
baseX = 16;
|
||||
baseY = c.clipY - presentTextureHeight - 16;
|
||||
|
||||
c.style = ERenderStyle.STY_Normal;
|
||||
c.drawColor = BaseColor;
|
||||
|
||||
c.setPos(baseX, baseY);
|
||||
c.drawTile(Texture'present', presentTextureWidth, presentTextureHeight, 0.0, 0.0, presentTextureWidth, presentTextureHeight);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
*
|
||||
* $DESCRIPTION Updates the positions of the snow particles.
|
||||
* $PARAM c The canvas on which the rendering should be performed.
|
||||
* $REQUIRE c != none
|
||||
* $OVERRIDE
|
||||
*
|
||||
**************************************************************************************************/
|
||||
simulated function updateSnow(Canvas c)
|
||||
{
|
||||
local float deltaTime;
|
||||
local int index;
|
||||
|
||||
// Prepare for update.
|
||||
setupScalars(c);
|
||||
if (!bSnowInitialized)
|
||||
{
|
||||
initializeSnow(c);
|
||||
}
|
||||
deltaTime = fMin(0.5, level.timeSeconds - lastUpdateTime);
|
||||
|
||||
// Move each particle.
|
||||
for (index = 0; index < arrayCount(particles); index++)
|
||||
{
|
||||
particles[index].cx += particles[index].dx * deltaTime;
|
||||
particles[index].cy += particles[index].dy * deltaTime;
|
||||
particles[index].ct += deltaTime / level.timeDilation;
|
||||
|
||||
// Check if particle has left the screen.
|
||||
if (particles[index].cy > c.clipY)
|
||||
{
|
||||
// It has, reset particle.
|
||||
initializeParticle(index, c, true);
|
||||
}
|
||||
}
|
||||
lastUpdateTime = level.timeSeconds;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
*
|
||||
* $DESCRIPTION Initializes all snow particles.
|
||||
* $PARAM c The canvas on which the rendering should be performed.
|
||||
* $REQUIRE c != none
|
||||
* $ENSURE bSnowInitialized
|
||||
* $OVERRIDE
|
||||
*
|
||||
**************************************************************************************************/
|
||||
simulated function initializeSnow(Canvas c)
|
||||
{
|
||||
local int index;
|
||||
bSnowInitialized = true;
|
||||
|
||||
// Initialize each particle.
|
||||
for (index = 0; index < arrayCount(particles); index++)
|
||||
{
|
||||
initializeParticle(index, c);
|
||||
}
|
||||
lastUpdateTime = level.timeSeconds;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
*
|
||||
* $DESCRIPTION Initializes the specified particle.
|
||||
* $PARAM index The particle that is to be initialized.
|
||||
* $PARAM c The canvas on which the rendering should be performed.
|
||||
* $PARAM bReset Reset particle to the top of the screen.
|
||||
* $REQUIRE 0 <= index && index <= arrayCount(particles) && c != none
|
||||
* $OVERRIDE
|
||||
*
|
||||
**************************************************************************************************/
|
||||
simulated function initializeParticle(int index, Canvas c, optional bool bReset)
|
||||
{
|
||||
particles[index].spriteNum = rand(arrayCount(sprites));
|
||||
particles[index].cx = fRand() * c.clipX;
|
||||
if (bReset)
|
||||
{
|
||||
particles[index].cy = -sprites[particles[index].spriteNum].vSize;
|
||||
}
|
||||
else
|
||||
{
|
||||
particles[index].cy = fRand() * c.clipY;
|
||||
}
|
||||
particles[index].ct = 0.0;
|
||||
particles[index].dx = fRand() * (maxDX - minDX) + minDX;
|
||||
particles[index].dy = fRand() * (maxDY - minDY) + minDY;
|
||||
particles[index].waveFreq = fRand() * (maxWaveFreq - minWaveFreq) + minWaveFreq;
|
||||
particles[index].waveAmplitude = fRand() * (maxWaveAmplitude - minWaveAmplitude) + minWaveAmplitude;
|
||||
particles[index].waveFreq *= particles[index].dy / maxDY;
|
||||
particles[index].waveAmplitude *= particles[index].dy / maxDY;
|
||||
|
||||
if (level.month == 12 && level.day == 24 || level.month == 12 && level.day == 25 || level.month == 12 && level.day == 31 || level.month == 1 && level.day == 1)
|
||||
{
|
||||
particles[index].col.r = rand(256);
|
||||
particles[index].col.g = rand(256);
|
||||
particles[index].col.b = rand(256);
|
||||
}
|
||||
else
|
||||
{
|
||||
particles[index].col = baseColor * (fRand() * (maxGlow - minGlow) + minGlow);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
*
|
||||
* $DESCRIPTION Computes the absolute values of the scaled settings.
|
||||
* $PARAM c The canvas on which the rendering should be performed.
|
||||
* $REQUIRE c != none
|
||||
* $OVERRIDE
|
||||
*
|
||||
**************************************************************************************************/
|
||||
simulated function setupScalars(Canvas c)
|
||||
{
|
||||
minDX = scaleMinDX / scaleWidth * c.clipX;
|
||||
maxDX = scaleMaxDX / scaleWidth * c.clipX;
|
||||
minDY = scaleMinDY / scaleHeight * c.clipY;
|
||||
maxDY = scaleMaxDY / scaleHeight * c.clipY;
|
||||
minWaveAmplitude = scaleMinWaveAmplitude / scaleWidth * c.clipX;
|
||||
maxWaveAmplitude = scaleMaxWaveAmplitude / scaleWidth * c.clipX;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
*
|
||||
* $DESCRIPTION Default properties block.
|
||||
*
|
||||
**************************************************************************************************/
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
BaseColor=(R=255,G=255,B=255,A=0)
|
||||
bSnowInitialized=False
|
||||
sprites(0)=Texture'SmartCTF_ChaChaV2.snowFlake1'
|
||||
sprites(1)=Texture'SmartCTF_ChaChaV2.snowFlake2'
|
||||
sprites(2)=Texture'SmartCTF_ChaChaV2.snowFlake3'
|
||||
sprites(3)=Texture'SmartCTF_ChaChaV2.snowFlake4'
|
||||
sprites(4)=Texture'SmartCTF_ChaChaV2.snowFlake5'
|
||||
sprites(5)=Texture'SmartCTF_ChaChaV2.snowFlake6'
|
||||
sprites(6)=Texture'SmartCTF_ChaChaV2.snowFlake7'
|
||||
sprites(7)=Texture'SmartCTF_ChaChaV2.snowFlake8'
|
||||
sprites(8)=Texture'SmartCTF_ChaChaV2.snowFlake9'
|
||||
sprites(9)=Texture'SmartCTF_ChaChaV2.snowFlake10'
|
||||
sprites(10)=Texture'SmartCTF_ChaChaV2.snowFlake11'
|
||||
sprites(11)=Texture'SmartCTF_ChaChaV2.snowFlake12'
|
||||
sprites(12)=Texture'SmartCTF_ChaChaV2.snowFlake13'
|
||||
sprites(13)=Texture'SmartCTF_ChaChaV2.snowFlake14'
|
||||
sprites(14)=Texture'SmartCTF_ChaChaV2.snowFlake15'
|
||||
sprites(15)=Texture'SmartCTF_ChaChaV2.snowFlake16'
|
||||
particles(0)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(1)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(2)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(3)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(4)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(5)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(6)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(7)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(8)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(9)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(10)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(11)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(12)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(13)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(14)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(15)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(16)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(17)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(18)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(19)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(20)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(21)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(22)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(23)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(24)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(25)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(26)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(27)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(28)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(29)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(30)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(31)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(32)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(33)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(34)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(35)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(36)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(37)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(38)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(39)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(40)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(41)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(42)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(43)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(44)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(45)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(46)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(47)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(48)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(49)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(50)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(51)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(52)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(53)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(54)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(55)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(56)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(57)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(58)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(59)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(60)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(61)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(62)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(63)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(64)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(65)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(66)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(67)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(68)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(69)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(70)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(71)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(72)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(73)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(74)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(75)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(76)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(77)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(78)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(79)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(80)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(81)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(82)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(83)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(84)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(85)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(86)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(87)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(88)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(89)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(90)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(91)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(92)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(93)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(94)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(95)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(96)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(97)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(98)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(99)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
LastUpdateTime=0.000000
|
||||
minDX=0.000000
|
||||
maxDX=0.000000
|
||||
minDY=0.000000
|
||||
maxDY=0.000000
|
||||
minWaveAmplitude=0.000000
|
||||
maxWaveAmplitude=0.000000
|
||||
}
|
||||
// SnowyScoreboard original from CTT. Thanks to Defrost!
|
||||
// Brought to SmartCTF by Sp0ngeb0b
|
||||
// spongebobut@yahoo.com
|
||||
class SmartCTFSnowyScoreboard extends SmartCTFScoreBoard;
|
||||
|
||||
#exec texture import name=snowFlake1 file="Textures\SnowFlake1.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake2 file="Textures\SnowFlake2.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake3 file="Textures\SnowFlake3.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake4 file="Textures\SnowFlake4.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake5 file="Textures\SnowFlake5.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake6 file="Textures\SnowFlake6.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake7 file="Textures\SnowFlake7.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake8 file="Textures\SnowFlake8.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake9 file="Textures\SnowFlake9.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake10 file="Textures\SnowFlake10.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake11 file="Textures\SnowFlake11.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake12 file="Textures\SnowFlake12.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake13 file="Textures\SnowFlake13.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake14 file="Textures\SnowFlake14.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake15 file="Textures\SnowFlake15.pcx" mips=off flags=2
|
||||
#exec texture import name=snowFlake16 file="Textures\SnowFlake16.pcx" mips=off flags=2
|
||||
//#exec texture import name=lights file="Textures\Lights2.pcx" mips=off flags=2
|
||||
#exec texture import name=santa file="Textures\santa.pcx" mips=off flags=2
|
||||
#exec texture import name=present file="Textures\presents.pcx" mips=off flags=2
|
||||
|
||||
struct ParticleInfo { // Snow particle description struct.
|
||||
var int spriteNum; // The snow flake sprite to use.
|
||||
var float cx; // Horizontal offset.
|
||||
var float cy; // Vertical offset.
|
||||
var float ct; // Time offset.
|
||||
var float waveFreq; // Particle wave frequency.
|
||||
var float waveAmplitude; // Amplitude of the wave.
|
||||
var float dy; // Vertical base velocity.
|
||||
var float dx; // Horizontal base velocity.
|
||||
var color col; // Color of the particle.
|
||||
};
|
||||
|
||||
var color baseColor; // Base color of the snow flakes.
|
||||
var bool bSnowInitialized; // Whether the particles have been initialized.
|
||||
var Texture sprites[16]; // Snow flake sprites.
|
||||
var ParticleInfo particles[100]; // Current particles displayed.
|
||||
var float lastUpdateTime; // Last time the particles were rendered.
|
||||
|
||||
var float minDX; // Minimum horizontal base velocity.
|
||||
var float maxDX; // Maximum horizontal base velocity.
|
||||
var float minDY; // Minimum vertical base velocity.
|
||||
var float maxDY; // Maximum vertical base velocity.
|
||||
var float minWaveAmplitude; // Minimum wave amplitude.
|
||||
var float maxWaveAmplitude; // Maximum wave amplitude.
|
||||
|
||||
// Non scaled constants.
|
||||
const minWaveFreq = 0.25; // Minimum wave frequency.
|
||||
const maxWaveFreq = 1.0; // Maximum wave frequency.
|
||||
const minGlow = 0.40; // Minimum snow flake sprite glow.
|
||||
const maxGlow = 1.00; // Maximum snow flake sprite glow.
|
||||
|
||||
// Scaled constants (set for a resolution of 1280x1024 px).
|
||||
const scaleMinDX = -20.0;
|
||||
const scaleMaxDX = 20.0;
|
||||
const scaleMinDY = 100.0;
|
||||
const scaleMaxDY = 300.0;
|
||||
const scaleMinWaveAmplitude = 8;
|
||||
const scaleMaxWaveAmplitude = 22;
|
||||
const scaleWidth = 1280;
|
||||
const scaleHeight = 1024;
|
||||
|
||||
// Texture constants
|
||||
const santaTextureWidth = 128; // Width of the santa texture.
|
||||
const santaTextureHeight = 128; // Height of the santa texture.
|
||||
|
||||
const presentTextureWidth = 128; // Width of the present texture.
|
||||
const presentTextureHeight = 128; // Height of the present texture.
|
||||
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
*
|
||||
* $DESCRIPTION Renders the scoreboard.
|
||||
* $PARAM c The canvas on which the rendering should be performed.
|
||||
* $REQUIRE c != none
|
||||
* $OVERRIDE
|
||||
*
|
||||
**************************************************************************************************/
|
||||
function showScores(Canvas c)
|
||||
{
|
||||
super.showScores(c);
|
||||
renderSnow(c);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
*
|
||||
* $DESCRIPTION Renders the scoreboard in small scale?
|
||||
* $PARAM c The canvas on which the rendering should be performed.
|
||||
* $REQUIRE c != none
|
||||
* $OVERRIDE
|
||||
*
|
||||
**************************************************************************************************/
|
||||
function showMiniScores(Canvas c)
|
||||
{
|
||||
super.showMiniScores(c);
|
||||
renderSnow(c);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
*
|
||||
* $DESCRIPTION Renders the snow particles. Also adds the XmasImages.
|
||||
* $PARAM c The canvas on which the rendering should be performed.
|
||||
* $REQUIRE c != none
|
||||
* $OVERRIDE
|
||||
*
|
||||
**************************************************************************************************/
|
||||
simulated function renderSnow(Canvas c)
|
||||
{
|
||||
local int baseX, baseY;
|
||||
local int index;
|
||||
local Texture sprite;
|
||||
local float cx, cy;
|
||||
|
||||
// Update position of each particle.
|
||||
updateSnow(c);
|
||||
|
||||
// Draw each particle.
|
||||
c.style = ERenderStyle.STY_Translucent;
|
||||
for (index = 0; index < arrayCount(particles); index++)
|
||||
{
|
||||
// Set position.
|
||||
cx = particles[index].cx;
|
||||
cy = particles[index].cy;
|
||||
cx += sin(particles[index].ct * particles[index].waveFreq * 2 * pi) * particles[index].waveAmplitude;
|
||||
c.setPos(cx, cy);
|
||||
|
||||
// Draw particle sprite.
|
||||
c.drawColor = particles[index].col;
|
||||
sprite = sprites[particles[index].spriteNum];
|
||||
c.drawTile(sprite, sprite.uSize, sprite.vSize, 0, 0, sprite.uSize, sprite.vSize);
|
||||
}
|
||||
|
||||
if (SCTFGame.bXmasImages) // whether to display the Sexy Xmas images! :D
|
||||
{
|
||||
// Draw Santa
|
||||
baseX = c.clipX - santaTextureWidth - 16;
|
||||
baseY = c.clipY - santaTextureHeight - 16;
|
||||
|
||||
c.style = ERenderStyle.STY_Normal;
|
||||
c.drawColor = BaseColor;
|
||||
|
||||
c.setPos(baseX, baseY);
|
||||
c.drawTile(Texture'santa', santaTextureWidth, santaTextureHeight, 0.0, 0.0, santaTextureWidth, santaTextureHeight);
|
||||
|
||||
// Draw presents
|
||||
baseX = 16;
|
||||
baseY = c.clipY - presentTextureHeight - 16;
|
||||
|
||||
c.style = ERenderStyle.STY_Normal;
|
||||
c.drawColor = BaseColor;
|
||||
|
||||
c.setPos(baseX, baseY);
|
||||
c.drawTile(Texture'present', presentTextureWidth, presentTextureHeight, 0.0, 0.0, presentTextureWidth, presentTextureHeight);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
*
|
||||
* $DESCRIPTION Updates the positions of the snow particles.
|
||||
* $PARAM c The canvas on which the rendering should be performed.
|
||||
* $REQUIRE c != none
|
||||
* $OVERRIDE
|
||||
*
|
||||
**************************************************************************************************/
|
||||
simulated function updateSnow(Canvas c)
|
||||
{
|
||||
local float deltaTime;
|
||||
local int index;
|
||||
|
||||
// Prepare for update.
|
||||
setupScalars(c);
|
||||
if (!bSnowInitialized)
|
||||
{
|
||||
initializeSnow(c);
|
||||
}
|
||||
deltaTime = fMin(0.5, level.timeSeconds - lastUpdateTime);
|
||||
|
||||
// Move each particle.
|
||||
for (index = 0; index < arrayCount(particles); index++)
|
||||
{
|
||||
particles[index].cx += particles[index].dx * deltaTime;
|
||||
particles[index].cy += particles[index].dy * deltaTime;
|
||||
particles[index].ct += deltaTime / level.timeDilation;
|
||||
|
||||
// Check if particle has left the screen.
|
||||
if (particles[index].cy > c.clipY)
|
||||
{
|
||||
// It has, reset particle.
|
||||
initializeParticle(index, c, true);
|
||||
}
|
||||
}
|
||||
lastUpdateTime = level.timeSeconds;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
*
|
||||
* $DESCRIPTION Initializes all snow particles.
|
||||
* $PARAM c The canvas on which the rendering should be performed.
|
||||
* $REQUIRE c != none
|
||||
* $ENSURE bSnowInitialized
|
||||
* $OVERRIDE
|
||||
*
|
||||
**************************************************************************************************/
|
||||
simulated function initializeSnow(Canvas c)
|
||||
{
|
||||
local int index;
|
||||
bSnowInitialized = true;
|
||||
|
||||
// Initialize each particle.
|
||||
for (index = 0; index < arrayCount(particles); index++)
|
||||
{
|
||||
initializeParticle(index, c);
|
||||
}
|
||||
lastUpdateTime = level.timeSeconds;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
*
|
||||
* $DESCRIPTION Initializes the specified particle.
|
||||
* $PARAM index The particle that is to be initialized.
|
||||
* $PARAM c The canvas on which the rendering should be performed.
|
||||
* $PARAM bReset Reset particle to the top of the screen.
|
||||
* $REQUIRE 0 <= index && index <= arrayCount(particles) && c != none
|
||||
* $OVERRIDE
|
||||
*
|
||||
**************************************************************************************************/
|
||||
simulated function initializeParticle(int index, Canvas c, optional bool bReset)
|
||||
{
|
||||
particles[index].spriteNum = rand(arrayCount(sprites));
|
||||
particles[index].cx = fRand() * c.clipX;
|
||||
if (bReset)
|
||||
{
|
||||
particles[index].cy = -sprites[particles[index].spriteNum].vSize;
|
||||
}
|
||||
else
|
||||
{
|
||||
particles[index].cy = fRand() * c.clipY;
|
||||
}
|
||||
particles[index].ct = 0.0;
|
||||
particles[index].dx = fRand() * (maxDX - minDX) + minDX;
|
||||
particles[index].dy = fRand() * (maxDY - minDY) + minDY;
|
||||
particles[index].waveFreq = fRand() * (maxWaveFreq - minWaveFreq) + minWaveFreq;
|
||||
particles[index].waveAmplitude = fRand() * (maxWaveAmplitude - minWaveAmplitude) + minWaveAmplitude;
|
||||
particles[index].waveFreq *= particles[index].dy / maxDY;
|
||||
particles[index].waveAmplitude *= particles[index].dy / maxDY;
|
||||
|
||||
if (level.month == 12 && level.day == 24 || level.month == 12 && level.day == 25 || level.month == 12 && level.day == 31 || level.month == 1 && level.day == 1)
|
||||
{
|
||||
particles[index].col.r = rand(256);
|
||||
particles[index].col.g = rand(256);
|
||||
particles[index].col.b = rand(256);
|
||||
}
|
||||
else
|
||||
{
|
||||
particles[index].col = baseColor * (fRand() * (maxGlow - minGlow) + minGlow);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
*
|
||||
* $DESCRIPTION Computes the absolute values of the scaled settings.
|
||||
* $PARAM c The canvas on which the rendering should be performed.
|
||||
* $REQUIRE c != none
|
||||
* $OVERRIDE
|
||||
*
|
||||
**************************************************************************************************/
|
||||
simulated function setupScalars(Canvas c)
|
||||
{
|
||||
minDX = scaleMinDX / scaleWidth * c.clipX;
|
||||
maxDX = scaleMaxDX / scaleWidth * c.clipX;
|
||||
minDY = scaleMinDY / scaleHeight * c.clipY;
|
||||
maxDY = scaleMaxDY / scaleHeight * c.clipY;
|
||||
minWaveAmplitude = scaleMinWaveAmplitude / scaleWidth * c.clipX;
|
||||
maxWaveAmplitude = scaleMaxWaveAmplitude / scaleWidth * c.clipX;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/***************************************************************************************************
|
||||
*
|
||||
* $DESCRIPTION Default properties block.
|
||||
*
|
||||
**************************************************************************************************/
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
BaseColor=(R=255,G=255,B=255,A=0)
|
||||
bSnowInitialized=False
|
||||
sprites(0)=Texture'SmartCTF_ChaChaV2.snowFlake1'
|
||||
sprites(1)=Texture'SmartCTF_ChaChaV2.snowFlake2'
|
||||
sprites(2)=Texture'SmartCTF_ChaChaV2.snowFlake3'
|
||||
sprites(3)=Texture'SmartCTF_ChaChaV2.snowFlake4'
|
||||
sprites(4)=Texture'SmartCTF_ChaChaV2.snowFlake5'
|
||||
sprites(5)=Texture'SmartCTF_ChaChaV2.snowFlake6'
|
||||
sprites(6)=Texture'SmartCTF_ChaChaV2.snowFlake7'
|
||||
sprites(7)=Texture'SmartCTF_ChaChaV2.snowFlake8'
|
||||
sprites(8)=Texture'SmartCTF_ChaChaV2.snowFlake9'
|
||||
sprites(9)=Texture'SmartCTF_ChaChaV2.snowFlake10'
|
||||
sprites(10)=Texture'SmartCTF_ChaChaV2.snowFlake11'
|
||||
sprites(11)=Texture'SmartCTF_ChaChaV2.snowFlake12'
|
||||
sprites(12)=Texture'SmartCTF_ChaChaV2.snowFlake13'
|
||||
sprites(13)=Texture'SmartCTF_ChaChaV2.snowFlake14'
|
||||
sprites(14)=Texture'SmartCTF_ChaChaV2.snowFlake15'
|
||||
sprites(15)=Texture'SmartCTF_ChaChaV2.snowFlake16'
|
||||
particles(0)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(1)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(2)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(3)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(4)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(5)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(6)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(7)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(8)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(9)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(10)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(11)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(12)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(13)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(14)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(15)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(16)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(17)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(18)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(19)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(20)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(21)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(22)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(23)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(24)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(25)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(26)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(27)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(28)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(29)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(30)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(31)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(32)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(33)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(34)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(35)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(36)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(37)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(38)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(39)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(40)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(41)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(42)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(43)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(44)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(45)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(46)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(47)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(48)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(49)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(50)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(51)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(52)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(53)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(54)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(55)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(56)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(57)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(58)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(59)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(60)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(61)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(62)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(63)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(64)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(65)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(66)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(67)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(68)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(69)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(70)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(71)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(72)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(73)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(74)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(75)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(76)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(77)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(78)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(79)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(80)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(81)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(82)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(83)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(84)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(85)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(86)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(87)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(88)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(89)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(90)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(91)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(92)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(93)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(94)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(95)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(96)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(97)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(98)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
particles(99)=(spriteNum=0,cx=0.000000,cy=0.000000,ct=0.000000,waveFreq=0.000000,waveAmplitude=0.000000,dy=0.000000,dx=0.000000,col=(R=0,G=0,B=0,A=0))
|
||||
LastUpdateTime=0.000000
|
||||
minDX=0.000000
|
||||
maxDX=0.000000
|
||||
minDY=0.000000
|
||||
maxDY=0.000000
|
||||
minWaveAmplitude=0.000000
|
||||
maxWaveAmplitude=0.000000
|
||||
}
|
||||
@@ -1,39 +1,39 @@
|
||||
class SmartCTFSpawnNotifyPRI expands SpawnNotify;
|
||||
|
||||
var Actor IpToCountry;
|
||||
var bool bChecked;
|
||||
|
||||
simulated event Actor SpawnNotification( Actor A )
|
||||
{
|
||||
local Actor Search;
|
||||
local SmartCTFPlayerReplicationInfo RI;
|
||||
|
||||
if( A.Owner == None ) return A;
|
||||
if( !A.Owner.IsA( 'PlayerPawn' ) && !A.Owner.IsA( 'Bot' ) ) return A;
|
||||
if( !Pawn( A.Owner ).bIsPlayer ) return A;
|
||||
|
||||
if(!bChecked)
|
||||
{
|
||||
foreach Level.Game.AllActors(class'Actor', Search, 'IpToCountry')
|
||||
{
|
||||
IpToCountry=Search;
|
||||
break;
|
||||
}
|
||||
bChecked=True;
|
||||
}
|
||||
// Spawn SmartCTF PRI for this pawn on the server
|
||||
RI=Spawn( class'SmartCTFPlayerReplicationInfo', A );
|
||||
if(IpToCountry != None)
|
||||
{
|
||||
RI.IpToCountry=IpToCountry;
|
||||
RI.bIpToCountry=True;
|
||||
}
|
||||
return A;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ipToCountry=None
|
||||
bChecked=False
|
||||
ActorClass=Class'Engine.PlayerReplicationInfo'
|
||||
}
|
||||
class SmartCTFSpawnNotifyPRI expands SpawnNotify;
|
||||
|
||||
var Actor IpToCountry;
|
||||
var bool bChecked;
|
||||
|
||||
simulated event Actor SpawnNotification( Actor A )
|
||||
{
|
||||
local Actor Search;
|
||||
local SmartCTFPlayerReplicationInfo RI;
|
||||
|
||||
if( A.Owner == None ) return A;
|
||||
if( !A.Owner.IsA( 'PlayerPawn' ) && !A.Owner.IsA( 'Bot' ) ) return A;
|
||||
if( !Pawn( A.Owner ).bIsPlayer ) return A;
|
||||
|
||||
if(!bChecked)
|
||||
{
|
||||
foreach Level.Game.AllActors(class'Actor', Search, 'IpToCountry')
|
||||
{
|
||||
IpToCountry=Search;
|
||||
break;
|
||||
}
|
||||
bChecked=True;
|
||||
}
|
||||
// Spawn SmartCTF PRI for this pawn on the server
|
||||
RI=Spawn( class'SmartCTFPlayerReplicationInfo', A );
|
||||
if(IpToCountry != None)
|
||||
{
|
||||
RI.IpToCountry=IpToCountry;
|
||||
RI.bIpToCountry=True;
|
||||
}
|
||||
return A;
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
ipToCountry=None
|
||||
bChecked=False
|
||||
ActorClass=Class'Engine.PlayerReplicationInfo'
|
||||
}
|
||||
@@ -1,18 +1,18 @@
|
||||
class SmartCTFSpreeMsg expands KillingSpreeMessage;
|
||||
|
||||
static function string GetString( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject )
|
||||
{
|
||||
if( RelatedPRI_1 != None )
|
||||
{
|
||||
if( Switch == 5 ) return default.SpreeNote[Switch] @ RelatedPRI_1.PlayerName $ "!";
|
||||
if( Switch == 6 ) return RelatedPRI_1.PlayerName @ class'TournamentPlayer'.default.SpreeNote[3];
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
spreenote(5)="This is just TOO EASY for"
|
||||
SpreeSound(5)=Sound'Botpack.ChatSound.SpreeSound'
|
||||
SpreeSound(6)=Sound'Botpack.ChatSound.SpreeSound'
|
||||
}
|
||||
class SmartCTFSpreeMsg expands KillingSpreeMessage;
|
||||
|
||||
static function string GetString( optional int Switch, optional PlayerReplicationInfo RelatedPRI_1, optional PlayerReplicationInfo RelatedPRI_2, optional Object OptionalObject )
|
||||
{
|
||||
if( RelatedPRI_1 != None )
|
||||
{
|
||||
if( Switch == 5 ) return default.SpreeNote[Switch] @ RelatedPRI_1.PlayerName $ "!";
|
||||
if( Switch == 6 ) return RelatedPRI_1.PlayerName @ class'TournamentPlayer'.default.SpreeNote[3];
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
spreenote(5)="This is just TOO EASY for"
|
||||
SpreeSound(5)=Sound'Botpack.ChatSound.SpreeSound'
|
||||
SpreeSound(6)=Sound'Botpack.ChatSound.SpreeSound'
|
||||
}
|
||||
@@ -1,184 +1,184 @@
|
||||
class SmartCTFWelcomeNewPlayers expands Actor config(SmartCTF_ChaCha);
|
||||
|
||||
|
||||
var config int PawnLastSeenMaxHistory;
|
||||
var config array<string> PawnIdentHistory;
|
||||
var config byte WelcomeMsgType;
|
||||
var config byte WelcomeBackMsgType;
|
||||
var config bool bPlayWelcomeSound;
|
||||
var config bool bPlayWelcomeOthersSound;
|
||||
var config float fDelayWelcome;
|
||||
var config float fDelayWelcomeBack;
|
||||
|
||||
var Pawn OtherNewpawn;
|
||||
|
||||
|
||||
function BumpPawnToTop(int IdxPawn)
|
||||
{
|
||||
PawnIdentHistory.Insert(PawnIdentHistory.Length,1);
|
||||
PawnIdentHistory[PawnIdentHistory.Length-1]=PawnIdentHistory[IdxPawn];
|
||||
PawnIdentHistory.Remove(IdxPawn);
|
||||
}
|
||||
|
||||
state Welcome
|
||||
{
|
||||
function Timer()
|
||||
{
|
||||
local Pawn pn;
|
||||
local PlayerReplicationInfo OtherNewpawnPRI;
|
||||
|
||||
OtherNewpawnPRI = OtherNewpawn.PlayerReplicationInfo;
|
||||
if( OtherNewpawnPRI == None || !OtherNewpawn.bIsPlayer || ( OtherNewpawnPRI.bIsSpectator && !OtherNewpawnPRI.bWaitingPlayer ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if(bPlayWelcomeSound)
|
||||
{
|
||||
//log("a");
|
||||
//log(OtherNewpawn);
|
||||
OtherNewpawn.ReceiveLocalizedMessage( class'SmartCTFAudioMsg', 7 );
|
||||
}
|
||||
if(WelcomeMsgType==1)
|
||||
{
|
||||
//log("b");
|
||||
//log(OtherNewpawn);
|
||||
OtherNewpawn.ClientMessage( class'SmartCTFCoolMsg'.static.GetString(8));
|
||||
}
|
||||
else if(WelcomeMsgType==2)
|
||||
{
|
||||
//log("c");
|
||||
Level.Game.BroadcastMessage( class'SmartCTFCoolMsg'.static.GetString(8 +64,OtherNewpawnPRI));
|
||||
}
|
||||
else if(WelcomeMsgType==3)
|
||||
{
|
||||
//log("d");
|
||||
//log(class'SmartCTFCoolMsg'.static.GetString(8+64,OtherNewpawnPRI));
|
||||
Level.Game.BroadcastLocalizedMessage( class'SmartCTFCoolMsg',8 + 64,OtherNewpawnPRI);
|
||||
}
|
||||
|
||||
if(bPlayWelcomeOthersSound)
|
||||
{
|
||||
//log("e");
|
||||
for( pn = Level.PawnList; pn != None; pn = pn.NextPawn )
|
||||
{
|
||||
if( PlayerPawn( pn ) != None && pn.bIsPlayer && pn != OtherNewpawn)
|
||||
{
|
||||
//log("f");
|
||||
//log(pn);
|
||||
pn.ReceiveLocalizedMessage( class'SmartCTFAudioMsg', 7 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
state WelcomeBack
|
||||
{
|
||||
function Timer()
|
||||
{
|
||||
local PlayerReplicationInfo OtherNewpawnPRI;
|
||||
|
||||
OtherNewpawnPRI = OtherNewpawn.PlayerReplicationInfo;
|
||||
if( OtherNewpawnPRI == None || !OtherNewpawn.bIsPlayer || ( OtherNewpawnPRI.bIsSpectator && !OtherNewpawnPRI.bWaitingPlayer ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if(WelcomeBackMsgType==1)
|
||||
{
|
||||
//log("b");
|
||||
//log(OtherNewpawn);
|
||||
OtherNewpawn.ClientMessage( class'SmartCTFCoolMsg'.static.GetString(9));
|
||||
}
|
||||
else if(WelcomeBackMsgType==2)
|
||||
{
|
||||
//log("c");
|
||||
Level.Game.BroadcastMessage( class'SmartCTFCoolMsg'.static.GetString(9 +64,OtherNewpawnPRI));
|
||||
}
|
||||
else if(WelcomeBackMsgType==3)
|
||||
{
|
||||
//log("d");
|
||||
//log(class'SmartCTFCoolMsg'.static.GetString(9+64,OtherNewpawnPRI));
|
||||
Level.Game.BroadcastLocalizedMessage( class'SmartCTFCoolMsg',9 + 64,OtherNewpawnPRI);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function CheckPawn(Pawn Other,bool bIsFirstSpawn)
|
||||
{
|
||||
local int i,iColon;
|
||||
local string PawnIPPort,PawnIP,PawnName,PawnIdent;
|
||||
|
||||
if( PlayerPawn( Other ) == None)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
PawnIPPort = PlayerPawn(Other).GetPlayerNetworkAddress();
|
||||
iColon = InStr( PawnIPPort, ":" );
|
||||
PawnIP = Left( PawnIPPort, iColon );
|
||||
if( PawnIP == "")
|
||||
{
|
||||
log("[WARNING] Ignored player with empty / incorrect IP address");
|
||||
return;
|
||||
}
|
||||
PawnName = Other.PlayerReplicationInfo.PlayerName;
|
||||
|
||||
PawnIdent=PawnIP$":"$PawnName;
|
||||
|
||||
//log(Other);
|
||||
//log(PawnIPPort);
|
||||
//log(PawnIP);
|
||||
//log(PawnName);
|
||||
//log(PawnIdent);
|
||||
|
||||
if( PawnIdentHistory.Length > PawnLastSeenMaxHistory)
|
||||
{
|
||||
PawnIdentHistory.Remove(0,PawnIdentHistory.Length - PawnLastSeenMaxHistory);
|
||||
log("[WARNING] PawnIdentHistory too big, removing old history...");
|
||||
}
|
||||
|
||||
for ( i = 0; ( i < PawnIdentHistory.Length ); i++ )
|
||||
{
|
||||
if( PawnIdentHistory[i] == PawnIdent)
|
||||
{
|
||||
//log("Pawn FOUND in history :-) !");
|
||||
BumpPawnToTop(i);
|
||||
OtherNewpawn=Other;
|
||||
if(bIsFirstSpawn)
|
||||
{
|
||||
GotoState('WelcomeBack');
|
||||
SetTimer(fDelayWelcomeBack,False);
|
||||
}
|
||||
SaveConfig();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//log("Pawn NOT found in history :( !");
|
||||
PawnIdentHistory.Insert(PawnIdentHistory.Length,1);
|
||||
PawnIdentHistory[PawnIdentHistory.Length-1]=PawnIdent;
|
||||
|
||||
if( PawnIdentHistory.Length > PawnLastSeenMaxHistory)
|
||||
{
|
||||
//log("Need to trim history");
|
||||
PawnIdentHistory.Remove(0,1);
|
||||
}
|
||||
OtherNewpawn=Other;
|
||||
GotoState('Welcome');
|
||||
SetTimer(fDelayWelcome,False);
|
||||
|
||||
//log("Finish");
|
||||
SaveConfig();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
PawnLastSeenMaxHistory=256
|
||||
WelcomeMsgType=3
|
||||
WelcomeBackMsgType=3
|
||||
bPlayWelcomeSound=True
|
||||
bPlayWelcomeOthersSound=True
|
||||
fDelayWelcome=1.0
|
||||
fDelayWelcomeBack=1.0
|
||||
bHidden=True
|
||||
class SmartCTFWelcomeNewPlayers expands Actor config(SmartCTF_ChaCha);
|
||||
|
||||
|
||||
var config int PawnLastSeenMaxHistory;
|
||||
var config array<string> PawnIdentHistory;
|
||||
var config byte WelcomeMsgType;
|
||||
var config byte WelcomeBackMsgType;
|
||||
var config bool bPlayWelcomeSound;
|
||||
var config bool bPlayWelcomeOthersSound;
|
||||
var config float fDelayWelcome;
|
||||
var config float fDelayWelcomeBack;
|
||||
|
||||
var Pawn OtherNewpawn;
|
||||
|
||||
|
||||
function BumpPawnToTop(int IdxPawn)
|
||||
{
|
||||
PawnIdentHistory.Insert(PawnIdentHistory.Length,1);
|
||||
PawnIdentHistory[PawnIdentHistory.Length-1]=PawnIdentHistory[IdxPawn];
|
||||
PawnIdentHistory.Remove(IdxPawn);
|
||||
}
|
||||
|
||||
state Welcome
|
||||
{
|
||||
function Timer()
|
||||
{
|
||||
local Pawn pn;
|
||||
local PlayerReplicationInfo OtherNewpawnPRI;
|
||||
|
||||
OtherNewpawnPRI = OtherNewpawn.PlayerReplicationInfo;
|
||||
if( OtherNewpawnPRI == None || !OtherNewpawn.bIsPlayer || ( OtherNewpawnPRI.bIsSpectator && !OtherNewpawnPRI.bWaitingPlayer ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if(bPlayWelcomeSound)
|
||||
{
|
||||
//log("a");
|
||||
//log(OtherNewpawn);
|
||||
OtherNewpawn.ReceiveLocalizedMessage( class'SmartCTFAudioMsg', 7 );
|
||||
}
|
||||
if(WelcomeMsgType==1)
|
||||
{
|
||||
//log("b");
|
||||
//log(OtherNewpawn);
|
||||
OtherNewpawn.ClientMessage( class'SmartCTFCoolMsg'.static.GetString(8));
|
||||
}
|
||||
else if(WelcomeMsgType==2)
|
||||
{
|
||||
//log("c");
|
||||
Level.Game.BroadcastMessage( class'SmartCTFCoolMsg'.static.GetString(8 +64,OtherNewpawnPRI));
|
||||
}
|
||||
else if(WelcomeMsgType==3)
|
||||
{
|
||||
//log("d");
|
||||
//log(class'SmartCTFCoolMsg'.static.GetString(8+64,OtherNewpawnPRI));
|
||||
Level.Game.BroadcastLocalizedMessage( class'SmartCTFCoolMsg',8 + 64,OtherNewpawnPRI);
|
||||
}
|
||||
|
||||
if(bPlayWelcomeOthersSound)
|
||||
{
|
||||
//log("e");
|
||||
for( pn = Level.PawnList; pn != None; pn = pn.NextPawn )
|
||||
{
|
||||
if( PlayerPawn( pn ) != None && pn.bIsPlayer && pn != OtherNewpawn)
|
||||
{
|
||||
//log("f");
|
||||
//log(pn);
|
||||
pn.ReceiveLocalizedMessage( class'SmartCTFAudioMsg', 7 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
state WelcomeBack
|
||||
{
|
||||
function Timer()
|
||||
{
|
||||
local PlayerReplicationInfo OtherNewpawnPRI;
|
||||
|
||||
OtherNewpawnPRI = OtherNewpawn.PlayerReplicationInfo;
|
||||
if( OtherNewpawnPRI == None || !OtherNewpawn.bIsPlayer || ( OtherNewpawnPRI.bIsSpectator && !OtherNewpawnPRI.bWaitingPlayer ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if(WelcomeBackMsgType==1)
|
||||
{
|
||||
//log("b");
|
||||
//log(OtherNewpawn);
|
||||
OtherNewpawn.ClientMessage( class'SmartCTFCoolMsg'.static.GetString(9));
|
||||
}
|
||||
else if(WelcomeBackMsgType==2)
|
||||
{
|
||||
//log("c");
|
||||
Level.Game.BroadcastMessage( class'SmartCTFCoolMsg'.static.GetString(9 +64,OtherNewpawnPRI));
|
||||
}
|
||||
else if(WelcomeBackMsgType==3)
|
||||
{
|
||||
//log("d");
|
||||
//log(class'SmartCTFCoolMsg'.static.GetString(9+64,OtherNewpawnPRI));
|
||||
Level.Game.BroadcastLocalizedMessage( class'SmartCTFCoolMsg',9 + 64,OtherNewpawnPRI);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function CheckPawn(Pawn Other,bool bIsFirstSpawn)
|
||||
{
|
||||
local int i,iColon;
|
||||
local string PawnIPPort,PawnIP,PawnName,PawnIdent;
|
||||
|
||||
if( PlayerPawn( Other ) == None)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
PawnIPPort = PlayerPawn(Other).GetPlayerNetworkAddress();
|
||||
iColon = InStr( PawnIPPort, ":" );
|
||||
PawnIP = Left( PawnIPPort, iColon );
|
||||
if( PawnIP == "")
|
||||
{
|
||||
log("[WARNING] Ignored player with empty / incorrect IP address");
|
||||
return;
|
||||
}
|
||||
PawnName = Other.PlayerReplicationInfo.PlayerName;
|
||||
|
||||
PawnIdent=PawnIP$":"$PawnName;
|
||||
|
||||
//log(Other);
|
||||
//log(PawnIPPort);
|
||||
//log(PawnIP);
|
||||
//log(PawnName);
|
||||
//log(PawnIdent);
|
||||
|
||||
if( PawnIdentHistory.Length > PawnLastSeenMaxHistory)
|
||||
{
|
||||
PawnIdentHistory.Remove(0,PawnIdentHistory.Length - PawnLastSeenMaxHistory);
|
||||
log("[WARNING] PawnIdentHistory too big, removing old history...");
|
||||
}
|
||||
|
||||
for ( i = 0; ( i < PawnIdentHistory.Length ); i++ )
|
||||
{
|
||||
if( PawnIdentHistory[i] == PawnIdent)
|
||||
{
|
||||
//log("Pawn FOUND in history :-) !");
|
||||
BumpPawnToTop(i);
|
||||
OtherNewpawn=Other;
|
||||
if(bIsFirstSpawn)
|
||||
{
|
||||
GotoState('WelcomeBack');
|
||||
SetTimer(fDelayWelcomeBack,False);
|
||||
}
|
||||
SaveConfig();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//log("Pawn NOT found in history :( !");
|
||||
PawnIdentHistory.Insert(PawnIdentHistory.Length,1);
|
||||
PawnIdentHistory[PawnIdentHistory.Length-1]=PawnIdent;
|
||||
|
||||
if( PawnIdentHistory.Length > PawnLastSeenMaxHistory)
|
||||
{
|
||||
//log("Need to trim history");
|
||||
PawnIdentHistory.Remove(0,1);
|
||||
}
|
||||
OtherNewpawn=Other;
|
||||
GotoState('Welcome');
|
||||
SetTimer(fDelayWelcome,False);
|
||||
|
||||
//log("Finish");
|
||||
SaveConfig();
|
||||
}
|
||||
|
||||
defaultproperties
|
||||
{
|
||||
PawnLastSeenMaxHistory=256
|
||||
WelcomeMsgType=3
|
||||
WelcomeBackMsgType=3
|
||||
bPlayWelcomeSound=True
|
||||
bPlayWelcomeOthersSound=True
|
||||
fDelayWelcome=1.0
|
||||
fDelayWelcomeBack=1.0
|
||||
bHidden=True
|
||||
}
|
||||
@@ -1,2 +0,0 @@
|
||||
del %~dp0\..\System\SmartCTF_ChaChaV6.u
|
||||
%~dp0\..\System\ucc.exe make SmartCTF_ChaChaV6
|
||||
BIN
System/SmartCTF_ChaChaV6.u
Normal file
BIN
System/SmartCTF_ChaChaV6.u
Normal file
Binary file not shown.
6
make.bat
Normal file
6
make.bat
Normal file
@@ -0,0 +1,6 @@
|
||||
set UArtifactName=SmartCTF_ChaChaV6
|
||||
del %~dp0\..\System\%UArtifactName%.u
|
||||
del %~dp0\System\%UArtifactName%.u
|
||||
%~dp0\..\System\ucc.exe make ini=%~dp0\make.ini
|
||||
%~dp0\..\System\ucc.exe stripsource %UArtifactName%
|
||||
xcopy %~dp0\..\System\%UArtifactName%.u %~dp0\System\
|
||||
31
make.ini
Normal file
31
make.ini
Normal file
@@ -0,0 +1,31 @@
|
||||
[Core.System]
|
||||
Paths=../System/*.u
|
||||
Paths=../Maps/*.unr
|
||||
Paths=../Textures/*.utx
|
||||
Paths=../Sounds/*.uax
|
||||
Paths=../Music/*.umx
|
||||
|
||||
[Engine.Engine]
|
||||
EditorEngine=Editor.EditorEngine
|
||||
Language=int
|
||||
|
||||
[Editor.EditorEngine]
|
||||
CacheSizeMegs=32
|
||||
EditPackages=Core
|
||||
EditPackages=Engine
|
||||
EditPackages=Editor
|
||||
EditPackages=UWindow
|
||||
EditPackages=Fire
|
||||
EditPackages=IpDrv
|
||||
EditPackages=UWeb
|
||||
EditPackages=UBrowser
|
||||
EditPackages=UnrealShare
|
||||
EditPackages=UnrealI
|
||||
EditPackages=UMenu
|
||||
EditPackages=IpServer
|
||||
EditPackages=Botpack
|
||||
EditPackages=UTServerAdmin
|
||||
EditPackages=UTMenu
|
||||
EditPackages=UTBrowser
|
||||
EditPackages=SmartCTF_ChaChaV6
|
||||
|
||||
Reference in New Issue
Block a user