ngunix/network/nvs_server_data.c

190 lines
5.7 KiB
C

/*
Copyright (C) 2015 Marco "eukara" Hladik
Copyright (C) 1996-1997 Id Software, Inc.
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
// nvs_server_data.c
// 2000-05-02 NVS SVC by Maddes
#include "globaldef.h"
/*
The conversion tables consist of boolean values, that define which data is send
to a client of the corresponding NVS version.
The version tables hold a entry for every change in the SVC message.
An entry contains the NVS version the change occured, plus its number of
data/writes, message size in bytes, pointer to the conversion table.
Determining the message size:
byte/char/angle = 1 byte
short/coord/entity = 2 bytes
long = 4 bytes
float = 4 bytes
string = unknown (assume typical length, e.g. names are 16 bytes + 1 EOS)
Now add all send writes for a version together and use the result as the message size.
Remember that you only add the writes which are true in corresponding version table line.
*/
/*
*******************************************************************
* S V C M E S S A G E S W I T H O U T S U B M E S S A G E S *
*******************************************************************
*/
/*
SVC_PARTICLE
[byte] svc_particle [coord] origin [coord] origin [coord] origin [char] velocity [char] velocity [char] velocity [byte] count [byte] color
1 +2+2+2 +1+1+1 +1 +1
*/
qboolean svc_particle_000_conversion[] = { true, true, true, true, true, true, true, true, true};
msg_version_t svc_particle_versions[] =
{
{0.00, 9, 12, svc_particle_000_conversion} // 0.0 is end mark of table
};
/*
SVC_SETANGLE
[byte] svc_setangle [byte] angle [byte] angle [byte] angle [float] newangle [float] newangle [float] newangle
1 +1+1+1 +4+4+4
*/
qboolean svc_setangle_050_conversion[] = { true, false, false, false, true, true, true };
qboolean svc_setangle_000_conversion[] = { true, true, true, true, false, false, false };
msg_version_t svc_setangle_versions[] =
{
{0.50, 7, 1+4+4+4, svc_setangle_050_conversion},
{0.00, 4, 1+1+1+1, svc_setangle_000_conversion} // 0.0 is end mark of table
};
/*
SVC LookUp Table
*/
msg_lookup_t svc_lookup[] =
{
{svc_particle, svc_particle_versions},
{svc_setangle, svc_setangle_versions},
{-1, NULL} // -1 is end mark of table
};
/*
*************************************************************
* S V C M E S S A G E S W I T H S U B M E S S A G E S *
*************************************************************
Note: each has it own lookup table
*/
/*
*************************************************
* S V C _ T E M P E N T I T Y M E S S A G E S *
*************************************************
*/
/*
TE_EXPLOSION
[byte] svc_temp_entity [byte] te_explosion [coord] x [coord] y [coord] z [coord] red [coord] green [coord] blue [coord] alpha
1+1 +2+2+2 +2+2+2+2
*/
qboolean te_explosion_050_conversion[] = {true, true, true, true, true, true, true, true, true};
qboolean te_explosion_000_conversion[] = {true, true, true, true, true, false, false, false, false};
msg_version_t te_explosion_versions[] =
{
{0.50, 9, 1+1+2+2+2+2+2+2+2, te_explosion_050_conversion},
{0.00, 5, 1+1+2+2+2, te_explosion_000_conversion} // 0.0 is end mark of table
};
/*
SVC_TEMP_ENTITY LookUp Table
*/
msg_lookup_t te_lookup[] =
{
{TE_EXPLOSION, te_explosion_versions},
{-1, NULL} // -1 is end mark of table
};
// 2001-09-20 Configurable limits by Maddes start
/*
***************************************
* S V C _ L I M I T M E S S A G E S *
***************************************
*/
// 2001-09-20 Configurable entity limits by Maddes start
/*
LIM_ENTITIES
[byte] svc_limit [byte] lim_entities [short] edicts [short] static edicts [short] temp edicts
1+1 +2+2+2
*/
qboolean lim_entities_000_conversion[] = { true, true, true, true, true};
msg_version_t lim_entities_versions[] =
{
{0.00, 5, 1+1+2+2+2, lim_entities_000_conversion} // 0.0 is end mark of table
// HACK!!! Using version 0.00 for lowest version the
// client must now when sending this command on connect
};
// 2001-09-20 Configurable entity limits by Maddes end
/*
SVC_LIMIT LookUp Table
*/
msg_lookup_t limit_lookup[] =
{
{LIM_ENTITIES, lim_entities_versions}, // 2001-09-20 Configurable entity limits by Maddes
{-1, NULL} // -1 is end mark of table
};
// 2001-09-20 Configurable limits by Maddes end
/*
*******************************************************
* S V C _ E X T R A _ V E R S I O N M E S S A G E S *
*******************************************************
*/
/*
VERSION_TYPE
[byte] svc_extra_version [byte] version_type [float] version
1+1 +4
*/
/*
qboolean version_any_XYY_conversion[] = { true, true, true};
qboolean version_any_000_conversion[] = {false, false, false};
msg_version_t version_any_versions[] =
{
{X.YY, 3, 1+1+4, version_any_XYY_conversion},
{0.00, 0, 0, version_any_000_conversion},
};
*/
/*
SVC_EXTRA_VERSION LookUp Table
*/
msg_lookup_t version_lookup[] =
{
// {VERSION_TYPE, version_any_versions},
{-1, NULL} // -1 is end mark of table
};