Exemplo n.º 1
0
/*
 * G_ClientBegin
 *
 * Called when a client has finished connecting, and is ready
 * to be placed into the game.  This will happen every level load.
 */
void G_ClientBegin(g_edict_t *ent) {
	char welcome[256];

	int player_num = ent - g_game.edicts - 1;

	ent->client = g_game.clients + player_num;

	G_InitEdict(ent);

	G_InitClientLocals(ent->client);

	VectorClear(ent->client->cmd_angles);
	ent->client->persistent.first_frame = g_level.frame_num;

	// force spectator if match or rounds
	if (g_level.match || g_level.rounds)
		ent->client->persistent.spectator = true;
	else if (g_level.teams || g_level.ctf) {
		if (g_auto_join->value)
			G_AddClientToTeam(ent, G_SmallestTeam()->name);
		else
			ent->client->persistent.spectator = true;
	}

	// spawn them in
	G_ClientRespawn(ent, true);

	if (g_level.intermission_time) {
		G_ClientToIntermission(ent);
	} else {
		memset(welcome, 0, sizeof(welcome));

		snprintf(welcome, sizeof(welcome),
				"^2Welcome to ^7http://quake2world.net\n"
				"^2Gameplay is ^1%s\n", G_GameplayName(g_level.gameplay));

		if (g_level.teams)
			strncat(welcome, "^2Teams are enabled\n", sizeof(welcome));

		if (g_level.ctf)
			strncat(welcome, "^2CTF is enabled\n", sizeof(welcome));

		if (g_voting->value)
			strncat(welcome, "^2Voting is allowed\n", sizeof(welcome));

		gi.ClientCenterPrint(ent, "%s", welcome);
	}

	// make sure all view stuff is valid
	G_ClientEndFrame(ent);

	srand(time(NULL)); // set random seed
}
Exemplo n.º 2
0
/*
 * @brief
 */
void G_EndClientFrames(void) {

	// finalize the player_state_t for this frame
	for (int32_t i = 0; i < sv_max_clients->integer; i++) {

		g_entity_t *ent = g_game.entities + 1 + i;

		if (!ent->in_use || !ent->client)
			continue;

		G_ClientEndFrame(ent);
	}
}