AlliedModders

AlliedModders (https://forums.alliedmods.net/index.php)
-   Scripting Help (https://forums.alliedmods.net/forumdisplay.php?f=11)
-   -   CZ Bots + AMXX 1.70 + auto bot script = crashing (https://forums.alliedmods.net/showthread.php?t=25554)

Blaza 03-16-2006 00:53

CZ Bots + AMXX 1.70 + auto bot script = crashing
 
Hello. I am attempting to write a script, fairly simple at the moment.

Basically, it sets a task for every 5 seconds in the plugin_init() function.

It seems pretty stable; bots coem and leave as humans enter/leave the CT/T teams. But it does seem to crash our server every dozen or so maps, but no crashing seems to happen if its stopped.

Code:

#include <amxmod>
#include <amxmisc>
#include <cstrike>

new STRING_VERSION[] = "1.00B6";
new BOT_MAX_CVAR[] = "bot_max";
new EXEC_SERVER_CFG = 1

public plugin_init() {
  register_plugin(
      "blz's CZBot Automation Plugin for AMXModX", STRING_VERSION, "blz");
  register_cvar(BOT_MAX_CVAR, "14", FCVAR_SERVER);

  register_concmd("amx_bot_max", "amx_bot_max", ADMIN_BAN,
      "<value>: -1 = Disable, 0 = No bots, 1 and higher = Max # of bots");
     
  if (EXEC_SERVER_CFG == 1) register_event("30", "on_map_end", "a");

  set_task(5.0, "check_bots", 8001, _, _, "b");

  return PLUGIN_CONTINUE;
}
/*----------------------------------------------------------------------------*/

public count_playing_humans() {
  new HumanCount = 0;
  new PlayerList[32];
  new PlayerCount = 0;
 
  get_players(PlayerList, PlayerCount, "c");
  for (new i=0; i<PlayerCount; i++) {
    new CsTeams:PlayerTeam = cs_get_user_team(PlayerList[i]);
    if (PlayerTeam == CS_TEAM_T || PlayerTeam == CS_TEAM_CT) HumanCount++;
  }
 
  return HumanCount;
}

public remove_bots() { server_cmd("bot_quota 0"); }

public check_bots() {
  new bot_max = get_cvar_num(BOT_MAX_CVAR);
  new old_bots = get_cvar_num("bot_quota");
  new new_bots = 0;
 
  if (bot_max == -1) return;
  if (bot_max == 0) {
      remove_bots();
      return;
  }

  new humans = count_playing_humans();
                                       
  if (humans > bot_max) new_bots = 0;
  else new_bots = bot_max - humans;
   
  if (old_bots != new_bots) {
      new temp[16];
      format(temp, 15, "bot_quota %d", new_bots);
      server_cmd(temp);
  }
}

public on_map_end() {
  new nextmap[31];
  get_cvar_string("amx_nextmap", nextmap, 30);
  server_cmd("exec server.cfg");
  server_cmd("exec %s.cfg", nextmap);
}
// *** To fix unexplained amxx related issue that for some reason
// *** prevents the server.cfg/<mapname>.cfg from executing.

Is there something I'm missing? I am a long time programmer, but I've come to find that HL based scripting can be a bit tricky to debug and perfect.

Thanks.

-blz

Redshift187 03-26-2008 18:29

Re: CZ Bots + AMXX 1.70 + auto bot script = crashing
 
That's funny, I'm working on a script to do exactly the same thing!

I see two potential problems. First, I wouldn't put a new inside a for loop. It's more efficient to create it once, and reuse it in the for loop. This may be the source of your crashing.

Second, this code is wrong:

PHP Code:

get_players(PlayerListPlayerCount"c"); 
   for (new 
i=0i<PlayerCounti++) 

It should be:

PHP Code:

for (new 133i++) 

because cs_get_user_team() takes a parameter of 1 to 32, NOT 0 to 31 (player ID 0 is reserved for specifying all users) AND the player list is not always contiguous (there may be empty slots in the player array). You may also need to check every ID with is_user_connected(i) before you call cs_get_user_team() or that call may fail.


All times are GMT -4. The time now is 16:29.

Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.