X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Fvehicles%2Fsv_vehicles.qc;h=716dfe8d0c130225041502345a182873aa7c111f;hb=5453f53da1df88742c11c71e4dc5b9c3e3d24c62;hp=63d662923a75d60310848c39415dab54d3a1a910;hpb=078dd992e6bb1094cfd86148cc4df33e8a62587b;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/vehicles/sv_vehicles.qc b/qcsrc/common/vehicles/sv_vehicles.qc index 63d662923..716dfe8d0 100644 --- a/qcsrc/common/vehicles/sv_vehicles.qc +++ b/qcsrc/common/vehicles/sv_vehicles.qc @@ -9,9 +9,7 @@ bool SendAuxiliaryXhair(entity this, entity to, int sf) if(sf & 2) { - WriteCoord(MSG_ENTITY, this.origin_x); - WriteCoord(MSG_ENTITY, this.origin_y); - WriteCoord(MSG_ENTITY, this.origin_z); + WriteVector(MSG_ENTITY, this.origin); } if(sf & 4) @@ -207,9 +205,9 @@ void vehicles_projectile_damage(entity this, entity inflictor, entity attacker, if(inflictor.owner == this.owner) return; - this.health -= damage; + TakeResource(this, RESOURCE_HEALTH, damage); this.velocity += force; - if(this.health < 1) + if(GetResourceAmount(this, RESOURCE_HEALTH) < 1) { this.takedamage = DAMAGE_NO; this.event_damage = func_null; @@ -253,7 +251,7 @@ entity vehicles_projectile(entity this, string _mzlfx, Sound _mzlsound, int _deahtype, float _projtype, float _health, bool _cull, bool _clianim, entity _owner) { - TC(Sound, _mzlsound); + TC(Sound, _mzlsound); entity proj; proj = spawn(); @@ -284,7 +282,7 @@ entity vehicles_projectile(entity this, string _mzlfx, Sound _mzlsound, { proj.takedamage = DAMAGE_AIM; proj.event_damage = vehicles_projectile_damage; - proj.health = _health; + SetResourceAmountExplicit(proj, RESOURCE_HEALTH, _health); } else proj.flags |= FL_NOTARGET; @@ -369,7 +367,7 @@ bool vehicle_addplayerslot( entity _owner, _slot.PlayerPhysplug = _framefunc; _slot.vehicle_exit = _exitfunc; _slot.vehicle_enter = _enterfunc; - _slot.hud = _hud; + STAT(HUD, _slot) = _hud; _slot.vehicle_flags = VHF_PLAYERSLOT; _slot.vehicle_viewport = spawn(); _slot.vehicle_hudmodel = spawn(); @@ -729,6 +727,20 @@ void vehicles_damage(entity this, entity inflictor, entity attacker, float damag } } +bool vehicles_heal(entity targ, entity inflictor, float amount, float limit) +{ + float true_limit = ((limit != RESOURCE_LIMIT_NONE) ? limit : targ.max_health); + //if(GetResourceAmount(targ, RESOURCE_HEALTH) <= 0 || GetResourceAmount(targ, RESOURCE_HEALTH) >= true_limit) + if(targ.vehicle_health <= 0 || targ.vehicle_health >= true_limit) + return false; + + targ.vehicle_health = min(targ.vehicle_health + amount, true_limit); + //GiveResourceWithLimit(targ, RESOURCE_HEALTH, amount, true_limit); + //if(targ.owner) + //targ.owner.vehicle_health = (targ.vehicle_health / targ.max_health) * 100; + return true; +} + bool vehicles_crushable(entity e) { if(IS_PLAYER(e) && time >= e.vehicle_enter_delay) @@ -799,7 +811,6 @@ void vehicles_exit(entity vehic, bool eject) vehicles_exit_running = true; - // TODO: this was in an IS_CLIENT check, make sure it isn't actually needed! if(vehic.vehicle_flags & VHF_PLAYERSLOT) { vehic.vehicle_exit(vehic, eject); @@ -827,13 +838,13 @@ void vehicles_exit(entity vehic, bool eject) player.solid = SOLID_SLIDEBOX; set_movetype(player, MOVETYPE_WALK); player.effects &= ~EF_NODRAW; - player.teleportable = TELEPORT_NORMAL; + player.teleportable = TELEPORT_NORMAL; player.alpha = 1; player.PlayerPhysplug = func_null; player.vehicle = NULL; - player.view_ofs = STAT(PL_VIEW_OFS, player); - player.event_damage = PlayerDamage; - player.hud = HUD_NORMAL; + player.view_ofs = STAT(PL_VIEW_OFS, player); + player.event_damage = PlayerDamage; + STAT(HUD, player) = HUD_NORMAL; for(int slot = 0; slot < MAX_WEAPONSLOTS; ++ slot) { .entity weaponentity = weaponentities[slot]; @@ -1007,6 +1018,7 @@ void vehicles_enter(entity pl, entity veh) setsize(pl, STAT(PL_MIN, pl), STAT(PL_MAX, pl)); veh.event_damage = vehicles_damage; + veh.event_heal = vehicles_heal; veh.nextthink = 0; pl.items &= ~IT_USING_JETPACK; pl.angles = veh.angles; @@ -1027,7 +1039,7 @@ void vehicles_enter(entity pl, entity veh) veh.(weaponentity) = new(temp_wepent); veh.(weaponentity).m_switchweapon = pl.(weaponentity).m_switchweapon; } - pl.hud = veh.vehicleid; + STAT(HUD, pl) = veh.vehicleid; pl.PlayerPhysplug = veh.PlayerPhysplug; pl.vehicle_ammo1 = veh.vehicle_ammo1; @@ -1088,7 +1100,7 @@ void vehicles_think(entity this) this.nextthink = time + autocvar_g_vehicles_thinkrate; if(this.owner) - this.owner.vehicle_weapon2mode = this.vehicle_weapon2mode; + STAT(VEHICLESTAT_W2MODE, this.owner) = STAT(VEHICLESTAT_W2MODE, this); Vehicle info = Vehicles_from(this.vehicleid); info.vr_think(info, this); @@ -1120,6 +1132,7 @@ void vehicles_spawn(entity this) this.owner = NULL; settouch(this, vehicles_touch); this.event_damage = vehicles_damage; + this.event_heal = vehicles_heal; this.reset = vehicles_reset; this.iscreature = true; this.teleportable = false; // no teleporting for vehicles, too buggy @@ -1232,6 +1245,7 @@ bool vehicle_initialize(entity this, Vehicle info, bool nodrop) this.vehicleid = info.vehicleid; this.PlayerPhysplug = info.PlayerPhysplug; this.event_damage = func_null; + this.event_heal = func_null; settouch(this, vehicles_touch); setthink(this, vehicles_spawn); this.nextthink = time;