| Back to Index | Page generated: Oct 27, 2025, 5:37:22 AM | 
 Expansion Traffic Lights
 Expansion Traffic Lights| from Expansion Manager's OXP list | from Expansion Manifest | |
|---|---|---|
| Description | This OXP helps to override annoying problem of frozen docking queue. Emergency docking timer will be started immediately after request to docking clearance and after 15 min of waiting you will receive docking priority. In addition to text info this OXP provides visual helpers - string of colored flashers on approach lane between main station docking port and beacon. | This OXP helps to override annoying problem of frozen docking queue. Emergency docking timer will be started immediately after request to docking clearance and after 15 min of waiting you will receive docking priority. In addition to text info this OXP provides visual helpers - string of colored flashers on approach lane between main station docking port and beacon. | 
| Identifier | oolite.oxp.stranger.TrafficLights | oolite.oxp.stranger.TrafficLights | 
| Title | Traffic Lights | Traffic Lights | 
| Category | Mechanics | Mechanics | 
| Author | stranger | stranger | 
| Version | 1.1.1 | 1.1.1 | 
| Tags | docking, clearance, queue, station | docking, clearance, queue, station | 
| Required Oolite Version | ||
| Maximum Oolite Version | ||
| Required Expansions | ||
| Optional Expansions | ||
| Conflict Expansions |  |  | 
| Information URL | http://aegidian.org/bb/viewtopic.php?f=4&t=19588 | n/a | 
| Download URL | https://wiki.alioth.net/img_auth.php/3/3c/TrafficLights.oxz | n/a | 
| License | CC-BY-NC-SA 3.0 | CC-BY-NC-SA 3.0 | 
| File Size | n/a | |
| Upload date | 1610873278 | 
Also read http://wiki.alioth.net/index.php/Traffic%20Lights
Traffic Lights OXP by Stranger This OXP is released under the Creative Commons Attribution - Non-Commercial - Share Alike 3.0 license. You are free to use and distribute this OXP on non-commercial basis. Rebundling of this OXP within another distribution is permitted as long as it is unchanged. Any mods/derivatives of this OXP must be distributed under another names. The license information (either as this file or merged into a larger one) must be included in the OXP. -------------------------------------------------------------- Instructions: Unzip the file, and then move the folder "Traffic Lights.oxp" to the AddOns directory of your Oolite installation. Then start the game up. This OXP helps to override annoying problem of frozen docking queue. Emergency docking timer will be started immediately after request to docking clearance (select station as target and press Shift-L) and after 15 min of waiting you will receive docking priority. You will also receive emergency docking priority in case of aft shield dropped below 0.1 max level (test for fuel depletion if Hard Way OXP is installed). Emergency docking clearance is performed on main station only and if you have no Fugitive status! In addition to text info this OXP provides visual helpers - string of colored flashers on approach lane between main station docking port and beacon. RED - docking is prohibited. YELLOW - docking is allowed, but there are ships in approach lane OR you have less then 30 seconds to dock. GREEN - docking is allowed and approach is clear. BLUE - player is not in docking queue. Dependencies: This OXP is incompatible with Neo-Dock Lights OXP by Thargoid. It is strongly recommended to avoid using other visual docking helper OXPs to prevent graphic clutter. Installing my Hard Way OXP is highly recommended, but not obligatory. Credits: Modified code from Neo-Dock Lights OXP by Thargoid was used for visualisation of docking status. I thank commander vasig for invaluable help in testing this OXP in state of development. I thank also commander cyxoway for multiple timer issue report in emergency_docking.js and improved method of timer management in traffic_lights.js. ______________________________________________________________ Version history: 29.01.2019 - Version 1.1.1 Converted to OZX. 15.04.2018 - Version 1.1 Refining code issues. manifest.plist added. 08.09.2017 - Version 1.0 Blue flashers added to indicate player not in docking queue. Improved method of timer management in traffic_lights.js. 23.08.2017 - Version 0.9 Fixed multiple timer issue. Aft shield level to permit emergency docking clearance lowered to 0.1 of max level. 01.07.2017 - Version 0.8 Fixed situation with docking clearance timing out: flashers switches to yellow, not red. 15.06.2017 - Version 0.7. String of colored flashers is added as visual helpers to indicate docking status. Changing name of OXP. 11.06.2017 - Version 0.6. Emergency docking clearance before timer goes zero is permitted if aft shield dropped below 0.25 of max level, not in Red condition. 08.06.2017 - Version 0.5. Emergency docking timer freezed if main station in battle regime (condition Red). Kills emergency docking timer if player receives docking permission. 08.06.2017 - Version 0.4. Emergency docking clearance is unavailable on Fugitive legal status. Emergency docking clearance before timer goes zero is permitted only in Red condition. 07.06.2017 - Version 0.3. Fixed error causing running emergency timer on docking request other than main station. 07.06.2017 - Version 0.2. Fixed error causing penalty in case of emergency docking. 06.06.2017 - Version 0.1. Initial release.
| Path | |
|---|---|
| Scripts/emergency_docking.js | "use strict";
this.name				= "Emergency Docking Clearance";
this.author				= "Stranger";
this.copyright			= "Creative Commons: attribution, non-commercial, sharealike with clauses - see readme.txt";
this.description		= "Override docking delays";
this.version			= "1.1";
this.$waitingLimit = 15; // max 15 min
this.shipWillLaunchFromStation = this.shipEnteredStationAegis = function()
	{
	if(system.isInterstellarSpace || !system.mainStation.isValid)
		{ return; }
	system.mainStation.requiresDockingClearance = true;
	this.$waitingCounter = 0;
    this.$waitingTime = this.$waitingLimit;
	}
    
