Esempio n. 1
0
// Should be the only function that ever creates a fireteam
void G_RegisterFireteam(/*const char* name,*/ int entityNum) {
	fireteamData_t* ft;
	gentity_t* leader;
	int count, ident;

	if(entityNum < 0 || entityNum >= MAX_CLIENTS) {
		G_Error("G_RegisterFireteam: invalid client");
	}

	leader = &g_entities[entityNum];
	if(!leader->client) {
		G_Error("G_RegisterFireteam: attempting to register a Fireteam to an entity with no client\n");
	}

	if(G_IsOnFireteam(entityNum, NULL)) {
		G_ClientPrintAndReturn(entityNum, "You are already on a fireteam, leave it first");
	}

/*	if(!name || !*name) {
		G_ClientPrintAndReturn(entityNum, "You must choose a name for your fireteam");
	}*/
		
	if((ft = G_FindFreeFireteam()) == NULL) {
		G_ClientPrintAndReturn(entityNum, "No free fireteams available");
	}

	if(leader->client->sess.sessionTeam != TEAM_AXIS && leader->client->sess.sessionTeam != TEAM_ALLIES) {
		G_ClientPrintAndReturn(entityNum, "Only players on a team can create a fireteam");
	}

	count = G_CountTeamFireteams(leader->client->sess.sessionTeam);
	if(count >= MAX_FIRETEAMS / 2) {
		G_ClientPrintAndReturn(entityNum, "Your team already has the maximum number of fireteams allowed");
	}

	ident = G_FindFreeFireteamIdent( leader->client->sess.sessionTeam ) + 1;
	if(ident == 0) {
		G_ClientPrintAndReturn(entityNum, "Um, something is broken, spoink Gordon");
	}

	// good to go now, i hope!
	ft->inuse = qtrue;	
	memset(ft->joinOrder, -1, sizeof(level.fireTeams[0].joinOrder));
	ft->joinOrder[0] = leader - g_entities;
	ft->ident = ident;

	if( g_autoFireteams.integer ) {
		ft->priv = qfalse;

		trap_SendServerCommand( entityNum, "aft -1" );
		leader->client->pers.autofireteamEndTime = level.time + 20500;
	} else {
		ft->priv = qfalse;
	}

//	Q_strncpyz(ft->name, name, 32);
	Bot_Event_FireTeamCreated(entityNum,ft->ident);
	Bot_Event_JoinedFireTeam(leader - g_entities,leader);

	G_UpdateFireteamConfigString(ft);
}
Esempio n. 2
0
// Should be the only function that ever creates a fireteam
void G_RegisterFireteam(int entityNum)
{
	fireteamData_t *ft;
	gentity_t      *leader;
	int            count, ident;

	if (entityNum < 0 || entityNum >= MAX_CLIENTS)
	{
		G_Error("G_RegisterFireteam: invalid client\n");
	}

	leader = &g_entities[entityNum];
	if (!leader->client)
	{
		G_Error("G_RegisterFireteam: attempting to register a fireteam to an entity with no client\n");
	}

	if (G_IsOnFireteam(entityNum, NULL))
	{
		G_ClientPrint(entityNum, "You are already on a fireteam, leave it first");
		return;
	}

	if ((ft = G_FindFreeFireteam()) == NULL)
	{
		G_ClientPrint(entityNum, "No free fireteams available");
		return;
	}

	if (leader->client->sess.sessionTeam != TEAM_AXIS && leader->client->sess.sessionTeam != TEAM_ALLIES)
	{
		G_ClientPrint(entityNum, "Only players on a team can create a fireteam");
		return;
	}

	count = G_CountTeamFireteams(leader->client->sess.sessionTeam);
	if (count >= MAX_FIRETEAMS / 2)
	{
		G_ClientPrint(entityNum, "Your team already has the maximum number of fireteams allowed");
		return;
	}

	ident = G_FindFreeFireteamIdent(leader->client->sess.sessionTeam) + 1;
	if (ident == 0)
	{
		G_Error("G_RegisterFireteam: free fireteam is invalid\n");
		return;
	}

	// good to go now
	ft->inuse = qtrue;
	memset(ft->joinOrder, -1, sizeof(level.fireTeams[0].joinOrder));
	ft->joinOrder[0] = leader - g_entities;
	ft->ident        = ident;

	if (g_autoFireteams.integer)
	{
		ft->priv = qfalse;

		trap_SendServerCommand(entityNum, "aft -1");
		leader->client->pers.autofireteamEndTime = level.time + 20500;
	}
	else
	{
		ft->priv = qfalse;
	}

#ifdef FEATURE_OMNIBOT
	Bot_Event_FireTeamCreated(entityNum, ft->ident);
	Bot_Event_JoinedFireTeam(leader - g_entities, leader);
#endif

	G_UpdateFireteamConfigString(ft);
}