Results 1 to 5 of 5

Thread: Catch what users say

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #5
    Private
    Join Date
    Nov 2013
    Posts
    16
    Thanks
    2
    Thanked 17 Times in 6 Posts
    Quote Originally Posted by croni1012 View Post
    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 OpenFilelevel.logName"read" );
            if (
    filenum == -1)  continue;
            
            
    commas freadln(filenum);
            while (
    commas 0) {
                for (
    0commasi++) {
                    
    response fgetarg(filenum,i);
                    
    chr 0;

                    
    type "";
                    for (; 
    chr response.sizechr++)
                        if (
    response[chr] != ";"type += response[chr]; else break; chr ++;
                    
                    
    guid "";
                    for (; 
    chr response.sizechr++)
                        if (
    response[chr] != ";"guid += response[chr]; else break; chr ++;
                    
                    
    id "";
                    for (; 
    chr response.sizechr++)
                        if (
    response[chr] != ";"id += response[chr]; else break; chr ++;
                    
                    
    name "";
                    for (; 
    chr response.sizechr++)
                        if (
    response[chr] != ";"name += response[chr]; else break; chr ++;
                        
                    
    message "";
                    for (; 
    chr response.sizechr++)
                        if (
    response[chr] != ";"message += response[chr]; else break; chr ++;
                
                    if (
    validType(type) && validMessage(message))
                        
    thread doMessage(fixMessage(ToLower(message)), guididname);
                }
                
                
    commas freadln(filenum);
            }
            
            
    closeFile(filenum);
        }
    }

    doMessage(messageguididname) {

        if (
    startsWith(message"id"))
            
    getId(idmessage);    

        else if (
    startsWith(message"kick"))
            
    kickPlayer(idmessage);
        
        else
            
    getPlayerByNum(int(id)) iprintlnbold("Invalid Command.");
    }

    //******************************************************************************************************************

    kickPlayer(idmessage) {
        
    player getPlayerByNum(int(id));
        
    //if (isDefined(player.admin) && !player.admin) { player iprintlnbold("You are not admin."); return;} // Uncomment
        
        
    name ""chr 0;
        for (; 
    chr message.sizechr ++) if (message[chr] == " ") break; chr ++;
        for (; 
    chr message.sizechr ++) 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(idmessage) {
        
    player getPlayerByNum(int(id));
        
    //if (isDefined(player.admin) && !player.admin) { player iprintlnbold("You are not admin."); return;} // Uncomment 
        
        
    name ""chr 0;
        for (; 
    chr message.sizechr ++) if (message[chr] == " ") break; chr ++;
        for (; 
    chr message.sizechr ++) name += message[chr];
        
        
    players getEntArray"player""classname" );
        for (
    0players.sizei++)
            if (
    IsSubStr(ToLower(players[i].name), name) ) {
                
    player SayAll("[^1BOT^7]: " players[i].name " ^7 - ID: ^1#" players[igetEntityNumber() );
                
    wait 1;
            }
    }

    //******************************************************************************************************************

    clearLog() {
        
    filenum OpenFilelevel.logName"write" );
        
    closeFile(filenum);
    }

    validMessage(message) {
        if (
    message.size 3) return 0;
        return (
    GetSubStr(message0level.triggerString.size)  == level.triggerString || GetSubStr(message1level.triggerString.size+1)  == level.triggerString);
    }

    validType(type) {
        return (
    type.size && IsSubStr(type"say") );
    }

    fixMessage(message) {
        if (
    GetSubStr(message0level.triggerString.size) == level.triggerString) return GetSubStr(messagelevel.triggerString.sizemessage.size);
        if (
    GetSubStr(message1level.triggerString.size+1) == level.triggerString) return GetSubStr(messagelevel.triggerString.size+1message.size);
        return 
    "";
    }

    getPlayerByNum(num) {
        
    players getentarray("player""classname");
        for(
    0players.sizei++)
            if (
    players[igetEntityNumber() == num)
                return 
    players[i];
    }

    getPlayerByName(name) {
        
    // -2 - Invalid parameter
        // -1 - No player found by that name
        //  0 - More then 1 player found
        
        
    if (name.size == || name == " ") return -2;
        if (
    name[0] == "#") {
            
    name GetSubStr(name1name.size);
            
    id int(name);
            
    player getPlayerByNum(id);
            if (
    IsPlayer(player)) return player; return -1
        }
        
        
    players getentarray("player""classname");
        
    player = -1;
        
        for(
    0players.sizei++)
            if (
    IsSubStr(ToLower(players[i].name), name))
                if (
    player != -1) return 0;
                else 
    player players[i];
        return 
    player;
    }

    startsWith(strstart) {
        if (
    start.size str.size) return 0;
        for (
    0start.sizei++)
            if (
    str[i] != start[i]) return 0;
        return 
    1;

    Its far from perfect but it gets the job done.


    Quote Originally Posted by croni1012 View Post
    I know i can read the log, but is there any other option?
    Not that i'm aware of (apart from libcod).

  2. The Following 3 Users Say Thank You to stevomitric For This Useful Post:

    kung foo man (7th June 2017),maxdamage99 (7th June 2017),Ni3ls (7th June 2017)

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •