Results 1 to 10 of 28

Thread: Kicking bots

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Corporal guiismiti's Avatar
    Join Date
    Dec 2013
    Location
    Brazil
    Posts
    244
    Thanks
    121
    Thanked 42 Times in 31 Posts
    I'm getting some weird errors when kicking meatbots.

    Basically, I created a monitor (code below) to add a bot if team size < 6, and remove a bot if team size > 6 && there is at least one bot in the team.

    The problem is:
    I join the server and a team, the bot is kicked;
    The bot is still in the server, although the slot was freed (first image);
    The bot still counts as being in the team I joined, so the server keeps trying to kick it constantly;
    When I leave the server, this "ghost" bot rejoins the team (the server shows 11 players only, since its slot was freed);
    When I reconnect, I use the slot of the kicked bot. The team score hud is duplicated (second image), and, as a spectator, I keep aiming at the other bots (which is what meatbot's check enemy function does, in an infinite loop);
    At this moment, when I join the same team I joined earler, I get disconnected - it seems that I have self.isbot defined (the kicked bot had this it defined), so I count as a bot and the bot monitor tries to kick me to make room for myself, lol;
    After I disconnect, the server keeps trying to kick whoever is in the slot I was using, so, in the console, it prints "Client 1 is not active" every time it goes through the monitor function.

    Click image for larger version. 

Name:	scoretable_edited.png 
Views:	76 
Size:	298.9 KB 
ID:	1309

    Click image for larger version. 

Name:	dup_huds.png 
Views:	53 
Size:	22.9 KB 
ID:	1308

    PHP Code:
    botMonitor()
    {
        
    self endon("intermission");
        
        
    currentteam "allies";
        
        for(;;)
        {
            
    // start the monitor a while after map loading
            
    timepassed = (getTime() - level.starttime) / 1000;
            
    delayonstart 20;
            
            if
            (
                (
    timepassed delayonstart) &&
                (
    getCvar("mod_allow_bots") == "1")
            )
            {
                
    // get bot count and player count for the current team
                
    botsonteam 0;
                
    playersonteam 0;
                
                
    players getentarray("player""classname");
                
                for(
    0players.sizei++)
                {
                    if(
    players[i].pers["team"] == currentteam)
                    {
                        if
                        (
                            (
    isDefined(players[i].isbot)) ||
                            (
    players[igetIP() == "0")
                        )
                        {
                            
    botsonteam++;
                        }
                        else
                        {
                            
    playersonteam++;
                            
    iprintln(players[i].name);
                        }
                    }
                }
                
                
    // add a bot to the current team if it is not complete
                
    botmaxnumber getCvarInt("mod_bots_" currentteam);
                
                if((
    playersonteam botsonteam) < botmaxnumber)
                {
                    
    reAddBot(currentteam);
                }
                else
                {
                    
    // remove a bot from the current team if it has too many
                    
    if
                    (
                        (
    botsonteam 0) &&
                        ((
    playersonteam botsonteam) > botmaxnumber)
                    )
                    {
                        
    iprintln("trying to kick a bot from " currentteam);
                        
                        
    level kickBotFromTeam(currentteam);
                    }
                }
                
                if(
    currentteam == "allies")
                {
                    
    currentteam "axis";
                }
                else
                {
                    
    currentteam "allies";
                }
            }
            
            
    wait(0.5);
        }

    PHP Code:
    kickBotFromTeam(team)
    {
        
    players getentarray("player""classname");
        
        for(
    0players.sizei++)
        {
            if
            (
                (
    players[i].pers["team"] == team) &&
                (
                    (
    isDefined(players[i].isbot)) ||
                    (
    players[igetIP() == "0")
                )
            )
            {
                
    entnum players[igetentitynumber();
                
    kick(entnum);
                
    free_slot(entnum);
                
                break;
            }
        }

    Any ideas?
    Last edited by guiismiti; 31st March 2017 at 16:47. Reason: edited screenshot
    set logfile 2

Posting Permissions

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