Originally Posted by
croni1012
how can I read JUST the last line of a file?
With the built-in functions you cant. You would need to read the whole file in order to get to the last line. This is very ineffective as log files can get huge (we're talking in MB).
In my old script i deleted the log every time i read it. Take a look:
PHP Code:
// stEvo
init() {
level.logName = "log.log";
level.logTimeRefresh = 1;
level.triggerString = "!"; // can be any multi-lenght string
setCvar("g_log", "scriptdata/"+level.logName); //
setCvar("g_logSync", 1); // You may need double restart if u havent set the cvars before
thread main_loop();
}
main_loop() {
wait 10;
while (1) {
clearLog();
wait level.logTimeRefresh;
filenum = OpenFile( level.logName, "read" );
if (filenum == -1) continue;
commas = freadln(filenum);
while (commas > 0) {
for (i = 0; i < commas; i++) {
response = fgetarg(filenum,i);
chr = 0;
type = "";
for (; chr < response.size; chr++)
if (response[chr] != ";") type += response[chr]; else break; chr ++;
guid = "";
for (; chr < response.size; chr++)
if (response[chr] != ";") guid += response[chr]; else break; chr ++;
id = "";
for (; chr < response.size; chr++)
if (response[chr] != ";") id += response[chr]; else break; chr ++;
name = "";
for (; chr < response.size; chr++)
if (response[chr] != ";") name += response[chr]; else break; chr ++;
message = "";
for (; chr < response.size; chr++)
if (response[chr] != ";") message += response[chr]; else break; chr ++;
if (validType(type) && validMessage(message))
thread doMessage(fixMessage(ToLower(message)), guid, id, name);
}
commas = freadln(filenum);
}
closeFile(filenum);
}
}
doMessage(message, guid, id, name) {
if (startsWith(message, "id"))
getId(id, message);
else if (startsWith(message, "kick"))
kickPlayer(id, message);
else
getPlayerByNum(int(id)) iprintlnbold("Invalid Command.");
}
//******************************************************************************************************************
kickPlayer(id, message) {
player = getPlayerByNum(int(id));
//if (isDefined(player.admin) && !player.admin) { player iprintlnbold("You are not admin."); return;} // Uncomment
name = ""; chr = 0;
for (; chr < message.size; chr ++) if (message[chr] == " ") break; chr ++;
for (; chr < message.size; chr ++) name += message[chr];
playerToKick = getPlayerByName(name);
if (!isPlayer(playerToKick)) { player iprintlnbold("To many or no matches: " + name); return;}
player SayAll("[^1BOT^7]: Kicked player: " + playerToKick.name ); wait 2;
kick(playerToKick getEntityNumber());
}
getId(id, message) {
player = getPlayerByNum(int(id));
//if (isDefined(player.admin) && !player.admin) { player iprintlnbold("You are not admin."); return;} // Uncomment
name = ""; chr = 0;
for (; chr < message.size; chr ++) if (message[chr] == " ") break; chr ++;
for (; chr < message.size; chr ++) name += message[chr];
players = getEntArray( "player", "classname" );
for (i = 0; i < players.size; i++)
if (IsSubStr(ToLower(players[i].name), name) ) {
player SayAll("[^1BOT^7]: " + players[i].name + " ^7 - ID: ^1#" + players[i] getEntityNumber() );
wait 1;
}
}
//******************************************************************************************************************
clearLog() {
filenum = OpenFile( level.logName, "write" );
closeFile(filenum);
}
validMessage(message) {
if (message.size