Author Topic: Least to greatest "score" board, something's not working right.  (Read 470 times)

Score being time but it's functioning like score, so

For some reason this isn't writing to the file right.
Code: [Select]
function updateBestTimes(%c)
{

%mg = %c.miniGame;

if(!isObject(%mg)) { %mg = $DefaultMiniGame; }

%startTime = %mg.raceStartTime;
if(%startTime <= 0) { %startTime = %mg.lastResetTime; }

%elapsedTime = getSimTime() - %startTime;
%elapsedTime2 = getSimTime() - %startTime;
%elapsedMS = getSubStr(%elapsedTime2,strLen(%elapsedTime2)-3,strLen(%elapsedTime2));
%elapsedTime = mFloor(%elapsedTime / 1000);

for(%i = 0; %i < $SK::numTracks; %i++)
{
%displayName = $SK::Track[%i];
%displayName = strReplace(%displayName, "Add-Ons/SpeedKart_", "");
%displayName = strReplace(%displayName, "/save.bls", "");
%displayName = strReplace(%displayName, "_", " ");

if(%i == $SK::CurrentTrack) { %filename = "config/server/SpeedKart/Times/" @ %displayName @ ".txt"; }

}
%file = new FileObject();
if(!isFile(%filename))
{

%file.openForWrite(%filename);
%file.writeLine("6000 0 N/A");
%file.writeLine("6000 0 N/A");
%file.writeLine("6000 0 N/A");
%file.writeLine("6000 0 N/A");
%file.writeLine("6000 0 N/A");
%file.close();

}
%file.openForRead(%filename);

%count = 1;


for(%i=1;%i<=5;%i++)
{

%line[%count] = %file.readline();

%time[%count] = getWord(%line[%count],0);
%msec[%count] = getWord(%line[%count],1);
%name[%count] = getWords(%line[%count],2);

echo(0 SPC %time[%count]);

%count++;

}

%line[6] = %elapsedTime SPC %elapsedMS SPC %c.getPlayerName();
%time[6] = %elapsedTime;
%msec[6] = %elapsedMS;
%name[6] = %c.getPlayerName();

for(%i=1;%i<=6;%i++) //for 1 through 6
{

%numbers[%i] = %time[%i];

if(%numbers[%i] > %highest)
{

%highest = %numbers[%i];

}

echo(1 SPC %numbers[%i] SPC %highest);

}

for(%i=1;%i<=%highest;%i++)
{

for(%j=1;%j<=6;%j++)
{

if(%numbers[%j] == %i)
{

%order[%j] = %time[%j] SPC %msec[%j] SPC %name[%j];
echo(3 SPC %order[%j]);

}

}

}

for(%i=1;%i<=5;%i++)
{

%line[%i] = %order[%i];

}

%file.close();

%file.openForWrite(%filename);
for(%i=1;%i<=5;%i++)
{
%file.writeline(%line[%i]);
}

messageAll('',"<just:center><font:Impact:30><color:ffff00>" @ %c.getPlayerName() SPC "<color:ffffff>WON THE RACE WITH A TIME OF <color:ff00ff>" @ getTimeString(%elapsedTime) @ "." @ %elapsedMS @ "!");
messageAll('',"<just:center><font:Impact:24><color:ffff00>BEST TIMES");

for(%i=1;%i<=5;%i++)
{
messageAll('',"<just:center><font:Arial Bold:20><color:ffff00>" @ getWords(%line[%i],2) @ "<color:ffffff> -- " @ getTimeString(getWord(%line[%i],0)) @ "." @ getWord(%line[%i],1));
}

messageAll('',"<just:left>");

%file.close();
%file.delete();

}



That's what is being echoed. It's in order like it should be, but in the file:

Code: [Select]
6000 0 N/A
6000 0 N/A
6000 0 N/A
6000 0 N/A
6000 0 N/A

...it never seems to write to it. What gives?

Ninja edit: I purposely only want the top 5 lines written, not 6. That isn't a mistake. It's 6 because I want it to check with the previous 5 and the new value.

Hm, that's cool what your doin.

Minimal example:

Code: [Select]
%fp = new fileObject();

if ( isFile( file path ) )
{
%fp.openForRead( file path );

for ( %i = 0 ; %i < 5 ; %i++ )
{
%record[ %i ] = %fp.readLine();
}

%fp.close();
}
else
{
for ( %i = 0 ; %i < 5 ; %i++ )
{
%record[ %i ] = 0;
}
}

// check current results, update %record* if there's something better
// if you do update it, set %changed to true

if ( %changed )
{
%fp.openForWrite( file path );

for ( %i = 0 ; %i < 5 ; %i++ )
{
%fp.writeLine( %record[ %i ] );
}

%fp.close();
}

for ( %i = 0 ; %i < 5 ; %i++ )
{
echo( "Record #" @ %i + 1 SPC "is" SPC %record[ %i ] );
}

%fp.delete();


Minimal example:

-code-
That worked after a few modifications, thanks. :D