this.shipWillDockWithStation = this.shipWillEnterWitchspace = this.shipExitedStationAegis = function()
	{
    this.shipDied();
    }
this.$setClearance = function()
	{
	if(!system.mainStation || player.dockingClearanceStatus == "DOCKING_CLEARANCE_STATUS_GRANTED")
		{
		this.shipDied();
		return; 
		}
    this.$waitingCounter += 1;
    var message;
    if (this.$waitingCounter >= 60)
        {
        if (system.mainStation.alertCondition == 3)
            {
            message = "Emergency docking frozen";
            }
        else
            {
            this.$waitingTime -= 1;
            if (this.$waitingTime > 0 && player.ship.aftShield >= 0.1 * player.ship.maxAftShield)
                {
                message = "Emergency docking in " + this.$waitingTime + " min";
                }
            else
                {
                system.mainStation.requiresDockingClearance = false;
                message = "Emergency docking allowed";            
                }
            }
        player.consoleMessage("\n\n\n\n\n\n\n\n\n\n Docking clearance status: " + message,5);
        this.$waitingCounter -= 60;
        }
	}
this.shipDied = function()
	{
	if(this.$dockTimer) 
		{
		this.$dockTimer.stop();
		delete this.$dockTimer;
		}
	}
this.playerRequestedDockingClearance = function(message)
    {
    if (player.ship.target != system.mainStation || player.bounty > 50 || system.mainStation.alertCondition == 3)
        { return; }
    if (player.ship.aftShield < 0.1 * player.ship.maxAftShield) // shields possibly shut down
        {
        system.mainStation.requiresDockingClearance = false;
        }
    else
        {
        if (!this.$dockTimer)
            {
            this.$dockTimer = new Timer(this, this.$setClearance, 0, 1);
            }
        }
    } | 
| Scripts/traffic_lights.js | "use strict";
this.name				= "Traffic Lights";
this.author				= "Stranger";
this.copyright			= "Creative Commons: attribution, non-commercial, sharealike with clauses - see readme.txt";
this.description		= "Indicates docking clearance status";
this.version			= "1.1";
// this script is partially based on Neo-Dock Lights OXP by Thargoid
this.startUp   = function ()
    {
	this.$lightsStatus = "BLUE";
	this.$lightsTimer = new Timer(this, this.$setLights, 0, 1);
	this.$lightsTimer.stop();
    }
