Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include maps\mp\_utility;
- #include common_scripts\utility;
- #include maps\mp\gametypes\_hud_util;
- //Predator by Puffiamo. Remember to add my credit on your mod :)
- //Steam: Puffiamo94
- spawDrone()
- {
- wait 0.05;
- level.ac130player = undefined;
- level.myDebug = 0;
- level.Dronemodel = spawn( "script_model", level.Drone getTagOrigin( "tag_player" ) );
- level.Dronemodel setModel( "vehicle_uav_static_mp" );
- level.Dronemodel playLoopSound( "veh_ac130_ext_dist" );
- level.Dronemodel setCanDamage( true );
- level.Dronemodel.maxhealth = 1000;
- level.Dronemodel.health = level.Dronemodel.maxhealth;
- level.DroneInUse = false;
- level.Dronemodel linkTo( level.Drone, "tag_player", ( 0, 80, 32 ), ( -25, 0, 0 ) );
- level.Drone.planeModel = level.Dronemodel;
- DroneCameraModel = spawn( "script_model", level.Drone getTagOrigin( "tag_player" ) );
- DroneCameraModel setModel( "tag_origin" );
- DroneCameraModel linkTo( level.Drone, "tag_player", ( 0, 0, 32 ), ( -25, 0, 0 ) );
- level.Drone.cameraModel = DroneCameraModel;
- level.Droneplayer = level.players[0];
- }
- enterDrone( player, lifeId )
- {
- level.status = "^2CONNECTED";
- if(level.myDebug==1)
- player iPrintLnBold( "Stai entrando nel Predator!" );
- player thread attachPlayer( player );
- player DisableWeapons();
- player thread HUD( player );
- player thread waitHellFireFire( player, lifeId );
- player thread kickFromDrone( player );
- player ThermalVisionOn();
- player ThermalVisionFOFOverlayOn();
- }
- exitingDrone( player )
- {
- player unlink();
- player notify("exiting_drone");
- //level.ac130player = undefined;
- }
- waitHellFireFire( player, lifeId )
- {
- player endon("stop_timer_drone");
- player notifyOnPlayerCommand("MOUSE1", "+attack");
- player waittill("MOUSE1");
- player notify("hellfire_fired");
- if(level.myDebug==1)
- player iPrintLnBold( "Hai appena sparato un missile!" );
- player stopLocalSound( "missile_incoming" );
- self.HUDItem[ "thermal_mode" ] settext ( "FIRED" );
- //forward = AnglesToForward( level.Drone.angles );
- //CurrentDroneLocation = level.Drone GetTagOrigin( "tag_origin" );
- //HellFire = MagicBullet( "remotemissile_projectile_mp", CurrentDroneLocation, forward, player );
- //player thread HellFireEyes( player, HellFire );
- _fire( lifeId, player );
- }
- kickFromDrone( player )
- {
- player endon("hellfire_fired");
- wait 5;
- player playLocalSound( "missile_incoming" );
- self.HUDItem[ "thermal_mode" ] settext ( "^1LOSING CONNECTION" );
- wait 5;
- player stopLocalSound( "missile_incoming" );
- player playLocalSound( "fasten_seatbelts" );
- player notify("stop_timer_drone");
- player thread exitingDrone( player );
- self.HUDItem[ "coordinate_agl" ] Destroy();
- self.HUDItem[ "coordinate_lat" ] Destroy();
- self.HUDItem[ "coordinate_long" ] Destroy();
- self.HUDItem[ "thermal_mode" ] Destroy();
- self.HUDItem[ "drone_instruction" ] Destroy();
- player EnableWeapons();
- player ThermalVisionOff();
- player ThermalVisionFOFOverlayOff();
- }
- HellFireEyes( player, HellFire )
- {
- player CameraLinkTo( HellFire, "tag_origin" );
- player ControlsLinkTo( HellFire );
- }
- HUD( player )
- {
- player endon("stop_timer_drone");
- thread overlay_coords();
- player notifyOnPlayerCommand("MOUSE1", "+attack");
- for(i=0;i<2;i++)
- {
- player waittill("MOUSE1");
- self thread exitingDrone( self );
- }
- }
- attachPlayer( player )
- {
- self PlayerLinkWeaponviewToDelta( level.Drone, "tag_player", 1.0, 35, 35, 35, 35 );
- self setPlayerAngles( level.Drone getTagAngles( "tag_player" ) );
- }
- rotatePlane( toggle )
- {
- if (toggle == "on")
- {
- rampupDegrees = 10;
- rotateTime = ( level.Drone_Speed[ "rotate" ] / 360 ) * rampupDegrees;
- level.Drone rotateyaw( level.Drone.angles[ 2 ] + rampupDegrees, rotateTime, rotateTime, 0 );
- for (;;)
- {
- level.Drone rotateyaw( 360, level.Drone_Speed[ "rotate" ] );
- wait level.Drone_Speed[ "rotate" ];
- }
- }
- else if (toggle == "off")
- {
- slowdownDegrees = 10;
- rotateTime = ( level.Drone_Speed[ "rotate" ] / 360 ) * slowdownDegrees;
- level.Drone rotateyaw( level.Drone.angles[ 2 ] + slowdownDegrees, rotateTime, 0, rotateTime );
- }
- }
- overlay_coords( player )
- {
- self.HUDItem[ "thermal_mode" ] = newClientHudElem( self );
- self.HUDItem[ "thermal_mode" ].x = -80;
- self.HUDItem[ "thermal_mode" ].y = 50;
- self.HUDItem[ "thermal_mode" ].alignX = "right";
- self.HUDItem[ "thermal_mode" ].alignY = "top";
- self.HUDItem[ "thermal_mode" ].horzAlign = "right";
- self.HUDItem[ "thermal_mode" ].vertAlign = "top";
- self.HUDItem[ "thermal_mode" ].fontScale = 2.5;
- self.HUDItem[ "thermal_mode" ] settext ( "^2CONNECTED" );
- self.HUDItem[ "thermal_mode" ].alpha = 1.0;
- self.HUDItem[ "coordinate_long" ] = newClientHudElem( self );
- self.HUDItem[ "coordinate_long" ].x = -100;
- self.HUDItem[ "coordinate_long" ].y = 0;
- self.HUDItem[ "coordinate_long" ].alignX = "right";
- self.HUDItem[ "coordinate_long" ].alignY = "top";
- self.HUDItem[ "coordinate_long" ].horzAlign = "right";
- self.HUDItem[ "coordinate_long" ].vertAlign = "top";
- self.HUDItem[ "coordinate_long" ].fontScale = 2.5;
- self.HUDItem[ "coordinate_long" ].alpha = 1.0;
- self.HUDItem[ "coordinate_lat" ] = newClientHudElem( self );
- self.HUDItem[ "coordinate_lat" ].x = 0;
- self.HUDItem[ "coordinate_lat" ].y = 0;
- self.HUDItem[ "coordinate_lat" ].alignX = "right";
- self.HUDItem[ "coordinate_lat" ].alignY = "top";
- self.HUDItem[ "coordinate_lat" ].horzAlign = "right";
- self.HUDItem[ "coordinate_lat" ].vertAlign = "top";
- self.HUDItem[ "coordinate_lat" ].fontScale = 2.5;
- self.HUDItem[ "coordinate_lat" ].alpha = 1.0;
- self.HUDItem[ "coordinate_agl" ] = newClientHudElem( self );
- self.HUDItem[ "coordinate_agl" ].x = 0;
- self.HUDItem[ "coordinate_agl" ].y = 20;
- self.HUDItem[ "coordinate_agl" ].alignX = "right";
- self.HUDItem[ "coordinate_agl" ].alignY = "top";
- self.HUDItem[ "coordinate_agl" ].horzAlign = "right";
- self.HUDItem[ "coordinate_agl" ].vertAlign = "top";
- self.HUDItem[ "coordinate_agl" ].fontScale = 2.5;
- self.HUDItem[ "coordinate_agl" ].label = ( &"AC130_HUD_AGL" );
- self.HUDItem[ "coordinate_agl" ].alpha = 1.0;
- self.HUDItem[ "coordinate_long" ] setValue( abs( int( self.origin[0] ) ) );
- self.HUDItem[ "coordinate_lat" ] setValue( abs( int( self.origin[1] ) ) );
- pos = physicstrace( self.origin, self.origin - ( 0, 0, 100000 ) );
- if( ( isdefined( pos ) ) && ( isdefined( pos[2] ) ) )
- {
- alt = ( ( self.origin[2] - pos[2] ) * 1.5 );
- self.HUDItem[ "coordinate_agl" ] setValue( abs( int( alt ) ) );
- }
- self waittill("remove_hud");
- self.HUDItem[ "coordinate_agl" ] Destroy();
- self.HUDItem[ "coordinate_lat" ] Destroy();
- self.HUDItem[ "coordinate_long" ] Destroy();
- self.HUDItem[ "thermal_mode" ] Destroy();
- self EnableWeapons();
- self ThermalVisionOff();
- self ThermalVisionFOFOverlayOff();
- }
- init()
- {
- // Need for the drone
- level.Drone_Speed[ "move" ] = 250;
- level.Drone_Speed[ "rotate" ] = 70;
- minimapOrigins = getEntArray( "minimap_corner", "targetname" );
- level.DroneOrigin = (0,0,0);
- if ( miniMapOrigins.size )
- level.DroneOrigin = maps\mp\gametypes\_spawnlogic::findBoxCenter( miniMapOrigins[0].origin, miniMapOrigins[1].origin );
- level.Drone = spawn( "script_model", level.DroneOrigin+(0,0,4000) );
- level.Drone setModel( "c130_zoomrig" );
- level.Drone.angles = ( 0, 115, 0 );
- level.Drone.owner = undefined;
- level.DroneInUse = false;
- thread rotatePlane( "on" );
- // ---------------------------------------------------------------------------------------
- mapname = getDvar( "mapname" );
- if ( mapname == "mp_suburbia" )
- {
- level.missileRemoteLaunchVert = 7000;
- level.missileRemoteLaunchHorz = 10000;
- level.missileRemoteLaunchTargetDist = 2000;
- }
- else if ( mapname == "mp_mainstreet" )
- {
- level.missileRemoteLaunchVert = 7000;
- level.missileRemoteLaunchHorz = 10000;
- level.missileRemoteLaunchTargetDist = 2000;
- }
- else
- {
- level.missileRemoteLaunchVert = 14000000;
- level.missileRemoteLaunchHorz = 7000000;
- level.missileRemoteLaunchTargetDist = 1500000;
- }
- precacheItem( "remotemissile_projectile_mp" );
- precacheString( &"MP_CIVILIAN_AIR_TRAFFIC" );
- setDvar("missileRemoteSteerPitchRange", "-360 360");
- setDvar("missileRemoteFOV", 60);
- setDvar("missileRemoteSpeedUp", 20000);
- setDvar("missileRemoteSteerPitchRate", 160);
- setDvar("missileRemoteSteerYawRate", 160);
- setDvar("player_spectateSpeedScale", 20);
- level.rockets = [];
- level.killstreakFuncs["predator_missile"] = ::tryUsePredatorMissile;
- level.missilesForSightTraces = [];
- }
- tryUsePredatorMissile( lifeId )
- {
- if ( isDefined( level.civilianJetFlyBy ) )
- {
- self iPrintLnBold( &"MP_CIVILIAN_AIR_TRAFFIC" );
- return false;
- }
- self setUsingRemote( "remotemissile" );
- result = self maps\mp\killstreaks\_killstreaks::initRideKillstreak();
- if ( result != "success" )
- {
- if ( result != "disconnect" )
- self clearUsingRemote();
- return false;
- }
- self thread enterDrone( self, lifeId ); // Modified Predator
- //level thread _fire( lifeId, self ); // Standard Predator
- self clearUsingRemote();
- return true;
- }
- getBestSpawnPoint( remoteMissileSpawnPoints )
- {
- validEnemies = [];
- foreach ( spawnPoint in remoteMissileSpawnPoints )
- {
- spawnPoint.validPlayers = [];
- spawnPoint.spawnScore = 0;
- }
- foreach ( player in level.players )
- {
- if ( !isReallyAlive( player ) )
- continue;
- if ( player.team == self.team )
- continue;
- if ( player.team == "spectator" )
- continue;
- bestDistance = 999999999;
- bestSpawnPoint = undefined;
- foreach ( spawnPoint in remoteMissileSpawnPoints )
- {
- //could add a filtering component here but i dont know what it would be.
- spawnPoint.validPlayers[spawnPoint.validPlayers.size] = player;
- potentialBestDistance = Distance2D( spawnPoint.targetent.origin, player.origin );
- if ( potentialBestDistance <= bestDistance )
- {
- bestDistance = potentialBestDistance;
- bestSpawnpoint = spawnPoint;
- }
- }
- assertEx( isDefined( bestSpawnPoint ), "Closest remote-missile spawnpoint undefined for player: " + player.name );
- bestSpawnPoint.spawnScore += 2;
- }
- bestSpawn = remoteMissileSpawnPoints[0];
- foreach ( spawnPoint in remoteMissileSpawnPoints )
- {
- foreach ( player in spawnPoint.validPlayers )
- {
- spawnPoint.spawnScore += 1;
- if ( bulletTracePassed( player.origin + (0,0,32), spawnPoint.origin, false, player ) )
- spawnPoint.spawnScore += 3;
- if ( spawnPoint.spawnScore > bestSpawn.spawnScore )
- {
- bestSpawn = spawnPoint;
- }
- else if ( spawnPoint.spawnScore == bestSpawn.spawnScore ) // equal spawn weights so we toss a coin.
- {
- if ( coinToss() )
- bestSpawn = spawnPoint;
- }
- }
- }
- return ( bestSpawn );
- }
- drawLine( start, end, timeSlice, color )
- {
- drawTime = int(timeSlice * 20);
- for( time = 0; time < drawTime; time++ )
- {
- line( start, end, color,false, 1 );
- wait ( 0.05 );
- }
- }
- _fire( lifeId, player )
- {
- remoteMissileSpawnArray = getEntArray( "remoteMissileSpawn" , "targetname" );
- //assertEX( remoteMissileSpawnArray.size > 0 && getMapCustom( "map" ) != "", "No remote missile spawn points found. Contact friendly neighborhood designer" );
- foreach ( spawn in remoteMissileSpawnArray )
- {
- if ( isDefined( spawn.target ) )
- spawn.targetEnt = getEnt( spawn.target, "targetname" );
- }
- if ( remoteMissileSpawnArray.size > 0 )
- remoteMissileSpawn = player getBestSpawnPoint( remoteMissileSpawnArray );
- else
- remoteMissileSpawn = undefined;
- // if ( isDefined( remoteMissileSpawn ) )
- // {
- startPos = remoteMissileSpawn.origin;
- targetPos = AnglesToForward( level.Drone.angles );//remoteMissileSpawn.targetEnt.origin;
- //thread drawLine( startPos, targetPos, 30, (0,1,0) );
- //vector = vectorNormalize( startPos - targetPos );
- //startPos = vector_multiply( vector, 14000 ) + targetPos;
- //thread drawLine( startPos, targetPos, 15, (1,0,0) );
- rocket = MagicBullet( "remotemissile_projectile_mp", level.Dronemodel.origin-(0,0,-200), targetPos, player );
- // }
- /* else
- {
- upVector = (0, 0, level.missileRemoteLaunchVert );
- backDist = level.missileRemoteLaunchHorz;
- targetDist = level.missileRemoteLaunchTargetDist;
- forward = AnglesToForward( player.angles );
- startpos = player.origin + upVector + forward * backDist * -1;
- targetPos = player.origin + forward * targetDist;
- rocket = MagicBullet( "remotemissile_projectile_mp", startpos, targetPos, player );
- }
- */
- if ( !IsDefined( rocket ) )
- {
- player clearUsingRemote();
- return;
- }
- rocket thread maps\mp\gametypes\_weapons::AddMissileToSightTraces( player.team );
- rocket thread handleDamage();
- rocket.lifeId = lifeId;
- rocket.type = "remote";
- MissileEyes( player, rocket );
- }
- /#
- _fire_noplayer( lifeId, player )
- {
- upVector = (0, 0, level.missileRemoteLaunchVert );
- backDist = level.missileRemoteLaunchHorz;
- targetDist = level.missileRemoteLaunchTargetDist;
- forward = AnglesToForward( player.angles );
- startpos = player.origin + upVector + forward * backDist * -1;
- targetPos = player.origin + forward * targetDist;
- rocket = MagicBullet( "remotemissile_projectile_mp", startpos, targetPos, player );
- if ( !IsDefined( rocket ) )
- return;
- rocket thread handleDamage();
- rocket.lifeId = lifeId;
- rocket.type = "remote";
- player CameraLinkTo( rocket, "tag_origin" );
- player ControlsLinkTo( rocket );
- rocket thread Rocket_CleanupOnDeath();
- wait ( 2.0 );
- player ControlsUnlink();
- player CameraUnlink();
- }
- #/
- handleDamage()
- {
- self endon ( "death" );
- self endon ( "deleted" );
- self setCanDamage( true );
- for ( ;; )
- {
- self waittill( "damage" );
- println ( "projectile damaged!" );
- }
- }
- MissileEyes( player, rocket )
- {
- //level endon ( "game_ended" );
- player endon ( "joined_team" );
- player endon ( "joined_spectators" );
- rocket thread Rocket_CleanupOnDeath();
- player thread Player_CleanupOnGameEnded( rocket );
- player thread Player_CleanupOnTeamChange( rocket );
- player VisionSetMissilecamForPlayer( "black_bw", 0 );
- player endon ( "disconnect" );
- if ( isDefined( rocket ) )
- {
- player VisionSetMissilecamForPlayer( game["thermal_vision"], 1.0 );
- player thread delayedFOFOverlay();
- player CameraLinkTo( rocket, "tag_origin" );
- player ControlsLinkTo( rocket );
- if ( getDvarInt( "camera_thirdPerson" ) )
- player setThirdPersonDOF( false );
- rocket waittill( "death" );
- self notify("remove_hud");
- // is defined check required because remote missile doesnt handle lifetime explosion gracefully
- // instantly deletes its self after an explode and death notify
- if ( isDefined(rocket) )
- player maps\mp\_matchdata::logKillstreakEvent( "predator_missile", rocket.origin );
- player ControlsUnlink();
- player freezeControlsWrapper( true );
- // If a player gets the final kill with a hellfire, level.gameEnded will already be true at this point
- if ( !level.gameEnded || isDefined( player.finalKill ) )
- player thread staticEffect( 0.5 );
- wait ( 0.5 );
- player ThermalVisionFOFOverlayOff();
- player CameraUnlink();
- if ( getDvarInt( "camera_thirdPerson" ) )
- player setThirdPersonDOF( true );
- }
- player clearUsingRemote();
- }
- delayedFOFOverlay()
- {
- self endon ( "death" );
- self endon ( "disconnect" );
- level endon ( "game_ended" );
- wait ( 0.15 );
- self ThermalVisionFOFOverlayOn();
- }
- staticEffect( duration )
- {
- self endon ( "disconnect" );
- staticBG = newClientHudElem( self );
- staticBG.horzAlign = "fullscreen";
- staticBG.vertAlign = "fullscreen";
- staticBG setShader( "white", 640, 480 );
- staticBG.archive = true;
- staticBG.sort = 10;
- static = newClientHudElem( self );
- static.horzAlign = "fullscreen";
- static.vertAlign = "fullscreen";
- static setShader( "ac130_overlay_grain", 640, 480 );
- static.archive = true;
- static.sort = 20;
- wait ( duration );
- static destroy();
- staticBG destroy();
- }
- Player_CleanupOnTeamChange( rocket )
- {
- rocket endon ( "death" );
- self endon ( "disconnect" );
- self waittill_any( "joined_team" , "joined_spectators" );
- if ( self.team != "spectator" )
- {
- self ThermalVisionFOFOverlayOff();
- self ControlsUnlink();
- self CameraUnlink();
- if ( getDvarInt( "camera_thirdPerson" ) )
- self setThirdPersonDOF( true );
- }
- self clearUsingRemote();
- level.remoteMissileInProgress = undefined;
- }
- Rocket_CleanupOnDeath()
- {
- entityNumber = self getEntityNumber();
- level.rockets[ entityNumber ] = self;
- self waittill( "death" );
- level.rockets[ entityNumber ] = undefined;
- }
- Player_CleanupOnGameEnded( rocket )
- {
- rocket endon ( "death" );
- self endon ( "death" );
- level waittill ( "game_ended" );
- self ThermalVisionFOFOverlayOff();
- self ControlsUnlink();
- self CameraUnlink();
- if ( getDvarInt( "camera_thirdPerson" ) )
- self setThirdPersonDOF( true );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement