2 * The point of these entities is to avoid the problems
3 * with clientprediction.
4 * If you add SendEntity to players, the engine will not
5 * do any prediction anymore, and you'd have to write the whole
6 * prediction code in CSQC, you want that? :P
7 * Data can depend on gamemode. For now, it serves as GPS entities
8 * in onslaught... YAY ;)
11 // Beware: do not redefine those in other files
12 // and NO, you cannot use ".version", which already exists (at least
13 // it did when I added this) But you have to use .Version
16 .float(entity to) SendEntity;
23 print("Initializing ClientSide information entities\n");
24 entcs_start = spawn();
25 entcs_start.solid = SOLID_NOT;
26 entcs_start.chain = world;
29 entity get_entcs_ent(float num)
33 entcs.chain = entcs_start.chain;
34 entcs_start.chain = entcs;
38 void entcs_ons(entity to)
40 if(to == self.owner || self.team != to.team ||
41 self.owner.classname == "observer" || to.classname == "observer")
43 WriteByte(MSG_ENTITY, ENTCS_MSG_ONS_REMOVE);
46 WriteByte(MSG_ENTITY, ENTCS_MSG_ONS_GPS);
47 WriteCoord(MSG_ENTITY, self.owner.origin_x);
48 WriteCoord(MSG_ENTITY, self.owner.origin_y);
49 WriteCoord(MSG_ENTITY, self.owner.angles_y);
52 void entcs_common_self()
56 if(self.pingtime < time)
58 self.pingtime = time + 9; // keep it 1 below the non-ons update intervall
59 // just to be safe... (blah)
60 WriteByte(MSG_ENTITY, ENTCS_MSG_PING);
61 FOR_EACH_REALCLIENT(pl)
63 WriteByte(MSG_ENTITY, num_for_edict(pl));
64 WriteShort(MSG_ENTITY, pl.ping);
66 WriteByte(MSG_ENTITY, 0);
71 float entcs_send(entity to)
73 WriteByte(MSG_ENTITY, ENT_CLIENT_ENTCS);
74 WriteByte(MSG_ENTITY, self.health); // serves as entitynumber
84 WriteByte(MSG_ENTITY, ENTCS_MSG_END);
90 self.team = self.owner.team;
92 setorigin(self, self.owner.origin);
93 if(game == GAME_ONSLAUGHT)
94 self.nextthink = time + 0.1;
96 self.nextthink = time + 10; // update pings every 10 seconds
104 print("Attaching ENTCS entity\n");
106 num = num_for_edict(self);
107 ent = get_entcs_ent(num);
109 ent.classname = "entcs_sender";
111 setorigin(ent, self.origin);
113 ent.think = entcs_think;
114 ent.nextthink = time;
115 ent.effects = EF_NODEPTHTEST | EF_LOWPRECISION;
116 ent.model = "entcs_sender";
118 setsize(ent, '0 0 0', '0 0 0');
120 ent.SendEntity = entcs_send;
128 num = num_for_edict(self);
129 for(ent = entcs_start; ent.chain.owner != self && ent.chain != world; ent = ent.chain);
130 if(ent.chain != world && ent.chain.owner == self)
133 ent.chain = ent.chain.chain;