X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fw_minelayer.qc;h=afe37b56f7b6680bcd143f88d0a460288b11481c;hb=4f9149218900484f5d0ee0ab4d6d6b31f96f2be7;hp=aeeb2bb07befa57bbab72167d7301af05eed20ea;hpb=e7b12effc56b759e64fff06e252d1953096a9d9f;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/w_minelayer.qc b/qcsrc/server/w_minelayer.qc index aeeb2bb07..afe37b56f 100644 --- a/qcsrc/server/w_minelayer.qc +++ b/qcsrc/server/w_minelayer.qc @@ -13,7 +13,7 @@ void spawnfunc_weapon_minelayer (void) void W_Mine_Stick (entity to) { - spamsound (self, CH_SHOTS_SINGLE, "weapons/mine_stick.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CH_SHOTS, "weapons/mine_stick.wav", VOL_BASE, ATTN_NORM); // in order for mines to face properly when sticking to the ground, they must be a server side entity rather than a csqc projectile @@ -38,6 +38,7 @@ void W_Mine_Stick (entity to) newmine.health = self.health; newmine.event_damage = self.event_damage; newmine.spawnshieldtime = self.spawnshieldtime; + newmine.damagedbycontents = TRUE; newmine.movetype = MOVETYPE_NONE; // lock the mine in place newmine.projectiledeathtype = self.projectiledeathtype; @@ -176,7 +177,7 @@ void W_Mine_Think (void) if ((time > self.cnt) && (!self.mine_time)) { if(autocvar_g_balance_minelayer_lifetime_countdown > 0) - spamsound (self, CH_SHOTS_SINGLE, "weapons/mine_trigger.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CH_SHOTS, "weapons/mine_trigger.wav", VOL_BASE, ATTN_NORM); self.mine_time = time + autocvar_g_balance_minelayer_lifetime_countdown; self.mine_explodeanyway = 1; // make the mine super aggressive -- Samual: Rather, make it not care if a team mate is near. } @@ -199,7 +200,7 @@ void W_Mine_Think (void) if(head != self.realowner && IsDifferentTeam(head, self.realowner)) // don't trigger for team mates if(!self.mine_time) { - spamsound (self, CH_SHOTS_SINGLE, "weapons/mine_trigger.wav", VOL_BASE, ATTN_NORM); + spamsound (self, CH_SHOTS, "weapons/mine_trigger.wav", VOL_BASE, ATTN_NORM); self.mine_time = time + autocvar_g_balance_minelayer_time; } head = head.chain; @@ -241,8 +242,15 @@ void W_Mine_Damage (entity inflictor, entity attacker, float damage, float death { if (self.health <= 0) return; + + float is_from_enemy = (inflictor.realowner != self.realowner); + + if (!W_CheckProjectileDamage(inflictor.realowner, self.realowner, deathtype, (is_from_enemy ? 1 : -1))) + return; // g_projectiles_damage says to halt + self.health = self.health - damage; self.angles = vectoangles(self.velocity); + if (self.health <= 0) W_PrepareExplosionByDamage(attacker, W_Mine_Explode); } @@ -284,6 +292,7 @@ void W_Mine_Attack (void) mine.damageforcescale = autocvar_g_balance_minelayer_damageforcescale; mine.health = autocvar_g_balance_minelayer_health; mine.event_damage = W_Mine_Damage; + mine.damagedbycontents = TRUE; mine.movetype = MOVETYPE_TOSS; PROJECTILE_MAKETRIGGER(mine); @@ -486,7 +495,7 @@ float w_minelayer(float req) if (ATTACK_FINISHED(self) <= time || self.weapon != WEP_MINE_LAYER) { ammo_amount = self.ammo_rockets >= autocvar_g_balance_minelayer_ammo; - ammo_amount += self.weapon_load[WEP_MINE_LAYER] >= autocvar_g_balance_minelayer_ammo; + ammo_amount += self.(weapon_load[WEP_MINE_LAYER]) >= autocvar_g_balance_minelayer_ammo; return ammo_amount; } } @@ -502,7 +511,7 @@ float w_minelayer(float req) W_Reload(autocvar_g_balance_minelayer_ammo, autocvar_g_balance_minelayer_reload_ammo, autocvar_g_balance_minelayer_reload_time, "weapons/reload.wav"); } return TRUE; -}; +} #endif #ifdef CSQC float w_minelayer(float req) @@ -513,14 +522,17 @@ float w_minelayer(float req) org2 = w_org + w_backoff * 12; pointparticles(particleeffectnum("rocket_explode"), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS_SINGLE, "weapons/mine_exp.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/mine_exp.wav", VOL_BASE, ATTN_NORM); } else if(req == WR_PRECACHE) { precache_sound("weapons/mine_exp.wav"); } else if (req == WR_SUICIDEMESSAGE) - w_deathtypestring = _("%s exploded"); + if(w_deathtype & HITTYPE_BOUNCE) // (remote detonation) + w_deathtypestring = _("%s blew themself up with their minelayer"); + else + w_deathtypestring = _("%s forgot about their mine"); else if (req == WR_KILLMESSAGE) { if(w_deathtype & HITTYPE_BOUNCE) // (remote detonation)