]> de.git.xonotic.org Git - voretournament/voretournament.git/blob - data/qcsrc/server/ent_cs.qc
Also cut the veolcity of predators, the closer they are to swallowing. Do it more...
[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         if(o.stat_eaten)\r
34                 return FALSE;\r
35         return TRUE;\r
36 }\r
37 \r
38 float entcs_send(entity to, float sf)\r
39 {\r
40         WriteByte(MSG_ENTITY, ENT_CLIENT_ENTCS);\r
41         WriteByte(MSG_ENTITY, sf);\r
42         if(sf & 1)\r
43                 WriteByte(MSG_ENTITY, num_for_edict(self.owner)-1);\r
44         if(sf & 2)\r
45         {\r
46                 WriteShort(MSG_ENTITY, self.origin_x);\r
47                 WriteShort(MSG_ENTITY, self.origin_y);\r
48                 WriteShort(MSG_ENTITY, self.origin_z);\r
49         }\r
50         if(sf & 4)\r
51                 WriteByte(MSG_ENTITY, self.angles_y * 256.0 / 360);\r
52         if(sf & 8)\r
53                 WriteShort(MSG_ENTITY, self.health);\r
54         if(sf & 16)\r
55                 WriteShort(MSG_ENTITY, self.armorvalue);\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 };\r
87 \r
88 entity attach_entcs()\r
89 {\r
90         local entity ent;\r
91 \r
92         ent = spawn();\r
93         ent.classname = "entcs_sender_v2";\r
94         ent.owner = self;\r
95         ent.think = entcs_think;\r
96         ent.nextthink = time;\r
97 \r
98         Net_LinkEntity(ent, FALSE, 0, entcs_send);\r
99         ent.customizeentityforclient = entcs_customize;\r
100 \r
101         self.entcs = ent;\r
102 \r
103         return ent;\r
104 };\r
105 \r
106 void detach_entcs()\r
107 {\r
108         remove(self.entcs);\r
109         self.entcs = world;\r
110 };\r