/////////////////////////////////////////////////////////////////////// // Remove a bot by name or all bots /////////////////////////////////////////////////////////////////////// void ACESP_RemoveBot(char *name) { int i; qboolean freed=false; edict_t *bot; for(i=0;i<maxclients->value;i++) { bot = g_edicts + i + 1; if(bot->inuse) { if(bot->is_bot && (strcmp(bot->client->pers.netname,name)==0 || strcmp(name,"all")==0)) { bot->health = 0; player_die (bot, bot, bot, 100000, vec3_origin); // don't even bother waiting for death frames bot->deadflag = DEAD_DEAD; bot->inuse = false; freed = true; ACEIT_PlayerRemoved (bot); safe_bprintf (PRINT_MEDIUM, "%s removed\n", bot->client->pers.netname); } } } if(!freed) safe_bprintf (PRINT_MEDIUM, "%s not found\n", name); if (botauto_respawn->value) { ACESP_SaveBots(); // Save them again } }
/////////////////////////////////////////////////////////////////////// // Remove a bot by name or all bots /////////////////////////////////////////////////////////////////////// void ACESP_RemoveBot(char *name) { int i, j; qboolean freed=false; edict_t *bot; for (i=0;i<maxclients->value;i++) { bot = g_edicts + i + 1; if (bot->inuse) { if (bot->is_bot && (Q_stricmp(bot->client->pers.netname,name)==0 || Q_stricmp(name,"all")==0)) { bot->health = 0; player_die(bot, bot, bot, 100000, vec3_origin); // don't even bother waiting for death frames bot->deadflag = DEAD_DEAD; bot->inuse = false; freed = true; ACEIT_PlayerRemoved (bot); safe_bprintf(PRINT_MEDIUM, "%s removed\n", bot->client->pers.netname); // Knightmare- decrement this bot name's counter and exit loop if (Q_stricmp(name,"all")) { for (j = 0; j < num_botinfo; j++) if (!Q_stricmp(name, bot_info[j].name)) { bot_info[j].ingame_count--; bot_info[j].ingame_count = max(bot_info[j].ingame_count, 0); break; } break; } } } } if (!freed) safe_bprintf(PRINT_MEDIUM, "%s not found\n", name); // Knightmare- removed this //ACESP_SaveBots(); // Save them again }
/* =========== ClientDisconnect Called when a player drops from the server. Will not be called between levels. ============ */ void ClientDisconnect (edict_t *ent) { int playernum; if (!ent->client) return; #ifdef GAME_MOD Blinky_OnClientTerminate(ent); #endif #ifdef WITH_ACEBOT safe_bprintf #else gi.bprintf #endif (PRINT_HIGH, "%s disconnected\n", ent->client->pers.netname); #ifdef WITH_ACEBOT // ACEBOT_ADD ACEIT_PlayerRemoved(ent); // ACEBOT_END #endif // send effect gi.WriteByte (svc_muzzleflash); gi.WriteShort (ent-g_edicts); gi.WriteByte (MZ_LOGOUT); gi.multicast (ent->s.origin, MULTICAST_PVS); gi.unlinkentity (ent); ent->s.modelindex = 0; ent->solid = SOLID_NOT; ent->inuse = false; ent->classname = "disconnected"; ent->client->pers.connected = false; playernum = ent-g_edicts-1; gi.configstring (CS_PLAYERSKINS+playernum, ""); }