-#include "vehicles.qh"
#include "sv_vehicles.qh"
+#include "../effects.qh"
-float SendAuxiliaryXhair(entity to, float sf)
+#if 0
+bool vehicle_send(entity to, int sf)
+{
+ WriteByte(MSG_ENTITY, ENT_CLIENT_VEHICLE);
+ WriteByte(MSG_ENTITY, sf);
+
+ if(sf & VSF_SPAWN)
+ {
+ WriteByte(MSG_ENTITY, self.vehicleid);
+ }
+
+ if(sf & VSF_SETUP)
+ {
+ // send stuff?
+ }
+
+ if(sf & VSF_ENTER)
+ {
+ // player handles the .vehicle stuff, we need only set ourselves up for driving
+
+ // send stuff?
+ }
+
+ if(sf & VSF_EXIT)
+ {
+ // senf stuff?
+ }
+
+ if(sf & VSF_PRECACHE)
+ {
+ // send stuff?!
+ }
+
+ return true;
+}
+#endif
+
+bool SendAuxiliaryXhair(entity to, int sf)
{
WriteByte(MSG_ENTITY, ENT_CLIENT_AUXILIARYXHAIR);
return true;
}
-void UpdateAuxiliaryXhair(entity own, vector loc, vector clr, float axh_id)
+void UpdateAuxiliaryXhair(entity own, vector loc, vector clr, int axh_id)
{
if(!IS_REAL_CLIENT(own))
return;
own.(AuxiliaryXhair[axh_id]) = axh;
}
-void CSQCVehicleSetup(entity own, float vehicle_id)
+void CSQCVehicleSetup(entity own, int vehicle_id)
{
if(!IS_REAL_CLIENT(own))
return;
vector targetdrone_getnewspot()
{
vector spot;
- float i;
+ int i;
for(i = 0; i < 100; ++i)
{
spot = self.origin + randomvec() * 1024;
if(trace_ent.deadflag != DEAD_NO)
trace_ent = world;
- if(!((trace_ent.vehicle_flags & VHF_ISVEHICLE) || (trace_ent.turrcaps_flags & TFL_TURRCAPS_ISTURRET)))
+ if(!(IS_VEHICLE(trace_ent) || IS_TURRET(trace_ent)))
trace_ent = world;
if(trace_ent.alpha <= 0.5 && trace_ent.alpha != 0)
}
// projectile handling
-void vehicles_projectile_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+void vehicles_projectile_damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force)
{
// Ignore damage from oterh projectiles from my owner (dont mess up volly's)
if(inflictor.owner == self.owner)
entity vehicles_projectile(string _mzlfx, string _mzlsound,
vector _org, vector _vel,
float _dmg, float _radi, float _force, float _size,
- float _deahtype, float _projtype, float _health,
- float _cull, float _clianim, entity _owner)
+ int _deahtype, float _projtype, float _health,
+ bool _cull, bool _clianim, entity _owner)
{
entity proj;
sound (self, CH_WEAPON_A, _mzlsound, VOL_BASE, ATTEN_NORM);
if(_mzlfx)
- pointparticles(particleeffectnum(_mzlfx), proj.origin, proj.velocity, 1);
-
+ Send_Effect(_mzlfx, proj.origin, proj.velocity, 1);
setsize (proj, '-1 -1 -1' * _size, '1 1 1' * _size);
void vehicles_gib_explode()
{
sound (self, CH_SHOTS, "weapons/rocket_impact.wav", VOL_BASE, ATTEN_NORM);
- pointparticles(particleeffectnum("explosion_small"), randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
- pointparticles(particleeffectnum("explosion_small"), self.wp00.origin + '0 0 64', '0 0 0', 1);
+ Send_Effect("explosion_small", randomvec() * 80 + (self.origin + '0 0 100'), '0 0 0', 1);
+ Send_Effect("explosion_small", self.wp00.origin + '0 0 64', '0 0 0', 1);
remove(self);
}
self.nextthink = time + 0.1;
}
-entity vehicle_tossgib(entity _template, vector _vel, string _tag, float _burn, float _explode, float _maxtime, vector _rot)
+entity vehicle_tossgib(entity _template, vector _vel, string _tag, bool _burn, bool _explode, float _maxtime, vector _rot)
{
entity _gib = spawn();
setmodel(_gib, _template.model);
return _gib;
}
-float vehicle_addplayerslot( entity _owner,
+bool vehicle_addplayerslot( entity _owner,
entity _slot,
- float _hud,
+ int _hud,
string _hud_model,
- float() _framefunc,
- void(float) _exitfunc, float() _enterfunc)
+ bool() _framefunc,
+ void(bool) _exitfunc, float() _enterfunc)
{
if(!(_owner.vehicle_flags & VHF_MULTISLOT))
_owner.vehicle_flags |= VHF_MULTISLOT;
void vehicles_spawn();
void vehicles_return()
{
- pointparticles(particleeffectnum("teleport"), self.wp00.origin + '0 0 64', '0 0 0', 1);
+ Send_Effect("teleport", self.wp00.origin + '0 0 64', '0 0 0', 1);
self.wp00.think = vehicles_spawn;
self.wp00.nextthink = time;
rgb = Team_ColorRGB(self.team);
else
rgb = '1 1 1';
- WaypointSprite_Spawn("vehicle", 0, 0, self, '0 0 64', world, 0, self, waypointsprite_attached, true, RADARICON_POWERUP, rgb);
+ entity wp = WaypointSprite_Spawn(WP_Vehicle, 0, 0, self, '0 0 64', world, 0, self, waypointsprite_attached, true, RADARICON_POWERUP);
+ wp.colormod = rgb;
if(self.waypointsprite_attached)
{
WaypointSprite_UpdateRule(self.waypointsprite_attached, self.wp00.team, SPRITERULE_DEFAULT);
}
}
-void vehicles_damage(entity inflictor, entity attacker, float damage, float deathtype, vector hitloc, vector force)
+void vehicles_damage(entity inflictor, entity attacker, float damage, int deathtype, vector hitloc, vector force)
{
self.dmg_time = time;
// WEAPONTODO
- if(DEATH_ISWEAPON(deathtype, WEP_VORTEX))
+ if(DEATH_ISWEAPON(deathtype, WEP_VORTEX.m_id))
damage *= autocvar_g_vehicles_vortex_damagerate;
- if(DEATH_ISWEAPON(deathtype, WEP_MACHINEGUN))
+ if(DEATH_ISWEAPON(deathtype, WEP_MACHINEGUN.m_id))
damage *= autocvar_g_vehicles_machinegun_damagerate;
- if(DEATH_ISWEAPON(deathtype, WEP_RIFLE))
+ if(DEATH_ISWEAPON(deathtype, WEP_RIFLE.m_id))
damage *= autocvar_g_vehicles_rifle_damagerate;
- if(DEATH_ISWEAPON(deathtype, WEP_VAPORIZER))
+ if(DEATH_ISWEAPON(deathtype, WEP_VAPORIZER.m_id))
damage *= autocvar_g_vehicles_vaporizer_damagerate;
- if(DEATH_ISWEAPON(deathtype, WEP_SEEKER))
+ if(DEATH_ISWEAPON(deathtype, WEP_SEEKER.m_id))
damage *= autocvar_g_vehicles_tag_damagerate;
if(DEATH_WEAPONOFWEAPONDEATH(deathtype))
if(IS_PLAYER(e) && time >= e.vehicle_enter_delay)
return true;
- if(e.flags & FL_MONSTER)
+ if(IS_MONSTER(e))
return true;
return false;
return self.origin;
}
-void vehicles_exit(float eject)
+void vehicles_exit(bool eject)
{
entity _vehicle;
entity _player;
WaypointSprite_Kill(_vehicle.wps_intruder);
- vh_player = _player;
- vh_vehicle = _vehicle;
- MUTATOR_CALLHOOK(VehicleExit);
- _player = vh_player;
- _vehicle = vh_vehicle;
+ MUTATOR_CALLHOOK(VehicleExit, _player, _vehicle);
_vehicle.team = _vehicle.tur_head.team;
void vehicles_touch()
{
- if(MUTATOR_CALLHOOK(VehicleTouch))
+ if(MUTATOR_CALLHOOK(VehicleTouch, self, other))
return;
// Vehicle currently in use
vehicles_enter(other, self);
}
+bool vehicle_impulse(int imp)
+{
+ switch(imp)
+ {
+ case 17:
+ {
+ stuffcmd(self, "\ntoggle cl_eventchase_vehicle\nset _vehicles_shownchasemessage 1\n");
+ return true;
+ }
+ }
+
+ return false;
+}
+
void vehicles_enter(entity pl, entity veh)
{
// Remove this when bots know how to use vehicles
Send_Notification(NOTIF_ONE, pl, MSG_CENTER, CENTER_VEHICLE_STEAL_SELF);
- if(autocvar_g_vehicles_steal_show_waypoint)
- WaypointSprite_Spawn("intruder", 0, 0, pl, '0 0 68', world, veh.team, veh, wps_intruder, true, RADARICON_DANGER, Team_ColorRGB(pl.team));
+ if (autocvar_g_vehicles_steal_show_waypoint) {
+ entity wp = WaypointSprite_Spawn(WP_VehicleIntruder, 0, 0, pl, '0 0 68', world, veh.team, veh, wps_intruder, true, RADARICON_DANGER);
+ wp.colormod = Team_ColorRGB(pl.team);
+ }
}
- else { return; }
+ else return;
RemoveGrapplingHook(pl);
pl.vehicle_ammo2 = veh.vehicle_ammo2;
pl.vehicle_reload1 = veh.vehicle_reload1;
pl.vehicle_reload2 = veh.vehicle_reload2;
+ pl.vehicle_energy = veh.vehicle_energy;
// Cant do this, hides attached objects too.
//veh.exteriormodeltoclient = veh.owner;
CSQCVehicleSetup(pl, veh.vehicleid);
- vh_player = pl;
- vh_vehicle = veh;
- MUTATOR_CALLHOOK(VehicleEnter);
+ MUTATOR_CALLHOOK(VehicleEnter, pl, veh);
entity oldself = self;
self = veh;
void vehicles_think()
{
self.nextthink = time;
-
+
if(self.owner)
self.owner.vehicle_weapon2mode = self.vehicle_weapon2mode;
-
+
VEH_ACTION(self.vehicleid, VR_THINK);
CSQCMODEL_AUTOUPDATE();
self.angles = self.pos2;
setorigin(self, self.pos1);
// Show it
- pointparticles(particleeffectnum("teleport"), self.origin + '0 0 64', '0 0 0', 1);
+ Send_Effect("teleport", self.origin + '0 0 64', '0 0 0', 1);
if(self.vehicle_controller)
self.team = self.vehicle_controller.team;
CSQCMODEL_AUTOINIT();
}
-float vehicle_initialize(float vehicle_id, float nodrop)
+bool vehicle_initialize(entity veh, bool nodrop)
{
if(!autocvar_g_vehicles)
return false;
- entity veh = get_vehicleinfo(vehicle_id);
-
if(!veh.vehicleid)
return false;
-
- if(!veh.tur_head) { VEH_ACTION(vehicle_id, VR_PRECACHE); }
+
+ if(!veh.tur_head) { VEH_ACTION(veh.vehicleid, VR_PRECACHE); }
if(self.targetname && self.targetname != "")
{
if(self.team && (!teamplay || !autocvar_g_vehicles_teams))
self.team = 0;
- self.vehicle_flags |= VHF_ISVEHICLE;
+ if(self.mdl == "" || !self.mdl)
+ setmodel(self, veh.model);
+ else
+ setmodel(self, self.mdl);
- setmodel(self, veh.model);
+ self.vehicle_flags |= VHF_ISVEHICLE;
self.vehicle_viewport = spawn();
self.vehicle_hudmodel = spawn();
self.iscreature = true;
self.teleportable = false; // no teleporting for vehicles, too buggy
self.damagedbycontents = true;
- self.vehicleid = vehicle_id;
+ self.vehicleid = veh.vehicleid;
self.PlayerPhysplug = veh.PlayerPhysplug;
self.event_damage = func_null;
self.touch = vehicles_touch;
self.pos2 = self.angles;
self.tur_head.team = self.team;
- VEH_ACTION(vehicle_id, VR_SETUP);
+ VEH_ACTION(veh.vehicleid, VR_SETUP);
if(self.active == ACTIVE_NOT)
self.nextthink = 0; // wait until activated