this.shipWillLaunchFromStation = this.shipEnteredStationAegis = function()
	{
	if(system.isInterstellarSpace || !system.mainStation || !system.mainStation.isValid)
		{ return; }
	this.$lightsPosition = system.mainStation.position.add(system.mainStation.vectorForward.multiply(10000));
    this.$lights = system.addVisualEffect("dockLights_blue", this.$lightsPosition);	
    this.$lights.orientation = system.mainStation.orientation;
    this.$lightsTimer.start();
	}
    
this.shipWillDockWithStation = this.shipWillEnterWitchspace = this.shipExitedStationAegis = function()
	{
    this.shipDied();
    }
this.$setLights = function()
	{
	if(!system.mainStation) 
		{
		this.shipDied();
		return; 
		}
    function dockingShips(entity) {return entity.isShip && !entity.isPlayer && !entity.hasRole("buoy") && ((entity.position.distanceTo(system.mainStation.position) + entity.position.distanceTo(this.$lights.position)) < 10100)}
	var incomingArray = system.filteredEntities(this, dockingShips, system.mainStation, 10000);
	this.$lightsPosition = system.mainStation.position.add(system.mainStation.vectorForward.multiply(10000));
	
    if(player.dockingClearanceStatus == "DOCKING_CLEARANCE_STATUS_GRANTED" || !system.mainStation.requiresDockingClearance)
        {
        this.$dockingStatus = "GREEN";
        }
    else
        {
        if(player.dockingClearanceStatus == "DOCKING_CLEARANCE_STATUS_TIMING_OUT")
            {
            this.$dockingStatus = "YELLOW";
            }
        else
            {
            if(player.dockingClearanceStatus == "DOCKING_CLEARANCE_STATUS_REQUESTED")
                {
                this.$dockingStatus = "RED";
                }
            else
                {
                this.$dockingStatus = "BLUE";
                }
            }
        }
    // condition RED
	if(this.$dockingStatus == "RED" && this.$lightsStatus != "RED")
		{ 
		this.$removeLights();
		this.$lights = system.addVisualEffect("dockLights_red", this.$lightsPosition);	
		this.$lights.orientation = system.mainStation.orientation;
		this.$lightsStatus = "RED";		
		return;
		}
    // condition YELLOW
	if((this.$dockingStatus == "YELLOW" || (this.$dockingStatus == "GREEN" && incomingArray.length > 0)) && this.$lightsStatus != "YELLOW")
		{ 
		this.$removeLights();
		this.$lights = system.addVisualEffect("dockLights_yellow", this.$lightsPosition);	
		this.$lights.orientation = system.mainStation.orientation;
		this.$lightsStatus = "YELLOW";		
		return;
		}
		
    // condition GREEN
	if(this.$dockingStatus == "GREEN" && incomingArray.length == 0 && this.$lightsStatus != "GREEN")
		{ 
		this.$removeLights();
		this.$lights = system.addVisualEffect("dockLights_green", this.$lightsPosition);
		this.$lights.orientation = system.mainStation.orientation;
		this.$lightsStatus = "GREEN";
		return;
		}
    // condition BLUE
	if(this.$dockingStatus == "BLUE" && this.$lightsStatus != "BLUE")
		{ 
		this.$removeLights();
		this.$lights = system.addVisualEffect("dockLights_blue", this.$lightsPosition);	
		this.$lights.orientation = system.mainStation.orientation;
		this.$lightsStatus = "BLUE";		
		return;
		}
	}
this.shipDied = this.shipWillEnterWitchspace = this.shipExitedStationAegis = function()
	{
		this.$lightsTimer.stop();		
		this.$removeLights();
		this.$lightsStatus = "BLUE";
	}	
	
this.$removeLights = function()
	{
	var count = system.allVisualEffects.length;
	if(count === 0) { return; }
	for (var i=count-1; i>=0; i--)
		{
		if(system.allVisualEffects[i].dataKey === "dockLights_green" || system.allVisualEffects[i].dataKey === "dockLights_yellow" || system.allVisualEffects[i].dataKey === "dockLights_red" || system.allVisualEffects[i].dataKey === "dockLights_blue")
			{ system.allVisualEffects[i].remove(); }
		}
	} |