Back to Index Page generated: Nov 12, 2024, 11:02:03 PM

Expansion Target System Upgrade

Content

Manifest

from Expansion Manager's OXP list from Expansion Manifest
Description Upgrade to the ships Target System that allows to cycle targeting between outlaw or neutral ships and cargoes on your scanner. Upgrade to the ships Target System that allows to cycle targeting between outlaw or neutral ships and cargoes on your scanner.
Identifier oolite.oxp.AndreyBelov.Targeter oolite.oxp.AndreyBelov.Targeter
Title Target System Upgrade Target System Upgrade
Category Equipment Equipment
Author Andrey Belov Andrey Belov
Version 0.73 0.73
Tags
Required Oolite Version
Maximum Oolite Version
Required Expansions
Optional Expansions
Conflict Expansions
Information URL https://wiki.alioth.net/index.php/Targeter_OXP n/a
Download URL https://wiki.alioth.net/img_auth.php/8/88/Targeter_0.73.oxz n/a
License CC-BY-NC-SA 3.0 CC-BY-NC-SA 3.0
File Size n/a
Upload date 1698794932

Documentation

Also read http://wiki.alioth.net/index.php/Target%20System%20Upgrade

Equipment

Name Visible Cost [deci-credits] Tech-Level
Target System Upgrade yes 31000 12+
Sell Target System Upgrade yes 420 12+

Ships

This expansion declares no ships.

Models

This expansion declares no models.

Scripts

Path
Scripts/target-system-upgrade-equipment.js
'use strict';

this.author  = 'Andrey Belov';
this.licence = 'CC-BY-NC-SA 3.0';

this._mode = 0;
this._ws = null;

// Handle event "mode" for prime equipment
this.mode = function() {
    if ( player.ship.equipmentStatus('EQ_ENEMY_TARGETER_UPGRADE') !== 'EQUIPMENT_OK' ) {
        return;
    }
    if ( ++this._mode > 2 ) {
        this._mode = 0;
    }
    worldScripts['Target System Upgrade']._mode = this._mode; // so other OXP's can see the mode value
    this._showMsg( 'timer.tsu@mode', 'TSU mode: ' + ['hostile/outlaw','neutral','cargo'][this._mode] );
};

this._showMsg = function(key, msg) {
    var
    c = player.ship.multiFunctionDisplays,
    r = false;

    if (this._ws == null) {
        this._ws = worldScripts['Target System Upgrade'];
    }

    if ( c > 0 && ws._noMFD == false) {
        player.ship.setMultiFunctionText(key, msg);
        for ( var n = 0; n < c; n++ ) {
            r = player.ship.setMultiFunctionDisplay(n, key);
            if (r) break;
        }
    }

    if ( c<1 || !r ) player.consoleMessage(msg, 1);
};

//Handle event "activated" for prime equipment
this.activated = function() {
    if ( player.ship.equipmentStatus('EQ_ENEMY_TARGETER_UPGRADE') === 'EQUIPMENT_OK' ) {
        this._setNextTarget();

    }
};

this._setNextTarget = function() {
    var targets = [];

    if ( 0 === this._mode ) {
        targets = this._getHostileShips();

        if ( targets.length < 1 ) {
            targets = this._getOutlawShips();
        }
    }
    else if ( 1 === this._mode ) {
        targets = this._getNeutralShips();
    }
    else if ( 2 === this._mode ) {
        targets = this._getCargoPods();
    }

    var len = targets.length - 1;

    if ( len < 0 ) {
        return;
    }

    this._sortByDistance(targets);

    var ptn = 0;
    if ( player.ship.target ) {
        var TSU = worldScripts['Target System Upgrade'];
        ptn = TSU._getPreviousTargetNum();
        ptn = ptn >= len ? 0 : ptn + 1;
        TSU._setPreviousTargetNum(ptn);
    }
    var nextTarget = targets[ptn];

    if ( player.ship.target && player.ship.target === nextTarget ) {
        return;
    }

    player.ship.target = nextTarget;
};

