I got it to work with the file function, no problem at all:
Hud:
Code:
init()
{
game["ratio"] = &"DEMON_TEST";
precacheString( game["ratio"] );
level thread onPlayerConnect();
}
onPlayerConnect()
{
for( ;; )
{
level waittill( "connected", player );
player thread onPlayerSpawned();
player thread onPlayerKilled();
}
}
onPlayerSpawned()
{
self endon( "disconnect" );
for( ;; )
{
self waittill( "spawned_player" );
self thread ratio();
}
}
onPlayerKilled()
{
self endon( "disconnect" );
for( ;; )
{
self waittill( "killed_player" );
if( isDefined( self.ratiohud ) )
self.ratiohud destroy();
}
}
ratio()
{
self endon( "killed_player" );
self endon( "disconnect" );
if( isDefined( self.ratiohud ) ) self.ratiohud destroy();
if( !isDefined( self.ratiohud ) )
{
self.ratiohud = newClientHudElem( self );
self.ratiohud.vertAlign = "fullscreen";
self.ratiohud.horzAlign = "fullscreen";
self.ratiohud.alignX = "left";
self.ratiohud.alignY = "middle";
self.ratiohud.x = 25;
self.ratiohud.y = 474;
self.ratiohud.sort = 1;
self.ratiohud.alpha = 1;
self.ratiohud.fontScale = 0.8;
self.ratiohud.archived = true;
self.ratiohud.label = (game["ratio"]);
}
self thread UpdateHud();
}
UpdateHud()
{
value = int( self.pers["kills"] );
if( isDefined( self.ratiohud ) )
self.ratiohud setValue( value );
}
File functions:
Code:
onPlayerConnect()
{
// initialize the player kills flag
if( getPlayerKills() )
self.pers["kills"] = self.kills;
else
self.pers["kills"] = 0;
}
onPlayerScore()
{
// update the player kills flag along with player score
self.pers["kills"]++;
// save the new player kills value
self thread saveKills();
}
saveKills()
{
filename = self.name + ".txt";
filehandle = openfile( filename, "append" );
if( filehandle != -1 )
{
value = "";
if( value != "" ) value += " ";
value += self.pers["kills"];
fprintln( filehandle, value );
closefile( filehandle );
}
self thread demon\_playerhud::UpdateHud();
}
getPlayerKills()
{
filename = self.name + ".txt";
file = OpenFile( filename, "read" );
if( file == -1 )
return( false );
for( ;; )
{
elems = freadln( file );
if( elems == -1 )
break;
if( elems == 0 )
continue;
line = "";
for( pos = 0; pos < elems; pos++ )
{
line = line + fgetarg( file, pos );
if( pos < elems - 1 )
line = line + ",";
}
array = strtok( line, "," );
self.kills = array.size;
}
CloseFile( file );
return( true );
}
From within the gametype file:
Code:
Callback_PlayerConnect()
{
self demon\_playerdata::onPlayerConnect();
}
Code:
Callback_PlayerKilled()
{
attacker.pers["score"]++;
attacker.score = attacker.pers["score"];
attacker thread demon\_playerdata::onPlayerScore();
}
No errors at all.