X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fgenerator.qc;h=3e0b5171f249350679e64ec0cf9896ed4933227d;hb=86c9dc7c3696c329496b06375c1e79fb407401ce;hp=891b82039063b0485a658237701088acd2698cd9;hpb=78776096e605e2cbcddeb7e4a022e4a38c8c67f6;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/generator.qc b/qcsrc/server/generator.qc index 891b82039..3e0b5171f 100644 --- a/qcsrc/server/generator.qc +++ b/qcsrc/server/generator.qc @@ -1,162 +1,37 @@ -#ifdef CSQC -float generator_precached; +#include "generator.qh" -void generator_precache() +bool generator_send(entity to, int sf) { - if(generator_precached) - return; // already precached - - precache_model("models/onslaught/generator.md3"); - precache_model("models/onslaught/generator_dead.md3"); - precache_model("models/onslaught/generator_dmg1.md3"); - precache_model("models/onslaught/generator_dmg2.md3"); - precache_model("models/onslaught/generator_dmg3.md3"); - precache_model("models/onslaught/generator_dmg4.md3"); - precache_model("models/onslaught/generator_dmg5.md3"); - precache_model("models/onslaught/generator_dmg6.md3"); - precache_model("models/onslaught/generator_dmg7.md3"); - precache_model("models/onslaught/generator_dmg8.md3"); - precache_model("models/onslaught/generator_dmg9.md3"); - precache_model("models/onslaught/generator_dead.md3"); - - generator_precached = TRUE; -} - -void generator_draw() { } // TODO - -.float max_health; -void generator_damage(float hp) -{ - if(hp <= 0) - setmodel(self, "models/onslaught/generator_dead.md3"); - else if(hp < self.max_health * 0.10) - setmodel(self, "models/onslaught/generator_dmg9.md3"); - else if(hp < self.max_health * 0.20) - setmodel(self, "models/onslaught/generator_dmg8.md3"); - else if(hp < self.max_health * 0.30) - setmodel(self, "models/onslaught/generator_dmg7.md3"); - else if(hp < self.max_health * 0.40) - setmodel(self, "models/onslaught/generator_dmg6.md3"); - else if(hp < self.max_health * 0.50) - setmodel(self, "models/onslaught/generator_dmg5.md3"); - else if(hp < self.max_health * 0.60) - setmodel(self, "models/onslaught/generator_dmg4.md3"); - else if(hp < self.max_health * 0.70) - setmodel(self, "models/onslaught/generator_dmg3.md3"); - else if(hp < self.max_health * 0.80) - setmodel(self, "models/onslaught/generator_dmg2.md3"); - else if(hp < self.max_health * 0.90) - setmodel(self, "models/onslaught/generator_dmg1.md3"); - else if(hp <= self.max_health || hp >= self.max_health) - setmodel(self, "models/onslaught/generator.md3"); - - setsize(self, GENERATOR_MIN, GENERATOR_MAX); -} - -void generator_construct() -{ - self.netname = "Generator"; - - setorigin(self, self.origin); - setmodel(self, "models/onslaught/generator.md3"); - setsize(self, GENERATOR_MIN, GENERATOR_MAX); - - self.move_movetype = MOVETYPE_NOCLIP; - self.solid = SOLID_BBOX; - self.movetype = MOVETYPE_NOCLIP; - self.move_origin = self.origin; - self.move_time = time; - self.drawmask = MASK_NORMAL; - self.alpha = 1; - self.draw = generator_draw; -} - -.vector glowmod; -void generator_changeteam() -{ - self.glowmod = Team_ColorRGB(self.team - 1); - self.teamradar_color = Team_ColorRGB(self.team - 1); - - if(self.team) - self.colormap = 1024 + (self.team - 1) * 17; -} - -void ent_generator() -{ - float sf; - sf = ReadByte(); - + WriteByte(MSG_ENTITY, ENT_CLIENT_GENERATOR); + WriteByte(MSG_ENTITY, sf); if(sf & GSF_SETUP) { - self.origin_x = ReadCoord(); - self.origin_y = ReadCoord(); - self.origin_z = ReadCoord(); - setorigin(self, self.origin); - - self.health = ReadByte(); - self.max_health = ReadByte(); - - generator_precache(); - generator_construct(); - self.colormap = 1024; - self.glowmod = '1 1 0'; + WriteCoord(MSG_ENTITY, self.origin_x); + WriteCoord(MSG_ENTITY, self.origin_y); + WriteCoord(MSG_ENTITY, self.origin_z); + + WriteByte(MSG_ENTITY, self.health); + WriteByte(MSG_ENTITY, self.max_health); + WriteByte(MSG_ENTITY, self.count); + WriteByte(MSG_ENTITY, self.team); } if(sf & GSF_STATUS) { - float _tmp; - _tmp = ReadByte(); - if(_tmp != self.team) - { - self.team = _tmp; - generator_changeteam(); - } - - _tmp = ReadByte(); - - if(_tmp != self.health) - generator_damage(_tmp); - - //if(_tmp == 0 && self.health != 0) - //generator_die(); + WriteByte(MSG_ENTITY, self.team); - self.health = _tmp; + if(self.health <= 0) + WriteByte(MSG_ENTITY, 0); + else + WriteByte(MSG_ENTITY, ceil((self.health / self.max_health) * 255)); } -} -#endif // CSQC -#ifdef SVQC -float generator_send(entity to, float sf) -{ - WriteByte(MSG_ENTITY, ENT_CLIENT_GENERATOR); - WriteByte(MSG_ENTITY, sf); - if(sf & GSF_SETUP) - { - WriteCoord(MSG_ENTITY, self.origin_x); - WriteCoord(MSG_ENTITY, self.origin_y); - WriteCoord(MSG_ENTITY, self.origin_z); - - WriteByte(MSG_ENTITY, self.health); - WriteByte(MSG_ENTITY, self.max_health); - } - - if(sf & GSF_STATUS) - { - WriteByte(MSG_ENTITY, self.team); - - if(self.health <= 0) - WriteByte(MSG_ENTITY, 0); - else - WriteByte(MSG_ENTITY, ceil((self.health / self.max_health) * 255)); - } - - return TRUE; + return true; } void generator_link(void() spawnproc) { - Net_LinkEntity(self, TRUE, 0, generator_send); - self.think = spawnproc; - self.nextthink = time; + Net_LinkEntity(self, true, 0, generator_send); + self.think = spawnproc; + self.nextthink = time; } -#endif // SVQC