X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Ffunc_breakable.qc;h=3af433aceb075b966993512f0f42f330906bc487;hb=78dc4132aa18671d81deb67b0cbcde5369c4d103;hp=e525b9caedd6f918c0bae5cd9d1d9239e8a1bb72;hpb=c66fc7388e82e597467801da4d46e7bc3bc2ed18;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/func_breakable.qc b/qcsrc/server/func_breakable.qc index e525b9cae..3af433ace 100644 --- a/qcsrc/server/func_breakable.qc +++ b/qcsrc/server/func_breakable.qc @@ -85,15 +85,18 @@ void func_breakable_look_destroyed() { local float floor_z; + if(self.solid == SOLID_BSP) // in case a misc_follow moved me, save the current origin first + self.dropped_origin = self.origin; + if(self.mdl_dead == "") self.model = ""; else { - setmodel(self, self.mdl_dead); if (self.origin == '0 0 0') { // probably no origin brush, so don't spawn in the middle of the map.. floor_z = self.absmin_z; setorigin(self,((self.absmax+self.absmin)*.5)); self.origin_z = floor_z; } + setmodel(self, self.mdl_dead); } self.solid = SOLID_NOT; @@ -102,6 +105,8 @@ void func_breakable_look_destroyed() void func_breakable_look_restore() { setmodel(self, self.mdl); + if(self.mdl_dead != "") // only do this if we use mdl_dead, to behave better with misc_follow + setorigin(self, self.dropped_origin); self.solid = SOLID_BSP; } @@ -117,6 +122,11 @@ void func_breakable_behave_destroyed() void func_breakable_behave_restore() { self.health = self.max_health; + if(self.sprite) + { + WaypointSprite_UpdateMaxHealth(self.sprite, self.max_health); + WaypointSprite_UpdateHealth(self.sprite, self.health); + } self.takedamage = DAMAGE_AIM; self.event_damage = func_breakable_damage; self.state = 0; @@ -141,6 +151,7 @@ void func_breakable_destroy() { string oldmsg; activator = self.owner; + self.owner = world; // set by W_PrepareExplosionByDamage // now throw around the debris n = tokenize_console(self.debris); @@ -174,9 +185,12 @@ void func_breakable_damage(entity inflictor, entity attacker, float damage, floa if(self.team) if(attacker.team == self.team) return; + self.health = self.health - damage; if(self.sprite) + { WaypointSprite_Ping(self.sprite); - self.health = self.health - damage; + WaypointSprite_UpdateHealth(self.sprite, self.health); + } func_breakable_colormod(); if(self.health <= 0) @@ -241,6 +255,7 @@ void spawnfunc_func_breakable() { precache_sound(self.noise); self.team_saved = self.team; + self.dropped_origin = self.origin; self.reset = func_breakable_reset; func_breakable_reset();