示例#1
0
文件: control.c 项目: jjrh/mangband
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");
	}

}
示例#2
0
文件: server.c 项目: kekyo/xpilot-ng
/*
 *  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);
}