/* * TV_Relay_BuildClientFrameSnap */ void TV_Relay_BuildClientFrameSnap( relay_t *relay, client_t *client ) { edict_t *clent; entity_state_t backup_state = { 0 }; entity_shared_t backup_shared = { 0 }; // pretend client occupies our slot on real server clent = client->edict; if( relay->playernum >= 0 ) { client->edict = EDICT_NUM( relay, relay->playernum + 1 ); backup_state = client->edict->s; client->edict->s = clent->s; client->edict->s.number = relay->playernum + 1; backup_shared = client->edict->r; client->edict->r = clent->r; if( client->mv ) { client->edict->r.client->ps.POVnum = relay->playernum + 1; } } else { if( client->mv ) { client->edict = NULL; } else { assert( client->edict != NULL ); if( !client->edict ) { return; } } } SNAP_BuildClientFrameSnap( relay->cms, &relay->gi, relay->framenum, relay->realtime, client, relay->module_export->GetGameState( relay->module ), &relay->client_entities, true, tv_mempool ); if( relay->playernum >= 0 ) { client->edict->s = backup_state; client->edict->r = backup_shared; } client->edict = clent; }
/* * SV_BuildClientFrameSnap */ void SV_BuildClientFrameSnap( client_t *client ) { vec_t *skyorg = NULL, origin[3]; if( sv.configstrings[CS_SKYBOX][0] != '\0' ) { int noents = 0; float f1 = 0, f2 = 0; if( sscanf( sv.configstrings[CS_SKYBOX], "%f %f %f %f %f %i", &origin[0], &origin[1], &origin[2], &f1, &f2, &noents ) >= 3 ) { if( !noents ) skyorg = origin; } } svs.fatvis.skyorg = skyorg; // HACK HACK HACK SNAP_BuildClientFrameSnap( svs.cms, &sv.gi, sv.framenum, svs.gametime, &svs.fatvis, client, ge->GetGameState(), &svs.client_entities, false, sv_mempool ); svs.fatvis.skyorg = NULL; }
/* * TV_Relay_BuildClientFrameSnap */ void TV_Relay_BuildClientFrameSnap( relay_t *relay, client_t *client ) { edict_t *clent; entity_state_t backup_state = { 0 }; entity_shared_t backup_shared = { 0 }; vec_t *skyorg = NULL, origin[3]; if( relay->configstrings[CS_SKYBOX][0] != '\0' ) { int noents = 0; float f1 = 0, f2 = 0; if( sscanf( relay->configstrings[CS_SKYBOX], "%f %f %f %f %f %i", &origin[0], &origin[1], &origin[2], &f1, &f2, &noents ) >= 3 ) { if( !noents ) skyorg = origin; } } // pretend client occupies our slot on real server clent = client->edict; if( relay->playernum >= 0 ) { client->edict = EDICT_NUM( relay, relay->playernum + 1 ); backup_state = client->edict->s; client->edict->s = clent->s; client->edict->s.number = relay->playernum + 1; backup_shared = client->edict->r; client->edict->r = clent->r; if( client->mv ) client->edict->r.client->ps.POVnum = relay->playernum + 1; } else { if( client->mv ) { client->edict = NULL; } else { assert( client->edict != NULL ); if( !client->edict ) return; } } relay->fatvis.skyorg = skyorg; // HACK HACK HACK SNAP_BuildClientFrameSnap( relay->cms, &relay->gi, relay->framenum, relay->realtime, &relay->fatvis, client, relay->module_export->GetGameState( relay->module ), &relay->client_entities, qtrue, tv_mempool ); if( relay->playernum >= 0 ) { client->edict->s = backup_state; client->edict->r = backup_shared; } client->edict = clent; }