this.event_damage = func_null;
RadiusDamage (this, this.realowner, this.shot_dmg, 0, this.shot_radius, this, NULL, this.shot_force, this.totalfrags, toucher);
- delete (this);
+ delete(this);
}
void vehicles_projectile_explode_think(entity this)
return vtag;
}
-void vehicles_reset_colors(entity this)
+void vehicles_reset_colors(entity this, entity player)
{
int eff = 0, cmap;
const vector cmod = '0 0 0';
if(this.team && teamplay)
cmap = 1024 + (this.team - 1) * 17;
+ else if(player)
+ cmap = player.colormap;
else
cmap = 1024;
if(autocvar_g_nodepthtestplayers)
// Find all ents attacked to main model and setup effects, colormod etc.
FOREACH_ENTITY_ENT(tag_entity, this,
{
- if(it != this.vehicle_shieldent)
- {
- it.effects = eff;
- it.colormod = cmod;
- it.colormap = cmap;
- it.alpha = 1;
- }
+ if(it == this.vehicle_shieldent)
+ continue;
+
+ it.effects = eff;
+ it.colormod = cmod;
+ it.colormap = cmap;
+ it.alpha = 1;
});
// Also check head tags
FOREACH_ENTITY_ENT(tag_entity, this.tur_head,
{
- if(it != this.vehicle_shieldent)
- {
- it.effects = eff;
- it.colormod = cmod;
- it.colormap = cmap;
- it.alpha = 1;
- }
+ if(it == this.vehicle_shieldent)
+ continue;
+
+ it.effects = eff;
+ it.colormod = cmod;
+ it.colormap = cmap;
+ it.alpha = 1;
});
this.vehicle_hudmodel.effects = this.effects = eff; // | EF_LOWPRECISION;
this.avelocity = '0 0 0';
this.velocity = '0 0 0';
this.effects = eff;
+
+ Vehicle info = Vehicles_from(this.vehicleid);
+ info.vr_setcolors(info, this);
}
void vehicles_clearreturn(entity veh)
else
{
vehicles_setreturn(this);
- vehicles_reset_colors(this);
+ vehicles_reset_colors(this, actor);
}
}
}
return this.origin;
}
+.int old_vehicle_flags;
void vehicles_exit(entity vehic, bool eject)
{
entity player = vehic.owner;
WriteAngle(MSG_ONE, 0);
}
- setsize(player, STAT(PL_MIN,player), STAT(PL_MAX, player));
+ setsize(player, STAT(PL_MIN, player), STAT(PL_MAX, player));
player.takedamage = DAMAGE_AIM;
player.solid = SOLID_SLIDEBOX;
vehic.team = vehic.tur_head.team;
+ if(vehic.old_vehicle_flags & VHF_SHIELDREGEN)
+ vehic.vehicle_flags |= VHF_SHIELDREGEN;
+ vehic.old_vehicle_flags = 0;
+
sound (vehic, CH_TRIGGER_SINGLE, SND_Null, 1, ATTEN_NORM);
vehic.vehicle_hudmodel.viewmodelforclient = vehic;
vehic.phase = time + 1;
vehic.vehicle_exit(vehic, eject);
vehicles_setreturn(vehic);
- vehicles_reset_colors(vehic);
+ vehicles_reset_colors(vehic, NULL);
vehic.owner = NULL;
CSQCMODEL_AUTOINIT(vehic);
+ if(player)
+ player.oldorigin = player.origin; // player's location is set by the exit functions, so we need to do this after everything
+
vehicles_exit_running = false;
}
Send_Notification(NOTIF_ONE, pl, MSG_CENTER, CENTER_VEHICLE_STEAL_SELF);
+ veh.vehicle_shield = 0;
+ veh.old_vehicle_flags = veh.vehicle_flags; // make a backup just so we're not permanently crippling this vehicle
+ veh.vehicle_flags &= ~VHF_SHIELDREGEN;
+
if (autocvar_g_vehicles_steal_show_waypoint) {
entity wp = WaypointSprite_Spawn(WP_VehicleIntruder, 0, 0, pl, '0 0 68', NULL, veh.team, veh, wps_intruder, true, RADARICON_DANGER);
wp.colormod = Team_ColorRGB(pl.team);
pl.crouch = false;
pl.view_ofs = STAT(PL_VIEW_OFS, pl);
- setsize (pl, STAT(PL_MIN, pl), STAT(PL_MAX, pl));
+ setsize(pl, STAT(PL_MIN, pl), STAT(PL_MAX, pl));
veh.event_damage = vehicles_damage;
veh.nextthink = 0;
veh.team = pl.team;
veh.flags -= FL_NOTARGET;
+ vehicles_reset_colors(veh, pl);
+
if (IS_REAL_CLIENT(pl))
{
Send_Notification(NOTIF_ONE, pl, MSG_CENTER, CENTER_VEHICLE_ENTER);
}
});
- vehicles_reset_colors(this);
Vehicle info = Vehicles_from(this.vehicleid);
info.vr_spawn(info, this);
+ vehicles_reset_colors(this, NULL);
+
CSQCMODEL_AUTOINIT(this);
}
setattachment(this.vehicle_viewport, this.vehicle_hudmodel, info.tag_view);
}
- setsize(this, info.mins, info.maxs);
+ setsize(this, info.m_mins, info.m_maxs);
info.vr_setup(info, this);
if(!nodrop)
{
setorigin(this, this.origin);
- tracebox(this.origin + '0 0 100', info.mins, info.maxs, this.origin - '0 0 10000', MOVE_WORLDONLY, this);
+ tracebox(this.origin + '0 0 100', info.m_mins, info.m_maxs, this.origin - '0 0 10000', MOVE_WORLDONLY, this);
setorigin(this, trace_endpos);
}