X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Fweapons%2Fw_minelayer.qc;h=790dbe047c80f2a5c393b4958ff850985e722ccc;hp=ab4a77b94450ec142b0ea8fcc40c9164791cad52;hb=83e2b5d506f912b9c79f7f6dc8e295f9b3f96e49;hpb=522b245eeaecf0e150e2faa40b4db64e8aaad5dc diff --git a/qcsrc/common/weapons/w_minelayer.qc b/qcsrc/common/weapons/w_minelayer.qc index ab4a77b94..790dbe047 100644 --- a/qcsrc/common/weapons/w_minelayer.qc +++ b/qcsrc/common/weapons/w_minelayer.qc @@ -85,7 +85,7 @@ void W_MineLayer_Stick(entity to) newmine.health = self.health; newmine.event_damage = self.event_damage; newmine.spawnshieldtime = self.spawnshieldtime; - newmine.damagedbycontents = TRUE; + newmine.damagedbycontents = true; newmine.movetype = MOVETYPE_NONE; // lock the mine in place newmine.projectiledeathtype = self.projectiledeathtype; @@ -221,7 +221,7 @@ void W_MineLayer_Think(void) // our lifetime has expired, it's time to die - mine_time just allows us to play a sound for this // TODO: replace this mine_trigger.wav sound with a real countdown - if((time > self.cnt) && (!self.mine_time)) + if((time > self.cnt) && (!self.mine_time) && (self.cnt > 0)) { if(WEP_CVAR(minelayer, lifetime_countdown) > 0) spamsound(self, CH_SHOTS, "weapons/mine_trigger.wav", VOL_BASE, ATTN_NORM); @@ -231,7 +231,7 @@ void W_MineLayer_Think(void) // a player's mines shall explode if he disconnects or dies // TODO: Do this on team change too -- Samual: But isn't a player killed when they switch teams? - if(!IS_PLAYER(self.realowner) || self.realowner.deadflag != DEAD_NO) + if(!IS_PLAYER(self.realowner) || self.realowner.deadflag != DEAD_NO || self.realowner.frozen) { other = world; self.projectiledeathtype |= HITTYPE_BOUNCE; @@ -243,7 +243,7 @@ void W_MineLayer_Think(void) head = findradius(self.origin, WEP_CVAR(minelayer, proximityradius)); while(head) { - if(IS_PLAYER(head) && head.deadflag == DEAD_NO) + if(IS_PLAYER(head) && head.deadflag == DEAD_NO && !head.frozen) if(head != self.realowner && DIFF_TEAM(head, self.realowner)) // don't trigger for team mates if(!self.mine_time) { @@ -318,7 +318,7 @@ void W_MineLayer_Attack(void) if(self.minelayer_mines >= WEP_CVAR(minelayer, limit)) { // the refire delay keeps this message from being spammed - sprint(self, strcat("minelayer: You cannot place more than ^2", ftos(WEP_CVAR(minelayer, limit)), " ^7mines at a time\n") ); + Send_Notification(NOTIF_ONE, self, MSG_MULTI, WEAPON_MINELAYER_LIMIT, WEP_CVAR(minelayer, limit)); play2(self, "weapons/unavailable.wav"); return; } @@ -326,7 +326,7 @@ void W_MineLayer_Attack(void) W_DecreaseAmmo(WEP_CVAR(minelayer, ammo)); - W_SetupShot_ProjectileSize(self, '-4 -4 -4', '4 4 4', FALSE, 5, "weapons/mine_fire.wav", CH_WEAPON_A, WEP_CVAR(minelayer, damage)); + W_SetupShot_ProjectileSize(self, '-4 -4 -4', '4 4 4', false, 5, "weapons/mine_fire.wav", CH_WEAPON_A, WEP_CVAR(minelayer, damage)); pointparticles(particleeffectnum("rocketlauncher_muzzleflash"), w_shotorg, w_shotdir * 1000, 1); mine = WarpZone_RefSys_SpawnSameRefSys(self); @@ -336,14 +336,14 @@ void W_MineLayer_Attack(void) else mine.spawnshieldtime = -1; mine.classname = "mine"; - mine.bot_dodge = TRUE; + mine.bot_dodge = true; mine.bot_dodgerating = WEP_CVAR(minelayer, damage) * 2; // * 2 because it can detonate inflight which makes it even more dangerous mine.takedamage = DAMAGE_YES; mine.damageforcescale = WEP_CVAR(minelayer, damageforcescale); mine.health = WEP_CVAR(minelayer, health); mine.event_damage = W_MineLayer_Damage; - mine.damagedbycontents = TRUE; + mine.damagedbycontents = true; mine.movetype = MOVETYPE_TOSS; PROJECTILE_MAKETRIGGER(mine); @@ -357,11 +357,13 @@ void W_MineLayer_Attack(void) mine.touch = W_MineLayer_Touch; mine.think = W_MineLayer_Think; mine.nextthink = time; - mine.cnt = time + (WEP_CVAR(minelayer, lifetime) - WEP_CVAR(minelayer, lifetime_countdown)); + mine.cnt = (WEP_CVAR(minelayer, lifetime) - WEP_CVAR(minelayer, lifetime_countdown)); mine.flags = FL_PROJECTILE; mine.missile_flags = MIF_SPLASH | MIF_ARC | MIF_PROXY; - CSQCProjectile(mine, TRUE, PROJECTILE_MINE, TRUE); + if(mine.cnt > 0) { mine.cnt += time; } + + CSQCProjectile(mine, true, PROJECTILE_MINE, true); // muzzle flash for 1st person view flash = spawn(); @@ -388,7 +390,7 @@ float W_MineLayer_PlacedMines(float detonate) { if(!mine.minelayer_detonate) { - mine.minelayer_detonate = TRUE; + mine.minelayer_detonate = true; minfound = 1; } } @@ -408,9 +410,9 @@ float W_MineLayer(float req) { // aim and decide to fire if appropriate if(self.minelayer_mines >= WEP_CVAR(minelayer, limit)) - self.BUTTON_ATCK = FALSE; + self.BUTTON_ATCK = false; else - self.BUTTON_ATCK = bot_aim(WEP_CVAR(minelayer, speed), 0, WEP_CVAR(minelayer, lifetime), FALSE); + self.BUTTON_ATCK = bot_aim(WEP_CVAR(minelayer, speed), 0, WEP_CVAR(minelayer, lifetime), false); if(skill >= 2) // skill 0 and 1 bots won't detonate mines! { // decide whether to detonate mines @@ -424,7 +426,7 @@ float W_MineLayer(float req) selfdamage = 0; teamdamage = 0; enemydamage = 0; - targetlist = findchainfloat(bot_attack, TRUE); + targetlist = findchainfloat(bot_attack, true); mine = find(world, classname, "mine"); while(mine) { @@ -474,7 +476,7 @@ float W_MineLayer(float req) if( (v_forward * normalize(mine.origin - targ.origin)< 0.1) && desirabledamage > 0.1*coredamage - )self.BUTTON_ATCK2 = TRUE; + )self.BUTTON_ATCK2 = true; targ = targ.chain; } }else{ @@ -485,7 +487,7 @@ float W_MineLayer(float req) if(IS_PLAYER(self.enemy)) if(desirabledamage >= 0.1*coredamage) if(random()/distance*300 > frametime*bound(0,(10-skill)*0.2,1)) - self.BUTTON_ATCK2 = TRUE; + self.BUTTON_ATCK2 = true; // dprint(ftos(random()/distance*300),">");dprint(ftos(frametime*bound(0,(10-skill)*0.2,1)),"\n"); } @@ -494,22 +496,22 @@ float W_MineLayer(float req) // if we would be doing at X percent of the core damage, detonate it // but don't fire a new shot at the same time! if(desirabledamage >= 0.75 * coredamage) //this should do group damage in rare fortunate events - self.BUTTON_ATCK2 = TRUE; + self.BUTTON_ATCK2 = true; if((skill > 6.5) && (selfdamage > self.health)) - self.BUTTON_ATCK2 = FALSE; - //if(self.BUTTON_ATCK2 == TRUE) + self.BUTTON_ATCK2 = false; + //if(self.BUTTON_ATCK2 == true) // dprint(ftos(desirabledamage),"\n"); - if(self.BUTTON_ATCK2 == TRUE) self.BUTTON_ATCK = FALSE; + if(self.BUTTON_ATCK2 == true) self.BUTTON_ATCK = false; } - return TRUE; + return true; } case WR_THINK: { if(autocvar_g_balance_minelayer_reload_ammo && self.clip_load < WEP_CVAR(minelayer, ammo)) // forced reload { // not if we're holding the minelayer without enough ammo, but can detonate existing mines - if(!(W_MineLayer_PlacedMines(FALSE) && self.WEP_AMMO(MINE_LAYER) < WEP_CVAR(minelayer, ammo))) + if(!(W_MineLayer_PlacedMines(false) && self.WEP_AMMO(MINE_LAYER) < WEP_CVAR(minelayer, ammo))) WEP_ACTION(self.weapon, WR_RELOAD); } else if(self.BUTTON_ATCK) @@ -523,11 +525,11 @@ float W_MineLayer(float req) if(self.BUTTON_ATCK2) { - if(W_MineLayer_PlacedMines(TRUE)) + if(W_MineLayer_PlacedMines(true)) sound(self, CH_WEAPON_B, "weapons/mine_det.wav", VOL_BASE, ATTN_NORM); } - return TRUE; + return true; } case WR_INIT: { @@ -540,8 +542,8 @@ float W_MineLayer(float req) precache_sound("weapons/mine_fire.wav"); precache_sound("weapons/mine_stick.wav"); precache_sound("weapons/mine_trigger.wav"); - MINELAYER_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP) - return TRUE; + MINELAYER_SETTINGS(WEP_SKIP_CVAR, WEP_SET_PROP); + return true; } case WR_CHECKAMMO1: { @@ -552,29 +554,29 @@ float W_MineLayer(float req) ammo_amount += self.(weapon_load[WEP_MINE_LAYER]) >= WEP_CVAR(minelayer, ammo); return ammo_amount; } - return TRUE; + return true; } case WR_CHECKAMMO2: { - if(W_MineLayer_PlacedMines(FALSE)) - return TRUE; + if(W_MineLayer_PlacedMines(false)) + return true; else - return FALSE; + return false; } case WR_CONFIG: { - MINELAYER_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS) - return TRUE; + MINELAYER_SETTINGS(WEP_CONFIG_WRITE_CVARS, WEP_CONFIG_WRITE_PROPS); + return true; } case WR_RESETPLAYER: { self.minelayer_mines = 0; - return TRUE; + return true; } case WR_RELOAD: { W_Reload(WEP_CVAR(minelayer, ammo), "weapons/reload.wav"); - return TRUE; + return true; } case WR_SUICIDEMESSAGE: { @@ -585,7 +587,7 @@ float W_MineLayer(float req) return WEAPON_MINELAYER_MURDER; } } - return FALSE; + return false; } #endif #ifdef CSQC @@ -601,20 +603,20 @@ float W_MineLayer(float req) if(!w_issilent) sound(self, CH_SHOTS, "weapons/mine_exp.wav", VOL_BASE, ATTN_NORM); - return TRUE; + return true; } case WR_INIT: { precache_sound("weapons/mine_exp.wav"); - return TRUE; + return true; } case WR_ZOOMRETICLE: { // no weapon specific image for this weapon - return FALSE; + return false; } } - return FALSE; + return false; } #endif #endif