X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fvehicles%2Fvehicles.qc;h=b9740b5d88bfa5bee49fc6589962ef61298ed672;hb=0f0e69c6625fc4db17559e2e47f2fdaed8298076;hp=1e5537a259934cd2faab7750716d1b9d57ea22de;hpb=bf20397b0c62c9de0335ef9d70d60842fde9d0b2;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/vehicles/vehicles.qc b/qcsrc/server/vehicles/vehicles.qc index 1e5537a25..b9740b5d8 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;