#include "sv_vehicles.qh"
+#include <common/items/_mod.qh>
+#include <common/mapobjects/defs.qh>
+#include <common/mapobjects/teleporters.qh>
+#include <common/mapobjects/triggers.qh>
+#include <common/vehicles/vehicles.qh>
+#include <server/bot/api.qh>
+#include <server/client.qh>
+#include <server/damage.qh>
+#include <server/items/items.qh>
+#include <server/weapons/common.qh>
+#include <server/world.qh>
+
bool SendAuxiliaryXhair(entity this, entity to, int sf)
{
WriteHeader(MSG_ENTITY, ENT_CLIENT_AUXILIARYXHAIR);
}
}
-float vehicle_altitude(entity this, float amax)
-{
- tracebox(this.origin, this.mins, this.maxs, this.origin - ('0 0 1' * amax), MOVE_WORLDONLY, this);
- return vlen(this.origin - trace_endpos);
-}
-
-vector vehicles_force_fromtag_hover(entity this, string tag_name, float spring_length, float max_power)
-{
- force_fromtag_origin = gettaginfo(this, gettagindex(this, tag_name));
- v_forward = normalize(v_forward) * -1;
- traceline(force_fromtag_origin, force_fromtag_origin - (v_forward * spring_length), MOVE_NORMAL, this);
-
- force_fromtag_power = (1 - trace_fraction) * max_power;
- force_fromtag_normpower = force_fromtag_power / max_power;
-
- return v_forward * force_fromtag_power;
-}
-
-vector vehicles_force_fromtag_maglev(entity this, string tag_name, float spring_length, float max_power)
-{
- force_fromtag_origin = gettaginfo(this, gettagindex(this, tag_name));
- v_forward = normalize(v_forward) * -1;
- traceline(force_fromtag_origin, force_fromtag_origin - (v_forward * spring_length), MOVE_NORMAL, this);
-
- // TODO - this may NOT be compatible with wall/celing movement, unhardcode 0.25 (engine count multiplier)
- if(trace_fraction == 1.0)
- {
- force_fromtag_normpower = -0.25;
- return '0 0 -200';
- }
-
- force_fromtag_power = ((1 - trace_fraction) - trace_fraction) * max_power;
- force_fromtag_normpower = force_fromtag_power / max_power;
-
- return v_forward * force_fromtag_power;
-}
-
// projectile handling
void vehicles_projectile_damage(entity this, entity inflictor, entity attacker, float damage, int deathtype, .entity weaponentity, vector hitloc, vector force)
{
PROJECTILE_TOUCH(this, toucher);
this.event_damage = func_null;
- RadiusDamage (this, this.realowner, this.shot_dmg, 0, this.shot_radius, this, NULL, this.shot_force, this.totalfrags, DMG_NOWEP, toucher);
+ RadiusDamage (this, this.realowner, this.shot_dmg, 0, this.shot_radius, this, NULL, this.shot_force, this.projectiledeathtype, DMG_NOWEP, toucher);
delete(this);
}
int _deahtype, float _projtype, float _health,
bool _cull, bool _clianim, entity _owner)
{
- TC(Sound, _mzlsound);
- entity proj;
-
- proj = spawn();
+ TC(Sound, _mzlsound);
+ entity proj = new(vehicles_projectile);
PROJECTILE_MAKETRIGGER(proj);
setorigin(proj, _org);
proj.shot_dmg = _dmg;
proj.shot_radius = _radi;
proj.shot_force = _force;
- proj.totalfrags = _deahtype;
+ proj.projectiledeathtype = _deahtype;
proj.solid = SOLID_BBOX;
set_movetype(proj, MOVETYPE_FLYMISSILE);
proj.flags = FL_PROJECTILE;
entity vehicle_tossgib(entity this, entity _template, vector _vel, string _tag, bool _burn, bool _explode, float _maxtime, vector _rot)
{
- entity _gib = spawn();
+ entity _gib = new(vehicle_gib);
_setmodel(_gib, _template.model);
vector org = gettaginfo(this, gettagindex(this, _tag));
setorigin(_gib, org);
_slot.vehicle_enter = _enterfunc;
STAT(HUD, _slot) = _hud;
_slot.vehicle_flags = VHF_PLAYERSLOT;
- _slot.vehicle_viewport = spawn();
- _slot.vehicle_hudmodel = spawn();
+ _slot.vehicle_viewport = new(vehicle_viewport);
+ _slot.vehicle_hudmodel = new(vehicle_hudmodel);
_slot.vehicle_hudmodel.viewmodelforclient = _slot;
_slot.vehicle_viewport.effects = (EF_ADDITIVE | EF_DOUBLESIDED | EF_FULLBRIGHT | EF_NODEPTHTEST | EF_NOGUNBOB | EF_NOSHADOW | EF_LOWPRECISION | EF_SELECTABLE | EF_TELEPORT_BIT);
this.velocity = '0 0 0';
this.effects = eff;
- Vehicle info = Vehicles_from(this.vehicleid);
+ Vehicle info = this.vehicledef; //REGISTRY_GET(Vehicles, this.vehicleid);
info.vr_setcolors(info, this);
}
}
}
-void vehicles_regen_resource(entity this, float timer, .float regen_field, float field_max, float rpause, float regen, float delta_time, float _healthscale, int resource)
+void vehicles_regen_resource(entity this, float timer, .float regen_field, float field_max, float rpause, float regen, float delta_time, float _healthscale, Resource resource)
{
float resource_amount = GetResource(this, resource);
{
if (wasfreed(this.vehicle_shieldent) || this.vehicle_shieldent == NULL)
{
- this.vehicle_shieldent = spawn();
+ this.vehicle_shieldent = new(vehicle_shieldent);
this.vehicle_shieldent.effects = EF_LOWPRECISION;
setmodel(this.vehicle_shieldent, MDL_VEH_SHIELD);
antilag_clear(this, this);
- Vehicle info = Vehicles_from(this.vehicleid);
+ Vehicle info = this.vehicledef; //REGISTRY_GET(Vehicles, this.vehicleid);
info.vr_death(info, this);
vehicles_setreturn(this);
}
WriteByte (MSG_ONE, SVC_SETVIEWPORT);
WriteEntity( MSG_ONE, player);
+ // NOTE: engine networked
WriteByte (MSG_ONE, SVC_SETVIEWANGLES);
WriteAngle(MSG_ONE, 0);
WriteAngle(MSG_ONE, vehic.angles_y);
WriteAngle(MSG_ONE, 0);
}
- setsize(player, STAT(PL_MIN, player), STAT(PL_MAX, player));
-
player.takedamage = DAMAGE_AIM;
player.solid = SOLID_SLIDEBOX;
set_movetype(player, MOVETYPE_WALK);
}
player.last_vehiclecheck = time + 3;
player.vehicle_enter_delay = time + 2;
+ setsize(player, STAT(PL_MIN, player), STAT(PL_MAX, player));
CSQCVehicleSetup(player, HUD_NORMAL);
}
if(this.play_time < time) {
- Vehicle info = Vehicles_from(this.vehicleid);
+ Vehicle info = this.vehicledef; //REGISTRY_GET(Vehicles, this.vehicleid);
info.vr_impact(info, this);
}
|| (pl.vehicle)
) { return; }
- Vehicle info = Vehicles_from(veh.vehicleid);
+ Vehicle info = veh.vehicledef; //REGISTRY_GET(Vehicles, veh.vehicleid);
if(autocvar_g_vehicles_enter) // vehicle's touch function should handle this if entering via use key is disabled (TODO)
if(veh.vehicle_flags & VHF_MULTISLOT)
veh.vehicle_hudmodel.viewmodelforclient = pl;
- pl.crouch = false;
+ UNSET_DUCKED(pl);
pl.view_ofs = STAT(PL_VIEW_OFS, pl);
setsize(pl, STAT(PL_MIN, pl), STAT(PL_MAX, pl));
WriteByte (MSG_ONE, SVC_SETVIEWPORT);
WriteEntity(MSG_ONE, veh.vehicle_viewport);
+ // NOTE: engine networked
WriteByte (MSG_ONE, SVC_SETVIEWANGLES);
if(veh.tur_head)
{
if(this.owner)
STAT(VEHICLESTAT_W2MODE, this.owner) = STAT(VEHICLESTAT_W2MODE, this);
- Vehicle info = Vehicles_from(this.vehicleid);
+ Vehicle info = this.vehicledef; //REGISTRY_GET(Vehicles, this.vehicleid);
info.vr_think(info, this);
vehicles_painframe(this);
});
- Vehicle info = Vehicles_from(this.vehicleid);
+ Vehicle info = this.vehicledef; //REGISTRY_GET(Vehicles, this.vehicleid);
info.vr_spawn(info, this);
vehicles_reset_colors(this, NULL);
return false;
if(!this.tur_head)
- {
info.vr_precache(info);
- IL_PUSH(g_vehicles, this);
- }
if(this.targetname && this.targetname != "")
{
this.damagedbycontents = true;
IL_PUSH(g_damagedbycontents, this);
this.vehicleid = info.vehicleid;
+ this.vehicledef = info;
this.PlayerPhysplug = info.PlayerPhysplug;
this.event_damage = func_null;
this.event_heal = func_null;