Hosting and domain costs until October 2024 have been generously sponsored by dumptruck_ds. Thank you!

EXT CSQC

From Quake Wiki

Revision as of 15:15, 14 January 2011 by 189.44.168.154 (talk) (Client Programs Entry Points)

VDHSmi <a href="http://ydilhwzllcqc.com/">ydilhwzllcqc</a>, [url=http://kyeillnjzkac.com/]kyeillnjzkac[/url], [link=http://dpyiowgmxofs.com/]dpyiowgmxofs[/link], http://bcpombxxlepz.com/

Wx6sbQ <a href="http://fpbvymhmvpuw.com/">fpbvymhmvpuw</a>, [url=http://wjmdkfkedeqp.com/]wjmdkfkedeqp[/url], [link=http://spsjxzpdghwh.com/]spsjxzpdghwh[/link], http://axqbpjhksbxv.com/

boomerrang http://members.multimania.co.uk/spatbadveca/henti.com-644553.html henti.com cartoon network porno http://members.multimania.co.uk/spatbadveca/www.ben10.com-652343.html www.ben10.com cartoonnet work porn.com http://members.multimania.co.uk/spatbadveca/cartoonnetwork-ben-10-movie-642665.html ben 10 movie 2009 ben 10 movie http://members.multimania.co.uk/spatbadveca/ cartoonnetwork ben 10 of cartoon network http://members.multimania.co.uk/spatbadveca/w.w.w.cartoonnetwork.hq.net-642510.html cartoonnetworkhq.netl hiv cartoon http://members.multimania.co.uk/spatbadveca/extremesex.com-642461.html extremesex.coù old cartoonetwork.com http://members.multimania.co.uk/spatbadveca/porn-new-cartoonnetwork.com-647300.html cartoon network porno ben ten movie http://members.multimania.co.uk/spatbadveca/www.cartoonetwork-641403.html www.cartoonetwork www.mom extremesex.com http://members.multimania.co.uk/spatbadveca/cartoonnetwork-638612.html wwww. cartoon. com strange cosmos http://members.multimania.co.uk/spatbadveca/ben10.com-644329.html ben10.com/

craftsman q 4.5 http://usilguepai.atspace.com/consumer-reports-ellipticals-1117769.html free consumer reports on ellipticals thompson consumer electronis, inc http://usilguepai.atspace.com/henry-lever-action-.22-921777.html 22 henry lever action craftsman 4.5 hp lawnmower http://usilguepai.atspace.com/dynamark.lawnmowers-1191630.html dynamark riding lawnmowers www.action.act.gov .au http://usilguepai.atspace.com/winchester-lever-action-.410-910709.html lever action 410 bolt action .410 shotguns http://usilguepai.atspace.com/50-action-express-874300.html 50 action express murrey lawnmowers http://usilguepai.atspace.com/410-bolt-action-shotguns-874741.html sears roebuck 410 bolt action sears roebuck 410 bolt action http://usilguepai.atspace.com/toro-lawnmowers.com-910011.html riding lawn mowers co clare henry 22 lever action http://usilguepai.atspace.com/consumer-reports-.org-491078.html riding lawnmowers.com consumer reports dynamark riding lawnmowers http://usilguepai.atspace.com/www.experion.com-consumer-771587.html experion.com/consumer bushhog lawnmowers http://usilguepai.atspace.com/sears.com-lawnmowers-747431.html www.sears.com/lawnmowers

Sending Data to the Client

Stats

On the server

The AddStat builtin function is used to specify fields which will be automatically sent to the client whenever they change. This is done upon initialisation - it works in worldspawn().

void(float index, float type, .void field) AddStat = #232;

The index parameter is the index of the stat. Numbers 0-31 are reserved by the engine, so this parameter must be 32 or higher.

The type parameter is one of:

  • AS_FLOAT_TRUNCATED - sends the integer part of a float in a packed form. The field parameter must be a float.
  • AS_FLOAT - sends the whole float without any data loss. The field parameter must be a float.
  • AS_STRING - sends the first 16 characters of a string, requiring the space of 4 consecutive stats. The field parameter must be a string.
On the client

The function corresponding to the type parameter is used to retrieve the data, with the index corresponding to that of the server.

float (float statnum) getstat_float = #330;
float (float statnum) getstat_float_truncated = #331;
string (float statnum) getstat_string = #332;

Entities

On the server

The SendEntity function is used in conjunction with the .Version field. The .Version field should be incremented every time an update is desired. This causes the entity's SendEntity function to be called for every client that the entity is viewable to:

.float(entity viewer) SendEntity;

In this function, the entity which is being sent is self.

The viewer parameter is the client entity to whom the entity is being sent.

The return value should be TRUE if the entity is to be sent to that client, and FALSE if it not to be.

Inside this function, the core builtins WriteCoord, WriteAngle, WriteByte, WriteShort, WriteLong are used with the destination parameter MSG_ENTITY, indicating that the data is part of a CSQC entity update.

On the client

When an entity is received the function CSQC_Ent_Update is called. Here the CSQC core functions ReadCoord, ReadAngle, ReadByte, ReadShort, ReadLong are used to retrieve the data sent by the server. Any Writes that the server used must exactly match the Reads used by the client. No more, no less. The order must match too. You can use flags to conditionally send+receive fields.

void(float isnew) CSQC_Ent_Update;

If the entity does not yet exist it is created on the client and the isnew parameter is TRUE, otherwise FALSE. Basically, isnew says that the client called spawn() for you. The server entity may have previously been visible, just temporarily left the view.

The entity being created or updated is self. You would normally set the entity's drawmask to MASK_NORMAL and set or read a model/modelindex. You will need to animate and interpolate or predict the entity yourself.


If the entity is removed from the server it will also be removed from the client. The function CSQC_Ent_Remove is called on the client:

void() CSQC_Ent_Remove;

In this function, self is the entity to be removed, though it will not be removed automatically by the engine. This allows the mod to clean up any client-created entities associated with the one being removed. You will need to do remove(self) at some point, perhaps via a timer (useful if pvs culling is not in use for this entity).

Example Code
Please Note

Entity updates using this method are transmitted unreliably, meaning that there is no guarantee that a particular update may arrive before the next one supercedes it. This means each update should send the whole amount of data required - it is not possible to send some data as a delta of previously sent information. This is not so much of a problem because this extension allows far fewer updates to be sent.

Rendering Entities on the Client

Spawn your entity:

self = spawn();

Set a model/modelindex:

setmodel(self, "progs/player.mdl");

Set an origin:

setorigin(self, '0 0 0');

Set the drawmask to something that matches your call to addentities:

self.drawmask = MASK_NORMAL;

The entity is now visible.

Or you could do as above, but ignore the drawmask part and call:

addentity(self);

Rendering 2D HUD on the Client

An example can be found here: http://fteqw.svn.sourceforge.net/viewvc/fteqw/trunk/quakec/csqctest/src/cs/hud.qc?view=markup