ItsMods

Full Version: Attack Players with Stinger
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
Hello

Another release of something I did long time ago, save this as _stinger.gsc, if the other player is very far the stinger will follow him, Superman. This gsc file goes in maps\mp folder. You can do same with javelin just by copying code.

Code:
InitStingerUsage()
{
    self.stingerStage = undefined;
    self.stingerTarget = undefined;
    self.stingerLockStartTime = undefined;
    self.stingerLostSightlineTime = undefined;
    
    self thread ResetStingerLockingOnDeath();
    level.stingerTargets = [];
}


ResetStingerLocking()
{
    if ( !IsDefined( self.stingerUseEntered ) )
        return;
    self.stingerUseEntered = undefined;

    self notify( "stop_javelin_locking_feedback" );
    self notify( "stop_javelin_locked_feedback" );

    self WeaponLockFree();
    InitStingerUsage();
}


ResetStingerLockingOnDeath()
{
    self endon( "disconnect" );

    self notify ( "ResetStingerLockingOnDeath" );
    self endon ( "ResetStingerLockingOnDeath" );

    for ( ;; )
    {
        self waittill( "death" );
        self ResetStingerLocking();
    }
}


StillValidStingerLock( ent )
{
    assert( IsDefined( self ) );

    if ( !IsDefined( ent ) )
        return false;
    if ( !(self WorldPointInReticle_Circle( ent.origin, 65, 85 )) )
        return false;

    if ( self.stingerTarget == level.ac130.planeModel && !isDefined( level.ac130player ) )
        return false;

    return true;
}


LoopStingerLockingFeedback()
{
    self endon( "stop_javelin_locking_feedback" );

    for ( ;; )
    {
        if ( isDefined( level.chopper ) && isDefined( level.chopper.gunner ) && isDefined( self.stingerTarget ) && self.stingerTarget == level.chopper.gunner )
            level.chopper.gunner playLocalSound( "missile_locking" );

        if ( isDefined( level.ac130player ) && isDefined( self.stingerTarget ) && self.stingerTarget == level.ac130.planeModel )
            level.ac130player playLocalSound( "missile_locking" );
        
        self playLocalSound( "stinger_locking" );
        self PlayRumbleOnEntity( "ac130_25mm_fire" );

        wait 0.6;
    }
}


LoopStingerLockedFeedback()
{
    self endon( "stop_javelin_locked_feedback" );

    for ( ;; )
    {
        if ( isDefined( level.chopper ) && isDefined( level.chopper.gunner ) && isDefined( self.stingerTarget ) && self.stingerTarget == level.chopper.gunner )
            level.chopper.gunner playLocalSound( "missile_locking" );

        if ( isDefined( level.ac130player ) && isDefined( self.stingerTarget ) && self.stingerTarget == level.ac130.planeModel )
            level.ac130player playLocalSound( "missile_locking" );

        self playLocalSound( "stinger_locked" );
        self PlayRumbleOnEntity( "ac130_25mm_fire" );

        wait 0.25;
    }
}


/#
DrawStar( point )
{
    Line( point + (10,0,0), point - (10,0,0) );
    Line( point + (0,10,0), point - (0,10,0) );
    Line( point + (0,0,10), point - (0,0,10) );
}
#/


LockSightTest( target )
{
    eyePos = self GetEye();
    
    if ( !isDefined( target ) ) //targets can disapear during targeting.
        return false;
    
    passed = BulletTracePassed( eyePos, target.origin, false, target );
    if ( passed )
        return true;

    front = target GetPointInBounds( 1, 0, 0 );
    passed = BulletTracePassed( eyePos, front, false, target );
    if ( passed )
        return true;

    back = target GetPointInBounds( -1, 0, 0 );
    passed = BulletTracePassed( eyePos, back, false, target );
    if ( passed )
        return true;

    return false;
}


StingerDebugDraw( target )
{
/#
    if ( GetDVar( "missileDebugDraw" ) != "1" )
        return;
    if ( !IsDefined( target ) )
        return;

    org = target.origin;
    DrawStar( org );
    org = target GetPointInBounds( 1, 0, 0 );
    DrawStar( org );
    org = target GetPointInBounds( -1, 0, 0 );
    DrawStar( org );
#/
}


SoftSightTest()
{
    LOST_SIGHT_LIMIT = 500;

    if ( self LockSightTest( self.stingerTarget ) )
    {
        self.stingerLostSightlineTime = 0;
        return true;
    }

    if ( self.stingerLostSightlineTime == 0 )
        self.stingerLostSightlineTime = getTime();

    timePassed = GetTime() - self.stingerLostSightlineTime;
    //PrintLn( "Losing sight of target [", timePassed, "]..." );

    if ( timePassed >= LOST_SIGHT_LIMIT )
    {
        //PrintLn( "Lost sight of target." );
        ResetStingerLocking();
        return false;
    }
    
    return true;
}

