static void console_kick_player(connection_type* ct, char *name) { int i, len; player_type *p_ptr, *p_ptr_search; p_ptr = 0; /* Check the players in the game */ for (i = 1; i <= NumPlayers; i++) { p_ptr_search = Players[i]; len = strlen(p_ptr_search->name); if (!my_strnicmp(p_ptr_search->name, name, len)) { p_ptr = p_ptr_search; break; } } /* Check name */ if (p_ptr) { /* Kick him */ Destroy_connection(p_ptr->conn, "kicked out"); /* Success */ cq_printf(&ct->wbuf, "%T", "Kicked player\n"); return; } else { /* Failure */ cq_printf(&ct->wbuf, "%T", "No such player\n"); } }
/* * Last function, exit with grace. */ void End_game(void) { player_t *pl; char msg[MSG_LEN]; #if !defined(_WINDOWS) if (termsig != 0) warn("Terminating on signal %d", termsig); #endif record = rrecord; playback = rplayback; /* Could be called from signal handler */ if (ShutdownServer == 0) { warn("Shutting down..."); snprintf(msg, sizeof(msg), "shutting down: %s", ShutdownReason); } else snprintf(msg, sizeof(msg), "server exiting"); teamcup_game_over(); while (NumPlayers > 0) { /* Kick out all remaining players */ pl = Player_by_index(NumPlayers - 1); if (pl->conn == NULL) Delete_player(pl); else Destroy_connection(pl->conn, msg); } record = playback = 0; while (NumSpectators > 0) { pl = Player_by_index(spectatorStart + NumSpectators - 1); Destroy_connection(pl->conn, msg); } record = rrecord; playback = rplayback; if (options.recordMode != 0) { options.recordMode = 0; Init_recording(); } /* Tell meta server that we are gone. */ Meta_gone(); Contact_cleanup(); /* Ranking. */ Rank_write_webpage(); Rank_write_rankfile(); Free_players(); Free_shots(); World_free(); Free_cells(); Free_options(); Log_game("END"); sock_cleanup(); #if !defined(_WINDOWS) if (termsig != 0) { signal(termsig, SIG_DFL); raise(termsig); } #endif exit(0); }