]> de.git.xonotic.org Git - voretournament/voretournament.git/blob - data/qcsrc/server/ent_cs.qc
Remove radar_showennemies, so player names can show for enemies without using Xonotic...
[voretournament/voretournament.git] / data / qcsrc / server / ent_cs.qc
1 /**\r
2  * The point of these entities is to avoid the problems\r
3  * with clientprediction.\r
4  * If you add SendEntity to players, the engine will not\r
5  * do any prediction anymore, and you'd have to write the whole\r
6  * prediction code in CSQC, you want that? :P\r
7  * Data can depend on gamemode. For now, it serves as GPS entities\r
8  * in onslaught... YAY ;)\r
9  */\r
10 \r
11 // Beware: do not redefine those in other files\r
12 // and NO, you cannot use ".version", which already exists (at least\r
13 // it did when I added this) But you have to use .Version\r
14 // Capital V\r
15 \r
16 .entity entcs;\r
17 \r
18 void entcs_init()\r
19 {\r
20         print("Initializing ClientSide information entities\n");\r
21 };\r
22 \r
23 float entcs_customize()\r
24 {\r
25         entity o;\r
26         o = self.owner;\r
27         if(o.deadflag != DEAD_NO)\r
28                 return FALSE;\r
29         if(o.classname != "player")\r
30                 return FALSE;\r
31         if(other == o)\r
32                 return FALSE;\r
33         return TRUE;\r
34 }\r
35 \r
36 float entcs_send(entity to, float sf)\r
37 {\r
38         WriteByte(MSG_ENTITY, ENT_CLIENT_ENTCS);\r
39         WriteByte(MSG_ENTITY, sf);\r
40         if(sf & 1)\r
41                 WriteByte(MSG_ENTITY, num_for_edict(self.owner)-1);\r
42         if(sf & 2)\r
43         {\r
44                 WriteShort(MSG_ENTITY, self.origin_x);\r
45                 WriteShort(MSG_ENTITY, self.origin_y);\r
46                 WriteShort(MSG_ENTITY, self.origin_z);\r
47         }\r
48         if(sf & 4)\r
49                 WriteByte(MSG_ENTITY, self.angles_y * 256.0 / 360);\r
50         if(sf & 8)\r
51                 WriteByte(MSG_ENTITY, self.health / 10); // FIXME use a better scale?\r
52         if(sf & 16)\r
53                 WriteByte(MSG_ENTITY, self.armorvalue / 10); // FIXME use a better scale?\r
54         if(sf & 32)\r
55                 WriteByte(MSG_ENTITY, num_for_edict(self.predator));\r
56         return TRUE;\r
57 };\r
58 \r
59 void entcs_think()\r
60 {\r
61         self.nextthink = time + 0.03;\r
62 \r
63         entity o;\r
64         o = self.owner;\r
65 \r
66         if(o.origin != self.origin)\r
67         {\r
68                 setorigin(self, o.origin);\r
69                 self.SendFlags |= 2;\r
70         }\r
71         if(o.angles_y != self.angles_y)\r
72         {\r
73                 self.angles = o.angles;\r
74                 self.SendFlags |= 4;\r
75         }\r
76         if(o.health != self.health)\r
77         {\r
78                 self.health = o.health;\r
79                 self.SendFlags |= 8;\r
80         }\r
81         if(o.armorvalue != self.armorvalue)\r
82         {\r
83                 self.armorvalue = o.armorvalue;\r
84                 self.SendFlags |= 16;\r
85         }\r
86         if(o.predator != self.predator)\r
87         {\r
88                 self.predator = o.predator;\r
89                 self.SendFlags |= 32;\r
90         }\r
91 };\r
92 \r
93 entity attach_entcs()\r
94 {\r
95         local entity ent;\r
96 \r
97         ent = spawn();\r
98         ent.classname = "entcs_sender_v2";\r
99         ent.owner = self;\r
100         ent.think = entcs_think;\r
101         ent.nextthink = time;\r
102 \r
103         Net_LinkEntity(ent, FALSE, 0, entcs_send);\r
104         ent.customizeentityforclient = entcs_customize;\r
105 \r
106         self.entcs = ent;\r
107 \r
108         return ent;\r
109 };\r
110 \r
111 void detach_entcs()\r
112 {\r
113         remove(self.entcs);\r
114         self.entcs = world;\r
115 };\r