// only way a client should ever join a fireteam, other than creating one void G_AddClientToFireteam(int entityNum, int leaderNum) { fireteamData_t *ft; int i; if ((entityNum < 0 || entityNum >= MAX_CLIENTS) || !g_entities[entityNum].client) { G_Error("G_AddClientToFireteam: invalid client\n"); } if ((leaderNum < 0 || leaderNum >= MAX_CLIENTS) || !g_entities[leaderNum].client) { G_Error("G_AddClientToFireteam: invalid client\n"); } if (g_entities[leaderNum].client->sess.sessionTeam != g_entities[entityNum].client->sess.sessionTeam) { G_ClientPrint(entityNum, "You are not on the same team as that fireteam"); return; } if (!G_IsFireteamLeader(leaderNum, &ft)) { G_ClientPrint(entityNum, "The leader has now left the fireteam you applied to"); return; } if (G_IsOnFireteam(entityNum, NULL)) { G_ClientPrint(entityNum, "You are already on a fireteam"); return; } if (G_CountFireteamMembers(ft) >= MAX_FIRETEAM_MEMBERS) { G_ClientPrint(entityNum, "Too many players already on this fireteam"); return; } for (i = 0; i < MAX_CLIENTS; i++) { if (ft->joinOrder[i] == -1) { // found a free position ft->joinOrder[i] = entityNum; #ifdef FEATURE_OMNIBOT Bot_Event_JoinedFireTeam(entityNum, &g_entities[leaderNum]); #endif G_UpdateFireteamConfigString(ft); return; } } }
// only way a client should ever join a fireteam, other than creating one void G_AddClientToFireteam(int entityNum, int leaderNum) { fireteamData_t *ft; int i; if((entityNum < 0 || entityNum >= MAX_CLIENTS) || !g_entities[entityNum].client) { G_Error("G_AddClientToFireteam: invalid client"); } if((leaderNum < 0 || leaderNum >= MAX_CLIENTS) || !g_entities[leaderNum].client) { G_Error("G_AddClientToFireteam: invalid client"); } if(g_entities[leaderNum].client->sess.sessionTeam != g_entities[entityNum].client->sess.sessionTeam) { G_ClientPrintAndReturn(entityNum, "You are not on the same team as that fireteam"); } if(!G_IsFireteamLeader(leaderNum, &ft)) { G_ClientPrintAndReturn(entityNum, "The leader has now left the Fireteam you applied to"); } if(G_IsOnFireteam(entityNum, NULL)) { G_ClientPrintAndReturn(entityNum, "You are already on a fireteam"); } for(i = 0; i < MAX_CLIENTS; i++) { if(i >= 6) { G_ClientPrintAndReturn(entityNum, "Too many players already on this Fireteam"); return; } if(ft->joinOrder[i] == -1) { // found a free position ft->joinOrder[i] = entityNum; // Omni-bot BEGIN Bot_Event_JoinedFireTeam(entityNum, &g_entities[leaderNum]); // Omni-bot END G_UpdateFireteamConfigString(ft); return; } } }
// 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); }
// 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); }