this._getHostileShips = function() {
    if ( ! player.alertHostiles ) {
        return [];
    }
    return this._filterEntities(
        function(e) { return ( e.isShip && e.hasHostileTarget && e.target === player.ship ); }
    );
};

this._getOutlawShips = function() {
    if ( 1 > player.alertCondition ) {
        return [];
    }
    return this._filterEntities(
        function(e) { return ( e.scanClass === 'CLASS_NEUTRAL' && e.bounty !== 0 ); }
    );
};

this._getNeutralShips = function() {
    if ( 1 > player.alertCondition ) {
        return [];
    }
    return this._filterEntities(
//        function(e) { return ( e.scanClass === 'CLASS_NEUTRAL' && e.bounty === 0 && e.target !== player.ship ); }
        function(e) { return ( e.scanClass === 'CLASS_NEUTRAL' && e.bounty === 0 ); }
    );
};

this._getCargoPods = function() {
    return this._filterEntities(
        function(e) { return ( e.scanClass === 'CLASS_CARGO' || (e.scanClass === "CLASS_MINE" && e.isBeacon === true) ); }
    );
};

this._filterEntities = function(filterFunc) {
    return system.filteredEntities(
        this,
        filterFunc,
        player.ship,
        player.ship.scannerRange
    );
};

this._sortByDistance = function(targets) {
    var cache = {};
    // sort
    targets.sort( function sortByDist(a,b) {
        // cache distance
        //var ai=a.ID,bi=b.ID; // work only with my patch with universalID getter :(
        var
        ai = a.entityPersonality,
        bi = b.entityPersonality; // use some "uniq" ident
        cache[ai] = cache[ai] || a.position.distanceTo(player.ship.position);
        cache[bi] = cache[bi] || b.position.distanceTo(player.ship.position);
        return ((cache[ai]<cache[bi])?-1:((cache[ai]>cache[bi])?1:0));
    } );
};
Scripts/target-system-upgrade.js
'use strict';

this.author  = 'Andrey Belov';
this.licence = 'CC-BY-NC-SA 3.0';

this.name    = 'Target System Upgrade';
this._mode = 0; // updates will be copied from equipment script, not updatable here
this._noMFD = false;

// configuration settings for use in Lib_Config
this._tsuConfig = {
    Name: this.name,
    Alias: "Target System Upgrade",
    Display: "Notification options",
    Alive: "_tsuConfig",
    Bool: {
        B0: {
            Name: "_noMFD",
            Def: false,
            Desc: "Disable MFD notifications"
        },
        Info: "0 - No notifications will be sent to the MFD. Console messages only."
    },
};

this.startUp = function() {
    this._setPreviousTargetNum(0);
};

this.startUpComplete = function () {
	// register our settings, if Lib_Config is present
	if (worldScripts.Lib_Config) worldScripts.Lib_Config._registerSet(this._tsuConfig);
}

this._setPreviousTargetNum = function(num) {
    this._previousTargetNum = num;
};

this._getPreviousTargetNum = function() {
	return this._previousTargetNum;
};

// sell 'Target System Upgrade'
this.playerBoughtEquipment = function(equipmentKey) {
	if ( equipmentKey === 'EQ_ENEMY_TARGETER_UPGRADE_REMOVAL') {
		player.ship.removeEquipment('EQ_ENEMY_TARGETER_UPGRADE');
		player.ship.removeEquipment('EQ_ENEMY_TARGETER_UPGRADE_REMOVAL');
		player.credits += ( EquipmentInfo.infoForKey('EQ_ENEMY_TARGETER_UPGRADE').price * 0.09 );
	}
};

this.equipmentDamaged = function(equipment) {
	if ( equipment === 'EQ_ENEMY_TARGETER_UPGRADE' ) {
		player.consoleMessage('Target System Upgrade is damaged!');
	}
};