init() { precacheModel("c130_zoomrig"); precacheModel("vehicle_ac130_low"); precacheShader("ac130_overlay_25mm"); precacheShader("ac130_overlay_40mm"); precacheShader("ac130_overlay_105mm"); precacheShader("ac130_overlay_grain"); precacheShader("hudStopwatch"); // here is the new shader precacheItem("ac130_25mm_mp"); precacheItem("ac130_40mm_mp"); precacheItem("ac130_105mm_mp");
if(!isDefined(self.ex_watch)) { self.ex_watch = newClientHudElem(self); self.ex_watch.x = 230; self.ex_watch.y = 445; self.ex_watch.alignx = "center"; self.ex_watch.aligny = "middle"; self.ex_watch.horzAlign = "fullscreen"; self.ex_watch.vertAlign = "fullscreen"; self.ex_watch.alpha = .9; self.ex_watch.fontScale = 2; self.ex_watch.sort = 100; self.ex_watch.foreground = true; self.ex_watch setClock( level.ex_ac130_25mm_timer, 60, "hudStopwatch", 60, 60); }
ac130_attachPlayer_25mm() { self endon("end_respawn"); self endon("spawn"); level endon("ex_gameover"); self endon("disconnect"); self endon("death"); self endon("ex_dead"); self endon("joined_spectators"); if(level.inPrematchPeriod) return; if(isDefined(level.ac130Player)) return; //Record weapons and ammo before we take them away. ammoClipList = []; ammoStockList = []; weaponsList = self GetWeaponsList(); for (i = 0; i < weaponsList.size; i++) { ammoClipList[ammoClipList.size] = self GetWeaponAmmoClip( weaponsList[i] ); ammoStockList[ammoStockList.size] = self GetWeaponAmmoStock( weaponsList[i] ); } //Record health before we bump it skyhigh ;) originalHealth = self.health; //logprint("self.health = " + originalhealth); level.ac130model show(); level.ac130Player = self; level.ac130Player.ac130 = true; level.ac130Player hide(); if(isDefined(self.ex_healthbar)) self.ex_healthbar destroy(); if(isDefined(self.ex_healthback)) self.ex_healthback destroy(); if(isDefined(self.ex_healthcross)) self.ex_healthcross destroy(); level.ac130Player.health = 9000; self [[level.ex_clientcmd]]("gocrouch"); level.ac130Player linkTo(level.ac130, "tag_player", (4000,0,0), (0,0,0)); self hide(); thread changeWeapons_25mm(); thread shotFired(); if(level.ex_air_raid_global) thread extreme\_ex_utils::playSoundLoc("air_raid",(0,0,0)); if(level.ex_air_raid_team) thread extreme\_ex_utils::playSoundOnPlayers("air_raid"); self iprintlnbold("You have " + level.ex_ac130_25mm_timer + " Seconds"); iprintln("^3AC130 25MM GUNSHIP INBOUND ^1TAKE COVER!"); // here is where the new hud item goes - right before the wait. if(!isDefined(self.ex_watch)) { self.ex_watch = newClientHudElem(self); self.ex_watch.x = 230; self.ex_watch.y = 445; self.ex_watch.alignx = "center"; self.ex_watch.aligny = "middle"; self.ex_watch.horzAlign = "fullscreen"; self.ex_watch.vertAlign = "fullscreen"; self.ex_watch.alpha = .9; self.ex_watch.fontScale = 2; self.ex_watch.sort = 100; self.ex_watch.foreground = true; self.ex_watch setClock( level.ex_ac130_25mm_timer, 60, "hudStopwatch", 60, 60); } wait level.ex_ac130_25mm_timer; // here is where we need to clean up the couter after it has run its course. if(isDefined(self.ex_watch)) self.ex_watch destroy(); level.ac130Player unlink(); level.ac130model hide(); thread ac130_detachPlayer(); //Put weapons and health back self resetWeapons(weaponsList, ammoClipList, ammoStockList); self.health = originalHealth; //logprint("self.health = " + originalhealth); self show(); if(level.ex_healthbar) self thread extreme\_ex_healthbar::start(); }
#include maps\mp\_utility; init() { precacheModel("c130_zoomrig"); precacheModel("vehicle_ac130_low"); precacheShader("ac130_overlay_25mm"); precacheShader("ac130_overlay_40mm"); precacheShader("ac130_overlay_105mm"); precacheShader("ac130_overlay_grain"); precacheShader("hudStopwatch"); precacheItem("ac130_25mm_mp"); precacheItem("ac130_40mm_mp"); precacheItem("ac130_105mm_mp"); level.physicsSphereRadius["ac130_25mm_mp"] = 200; level.physicsSphereRadius["ac130_40mm_mp"] = 600; level.physicsSphereRadius["ac130_105mm_mp"] = 1000; level.physicsSphereForce["ac130_25mm_mp"] = 0.5; level.physicsSphereForce["ac130_40mm_mp"] = 3.0; level.physicsSphereForce["ac130_105mm_mp"] = 6.0; level.ac130_rotationSpeed = 40; } main() { ac130Origin = level.ex_playArea_Centre; ac130Origin = getAboveBuildingsLocation(ac130Origin); level.ac130 = spawn("script_model", ac130Origin); level.ac130 setModel("c130_zoomrig"); level.ac130.angles = (0,75,0); level.ac130 hide(); level.ac130model = spawn("script_model", ac130Origin); level.ac130model setModel("vehicle_ac130_low"); level.ac130.angles = (0,75,0); level.ac130model linkTo(level.ac130, "tag_player", (000,0,0), (0,0,0)); level.ac130model hide(); thread rotatePlane(true); } getAboveBuildingsLocation(location) { trace = bullettrace(location + (0,0,10000), location, false, undefined); startorigin = trace["position"] + (0,0,-514); zpos = 0; maxxpos = 13; maxypos = 13; for (xpos = 0; xpos < maxxpos; xpos++) { for (ypos = 0; ypos < maxypos; ypos++) { thisstartorigin = startorigin + ((xpos/(maxxpos-1) - .5) * 1024, (ypos/(maxypos-1) - .5) * 1024, 0); thisorigin = bullettrace(thisstartorigin, thisstartorigin + (0,0,-10000), false, undefined); zpos += thisorigin["position"][2]; } } zpos = zpos / (maxxpos*maxypos); zpos = zpos + 1000; return (location[0], location[1], zpos); } rotatePlane(toggle) { level notify("stop_rotatePlane_thread"); level endon("stop_rotatePlane_thread"); if(toggle) { for(;;) { level.ac130 rotateyaw( 360, level.ac130_rotationSpeed ); wait level.ac130_rotationSpeed; } } else level.ac130 rotateyaw( level.ac130.angles[2], 0.05 ); } ac130_attachPlayer() { self endon("end_respawn"); self endon("spawn"); level endon("ex_gameover"); self endon("disconnect"); self endon("death"); if(level.inPrematchPeriod) return; if(isDefined(level.ac130Player)) return; self hide(); level.ac130model show(); level.ac130Player = self; level.ac130Player.ac130 = true; level.ac130Player hide(); if(isDefined(self.ex_healthbar)) self.ex_healthbar destroy(); if(isDefined(self.ex_healthback)) self.ex_healthback destroy(); if(isDefined(self.ex_healthcross)) self.ex_healthcross destroy(); level.ac130Player.health = 9000; self [[level.ex_clientcmd]]("gocrouch"); level.ac130Player linkTo(level.ac130, "tag_player", (4000,0,0), (0,0,0)); self playLoopSound( "ambient_ac130_int1_sur" ); thread changeWeapons(); thread shotFired(); } ac130_attachPlayer_25mm() { self endon("end_respawn"); self endon("spawn"); level endon("ex_gameover"); self endon("disconnect"); self endon("death"); self endon("ex_dead"); self endon("joined_spectators"); if(level.inPrematchPeriod) return; if(isDefined(level.ac130Player)) return; //Record weapons and ammo before we take them away. ammoClipList = []; ammoStockList = []; weaponsList = self GetWeaponsList(); for (i = 0; i < weaponsList.size; i++) { ammoClipList[ammoClipList.size] = self GetWeaponAmmoClip( weaponsList[i] ); ammoStockList[ammoStockList.size] = self GetWeaponAmmoStock( weaponsList[i] ); } //Record health before we bump it skyhigh ;) originalHealth = self.health; //logprint("self.health = " + originalhealth); level.ac130model show(); level.ac130Player = self; level.ac130Player.ac130 = true; level.ac130Player hide(); if(isDefined(self.ex_healthbar)) self.ex_healthbar destroy(); if(isDefined(self.ex_healthback)) self.ex_healthback destroy(); if(isDefined(self.ex_healthcross)) self.ex_healthcross destroy(); level.ac130Player.health = 9000; self [[level.ex_clientcmd]]("gocrouch"); level.ac130Player linkTo(level.ac130, "tag_player", (4000,0,0), (0,0,0)); self hide(); thread changeWeapons_25mm(); thread shotFired(); if(level.ex_air_raid_global) thread extreme\_ex_utils::playSoundLoc("air_raid",(0,0,0)); if(level.ex_air_raid_team) thread extreme\_ex_utils::playSoundOnPlayers("air_raid"); self iprintlnbold("You have " + level.ex_ac130_25mm_timer + " Seconds"); iprintln("^3AC130 25MM GUNSHIP INBOUND ^1TAKE COVER!"); if(!isDefined(self.ex_watch)) { self.ex_watch = newClientHudElem(self); self.ex_watch.x = 230; self.ex_watch.y = 445; self.ex_watch.alignx = "center"; self.ex_watch.aligny = "middle"; self.ex_watch.horzAlign = "fullscreen"; self.ex_watch.vertAlign = "fullscreen"; self.ex_watch.alpha = .9; self.ex_watch.fontScale = 2; self.ex_watch.sort = 100; self.ex_watch.foreground = true; self.ex_watch setClock( level.ex_ac130_25mm_timer, 60, "hudStopwatch", 60, 60); } wait level.ex_ac130_25mm_timer; if(isDefined(self.ex_watch)) self.ex_watch destroy(); level.ac130Player unlink(); level.ac130model hide(); thread ac130_detachPlayer(); //Put weapons and health back self resetWeapons(weaponsList, ammoClipList, ammoStockList); self.health = originalHealth; //logprint("self.health = " + originalhealth); self show(); if(level.ex_healthbar) self thread extreme\_ex_healthbar::start(); } ac130_attachPlayer_40mm() { self endon("end_respawn"); self endon("spawn"); level endon("ex_gameover"); self endon("disconnect"); self endon("death"); self endon("ex_dead"); self endon("joined_spectators"); if(level.inPrematchPeriod) return; if(isDefined(level.ac130Player)) return; //Record weapons and ammo before we take them away. ammoClipList = []; ammoStockList = []; weaponsList = self GetWeaponsList(); for (i = 0; i < weaponsList.size; i++) { ammoClipList[ammoClipList.size] = self GetWeaponAmmoClip( weaponsList[i] ); ammoStockList[ammoStockList.size] = self GetWeaponAmmoStock( weaponsList[i] ); } //Record health before we bump it skyhigh ;) originalHealth = self.health; level.ac130model show(); level.ac130Player = self; level.ac130Player.ac130 = true; level.ac130Player hide(); if(isDefined(self.ex_healthbar)) self.ex_healthbar destroy(); if(isDefined(self.ex_healthback)) self.ex_healthback destroy(); if(isDefined(self.ex_healthcross)) self.ex_healthcross destroy(); level.ac130Player.health = 9000; self [[level.ex_clientcmd]]("gocrouch"); level.ac130Player linkTo(level.ac130, "tag_player", (4000,0,0), (0,0,0)); self hide(); thread changeWeapons_40mm(); thread shotFired(); if(level.ex_air_raid_global) thread extreme\_ex_utils::playSoundLoc("air_raid",(0,0,0)); if(level.ex_air_raid_team) thread extreme\_ex_utils::playSoundOnPlayers("air_raid"); self iprintlnbold("You have " + level.ex_ac130_40mm_timer + " Seconds"); iprintln("^3AC130 40MM GUNSHIP INBOUND ^1TAKE COVER!"); if(!isDefined(self.ex_watch)) { self.ex_watch = newClientHudElem(self); self.ex_watch.x = 230; self.ex_watch.y = 445; self.ex_watch.alignx = "center"; self.ex_watch.aligny = "middle"; self.ex_watch.horzAlign = "fullscreen"; self.ex_watch.vertAlign = "fullscreen"; self.ex_watch.alpha = .9; self.ex_watch.fontScale = 2; self.ex_watch.sort = 100; self.ex_watch.foreground = true; self.ex_watch setClock( level.ex_ac130_40mm_timer, 60, "hudStopwatch", 60, 60); } wait level.ex_ac130_40mm_timer; if(isDefined(self.ex_watch)) self.ex_watch destroy(); self show(); level.ac130Player unlink(); level.ac130model hide(); thread ac130_detachPlayer(); //Put weapons and health back self resetWeapons(weaponsList, ammoClipList, ammoStockList); self.health = originalHealth; self show(); if(level.ex_healthbar) self thread extreme\_ex_healthbar::start(); } ac130_attachPlayer_105mm() { self endon("end_respawn"); self endon("spawn"); level endon("ex_gameover"); self endon("disconnect"); self endon("death"); self endon("ex_dead"); self endon("joined_spectators"); if(level.inPrematchPeriod) return; if(isDefined(level.ac130Player)) return; //Record weapons and ammo before we take them away. ammoClipList = []; ammoStockList = []; weaponsList = self GetWeaponsList(); for (i = 0; i < weaponsList.size; i++) { ammoClipList[ammoClipList.size] = self GetWeaponAmmoClip( weaponsList[i] ); ammoStockList[ammoStockList.size] = self GetWeaponAmmoStock( weaponsList[i] ); } //Record health before we bump it skyhigh ;) originalHealth = self.health; level.ac130model show(); level.ac130Player = self; level.ac130Player.ac130 = true; level.ac130Player hide(); if(isDefined(self.ex_healthbar)) self.ex_healthbar destroy(); if(isDefined(self.ex_healthback)) self.ex_healthback destroy(); if(isDefined(self.ex_healthcross)) self.ex_healthcross destroy(); level.ac130Player.health = 9000; self [[level.ex_clientcmd]]("gocrouch"); level.ac130Player linkTo(level.ac130, "tag_player", (4000,0,0), (0,0,0)); self hide(); thread changeWeapons_105mm(); thread shotFired(); if(level.ex_air_raid_global) thread extreme\_ex_utils::playSoundLoc("air_raid",(0,0,0)); if(level.ex_air_raid_team) thread extreme\_ex_utils::playSoundOnPlayers("air_raid"); self iprintlnbold("You have " + level.ex_ac130_105mm_timer + " Seconds"); iprintln("^3AC130 105MM GUNSHIP INBOUND ^1TAKE COVER!"); if(!isDefined(self.ex_watch)) { self.ex_watch = newClientHudElem(self); self.ex_watch.x = 230; self.ex_watch.y = 445; self.ex_watch.alignx = "center"; self.ex_watch.aligny = "middle"; self.ex_watch.horzAlign = "fullscreen"; self.ex_watch.vertAlign = "fullscreen"; self.ex_watch.alpha = .9; self.ex_watch.fontScale = 2; self.ex_watch.sort = 100; self.ex_watch.foreground = true; self.ex_watch setClock( level.ex_ac130_105mm_timer, 60, "hudStopwatch", 60, 60); } wait level.ex_ac130_105mm_timer; if(isDefined(self.ex_watch)) self.ex_watch destroy(); level.ac130Player unlink(); level.ac130model hide(); thread ac130_detachPlayer(); //Put weapons and health back self resetWeapons(weaponsList, ammoClipList, ammoStockList); self.health = originalHealth; self show(); if(level.ex_healthbar) self thread extreme\_ex_healthbar::start(); } ac130_detachPlayer() { self endon("end_respawn"); self endon("spawn"); level endon("ex_gameover"); self endon("disconnect"); self endon("death"); self endon("ex_dead"); self endon("joined_spectators"); if(!isDefined(level.ac130Player)) return; level.ac130Player notify("ac130_detached"); level.ac130Player stopLoopSound("ambient_ac130_x4"); self thread CleanupSpawned(); self show(); level.ac130Player unlink(); level.ac130model hide(); [[level.onSpawnPlayer]](); level.ac130Player.ac130 = undefined; level.ac130Player = undefined; } changeWeapons() { level endon("ex_gameover"); self endon("disconnect"); self endon("death"); self endon("ac130_detached"); weapon = []; weapon[0] = spawnstruct(); weapon[0].weapon = "ac130_40mm_mp"; weapon[0].overlay = "ac130_overlay_40mm"; weapon[1] = spawnstruct(); weapon[1].weapon = "ac130_25mm_mp"; weapon[1].overlay = "ac130_overlay_25mm"; weapon[2] = spawnstruct(); weapon[2].weapon = "ac130_105mm_mp"; weapon[2].overlay = "ac130_overlay_105mm"; currentWeapon = -1; for(;;) { if(currentWeapon != -1) while(!level.ac130Player useButtonPressed()) wait 0.05; currentWeapon++; if (currentWeapon >= weapon.size) currentWeapon = 0; level.ac130Player takeAllWeapons(); level.ac130Player giveWeapon( weapon[currentWeapon].weapon ); level.ac130Player switchToWeapon( weapon[currentWeapon].weapon ); level.ac130Player SetWeaponAmmoClip( weapon[currentWeapon].weapon, 999 ); thread setOverlay(weapon[currentWeapon].overlay); while(level.ac130Player useButtonPressed()) wait 0.05; } } changeWeapons_25mm() { level endon("ex_gameover"); self endon("disconnect"); self endon("death"); self endon("ac130_detached"); wait(0.2); level.ac130Player takeAllWeapons(); level.ac130Player giveWeapon( "ac130_25mm_mp" ); level.ac130Player switchToWeapon( "ac130_25mm_mp" ); level.ac130Player SetWeaponAmmoClip( "ac130_25mm_mp", 999 ); thread setOverlay( "ac130_overlay_25mm"); } changeWeapons_40mm() { level endon("ex_gameover"); self endon("disconnect"); self endon("death"); self endon("ac130_detached"); wait(0.2); level.ac130Player takeAllWeapons(); level.ac130Player giveWeapon( "ac130_40mm_mp" ); level.ac130Player switchToWeapon( "ac130_40mm_mp" ); level.ac130Player SetWeaponAmmoClip( "ac130_40mm_mp", 999 ); thread setOverlay( "ac130_overlay_40mm" ); } changeWeapons_105mm() { level endon("ex_gameover"); self endon("disconnect"); self endon("death"); self endon("ac130_detached"); wait(0.2); level.ac130Player takeAllWeapons(); level.ac130Player giveWeapon( "ac130_105mm_mp" ); level.ac130Player switchToWeapon( "ac130_105mm_mp" ); level.ac130Player SetWeaponAmmoClip( "ac130_105mm_mp", 999 ); thread setOverlay( "ac130_overlay_105mm" ); } setOverlay(overlay) { level endon("ex_gameover"); self endon("end_respawn"); self endon("spawn"); self endon("disconnect"); self endon("death"); self endon("ac130_detached"); if(!isDefined(self.ac130_overlay)) { self.ac130_overlay = newClientHudElem( self ); self.ac130_overlay.x = 0; self.ac130_overlay.y = 0; self.ac130_overlay.alignX = "center"; self.ac130_overlay.alignY = "middle"; self.ac130_overlay.horzAlign = "center"; self.ac130_overlay.vertAlign = "middle"; self.ac130_overlay.foreground = true; } self.ac130_overlay setshader(overlay, 640, 480); if(level.ex_ac130grain) { if(!isDefined(self.ac130_grain)) { self.ac130_grain = newClientHudElem( self ); self.ac130_grain.x = 0; self.ac130_grain.y = 0; self.ac130_grain.alignX = "left"; self.ac130_grain.alignY = "top"; self.ac130_grain.horzAlign = "fullscreen"; self.ac130_grain.vertAlign = "fullscreen"; self.ac130_grain.foreground = true; self.ac130_grain.alpha = 0.5; } self.ac130_grain setshader("ac130_overlay_grain", 640, 480); } self waittill("spawned_player"); self.ac130_overlay destroy(); self.ac130_grain destroy(); } shotFired() { level endon("ex_gameover"); self endon("disconnect"); self endon("death"); self endon("ac130_detached"); for(;;) { level.ac130Player waittill("projectile_impact", weapon, position, radius); thread shotFiredScreenShake( weapon ); thread shotFiredPhysicsSphere(position, weapon); wait 0.05; } } shotFiredScreenShake(weapon) { level endon("ex_gameover"); self endon("disconnect"); self endon("death"); self endon("ac130_detached"); switch(weapon) { case "ac130_105mm_mp": duration = 1; break; case "ac130_40mm_mp": duration = 0.5; break; default: duration = 0; break; } if(duration) earthquake(duration, 1, level.ac130Player.origin, 1000); } shotFiredPhysicsSphere(center, weapon) { wait 0.1; physicsExplosionSphere(center, level.physicsSphereRadius[weapon], level.physicsSphereRadius[weapon] / 2, level.physicsSphereForce[weapon]); } CleanupSpawned() { if (isDefined(self.ac130_overlay)) self.ac130_overlay destroy(); if (isDefined(self.ac130_grain)) self.ac130_grain destroy(); } resetWeapons(weaponsList, ammoClipList, ammoStockList) // =[SUPER]=Gadjex { useAltMode = true; self takeAllWeapons(); class = self.class; self maps\mp\gametypes\_class::setClass( class ); // initialize specialty array self.specialty = []; self.specialty[0] = self.pers[class]["loadout_perk1"]; self.specialty[1] = self.pers[class]["loadout_perk2"]; self.specialty[2] = self.pers[class]["loadout_perk3"]; self maps\mp\gametypes\_class::register_perks(); if ( getDvarInt( "scr_enable_nightvision" ) ) self setActionSlot( 1, "nightvision" ); for( i = 0; i < weaponsList.size; i++ ) { if ( !AC130Weapons(weaponsList[i]) ) { //logprint("weaponGivenBack " + i + " = " + weaponsList[i] + " "); //logprint("Clip " + i + " = " + ammoClipList[i] + " "); //logprint("StockPile " + i + " = " + ammoStockList[i] + "\n"); self giveWeapon( weaponsList[i] ); } //Set primary weapon to spawn with. if ( isPrimaryWeapon (weaponsList[i]) && WeaponType( weaponsList[i] ) == "bullet" ) { self setSpawnWeapon( weaponsList[i] ); //logprint(weaponsList[i] + " " + WeaponType(weaponsList[i]) + "\n"); } switch ( weaponsList[i]) //Set offhand setttings { case "frag_grenade_mp": self switchToOffhand( "frag_grenade_mp" ); break; case "flash_grenade_mp": self setOffhandSecondaryClass("flash"); break; case "smoke_grenade_mp": case "concussion_grenade_mp": self setOffhandSecondaryClass("smoke"); break; } switch ( weaponsList[i] ) //Setup ammo sizes and action slots 3,4 { case "claymore_mp": case "rpg_mp": case "c4_mp": self maps\mp\gametypes\_class::setWeaponAmmoOverall( weaponsList[i], ammoClipList[i] ); self setActionSlot( 3, "weapon", weaponsList[i] ); self setActionSlot( 4, "" ); useAltMode = false; break; default: self setWeaponAmmoClip( weaponsList[i], ammoClipList[i] ); self setWeaponAmmoStock( weaponsList[i], ammoStockList[i] ); break; } } if ( useAltMode ) //Set to altmode if alt. weapon is not claymore, rpg, or c4 { self setActionSlot( 3, "altMode" ); self setActionSlot( 4, "" ); } // cac specialties that require loop threads self maps\mp\gametypes\_class::cac_selector(); } AC130Weapons(weapon) { switch(weapon) { case "ac130_25mm_mp": case "ac130_40mm_mp": case "ac130_105mm_mp": return true; default: return false; } } isPrimaryWeapon( weaponname ) { return isdefined( level.primary_weapon_array[weaponname] ); }