X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=qcsrc%2Fcommon%2Fvehicles%2Fvehicle%2Fbumblebee.qc;h=9885269ac489719e7624b15cd883a2e6640e2b51;hb=678388b78fdaad89fc8218dadf7007432b4153c3;hp=ac98dadbe841f254e9ad26f85cdcd62ae93ef85f;hpb=17308b9ad60c2f773be0de39b811a9752e3037af;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/vehicles/vehicle/bumblebee.qc b/qcsrc/common/vehicles/vehicle/bumblebee.qc index ac98dadbe..9885269ac 100644 --- a/qcsrc/common/vehicles/vehicle/bumblebee.qc +++ b/qcsrc/common/vehicles/vehicle/bumblebee.qc @@ -135,7 +135,7 @@ bool bumblebee_gunner_frame(entity this) if(autocvar_g_vehicle_bumblebee_cannon_lock) { if(gun.lock_time < time) - gun.enemy = world; + gun.enemy = NULL; if(trace_ent) if(trace_ent.movetype) @@ -235,8 +235,8 @@ vector bumblebee_gunner_findgoodexit(vector prefer_spot, entity gunner, entity p void bumblebee_gunner_exit(entity this, int _exitflag) { - entity player = this; - entity gunner = player.vehicle; + entity player = ((this.owner.gun1 == this) ? this.owner.gunner1 : this.owner.gunner2); + entity gunner = this; entity vehic = gunner.owner; if(IS_REAL_CLIENT(player)) @@ -269,8 +269,8 @@ void bumblebee_gunner_exit(entity this, int _exitflag) fixedmakevectors(vehic.angles); - if(player == vehic.gunner1) { vehic.gunner1 = world; } - if(player == vehic.gunner2) { vehic.gunner2 = world; v_right *= -1; } + if(player == vehic.gunner1) { vehic.gunner1 = NULL; } + if(player == vehic.gunner2) { vehic.gunner2 = NULL; v_right *= -1; } vector spot = real_origin(gunner); spot = spot + v_up * 128 + v_forward * 300 + v_right * 150; @@ -286,13 +286,13 @@ void bumblebee_gunner_exit(entity this, int _exitflag) MUTATOR_CALLHOOK(VehicleExit, player, gunner); - player.vehicle = world; + player.vehicle = NULL; } bool bumblebee_gunner_enter(entity this, entity player) { entity vehic = this; - entity gunner = world; + entity gunner = NULL; if(!vehic.gunner1 && !vehic.gunner2 && ((time >= vehic.gun1.phase) + (time >= vehic.gun2.phase)) == 2) { @@ -369,26 +369,26 @@ bool vehicles_valid_pilot(entity this, entity toucher) return true; } -void bumblebee_touch(entity this) +void bumblebee_touch(entity this, entity toucher) { if(autocvar_g_vehicles_enter) { return; } - if(this.gunner1 != world && this.gunner2 != world) + if(this.gunner1 != NULL && this.gunner2 != NULL) { - vehicles_touch(this); + vehicles_touch(this, toucher); return; } - if(vehicles_valid_pilot(this, other)) + if(vehicles_valid_pilot(this, toucher)) { float phase_time = (time >= this.gun1.phase) + (time >= this.gun2.phase); - if(time >= other.vehicle_enter_delay && phase_time) - if(bumblebee_gunner_enter(this, other)) + if(time >= toucher.vehicle_enter_delay && phase_time) + if(bumblebee_gunner_enter(this, toucher)) return; } - vehicles_touch(this); + vehicles_touch(this, toucher); } void bumblebee_regen(entity this) @@ -505,7 +505,7 @@ bool bumblebee_pilot_frame(entity this) if(autocvar_g_vehicle_bumblebee_healgun_locktime) { if(vehic.tur_head.lock_time < time || IS_DEAD(vehic.tur_head.enemy) || STAT(FROZEN, vehic.tur_head.enemy)) - vehic.tur_head.enemy = world; + vehic.tur_head.enemy = NULL; if(trace_ent) if(trace_ent.movetype) @@ -562,7 +562,7 @@ bool bumblebee_pilot_frame(entity this) if((teamplay && trace_ent.team == this.team) || !teamplay) { - if(trace_ent.vehicle_flags & VHF_ISVEHICLE) + if(IS_VEHICLE(trace_ent)) { if(autocvar_g_vehicle_bumblebee_healgun_sps && trace_ent.vehicle_health <= trace_ent.max_health) trace_ent.vehicle_shield = min(trace_ent.vehicle_shield + autocvar_g_vehicle_bumblebee_healgun_sps * frametime, trace_ent.tur_head.max_health); @@ -604,7 +604,7 @@ bool bumblebee_pilot_frame(entity this) if(vehic.gun3.enemy) remove(vehic.gun3.enemy); - vehic.gun3.enemy = world; + vehic.gun3.enemy = NULL; } */ @@ -629,7 +629,7 @@ void bumblebee_land(entity this) { float hgt; - hgt = raptor_altitude(this, 512); + hgt = vehicle_altitude(this, 512); this.velocity = (this.velocity * 0.9) + ('0 0 -1800' * (hgt / 256) * sys_frametime); this.angles_x *= 0.95; this.angles_z *= 0.95; @@ -681,16 +681,16 @@ void bumblebee_exit(entity this, int eject) setorigin(this.owner, spot); antilag_clear(this.owner, CS(this.owner)); - this.owner = world; + this.owner = NULL; } void bumblebee_blowup(entity this) { RadiusDamage(this, this.enemy, autocvar_g_vehicle_bumblebee_blowup_coredamage, autocvar_g_vehicle_bumblebee_blowup_edgedamage, - autocvar_g_vehicle_bumblebee_blowup_radius, this, world, + autocvar_g_vehicle_bumblebee_blowup_radius, this, NULL, autocvar_g_vehicle_bumblebee_blowup_forceintensity, - DEATH_VH_BUMB_DEATH.m_id, world); + DEATH_VH_BUMB_DEATH.m_id, NULL); sound(this, CH_SHOTS, SND_ROCKET_IMPACT, VOL_BASE, ATTEN_NORM); Send_Effect(EFFECT_EXPLOSION_BIG, (this.origin + '0 0 100') + (randomvec() * 80), '0 0 0', 1); @@ -701,6 +701,11 @@ void bumblebee_blowup(entity this) remove(this); } +void bumblebee_dead_touch(entity this, entity toucher) +{ + bumblebee_blowup(this); +} + void bumblebee_diethink(entity this) { if(time >= this.wait) @@ -744,24 +749,18 @@ METHOD(Bumblebee, vr_think, void(Bumblebee thisveh, entity instance)) if(instance.gunner1) { entity e = instance.gunner1; - instance.gun1.vehicle_exit(e, VHEF_EJECT); - entity oldother = other; - other = e; + instance.gun1.vehicle_exit(instance.gun1, VHEF_EJECT); instance.phase = 0; - gettouch(instance)(instance); - other = oldother; + gettouch(instance)(instance, e); return; } if(instance.gunner2) { entity e = instance.gunner2; - instance.gun2.vehicle_exit(e, VHEF_EJECT); - entity oldother = other; - other = e; + instance.gun2.vehicle_exit(instance.gun2, VHEF_EJECT); instance.phase = 0; - gettouch(instance)(instance); - other = oldother; + gettouch(instance)(instance, e); return; } } @@ -775,10 +774,10 @@ METHOD(Bumblebee, vr_death, void(Bumblebee thisveh, entity instance)) instance.gun3.enemy.effects |= EF_NODRAW; if(instance.gunner1) - instance.gun1.vehicle_exit(instance.gunner1, VHEF_EJECT); + instance.gun1.vehicle_exit(instance.gun1, VHEF_EJECT); if(instance.gunner2) - instance.gun2.vehicle_exit(instance.gunner2, VHEF_EJECT); + instance.gun2.vehicle_exit(instance.gun2, VHEF_EJECT); instance.vehicle_exit(instance, VHEF_EJECT); @@ -790,7 +789,7 @@ METHOD(Bumblebee, vr_death, void(Bumblebee thisveh, entity instance)) entity _body = vehicle_tossgib(instance, instance, instance.velocity + randomvec() * 200, "", rint(random()), rint(random()), 6, randomvec() * 100); if(random() > 0.5) - settouch(_body, bumblebee_blowup); + settouch(_body, bumblebee_dead_touch); else settouch(_body, func_null); @@ -876,7 +875,7 @@ METHOD(Bumblebee, vr_spawn, void(Bumblebee thisveh, entity instance)) instance.scale = 1.5; // Raygun beam - if(instance.gun3.enemy == world) + if(instance.gun3.enemy == NULL) { instance.gun3.enemy = spawn(); Net_LinkEntity(instance.gun3.enemy, true, 0, bumble_raygun_send);