Author Topic: AC130 Timer  (Read 3195 times)

Offline ASP-SniperOne

  • Rank: Private
  • *
  • Posts: 498
AC130 Timer
« on: June 23, 2008, 08:42:17 pm »
By request...

So you want to have a timer for your 130?

like this maybe (lower left middle)




Well I have been looking for a reason to put in a stop watch function so let's use one.

I will show snipits from the 130 gsc file and lastly I will include the whole file for you to use in place of the original X4v2 version.  In addition I am basing this version from the posted fix from *link* here.

First the stopwatch function.  It is a hud element function.

SetClock( <time>, <full time>, <material>, <height>, <width> )

Required Args:
1 : <time> The new timer time in seconds to count down
2 : <time> The time in seconds represented by a full cycle of the hand, for instance a stopwatch would be 60s.
3 : <material> The material for the hud clock  

the material we will use comes from the game.  hudStopwatch

So we need to precache the shader before we can use it

PreCacheShader( <shader name> )

Required Args:
1 : <material name> The name of the shader to precache.  

Since this is used for the AC130 I chose to precache in that gsc. The image file is found within the iwd's of the game so no iwd updates are needed.
Note: this image file has the clock with a 0-60 second lable.  So we will use 60 seconds for the full cycle time.  More than that will wrap the timer and the second hand will go past the 0 point and keep going until the total time is used.  For the AC130 we do not expect more than 60 seconds of time anyway so there is little problem here and it works with any time.

Code: [Select]
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");


Now we need to add a hud element to each of the 130 modes.

first the 25mm

here is the hud element definition - standard self hud element definition with the setClock function added.

Code: [Select]
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);
}


the countdown time is the extreme parameter name level.ex_ac130_25mm_timer which is derived from the WMD cfg file for the 25mm time.

the size of the clock is 60x60

You need to place this timer right before the wait statement in each of the 130 mode attachPlayer routines.  here is the 25mm case.

You also need to clean up the hud after the wait is over.  You do this with a destroy command to the hud element (if it was defined)

if(isDefined(self.ex_watch)) self.ex_watch destroy();

Here is the 25mm section with the additions.

Code: [Select]
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();
}


Now you will do this for all the other modes 40mm and 105 mm using the correct timers for each.

here is the final version of _ac130.gsc  We will be adding this to a future release with a dvar control but for now you can copy the below and use it instead of the _ac130.gsc you have (it is in the maps/mp folder BTW)

Note: I used the latest version of _ac130.gsc with the updates for invisible and nuke that was posted earlier.

Code: [Select]
#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] );
}



have fun.

Offline redrock

  • Rank: Private
  • *
  • Posts: 119
    • http://easclan.org
AC130 Timer
« Reply #1 on: June 23, 2008, 09:30:44 pm »
awesome addition sniperone!! thx dude


|EAS|Redrock

Offline PvtGomerPyle

  • Rank: Private
  • *
  • Posts: 577
AC130 Timer
« Reply #2 on: June 23, 2008, 10:00:24 pm »
GREAT JOB!!!!

This is what I'm talking about folks!!! These guys not only put together one heck of a Mod but look what they do AFTERWARDS!!!

Donate Donate Donate!!!!!!!!!!!!!!!!!!

How can you look at this work and NOT donate?????????

Offline ussrmyjunk

  • Rank: Private
  • *
  • Posts: 68
AC130 Timer
« Reply #3 on: June 23, 2008, 10:08:59 pm »
Great job ... Thanks !!!

 :lol:

Offline AlvinYork

  • Rank: Private
  • *
  • Posts: 242
AC130 Timer
« Reply #4 on: June 24, 2008, 12:45:28 pm »
Thanks

Offline X4A_US_Wannabe

  • Rank: Private
  • *
  • Posts: 137
    • http://www.x4aftermath.com
AC130 Timer
« Reply #5 on: June 24, 2008, 04:28:47 pm »
Great job SniperOne!!  Thank you very much.

Offline sr4440

  • Rank: Private
  • *
  • Posts: 3
AC130 Timer
« Reply #6 on: July 28, 2008, 06:13:08 am »
Is that extra “ self show();” suppose to be there in front of the “level.ac130Player unlink(); ” command in the 40MM section? Because it is not there in the 25MM or the 105 section?

By the way this timer is the chit!

Thank you

Offline gadjex

  • Rank: Private
  • *
  • Posts: 38
AC130 Timer
« Reply #7 on: August 23, 2008, 11:57:28 pm »
It doesn't matter that it's in there twice like that. Won't make a difference.