18 Dec 2008
This commit is contained in:
parent
8b5320bdda
commit
a118bbeb91
|
@ -67,5 +67,5 @@ if exist vsound\vsound.plg del /f /q vsound\vsound.plg
|
|||
echo Build succeeded!
|
||||
echo Please wait. Xash is now loading
|
||||
cd D:\Xash3D\
|
||||
quake.exe -game tmpQuArK -log -debug -dev 5 +map qctest
|
||||
quake.exe -game tmpQuArK -log -debug -dev 3 +map qctest
|
||||
:done
|
|
@ -354,15 +354,15 @@ CL_CmdButtons
|
|||
*/
|
||||
void CL_CmdButtons( usercmd_t *cmd )
|
||||
{
|
||||
if ( in_attack.state & 3 )
|
||||
if( in_attack.state & 3 )
|
||||
cmd->buttons |= IN_ATTACK;
|
||||
in_attack.state &= ~2;
|
||||
|
||||
if ( in_attack2.state & 3 )
|
||||
if( in_attack2.state & 3 )
|
||||
cmd->buttons |= IN_ATTACK2;
|
||||
in_attack2.state &= ~2;
|
||||
|
||||
if (in_use.state & 3)
|
||||
if( in_use.state & 3 )
|
||||
cmd->buttons |= IN_USE;
|
||||
in_use.state &= ~2;
|
||||
|
||||
|
|
|
@ -287,6 +287,7 @@ void CL_ParseConfigString( sizebuf_t *msg )
|
|||
else if( i >= CS_USER_MESSAGES && i < CS_USER_MESSAGES+MAX_USER_MESSAGES )
|
||||
{
|
||||
// FIXME: register user message here
|
||||
// Msg("PrepUserMessage: %s[svc_%i]\n", cl.configstrings[i], i - CS_USER_MESSAGES );
|
||||
}
|
||||
else if( i >= CS_CLASSNAMES && i < CS_CLASSNAMES+MAX_CLASSNAMES )
|
||||
{
|
||||
|
|
|
@ -630,7 +630,7 @@ void Host_Init( int argc, char **argv)
|
|||
Cmd_AddCommand ("crash", Host_Crash_f, "a way to force a bus error for development reasons");
|
||||
}
|
||||
|
||||
host_cheats = Cvar_Get( "host_cheats", "1", CVAR_SYSTEMINFO, "allow cheat variables to enable" );
|
||||
host_cheats = Cvar_Get( "sv_cheats", "1", CVAR_SYSTEMINFO, "allow cheat variables to enable" );
|
||||
host_maxfps = Cvar_Get( "host_maxfps", "100", CVAR_ARCHIVE, "host fps upper limit" );
|
||||
host_frametime = Cvar_Get("host_frametime", "0.1", CVAR_SERVERINFO, "host frametime (only for test!)" );
|
||||
host_maxclients = Cvar_Get("host_maxclients", "1", CVAR_SERVERINFO|CVAR_LATCH, "server maxplayers limit" );
|
||||
|
|
|
@ -26,7 +26,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#include "svgame_api.h"
|
||||
|
||||
//=============================================================================
|
||||
#define NUM_FOR_EDICT(e) ((int)((edict_t *)(e) - svg.edicts))
|
||||
#define NUM_FOR_EDICT(e) ((int)((edict_t *)(e) - game.edicts))
|
||||
#define EDICT_NUM( num ) _EDICT_NUM( num, __FILE__, __LINE__ )
|
||||
|
||||
#define AREA_SOLID 1
|
||||
|
@ -200,7 +200,12 @@ typedef struct
|
|||
int msg_sizes[MAX_USER_MESSAGES]; // user messages bounds checker
|
||||
int msg_leftsize; // left in bytes
|
||||
int msg_index; // for debug messages
|
||||
edict_t *edicts;
|
||||
|
||||
union
|
||||
{
|
||||
edict_t *edicts; // acess by edict number
|
||||
void *vp; // acess by offset in bytes
|
||||
};
|
||||
|
||||
// library exports table
|
||||
word *ordinals;
|
||||
|
@ -208,6 +213,8 @@ typedef struct
|
|||
char *names[MAX_SYSPATH]; // max 1024 exports supported
|
||||
int num_ordinals; // actual exports count
|
||||
dword funcBase; // base offset
|
||||
|
||||
int hStringTable; // stringtable handle
|
||||
} game_static_t;
|
||||
|
||||
typedef struct
|
||||
|
@ -247,7 +254,7 @@ typedef struct
|
|||
extern netadr_t master_adr[MAX_MASTERS]; // address of the master server
|
||||
extern const char *ed_name[];
|
||||
extern server_static_t svs; // persistant server info
|
||||
extern game_static_t svg; // persistant game info
|
||||
extern game_static_t game; // persistant game info
|
||||
extern server_t sv; // local server
|
||||
|
||||
extern cvar_t *sv_paused;
|
||||
|
@ -365,7 +372,7 @@ void SV_Error (char *error, ...);
|
|||
//
|
||||
bool SV_LoadProgs( const char *name );
|
||||
void SV_UnloadProgs( void );
|
||||
void SV_InitEdict (edict_t *e);
|
||||
void SV_InitEdict( edict_t *pEdict );
|
||||
void SV_ConfigString (int index, const char *val);
|
||||
void SV_SetModel (edict_t *ent, const char *name);
|
||||
void SV_CreatePhysBody( edict_t *ent );
|
||||
|
@ -375,18 +382,20 @@ void SV_CopyTraceToGlobal( trace_t *trace );
|
|||
void SV_CopyTraceResult( TraceResult *out, trace_t trace );
|
||||
float SV_AngleMod( float ideal, float current, float speed );
|
||||
void SV_SpawnEntities( const char *mapname, script_t *entities );
|
||||
string_t pfnAllocString( const char *szValue );
|
||||
const char *pfnGetString( string_t iString );
|
||||
|
||||
_inline edict_t *_EDICT_NUM( int n, const char * file, const int line )
|
||||
{
|
||||
if((n >= 0) && (n < svs.globals->maxEntities))
|
||||
return svg.edicts + n;
|
||||
return game.edicts + n;
|
||||
Host_Error( "EDICT_NUM: bad number %i (called at %s:%i)\n", n, file, line );
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// for constant strings
|
||||
#define STRING( offset ) (const char *)( svs.globals->pStringBase + (int)offset )
|
||||
#define MAKE_STRING(str) ((int)str - (int)STRING( 0 ))
|
||||
#define STRING( offset ) pfnGetString( offset )
|
||||
#define MAKE_STRING(str) pfnAllocString( str )
|
||||
|
||||
//
|
||||
// sv_studio.c
|
||||
|
@ -401,7 +410,6 @@ bool SV_CreateMeshBuffer( edict_t *in, cmodel_t *out );
|
|||
//
|
||||
void SV_StartParticle( const float *org, const float *dir, int color, int count );
|
||||
edict_t *SV_AllocEdict( void );
|
||||
void SV_InitEdict( edict_t *pEdict );
|
||||
void SV_FreeEdict( edict_t *pEdict );
|
||||
bool SV_ClientConnect (edict_t *ent, char *userinfo);
|
||||
void SV_TouchTriggers (edict_t *ent);
|
||||
|
|
|
@ -481,7 +481,6 @@ void SV_PutClientInServer( edict_t *ent )
|
|||
edict_t *viewmodel;
|
||||
int i;
|
||||
|
||||
Com_Assert( 1 );
|
||||
index = NUM_FOR_EDICT( ent ) - 1;
|
||||
client = ent->pvEngineData->client;
|
||||
|
||||
|
@ -504,10 +503,7 @@ void SV_PutClientInServer( edict_t *ent )
|
|||
VectorCopy( ent->v.angles, viewmodel->v.angles );
|
||||
viewmodel->v.model = ent->v.viewmodel;
|
||||
viewmodel->v.movetype = MOVETYPE_FOLLOW;
|
||||
|
||||
// make cross links for consistency
|
||||
viewmodel->v.aiment = ent;
|
||||
ent->v.aiment = viewmodel;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
@ -1,158 +0,0 @@
|
|||
//=======================================================================
|
||||
// Copyright XashXT Group 2008 ©
|
||||
// sv_edict.h - server prvm edict
|
||||
//=======================================================================
|
||||
#ifndef SV_EDICT_H
|
||||
#define SV_EDICT_H
|
||||
|
||||
struct sv_globalvars_s
|
||||
{
|
||||
int pad[34];
|
||||
int pev;
|
||||
int other;
|
||||
int world;
|
||||
float time;
|
||||
float frametime;
|
||||
float serverflags;
|
||||
string_t mapname;
|
||||
string_t startspot;
|
||||
vec3_t spotoffset;
|
||||
float deathmatch;
|
||||
float teamplay;
|
||||
float coop;
|
||||
float total_secrets;
|
||||
float found_secrets;
|
||||
float total_monsters;
|
||||
float killed_monsters;
|
||||
vec3_t v_forward;
|
||||
vec3_t v_right;
|
||||
vec3_t v_up;
|
||||
float trace_allsolid;
|
||||
float trace_startsolid;
|
||||
float trace_fraction;
|
||||
float trace_plane_dist;
|
||||
vec3_t trace_endpos;
|
||||
vec3_t trace_plane_normal;
|
||||
float trace_contents;
|
||||
float trace_hitgroup;
|
||||
float trace_flags;
|
||||
int trace_ent;
|
||||
func_t StartFrame;
|
||||
func_t EndFrame;
|
||||
func_t PlayerPreThink;
|
||||
func_t PlayerPostThink;
|
||||
func_t ClientConnect;
|
||||
func_t ClientCommand;
|
||||
func_t ClientDisconnect;
|
||||
func_t PutClientInServer;
|
||||
func_t KeyValue;
|
||||
func_t ClientUserInfoChanged;
|
||||
func_t EmitSound;
|
||||
};
|
||||
|
||||
struct sv_entvars_s
|
||||
{
|
||||
string_t classname;
|
||||
string_t globalname;
|
||||
int chain;
|
||||
func_t precache;
|
||||
func_t activate;
|
||||
func_t blocked;
|
||||
func_t touch;
|
||||
func_t think;
|
||||
func_t use;
|
||||
vec3_t origin;
|
||||
vec3_t angles;
|
||||
float modelindex;
|
||||
vec3_t old_origin;
|
||||
vec3_t old_angles;
|
||||
vec3_t velocity;
|
||||
vec3_t avelocity;
|
||||
vec3_t m_pcentre[3];
|
||||
vec3_t m_pmatrix[3];
|
||||
vec3_t movedir;
|
||||
vec3_t force;
|
||||
vec3_t torque;
|
||||
vec3_t post_origin;
|
||||
vec3_t post_angles;
|
||||
vec3_t origin_offset;
|
||||
vec3_t absmin;
|
||||
vec3_t absmax;
|
||||
vec3_t mins;
|
||||
vec3_t maxs;
|
||||
vec3_t size;
|
||||
float mass;
|
||||
float solid;
|
||||
float scale;
|
||||
float contents;
|
||||
float movetype;
|
||||
float waterlevel;
|
||||
float watertype;
|
||||
float ltime;
|
||||
string_t model;
|
||||
float skin;
|
||||
float body;
|
||||
float frame;
|
||||
float speed;
|
||||
float sequence;
|
||||
float animtime;
|
||||
float framerate;
|
||||
float effects;
|
||||
float renderfx;
|
||||
float rendermode;
|
||||
float renderamt;
|
||||
vec3_t rendercolor;
|
||||
float gaitsequence;
|
||||
float colormap;
|
||||
float style;
|
||||
float flags;
|
||||
float aiflags;
|
||||
float spawnflags;
|
||||
float controller[16];
|
||||
float blending[16];
|
||||
vec3_t v_angle;
|
||||
vec3_t view_ofs;
|
||||
float fixangle;
|
||||
vec3_t punchangle;
|
||||
float button0;
|
||||
float button1;
|
||||
float button2;
|
||||
float impulse;
|
||||
float weapon;
|
||||
float items;
|
||||
float currentammo;
|
||||
float v_sequence;
|
||||
float v_frame;
|
||||
string_t v_model;
|
||||
float v_body;
|
||||
float v_skin;
|
||||
float p_sequence;
|
||||
float p_frame;
|
||||
string_t p_model;
|
||||
float p_body;
|
||||
float p_skin;
|
||||
string_t loopsound;
|
||||
float loopsndvol;
|
||||
float loopsndattn;
|
||||
int owner;
|
||||
int enemy;
|
||||
int aiment;
|
||||
int goalentity;
|
||||
float teleport_time;
|
||||
float ideal_yaw;
|
||||
float yaw_speed;
|
||||
float m_flGroundSpeed;
|
||||
float m_flFrameRate;
|
||||
float m_flWeaponFrameRate;
|
||||
int groundentity;
|
||||
float takedamage;
|
||||
float nextthink;
|
||||
float gravity;
|
||||
float health;
|
||||
float frags;
|
||||
float team;
|
||||
};
|
||||
|
||||
#define PROG_CRC_SERVER 8505
|
||||
|
||||
#endif//SV_EDICT_H
|
|
@ -67,7 +67,6 @@ void SV_UpdateEntityState( edict_t *ent )
|
|||
ent->pvEngineData->s.renderamt = ent->v.renderamt; // alpha value
|
||||
ent->pvEngineData->s.model.framerate = ent->v.framerate;
|
||||
ent->pvEngineData->s.model.animtime = (int)(1000.0 * ent->v.animtime) * 0.001; // sequence time
|
||||
ent->pvEngineData->s.aiment = NUM_FOR_EDICT( ent->v.aiment ); // viewmodel parent
|
||||
ent->pvEngineData->s.model.scale = ent->v.scale; // shared client and render flags
|
||||
VectorCopy( ent->v.rendercolor, ent->pvEngineData->s.rendercolor );
|
||||
|
||||
|
@ -92,11 +91,14 @@ void SV_UpdateEntityState( edict_t *ent )
|
|||
|
||||
if( ent->pvEngineData->s.ed_type == ED_VIEWMODEL )
|
||||
{
|
||||
if( !ent->v.aiment ) return; // no aiment
|
||||
|
||||
// copy v_model state from client to viemodel entity
|
||||
client = ent->v.aiment;
|
||||
|
||||
// update both arrays, because viewmodel are hidden for qc-coders
|
||||
ent->v.modelindex = SV_ModelIndex( STRING( client->v.viewmodel ));
|
||||
ent->pvEngineData->s.aiment = NUM_FOR_EDICT( client ); // viewmodel parent
|
||||
ent->pvEngineData->s.model.index = ent->v.modelindex;
|
||||
ent->pvEngineData->s.model.frame = ent->v.frame = client->v.weaponframe;
|
||||
ent->pvEngineData->s.model.body = ent->v.body = client->v.weaponbody;
|
||||
|
@ -264,6 +266,7 @@ static void SV_AddEntitiesToPacket( vec3_t origin, client_frame_t *frame, sv_ent
|
|||
for( e = 1; e < svs.globals->numEntities; e++ )
|
||||
{
|
||||
ent = EDICT_NUM( e );
|
||||
if( ent->free ) continue;
|
||||
force = false; // clear forceflag
|
||||
|
||||
// completely ignore dormant entity
|
||||
|
|
|
@ -27,18 +27,18 @@ void Sys_FreeNameFuncGlobals( void )
|
|||
{
|
||||
int i;
|
||||
|
||||
if( svg.ordinals ) Mem_Free( svg.ordinals );
|
||||
if( svg.funcs) Mem_Free( svg.funcs);
|
||||
if( game.ordinals ) Mem_Free( game.ordinals );
|
||||
if( game.funcs) Mem_Free( game.funcs);
|
||||
|
||||
for( i = 0; i < svg.num_ordinals; i++ )
|
||||
for( i = 0; i < game.num_ordinals; i++ )
|
||||
{
|
||||
if( svg.names[i] )
|
||||
Mem_Free( svg.names[i] );
|
||||
if( game.names[i] )
|
||||
Mem_Free( game.names[i] );
|
||||
}
|
||||
|
||||
svg.num_ordinals = 0;
|
||||
svg.ordinals = NULL;
|
||||
svg.funcs = NULL;
|
||||
game.num_ordinals = 0;
|
||||
game.ordinals = NULL;
|
||||
game.funcs = NULL;
|
||||
}
|
||||
|
||||
char *Sys_GetMSVCName( const char *in_name )
|
||||
|
@ -51,13 +51,13 @@ char *Sys_GetMSVCName( const char *in_name )
|
|||
{
|
||||
int len = pos - in_name;
|
||||
|
||||
out_name = copystring( in_name + 1 ); // strip off the leading '?'
|
||||
out_name[len-1] = 0; // terminate string at the "@@"
|
||||
// strip off the leading '?'
|
||||
out_name = com.stralloc( svs.private, in_name + 1, __FILE__, __LINE__ );
|
||||
out_name[len-1] = 0; // terminate string at the "@@"
|
||||
return out_name;
|
||||
}
|
||||
}
|
||||
|
||||
return copystring( in_name );
|
||||
return com.stralloc( svs.private, in_name, __FILE__, __LINE__ );
|
||||
}
|
||||
|
||||
bool Sys_LoadSymbols( const char *filename )
|
||||
|
@ -79,8 +79,8 @@ bool Sys_LoadSymbols( const char *filename )
|
|||
dword *p_Names = NULL;
|
||||
int i, index;
|
||||
|
||||
for( i = 0; i < svg.num_ordinals; i++ )
|
||||
svg.names[i] = NULL;
|
||||
for( i = 0; i < game.num_ordinals; i++ )
|
||||
game.names[i] = NULL;
|
||||
|
||||
f = FS_Open( filename, "rb" );
|
||||
if( !f )
|
||||
|
@ -189,9 +189,9 @@ bool Sys_LoadSymbols( const char *filename )
|
|||
return false;
|
||||
}
|
||||
|
||||
svg.num_ordinals = export_directory.NumberOfNames; // also number of ordinals
|
||||
game.num_ordinals = export_directory.NumberOfNames; // also number of ordinals
|
||||
|
||||
if( svg.num_ordinals > MAX_SYSPATH )
|
||||
if( game.num_ordinals > MAX_SYSPATH )
|
||||
{
|
||||
MsgDev( D_ERROR, "Sys_LoadSymbols: %s too many exports\n", filename );
|
||||
FS_Close( f );
|
||||
|
@ -207,9 +207,9 @@ bool Sys_LoadSymbols( const char *filename )
|
|||
return false;
|
||||
}
|
||||
|
||||
svg.ordinals = Z_Malloc( svg.num_ordinals * sizeof( word ));
|
||||
game.ordinals = Z_Malloc( game.num_ordinals * sizeof( word ));
|
||||
|
||||
if( FS_Read( f, svg.ordinals, svg.num_ordinals * sizeof( word )) != (svg.num_ordinals * sizeof( word )))
|
||||
if( FS_Read( f, game.ordinals, game.num_ordinals * sizeof( word )) != (game.num_ordinals * sizeof( word )))
|
||||
{
|
||||
Sys_FreeNameFuncGlobals();
|
||||
MsgDev( D_ERROR, "Sys_LoadSymbols: %s error during reading ordinals table\n", filename );
|
||||
|
@ -225,9 +225,9 @@ bool Sys_LoadSymbols( const char *filename )
|
|||
return false;
|
||||
}
|
||||
|
||||
svg.funcs = Z_Malloc( svg.num_ordinals * sizeof( dword ));
|
||||
game.funcs = Z_Malloc( game.num_ordinals * sizeof( dword ));
|
||||
|
||||
if( FS_Read( f, svg.funcs, svg.num_ordinals * sizeof( dword )) != (svg.num_ordinals * sizeof( dword )))
|
||||
if( FS_Read( f, game.funcs, game.num_ordinals * sizeof( dword )) != (game.num_ordinals * sizeof( dword )))
|
||||
{
|
||||
Sys_FreeNameFuncGlobals();
|
||||
MsgDev( D_ERROR, "Sys_LoadSymbols: %s error during reading export address section\n", filename );
|
||||
|
@ -245,9 +245,9 @@ bool Sys_LoadSymbols( const char *filename )
|
|||
return false;
|
||||
}
|
||||
|
||||
p_Names = Z_Malloc( svg.num_ordinals * sizeof( dword ));
|
||||
p_Names = Z_Malloc( game.num_ordinals * sizeof( dword ));
|
||||
|
||||
if( FS_Read( f, p_Names, svg.num_ordinals * sizeof( dword )) != (svg.num_ordinals * sizeof( dword )))
|
||||
if( FS_Read( f, p_Names, game.num_ordinals * sizeof( dword )) != (game.num_ordinals * sizeof( dword )))
|
||||
{
|
||||
Sys_FreeNameFuncGlobals();
|
||||
if( p_Names ) Mem_Free( p_Names );
|
||||
|
@ -256,7 +256,7 @@ bool Sys_LoadSymbols( const char *filename )
|
|||
return false;
|
||||
}
|
||||
|
||||
for( i = 0; i < svg.num_ordinals; i++ )
|
||||
for( i = 0; i < game.num_ordinals; i++ )
|
||||
{
|
||||
name_offset = p_Names[i] - edata_delta;
|
||||
|
||||
|
@ -265,13 +265,13 @@ bool Sys_LoadSymbols( const char *filename )
|
|||
if( FS_Seek( f, name_offset, SEEK_SET ) != -1 )
|
||||
{
|
||||
Sys_FsGetString( f, function_name );
|
||||
svg.names[i] = Sys_GetMSVCName( function_name );
|
||||
game.names[i] = Sys_GetMSVCName( function_name );
|
||||
}
|
||||
else break;
|
||||
}
|
||||
}
|
||||
|
||||
if( i != svg.num_ordinals )
|
||||
if( i != game.num_ordinals )
|
||||
{
|
||||
Sys_FreeNameFuncGlobals();
|
||||
if( p_Names ) Mem_Free( p_Names );
|
||||
|
@ -281,15 +281,15 @@ bool Sys_LoadSymbols( const char *filename )
|
|||
}
|
||||
FS_Close( f );
|
||||
|
||||
for( i = 0; i < svg.num_ordinals; i++ )
|
||||
for( i = 0; i < game.num_ordinals; i++ )
|
||||
{
|
||||
if( com.strcmp( "GiveFnptrsToDll", svg.names[i] ))
|
||||
if( !com.strcmp( "GiveFnptrsToDll", game.names[i] ))
|
||||
{
|
||||
void *fn_offset;
|
||||
|
||||
index = svg.ordinals[i];
|
||||
index = game.ordinals[i];
|
||||
fn_offset = (void *)Sys_GetProcAddress( svs.game, "GiveFnptrsToDll" );
|
||||
svg.funcBase = (dword)(fn_offset) - svg.funcs[index];
|
||||
game.funcBase = (dword)(fn_offset) - game.funcs[index];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -622,6 +622,7 @@ bool SV_EntitiesIn( bool mode, vec3_t v1, vec3_t v2 )
|
|||
void SV_InitEdict( edict_t *pEdict )
|
||||
{
|
||||
Com_Assert( pEdict == NULL );
|
||||
Com_Assert( pEdict->pvServerData != NULL );
|
||||
|
||||
pEdict->v.pContainingEntity = pEdict; // make cross-links for consistency
|
||||
pEdict->pvEngineData = (ed_priv_t *)Mem_Alloc( svs.mempool, sizeof( ed_priv_t ));
|
||||
|
@ -632,6 +633,9 @@ void SV_InitEdict( edict_t *pEdict )
|
|||
|
||||
void SV_FreeEdict( edict_t *pEdict )
|
||||
{
|
||||
Com_Assert( pEdict == NULL );
|
||||
Com_Assert( pEdict->free );
|
||||
|
||||
// unlink from world
|
||||
SV_UnlinkEdict( pEdict );
|
||||
pe->RemoveBody( pEdict->pvEngineData->physbody );
|
||||
|
@ -1019,7 +1023,7 @@ pfnSetModel
|
|||
*/
|
||||
void pfnSetModel( edict_t *e, const char *m )
|
||||
{
|
||||
if( e == svg.edicts )
|
||||
if( e == game.edicts )
|
||||
{
|
||||
MsgDev( D_WARN, "SV_SetModel: can't modify world entity\n" );
|
||||
return;
|
||||
|
@ -1088,7 +1092,7 @@ void pfnSetSize( edict_t *e, const float *rgflMin, const float *rgflMax )
|
|||
MsgDev( D_ERROR, "SV_SetSize: entity not exist\n" );
|
||||
return;
|
||||
}
|
||||
else if( e == svg.edicts )
|
||||
else if( e == game.edicts )
|
||||
{
|
||||
MsgDev( D_ERROR, "SV_SetSize: can't modify world entity\n" );
|
||||
return;
|
||||
|
@ -1211,7 +1215,7 @@ void pfnChangeYaw( edict_t* ent )
|
|||
{
|
||||
float current;
|
||||
|
||||
if( ent == svg.edicts )
|
||||
if( ent == game.edicts )
|
||||
{
|
||||
MsgDev( D_WARN, "SV_ChangeYaw: can't modify world entity\n" );
|
||||
return;
|
||||
|
@ -1236,7 +1240,7 @@ void pfnChangePitch( edict_t* ent )
|
|||
{
|
||||
float current;
|
||||
|
||||
if( ent == svg.edicts )
|
||||
if( ent == game.edicts )
|
||||
{
|
||||
MsgDev( D_WARN, "SV_ChangePitch: can't modify world entity\n" );
|
||||
return;
|
||||
|
@ -1263,7 +1267,9 @@ edict_t* pfnFindEntityByString( edict_t *pStartEdict, const char *pszField, cons
|
|||
const char *t;
|
||||
edict_t *ed;
|
||||
|
||||
e = NUM_FOR_EDICT( pStartEdict );
|
||||
if( !pStartEdict )
|
||||
e = NUM_FOR_EDICT( game.edicts );
|
||||
else e = NUM_FOR_EDICT( pStartEdict );
|
||||
if( !pszValue ) pszValue = "";
|
||||
|
||||
if( !com.strcmp( pszField, "classname" ))
|
||||
|
@ -1289,7 +1295,7 @@ edict_t* pfnFindEntityByString( edict_t *pStartEdict, const char *pszField, cons
|
|||
if( !com.strcmp( t, pszValue ))
|
||||
return ed;
|
||||
}
|
||||
return svg.edicts;
|
||||
return game.edicts;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1300,7 +1306,7 @@ pfnGetEntityIllum
|
|||
*/
|
||||
int pfnGetEntityIllum( edict_t* pEnt )
|
||||
{
|
||||
if( pEnt == svg.edicts )
|
||||
if( pEnt == game.edicts )
|
||||
{
|
||||
MsgDev( D_WARN, "SV_GetEntityIllum: can't get light level at world entity\n" );
|
||||
return 0;
|
||||
|
@ -1325,11 +1331,12 @@ edict_t* pfnFindEntityInSphere( edict_t *pStartEdict, const float *org, float ra
|
|||
edict_t *ent, *chain;
|
||||
float radSquare;
|
||||
vec3_t eorg;
|
||||
int e;
|
||||
int e = 0;
|
||||
|
||||
radSquare = rad * rad;
|
||||
chain = pStartEdict;
|
||||
e = NUM_FOR_EDICT( pStartEdict );
|
||||
if( pStartEdict )
|
||||
e = NUM_FOR_EDICT( pStartEdict );
|
||||
|
||||
for( e++; e < svs.globals->numEntities; e++ )
|
||||
{
|
||||
|
@ -1367,7 +1374,7 @@ edict_t* pfnFindClientInPVS( edict_t *pEdict )
|
|||
|
||||
for( i = 1; i < numents; i++ )
|
||||
{
|
||||
pClient = svg.edicts + i;
|
||||
pClient = game.edicts + i;
|
||||
if( pClient->free ) continue;
|
||||
if( SV_EntitiesIn( DVIS_PVS, pEdict->v.origin, pClient->v.origin ))
|
||||
{
|
||||
|
@ -1396,7 +1403,7 @@ edict_t* pfnFindClientInPHS( edict_t *pEdict )
|
|||
|
||||
for( i = 1; i < numents; i++ )
|
||||
{
|
||||
pClient = svg.edicts + i;
|
||||
pClient = game.edicts + i;
|
||||
if( pClient->free ) continue;
|
||||
if( SV_EntitiesIn( DVIS_PHS, pClient->v.origin, pEdict->v.origin ))
|
||||
{
|
||||
|
@ -1424,7 +1431,7 @@ edict_t* pfnEntitiesInPVS( edict_t *pplayer )
|
|||
|
||||
for( i = svs.globals->maxClients; i < numents; i++ )
|
||||
{
|
||||
pEdict = svg.edicts + i;
|
||||
pEdict = game.edicts + i;
|
||||
if( pEdict->free ) continue;
|
||||
if( SV_EntitiesIn( DVIS_PVS, pEdict->v.origin, pplayer->v.origin ))
|
||||
{
|
||||
|
@ -1452,7 +1459,7 @@ edict_t* pfnEntitiesInPHS( edict_t *pplayer )
|
|||
|
||||
for( i = svs.globals->maxClients; i < numents; i++ )
|
||||
{
|
||||
pEdict = svg.edicts + i;
|
||||
pEdict = game.edicts + i;
|
||||
if( pEdict->free ) continue;
|
||||
if( SV_EntitiesIn( DVIS_PHS, pEdict->v.origin, pplayer->v.origin ))
|
||||
{
|
||||
|
@ -1511,7 +1518,7 @@ void pfnRemoveEntity( edict_t* e )
|
|||
// never free client or world entity
|
||||
if( NUM_FOR_EDICT( e ) < svs.globals->maxClients )
|
||||
{
|
||||
MsgDev( D_ERROR, "SV_RemoveEntity: can't delete %s\n", (e == svg.edicts) ? "world" : "client" );
|
||||
MsgDev( D_ERROR, "SV_RemoveEntity: can't delete %s\n", (e == game.edicts) ? "world" : "client" );
|
||||
return;
|
||||
}
|
||||
SV_FreeEdict( e );
|
||||
|
@ -1534,7 +1541,6 @@ edict_t* pfnCreateNamedEntity( string_t className )
|
|||
pszClassName = STRING( className );
|
||||
|
||||
// also register classname to send for client
|
||||
Com_Assert( pszClassName == NULL || !pszClassName[0] );
|
||||
ed->pvEngineData->s.classname = SV_ClassIndex( pszClassName );
|
||||
|
||||
return ed;
|
||||
|
@ -1576,7 +1582,7 @@ int pfnDropToFloor( edict_t* e )
|
|||
trace_t trace;
|
||||
|
||||
// ignore world silently
|
||||
if( e == svg.edicts ) return false;
|
||||
if( e == game.edicts ) return false;
|
||||
if( e->free )
|
||||
{
|
||||
MsgDev( D_ERROR, "SV_DropToFloor: can't modify free entity\n" );
|
||||
|
@ -1654,7 +1660,7 @@ int pfnWalkMove( edict_t *ent, float yaw, float dist, int iMode )
|
|||
vec3_t move;
|
||||
|
||||
// ignore world silently
|
||||
if( ent == svg.edicts ) return false;
|
||||
if( ent == game.edicts ) return false;
|
||||
if( ent->free )
|
||||
{
|
||||
MsgDev( D_WARN, "SV_DropToFloor: can't modify free entity\n" );
|
||||
|
@ -1678,7 +1684,7 @@ pfnSetOrigin
|
|||
void pfnSetOrigin( edict_t *e, const float *rgflOrigin )
|
||||
{
|
||||
// ignore world silently
|
||||
if( e == svg.edicts ) return;
|
||||
if( e == game.edicts ) return;
|
||||
if( e->free )
|
||||
{
|
||||
MsgDev( D_ERROR, "SV_SetOrigin: can't modify free entity\n" );
|
||||
|
@ -1701,7 +1707,7 @@ pfnSetAngles
|
|||
*/
|
||||
void pfnSetAngles( edict_t *e, const float *rgflAngles )
|
||||
{
|
||||
if( e == svg.edicts ) return;
|
||||
if( e == game.edicts ) return;
|
||||
if( e->free )
|
||||
{
|
||||
MsgDev( D_ERROR, "SV_SetAngles: can't modify free entity\n" );
|
||||
|
@ -1768,7 +1774,7 @@ void pfnTraceToss( edict_t* pent, edict_t* pentToIgnore, TraceResult *ptr )
|
|||
{
|
||||
trace_t trace;
|
||||
|
||||
if( pent == svg.edicts ) return;
|
||||
if( pent == game.edicts ) return;
|
||||
trace = SV_TraceToss( pent, pentToIgnore );
|
||||
SV_CopyTraceResult( ptr, trace );
|
||||
}
|
||||
|
@ -1854,7 +1860,7 @@ void pfnGetAimVector( edict_t* ent, float speed, float *rgflReturn )
|
|||
fNoFriendlyFire = Cvar_VariableValue( "mp_friendlyfire" );
|
||||
VectorCopy( svs.globals->v_forward, rgflReturn ); // assume failure if it returns early
|
||||
|
||||
if( ent == svg.edicts ) return;
|
||||
if( ent == game.edicts ) return;
|
||||
if( ent->free )
|
||||
{
|
||||
MsgDev( D_ERROR, "SV_GetAimVector: can't aiming at free entity\n" );
|
||||
|
@ -1880,7 +1886,7 @@ void pfnGetAimVector( edict_t* ent, float speed, float *rgflReturn )
|
|||
bestdist = 0.5f;
|
||||
bestent = NULL;
|
||||
|
||||
check = svg.edicts + 1; // start at first client
|
||||
check = game.edicts + 1; // start at first client
|
||||
for( i = 1; i < svs.globals->numEntities; i++, check++ )
|
||||
{
|
||||
if( check->v.takedamage != DAMAGE_AIM ) continue;
|
||||
|
@ -2024,14 +2030,14 @@ void pfnMessageBegin( int msg_dest, int msg_type, const float *pOrigin, edict_t
|
|||
{
|
||||
// some users can send message with engine index
|
||||
// reduce number to avoid overflow problems or cheating
|
||||
svg.msg_index = bound( svc_bad, msg_type, svc_nop );
|
||||
game.msg_index = bound( svc_bad, msg_type, svc_nop );
|
||||
|
||||
MSG_Begin( svg.msg_index );
|
||||
MSG_Begin( game.msg_index );
|
||||
|
||||
// save message destination
|
||||
if( pOrigin ) VectorCopy( pOrigin, svs.msg_org );
|
||||
else VectorClear( svs.msg_org );
|
||||
svg.msg_leftsize = svg.msg_sizes[msg_type];
|
||||
game.msg_leftsize = game.msg_sizes[msg_type];
|
||||
svs.msg_dest = msg_dest;
|
||||
svs.msg_ent = ed;
|
||||
}
|
||||
|
@ -2044,11 +2050,13 @@ pfnMessageEnd
|
|||
*/
|
||||
void pfnMessageEnd( void )
|
||||
{
|
||||
if( svg.msg_leftsize != 0xFFFF && svg.msg_leftsize != 0 )
|
||||
return;//
|
||||
|
||||
if( game.msg_leftsize != 0xFFFF && game.msg_leftsize != 0 )
|
||||
{
|
||||
const char *name = sv.configstrings[CS_USER_MESSAGES + svg.msg_index];
|
||||
int size = svg.msg_sizes[svg.msg_index];
|
||||
int realsize = size - svg.msg_leftsize;
|
||||
const char *name = sv.configstrings[CS_USER_MESSAGES + game.msg_index];
|
||||
int size = game.msg_sizes[game.msg_index];
|
||||
int realsize = size - game.msg_leftsize;
|
||||
|
||||
MsgDev( D_ERROR, "SV_Message: %s expected %i bytes, it written %i\n", name, size, realsize );
|
||||
MSG_Clear( &sv.multicast );
|
||||
|
@ -2068,7 +2076,7 @@ pfnWriteByte
|
|||
void pfnWriteByte( int iValue )
|
||||
{
|
||||
MSG_WriteByte( &sv.multicast, (int)iValue );
|
||||
if( svg.msg_leftsize != 0xFFFF ) svg.msg_leftsize--;
|
||||
if( game.msg_leftsize != 0xFFFF ) game.msg_leftsize--;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2080,7 +2088,7 @@ pfnWriteChar
|
|||
void pfnWriteChar( int iValue )
|
||||
{
|
||||
MSG_WriteChar( &sv.multicast, (int)iValue );
|
||||
if( svg.msg_leftsize != 0xFFFF ) svg.msg_leftsize--;
|
||||
if( game.msg_leftsize != 0xFFFF ) game.msg_leftsize--;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2092,7 +2100,7 @@ pfnWriteShort
|
|||
void pfnWriteShort( int iValue )
|
||||
{
|
||||
MSG_WriteShort( &sv.multicast, (int)iValue );
|
||||
if( svg.msg_leftsize != 0xFFFF ) svg.msg_leftsize -= 2;
|
||||
if( game.msg_leftsize != 0xFFFF ) game.msg_leftsize -= 2;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2104,7 +2112,7 @@ pfnWriteLong
|
|||
void pfnWriteLong( int iValue )
|
||||
{
|
||||
MSG_WriteLong( &sv.multicast, (int)iValue );
|
||||
if( svg.msg_leftsize != 0xFFFF ) svg.msg_leftsize -= 4;
|
||||
if( game.msg_leftsize != 0xFFFF ) game.msg_leftsize -= 4;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2116,7 +2124,7 @@ pfnWriteAngle
|
|||
void pfnWriteAngle( float flValue )
|
||||
{
|
||||
MSG_WriteAngle32( &sv.multicast, flValue );
|
||||
if( svg.msg_leftsize != 0xFFFF ) svg.msg_leftsize -= 4;
|
||||
if( game.msg_leftsize != 0xFFFF ) game.msg_leftsize -= 4;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2128,7 +2136,7 @@ pfnWriteCoord
|
|||
void pfnWriteCoord( float flValue )
|
||||
{
|
||||
MSG_WriteCoord32( &sv.multicast, flValue );
|
||||
if( svg.msg_leftsize != 0xFFFF ) svg.msg_leftsize -= 4;
|
||||
if( game.msg_leftsize != 0xFFFF ) game.msg_leftsize -= 4;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2146,8 +2154,8 @@ void pfnWriteString( const char *sz )
|
|||
total_size = sv.multicast.cursize - cur_size;
|
||||
|
||||
// some messages with constant strings can be marked as known sized
|
||||
if( svg.msg_leftsize != 0xFFFF )
|
||||
svg.msg_leftsize -= total_size;
|
||||
if( game.msg_leftsize != 0xFFFF )
|
||||
game.msg_leftsize -= total_size;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2161,7 +2169,7 @@ void pfnWriteEntity( int iValue )
|
|||
if( iValue < 0 || iValue > svs.globals->numEntities )
|
||||
Host_Error( "MSG_WriteEntity: invalid entnumber %d\n", iValue );
|
||||
MSG_WriteShort( &sv.multicast, iValue );
|
||||
if( svg.msg_leftsize != 0xFFFF ) svg.msg_leftsize -= 2;
|
||||
if( game.msg_leftsize != 0xFFFF ) game.msg_leftsize -= 2;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2247,15 +2255,15 @@ pfnPvAllocEntPrivateData
|
|||
*/
|
||||
void *pfnPvAllocEntPrivateData( edict_t *pEdict, long cb )
|
||||
{
|
||||
Msg("Edict: %s alloc %s\n", STRING( pEdict->v.classname ), memprint( cb ));
|
||||
Com_Assert( pEdict == NULL );
|
||||
|
||||
// to avoid multiple alloc
|
||||
pEdict->pvServerData = (void *)Mem_Alloc( svs.private, cb );
|
||||
pEdict->pvServerData = (void *)Mem_Realloc( svs.private, pEdict->pvServerData, cb );
|
||||
|
||||
return pEdict->pvServerData;
|
||||
}
|
||||
|
||||
/*
|
||||
/*
|
||||
=============
|
||||
pfnFreeEntPrivateData
|
||||
|
||||
|
@ -2263,7 +2271,8 @@ pfnFreeEntPrivateData
|
|||
*/
|
||||
void pfnFreeEntPrivateData( edict_t *pEdict )
|
||||
{
|
||||
if( pEdict->pvServerData ) Mem_Free( pEdict->pvServerData );
|
||||
if( pEdict->pvServerData )
|
||||
Mem_Free( pEdict->pvServerData );
|
||||
pEdict->pvServerData = NULL; // freed
|
||||
}
|
||||
|
||||
|
@ -2271,41 +2280,44 @@ void pfnFreeEntPrivateData( edict_t *pEdict )
|
|||
=============
|
||||
pfnAllocString
|
||||
|
||||
FIXME: make work
|
||||
=============
|
||||
*/
|
||||
string_t pfnAllocString( const char *szValue )
|
||||
{
|
||||
string_t str;
|
||||
|
||||
str = ED_NewString( szValue, svs.stringpool ) - svs.globals->pStringBase;
|
||||
|
||||
Msg("AllocString: %s\n", STRING( str ));
|
||||
return str;
|
||||
return StringTable_SetString( game.hStringTable, szValue );
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
pfnGetString
|
||||
|
||||
=============
|
||||
*/
|
||||
const char *pfnGetString( string_t iString )
|
||||
{
|
||||
return StringTable_GetString( game.hStringTable, iString );
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
pfnPEntityOfEntOffset
|
||||
|
||||
FIXME: this is correct ?
|
||||
=============
|
||||
*/
|
||||
edict_t* pfnPEntityOfEntOffset( int iEntOffset )
|
||||
{
|
||||
return svg.edicts + iEntOffset;
|
||||
return (&((edict_t*)game.vp)[iEntOffset]);
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
pfnEntOffsetOfPEntity
|
||||
|
||||
FIXME: this is correct ?
|
||||
=============
|
||||
*/
|
||||
int pfnEntOffsetOfPEntity( const edict_t *pEdict )
|
||||
{
|
||||
return pEdict - svg.edicts;
|
||||
return ((byte *)pEdict - (byte *)game.vp);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2316,7 +2328,7 @@ pfnIndexOfEdict
|
|||
*/
|
||||
int pfnIndexOfEdict( const edict_t *pEdict )
|
||||
{
|
||||
return pEdict - svg.edicts;
|
||||
return NUM_FOR_EDICT( pEdict );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2327,7 +2339,7 @@ pfnPEntityOfEntIndex
|
|||
*/
|
||||
edict_t* pfnPEntityOfEntIndex( int iEntIndex )
|
||||
{
|
||||
return svg.edicts + iEntIndex;
|
||||
return EDICT_NUM( iEntIndex );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -2339,9 +2351,14 @@ slow linear brute force
|
|||
*/
|
||||
edict_t* pfnFindEntityByVars( entvars_t* pvars )
|
||||
{
|
||||
edict_t *e = svg.edicts;
|
||||
edict_t *e = game.edicts;
|
||||
int i;
|
||||
|
||||
Msg("FindEntity by VARS()\n" );
|
||||
|
||||
// HACKHACK
|
||||
if( pvars ) return pvars->pContainingEntity;
|
||||
|
||||
for( i = 0; i < svs.globals->numEntities; i++, e++ )
|
||||
{
|
||||
if( e->free ) continue;
|
||||
|
@ -2381,8 +2398,8 @@ int pfnRegUserMsg( const char *pszName, int iSize )
|
|||
|
||||
msg_index = SV_UserMessageIndex( pszName );
|
||||
if( iSize == -1 )
|
||||
svg.msg_sizes[msg_index] = 0xFFFF;
|
||||
else svg.msg_sizes[msg_index] = iSize;
|
||||
game.msg_sizes[msg_index] = 0xFFFF;
|
||||
else game.msg_sizes[msg_index] = iSize;
|
||||
|
||||
return msg_index;
|
||||
}
|
||||
|
@ -2419,12 +2436,12 @@ dword pfnFunctionFromName( const char *pName )
|
|||
{
|
||||
int i, index;
|
||||
|
||||
for( i = 0; i < svg.num_ordinals; i++ )
|
||||
for( i = 0; i < game.num_ordinals; i++ )
|
||||
{
|
||||
if( !com.strcmp( pName, svg.names[i] ))
|
||||
if( !com.strcmp( pName, game.names[i] ))
|
||||
{
|
||||
index = svg.ordinals[i];
|
||||
return svg.funcs[index] + svg.funcBase;
|
||||
index = game.ordinals[i];
|
||||
return game.funcs[index] + game.funcBase;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2442,13 +2459,14 @@ const char *pfnNameForFunction( dword function )
|
|||
{
|
||||
int i, index;
|
||||
|
||||
for( i = 0; i < svg.num_ordinals; i++ )
|
||||
for( i = 0; i < game.num_ordinals; i++ )
|
||||
{
|
||||
index = svg.ordinals[i];
|
||||
index = game.ordinals[i];
|
||||
|
||||
if((function - svg.funcBase) == svg.funcs[index] )
|
||||
return svg.names[i];
|
||||
if((function - game.funcBase) == game.funcs[index] )
|
||||
return game.names[i];
|
||||
}
|
||||
|
||||
// couldn't find the function address to return name
|
||||
return NULL;
|
||||
}
|
||||
|
@ -2516,7 +2534,7 @@ changes area portal state
|
|||
*/
|
||||
void pfnAreaPortal( edict_t *pEdict, bool enable )
|
||||
{
|
||||
if( pEdict == svg.edicts ) return;
|
||||
if( pEdict == game.edicts ) return;
|
||||
if( pEdict->free )
|
||||
{
|
||||
MsgDev( D_ERROR, "SV_AreaPortal: can't modify free entity\n" );
|
||||
|
@ -2939,6 +2957,7 @@ static enginefuncs_t gEngfuncs =
|
|||
pfnPvAllocEntPrivateData,
|
||||
pfnFreeEntPrivateData,
|
||||
pfnAllocString,
|
||||
pfnGetString,
|
||||
pfnPEntityOfEntOffset,
|
||||
pfnEntOffsetOfPEntity,
|
||||
pfnIndexOfEdict,
|
||||
|
@ -2979,7 +2998,8 @@ static enginefuncs_t gEngfuncs =
|
|||
pfnSetClientKeyValue,
|
||||
pfnSetSkybox,
|
||||
pfnPlayMusic,
|
||||
pfnDropClient
|
||||
pfnDropClient,
|
||||
Host_Error
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -3095,14 +3115,11 @@ void SV_LoadFromFile( script_t *entities )
|
|||
if( !SV_ParseEdict( entities, ent ))
|
||||
continue;
|
||||
|
||||
Msg("SpawnEntity: %s\n", STRING( ent->v.classname ));
|
||||
if( svs.dllFuncs.pfnSpawn( ent ) == -1 )
|
||||
died++;
|
||||
else spawned++;
|
||||
}
|
||||
MsgDev( D_INFO, "%i entities inhibited\n", inhibited );
|
||||
|
||||
Com_Assert( 1 );
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -3120,8 +3137,8 @@ void SV_SpawnEntities( const char *mapname, script_t *entities )
|
|||
|
||||
MsgDev( D_NOTE, "SV_SpawnEntities()\n" );
|
||||
|
||||
ent = svg.edicts;
|
||||
Mem_Set( &ent->v, 0, sizeof( entvars_t ));
|
||||
ent = EDICT_NUM( 0 );
|
||||
SV_InitEdict( ent );
|
||||
ent->v.model = pfnAllocString( sv.configstrings[CS_MODELS] );
|
||||
ent->v.modelindex = 1; // world model
|
||||
ent->v.solid = SOLID_BSP;
|
||||
|
@ -3142,14 +3159,15 @@ void SV_SpawnEntities( const char *mapname, script_t *entities )
|
|||
ent = EDICT_NUM( i + 1 );
|
||||
SV_InitEdict( ent );
|
||||
ent->pvEngineData->client = svs.clients + i;
|
||||
svs.globals->numClients++;
|
||||
}
|
||||
|
||||
Msg("Total %i entities spawned\n", svs.globals->numEntities );
|
||||
}
|
||||
|
||||
void SV_UnloadProgs( void )
|
||||
{
|
||||
Sys_FreeNameFuncGlobals();
|
||||
StringTable_Delete( game.hStringTable );
|
||||
|
||||
if( svs.game && svs.game->link )
|
||||
{
|
||||
|
@ -3212,13 +3230,15 @@ bool SV_LoadProgs( const char *name )
|
|||
return false;
|
||||
}
|
||||
|
||||
// get pointer as really static object
|
||||
svs.globals->pStringBase = (const char *)GiveFnptrsToDll;
|
||||
// 65535 unique strings should be enough ...
|
||||
game.hStringTable = StringTable_Create( "Game Strings", 0x10000 );
|
||||
StringTable_SetString( game.hStringTable, "" ); // make NULL string
|
||||
svs.globals->maxEntities = host.max_edicts;
|
||||
svs.globals->maxClients = Host_MaxClients();
|
||||
svg.edicts = Mem_Alloc( svs.mempool, sizeof( edict_t ) * svs.globals->maxEntities );
|
||||
svs.globals->numClients = svs.globals->numEntities = 0;
|
||||
for( i = 0, e = svg.edicts; i < svs.globals->maxEntities; i++, e++ )
|
||||
game.edicts = Mem_Alloc( svs.mempool, sizeof( edict_t ) * svs.globals->maxEntities );
|
||||
svs.globals->numEntities = svs.globals->maxClients + 1; // clients + world
|
||||
svs.globals->numClients = 0;
|
||||
for( i = 0, e = game.edicts; i < svs.globals->maxEntities; i++, e++ )
|
||||
e->free = true; // mark all edicts as freed
|
||||
|
||||
// initialize game
|
||||
|
|
|
@ -22,7 +22,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
|||
#include "server.h"
|
||||
|
||||
server_static_t svs; // persistant server info
|
||||
game_static_t svg; // persistant game info
|
||||
game_static_t game; // persistant game info
|
||||
server_t sv; // local server
|
||||
|
||||
/*
|
||||
|
@ -209,6 +209,8 @@ void SV_SpawnServer( const char *server, const char *savename )
|
|||
if( sv.loadgame ) SV_ReadLevelFile( savename );
|
||||
else SV_SpawnEntities( sv.name, pe->GetEntityScript());
|
||||
|
||||
svs.dllFuncs.pfnServerActivate( game.edicts, svs.globals->numEntities, svs.globals->maxClients );
|
||||
|
||||
// run two frames to allow everything to settle
|
||||
for( i = 0; i < 2; i++ )
|
||||
{
|
||||
|
|
|
@ -106,11 +106,11 @@ bool SV_movestep( edict_t *ent, vec3_t move, bool relink, bool noenemy, bool set
|
|||
for( i = 0; i < 2; i++ )
|
||||
{
|
||||
VectorAdd( ent->v.origin, move, neworg );
|
||||
if( noenemy ) enemy = svg.edicts;
|
||||
if( noenemy ) enemy = EDICT_NUM( 0 );
|
||||
else
|
||||
{
|
||||
enemy = ent->v.enemy;
|
||||
if( i == 0 && enemy != svg.edicts )
|
||||
if( i == 0 && enemy != EDICT_NUM( 0 ))
|
||||
{
|
||||
dz = ent->v.origin[2] - ent->v.enemy->v.origin[2];
|
||||
if( dz > 40 ) neworg[2] -= 8;
|
||||
|
@ -129,7 +129,7 @@ bool SV_movestep( edict_t *ent, vec3_t move, bool relink, bool noenemy, bool set
|
|||
if( relink ) SV_LinkEdict( ent );
|
||||
return true;
|
||||
}
|
||||
if( enemy == svg.edicts ) break;
|
||||
if( enemy == EDICT_NUM( 0 )) break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
@ -349,7 +349,7 @@ bool SV_MoveToGoal( edict_t *ent, edict_t *goal, float dist )
|
|||
}
|
||||
|
||||
// if the next step hits the enemy, return immediately
|
||||
if( ent->v.enemy != svg.edicts && SV_CloseEnough( ent, goal, dist ))
|
||||
if( ent->v.enemy != EDICT_NUM( 0 ) && SV_CloseEnough( ent, goal, dist ))
|
||||
return false;
|
||||
|
||||
// bump around...
|
||||
|
|
|
@ -82,7 +82,7 @@ trace_t SV_Trace( const vec3_t start, const vec3_t mins, const vec3_t maxs, cons
|
|||
pe->ClipToWorld( &cliptrace, sv.worldmodel, clipstart, clipmins, clipmaxs, clipend, contentsmask );
|
||||
cliptrace.startstuck = cliptrace.startsolid;
|
||||
if( cliptrace.startsolid || cliptrace.fraction < 1 )
|
||||
cliptrace.ent = svg.edicts;
|
||||
cliptrace.ent = NULL;
|
||||
if( type == MOVE_WORLDONLY )
|
||||
return cliptrace;
|
||||
|
||||
|
@ -106,12 +106,12 @@ trace_t SV_Trace( const vec3_t start, const vec3_t mins, const vec3_t maxs, cons
|
|||
clipboxmaxs[i] = max(clipstart[i], cliptrace.endpos[i]) + max(hullmaxs[i], clipmaxs2[i]) + 1;
|
||||
}
|
||||
|
||||
// if the passedict is world, make it NULL (to avoid two checks each time)
|
||||
if( passedict == svg.edicts ) passedict = NULL;
|
||||
// figure out whether this is a point trace for comparisons
|
||||
pointtrace = VectorCompare(clipmins, clipmaxs);
|
||||
// precalculate passedict's owner edict pointer for comparisons
|
||||
traceowner = passedict ? passedict->v.owner : svg.edicts;
|
||||
if( passedict && passedict->v.owner )
|
||||
traceowner = passedict->v.owner;
|
||||
else traceowner = NULL;
|
||||
|
||||
// clip to entities
|
||||
// because this uses SV_AreaEdicts, we know all entity boxes overlap
|
||||
|
@ -139,7 +139,7 @@ trace_t SV_Trace( const vec3_t start, const vec3_t mins, const vec3_t maxs, cons
|
|||
// don't clip owner against owned entities
|
||||
if( passedict == touch->v.owner ) continue;
|
||||
// don't clip points against points (they can't collide)
|
||||
if( pointtrace && VectorCompare( touch->v.mins, touch->v.maxs ) && (type != MOVE_MISSILE || !((int)touch->v.flags & FL_MONSTER)))
|
||||
if( pointtrace && VectorCompare( touch->v.mins, touch->v.maxs ) && (type != MOVE_MISSILE || !(touch->v.flags & FL_MONSTER)))
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -147,7 +147,7 @@ trace_t SV_Trace( const vec3_t start, const vec3_t mins, const vec3_t maxs, cons
|
|||
|
||||
// might interact, so do an exact clip
|
||||
model = NULL;
|
||||
if((int)touch->v.solid == SOLID_BSP || type == MOVE_HITMODEL )
|
||||
if( touch->v.solid == SOLID_BSP || type == MOVE_HITMODEL )
|
||||
{
|
||||
uint modelindex = (uint)touch->v.modelindex;
|
||||
// if the modelindex is 0, it shouldn't be SOLID_BSP!
|
||||
|
@ -251,7 +251,7 @@ void SV_CheckAllEnts( void )
|
|||
edict_t *check;
|
||||
|
||||
// see if any solid entities are inside the final position
|
||||
check = svg.edicts + 1;
|
||||
check = EDICT_NUM( 1 );
|
||||
for( e = 1; e < svs.globals->numEntities; e++, check++ )
|
||||
{
|
||||
if( check->free ) continue;
|
||||
|
@ -478,7 +478,7 @@ int SV_FlyMove( edict_t *ent, float time, float *stepnormal, int contentsmask )
|
|||
if( !trace.ent )
|
||||
{
|
||||
MsgDev( D_WARN, "SV_FlyMove: trace.ent == NULL\n" );
|
||||
trace.ent = svg.edicts;
|
||||
trace.ent = EDICT_NUM( 0 );
|
||||
}
|
||||
|
||||
impact = !(ent->v.flags & FL_ONGROUND) || ent->v.groundentity != trace.ent;
|
||||
|
@ -899,7 +899,7 @@ void SV_Physics_Pusher( edict_t *ent )
|
|||
oldltime = ent->v.ltime;
|
||||
thinktime = ent->v.nextthink;
|
||||
|
||||
if( thinktime < ent->v.ltime + sv.frametime)
|
||||
if( thinktime < ent->v.ltime + sv.frametime )
|
||||
{
|
||||
movetime = thinktime - ent->v.ltime;
|
||||
if( movetime < 0 ) movetime = 0;
|
||||
|
@ -1316,7 +1316,7 @@ void SV_Physics_Toss( edict_t *ent )
|
|||
// if ent was supported by a brush model on previous frame,
|
||||
// and groundentity is now freed, set groundentity to 0 (world)
|
||||
// which leaves it suspended in the air
|
||||
ent->v.groundentity = svg.edicts;
|
||||
ent->v.groundentity = EDICT_NUM( 0 );
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -1368,7 +1368,7 @@ void SV_Physics_Toss( edict_t *ent )
|
|||
{
|
||||
ent->v.flags |= FL_ONGROUND;
|
||||
ent->v.groundentity = trace.ent;
|
||||
if( trace.ent->v.solid == SOLID_BSP )
|
||||
if( trace.ent && trace.ent->v.solid == SOLID_BSP )
|
||||
ent->pvEngineData->suspended = true;
|
||||
VectorClear( ent->v.velocity );
|
||||
VectorClear( ent->v.avelocity );
|
||||
|
@ -1542,7 +1542,7 @@ void SV_Physics_None( edict_t *ent )
|
|||
|
||||
static void SV_Physics_Entity( edict_t *ent )
|
||||
{
|
||||
switch((int)ent->v.movetype)
|
||||
switch( ent->v.movetype )
|
||||
{
|
||||
case MOVETYPE_PUSH:
|
||||
SV_Physics_Pusher( ent );
|
||||
|
@ -1763,8 +1763,11 @@ void SV_Physics( void )
|
|||
}
|
||||
|
||||
// at end of frame kill all entities which supposed to it
|
||||
for( i = svs.globals->maxClients; i < svs.globals->numEntities; i++ )
|
||||
for( i = svs.globals->maxClients + 1; i < svs.globals->numEntities; i++ )
|
||||
{
|
||||
ent = EDICT_NUM( i );
|
||||
if( ent->free ) continue;
|
||||
|
||||
if( ent->v.flags & FL_KILLME )
|
||||
SV_FreeEdict( EDICT_NUM( i ));
|
||||
}
|
||||
|
@ -1772,8 +1775,6 @@ void SV_Physics( void )
|
|||
svs.globals->time = sv.time;
|
||||
// svs.dllFuncs.pfnEndFrame();
|
||||
|
||||
Msg("NumEnts %d\n", svs.globals->numEntities - 1 );
|
||||
|
||||
// decrement svs.globals->numEntities if the highest number entities died
|
||||
for( ; EDICT_NUM( svs.globals->numEntities - 1)->free; svs.globals->numEntities-- );
|
||||
|
||||
|
|
|
@ -15,9 +15,9 @@ void SV_BeginIncreaseEdicts( void )
|
|||
edict_t *ent;
|
||||
|
||||
// links don't survive the transition, so unlink everything
|
||||
for( i = 0, ent = svg.edicts; i < svs.globals->maxEntities; i++, ent++ )
|
||||
for( i = 0, ent = EDICT_NUM( 0 ); i < svs.globals->maxEntities; i++, ent++ )
|
||||
{
|
||||
if( !ent->free ) SV_UnlinkEdict( svg.edicts + i ); // free old entity
|
||||
if( !ent->free ) SV_UnlinkEdict( EDICT_NUM( i )); // free old entity
|
||||
Mem_Set( &ent->pvEngineData->clusternums, 0, sizeof( ent->pvEngineData->clusternums ));
|
||||
}
|
||||
SV_ClearWorld();
|
||||
|
@ -28,7 +28,7 @@ void SV_EndIncreaseEdicts(void)
|
|||
int i;
|
||||
edict_t *ent;
|
||||
|
||||
for( i = 0, ent = svg.edicts; i < svs.globals->maxEntities; i++, ent++ )
|
||||
for( i = 0, ent = EDICT_NUM( 0 ); i < svs.globals->maxEntities; i++, ent++ )
|
||||
{
|
||||
// link every entity except world
|
||||
if( !ent->free ) SV_LinkEdict(ent);
|
||||
|
|
|
@ -176,11 +176,11 @@ sorting edict by type
|
|||
*/
|
||||
void SV_ClassifyEdict( edict_t *ent )
|
||||
{
|
||||
ed_priv_t *sv_ent;
|
||||
ed_priv_t *sv_ent;
|
||||
const char *classname;
|
||||
|
||||
sv_ent = ent->pvEngineData;
|
||||
if( sv_ent->s.ed_type != ED_SPAWNED )
|
||||
if( !sv_ent || sv_ent->s.ed_type != ED_SPAWNED )
|
||||
return;
|
||||
|
||||
// null state ?
|
||||
|
@ -268,7 +268,7 @@ void SV_LinkEdict( edict_t *ent )
|
|||
sv_ent = ent->pvEngineData;
|
||||
|
||||
if( sv_ent->area.prev ) SV_UnlinkEdict( ent ); // unlink from old position
|
||||
if( ent == svg.edicts ) return; // don't add the world
|
||||
if( ent == EDICT_NUM( 0 )) return; // don't add the world
|
||||
if( ent->free ) return;
|
||||
|
||||
// trying to classify unclassified edicts
|
||||
|
|
|
@ -314,7 +314,7 @@ cvar_t *Cvar_Set2 (const char *var_name, const char *value, bool force)
|
|||
var->modificationCount++;
|
||||
return var;
|
||||
}
|
||||
if((var->flags & CVAR_CHEAT) && !Cvar_VariableInteger("host_cheats"))
|
||||
if((var->flags & CVAR_CHEAT) && !Cvar_VariableInteger( "sv_cheats" ))
|
||||
{
|
||||
MsgDev( D_INFO, "%s is cheat protected.\n", var_name );
|
||||
return var;
|
||||
|
|
|
@ -12,7 +12,7 @@ Base Entry Point
|
|||
*/
|
||||
DLLEXPORT int CreateAPI( char *hostname, bool console )
|
||||
{
|
||||
// memeber name
|
||||
// member name
|
||||
com_strncpy( Sys.progname, hostname, sizeof(Sys.progname));
|
||||
Sys.hooked_out = console; // set mode
|
||||
|
||||
|
|
|
@ -260,7 +260,7 @@ bool StringTable_CheckString( int handle, string_t str )
|
|||
if(!StringTable_CheckHandle( handle ))
|
||||
return false;
|
||||
|
||||
if( str < 0 || str > dstring[handle]->numstrings )
|
||||
if( str < 0 || str >= dstring[handle]->numstrings )
|
||||
{
|
||||
MsgDev( D_ERROR, "StringTable_CheckString: invalid string index %i\n", str );
|
||||
return false;
|
||||
|
@ -316,7 +316,7 @@ string_t StringTable_SetString( int handle, const char *string )
|
|||
|
||||
for( i = 0; i < dstring[handle]->numstrings; i++ )
|
||||
{
|
||||
if(!com.stricmp( string, StringTable_GetString( handle, i )))
|
||||
if(!com.strcmp( string, StringTable_GetString( handle, i )))
|
||||
return i; // already existing
|
||||
}
|
||||
|
||||
|
|
|
@ -40,9 +40,9 @@ enum
|
|||
// NOTE: engine trace struct not matched with svgame trace
|
||||
typedef struct
|
||||
{
|
||||
bool fAllSolid; // if true, plane is not valid
|
||||
bool fStartSolid; // if true, the initial point was in a solid area
|
||||
bool fStartStuck; // if true, trace started from solid entity
|
||||
BOOL fAllSolid; // if true, plane is not valid
|
||||
BOOL fStartSolid; // if true, the initial point was in a solid area
|
||||
BOOL fStartStuck; // if true, trace started from solid entity
|
||||
float flFraction; // time completed, 1.0 = didn't hit anything
|
||||
vec3_t vecEndPos; // final position
|
||||
int iStartContents; // start pos conetnts
|
||||
|
@ -124,6 +124,7 @@ typedef struct enginefuncs_s
|
|||
void* (*pfnPvAllocEntPrivateData)( edict_t *pEdict, long cb );
|
||||
void (*pfnFreeEntPrivateData)( edict_t *pEdict );
|
||||
string_t (*pfnAllocString)( const char *szValue );
|
||||
const char *(*pfnGetString)( string_t iString );
|
||||
edict_t* (*pfnPEntityOfEntOffset)( int iEntOffset );
|
||||
int (*pfnEntOffsetOfPEntity)( const edict_t *pEdict );
|
||||
int (*pfnIndexOfEdict)( const edict_t *pEdict );
|
||||
|
@ -137,7 +138,7 @@ typedef struct enginefuncs_s
|
|||
const char *(*pfnNameForFunction)( dword function );
|
||||
void (*pfnClientPrintf)( edict_t* pEdict, int ptype, const char *szMsg );
|
||||
void (*pfnServerPrint)( const char *szMsg );
|
||||
void (*pfnAreaPortal)( edict_t *pEdict, bool enable );
|
||||
void (*pfnAreaPortal)( edict_t *pEdict, BOOL enable );
|
||||
const char *(*pfnCmd_Args)( void );
|
||||
const char *(*pfnCmd_Argv)( int argc );
|
||||
int (*pfnCmd_Argc)( void );
|
||||
|
@ -167,6 +168,7 @@ typedef struct enginefuncs_s
|
|||
void (*pfnSetSkybox)( const char *name );
|
||||
void (*pfnPlayMusic)( const char *trackname, int flags ); // background track
|
||||
void (*pfnDropClient)( int clientIndex ); // used for kick cheaters from server
|
||||
void (*pfnHostError)( const char *szFmt, ... ); // invoke host error
|
||||
} enginefuncs_t;
|
||||
|
||||
// passed to pfnKeyValue
|
||||
|
|
|
@ -16,9 +16,9 @@ typedef struct globalvars_s
|
|||
string_t startspot;
|
||||
vec3_t spotOffset; // landmark offset
|
||||
|
||||
bool deathmatch;
|
||||
bool coop;
|
||||
bool teamplay;
|
||||
BOOL deathmatch;
|
||||
BOOL coop;
|
||||
BOOL teamplay;
|
||||
|
||||
int serverflags;
|
||||
int maxClients;
|
||||
|
@ -30,9 +30,9 @@ typedef struct globalvars_s
|
|||
vec3_t v_right;
|
||||
vec3_t v_up;
|
||||
|
||||
bool trace_allsolid;
|
||||
bool trace_startsolid;
|
||||
bool trace_startstuck;
|
||||
BOOL trace_allsolid;
|
||||
BOOL trace_startsolid;
|
||||
BOOL trace_startstuck;
|
||||
float trace_fraction;
|
||||
vec3_t trace_endpos;
|
||||
vec3_t trace_plane_normal;
|
||||
|
@ -48,7 +48,6 @@ typedef struct globalvars_s
|
|||
int total_monsters;
|
||||
int killed_monsters; // number of monsters killed
|
||||
|
||||
const char *pStringBase; // stringtable base offset
|
||||
void *pSaveData; // savedata base offset
|
||||
} globalvars_t;
|
||||
|
||||
|
@ -190,7 +189,7 @@ typedef struct entvars_s
|
|||
|
||||
struct edict_s
|
||||
{
|
||||
bool free;
|
||||
BOOL free;
|
||||
float freetime; // sv.time when the object was freed
|
||||
int serialnumber;
|
||||
|
||||
|
|
|
@ -6,6 +6,89 @@
|
|||
--------------------Configuration: server - Win32 Debug--------------------
|
||||
</h3>
|
||||
<h3>Command Lines</h3>
|
||||
Creating temporary file "C:\DOCUME~1\ÀÄÌÈÍÈ~1.9CC\LOCALS~1\Temp\RSP3B0.tmp" with contents
|
||||
[
|
||||
/nologo /MDd /W3 /Gm /Gi /GX /ZI /Od /I "./" /I "./ents" /I "./game" /I "./global" /I "./monsters" /I "../public" /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /FR"..\temp\server\!debug/" /Fo"..\temp\server\!debug/" /Fd"..\temp\server\!debug/" /FD /c
|
||||
"D:\Xash3D\src_main\sv_dll\global\client.cpp"
|
||||
]
|
||||
Creating command line "cl.exe @"C:\DOCUME~1\ÀÄÌÈÍÈ~1.9CC\LOCALS~1\Temp\RSP3B0.tmp""
|
||||
Creating temporary file "C:\DOCUME~1\ÀÄÌÈÍÈ~1.9CC\LOCALS~1\Temp\RSP3B1.tmp" with contents
|
||||
[
|
||||
msvcrtd.lib /nologo /subsystem:windows /dll /incremental:yes /pdb:"..\temp\server\!debug/server.pdb" /debug /machine:I386 /nodefaultlib:"libc.lib" /def:".\server.def" /out:"..\temp\server\!debug/server.dll" /implib:"..\temp\server\!debug/server.lib" /pdbtype:sept
|
||||
"\Xash3D\src_main\temp\server\!debug\ai_sound.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\animating.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\animation.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\apache.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\barnacle.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\barney.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\basebrush.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\baseentity.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\basefunc.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\basefx.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\baseinfo.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\baseitem.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\baselogic.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\basemonster.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\basemover.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\baseother.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\basepath.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\baserockets.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\basetank.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\basetrigger.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\baseutil.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\baseweapon.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\baseworld.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\client.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\combat.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\decals.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\defaultai.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\dll_int.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\flyingmonster.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\game.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\gamerules.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\generic.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\globals.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\gman.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\hassassin.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\headcrab.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\hgrunt.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\leech.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\legacy.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\lights.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\multiplay_gamerules.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\nodes.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\osprey.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\parent.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\player.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\rat.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\roach.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\saverestore.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\scientist.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\scripted.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\sfx.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\singleplay_gamerules.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\sound.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\squadmonster.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\talkmonster.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\teamplay_gamerules.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\turret.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\utils.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\weapon_generic.obj"
|
||||
"\Xash3D\src_main\temp\server\!debug\zombie.obj"
|
||||
]
|
||||
Creating command line "link.exe @"C:\DOCUME~1\ÀÄÌÈÍÈ~1.9CC\LOCALS~1\Temp\RSP3B1.tmp""
|
||||
Creating temporary file "C:\DOCUME~1\ÀÄÌÈÍÈ~1.9CC\LOCALS~1\Temp\RSP3B2.bat" with contents
|
||||
[
|
||||
@echo off
|
||||
copy \Xash3D\src_main\temp\server\!debug\server.dll "D:\Xash3D\tmpQuArK\bin\server.dll"
|
||||
]
|
||||
Creating command line ""C:\DOCUME~1\ÀÄÌÈÍÈ~1.9CC\LOCALS~1\Temp\RSP3B2.bat""
|
||||
Compiling...
|
||||
client.cpp
|
||||
Linking...
|
||||
<h3>Output Window</h3>
|
||||
Performing Custom Build Step on \Xash3D\src_main\temp\server\!debug\server.dll
|
||||
‘ª®¯¨à®¢ ® ä ©«®¢: 1.
|
||||
|
||||
|
||||
|
||||
|
|
Reference in New Issue