mirror of
https://github.com/Q3Rally-Team/q3rally.git
synced 2024-11-24 21:01:34 +00:00
Fixed all but one warning in "game".
This commit is contained in:
parent
38d3ea252b
commit
a02fabfad7
20 changed files with 248 additions and 218 deletions
|
@ -3014,7 +3014,8 @@ int AINode_MoveToNextCheckpoint( bot_state_t *bs )
|
|||
gentity_t *next = NULL, *prev = NULL, *ent = NULL;
|
||||
int nextCheckpoint;
|
||||
int lastCheckpoint;
|
||||
float f, dist, speed, accel, actualSpeed, dot, a_normal, curvature;
|
||||
float f, dist, speed, actualSpeed, dot, curvature;
|
||||
//float accel, a_normal;
|
||||
int throttleChange;
|
||||
|
||||
if (BotIsObserver(bs)) {
|
||||
|
|
|
@ -4251,7 +4251,7 @@ int BotGetActivateGoal(bot_state_t *bs, int entitynum, bot_activategoal_t *activ
|
|||
return 0;
|
||||
}
|
||||
trap_AAS_ValueForBSPEpairKey(ent, "classname", classname, sizeof(classname));
|
||||
if (!classname) {
|
||||
if (!*classname) {
|
||||
BotAI_Print(PRT_ERROR, "BotGetActivateGoal: entity with model %s has no classname\n", model);
|
||||
return 0;
|
||||
}
|
||||
|
@ -4516,7 +4516,7 @@ void BotAIBlocked(bot_state_t *bs, bot_moveresult_t *moveresult, int activate) {
|
|||
#ifdef OBSTACLEDEBUG
|
||||
ClientName(bs->client, netname, sizeof(netname));
|
||||
BotAI_Print(PRT_MESSAGE, "%s: I'm blocked by model %d\n", netname, entinfo.modelindex);
|
||||
#endif OBSTACLEDEBUG
|
||||
#endif // OBSTACLEDEBUG
|
||||
// if blocked by a bsp model and the bot wants to activate it
|
||||
if (activate && entinfo.modelindex > 0 && entinfo.modelindex <= max_bspmodelindex) {
|
||||
// find the bsp entity which should be activated in order to get the blocking entity out of the way
|
||||
|
@ -5535,5 +5535,3 @@ BotShutdownDeathmatchAI
|
|||
void BotShutdownDeathmatchAI(void) {
|
||||
altroutegoals_setup = qfalse;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -130,7 +130,7 @@ int BotSortTeamMatesByBaseTravelTime(bot_state_t *bs, int *teammates, int maxtea
|
|||
char buf[MAX_INFO_STRING];
|
||||
static int maxclients;
|
||||
int traveltimes[MAX_CLIENTS];
|
||||
bot_goal_t *goal;
|
||||
bot_goal_t *goal = NULL;
|
||||
|
||||
// STONELANCE
|
||||
if (gametype == GT_CTF /*|| gametype == GT_1FCTF*/) {
|
||||
|
@ -148,7 +148,6 @@ int BotSortTeamMatesByBaseTravelTime(bot_state_t *bs, int *teammates, int maxtea
|
|||
goal = &blueobelisk;
|
||||
}
|
||||
#endif
|
||||
|
||||
if (!maxclients)
|
||||
maxclients = trap_Cvar_VariableIntegerValue("sv_maxclients");
|
||||
|
||||
|
|
|
@ -2059,6 +2059,9 @@ static void PM_Alt_Weapon( void ) {
|
|||
case WP_FLAME_THROWER:
|
||||
ammo_use = 3;
|
||||
break;
|
||||
default:
|
||||
ammo_use = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
if ( pm->ps->ammo[ pm->ps->weapon ] > ammo_use ) {
|
||||
|
|
|
@ -20,6 +20,7 @@ along with q3rally; if not, write to the Free Software
|
|||
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
===========================================================================
|
||||
*/
|
||||
//
|
||||
|
||||
#include "g_local.h"
|
||||
|
||||
|
@ -375,7 +376,7 @@ void G_TouchTriggers( gentity_t *ent ) {
|
|||
gentity_t *hit;
|
||||
trace_t trace;
|
||||
vec3_t mins, maxs;
|
||||
vec3_t range = { 40, 40, 52 };
|
||||
static vec3_t range = { 40, 40, 52 };
|
||||
|
||||
if ( !ent->client ) {
|
||||
return;
|
||||
|
@ -792,9 +793,9 @@ void ClientEvents( gentity_t *ent, int oldEventSequence ) {
|
|||
case EV_FIRE_WEAPON:
|
||||
FireWeapon( ent );
|
||||
break;
|
||||
case EV_ALTFIRE_WEAPON:
|
||||
FireAltWeapon( ent );
|
||||
break;
|
||||
case EV_ALTFIRE_WEAPON:
|
||||
FireAltWeapon( ent );
|
||||
break;
|
||||
// STONELANCE
|
||||
case EV_FIRE_REARWEAPON:
|
||||
FireRearWeapon( ent );
|
||||
|
@ -850,7 +851,7 @@ void ClientEvents( gentity_t *ent, int oldEventSequence ) {
|
|||
}
|
||||
}
|
||||
#endif
|
||||
SelectSpawnPoint( ent->client->ps.origin, origin, angles );
|
||||
SelectSpawnPoint( ent->client->ps.origin, origin, angles, qfalse );
|
||||
TeleportPlayer( ent, origin, angles );
|
||||
break;
|
||||
|
||||
|
|
|
@ -154,7 +154,7 @@ go to a random point that doesn't telefrag
|
|||
================
|
||||
*/
|
||||
#define MAX_SPAWN_POINTS 128
|
||||
gentity_t *SelectRandomDeathmatchSpawnPoint( void ) {
|
||||
gentity_t *SelectRandomDeathmatchSpawnPoint(qboolean isbot) {
|
||||
gentity_t *spot;
|
||||
int count;
|
||||
int selection;
|
||||
|
@ -163,11 +163,19 @@ gentity_t *SelectRandomDeathmatchSpawnPoint( void ) {
|
|||
count = 0;
|
||||
spot = NULL;
|
||||
|
||||
while ((spot = G_Find (spot, FOFS(classname), "info_player_deathmatch")) != NULL) {
|
||||
if ( SpotWouldTelefrag( spot ) ) {
|
||||
while((spot = G_Find (spot, FOFS(classname), "info_player_deathmatch")) != NULL && count < MAX_SPAWN_POINTS)
|
||||
{
|
||||
if(SpotWouldTelefrag(spot))
|
||||
continue;
|
||||
|
||||
if(((spot->flags & FL_NO_BOTS) && isbot) ||
|
||||
((spot->flags & FL_NO_HUMANS) && !isbot))
|
||||
{
|
||||
// spot is not for this human/bot player
|
||||
continue;
|
||||
}
|
||||
spots[ count ] = spot;
|
||||
|
||||
spots[count] = spot;
|
||||
count++;
|
||||
}
|
||||
|
||||
|
@ -186,47 +194,65 @@ SelectRandomFurthestSpawnPoint
|
|||
Chooses a player start, deathmatch start, etc
|
||||
============
|
||||
*/
|
||||
gentity_t *SelectRandomFurthestSpawnPoint ( vec3_t avoidPoint, vec3_t origin, vec3_t angles ) {
|
||||
gentity_t *SelectRandomFurthestSpawnPoint ( vec3_t avoidPoint, vec3_t origin, vec3_t angles, qboolean isbot ) {
|
||||
gentity_t *spot;
|
||||
vec3_t delta;
|
||||
float dist;
|
||||
float list_dist[64];
|
||||
gentity_t *list_spot[64];
|
||||
float list_dist[MAX_SPAWN_POINTS];
|
||||
gentity_t *list_spot[MAX_SPAWN_POINTS];
|
||||
int numSpots, rnd, i, j;
|
||||
|
||||
numSpots = 0;
|
||||
spot = NULL;
|
||||
|
||||
while ((spot = G_Find (spot, FOFS(classname), "info_player_deathmatch")) != NULL) {
|
||||
if ( SpotWouldTelefrag( spot ) ) {
|
||||
while((spot = G_Find (spot, FOFS(classname), "info_player_deathmatch")) != NULL)
|
||||
{
|
||||
if(SpotWouldTelefrag(spot))
|
||||
continue;
|
||||
|
||||
if(((spot->flags & FL_NO_BOTS) && isbot) ||
|
||||
((spot->flags & FL_NO_HUMANS) && !isbot))
|
||||
{
|
||||
// spot is not for this human/bot player
|
||||
continue;
|
||||
}
|
||||
|
||||
VectorSubtract( spot->s.origin, avoidPoint, delta );
|
||||
dist = VectorLength( delta );
|
||||
for (i = 0; i < numSpots; i++) {
|
||||
if ( dist > list_dist[i] ) {
|
||||
if ( numSpots >= 64 )
|
||||
numSpots = 64-1;
|
||||
for (j = numSpots; j > i; j--) {
|
||||
|
||||
for (i = 0; i < numSpots; i++)
|
||||
{
|
||||
if(dist > list_dist[i])
|
||||
{
|
||||
if (numSpots >= MAX_SPAWN_POINTS)
|
||||
numSpots = MAX_SPAWN_POINTS - 1;
|
||||
|
||||
for(j = numSpots; j > i; j--)
|
||||
{
|
||||
list_dist[j] = list_dist[j-1];
|
||||
list_spot[j] = list_spot[j-1];
|
||||
}
|
||||
|
||||
list_dist[i] = dist;
|
||||
list_spot[i] = spot;
|
||||
|
||||
numSpots++;
|
||||
if (numSpots > 64)
|
||||
numSpots = 64;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (i >= numSpots && numSpots < 64) {
|
||||
|
||||
if(i >= numSpots && numSpots < MAX_SPAWN_POINTS)
|
||||
{
|
||||
list_dist[numSpots] = dist;
|
||||
list_spot[numSpots] = spot;
|
||||
numSpots++;
|
||||
}
|
||||
}
|
||||
if (!numSpots) {
|
||||
spot = G_Find( NULL, FOFS(classname), "info_player_deathmatch");
|
||||
|
||||
if(!numSpots)
|
||||
{
|
||||
spot = G_Find(NULL, FOFS(classname), "info_player_deathmatch");
|
||||
|
||||
// STONELANCE
|
||||
// if (!spot)
|
||||
// G_Error( "Couldn't find a spawn point" );
|
||||
|
@ -237,6 +263,7 @@ gentity_t *SelectRandomFurthestSpawnPoint ( vec3_t avoidPoint, vec3_t origin, ve
|
|||
G_Error( "Couldn't find a spawn point" );
|
||||
}
|
||||
// END
|
||||
|
||||
VectorCopy (spot->s.origin, origin);
|
||||
origin[2] += 9;
|
||||
VectorCopy (spot->s.angles, angles);
|
||||
|
@ -260,8 +287,8 @@ SelectSpawnPoint
|
|||
Chooses a player start, deathmatch start, etc
|
||||
============
|
||||
*/
|
||||
gentity_t *SelectSpawnPoint ( vec3_t avoidPoint, vec3_t origin, vec3_t angles ) {
|
||||
return SelectRandomFurthestSpawnPoint( avoidPoint, origin, angles );
|
||||
gentity_t *SelectSpawnPoint ( vec3_t avoidPoint, vec3_t origin, vec3_t angles, qboolean isbot ) {
|
||||
return SelectRandomFurthestSpawnPoint( avoidPoint, origin, angles, isbot );
|
||||
|
||||
/*
|
||||
gentity_t *spot;
|
||||
|
@ -300,19 +327,25 @@ Try to find a spawn point marked 'initial', otherwise
|
|||
use normal spawn selection.
|
||||
============
|
||||
*/
|
||||
gentity_t *SelectInitialSpawnPoint( vec3_t origin, vec3_t angles ) {
|
||||
gentity_t *SelectInitialSpawnPoint( vec3_t origin, vec3_t angles, qboolean isbot ) {
|
||||
gentity_t *spot;
|
||||
|
||||
spot = NULL;
|
||||
while ((spot = G_Find (spot, FOFS(classname), "info_player_deathmatch")) != NULL) {
|
||||
if ( spot->spawnflags & 1 ) {
|
||||
break;
|
||||
|
||||
while ((spot = G_Find (spot, FOFS(classname), "info_player_deathmatch")) != NULL)
|
||||
{
|
||||
if(((spot->flags & FL_NO_BOTS) && isbot) ||
|
||||
((spot->flags & FL_NO_HUMANS) && !isbot))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if((spot->spawnflags & 0x01))
|
||||
break;
|
||||
}
|
||||
|
||||
if ( !spot || SpotWouldTelefrag( spot ) ) {
|
||||
return SelectSpawnPoint( vec3_origin, origin, angles );
|
||||
}
|
||||
if (!spot || SpotWouldTelefrag(spot))
|
||||
return SelectSpawnPoint(vec3_origin, origin, angles, isbot);
|
||||
|
||||
VectorCopy (spot->s.origin, origin);
|
||||
origin[2] += 9;
|
||||
|
@ -336,7 +369,6 @@ gentity_t *SelectSpectatorSpawnPoint( vec3_t origin, vec3_t angles ) {
|
|||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
=======================================================================
|
||||
|
||||
|
@ -448,7 +480,6 @@ void CopyToBodyQue( gentity_t *ent ) {
|
|||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
body->s.powerups = 0; // clear powerups
|
||||
body->s.loopSound = 0; // clear lava burning
|
||||
body->s.number = body - g_entities;
|
||||
|
@ -732,12 +763,12 @@ team_t PickTeam( int ignoreClientNum ) {
|
|||
*/
|
||||
int team;
|
||||
|
||||
if ( team = LowestTeamCount( ignoreClientNum ) ){
|
||||
if ( (team = LowestTeamCount(ignoreClientNum)) ){
|
||||
return team;
|
||||
}
|
||||
|
||||
// equal team count, so join the team with the lowest score
|
||||
if ( team = LowestTeamScore() ){
|
||||
if ( (team = LowestTeamScore()) ){
|
||||
return team;
|
||||
}
|
||||
// END
|
||||
|
@ -771,85 +802,63 @@ static void ForceClientSkin( gclient_t *client, char *model, const char *skin )
|
|||
ClientCheckName
|
||||
============
|
||||
*/
|
||||
static void ClientCleanName( const char *in, char *out, int outSize ) {
|
||||
int len, colorlessLen;
|
||||
char ch;
|
||||
char *p;
|
||||
int spaces;
|
||||
static void ClientCleanName(const char *in, char *out, int outSize)
|
||||
{
|
||||
int outpos = 0, colorlessLen = 0, spaces = 0;
|
||||
|
||||
//save room for trailing null byte
|
||||
outSize--;
|
||||
// discard leading spaces
|
||||
for(; *in == ' '; in++);
|
||||
|
||||
len = 0;
|
||||
colorlessLen = 0;
|
||||
p = out;
|
||||
*p = 0;
|
||||
spaces = 0;
|
||||
for(; *in && outpos < outSize - 1; in++)
|
||||
{
|
||||
out[outpos] = *in;
|
||||
|
||||
while( 1 ) {
|
||||
ch = *in++;
|
||||
if( !ch ) {
|
||||
break;
|
||||
if(*in == ' ')
|
||||
{
|
||||
// don't allow too many consecutive spaces
|
||||
if(spaces > 2)
|
||||
continue;
|
||||
|
||||
spaces++;
|
||||
}
|
||||
else if(outpos > 0 && out[outpos - 1] == Q_COLOR_ESCAPE)
|
||||
{
|
||||
if(Q_IsColorString(&out[outpos - 1]))
|
||||
{
|
||||
colorlessLen--;
|
||||
|
||||
// don't allow leading spaces
|
||||
if( !*p && ch == ' ' ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
// check colors
|
||||
if( ch == Q_COLOR_ESCAPE ) {
|
||||
// solo trailing carat is not a color prefix
|
||||
if( !*in ) {
|
||||
break;
|
||||
}
|
||||
|
||||
// don't allow black in a name, period
|
||||
// STONELANCE
|
||||
/*
|
||||
if( ColorIndex(*in) == 0 ) {
|
||||
in++;
|
||||
continue;
|
||||
}
|
||||
if(ColorIndex(*in) == 0)
|
||||
{
|
||||
// Disallow color black in names to prevent players
|
||||
// from getting advantage playing in front of black backgrounds
|
||||
outpos--;
|
||||
continue;
|
||||
}
|
||||
*/
|
||||
// END
|
||||
|
||||
// make sure room in dest for both chars
|
||||
if( len > outSize - 2 ) {
|
||||
break;
|
||||
}
|
||||
|
||||
*out++ = ch;
|
||||
*out++ = *in++;
|
||||
len += 2;
|
||||
continue;
|
||||
}
|
||||
|
||||
// don't allow too many consecutive spaces
|
||||
if( ch == ' ' ) {
|
||||
spaces++;
|
||||
if( spaces > 3 ) {
|
||||
continue;
|
||||
else
|
||||
{
|
||||
spaces = 0;
|
||||
colorlessLen++;
|
||||
}
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
spaces = 0;
|
||||
colorlessLen++;
|
||||
}
|
||||
|
||||
if( len > outSize - 1 ) {
|
||||
break;
|
||||
}
|
||||
|
||||
*out++ = ch;
|
||||
colorlessLen++;
|
||||
len++;
|
||||
outpos++;
|
||||
}
|
||||
*out = 0;
|
||||
|
||||
out[outpos] = '\0';
|
||||
|
||||
// don't allow empty names
|
||||
if( *p == 0 || colorlessLen == 0 ) {
|
||||
Q_strncpyz( p, "UnnamedPlayer", outSize );
|
||||
}
|
||||
if( *out == '\0' || colorlessLen == 0)
|
||||
Q_strncpyz(out, "UnnamedPlayer", outSize );
|
||||
}
|
||||
|
||||
|
||||
|
@ -986,6 +995,7 @@ void ClientUserinfoChanged( int clientNum ) {
|
|||
// END
|
||||
|
||||
/* NOTE: all client side now
|
||||
|
||||
// team
|
||||
switch( team ) {
|
||||
case TEAM_RED:
|
||||
|
@ -1081,13 +1091,16 @@ void ClientUserinfoChanged( int clientNum ) {
|
|||
|
||||
// send over a subset of the userinfo keys so other clients can
|
||||
// print scoreboards, display models, and play custom sounds
|
||||
if ( ent->r.svFlags & SVF_BOT ) {
|
||||
if (ent->r.svFlags & SVF_BOT)
|
||||
{
|
||||
// STONELANCE - UPDATE: change the userinfo string for bots?
|
||||
s = va("n\\%s\\t\\%i\\model\\%s\\hmodel\\%s\\c1\\%s\\c2\\%s\\hc\\%i\\w\\%i\\l\\%i\\skill\\%s\\tt\\%d\\tl\\%d",
|
||||
client->pers.netname, team, model, headModel, c1, c2,
|
||||
client->pers.maxHealth, client->sess.wins, client->sess.losses,
|
||||
Info_ValueForKey( userinfo, "skill" ), teamTask, teamLeader );
|
||||
} else {
|
||||
}
|
||||
else
|
||||
{
|
||||
// STONELANCE
|
||||
s = va("n\\%s\\t\\%i\\model\\%s\\hmodel\\%s\\rim\\%s\\plate\\%s\\g_redteam\\%s\\g_blueteam\\%s\\c1\\%s\\c2\\%s\\hc\\%i\\w\\%i\\l\\%i\\cm\\%i\\ms\\%i\\tt\\%d\\tl\\%d",
|
||||
client->pers.netname, client->sess.sessionTeam, model, headModel, rim, plate, redTeam, blueTeam, c1, c2,
|
||||
|
@ -1103,6 +1116,7 @@ void ClientUserinfoChanged( int clientNum ) {
|
|||
|
||||
trap_SetConfigstring( CS_PLAYERS+clientNum, s );
|
||||
|
||||
// this is not the userinfo, more like the configstring actually
|
||||
G_LogPrintf( "ClientUserinfoChanged: %i %s\n", clientNum, s );
|
||||
}
|
||||
|
||||
|
@ -1138,14 +1152,20 @@ char *ClientConnect( int clientNum, qboolean firstTime, qboolean isBot ) {
|
|||
|
||||
trap_GetUserinfo( clientNum, userinfo, sizeof( userinfo ) );
|
||||
|
||||
// check to see if they are on the banned IP list
|
||||
// IP filtering
|
||||
// https://zerowing.idsoftware.com/bugzilla/show_bug.cgi?id=500
|
||||
// recommanding PB based IP / GUID banning, the builtin system is pretty limited
|
||||
// check to see if they are on the banned IP list
|
||||
value = Info_ValueForKey (userinfo, "ip");
|
||||
if ( G_FilterPacket( value ) ) {
|
||||
return "Banned.";
|
||||
return "You are banned from this server.";
|
||||
}
|
||||
|
||||
// check for a password
|
||||
if ( !( ent->r.svFlags & SVF_BOT ) ) {
|
||||
// we don't check password for bots and local client
|
||||
// NOTE: local client <-> "ip" "localhost"
|
||||
// this means this client is not running in our current process
|
||||
if ( !isBot && (strcmp(value, "localhost") != 0)) {
|
||||
// check for a password
|
||||
value = Info_ValueForKey (userinfo, "password");
|
||||
if ( g_password.string[0] && Q_stricmp( g_password.string, "none" ) &&
|
||||
strcmp( g_password.string, value) != 0) {
|
||||
|
@ -1240,6 +1260,7 @@ void ClientBegin( int clientNum ) {
|
|||
int flags;
|
||||
|
||||
ent = g_entities + clientNum;
|
||||
|
||||
client = level.clients + clientNum;
|
||||
|
||||
// STONELANCE
|
||||
|
@ -1302,6 +1323,7 @@ void ClientBegin( int clientNum ) {
|
|||
// send event
|
||||
tent = G_TempEntity( ent->client->ps.origin, EV_PLAYER_TELEPORT_IN );
|
||||
tent->s.clientNum = ent->s.clientNum;
|
||||
|
||||
// STONELANCE
|
||||
/*
|
||||
if ( g_gametype.integer != GT_TOURNAMENT ) {
|
||||
|
@ -1350,13 +1372,16 @@ void ClientSpawn(gentity_t *ent) {
|
|||
index = ent - g_entities;
|
||||
client = ent->client;
|
||||
|
||||
VectorClear(spawn_origin);
|
||||
|
||||
// find a spawn point
|
||||
// do it before setting health back up, so farthest
|
||||
// ranging doesn't count this client
|
||||
// STONELANCE
|
||||
// if ( client->sess.sessionTeam == TEAM_SPECTATOR ) {
|
||||
if ( client->sess.sessionTeam == TEAM_SPECTATOR || isRaceObserver( ent->s.number ) ) {
|
||||
if ( client->sess.spectatorState == SPECTATOR_OBSERVE ){
|
||||
spawnPoint = NULL;
|
||||
if ( client->sess.spectatorState == SPECTATOR_OBSERVE ) {
|
||||
int clientNum;
|
||||
|
||||
clientNum = client->sess.spectatorClient;
|
||||
|
@ -1368,59 +1393,51 @@ void ClientSpawn(gentity_t *ent) {
|
|||
clientNum = level.follow2;
|
||||
}
|
||||
|
||||
if( clientNum > 0 )
|
||||
FindBestObserverSpot(ent, &g_entities[clientNum], spawn_origin, spawn_angles);
|
||||
if( clientNum >= 0)
|
||||
spawnPoint = FindBestObserverSpot(ent, &g_entities[clientNum], spawn_origin, spawn_angles);
|
||||
}
|
||||
else
|
||||
if (!spawnPoint)
|
||||
// END
|
||||
spawnPoint = SelectSpectatorSpawnPoint (
|
||||
spawn_origin, spawn_angles);
|
||||
} else if ( (g_gametype.integer >= GT_CTF) ) {
|
||||
} else if (g_gametype.integer >= GT_CTF ) {
|
||||
// all base oriented team games use the CTF spawn points
|
||||
spawnPoint = SelectCTFSpawnPoint (
|
||||
client->sess.sessionTeam,
|
||||
client->pers.teamState.state,
|
||||
spawn_origin, spawn_angles);
|
||||
} else {
|
||||
do {
|
||||
// the first spawn should be at a good looking spot
|
||||
spawn_origin, spawn_angles,
|
||||
!!(ent->r.svFlags & SVF_BOT));
|
||||
}
|
||||
else
|
||||
{
|
||||
// STONELANCE
|
||||
if (isRallyRace()){
|
||||
// respawn at the grid if the race just started to stop people from
|
||||
// killing themselves inorder to get ahead at the beginning
|
||||
if ( level.startRaceTime && level.time - level.startRaceTime > 1000 )
|
||||
spawnPoint = SelectLastMarkerForSpawn(ent, spawn_origin, spawn_angles);
|
||||
else
|
||||
spawnPoint = SelectGridPositionSpawn(ent, spawn_origin, spawn_angles);
|
||||
if (isRallyRace()) {
|
||||
// respawn at the grid if the race just started to stop people from
|
||||
// killing themselves inorder to get ahead at the beginning
|
||||
if ( level.startRaceTime && level.time - level.startRaceTime > 1000 )
|
||||
spawnPoint = SelectLastMarkerForSpawn(ent, spawn_origin, spawn_angles, !!(ent->r.svFlags & SVF_BOT));
|
||||
else
|
||||
spawnPoint = SelectGridPositionSpawn(ent, spawn_origin, spawn_angles, !!(ent->r.svFlags & SVF_BOT));
|
||||
|
||||
if (g_trackReversed.integer && level.trackIsReversable){
|
||||
spawn_angles[YAW] += 180;
|
||||
}
|
||||
} else
|
||||
if (g_trackReversed.integer && level.trackIsReversable){
|
||||
spawn_angles[YAW] += 180;
|
||||
}
|
||||
} else
|
||||
// END
|
||||
if ( !client->pers.initialSpawn && client->pers.localClient ) {
|
||||
client->pers.initialSpawn = qtrue;
|
||||
spawnPoint = SelectInitialSpawnPoint( spawn_origin, spawn_angles );
|
||||
} else {
|
||||
// don't spawn near existing origin if possible
|
||||
spawnPoint = SelectSpawnPoint (
|
||||
client->ps.origin,
|
||||
spawn_origin, spawn_angles);
|
||||
}
|
||||
|
||||
// Tim needs to prevent bots from spawning at the initial point
|
||||
// on q3dm0...
|
||||
if ( ( spawnPoint->flags & FL_NO_BOTS ) && ( ent->r.svFlags & SVF_BOT ) ) {
|
||||
continue; // try again
|
||||
}
|
||||
// just to be symetric, we have a nohumans option...
|
||||
if ( ( spawnPoint->flags & FL_NO_HUMANS ) && !( ent->r.svFlags & SVF_BOT ) ) {
|
||||
continue; // try again
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
} while ( 1 );
|
||||
// the first spawn should be at a good looking spot
|
||||
if ( !client->pers.initialSpawn && client->pers.localClient )
|
||||
{
|
||||
client->pers.initialSpawn = qtrue;
|
||||
spawnPoint = SelectInitialSpawnPoint(spawn_origin, spawn_angles,
|
||||
!!(ent->r.svFlags & SVF_BOT));
|
||||
}
|
||||
else
|
||||
{
|
||||
// don't spawn near existing origin if possible
|
||||
spawnPoint = SelectSpawnPoint (
|
||||
client->ps.origin,
|
||||
spawn_origin, spawn_angles, !!(ent->r.svFlags & SVF_BOT));
|
||||
}
|
||||
}
|
||||
client->pers.teamState.state = TEAM_ACTIVE;
|
||||
|
||||
|
@ -1464,7 +1481,7 @@ void ClientSpawn(gentity_t *ent) {
|
|||
*/
|
||||
// END
|
||||
|
||||
memset (client, 0, sizeof(*client)); // bk FIXME: Com_Memset?
|
||||
Com_Memset (client, 0, sizeof(*client));
|
||||
|
||||
client->pers = saved;
|
||||
client->sess = savedSess;
|
||||
|
|
|
@ -1811,7 +1811,7 @@ void Cmd_Stats_f( gentity_t *ent ) {
|
|||
// STONELANCE
|
||||
void Cmd_SaveBPoints_f( gentity_t *other )
|
||||
{
|
||||
int i, j;
|
||||
int i;
|
||||
fileHandle_t f;
|
||||
char buffer[256];
|
||||
char serverinfo[MAX_INFO_STRING];
|
||||
|
|
|
@ -1414,12 +1414,12 @@ qboolean G_RadiusDamage_NoKnockBack ( vec3_t origin, gentity_t *attacker, float
|
|||
int entityList[MAX_GENTITIES];
|
||||
int numListedEntities;
|
||||
vec3_t mins, maxs;
|
||||
vec3_t v;
|
||||
// vec3_t v;
|
||||
// vec3_t dir;
|
||||
int i, e;
|
||||
qboolean hitClient = qfalse;
|
||||
vec3_t o;
|
||||
float minDist;
|
||||
// vec3_t o;
|
||||
// float minDist;
|
||||
|
||||
if ( radius < 1 ) {
|
||||
radius = 1;
|
||||
|
|
|
@ -606,7 +606,7 @@ void G_AddPredictableEvent( gentity_t *ent, int event, int eventParm );
|
|||
void G_AddEvent( gentity_t *ent, int event, int eventParm );
|
||||
void G_SetOrigin( gentity_t *ent, vec3_t origin );
|
||||
void AddRemap(const char *oldShader, const char *newShader, float timeOffset);
|
||||
const char *BuildShaderStateConfig();
|
||||
const char *BuildShaderStateConfig( void );
|
||||
|
||||
//
|
||||
// g_combat.c
|
||||
|
@ -614,6 +614,10 @@ const char *BuildShaderStateConfig();
|
|||
qboolean CanDamage (gentity_t *targ, vec3_t origin);
|
||||
void G_Damage (gentity_t *targ, gentity_t *inflictor, gentity_t *attacker, vec3_t dir, vec3_t point, int damage, int dflags, int mod);
|
||||
qboolean G_RadiusDamage (vec3_t origin, gentity_t *attacker, float damage, float radius, gentity_t *ignore, int mod);
|
||||
// STONELANCE
|
||||
qboolean G_RadiusDamage_NoKnockBack ( vec3_t origin, gentity_t *attacker, float damage, float radius,
|
||||
gentity_t *ignore, int mod);
|
||||
// END
|
||||
int G_InvulnerabilityEffect( gentity_t *targ, vec3_t dir, vec3_t point, vec3_t impactpoint, vec3_t bouncedir );
|
||||
void body_die( gentity_t *self, gentity_t *inflictor, gentity_t *attacker, int damage, int meansOfDeath );
|
||||
void TossClientItems( gentity_t *self );
|
||||
|
@ -709,7 +713,7 @@ team_t TeamCount( int ignoreClientNum, int team );
|
|||
int TeamLeader( int team );
|
||||
team_t PickTeam( int ignoreClientNum );
|
||||
void SetClientViewAngle( gentity_t *ent, vec3_t angle );
|
||||
gentity_t *SelectSpawnPoint ( vec3_t avoidPoint, vec3_t origin, vec3_t angles );
|
||||
gentity_t *SelectSpawnPoint (vec3_t avoidPoint, vec3_t origin, vec3_t angles, qboolean isbot);
|
||||
void CopyToBodyQue( gentity_t *ent );
|
||||
void respawn (gentity_t *ent);
|
||||
void BeginIntermission (void);
|
||||
|
@ -749,7 +753,7 @@ void G_StartKamikaze( gentity_t *ent );
|
|||
#define OBSERVERCAM_ZOOM 1
|
||||
#define OBSERVERCAM_FIXED 2
|
||||
|
||||
qboolean FindBestObserverSpot( gentity_t *self, gentity_t *target, vec3_t spot, vec3_t angles);
|
||||
gentity_t *FindBestObserverSpot( gentity_t *self, gentity_t *target, vec3_t spot, vec3_t angles);
|
||||
void UpdateObserverSpot( gentity_t *ent, qboolean forceUpdate );
|
||||
|
||||
//
|
||||
|
@ -782,8 +786,8 @@ void CreateRallyStarter( void );
|
|||
void CalculatePlayerPositions( void );
|
||||
void Cmd_RacePositions_f( void );
|
||||
void Cmd_Times_f( gentity_t *ent );
|
||||
gentity_t *SelectLastMarkerForSpawn( gentity_t *ent, vec3_t origin, vec3_t angles );
|
||||
gentity_t *SelectGridPositionSpawn( gentity_t *ent, vec3_t origin, vec3_t angles );
|
||||
gentity_t *SelectLastMarkerForSpawn( gentity_t *ent, vec3_t origin, vec3_t angles, qboolean isbot );
|
||||
gentity_t *SelectGridPositionSpawn( gentity_t *ent, vec3_t origin, vec3_t angles, qboolean isbot );
|
||||
|
||||
//
|
||||
// g_rally_rearweapon.c
|
||||
|
@ -798,6 +802,8 @@ void CreateBioHazard (gentity_t *owner, vec3_t origin);
|
|||
void CheckForOil(vec3_t origin, float radius);
|
||||
void CreateOilHazard (gentity_t *owner, vec3_t origin);
|
||||
void CreatePoisonHazard (gentity_t *owner, vec3_t origin);
|
||||
void CreatePoisonCloudHazard (gentity_t *owner, vec3_t origin);
|
||||
void CreateSmokeHazard (gentity_t *owner, vec3_t origin);
|
||||
// END
|
||||
|
||||
|
||||
|
@ -840,6 +846,9 @@ void ClientUserinfoChanged( int clientNum );
|
|||
void ClientDisconnect( int clientNum );
|
||||
void ClientBegin( int clientNum );
|
||||
void ClientCommand( int clientNum );
|
||||
// STONELANCE
|
||||
gentity_t *SelectSpectatorSpawnPoint( vec3_t origin, vec3_t angles );
|
||||
// END
|
||||
|
||||
//
|
||||
// g_active.c
|
||||
|
|
|
@ -1158,7 +1158,7 @@ void FindIntermissionPoint( void ) {
|
|||
// find the intermission spot
|
||||
ent = G_Find (NULL, FOFS(classname), "info_player_intermission");
|
||||
if ( !ent ) { // the map creator forgot to put in an intermission point...
|
||||
SelectSpawnPoint ( vec3_origin, level.intermission_origin, level.intermission_angle );
|
||||
SelectSpawnPoint ( vec3_origin, level.intermission_origin, level.intermission_angle, qfalse );
|
||||
} else {
|
||||
VectorCopy (ent->s.origin, level.intermission_origin);
|
||||
// STONELANCE
|
||||
|
@ -1229,6 +1229,7 @@ void BeginIntermission( void ) {
|
|||
|
||||
// send the current scoring to all clients
|
||||
SendScoreboardMessageToAllClients();
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
@ -1244,6 +1245,8 @@ or moved to a new level based on the "nextmap" cvar
|
|||
void ExitLevel (void) {
|
||||
int i;
|
||||
gclient_t *cl;
|
||||
char nextmap[MAX_STRING_CHARS];
|
||||
char d1[MAX_STRING_CHARS];
|
||||
|
||||
//bot interbreeding
|
||||
BotInterbreedEndMatch();
|
||||
|
@ -1265,7 +1268,16 @@ void ExitLevel (void) {
|
|||
*/
|
||||
// END
|
||||
|
||||
trap_SendConsoleCommand( EXEC_APPEND, "vstr nextmap\n" );
|
||||
trap_Cvar_VariableStringBuffer( "nextmap", nextmap, sizeof(nextmap) );
|
||||
trap_Cvar_VariableStringBuffer( "d1", d1, sizeof(d1) );
|
||||
|
||||
if( !Q_stricmp( nextmap, "map_restart 0" ) && Q_stricmp( d1, "" ) ) {
|
||||
trap_Cvar_Set( "nextmap", "vstr d2" );
|
||||
trap_SendConsoleCommand( EXEC_APPEND, "vstr d1\n" );
|
||||
} else {
|
||||
trap_SendConsoleCommand( EXEC_APPEND, "vstr nextmap\n" );
|
||||
}
|
||||
|
||||
level.changemap = NULL;
|
||||
level.intermissiontime = 0;
|
||||
|
||||
|
@ -1319,7 +1331,7 @@ void QDECL G_LogPrintf( const char *fmt, ... ) {
|
|||
Com_sprintf( string, sizeof(string), "%3i:%i%i ", min, tens, sec );
|
||||
|
||||
va_start( argptr, fmt );
|
||||
Q_vsnprintf (string+7, sizeof(string)-7, fmt, argptr);
|
||||
Q_vsnprintf(string + 7, sizeof(string) - 7, fmt, argptr);
|
||||
va_end( argptr );
|
||||
|
||||
if ( g_dedicated.integer ) {
|
||||
|
@ -1378,10 +1390,9 @@ Append information about this game to the log file
|
|||
void LogExit( const char *string ) {
|
||||
int i, numSorted;
|
||||
gclient_t *cl;
|
||||
#ifdef MISSIONPACK // bk001205
|
||||
#ifdef MISSIONPACK
|
||||
qboolean won = qtrue;
|
||||
#endif
|
||||
|
||||
G_LogPrintf( "Exit: %s\n", string );
|
||||
|
||||
level.intermissionQueued = level.time;
|
||||
|
@ -1623,7 +1634,6 @@ void CheckExitRules( void ) {
|
|||
}
|
||||
|
||||
// check for sudden death
|
||||
|
||||
if ( ScoreIsTied() ) {
|
||||
// always wait for sudden death
|
||||
return;
|
||||
|
@ -1638,8 +1648,8 @@ void CheckExitRules( void ) {
|
|||
}
|
||||
|
||||
// STONELANCE
|
||||
if (g_gametype.integer == GT_DERBY && level.startRaceTime && !level.finishRaceTime){
|
||||
gclient_t *winner;
|
||||
if (g_gametype.integer == GT_DERBY && level.startRaceTime && !level.finishRaceTime) {
|
||||
gclient_t *winner = NULL;
|
||||
|
||||
for ( i=0, count = 0 ; i< g_maxclients.integer ; i++ ) {
|
||||
cl = level.clients + i;
|
||||
|
@ -1652,7 +1662,7 @@ void CheckExitRules( void ) {
|
|||
winner = cl;
|
||||
}
|
||||
|
||||
if (count == 1){
|
||||
if (winner && count == 1) {
|
||||
level.winnerNumber = winner->ps.clientNum;
|
||||
level.finishRaceTime = level.time;
|
||||
|
||||
|
|
|
@ -764,6 +764,5 @@ void G_BREAKWOOD(gentity_t *ent, vec3_t point, int mod) {
|
|||
tent->s.eventParm = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -155,7 +155,6 @@ void CreateBioHazard (gentity_t *owner, vec3_t origin){
|
|||
gentity_t *ent;
|
||||
gentity_t *other;
|
||||
vec3_t dist;
|
||||
vec3_t snapped;
|
||||
int highest;
|
||||
|
||||
other = NULL;
|
||||
|
@ -355,7 +354,7 @@ CreatePoisonCloudHazard
|
|||
============
|
||||
*/
|
||||
|
||||
void CreatePoisonCloudHazard (gentity_t *owner, vec3_t origin){
|
||||
void CreatePoisonCloudHazard (gentity_t *owner, vec3_t origin) {
|
||||
gentity_t *ent;
|
||||
|
||||
ent = G_TempEntity( origin, EV_HAZARD );
|
||||
|
@ -374,7 +373,7 @@ CreateSmokeHazard
|
|||
============
|
||||
*/
|
||||
|
||||
void CreateSmokeHazard (gentity_t *owner, vec3_t origin){
|
||||
void CreateSmokeHazard (gentity_t *owner, vec3_t origin) {
|
||||
gentity_t *ent;
|
||||
|
||||
ent = G_TempEntity( origin, EV_HAZARD );
|
||||
|
|
|
@ -91,6 +91,7 @@ void Touch_StartFinish (gentity_t *self, gentity_t *other, trace_t *trace ){
|
|||
place = "eighth";
|
||||
break;
|
||||
default:
|
||||
place = NULL;
|
||||
Com_Printf( "Unknown placing: %i\n", other->client->ps.stats[STAT_POSITION] );
|
||||
break;
|
||||
}
|
||||
|
@ -181,7 +182,7 @@ void SP_rally_startfinish( gentity_t *ent ) {
|
|||
|
||||
if (!g_laplimit.integer){
|
||||
level.numberOfLaps = ent->laps;
|
||||
trap_Cvar_Set( "laplimit", va("%s", level.numberOfLaps) );
|
||||
trap_Cvar_Set( "laplimit", va("%d", level.numberOfLaps) );
|
||||
}
|
||||
else
|
||||
level.numberOfLaps = g_laplimit.integer;
|
||||
|
|
|
@ -34,16 +34,16 @@ void SP_info_observer_spot( gentity_t *ent ){
|
|||
}
|
||||
|
||||
|
||||
qboolean FindBestObserverSpot( gentity_t *self, gentity_t *target, vec3_t spot, vec3_t angles){
|
||||
gentity_t *FindBestObserverSpot( gentity_t *self, gentity_t *target, vec3_t spot, vec3_t angles){
|
||||
gentity_t *ent;
|
||||
trace_t tr;
|
||||
vec3_t delta;
|
||||
static vec3_t mins = { -4, -4, -4 };
|
||||
static vec3_t maxs = { 4, 4, 4 };
|
||||
float dist, bestDist;
|
||||
qboolean foundSpot;
|
||||
gentity_t *foundSpot;
|
||||
|
||||
foundSpot = qfalse;
|
||||
foundSpot = NULL;
|
||||
dist = 0;
|
||||
bestDist = 0;
|
||||
ent = NULL;
|
||||
|
@ -53,7 +53,7 @@ qboolean FindBestObserverSpot( gentity_t *self, gentity_t *target, vec3_t spot,
|
|||
|
||||
// Com_Printf("Found an observer spot in PVS\n");
|
||||
// VectorCopy(ent->s.origin, spot);
|
||||
// foundSpot = qtrue;
|
||||
// foundSpot = ent;
|
||||
// return foundSpot;
|
||||
|
||||
trap_Trace(&tr, ent->r.currentOrigin, mins, maxs, target->client->ps.origin, target->s.number, CONTENTS_SOLID);
|
||||
|
@ -77,7 +77,7 @@ qboolean FindBestObserverSpot( gentity_t *self, gentity_t *target, vec3_t spot,
|
|||
self->spotflags = ent->spawnflags;
|
||||
|
||||
// use this one
|
||||
return qtrue;
|
||||
return ent;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -89,7 +89,7 @@ qboolean FindBestObserverSpot( gentity_t *self, gentity_t *target, vec3_t spot,
|
|||
|
||||
// Com_Printf("Found a valid observer spot\n");
|
||||
self->spotflags = ent->spawnflags;
|
||||
foundSpot = qtrue;
|
||||
foundSpot = ent;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -265,8 +265,7 @@ void CalculatePlayerPositions( void )
|
|||
}
|
||||
|
||||
positionChanged = qfalse;
|
||||
leader = NULL;
|
||||
ent = NULL;
|
||||
leader = ent = last = NULL;
|
||||
while ( (ent = G_Find (ent, FOFS(classname), "player")) != NULL )
|
||||
{
|
||||
if ( ent->client->sess.sessionTeam == TEAM_SPECTATOR ) continue;
|
||||
|
@ -307,7 +306,9 @@ void CalculatePlayerPositions( void )
|
|||
{
|
||||
// cur->carBehind = NULL;
|
||||
ent->carBehind = cur;
|
||||
last->carBehind = ent;
|
||||
if (last) {
|
||||
last->carBehind = ent;
|
||||
}
|
||||
}
|
||||
else {
|
||||
cur->carBehind = ent;
|
||||
|
@ -481,7 +482,7 @@ SelectLastMarkerForSpawn
|
|||
|
||||
============
|
||||
*/
|
||||
gentity_t *SelectLastMarkerForSpawn( gentity_t *ent, vec3_t origin, vec3_t angles ) {
|
||||
gentity_t *SelectLastMarkerForSpawn( gentity_t *ent, vec3_t origin, vec3_t angles, qboolean isbot ) {
|
||||
gentity_t *spot;
|
||||
int lastMarker;
|
||||
|
||||
|
@ -498,7 +499,7 @@ gentity_t *SelectLastMarkerForSpawn( gentity_t *ent, vec3_t origin, vec3_t angle
|
|||
}
|
||||
|
||||
if ( !spot ) {
|
||||
return SelectSpawnPoint( vec3_origin, origin, angles );
|
||||
return SelectSpawnPoint( vec3_origin, origin, angles, isbot );
|
||||
}
|
||||
|
||||
// spawn at last checkpoint
|
||||
|
@ -516,7 +517,7 @@ SelectGridPositionSpawn
|
|||
|
||||
============
|
||||
*/
|
||||
gentity_t *SelectGridPositionSpawn( gentity_t *ent, vec3_t origin, vec3_t angles ) {
|
||||
gentity_t *SelectGridPositionSpawn( gentity_t *ent, vec3_t origin, vec3_t angles, qboolean isbot ) {
|
||||
gentity_t *spot;
|
||||
int gridPosition;
|
||||
|
||||
|
@ -535,7 +536,7 @@ gentity_t *SelectGridPositionSpawn( gentity_t *ent, vec3_t origin, vec3_t angles
|
|||
if ( !spot || SpotWouldTelefrag( spot ) ) {
|
||||
// FIXME: put into spectator mode instead?
|
||||
G_Printf("Warning: No info_player_start found for race spawn, trying info_player_deathmatch\n");
|
||||
return SelectSpawnPoint( vec3_origin, origin, angles );
|
||||
return SelectSpawnPoint( vec3_origin, origin, angles, isbot );
|
||||
}
|
||||
|
||||
VectorCopy (spot->s.origin, origin);
|
||||
|
|
|
@ -75,8 +75,8 @@ qboolean G_ParseScriptedObject( gentity_t *ent ){
|
|||
char *token;
|
||||
char text[MAX_SCRIPT_TEXT];
|
||||
char filename[MAX_QPATH];
|
||||
char model[MAX_QPATH];
|
||||
char deadmodel[MAX_QPATH];
|
||||
// char model[MAX_QPATH];
|
||||
// char deadmodel[MAX_QPATH];
|
||||
fileHandle_t f;
|
||||
|
||||
// setup defaults
|
||||
|
@ -298,9 +298,8 @@ qboolean G_ScriptedObject_ApplyCollision( gentity_t *self, vec3_t at, vec3_t nor
|
|||
vec3_t arm;
|
||||
vec3_t vP1;
|
||||
vec3_t impulse, impulseMoment;
|
||||
vec3_t delta, cross, cross2;
|
||||
vec3_t cross, cross2;
|
||||
float impulseNum, oppositeImpulseNum, impulseDen, dot;
|
||||
int i;
|
||||
|
||||
// temp for inverseWorldInertiaTensor
|
||||
vec3_t axis[3];
|
||||
|
|
|
@ -101,7 +101,7 @@ G_ResetCar
|
|||
=================
|
||||
*/
|
||||
void G_ResetCar( gentity_t *ent ) {
|
||||
int i;
|
||||
// int i;
|
||||
vec3_t origin, end, angles;
|
||||
vec3_t mins, maxs;
|
||||
trace_t tr;
|
||||
|
|
|
@ -35,7 +35,6 @@ typedef struct teamgame_s {
|
|||
int blueTakenTime;
|
||||
int redObeliskAttackedTime;
|
||||
int blueObeliskAttackedTime;
|
||||
|
||||
} teamgame_t;
|
||||
|
||||
teamgame_t teamgame;
|
||||
|
@ -44,18 +43,16 @@ gentity_t *neutralObelisk;
|
|||
|
||||
void Team_SetFlagStatus( int team, flagStatus_t status );
|
||||
|
||||
|
||||
void Team_InitGame( void ) {
|
||||
memset(&teamgame, 0, sizeof teamgame);
|
||||
|
||||
switch( g_gametype.integer ) {
|
||||
case GT_CTF:
|
||||
teamgame.redStatus = teamgame.blueStatus = -1; // Invalid to force update
|
||||
teamgame.redStatus = -1; // Invalid to force update
|
||||
Team_SetFlagStatus( TEAM_RED, FLAG_ATBASE );
|
||||
teamgame.blueStatus = -1; // Invalid to force update
|
||||
Team_SetFlagStatus( TEAM_BLUE, FLAG_ATBASE );
|
||||
break;
|
||||
|
||||
|
||||
#ifdef MISSIONPACK
|
||||
case GT_1FCTF:
|
||||
teamgame.flagStatus = -1; // Invalid to force update
|
||||
|
@ -209,8 +206,6 @@ qboolean OnSameTeam( gentity_t *ent1, gentity_t *ent2 ) {
|
|||
static char ctfFlagStatusRemap[] = { '0', '1', '*', '*', '2' };
|
||||
static char oneFlagStatusRemap[] = { '0', '1', '2', '3', '4' };
|
||||
|
||||
|
||||
|
||||
void Team_SetFlagStatus( int team, flagStatus_t status ) {
|
||||
qboolean modified = qfalse;
|
||||
|
||||
|
@ -1053,13 +1048,13 @@ SelectCTFSpawnPoint
|
|||
|
||||
============
|
||||
*/
|
||||
gentity_t *SelectCTFSpawnPoint ( team_t team, int teamstate, vec3_t origin, vec3_t angles ) {
|
||||
gentity_t *SelectCTFSpawnPoint ( team_t team, int teamstate, vec3_t origin, vec3_t angles, qboolean isbot ) {
|
||||
gentity_t *spot;
|
||||
|
||||
spot = SelectRandomTeamSpawnPoint ( teamstate, team );
|
||||
|
||||
if (!spot) {
|
||||
return SelectSpawnPoint( vec3_origin, origin, angles );
|
||||
return SelectSpawnPoint( vec3_origin, origin, angles, isbot );
|
||||
}
|
||||
|
||||
VectorCopy (spot->s.origin, origin);
|
||||
|
@ -1132,7 +1127,7 @@ void TeamplayInfoMessage( gentity_t *ent ) {
|
|||
i, player->client->pers.teamState.location, h, a,
|
||||
player->client->ps.weapon, player->s.powerups);
|
||||
j = strlen(entry);
|
||||
if (stringlength + j > sizeof(string))
|
||||
if (stringlength + j >= sizeof(string))
|
||||
break;
|
||||
strcpy (string + stringlength, entry);
|
||||
stringlength += j;
|
||||
|
@ -1516,4 +1511,3 @@ qboolean CheckObeliskAttack( gentity_t *obelisk, gentity_t *attacker ) {
|
|||
return qfalse;
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
@ -80,12 +80,10 @@ void Team_CheckHurtCarrier(gentity_t *targ, gentity_t *attacker);
|
|||
void Team_InitGame(void);
|
||||
void Team_ReturnFlag(int team);
|
||||
void Team_FreeEntity(gentity_t *ent);
|
||||
gentity_t *SelectCTFSpawnPoint ( team_t team, int teamstate, vec3_t origin, vec3_t angles );
|
||||
gentity_t *SelectCTFSpawnPoint ( team_t team, int teamstate, vec3_t origin, vec3_t angles, qboolean isbot );
|
||||
gentity_t *Team_GetLocation(gentity_t *ent);
|
||||
qboolean Team_GetLocationMsg(gentity_t *ent, char *loc, int loclen);
|
||||
void TeamplayInfoMessage( gentity_t *ent );
|
||||
void CheckTeamStatus(void);
|
||||
|
||||
int Pickup_Team( gentity_t *ent, gentity_t *other );
|
||||
|
||||
|
||||
|
|
|
@ -560,7 +560,8 @@ plasma circles around player similar to AltFire Mod
|
|||
*/
|
||||
|
||||
void Weapon_Plasmagun_Circular_Fire (gentity_t *ent) {
|
||||
gentity_t *m, *n;
|
||||
gentity_t *m;
|
||||
// gentity_t *n;
|
||||
vec3_t temp, temp2;
|
||||
|
||||
//forward[0] += (float)sin( m->s.pos.trTime / m->s.pos.trDuration );
|
||||
|
|
Loading…
Reference in a new issue