X-Git-Url: http://git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fserver%2Fvehicles%2Fvehicles.qc;h=aa72658b512b2137442d85cbfc969e8f51f473b3;hp=75fa9407e6858b05393a4bdb5ce749f2bc99ec12;hb=105c4e2c93cadac6c8b09a998333e2f5fe11a533;hpb=1b130c7ceb9f035ba250a879967d8356552bb914 diff --git a/qcsrc/server/vehicles/vehicles.qc b/qcsrc/server/vehicles/vehicles.qc index 75fa9407e..aa72658b5 100644 --- a/qcsrc/server/vehicles/vehicles.qc +++ b/qcsrc/server/vehicles/vehicles.qc @@ -16,7 +16,7 @@ void vehicles_return(); void vehicles_enter(); void vehicles_touch(); void vehicles_reset_colors(); -void vehicles_clearrturn(); +void vehicles_clearreturn(); void vehicles_setreturn(); @@ -456,6 +456,30 @@ entity vehicles_projectile(string _mzlfx, string _mzlsound, } // End generic vehile projectile system +void vehicles_reset() +{ + if(self.owner) + { + entity oldself = self; + self = self.owner; + vehicles_exit(VHEF_RELESE); + self = oldself; + } + self.alpha = -1; + self.movetype = MOVETYPE_NONE; + self.effects = EF_NODRAW; + self.colormod = '0 0 0'; + self.avelocity = '0 0 0'; + self.velocity = '0 0 0'; + self.event_damage = func_null; + self.solid = SOLID_NOT; + self.deadflag = DEAD_NO; + + self.touch = func_null; + self.nextthink = 0; + vehicles_setreturn(); +} + /** vehicles_spawn Exetuted for all vehicles on (re)spawn. Sets defaults for newly spawned units. @@ -470,6 +494,7 @@ void vehicles_spawn() self.owner = world; self.touch = vehicles_touch; self.event_damage = vehicles_damage; + self.reset = vehicles_reset; self.iscreature = TRUE; self.teleportable = FALSE; // no teleporting for vehicles, too buggy self.damagedbycontents = TRUE; @@ -512,7 +537,7 @@ float vehicles_crushable(entity e) return FALSE; } -void vehilces_impact(float _minspeed, float _speedfac, float _maxpain) +void vehicles_impact(float _minspeed, float _speedfac, float _maxpain) { if (trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT) return; @@ -658,7 +683,7 @@ void vehicles_enter() } } - vehicles_clearrturn(); + vehicles_clearreturn(); CSQCVehicleSetup(self.owner, self.hud); @@ -964,7 +989,7 @@ void vehicles_damage(entity inflictor, entity attacker, float damage, float deat } } -void vehicles_clearrturn() +void vehicles_clearreturn() { entity ret; // Remove "return helper", if any. @@ -1055,7 +1080,7 @@ void vehicles_setreturn() { entity ret; - vehicles_clearrturn(); + vehicles_clearreturn(); ret = spawn(); ret.classname = "vehicle_return"; @@ -1063,19 +1088,16 @@ void vehicles_setreturn() ret.team = self.team; ret.think = vehicles_showwp; - if(self.deadflag != DEAD_NO) - { - ret.cnt = time + self.vehicle_respawntime; - ret.nextthink = min(time + self.vehicle_respawntime, time + self.vehicle_respawntime - 5); - } - else - { - ret.nextthink = min(time + self.vehicle_respawntime, time + self.vehicle_respawntime - 1); - } + if(self.deadflag != DEAD_NO) + { + ret.cnt = max(game_starttime, time) + self.vehicle_respawntime; + ret.nextthink = max(game_starttime, time) + max(0, self.vehicle_respawntime - 5); + } + else + ret.nextthink = max(game_starttime, time) + max(0, self.vehicle_respawntime - 1); setmodel(ret, "null"); setorigin(ret, self.pos1 + '0 0 96'); - } void vehicles_reset_colors() @@ -1273,15 +1295,14 @@ float vehicle_initialize(string net_name, self.event_damage = func_null; self.touch = vehicles_touch; self.think = vehicles_spawn; - self.nextthink = time; - self.vehicle_respawntime = _respawntime; self.vehicle_spawn = spawnproc; + self.vehicle_respawntime = max(0, _respawntime); self.effects = EF_NODRAW; self.dphitcontentsmask = DPCONTENTS_BODY | DPCONTENTS_SOLID; - if(!autocvar_g_vehicles_delayspawn) - self.nextthink = time + game_starttime; - else - self.nextthink = time + _respawntime + (random() * autocvar_g_vehicles_delayspawn_jitter); + if(!autocvar_g_vehicles_delayspawn || !self.vehicle_respawntime) + self.nextthink = time; + else + self.nextthink = max(time, game_starttime) + max(0, self.vehicle_respawntime + ((random() * 2 - 1) * autocvar_g_vehicles_delayspawn_jitter)); if(autocvar_g_playerclip_collisions) self.dphitcontentsmask |= DPCONTENTS_PLAYERCLIP;