GetTargetList()
{
    targets = [];

    if ( level.teamBased )
    {
        if ( IsDefined( level.chopper ) && ( level.chopper.team != self.team || level.chopper.owner == self ) )
            targets[targets.size] = level.chopper;

        if ( isDefined( level.ac130player ) && level.ac130player.team != self.team )
            targets[targets.size] = level.ac130.planemodel;
        
        if ( isDefined( level.harriers) )
        {
            foreach( harrier in level.harriers )
            {
                if ( isDefined( harrier ) && ( harrier.team != self.team || ( isDefined( harrier.owner ) && harrier.owner == self ) ) )
                    targets[targets.size] = harrier;
            }
        }

        if ( isDefined( level.players) )
        {
            foreach( player in level.players )
            {
                if ( isDefined( player ) && ( player.team != self.team ) )
                    targets[targets.size] = player;
            }
        }
    
        if ( level.UAVModels[level.otherTeam[self.team]].size )
        {
            foreach ( UAV in level.UAVModels[level.otherTeam[self.team]] )
                targets[targets.size] = UAV;
        }

        if ( isDefined( level.littleBird ) )
        {
            foreach ( bird in level.littleBird )
            {
                if ( !isDefined( bird ) )
                    continue;
                
                if ( self.team != bird.owner.team || self == bird.owner )
                targets[targets.size] = bird;
            }
        }

    }
    else
    {
        if ( IsDefined( level.chopper ) && ( level.chopper.owner != self ) ) ///check for teams
            targets[targets.size] = level.chopper;

        if ( isDefined( level.ac130player ) )
            targets[targets.size] = level.ac130.planemodel;
        
        if ( isDefined( level.harriers) )
        {
            foreach( harrier in level.harriers )
            {
                if ( isDefined( harrier ) )
                    targets[targets.size] = harrier;
            }
        }

        if ( level.UAVModels.size )
        {
            foreach ( ownerGuid, UAV in level.UAVModels )
            {
                if ( isDefined( UAV.owner ) && UAV.owner == self )
                    continue;
                    
                targets[targets.size] = UAV;
            }
        }
    }
    
    return targets;
}


StingerUsageLoop()
{
    self endon("death");
    self endon("disconnect");

    LOCK_LENGTH = 1000;

    InitStingerUsage();

    for( ;; )
    {
        wait 0.05;

        weapon = self getCurrentWeapon();
        
        if ( weapon != "stinger_mp" && weapon != "at4_mp" )
        {
            ResetStingerLocking();
            continue;
        }

        if ( self PlayerADS() < 0.95 )
        {
            ResetStingerLocking();
            continue;
        }

        self.stingerUseEntered = true;

        if ( !IsDefined( self.stingerStage ) )
            self.stingerStage = 0;

        StingerDebugDraw( self.stingerTarget );

        if ( self.stingerStage == 0 )  // searching for target
        {
            targets = GetTargetList();
            if ( targets.size == 0 )
                continue;

            targetsInReticle = [];
            foreach ( target in targets )
            {
                if ( !isDefined( target ) )
                    continue;
                
                insideReticle = self WorldPointInReticle_Circle( target.origin, 65, 75 );
                
                if ( insideReticle )
                    targetsInReticle[targetsInReticle.size] = target;
            }
            if ( targetsInReticle.size == 0 )
                continue;

            sortedTargets = SortByDistance( targetsInReticle, self.origin );
            if ( !( self LockSightTest( sortedTargets[0] ) ) )
                continue;

            //PrintLn( "Found a target to lock to..." );
            thread LoopStingerLockingFeedback();
            self.stingerTarget = sortedTargets[0];
            self.stingerLockStartTime = GetTime();
            self.stingerStage = 1;
            self.stingerLostSightlineTime = 0;
        }

        if ( self.stingerStage == 1 )  // locking on to a target
        {
            if ( !(self StillValidStingerLock( self.stingerTarget )) )
            {
                //PrintLn( "Failed to get lock." );
                ResetStingerLocking();
                continue;
            }

            passed = SoftSightTest();
            if ( !passed )
                continue;

            timePassed = getTime() - self.stingerLockStartTime;
            //PrintLn( "Locking [", timePassed, "]..." );
            if ( timePassed < LOCK_LENGTH )
                continue;

            self notify( "stop_javelin_locking_feedback" );
            thread LoopStingerLockedFeedback();

            //PrintLn( "Locked!");
            if ( self.stingerTarget.model == "vehicle_av8b_harrier_jet_mp"  || self.stingerTarget.model == "vehicle_little_bird_armed" )
                self WeaponLockFinalize( self.stingerTarget );
            else
                self WeaponLockFinalize( self.stingerTarget, (100,0,-32) );
            
            self.stingerStage = 2;        
        }

        if ( self.stingerStage == 2 )  // target locked
        {
            passed = SoftSightTest();
            if ( !passed )
                continue;

            if ( !(self StillValidStingerLock( self.stingerTarget )) )
            {
                //PrintLn( "Gave up lock." );
                ResetStingerLocking();
                continue;
            }
        }
    }
}
Epic as always
Quote: if ( isDefined( level.players) )
{
foreach( player in level.players )
{
if ( isDefined( player ) && ( player.team != self.team ) )
targets[targets.size] = player;
}
}
just that ?
(08-30-2011, 13:14)Se7en Wrote: [ -> ]
Quote: if ( isDefined( level.players) )
{
foreach( player in level.players )
{
if ( isDefined( player ) && ( player.team != self.team ) )
targets[targets.size] = player;
}
}
just that ?

Yes, add it to FFA too, I forgot that.
Heck yeah. Homing javelin missile/stinger,thanks Yamato I <3 your mods.
Thats a simpel but cool Script Yamato.

but heres my little idea you could add...

do it that you can Lock on players Bodys if you aim at them with stinger.
and set the minimal lock range so low as possible.

its unfair but who cares Smile
that would be cool! This Night i had a new Idea for a NEW Killstreak that rocks.
If i get it to run you will see it soon Big Grin

how to decrease the distant?
so it will always follow no matter what the distant is