From bedc545f4282f5fe12391296ec3ebb50e7abe66c Mon Sep 17 00:00:00 2001 From: Paradox460 Date: Fri, 27 Jun 2008 22:23:01 +0000 Subject: [PATCH] Updated !nobuild to newer version. Changed the way qvm_verion was generated yet again, this time it uses q3_shared.h, and should be svn'd automatically. --- src/game/g_admin.c | 55 ++++++++++++++++-------------- src/game/g_buildable.c | 77 +++++++++++++++++++++++++++++++++++------- src/game/g_local.h | 7 +++- src/game/g_main.c | 9 ++--- src/qcommon/q_shared.h | 11 +++--- 5 files changed, 109 insertions(+), 50 deletions(-) diff --git a/src/game/g_admin.c b/src/game/g_admin.c index 7c51da2..5feb647 100644 --- a/src/game/g_admin.c +++ b/src/game/g_admin.c @@ -197,8 +197,8 @@ g_admin_cmd_t g_admin_cmds[ ] = }, {"nobuild", G_admin_nobuild, "L", - "make an area nobuild", - "[^3game units^7]" + "make an area unbuildable", + "[^3game units area^7] [ ^3game units height^7]" }, {"nobuildsave", G_admin_nobuildsave, "L", @@ -7725,16 +7725,11 @@ qboolean G_admin_nobuild( gentity_t *ent, int skiparg ) { int minargc; char units[ MAX_STRING_CHARS ]; + char units2[ MAX_STRING_CHARS ]; gentity_t *nb; - vec3_t low; - int units2; - minargc = 2 + skiparg; - - if( G_SayArgc() < minargc ) - { - ADMP( "^3!nobuild: ^7usage: !nobuild [game units]\n" ); - return qfalse; - } + int units3; + int units4; + minargc = 3 + skiparg; if( !ent ) { @@ -7743,22 +7738,29 @@ qboolean G_admin_nobuild( gentity_t *ent, int skiparg ) } G_SayArgv( 1 + skiparg, units, sizeof( units ) ); + G_SayArgv( 2 + skiparg, units2, sizeof( units2 ) ); + + units3 = atoi(units); + units4 = atoi(units2); - VectorAdd( ent->s.origin, ent->r.mins, low ); - - units2 = atoi(units); - low[0] = ent->s.origin[0]; - low[1] = ent->s.origin[1]; - - nb = G_Spawn( ); - nb->s.modelindex = 1337; - nb->think = NoThink; - nb->nextthink = level.time; - VectorCopy( low, nb->s.pos.trBase ); - VectorCopy( low, nb->r.currentOrigin ); - trap_LinkEntity( nb ); - nb->nobuilder = qtrue; - nb->nobuildarea = units2; + if( level.nobuild == qfalse ){ + + if( G_SayArgc() < minargc ) + { + ADMP( "^3!nobuild: ^7usage: !nobuild [game units area] [gane units height]\n" ); + return qfalse; + } + + level.nobuild = qtrue; + level.nobuildArea = units3; + level.nobuildHeight = units4; + AP( va( "print \"^3!nobuild: ^7nobuild mode has been enabled by %s^7\n\"", ( ent ) ? ent->client->pers.netname : "console" ) ); + } + else{ + level.nobuild = qfalse; + level.nobuildArea = 0.0f; + AP( va( "print \"^3!nobuild: ^7nobuild mode has been disabled by %s^7\n\"", ( ent ) ? ent->client->pers.netname : "console" ) ); + } return qtrue; } @@ -7771,3 +7773,4 @@ qboolean G_admin_nobuildsave( gentity_t *ent, int skiparg ) return qtrue; } + diff --git a/src/game/g_buildable.c b/src/game/g_buildable.c index 5c21f09..67c30ca 100644 --- a/src/game/g_buildable.c +++ b/src/game/g_buildable.c @@ -3067,11 +3067,11 @@ itemBuildError_t G_CanBuild( gentity_t *ent, buildable_t buildable, int distance invert = BG_FindInvertNormalForBuildable( buildable ); VectorCopy( entity_origin, tmp ); - + tmp[2] += mins[2]; nb = G_Spawn( ); - nb->s.modelindex = 1337; //Coder humor is awesome isn't it? + nb->s.modelindex = 0; nb->think = NoThink; nb->nextthink = level.time; VectorCopy( tmp, nb->s.pos.trBase ); @@ -3084,9 +3084,9 @@ itemBuildError_t G_CanBuild( gentity_t *ent, buildable_t buildable, int distance if( nbent->nobuilder == qtrue ) { - range[0] = nbent->nobuildarea; - range[1] = nbent->nobuildarea; - range[2] = 5; + range[0] = nbent->nobuildArea; + range[1] = nbent->nobuildArea; + range[2] = nbent->nobuildHeight; VectorAdd( nbent->r.currentOrigin, range, maxs3 ); VectorSubtract( nbent->r.currentOrigin, range, mins3 ); @@ -3104,7 +3104,7 @@ itemBuildError_t G_CanBuild( gentity_t *ent, buildable_t buildable, int distance } } - G_FreeEntity( nb ); + G_FreeEntity( nb ); //can we build at this angle? if( !( normal[ 2 ] >= minNormal || ( invert && normal[ 2 ] <= -minNormal ) ) ) @@ -3670,6 +3670,40 @@ static gentity_t *G_Build( gentity_t *builder, buildable_t buildable, vec3_t ori return built; } +/* +================ +G_SpawnMarker + +Spawns a nobuild marker +================ +*/ +static void G_SpawnMarker( vec3_t origin, buildable_t buildable ) +{ + gentity_t *nb; + vec3_t mins, maxs, tmp; + + BG_FindBBoxForBuildable( buildable, mins, maxs ); + + VectorCopy( origin, tmp ); + tmp[2] += mins[2]; + + + nb = G_Spawn( ); + nb->s.modelindex = 1337; //Coder humor is win + nb->think = NoThink; + nb->nextthink = level.time; + VectorCopy( tmp, nb->s.pos.trBase ); + VectorCopy( tmp, nb->r.currentOrigin ); + nb->nobuilder = qtrue; + nb->nobuildArea = level.nobuildArea; + nb->nobuildHeight = level.nobuildHeight; + trap_LinkEntity( nb ); + + level.nobuild = qfalse; + level.nobuildArea = 0.0f; + level.nobuildHeight = 0.0f; +} + /* ================= G_BuildIfValid @@ -3685,6 +3719,10 @@ qboolean G_BuildIfValid( gentity_t *ent, buildable_t buildable ) switch( G_CanBuild( ent, buildable, dist, origin ) ) { case IBE_NONE: + if ( level.nobuild ){ + G_SpawnMarker( origin, buildable ); + return qtrue; + } G_Build( ent, buildable, origin, ent->s.apos.trBase ); return qtrue; @@ -3750,16 +3788,28 @@ qboolean G_BuildIfValid( gentity_t *ent, buildable_t buildable ) return qfalse; case IBE_SPWNWARN: + if ( level.nobuild ){ + G_SpawnMarker( origin, buildable ); + return qtrue; + } G_TriggerMenu( ent->client->ps.clientNum, MN_A_SPWNWARN ); G_Build( ent, buildable, origin, ent->s.apos.trBase ); return qtrue; case IBE_TNODEWARN: + if ( level.nobuild ){ + G_SpawnMarker( origin, buildable ); + return qtrue; + } G_TriggerMenu( ent->client->ps.clientNum, MN_H_TNODEWARN ); G_Build( ent, buildable, origin, ent->s.apos.trBase ); return qtrue; case IBE_RPTWARN: + if ( level.nobuild ){ + G_SpawnMarker( origin, buildable ); + return qtrue; + } G_TriggerMenu( ent->client->ps.clientNum, MN_H_RPTWARN ); G_Build( ent, buildable, origin, ent->s.apos.trBase ); return qtrue; @@ -4511,11 +4561,12 @@ void G_NobuildSave( void ) if( ent->nobuilder != qtrue ) continue; - s = va( "%f %f %f %f\n", + s = va( "%f %f %f %f %f\n", ent->s.pos.trBase[ 0 ], ent->s.pos.trBase[ 1 ], ent->s.pos.trBase[ 2 ], - ent->nobuildarea ); + ent->nobuildArea, + ent->nobuildHeight ); trap_FS_Write( s, strlen( s ), f ); } trap_FS_FCloseFile( f ); @@ -4539,6 +4590,7 @@ void G_NobuildLoad( void ) int i = 0; gentity_t *nb; float units; + float units2; trap_Cvar_VariableStringBuffer( "mapname", map, sizeof( map ) ); len = trap_FS_FOpenFile( va( "nobuild/%s.dat", map ), @@ -4566,17 +4618,18 @@ void G_NobuildLoad( void ) if( *nobuild == '\n' ) { i = 0; - sscanf( line, "%f %f %f %f\n", - &origin[ 0 ], &origin[ 1 ], &origin[ 2 ], &units ); + sscanf( line, "%f %f %f %f %f\n", + &origin[ 0 ], &origin[ 1 ], &origin[ 2 ], &units, &units2 ); nb = G_Spawn( ); - nb->s.modelindex = 1337; //Coder humor is awesome isn't it? + nb->s.modelindex = 0; //Coder humor is awesome isn't it? nb->think = NoThink; nb->nextthink = level.time; VectorCopy( origin, nb->s.pos.trBase ); VectorCopy( origin, nb->r.currentOrigin ); nb->nobuilder = qtrue; - nb->nobuildarea = units; + nb->nobuildArea = units; + nb->nobuildHeight = units2; trap_LinkEntity( nb ); } diff --git a/src/game/g_local.h b/src/game/g_local.h index fb06095..28d80fe 100644 --- a/src/game/g_local.h +++ b/src/game/g_local.h @@ -246,7 +246,8 @@ struct gentity_s int livetime; qboolean nobuilder; - float nobuildarea; + float nobuildArea; + float nobuildHeight; }; typedef enum @@ -769,6 +770,10 @@ typedef struct int bleeders; + qboolean nobuild; + float nobuildArea; + float nobuildHeight; + statsCounters_t alienStatsCounters; statsCounters_t humanStatsCounters; } level_locals_t; diff --git a/src/game/g_main.c b/src/game/g_main.c index 4b9ff2c..6e7158e 100644 --- a/src/game/g_main.c +++ b/src/game/g_main.c @@ -23,10 +23,6 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA #include "g_local.h" -#define QVM_VARIANT "P-G-QVM" -//#define QVM_VERSION "SVN r73" //Use this if your releasing a version or dont have svn installed. If you dont have svn, please use a syntax similar to SVN r# -#define QVM_VERSION "SVN r" SVN_VERSION //Use this if you have SVN installed - level_locals_t level; @@ -785,9 +781,8 @@ void G_InitGame( int levelTime, int randomSeed, int restart ) level.snd_fry = G_SoundIndex( "sound/misc/fry.wav" ); // FIXME standing in lava / slime - trap_Cvar_Set( "qvm_version", va( "%s %s (%s %s)", - QVM_VARIANT, - QVM_VERSION, + trap_Cvar_Set( "qvm_version", va( "%s (%s %s)", + Q3_VERSION, __DATE__, __TIME__ ) ); diff --git a/src/qcommon/q_shared.h b/src/qcommon/q_shared.h index ec80b25..a916331 100644 --- a/src/qcommon/q_shared.h +++ b/src/qcommon/q_shared.h @@ -26,12 +26,15 @@ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA // q_shared.h -- included first by ALL program modules. // A user mod should never modify this file +#define PRODUCT_NAME "p-g-qvm" +#define PRODUCT_VERSION "1.6.1" -#define VERSION_NUMBER "1.1.0" -#define Q3_VERSION "tremulous " VERSION_NUMBER -#ifndef SVN_VERSION -#define SVN_VERSION Q3_VERSION +#ifdef SVN_VERSION +# define Q3_VERSION PRODUCT_NAME " v" PRODUCT_VERSION " SVN r" SVN_VERSION +#else +# define Q3_VERSION PRODUCT_NAME " v" PRODUCT_VERSION #endif + #define CLIENT_WINDOW_TITLE "Tremulous " VERSION_NUMBER #define CLIENT_WINDOW_ICON "Tremulous" #define CONSOLE_WINDOW_TITLE "Tremulous " VERSION_NUMBER " console"