X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fw_minstanex.qc;h=b66386d50a59229309d6f1409648b895b3e93e68;hb=365bcf446f6fcee37715b550147b549bd5f8955f;hp=c0376547ab6cc0c17023cccf647bd5d8235d67a2;hpb=e7b12effc56b759e64fff06e252d1953096a9d9f;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/w_minstanex.qc b/qcsrc/server/w_minstanex.qc index c0376547a..b66386d50 100644 --- a/qcsrc/server/w_minstanex.qc +++ b/qcsrc/server/w_minstanex.qc @@ -1,8 +1,9 @@ #ifdef REGISTER_WEAPON -REGISTER_WEAPON(MINSTANEX, w_minstanex, IT_CELLS, 7, WEP_FLAG_HIDDEN | WEP_FLAG_RELOADABLE | WEP_FLAG_CANCLIMB | WEP_TYPE_HITSCAN, BOT_PICKUP_RATING_HIGH, "minstanex", "minstanex", _("MinstaNex")) +REGISTER_WEAPON(MINSTANEX, w_minstanex, IT_CELLS, 7, WEP_FLAG_HIDDEN | WEP_FLAG_RELOADABLE | WEP_FLAG_CANCLIMB | WEP_FLAG_SUPERWEAPON | WEP_TYPE_HITSCAN, BOT_PICKUP_RATING_HIGH, "minstanex", "minstanex", _("MinstaNex")) #else #ifdef SVQC .float minstanex_lasthit; +.float jump_interval; void W_MinstaNex_Attack (void) { @@ -76,10 +77,6 @@ void W_MinstaNex_Attack (void) else WarpZone_TrailParticles(world, particleeffectnum("TE_TEI_G3"), w_shotorg, v); - // flash and burn the wall - if (trace_ent.solid == SOLID_BSP && !(trace_dphitq3surfaceflags & Q3SURFACEFLAG_NOIMPACT)) - Damage_DamageInfo(trace_endpos, 10000, 0, 0, 800 * w_shotdir, WEP_MINSTANEX, self); - if (g_minstagib) W_DecreaseAmmo(ammo_cells, 1, autocvar_g_balance_minstanex_reload_ammo); else @@ -88,77 +85,80 @@ void W_MinstaNex_Attack (void) .float minstagib_nextthink; -void minstagib_ammocheck (void) +.float minstagib_needammo; +void minstagib_stop_countdown(void) +{ + if (self.minstagib_needammo) + { + self.health = 100; + Send_CSQC_Centerprint_Generic_Expire(self, CPID_MINSTA_FINDAMMO); + } + self.minstagib_needammo = FALSE; +} +void minstagib_ammocheck(void) { - if (time < self.minstagib_nextthink || self.deadflag || gameover) + if (time < self.minstagib_nextthink) return; - if (self.ammo_cells <= 0) - if not(self.items & IT_UNLIMITED_WEAPON_AMMO) + if (self.deadflag || gameover || self.ammo_cells > 0 || (self.items & IT_UNLIMITED_WEAPON_AMMO)) + minstagib_stop_countdown(); + else { + self.minstagib_needammo = TRUE; if (self.health == 5) { - centerprint(self, "you're dead now...\n"); Damage(self, self, self, 5, DEATH_NOAMMO, self.origin, '0 0 0'); AnnounceTo(self, "terminated"); } else if (self.health == 10) { - centerprint(self, "^11^7 second left to find some ammo\n"); Damage(self, self, self, 5, DEATH_NOAMMO, self.origin, '0 0 0'); AnnounceTo(self, "1"); } else if (self.health == 20) { - centerprint(self, "^12^7 seconds left to find some ammo\n"); Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0'); AnnounceTo(self, "2"); } else if (self.health == 30) { - centerprint(self, "^13^7 seconds left to find some ammo\n"); Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0'); AnnounceTo(self, "3"); } else if (self.health == 40) { - centerprint(self, "^14^7 seconds left to find some ammo\n"); Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0'); AnnounceTo(self, "4"); } else if (self.health == 50) { - centerprint(self, "^15^7 seconds left to find some ammo\n"); Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0'); AnnounceTo(self, "5"); } else if (self.health == 60) { - centerprint(self, "^36^7 seconds left to find some ammo\n"); Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0'); AnnounceTo(self, "6"); } else if (self.health == 70) { - centerprint(self, "^37^7 seconds left to find some ammo\n"); Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0'); AnnounceTo(self, "7"); } else if (self.health == 80) { - centerprint(self, "^38^7 seconds left to find some ammo\n"); Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0'); AnnounceTo(self, "8"); } else if (self.health == 90) { - centerprint(self, "^39^7 seconds left to find some ammo\n"); + Send_CSQC_Centerprint_Generic(self, CPID_MINSTA_FINDAMMO, "^1%d^7 seconds left to find some ammo", 1, 9); Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0'); AnnounceTo(self, "9"); } else if (self.health == 100) { - centerprint(self, "get some ammo or\nyou'll be dead in ^310^7 seconds..."); + Send_CSQC_Centerprint_Generic(self, CPID_MINSTA_FINDAMMO, "get some ammo or\nyou'll be dead in ^3%d^7 seconds...", 1, 10); Damage(self, self, self, 10, DEATH_NOAMMO, self.origin, '0 0 0'); if not(self.flags & FL_GODMODE) AnnounceTo(self, "10"); @@ -205,9 +205,11 @@ float w_minstanex(float req) else if (self.BUTTON_ATCK2) { if (self.jump_interval <= time) + if (weapon_prepareattack(1, -1)) { - self.jump_interval = time + autocvar_g_balance_laser_primary_refire * W_WeaponRateFactor(); - + // handle refire manually, so that primary and secondary can be fired without conflictions (important for minstagib) + self.jump_interval = time + autocvar_g_balance_minstanex_laser_refire * W_WeaponRateFactor(); + // decrease ammo for the laser? if(autocvar_g_balance_minstanex_laser_ammo) W_DecreaseAmmo(ammo_cells, autocvar_g_balance_minstanex_laser_ammo, autocvar_g_balance_minstanex_reload_ammo); @@ -218,6 +220,9 @@ float w_minstanex(float req) self.weapon = WEP_LASER; W_Laser_Attack(2); self.weapon = w; + + // now do normal refire + weapon_thinkf(WFRAME_FIRE2, autocvar_g_balance_minstanex_laser_animtime, w_ready); } } } @@ -243,7 +248,7 @@ float w_minstanex(float req) else if (req == WR_CHECKAMMO1) { ammo_amount = self.ammo_cells >= minstanex_ammo; - ammo_amount += self.weapon_load[WEP_MINSTANEX] >= minstanex_ammo; + ammo_amount += self.(weapon_load[WEP_MINSTANEX]) >= minstanex_ammo; return ammo_amount; } else if (req == WR_CHECKAMMO2) @@ -251,7 +256,7 @@ float w_minstanex(float req) if(!autocvar_g_balance_minstanex_laser_ammo) return TRUE; ammo_amount = self.ammo_cells >= autocvar_g_balance_minstanex_laser_ammo; - ammo_amount += self.weapon_load[WEP_MINSTANEX] >= autocvar_g_balance_minstanex_laser_ammo; + ammo_amount += self.(weapon_load[WEP_MINSTANEX]) >= autocvar_g_balance_minstanex_laser_ammo; return ammo_amount; } else if (req == WR_RESETPLAYER) @@ -269,7 +274,7 @@ float w_minstanex(float req) W_Reload(used_ammo, autocvar_g_balance_minstanex_reload_ammo, autocvar_g_balance_minstanex_reload_time, "weapons/reload.wav"); } return TRUE; -}; +} #endif #ifdef CSQC float w_minstanex(float req) @@ -280,7 +285,7 @@ float w_minstanex(float req) org2 = w_org + w_backoff * 6; pointparticles(particleeffectnum("nex_impact"), org2, '0 0 0', 1); if(!w_issilent) - sound(self, CH_SHOTS_SINGLE, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM); + sound(self, CH_SHOTS, "weapons/neximpact.wav", VOL_BASE, ATTN_NORM); } else if(req == WR_PRECACHE) { @@ -289,7 +294,7 @@ float w_minstanex(float req) else if (req == WR_SUICIDEMESSAGE) w_deathtypestring = _("%s is now thinking with portals"); else if (req == WR_KILLMESSAGE) - w_deathtypestring = _("%s has been vaporized by %s"); + w_deathtypestring = _("%s has been vaporized by %s's minstanex"); return TRUE; } #endif