本文整理汇总了C++中NUM_FOR_EDICT函数的典型用法代码示例。如果您正苦于以下问题:C++ NUM_FOR_EDICT函数的具体用法?C++ NUM_FOR_EDICT怎么用?C++ NUM_FOR_EDICT使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了NUM_FOR_EDICT函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: ent_remove
void ent_remove( gedict_t * t )
{
if ( !t || t == world )
DebugTrap( "BUG BUG BUG remove world\n" );
if ( NUM_FOR_EDICT( t ) <= MAX_CLIENTS ) // debug
G_Error ("remove client");
trap_remove( NUM_FOR_EDICT( t ) );
}
示例2: SetTeamName
void SetTeamName( gedict_t * p )
{
if ( p->isBot )
{
if( p->team_no >0 && p->team_no <=4)
trap_SetBotUserInfo(NUM_FOR_EDICT( p ),"team",team_names[p->team_no-1 ]);
else
trap_SetBotUserInfo(NUM_FOR_EDICT( p ),"team","");
}else
stuffcmd( p, "team %s\n", GetTeamName( p->team_no ) );
}
示例3: Bot_CL_KeyMove
void Bot_CL_KeyMove( )
{
int forwardmove = 0, sidemove = 0, upmove = 0;
int buttons = 0;
buttons = ( ( self->s.v.button0 ) ? 1 : 0 ) + ( ( self->s.v.button2 ) ? 2 : 0 );
sidemove += self->maxstrafespeed * CL_KeyState( KEY_MOVERIGHT );
sidemove -= self->maxstrafespeed * CL_KeyState( KEY_MOVELEFT );
upmove += 200 * CL_KeyState( KEY_MOVEUP );
upmove -= 200 * CL_KeyState( KEY_MOVEDOWN );
forwardmove += self->maxfbspeed * CL_KeyState( KEY_MOVEFORWARD );
forwardmove -= self->maxfbspeed * CL_KeyState( KEY_MOVEBACK );
if ( self->s.v.v_angle[0] > 80 )
self->s.v.v_angle[0] = 80;
else
{
if ( self->s.v.v_angle[0] < -70 )
self->s.v.v_angle[0] = -70;
}
//self->s.v.v_angle[2] = 0;
self->s.v.v_angle[1] = anglemod( self->s.v.v_angle[1] );
trap_SetBotCMD( NUM_FOR_EDICT( self ), bot_frametime * 1000,
PASSVEC3(self->s.v.v_angle),
forwardmove, sidemove, upmove, buttons, self->s.v.impulse );
}
示例4: PF_putsaytime
static void
PF_putsaytime (progs_t *pr)
{
edict_t *client_ent;
int e_num, tmp;
client_ent = P_EDICT (pr, 0);
e_num = NUM_FOR_EDICT (pr, client_ent);
if (e_num <= MAX_CLIENTS && e_num >= 1) {
tmp = svs.clients[e_num - 1].whensaidhead - fp_messages + 1;
if (tmp < 0)
tmp = 10 + tmp;
if (svs.clients[e_num - 1].whensaid[tmp]
&& (realtime - svs.clients[e_num - 1].whensaid[tmp] <
fp_persecond)) {
svs.clients[e_num - 1].lockedtill = realtime + fp_secondsdead;
return;
}
svs.clients[e_num - 1].whensaidhead++;
if (svs.clients[e_num - 1].whensaidhead > 9)
svs.clients[e_num - 1].whensaidhead = 0;
svs.clients[e_num - 1].whensaid[svs.clients[e_num - 1].whensaidhead] =
realtime;
}
}
示例5: SV_PointContents
int SV_PointContents(const CVec3 &p)
{
guard(SV_PointContents);
// get base contents from world
unsigned contents = CM_PointContents(p, 0);
contents |= CM_PointModelContents(p);
edict_t *list[MAX_EDICTS];
int num = SV_AreaEdicts(p, p, ARRAY_ARG(list), AREA_SOLID);
for (int i = 0; i < num; i++)
{
edict_t *edict = list[i];
entityHull_t &ent = ents[NUM_FOR_EDICT(edict)];
if (ent.model)
contents |= CM_TransformedPointContents(p, ent.model->headnode, edict->s.origin, ent.axis);
else
contents |= CM_TransformedPointContents(p, CM_HeadnodeForBox(ent.bounds), edict->s.origin, nullVec3);
}
return contents;
unguard;
}
示例6: PF_GameCmd
/*
* PF_GameCmd
*
* Sends the server command to clients.
* If ent is NULL the command will be sent to all connected clients
*/
static void PF_GameCmd( edict_t *ent, const char *cmd )
{
int i;
client_t *client;
if( !cmd || !cmd[0] )
return;
if( !ent )
{
for( i = 0, client = svs.clients; i < sv_maxclients->integer; i++, client++ )
{
if( client->state < CS_SPAWNED )
continue;
SV_AddGameCommand( client, cmd );
}
}
else
{
i = NUM_FOR_EDICT( ent );
if( i < 1 || i > sv_maxclients->integer )
return;
client = svs.clients + ( i - 1 );
if( client->state < CS_SPAWNED )
return;
SV_AddGameCommand( client, cmd );
}
}
示例7: PF_NVS_InitSVCMsg
// 2000-05-02 NVS SVC by Maddes
void PF_NVS_InitSVCMsg(void)
{
edict_t *ent;
int entnum;
client_t *client;
client = NULL;
ent = G_EDICT(OFS_PARM3);
entnum = NUM_FOR_EDICT(ent);
if (entnum == 0) // world means all clients
{
client = NULL;
}
else if (entnum < 1 || entnum > svs.maxclients)
{
PR_RunError ("PF_NVS_InitSVCMsg: entity not a client");
}
else
{
client = &svs.clients[entnum-1];
}
NVS_InitSVCMsg(G_FLOAT(OFS_PARM0), G_FLOAT(OFS_PARM1), G_FLOAT(OFS_PARM2), client);
}
示例8: SV_SendServerinfo
/*
================
SV_SendServerinfo
Sends the first message from the server to a connected client.
This will be sent on the initial connection and upon each server load.
================
*/
void SV_SendServerinfo (client_t *client)
{
char **s;
char* message = Sys_BigStackAlloc(2048, "SV_SendServerinfo");
if (svs.maxclients > 1)
{
MSG_WriteByte(&client->message, svc_print);
snprintf(message, sizeof(message), "\n\35\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\36\37\n"
"\n \01\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\02\03");
MSG_WriteString(&client->message, message);
MSG_WriteByte(&client->message, svc_print);
snprintf(message, sizeof(message), "\02\n \04ProQuake Server Version %4.2f\06"
"\n \07\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\10\11", VERSION_PROQUAKE);
MSG_WriteString(&client->message, message);
}
MSG_WriteByte (&client->message, svc_serverinfo);
MSG_WriteLong (&client->message, PROTOCOL_NETQUAKE);
MSG_WriteByte (&client->message, svs.maxclients);
if (!coop.value && deathmatch.value)
MSG_WriteByte (&client->message, GAME_DEATHMATCH);
else
MSG_WriteByte (&client->message, GAME_COOP);
sprintf (message, pr_strings+sv.edicts->v.message);
MSG_WriteString (&client->message,message);
for (s = sv.model_precache+1 ; *s ; s++)
MSG_WriteString (&client->message, *s);
MSG_WriteByte (&client->message, 0);
for (s = sv.sound_precache+1 ; *s ; s++)
MSG_WriteString (&client->message, *s);
MSG_WriteByte (&client->message, 0);
// send music
MSG_WriteByte (&client->message, svc_cdtrack);
MSG_WriteByte (&client->message, sv.edicts->v.sounds);
MSG_WriteByte (&client->message, sv.edicts->v.sounds);
// set view
MSG_WriteByte (&client->message, svc_setview);
MSG_WriteShort (&client->message, NUM_FOR_EDICT(client->edict));
if (!pq_fullpitch.value && client->netconnection->proquake_connection != MOD_QSMACK) { // Ch0wW: Re-add it
MSG_WriteByte(&client->message, svc_stufftext);
MSG_WriteString(&client->message, "pq_fullpitch 0; cl_fullpitch 0\n");
}
MSG_WriteByte (&client->message, svc_signonnum);
MSG_WriteByte (&client->message, 1);
client->sendsignon = true;
client->spawned = false; // need prespawn, spawn, etc
Sys_BigStackFree(2048, "SV_SendServerinfo");
}
示例9: Host_NVS_Request_f
// 2000-04-30 NVS HANDSHAKE SRV<->CL/QC<->CL by Maddes
void Host_NVS_Request_f (void)
{
float value;
if (cmd_source == src_command) // this a client remote only command
{
Con_Printf("%s is not valid from the console\n", Cmd_Argv(0));
return;
}
if (Cmd_Argc() < 2) // not enough arguments
{
SV_ClientPrintf("%s: not enough arguments\n", Cmd_Argv(0));
SV_ClientPrintf("Syntax: %s <version>\n", Cmd_Argv(0));
return;
}
Con_DPrintf("Server received NVS client version %s from client %i\n", Cmd_Argv(1), NUM_FOR_EDICT(host_client->edict));
// 2001-12-24 Keeping full backwards compatibility by Maddes start
if (sv_compatibility->value) // do not reply, like the original Quake executable
{
return;
}
// 2001-12-24 Keeping full backwards compatibility by Maddes end
// get and check value
value = Q_atof(Cmd_Argv(1));
if (value < 0)
{
SV_ClientPrintf ("Only positive NVS versions are accepted.\n");
return;
}
// determine and store client NVS versions
host_client->nvs_cmax = value;
host_client->nvs_cclc = (value < MAX_NVS_VERSION) ? value : MAX_NVS_VERSION;
host_client->nvs_csvc = (value < nvs_current_ssvc->value) ? value : nvs_current_ssvc->value;
// check client against required version
if (NVS_RejectClient())
{
return;
}
// tell client the NVS versions, only when necessary or when client changes during a running game
// NECESSARY (GOOD) HACK: This is a special case were not the client's SVC is of importance
if (host_client->nvs_cclc || nvs_current_ssvc->value || host_client->spawned)
{
MSG_WriteByte (&host_client->message, svc_extra_version);
MSG_WriteByte (&host_client->message, VERSION_NVS);
MSG_WriteFloat (&host_client->message, nvs_current_ssvc->value);
MSG_WriteFloat (&host_client->message, host_client->nvs_csvc);
MSG_WriteFloat (&host_client->message, host_client->nvs_cclc);
Con_DPrintf("Server sends NVS versions SSVC %1.2f CSVC %1.2f CCLC %1.2f to client %i\n", nvs_current_ssvc->value, host_client->nvs_csvc, host_client->nvs_cclc, NUM_FOR_EDICT(host_client->edict));
}
}
示例10: AddLinksToPmove
void AddLinksToPmove ( areanode_t *node )
{
link_t *l, *next;
edict_t *check;
int pl;
int i;
physent_t *pe;
pl = EDICT_TO_PROG(sv_player);
// touch linked edicts
for (l = node->solid_edicts.next ; l != &node->solid_edicts ; l = next)
{
next = l->next;
check = EDICT_FROM_AREA(l);
if (check->v.owner == pl)
continue; // player's own missile
if (check->v.solid == SOLID_BSP
|| check->v.solid == SOLID_BBOX
|| check->v.solid == SOLID_SLIDEBOX)
{
if (check == sv_player)
continue;
for (i=0 ; i<3 ; i++)
if (check->v.absmin[i] > pmove_maxs[i]
|| check->v.absmax[i] < pmove_mins[i])
break;
if (i != 3)
continue;
if (pmove.numphysent == MAX_PHYSENTS)
return;
pe = &pmove.physents[pmove.numphysent];
pmove.numphysent++;
VectorCopy (check->v.origin, pe->origin);
pe->info = NUM_FOR_EDICT(check);
if (check->v.solid == SOLID_BSP)
pe->model = sv.models[(int)(check->v.modelindex)];
else
{
pe->model = NULL;
VectorCopy (check->v.mins, pe->mins);
VectorCopy (check->v.maxs, pe->maxs);
}
}
}
// recurse down both sides
if (node->axis == -1)
return;
if ( pmove_maxs[node->axis] > node->dist )
AddLinksToPmove ( node->children[0] );
if ( pmove_mins[node->axis] < node->dist )
AddLinksToPmove ( node->children[1] );
}
示例11: SV_SendServerInfo
/*
================
SV_SendServerInfo
Sends the first message from the server to a connected client.
This will be sent on the initial connection and upon each server load.
================
*/
void SV_SendServerInfo (client_t *client)
{
char **s;
char message[2048];
int i; //johnfitz
MSG_WriteByte (&client->message, svc_print);
sprintf (message, "%c\nfxQuake %4.2f SERVER (%i CRC)\n", 2, (float)VERSION, pr_crc);
MSG_WriteString (&client->message,message);
MSG_WriteByte (&client->message, svc_serverinfo);
MSG_WriteLong (&client->message, sv.protocol); // use sv.protocol instead of PROTOCOL_NETQUAKE
if (sv.protocol == PROTOCOL_RMQ)
{
// mh - now send protocol flags so that the client knows the protocol features to expect
MSG_WriteLong (&client->message, sv.protocolflags);
}
MSG_WriteByte (&client->message, svs.maxclients);
if (!coop.value && deathmatch.value)
MSG_WriteByte (&client->message, GAME_DEATHMATCH);
else
MSG_WriteByte (&client->message, GAME_COOP);
sprintf (message, "%s", pr_strings+sv.edicts->v.message);
MSG_WriteString (&client->message,message);
//johnfitz -- only send the first 256 model and sound precaches if protocol is 15
for (i=0,s = sv.model_precache+1 ; *s ; s++,i++)
if (sv.protocol != PROTOCOL_NETQUAKE || i < 256) // MAX_MODELS for PROTOCOL_NETQUAKE
MSG_WriteString (&client->message, *s);
MSG_WriteByte (&client->message, 0);
for (i=0,s = sv.sound_precache+1 ; *s ; s++,i++)
if (sv.protocol != PROTOCOL_NETQUAKE || i < 256) // MAX_SOUNDS for PROTOCOL_NETQUAKE
MSG_WriteString (&client->message, *s);
MSG_WriteByte (&client->message, 0);
//johnfitz
// send music
MSG_WriteByte (&client->message, svc_cdtrack);
MSG_WriteByte (&client->message, sv.edicts->v.sounds);
MSG_WriteByte (&client->message, sv.edicts->v.sounds);
// set view
MSG_WriteByte (&client->message, svc_setview);
MSG_WriteShort (&client->message, NUM_FOR_EDICT(client->edict));
MSG_WriteByte (&client->message, svc_signonnum);
MSG_WriteByte (&client->message, 1);
client->sendsignon = true;
client->spawned = false; // need prespawn, spawn, etc
}
示例12: NUM_FOR_EDICT
sizebuf_t *Game_MessageOne(ServerEntity_t *seMessage)
{
int iEntity;
iEntity = NUM_FOR_EDICT(seMessage);
if (iEntity < 1 || iEntity > svs.maxclients)
Con_Error("Attempted to send message to a non-client! (%i) (%s)", iEntity, seMessage->v.cClassname);
return &svs.clients[iEntity - 1].message;
}
示例13: SV_BuildClientFrame
/*
=============
SV_BuildClientFrame
Decides which entities are going to be visible to the client, and
copies off the playerstat and areabits.
=============
*/
void SV_BuildClientFrame( sv_client_t *cl )
{
edict_t *ent;
edict_t *clent;
edict_t *viewent; // may be NULL
client_frame_t *frame;
entity_state_t *state;
sv_ents_t frame_ents;
int i;
clent = cl->edict;
viewent = cl->pViewEntity;
sv.net_framenum++;
// this is the frame we are creating
frame = &cl->frames[sv.framenum & SV_UPDATE_MASK];
frame->senttime = svs.realtime; // save it for ping calc later
// clear everything in this snapshot
frame_ents.num_entities = c_fullsend = 0;
Mem_Set( frame->areabits, 0, sizeof( frame->areabits ));
if( !clent->pvServerData->client ) return; // not in game yet
// grab the current player index
frame->index = NUM_FOR_EDICT( clent );
// add all the entities directly visible to the eye, which
// may include portal entities that merge other viewpoints
SV_AddEntitiesToPacket( viewent, clent, frame, &frame_ents, false );
// if there were portals visible, there may be out of order entities
// in the list which will need to be resorted for the delta compression
// to work correctly. This also catches the error condition
// of an entity being included twice.
qsort( frame_ents.entities, frame_ents.num_entities, sizeof( frame_ents.entities[0] ), SV_EntityNumbers );
// copy the entity states out
frame->num_entities = 0;
frame->first_entity = svs.next_client_entities;
for( i = 0; i < frame_ents.num_entities; i++ )
{
ent = EDICT_NUM( frame_ents.entities[i] );
// add it to the circular client_entities array
state = &svs.client_entities[svs.next_client_entities % svs.num_client_entities];
*state = ent->pvServerData->s;
svs.next_client_entities++;
// this should never hit, map should always be restarted first in SV_Frame
if( svs.next_client_entities >= 0x7FFFFFFE )
Host_Error( "svs.next_client_entities wrapped (sv.time limit is out)\n" );
frame->num_entities++;
}
}
示例14: SV_SendServerinfo
/*
================
SV_SendServerinfo
Sends the first message from the server to a connected client.
This will be sent on the initial connection and upon each server load.
================
*/
void SV_SendServerinfo (client_t *client)
{
char **s;
// >>> FIX: For Nintendo Wii using devkitPPC / libogc
// Allocating in big stack. Stack in this device is pretty small:
//char message[2048];
char* message = Sys_BigStackAlloc(2048, "SV_SendServerinfo");
// <<< FIX
MSG_WriteByte (&client->message, svc_print);
sprintf (message, "%c\nVERSION %4.2f SERVER (%i CRC)", 2, VERSION, pr_crc);
MSG_WriteString (&client->message,message);
MSG_WriteByte (&client->message, svc_serverinfo);
MSG_WriteLong (&client->message, PROTOCOL_VERSION);
MSG_WriteByte (&client->message, svs.maxclients);
if (!coop.value && deathmatch.value)
MSG_WriteByte (&client->message, GAME_DEATHMATCH);
else
MSG_WriteByte (&client->message, GAME_COOP);
sprintf (message, pr_strings+sv.edicts->v.message);
MSG_WriteString (&client->message,message);
for (s = sv.model_precache+1 ; *s ; s++)
MSG_WriteString (&client->message, *s);
MSG_WriteByte (&client->message, 0);
for (s = sv.sound_precache+1 ; *s ; s++)
MSG_WriteString (&client->message, *s);
MSG_WriteByte (&client->message, 0);
// send music
MSG_WriteByte (&client->message, svc_cdtrack);
MSG_WriteByte (&client->message, sv.edicts->v.sounds);
MSG_WriteByte (&client->message, sv.edicts->v.sounds);
// set view
MSG_WriteByte (&client->message, svc_setview);
MSG_WriteShort (&client->message, NUM_FOR_EDICT(client->edict));
MSG_WriteByte (&client->message, svc_signonnum);
MSG_WriteByte (&client->message, 1);
client->sendsignon = true;
client->spawned = false; // need prespawn, spawn, etc
// >>> FIX: For Nintendo Wii using devkitPPC / libogc
// Deallocating from previous fix:
Sys_BigStackFree(2048, "SV_SendServerinfo");
// <<< FIX
}
示例15: SVC_FakeConnect
/*
* SVC_FakeConnect
* (Not a real out of band command)
* A connection request that came from the game module
*/
int SVC_FakeConnect( char *fakeUserinfo, char *fakeSocketType, const char *fakeIP )
{
int i;
char userinfo[MAX_INFO_STRING];
client_t *cl, *newcl;
netadr_t address;
Com_DPrintf( "SVC_FakeConnect ()\n" );
if( !fakeUserinfo )
fakeUserinfo = "";
if( !fakeIP )
fakeIP = "127.0.0.1";
if( !fakeSocketType )
fakeIP = "loopback";
Q_strncpyz( userinfo, fakeUserinfo, sizeof( userinfo ) );
// force the IP key/value pair so the game can filter based on ip
if( !Info_SetValueForKey( userinfo, "socket", fakeSocketType ) )
return -1;
if( !Info_SetValueForKey( userinfo, "ip", fakeIP ) )
return -1;
// find a client slot
newcl = NULL;
for( i = 0, cl = svs.clients; i < sv_maxclients->integer; i++, cl++ )
{
if( cl->state == CS_FREE )
{
newcl = cl;
break;
}
}
if( !newcl )
{
Com_DPrintf( "Rejected a connection.\n" );
return -1;
}
NET_InitAddress( &address, NA_NOTRANSMIT );
// get the game a chance to reject this connection or modify the userinfo
if( !SV_ClientConnect( NULL, &address, newcl, userinfo, -1, -1, qtrue, qfalse, 0, 0 ) )
{
Com_DPrintf( "Game rejected a connection.\n" );
return -1;
}
// directly call the game begin function
newcl->state = CS_SPAWNED;
ge->ClientBegin( newcl->edict );
return NUM_FOR_EDICT( newcl->edict );
}