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

Expansion Goods Containers

Content

Manifest

from Expansion Manager's OXP list from Expansion Manifest
Description Externally mounted cargo canisters, 10-50 TC range, installed on any available missile hardpoints. (tech level 6+). Externally mounted cargo canisters, 10-50 TC range, installed on any available missile hardpoints. (tech level 6+).
Identifier oolite.oxp.Reval.Goods_Containers oolite.oxp.Reval.Goods_Containers
Title Goods Containers Goods Containers
Category Equipment Equipment
Author Reval Reval
Version 2.1 2.1
Tags
Required Oolite Version
Maximum Oolite Version
Required Expansions
Optional Expansions
Conflict Expansions
Information URL https://wiki.alioth.net/index.php/Goods_Container_OXZ n/a
Download URL https://wiki.alioth.net/img_auth.php/d/db/Goods_Containers_2.1.oxz n/a
License CC-BY-NC-SA 4.0 CC-BY-NC-SA 4.0
File Size n/a
Upload date 1705899256

Documentation

Also read http://wiki.alioth.net/index.php/Goods%20Containers

ReadMe.txt

Goods Containers 10-50 TC
-------------------------

Externally mounted cargo cannisters, installed on any available missile hardpoints. (tech level 6+).

NB. Goods Containers are not to be 'fired' or jettisoned in flight!

As a precautionary step prior to purchasing any Goods Container, please "sell all pylon mounted weapons" in the shipyard first. You will see a message confirming your container installation if all goes well, and then you may verify your ship's increased capacity on the Market screen. 

A couple of examples, using FE Ships as a baseline:

Adder FE: 15 TC base + cargo bay extension = 30 TC + 1x Goods Container = 40 TC.

Cobra Mk 3 FE: 55 TC base + cargo bay extension = 70 TC + 4x Goods Containers = 110 TC.


Trade well!
Dor Reval of Xexedi, Space Grocer.

Version history
---------------
Version 2.1
- Fixed issue with goods containers not changing cargo capacity in some scenarios.

Equipment

Name Visible Cost [deci-credits] Tech-Level
Goods Container 10 TC yes 100000 7+
Goods Container 20 TC yes 200000 7+
Goods Container 30 TC yes 300000 7+
Goods Container 40 TC yes 400000 7+
Goods Container 50 TC yes 500000 7+

Ships

Name
Goods Container 10 TC
Goods Container 20 TC
Goods Container 30 TC
Goods Container 40 TC
Goods Container 50 TC

Models

This expansion declares no models.

Scripts

Path
Scripts/gc1_script.js
"use strict";
this.name = "Goods Container 10 TC";
this.author = "Reval";
this.licence = "CC BY-NC-SA 4.0";
this.version = "2.0";


this.playerBoughtEquipment = function(equipment, paid) {
	var pc = player.consoleMessage;
	// keep tally of pylon accessories bought
	//this.$gc1Count++;
    // and don't let them exceed ship's pylon-capacity
	if ((equipment == "EQ_GC1_MINE")) {// && (this.$gc1Count<=this.$gc1MCap)) {
		player.ship.cargoSpaceCapacity += 10;
		this.$gc1Containers++;
		pc("Modifying pylon hardpoints for container clamping...",9);
		pc("Fitting 10 TC Class Container #"+this.$gc1Containers+"...",9);
		pc("F4 'Your FE Shipyards' to check your Licence.",9);
	} else
	// unmount & sell cancels all container additions
	if (equipment == "EQ_MISSILE_REMOVAL") {
		player.ship.cargoSpaceCapacity -= this.$gc1Containers*10;
		pc("Removing all 10 TC Class Containers...",9)
		pc("Restoring pylon hardpoints for weapons-use...",9);
		if ((this.$gc1Containers>0) && (!this.$gc1HFExempt)) {
			// dismantling fee
			var dft = this.$gc1Containers*this.$gc1DismantlingFee;
			this.$gc1DismantlingFeeTotal += dft;
			player.credits -= dft;
			pc("Dismantling Fee: "+dft+" cr",9);
		}
		//this.$gc1Count = 0;
		this.$gc1Containers = 0;
		// reset system-to-system runs w/containers
		this.$gc1Runs = 0;
		// reset fee totals
		this.$gc1HandlingFeeTotal = 0;
		this.$gc1MaintenanceFeeTotal = 0;
	}
}


this.playerBoughtNewShip = function(ship, price) {
	// missile capacity (not exceed)
	this.$gc1MCap = player.ship.missileCapacity;
	//this.$gc1Count = 0;
	this.$gc1Containers = 0;
}


this.equipmentRemoved = function(equipmentKey) {
    if (equipmentKey == "EQ_GC1_MINE") {
		player.ship.cargoSpaceCapacity -= 10;
		this.$gc1Containers--;	
		player.consoleMessage("10 TC Goods Container removed.",5);
	}
}


this.shipReleasedEquipment = function(mine) {
	//this.$gc1Count--;
    if (mine == "EQ_GC1_MINE") {
		player.ship.cargoSpaceCapacity -= 10;
		this.$gc1Containers--;
		player.commsMessage("10 TC Goods Container jettisoned.",5);
		// deduct container cost from credits
		player.credits -= 10000.0;
		player.commsMessage("Mishandling charge applied at cost.",9);
	}
}


this.shipFiredMissile = function(missile, target) {
	//this.$gc1Count--;
    if (missile == "EQ_GC1_MINE") {
		player.ship.cargoSpaceCapacity -= 10;
		this.$gc1Containers--;	
		player.commsMessage("10 TC Goods Container jettisoned.",5);
		// deduct container cost from credits
		player.credits -= 10000.0;
		player.commsMessage("Mishandling charge applied at cost.",9);
	}
}


this.startUpComplete = function () {
	var pc = player.consoleMessage;
	// missile capacity (not exceed)
	this.$gc1MCap = player.ship.missileCapacity;
	//this.$gc1Count = player.ship.missiles.length;
	// Load cargo space, missile & container counts if present
	if (missionVariables.gc1Cargo != null) 
		player.ship.cargoSpaceCapacity = missionVariables.gc1Cargo;
	//if (missionVariables.gc1Count != null)
	//	this.$gc1Count = missionVariables.gc1Count;
	if (missionVariables.gc1Containers != null) 
		this.$gc1Containers = missionVariables.gc1Containers;
	// Load total fees taken
	if (missionVariables.gc1HandlingFeeTotal != null)
		this.$gc1HandlingFeeTotal = missionVariables.gc1HandlingFeeTotal;
	if (missionVariables.gc1HandlingPaid != null)
		this.$gc1HandlingPaid = missionVariables.gc1HandlingPaid;
	if (missionVariables.gc1MaintenanceFeeTotal != null)
		this.$gc1MaintenanceFeeTotal = missionVariables.gc1MaintenanceFeeTotal;
	if (missionVariables.gc1DismantlingFeeTotal != null)
		this.$gc1DismantlingFeeTotal = missionVariables.gc1DismantlingFeeTotal; 
    // Load system-to-system runs w/container
	if (missionVariables.gc1Runs != null)
		this.$gc1Runs = missionVariables.gc1Runs;
	// Load Handling fee count
	if (missionVariables.gc1HandlingCount != null)
		this.$gc1HandlingCount = missionVariables.gc1HandlingCount;
	// Load handling fee exemption status
	if (missionVariables.gc1HFExempt != null)
		this.$gc1HFExempt = missionVariables.gc1HFExempt;
	// Load Maintenance fee count
	if (missionVariables.gc1MaintenanceCount != null)
		this.$gc1MaintenanceCount = missionVariables.gc1MaintenanceCount;
	// CHECK
	log(this.name, this.name+" startup complete.");
	// TEST
	var sta = player.ship.dockedStation;
	if ((this.$gc1Containers<this.$gc1MCap) && (system.techLevel>=6))
		pc("Containers available in the Shipyard.");
	// prepare container Account screen
	this._gc1PrepAcc(sta);
	// optionally, prepare handling fee waiver request
	if (this.$gc1Containers>0) this._gc1PrepEx(sta);
}


this.startUp = function() {
    log(this.name, "Initialising OXP " + this.name);
	// check for G.E.T. presence
	this.$gc1ET = false;
	if (worldScripts["Elite Trader"]) 
		this.$gc1ET = true;
	// TEST	
	if (this.$gc1ET) log(this.name, "Finds Elite Trader present");
	// check for FE Ships Player
	this.$gc1FES = false;
	if (worldScripts["FE Ships Player"]) 
		this.$gc1FES = true;
	// TEST	
	if (this.$gc1ET) log(this.name, "Finds FE Ships Player present");
	// missile capacity (not exceed)
	this.$gc1MCap = 0;
	// pylon-use count
	//this.$gc1Count = 0;
	// container count
	this.$gc1Containers = 0;
	// purchase cost of container in cr
	this.$gc1Cost = 10000;
	// handling fee
	this.$gc1HandlingFee = 0.005*this.$gc1Cost; // 0.005 of cost
	this.$gc1HandlingFeeTotal = 0;
	this.$gc1HandlingPaid = "yes"; // or "no" - easier than boolean
	this.$gc1HandlingCount = 0;
	this.$gc1HFExempt = "no";
	// maintenance fee
	this.$gc1MaintenanceFee = 0.05*this.$gc1Cost; // 0.05 of cost
	this.$gc1MaintenanceFeeTotal = 0;
	this.$gc1MaintenancePaid = "no" // or "yes"
	this.$gc1MaintenanceInterval = 10; // in runs (according to cost)
	this.$gc1MaintenanceCount = 0;
	// dismantling fee
	this.$gc1DismantlingFee = 0.1*this.$gc1Cost; // 0.1 of cost
	this.$gc1DismantlingFeeTotal = 0.0;
	// system-to-system runs w/container
	this.$gc1Runs = 0;
}


this.playerWillSaveGame = function(message) {
	//missionVariables.gc1Count = this.$gc1Count;
	missionVariables.gc1Cargo = player.ship.cargoSpaceCapacity;
	missionVariables.gc1Containers = this.$gc1Containers;
	// save total fees taken
	missionVariables.gc1HandlingFeeTotal = this.$gc1HandlingFeeTotal;
	missionVariables.gc1MaintenanceFeeTotal = this.$gc1MaintenanceFeeTotal;
	missionVariables.gc1DismantlingFeeTotal = this.$gc1DismantlingFeeTotal;
	missionVariables.gc1HandlingPaid = this.$gc1HandlingPaid;
	// system-to-system runs w/container
	missionVariables.gc1Runs =this.$gc1Runs;
	// handling fee count
	missionVariables.gc1HandlingCount = this.$gc1HandlingCount;
	// handling fee exemption (G.E.T.)
	missionVariables.gc1HFExempt = this.$gc1HFExempt;
	// maintenance fee count
	missionVariables.gc1MaintenanceCount = this.$gc1MaintenanceCount;
}


this.shipDockedWithStation = function(station) {
	// take handling fee (if not exempt)
	var pc = player.consoleMessage;
	var ex = this.$gc1HFExempt;
	// check we have containers, the fee is not paid, and we're not exempt
	if ((this.$gc1Containers>0) && (this.$gc1HandlingPaid==="no") && (ex==="no")) {
		var fee = 0;
		for (var x=1; x<= this.$gc1Containers; x++)
			fee += this.$gc1HandlingFee;
		// record fee and debit trader's account
		this.$gc1HandlingFeeTotal += fee;
		player.credits -= fee;
		this.$gc1HandlingPaid = "yes";
		pc("10 TC Container handling fees: "+fee+" cr",9);
		this.$gc1HandlingCount++;
	}

	// conditionally take maintenance fee
	if (this.$gc1Containers>0) this._gc1DoMaintenance();

	// TEST
	if ((this.$gc1Containers<this.$gc1MCap) && (system.techLevel>=6))
		pc("Containers available in the Shipyard.");
	
	// prepare container Account and Licence page
	this._gc1PrepAcc(station);
	
	// prepare handling fee waiver request if ET or FESP is present
	if (this.$gc1Containers>0) this._gc1PrepEx(station);
}



this.shipExitedWitchspace = function() {
	// set handling paid to 'no'
	this.$gc1HandlingPaid = "no";
	this.$gc1Runs ++;
}


/* Common helper functions */


// assess and take maintenance fee
this._gc1DoMaintenance = function() {
	var pc = player.consoleMessage;
	var runs = this.$gc1Runs;
	var intv = this.$gc1MaintenanceInterval;
	var mfee = this.$gc1MaintenanceFee;
	// take maintenance fee after y runs
	if ( (runs > 0) && ((runs % intv)==0) ) {
		// maintenance for x containers
		var fee = 0;
		for (var x=1; x<= this.$gc1Containers; x++)
			fee += mfee;
		// maintenance fee tally & debit
		this.$gc1MaintenanceFeeTotal += fee;
		player.credits -= fee;
		pc("10 TC Container Maintenance fees: "+fee+" cr",9);
		// update Maintenance count
		this.$gc1MaintenanceCount++;
	}
}


/* F4 Interfaces */


// create F.E.S. 'Licence & Account' page 
this._gc1PrepAcc = function(station) {
	station.setInterface("gc1Acc",{
	title: "Your FE Shipyards 10 TC Container Class Licence",
	category: "Your FE Shipyards",
	summary: "Your FE Shipyards 10 TC Goods Container account screen shows terms, fees paid, load, and other useful information.",
	callback: this._gc1ShowAcc.bind(this)
	});	
}


// show F.E.S. 'Licence & Account' page
this._gc1ShowAcc = function() {
	var hfc = this.$gc1HandlingCount;
	var mfc = this.$gc1MaintenanceCount;
	var mfi = this.$gc1MaintenanceInterval;
	var hft = this.$gc1HandlingFeeTotal;
	var mft = this.$gc1MaintenanceFeeTotal;
	var dft = this.$gc1DismantlingFeeTotal;
		
	var parameters = new Object();
	
	parameters.title = "FE Shipyards";
	
	parameters.message = "Dear customer, \n\n";
	
	if (this.$gc1Containers>0) 
		parameters.message +="Your Account and Licence for 10 TC Class Goods Containers x "+this.$gc1Containers+": \n\n"; 
	 else
		parameters.message +="You have no 10 TC Class Containers licensed with us at this time. \n\n";
	
	parameters.message +="Handling fees paid: "+hft+" cr ("+hfc+") \n";
	parameters.message +="Maintenance fees paid: "+mft+" cr ("+mfc+") \n";
	parameters.message +="Dismantling fees paid: "+dft+" cr \n\n";
	
	parameters.message += "Our containers are re-used many times per cycle, often many times per day. Maintaining them in clean and serviceable condition for their maximum useful lifetime is our prime concern at FE Shipyards, and we trust that you, our valued customer, understand the need for your own participation in this costly and ongoing process. \n\n";
	
	parameters.message += "The handling charge (0.005 of cost) is levied upon docking, the maintenance fee (0.05 of cost) every "+mfi+" system-to-system trading runs. \n\n"
	
	parameters.message += "If you cancel your Container account with us at any time, we must charge the dismantling fee (0.1 of cost) to re-modify and restore your vessel's pylons for weapons-use. \n";
	
	parameters.choicesKey = "gc1Acknowlege";
	
	mission.runScreen(parameters, callback);	

	function callback(choice) {
		if (choice === "1_YES")  player.commsMessage("FE Shipyards thanks you for your custom.");
	}
}



// create F.E.S. handling fee waiver/restoration request  
this._gc1PrepEx = function(station) {
	station.setInterface("gc1Ex",{
	title: "Your FE Shipyards Handling Fee Waiver Request",
	category: "Your FE Shipyards",
	summary: "FE Shipyards grants Guilders and FE shipowners the privileged option to waive our handling and dismantling fees for the 10-ton container class." ,
	callback: this._gc1ShowEx.bind(this)
	});	
}


// show F.E.S. handling & dismantling fee waiver/restoration request
this._gc1ShowEx = function() {
	var priv = ((this.$gc1ET)||(this.$gc1FES));
	var privo = "";
	if (this.$gc1FES) privo="FE shipowner";
	if (this.$gc1ET) privo="Guilder";
	
	var parameters = new Object();
	
	parameters.title = "FE Shipyards";
	
	parameters.message = "Dear customer, \n\n";
	
	parameters.message += "Re: your request to waive your 10 TC container fees.\n\n"
	
	parameters.message += "The handling fee (0.005 of cost) is taken from your account upon docking, and is merely to cover our attachment/detachment & loading/unloading services. The dismantling fee (0.1 of cost) is charged when re-modifying your pylons for weapons-use after Licence cancellation. \n\n";
	
	if (priv)
		parameters.message += "FE Shipyards grants you, as a "+privo+", the privileged option to waive our handling and dismantling fees, although you are free - and encouraged - to continue supporting our efforts to provide the efficient service you as an Elite Trader deserve. \n\n";
	else
		parameters.message += "FE Shipyards regrets that we are unable at this time to grant you an exemption from fees, which is a privilege of Guilders and FE shipowners exclusively. \n\n";
	
	parameters.message += "Yours attentively,\n\n";
	
	parameters.message += "Siri Chodrum, for Dor Reval (Technical Director)\n";
	

	parameters.choicesKey = "gc1YesNoEx";
	
	mission.runScreen(parameters, callback);	

	function callback(choice) {
		if (choice === "1_AYE")  {
			if (priv) this.$gc1HFExempt = "yes"; else this.$gc1HFExempt = "no";
		} else this.$gc1HFExempt = "no";
		player.commsMessage("FE Shipyards thanks you for your attention.");
	}	
}



Scripts/gc2_script.js
"use strict";
this.name = "Goods Container 20 TC";
this.author = "Reval";
this.licence = "CC BY-NC-SA 4.0";
this.version = "2.0";


this.playerBoughtEquipment = function(equipment, paid) {
	var pc = player.consoleMessage;
	// keep tally of pylon accessories bought
	//this.$gc2Count++;
    // and don't let them exceed ship's pylon-capacity
	if ((equipment == "EQ_GC2_MINE")) {// && (this.$gc2Count<=this.$gc2MCap)) {
		player.ship.cargoSpaceCapacity += 20;
		this.$gc2Containers++;
		pc("Modifying pylon hardpoints for container clamping...",9);
		pc("Fitting 20 TC Class Container #"+this.$gc2Containers+"...",9);
		pc("F4 'Your FE Shipyards' to check your Licence.",9);
	} else
	// unmount & sell cancels all container additions
	if (equipment == "EQ_MISSILE_REMOVAL") {
		player.ship.cargoSpaceCapacity -= this.$gc2Containers*20;
		pc("Removing all 20 TC Class Containers...",9)
		pc("Restoring pylon hardpoints for weapons-use...",9);
		if ((this.$gc2Containers>0) && (!this.$gc2HFExempt)) {
			// dismantling fee
			var dft = this.$gc2Containers*this.$gc2DismantlingFee;
			this.$gc2DismantlingFeeTotal += dft;
			player.credits -= dft;
			pc("Dismantling Fee: "+dft+" cr",9);
		}
		//this.$gc2Count = 0;
		this.$gc2Containers = 0;
		// reset system-to-system runs w/containers
		this.$gc2Runs = 0;
		// reset fee totals
		this.$gc2HandlingFeeTotal = 0;
		this.$gc2MaintenanceFeeTotal = 0;
	}
}


this.playerBoughtNewShip = function(ship, price) {
	// missile capacity (not exceed)
	this.$gc2MCap = player.ship.missileCapacity;
	//this.$gc2Count = 0;
	this.$gc2Containers = 0;
}


this.equipmentRemoved = function(equipmentKey) {
    if (equipmentKey == "EQ_GC2_MINE") {
		player.ship.cargoSpaceCapacity -= 20;
		this.$gc2Containers--;	
		player.consoleMessage("20 TC Goods Container removed.",5);
	}
}


this.shipReleasedEquipment = function(mine) {
	//this.$gc2Count--;
    if (mine == "EQ_GC2_MINE") {
		player.ship.cargoSpaceCapacity -= 20;
		this.$gc2Containers--;
		player.commsMessage("20 TC Goods Container jettisoned.",5);
		// deduct container cost from credits
		player.credits -= 20000.0;
		player.commsMessage("Mishandling charge applied at cost.",9);
	}
}


this.shipFiredMissile = function(missile, target) {
	//this.$gc2Count--;
    if (missile == "EQ_GC2_MINE") {
		player.ship.cargoSpaceCapacity -= 20;
		this.$gc2Containers--;	
		player.commsMessage("20 TC Goods Container jettisoned.",5);
		// deduct container cost from credits
		player.credits -= 20000.0;
		player.commsMessage("Mishandling charge applied at cost.",9);
	}
}


this.startUpComplete = function () {
	var pc = player.consoleMessage;
	// missile capacity (not exceed)
	this.$gc2MCap = player.ship.missileCapacity;
	//this.$gc2Count = player.ship.missiles.length;
	// Load cargo space, missile & container counts if present
	if (missionVariables.gc2Cargo != null) 
		player.ship.cargoSpaceCapacity = missionVariables.gc2Cargo;
	//if (missionVariables.gc2Count != null)
		//this.$gc2Count = missionVariables.gc2Count;
	if (missionVariables.gc2Containers != null) 
		this.$gc2Containers = missionVariables.gc2Containers;
	// Load total fees taken
	if (missionVariables.gc2HandlingFeeTotal != null)
		this.$gc2HandlingFeeTotal = missionVariables.gc2HandlingFeeTotal;
	if (missionVariables.gc2HandlingPaid != null)
		this.$gc2HandlingPaid = missionVariables.gc2HandlingPaid;
	if (missionVariables.gc2MaintenanceFeeTotal != null)
		this.$gc2MaintenanceFeeTotal = missionVariables.gc2MaintenanceFeeTotal;
	if (missionVariables.gc2DismantlingFeeTotal != null)
		this.$gc2DismantlingFeeTotal = missionVariables.gc2DismantlingFeeTotal; 
    // Load system-to-system runs w/container
	if (missionVariables.gc2Runs != null)
		this.$gc2Runs = missionVariables.gc2Runs;
	// Load Handling fee count
	if (missionVariables.gc2HandlingCount != null)
		this.$gc2HandlingCount = missionVariables.gc2HandlingCount;
	// Load handling fee exemption status
	if (missionVariables.gc2HFExempt != null)
		this.$gc2HFExempt = missionVariables.gc2HFExempt;
	// Load Maintenance fee count
	if (missionVariables.gc2MaintenanceCount != null)
		this.$gc2MaintenanceCount = missionVariables.gc2MaintenanceCount;
	// CHECK
	log(this.name, this.name+" startup complete.");
	// TEST
	var sta = player.ship.dockedStation;
	if ((this.$gc2Containers<this.$gc2MCap) && (system.techLevel>=6))
		pc("Containers available in the Shipyard.");
	// prepare container Account screen
	this._gc2PrepAcc(sta);
	// optionally, prepare handling fee waiver request
	if (this.$gc2Containers>0) this._gc2PrepEx(sta);
}


this.startUp = function() {
    log(this.name, "Initialising OXP " + this.name);
	// check for G.E.T. presence
	this.$gc2ET = false;
	if (worldScripts["Elite Trader"]) 
		this.$gc2ET = true;
	// TEST	
	if (this.$gc2ET) log(this.name, "Finds Elite Trader present");
	// check for FE Ships Player
	this.$gc2FES = false;
	if (worldScripts["FE Ships Player"]) 
		this.$gc2FES = true;
	// TEST	
	if (this.$gc2ET) log(this.name, "Finds FE Ships Player present");
	// missile capacity (not exceed)
	this.$gc2MCap = 0;
	// pylon-use count
	//this.$gc2Count = 0;
	// container count
	this.$gc2Containers = 0;
	// purchase cost of container in cr
	this.$gc2Cost = 20000;
	// handling fee
	this.$gc2HandlingFee = 0.005*this.$gc2Cost; // 0.005 of cost
	this.$gc2HandlingFeeTotal = 0;
	this.$gc2HandlingPaid = "yes"; // or "no" - easier than boolean
	this.$gc2HandlingCount = 0;
	this.$gc2HFExempt = "no";
	// maintenance fee
	this.$gc2MaintenanceFee = 0.05*this.$gc2Cost; // 0.05 of cost
	this.$gc2MaintenanceFeeTotal = 0;
	this.$gc2MaintenancePaid = "no" // or "yes"
	this.$gc2MaintenanceInterval = 20; // in runs (according to cost)
	this.$gc2MaintenanceCount = 0;
	// dismantling fee
	this.$gc2DismantlingFee = 0.1*this.$gc2Cost; // 0.1 of cost
	this.$gc2DismantlingFeeTotal = 0.0;
	// system-to-system runs w/container
	this.$gc2Runs = 0;
}


this.playerWillSaveGame = function(message) {
	//missionVariables.gc2Count = this.$gc2Count;
	missionVariables.gc2Cargo = player.ship.cargoSpaceCapacity;
	missionVariables.gc2Containers = this.$gc2Containers;
	// save total fees taken
	missionVariables.gc2HandlingFeeTotal = this.$gc2HandlingFeeTotal;
	missionVariables.gc2MaintenanceFeeTotal = this.$gc2MaintenanceFeeTotal;
	missionVariables.gc2DismantlingFeeTotal = this.$gc2DismantlingFeeTotal;
	missionVariables.gc2HandlingPaid = this.$gc2HandlingPaid;
	// system-to-system runs w/container
	missionVariables.gc2Runs =this.$gc2Runs;
	// handling fee count
	missionVariables.gc2HandlingCount = this.$gc2HandlingCount;
	// handling fee exemption (G.E.T.)
	missionVariables.gc2HFExempt = this.$gc2HFExempt;
	// maintenance fee count
	missionVariables.gc2MaintenanceCount = this.$gc2MaintenanceCount;
}


this.shipDockedWithStation = function(station) {
	// take handling fee (if not exempt)
	var pc = player.consoleMessage;
	var ex = this.$gc2HFExempt;
	// check we have containers, the fee is not paid, and we're not exempt
	if ((this.$gc2Containers>0) && (this.$gc2HandlingPaid==="no") && (ex==="no")) {
		var fee = 0;
		for (var x=1; x<= this.$gc2Containers; x++)
			fee += this.$gc2HandlingFee;
		// record fee and debit trader's account
		this.$gc2HandlingFeeTotal += fee;
		player.credits -= fee;
		this.$gc2HandlingPaid = "yes";
		pc("20 TC Container handling fees: "+fee+" cr",9);
		this.$gc2HandlingCount++;
	}

	// conditionally take maintenance fee
	if (this.$gc2Containers>0) this._gc2DoMaintenance();

	// TEST
	if ((this.$gc2Containers<this.$gc2MCap) && (system.techLevel>=6))
		pc("Containers available in the Shipyard.");
	
	// prepare container Account and Licence page
	this._gc2PrepAcc(station);
	
	// prepare handling fee waiver request if ET or FESP is present
	if (this.$gc2Containers>0) this._gc2PrepEx(station);
}



this.shipExitedWitchspace = function() {
	// set handling paid to 'no'
	this.$gc2HandlingPaid = "no";
	this.$gc2Runs ++;
}


/* Common helper functions */


// assess and take maintenance fee
this._gc2DoMaintenance = function() {
	var pc = player.consoleMessage;
	var runs = this.$gc2Runs;
	var intv = this.$gc2MaintenanceInterval;
	var mfee = this.$gc2MaintenanceFee;
	// take maintenance fee after y runs
	if ( (runs > 0) && ((runs % intv)==0) ) {
		// maintenance for x containers
		var fee = 0;
		for (var x=1; x<= this.$gc2Containers; x++)
			fee += mfee;
		// maintenance fee tally & debit
		this.$gc2MaintenanceFeeTotal += fee;
		player.credits -= fee;
		pc("20 TC Container Maintenance fees: "+fee+" cr",9);
		// update Maintenance count
		this.$gc2MaintenanceCount++;
	}
}


/* F4 Interfaces */


// create F.E.S. 'Licence & Account' page 
this._gc2PrepAcc = function(station) {
	station.setInterface("gc2Acc",{
	title: "Your FE Shipyards 20 TC Container Class Licence",
	category: "Your FE Shipyards",
	summary: "Your FE Shipyards 20 TC Goods Container account screen shows terms, fees paid, load, and other useful information.",
	callback: this._gc2ShowAcc.bind(this)
	});	
}


// show F.E.S. 'Licence & Account' page
this._gc2ShowAcc = function() {
	var hfc = this.$gc2HandlingCount;
	var mfc = this.$gc2MaintenanceCount;
	var mfi = this.$gc2MaintenanceInterval;
	var hft = this.$gc2HandlingFeeTotal;
	var mft = this.$gc2MaintenanceFeeTotal;
	var dft = this.$gc2DismantlingFeeTotal;
		
	var parameters = new Object();
	
	parameters.title = "FE Shipyards";
	
	parameters.message = "Dear customer, \n\n";
	
	if (this.$gc2Containers>0) 
		parameters.message +="Your Account and Licence for 20 TC Class Goods Containers x "+this.$gc2Containers+": \n\n"; 
	 else
		parameters.message +="You have no 20 TC Class Containers licensed with us at this time. \n\n";
	
	parameters.message +="Handling fees paid: "+hft+" cr ("+hfc+") \n";
	parameters.message +="Maintenance fees paid: "+mft+" cr ("+mfc+") \n";
	parameters.message +="Dismantling fees paid: "+dft+" cr \n\n";
	
	parameters.message += "Our containers are re-used many times per cycle, often many times per day. Maintaining them in clean and serviceable condition for their maximum useful lifetime is our prime concern at FE Shipyards, and we trust that you, our valued customer, understand the need for your own participation in this costly and ongoing process. \n\n";
	
	parameters.message += "The handling charge (0.005 of cost) is levied upon docking, the maintenance fee (0.05 of cost) every "+mfi+" system-to-system trading runs. \n\n"
	
	parameters.message += "If you cancel your Container account with us at any time, we must charge the dismantling fee (0.1 of cost) to re-modify and restore your vessel's pylons for weapons-use. \n";
	
	parameters.choicesKey = "gc2Acknowlege";
	
	mission.runScreen(parameters, callback);	

	function callback(choice) {
		if (choice === "1_YES")  player.commsMessage("FE Shipyards thanks you for your custom.");
	}
}



// create F.E.S. handling fee waiver/restoration request  
this._gc2PrepEx = function(station) {
	station.setInterface("gc2Ex",{
	title: "Your FE Shipyards Handling Fee Waiver Request",
	category: "Your FE Shipyards",
	summary: "FE Shipyards grants Guilders and FE shipowners the privileged option to waive our handling and dismantling fees for the 20-ton container class." ,
	callback: this._gc2ShowEx.bind(this)
	});	
}


// show F.E.S. handling & dismantling fee waiver/restoration request
this._gc2ShowEx = function() {
	var priv = ((this.$gc2ET)||(this.$gc2FES));
	var privo = "";
	if (this.$gc2FES) privo="FE shipowner";
	if (this.$gc2ET) privo="Guilder";
	
	var parameters = new Object();
	
	parameters.title = "FE Shipyards";
	
	parameters.message = "Dear customer, \n\n";
	
	parameters.message += "Re: your request to waive your 20 TC container fees.\n\n"
	
	parameters.message += "The handling fee (0.005 of cost) is taken from your account upon docking, and is merely to cover our attachment/detachment & loading/unloading services. The dismantling fee (0.1 of cost) is charged when re-modifying your pylons for weapons-use after Licence cancellation. \n\n";
	
	if (priv)
		parameters.message += "FE Shipyards grants you, as a "+privo+", the privileged option to waive our handling and dismantling fees, although you are free - and encouraged - to continue supporting our efforts to provide the efficient service you as an Elite Trader deserve. \n\n";
	else
		parameters.message += "FE Shipyards regrets that we are unable at this time to grant you an exemption from fees, which is a privilege of Guilders and FE shipowners exclusively. \n\n";
	
	parameters.message += "Yours attentively,\n\n";
	
	parameters.message += "Siri Chodrum, for Dor Reval (Technical Director)\n";
	

	parameters.choicesKey = "gc2YesNoEx";
	
	mission.runScreen(parameters, callback);	

	function callback(choice) {
		if (choice === "1_AYE")  {
			if (priv) this.$gc2HFExempt = "yes"; else this.$gc2HFExempt = "no";
		} else this.$gc2HFExempt = "no";
		player.commsMessage("FE Shipyards thanks you for your attention.");
	}	
}



Scripts/gc3_script.js
"use strict";
this.name = "Goods Container 30 TC";
this.author = "Reval";
this.licence = "CC BY-NC-SA 4.0";
this.version = "2.0";


this.playerBoughtEquipment = function(equipment, paid) {
	var pc = player.consoleMessage;
	// keep tally of pylon accessories bought
	//this.$gc3Count++;
    // and don't let them exceed ship's pylon-capacity
	if ((equipment == "EQ_GC3_MINE")) {// && (this.$gc3Count<=this.$gc3MCap)) {
		player.ship.cargoSpaceCapacity += 30;
		this.$gc3Containers++;
		pc("Modifying pylon hardpoints for container clamping...",9);
		pc("Fitting 30 TC Class Container #"+this.$gc3Containers+"...",9);
		pc("F4 'Your FE Shipyards' to check your Licence.",9);
	} else
	// unmount & sell cancels all container additions
	if (equipment == "EQ_MISSILE_REMOVAL") {
		player.ship.cargoSpaceCapacity -= this.$gc3Containers*30;
		pc("Removing all 30 TC Class Containers...",9)
		pc("Restoring pylon hardpoints for weapons-use...",9);
		if ((this.$gc3Containers>0) && (!this.$gc3HFExempt)) {
			// dismantling fee
			var dft = this.$gc3Containers*this.$gc3DismantlingFee;
			this.$gc3DismantlingFeeTotal += dft;
			player.credits -= dft;
			pc("Dismantling Fee: "+dft+" cr",9);
		}
		//this.$gc3Count = 0;
		this.$gc3Containers = 0;
		// reset system-to-system runs w/containers
		this.$gc3Runs = 0;
		// reset fee totals
		this.$gc3HandlingFeeTotal = 0;
		this.$gc3MaintenanceFeeTotal = 0;
	}
}


this.playerBoughtNewShip = function(ship, price) {
	// missile capacity (not exceed)
	this.$gc3MCap = player.ship.missileCapacity;
	//this.$gc3Count = 0;
	this.$gc3Containers = 0;
}


this.equipmentRemoved = function(equipmentKey) {
    if (equipmentKey == "EQ_GC3_MINE") {
		player.ship.cargoSpaceCapacity -= 30;
		this.$gc3Containers--;	
		player.consoleMessage("30 TC Goods Container removed.",5);
	}
}


this.shipReleasedEquipment = function(mine) {
	//this.$gc3Count--;
    if (mine == "EQ_GC3_MINE") {
		player.ship.cargoSpaceCapacity -= 30;
		this.$gc3Containers--;
		player.commsMessage("30 TC Goods Container jettisoned.",5);
		// deduct container cost from credits
		player.credits -= 30000.0;
		player.commsMessage("Mishandling charge applied at cost.",9);
	}
}


this.shipFiredMissile = function(missile, target) {
	//this.$gc3Count--;
    if (missile == "EQ_GC3_MINE") {
		player.ship.cargoSpaceCapacity -= 30;
		this.$gc3Containers--;	
		player.commsMessage("30 TC Goods Container jettisoned.",5);
		// deduct container cost from credits
		player.credits -= 30000.0;
		player.commsMessage("Mishandling charge applied at cost.",9);
	}
}


this.startUpComplete = function () {
	var pc = player.consoleMessage;
	// missile capacity (not exceed)
	this.$gc3MCap = player.ship.missileCapacity;
	//this.$gc3Count = player.ship.missiles.length;
	// Load cargo space, missile & container counts if present
	if (missionVariables.gc3Cargo != null) 
		player.ship.cargoSpaceCapacity = missionVariables.gc3Cargo;
	//if (missionVariables.gc3Count != null)
		//this.$gc3Count = missionVariables.gc3Count;
	if (missionVariables.gc3Containers != null) 
		this.$gc3Containers = missionVariables.gc3Containers;
	// Load total fees taken
	if (missionVariables.gc3HandlingFeeTotal != null)
		this.$gc3HandlingFeeTotal = missionVariables.gc3HandlingFeeTotal;
	if (missionVariables.gc3HandlingPaid != null)
		this.$gc3HandlingPaid = missionVariables.gc3HandlingPaid;
	if (missionVariables.gc3MaintenanceFeeTotal != null)
		this.$gc3MaintenanceFeeTotal = missionVariables.gc3MaintenanceFeeTotal;
	if (missionVariables.gc3DismantlingFeeTotal != null)
		this.$gc3DismantlingFeeTotal = missionVariables.gc3DismantlingFeeTotal; 
    // Load system-to-system runs w/container
	if (missionVariables.gc3Runs != null)
		this.$gc3Runs = missionVariables.gc3Runs;
	// Load Handling fee count
	if (missionVariables.gc3HandlingCount != null)
		this.$gc3HandlingCount = missionVariables.gc3HandlingCount;
	// Load handling fee exemption status
	if (missionVariables.gc3HFExempt != null)
		this.$gc3HFExempt = missionVariables.gc3HFExempt;
	// Load Maintenance fee count
	if (missionVariables.gc3MaintenanceCount != null)
		this.$gc3MaintenanceCount = missionVariables.gc3MaintenanceCount;
	// CHECK
	log(this.name, this.name+" startup complete.");
	// TEST
	var sta = player.ship.dockedStation;
	if ((this.$gc3Containers<this.$gc3MCap) && (system.techLevel>=6))
		pc("Containers available in the Shipyard.");
	// prepare container Account screen
	this._gc3PrepAcc(sta);
	// optionally, prepare handling fee waiver request
	if (this.$gc3Containers>0) this._gc3PrepEx(sta);
}


this.startUp = function() {
    log(this.name, "Initialising OXP " + this.name);
	// check for G.E.T. presence
	this.$gc3ET = false;
	if (worldScripts["Elite Trader"]) 
		this.$gc3ET = true;
	// TEST	
	if (this.$gc3ET) log(this.name, "Finds Elite Trader present");
	// check for FE Ships Player
	this.$gc3FES = false;
	if (worldScripts["FE Ships Player"]) 
		this.$gc3FES = true;
	// TEST	
	if (this.$gc3ET) log(this.name, "Finds FE Ships Player present");
	// missile capacity (not exceed)
	this.$gc3MCap = 0;
	// pylon-use count
	//this.$gc3Count = 0;
	// container count
	this.$gc3Containers = 0;
	// purchase cost of container in cr
	this.$gc3Cost = 30000;
	// handling fee
	this.$gc3HandlingFee = 0.005*this.$gc3Cost; // 0.005 of cost
	this.$gc3HandlingFeeTotal = 0;
	this.$gc3HandlingPaid = "yes"; // or "no" - easier than boolean
	this.$gc3HandlingCount = 0;
	this.$gc3HFExempt = "no";
	// maintenance fee
	this.$gc3MaintenanceFee = 0.05*this.$gc3Cost; // 0.05 of cost
	this.$gc3MaintenanceFeeTotal = 0;
	this.$gc3MaintenancePaid = "no" // or "yes"
	this.$gc3MaintenanceInterval = 30; // in runs (according to cost)
	this.$gc3MaintenanceCount = 0;
	// dismantling fee
	this.$gc3DismantlingFee = 0.1*this.$gc3Cost; // 0.1 of cost
	this.$gc3DismantlingFeeTotal = 0.0;
	// system-to-system runs w/container
	this.$gc3Runs = 0;
}


this.playerWillSaveGame = function(message) {
	//missionVariables.gc3Count = this.$gc3Count;
	missionVariables.gc3Cargo = player.ship.cargoSpaceCapacity;
	missionVariables.gc3Containers = this.$gc3Containers;
	// save total fees taken
	missionVariables.gc3HandlingFeeTotal = this.$gc3HandlingFeeTotal;
	missionVariables.gc3MaintenanceFeeTotal = this.$gc3MaintenanceFeeTotal;
	missionVariables.gc3DismantlingFeeTotal = this.$gc3DismantlingFeeTotal;
	missionVariables.gc3HandlingPaid = this.$gc3HandlingPaid;
	// system-to-system runs w/container
	missionVariables.gc3Runs =this.$gc3Runs;
	// handling fee count
	missionVariables.gc3HandlingCount = this.$gc3HandlingCount;
	// handling fee exemption (G.E.T.)
	missionVariables.gc3HFExempt = this.$gc3HFExempt;
	// maintenance fee count
	missionVariables.gc3MaintenanceCount = this.$gc3MaintenanceCount;
}


this.shipDockedWithStation = function(station) {
	// take handling fee (if not exempt)
	var pc = player.consoleMessage;
	var ex = this.$gc3HFExempt;
	// check we have containers, the fee is not paid, and we're not exempt
	if ((this.$gc3Containers>0) && (this.$gc3HandlingPaid==="no") && (ex==="no")) {
		var fee = 0;
		for (var x=1; x<= this.$gc3Containers; x++)
			fee += this.$gc3HandlingFee;
		// record fee and debit trader's account
		this.$gc3HandlingFeeTotal += fee;
		player.credits -= fee;
		this.$gc3HandlingPaid = "yes";
		pc("30 TC Container handling fees: "+fee+" cr",9);
		this.$gc3HandlingCount++;
	}

	// conditionally take maintenance fee
	if (this.$gc3Containers>0) this._gc3DoMaintenance();

	// TEST
	if ((this.$gc3Containers<this.$gc3MCap) && (system.techLevel>=6))
		pc("Containers available in the Shipyard.");
	
	// prepare container Account and Licence page
	this._gc3PrepAcc(station);
	
	// prepare handling fee waiver request if ET or FESP is present
	if (this.$gc3Containers>0) this._gc3PrepEx(station);
}



this.shipExitedWitchspace = function() {
	// set handling paid to 'no'
	this.$gc3HandlingPaid = "no";
	this.$gc3Runs ++;
}


/* Common helper functions */


// assess and take maintenance fee
this._gc3DoMaintenance = function() {
	var pc = player.consoleMessage;
	var runs = this.$gc3Runs;
	var intv = this.$gc3MaintenanceInterval;
	var mfee = this.$gc3MaintenanceFee;
	// take maintenance fee after y runs
	if ( (runs > 0) && ((runs % intv)==0) ) {
		// maintenance for x containers
		var fee = 0;
		for (var x=1; x<= this.$gc3Containers; x++)
			fee += mfee;
		// maintenance fee tally & debit
		this.$gc3MaintenanceFeeTotal += fee;
		player.credits -= fee;
		pc("30 TC Container Maintenance fees: "+fee+" cr",9);
		// update Maintenance count
		this.$gc3MaintenanceCount++;
	}
}


/* F4 Interfaces */


// create F.E.S. 'Licence & Account' page 
this._gc3PrepAcc = function(station) {
	station.setInterface("gc3Acc",{
	title: "Your FE Shipyards 30 TC Container Class Licence",
	category: "Your FE Shipyards",
	summary: "Your FE Shipyards 30 TC Goods Container account screen shows terms, fees paid, load, and other useful information.",
	callback: this._gc3ShowAcc.bind(this)
	});	
}


// show F.E.S. 'Licence & Account' page
this._gc3ShowAcc = function() {
	var hfc = this.$gc3HandlingCount;
	var mfc = this.$gc3MaintenanceCount;
	var mfi = this.$gc3MaintenanceInterval;
	var hft = this.$gc3HandlingFeeTotal;
	var mft = this.$gc3MaintenanceFeeTotal;
	var dft = this.$gc3DismantlingFeeTotal;
		
	var parameters = new Object();
	
	parameters.title = "FE Shipyards";
	
	parameters.message = "Dear customer, \n\n";
	
	if (this.$gc3Containers>0) 
		parameters.message +="Your Account and Licence for 30 TC Class Goods Containers x "+this.$gc3Containers+": \n\n"; 
	 else
		parameters.message +="You have no 30 TC Class Containers licensed with us at this time. \n\n";
	
	parameters.message +="Handling fees paid: "+hft+" cr ("+hfc+") \n";
	parameters.message +="Maintenance fees paid: "+mft+" cr ("+mfc+") \n";
	parameters.message +="Dismantling fees paid: "+dft+" cr \n\n";
	
	parameters.message += "Our containers are re-used many times per cycle, often many times per day. Maintaining them in clean and serviceable condition for their maximum useful lifetime is our prime concern at FE Shipyards, and we trust that you, our valued customer, understand the need for your own participation in this costly and ongoing process. \n\n";
	
	parameters.message += "The handling charge (0.005 of cost) is levied upon docking, the maintenance fee (0.05 of cost) every "+mfi+" system-to-system trading runs. \n\n"
	
	parameters.message += "If you cancel your Container account with us at any time, we must charge the dismantling fee (0.1 of cost) to re-modify and restore your vessel's pylons for weapons-use. \n";
	
	parameters.choicesKey = "gc3Acknowlege";
	
	mission.runScreen(parameters, callback);	

	function callback(choice) {
		if (choice === "1_YES")  player.commsMessage("FE Shipyards thanks you for your custom.");
	}
}



// create F.E.S. handling fee waiver/restoration request  
this._gc3PrepEx = function(station) {
	station.setInterface("gc3Ex",{
	title: "Your FE Shipyards Handling Fee Waiver Request",
	category: "Your FE Shipyards",
	summary: "FE Shipyards grants Guilders and FE shipowners the privileged option to waive our handling and dismantling fees for the 30-ton container class." ,
	callback: this._gc3ShowEx.bind(this)
	});	
}


// show F.E.S. handling & dismantling fee waiver/restoration request
this._gc3ShowEx = function() {
	var priv = ((this.$gc3ET)||(this.$gc3FES));
	var privo = "";
	if (this.$gc3FES) privo="FE shipowner";
	if (this.$gc3ET) privo="Guilder";
	
	var parameters = new Object();
	
	parameters.title = "FE Shipyards";
	
	parameters.message = "Dear customer, \n\n";
	
	parameters.message += "Re: your request to waive your 30 TC container fees.\n\n"
	
	parameters.message += "The handling fee (0.005 of cost) is taken from your account upon docking, and is merely to cover our attachment/detachment & loading/unloading services. The dismantling fee (0.1 of cost) is charged when re-modifying your pylons for weapons-use after Licence cancellation. \n\n";
	
	if (priv)
		parameters.message += "FE Shipyards grants you, as a "+privo+", the privileged option to waive our handling and dismantling fees, although you are free - and encouraged - to continue supporting our efforts to provide the efficient service you as an Elite Trader deserve. \n\n";
	else
		parameters.message += "FE Shipyards regrets that we are unable at this time to grant you an exemption from fees, which is a privilege of Guilders and FE shipowners exclusively. \n\n";
	
	parameters.message += "Yours attentively,\n\n";
	
	parameters.message += "Siri Chodrum, for Dor Reval (Technical Director)\n";
	

	parameters.choicesKey = "gc3YesNoEx";
	
	mission.runScreen(parameters, callback);	

	function callback(choice) {
		if (choice === "1_AYE")  {
			if (priv) this.$gc3HFExempt = "yes"; else this.$gc3HFExempt = "no";
		} else this.$gc3HFExempt = "no";
		player.commsMessage("FE Shipyards thanks you for your attention.");
	}	
}



Scripts/gc4_script.js
"use strict";
this.name = "Goods Container 40 TC";
this.author = "Reval";
this.licence = "CC BY-NC-SA 4.0";
this.version = "2.0";


this.playerBoughtEquipment = function(equipment, paid) {
	var pc = player.consoleMessage;
	// keep tally of pylon accessories bought
	//this.$gc4Count++;
    // and don't let them exceed ship's pylon-capacity
	if ((equipment == "EQ_GC4_MINE")) {// && (this.$gc4Count<=this.$gc4MCap)) {
		player.ship.cargoSpaceCapacity += 40;
		this.$gc4Containers++;
		pc("Modifying pylon hardpoints for container clamping...",9);
		pc("Fitting 40 TC Class Container #"+this.$gc4Containers+"...",9);
		pc("F4 'Your FE Shipyards' to check your Licence.",9);
	} else
	// unmount & sell cancels all container additions
	if (equipment == "EQ_MISSILE_REMOVAL") {
		player.ship.cargoSpaceCapacity -= this.$gc4Containers*40;
		pc("Removing all 40 TC Class Containers...",9)
		pc("Restoring pylon hardpoints for weapons-use...",9);
		if ((this.$gc4Containers>0) && (!this.$gc4HFExempt)) {
			// dismantling fee
			var dft = this.$gc4Containers*this.$gc4DismantlingFee;
			this.$gc4DismantlingFeeTotal += dft;
			player.credits -= dft;
			pc("Dismantling Fee: "+dft+" cr",9);
		}
		//this.$gc4Count = 0;
		this.$gc4Containers = 0;
		// reset system-to-system runs w/containers
		this.$gc4Runs = 0;
		// reset fee totals
		this.$gc4HandlingFeeTotal = 0;
		this.$gc4MaintenanceFeeTotal = 0;
	}
}


this.playerBoughtNewShip = function(ship, price) {
	// missile capacity (not exceed)
	this.$gc4MCap = player.ship.missileCapacity;
	//this.$gc4Count = 0;
	this.$gc4Containers = 0;
}


this.equipmentRemoved = function(equipmentKey) {
    if (equipmentKey == "EQ_GC4_MINE") {
		player.ship.cargoSpaceCapacity -= 40;
		this.$gc4Containers--;	
		player.consoleMessage("40 TC Goods Container removed.",5);
	}
}


this.shipReleasedEquipment = function(mine) {
	//this.$gc4Count--;
    if (mine == "EQ_GC4_MINE") {
		player.ship.cargoSpaceCapacity -= 40;
		this.$gc4Containers--;
		player.commsMessage("40 TC Goods Container jettisoned.",5);
		// deduct container cost from credits
		player.credits -= 40000.0;
		player.commsMessage("Mishandling charge applied at cost.",9);
	}
}


this.shipFiredMissile = function(missile, target) {
	//this.$gc4Count--;
    if (missile == "EQ_GC4_MINE") {
		player.ship.cargoSpaceCapacity -= 40;
		this.$gc4Containers--;	
		player.commsMessage("40 TC Goods Container jettisoned.",5);
		// deduct container cost from credits
		player.credits -= 40000.0;
		player.commsMessage("Mishandling charge applied at cost.",9);
	}
}


this.startUpComplete = function () {
	var pc = player.consoleMessage;
	// missile capacity (not exceed)
	this.$gc4MCap = player.ship.missileCapacity;
	//this.$gc4Count = player.ship.missiles.length;
	// Load cargo space, missile & container counts if present
	if (missionVariables.gc4Cargo != null) 
		player.ship.cargoSpaceCapacity = missionVariables.gc4Cargo;
	//if (missionVariables.gc4Count != null)
		//this.$gc4Count = missionVariables.gc4Count;
	if (missionVariables.gc4Containers != null) 
		this.$gc4Containers = missionVariables.gc4Containers;
	// Load total fees taken
	if (missionVariables.gc4HandlingFeeTotal != null)
		this.$gc4HandlingFeeTotal = missionVariables.gc4HandlingFeeTotal;
	if (missionVariables.gc4HandlingPaid != null)
		this.$gc4HandlingPaid = missionVariables.gc4HandlingPaid;
	if (missionVariables.gc4MaintenanceFeeTotal != null)
		this.$gc4MaintenanceFeeTotal = missionVariables.gc4MaintenanceFeeTotal;
	if (missionVariables.gc4DismantlingFeeTotal != null)
		this.$gc4DismantlingFeeTotal = missionVariables.gc4DismantlingFeeTotal; 
    // Load system-to-system runs w/container
	if (missionVariables.gc4Runs != null)
		this.$gc4Runs = missionVariables.gc4Runs;
	// Load Handling fee count
	if (missionVariables.gc4HandlingCount != null)
		this.$gc4HandlingCount = missionVariables.gc4HandlingCount;
	// Load handling fee exemption status
	if (missionVariables.gc4HFExempt != null)
		this.$gc4HFExempt = missionVariables.gc4HFExempt;
	// Load Maintenance fee count
	if (missionVariables.gc4MaintenanceCount != null)
		this.$gc4MaintenanceCount = missionVariables.gc4MaintenanceCount;
	// CHECK
	log(this.name, this.name+" startup complete.");
	// TEST
	var sta = player.ship.dockedStation;
	if ((this.$gc4Containers<this.$gc4MCap) && (system.techLevel>=6))
		pc("Containers available in the Shipyard.");
	// prepare container Account screen
	this._gc4PrepAcc(sta);
	// optionally, prepare handling fee waiver request
	if (this.$gc4Containers>0) this._gc4PrepEx(sta);
}


this.startUp = function() {
    log(this.name, "Initialising OXP " + this.name);
	// check for G.E.T. presence
	this.$gc4ET = false;
	if (worldScripts["Elite Trader"]) 
		this.$gc4ET = true;
	// TEST	
	if (this.$gc4ET) log(this.name, "Finds Elite Trader present");
	// check for FE Ships Player
	this.$gc4FES = false;
	if (worldScripts["FE Ships Player"]) 
		this.$gc4FES = true;
	// TEST	
	if (this.$gc4ET) log(this.name, "Finds FE Ships Player present");
	// missile capacity (not exceed)
	this.$gc4MCap = 0;
	// pylon-use count
	//this.$gc4Count = 0;
	// container count
	this.$gc4Containers = 0;
	// purchase cost of container in cr
	this.$gc4Cost = 40000;
	// handling fee
	this.$gc4HandlingFee = 0.005*this.$gc4Cost; // 0.005 of cost
	this.$gc4HandlingFeeTotal = 0;
	this.$gc4HandlingPaid = "yes"; // or "no" - easier than boolean
	this.$gc4HandlingCount = 0;
	this.$gc4HFExempt = "no";
	// maintenance fee
	this.$gc4MaintenanceFee = 0.05*this.$gc4Cost; // 0.05 of cost
	this.$gc4MaintenanceFeeTotal = 0;
	this.$gc4MaintenancePaid = "no" // or "yes"
	this.$gc4MaintenanceInterval = 40; // in runs (according to cost)
	this.$gc4MaintenanceCount = 0;
	// dismantling fee
	this.$gc4DismantlingFee = 0.1*this.$gc4Cost; // 0.1 of cost
	this.$gc4DismantlingFeeTotal = 0.0;
	// system-to-system runs w/container
	this.$gc4Runs = 0;
}


this.playerWillSaveGame = function(message) {
	//missionVariables.gc4Count = this.$gc4Count;
	missionVariables.gc4Cargo = player.ship.cargoSpaceCapacity;
	missionVariables.gc4Containers = this.$gc4Containers;
	// save total fees taken
	missionVariables.gc4HandlingFeeTotal = this.$gc4HandlingFeeTotal;
	missionVariables.gc4MaintenanceFeeTotal = this.$gc4MaintenanceFeeTotal;
	missionVariables.gc4DismantlingFeeTotal = this.$gc4DismantlingFeeTotal;
	missionVariables.gc4HandlingPaid = this.$gc4HandlingPaid;
	// system-to-system runs w/container
	missionVariables.gc4Runs =this.$gc4Runs;
	// handling fee count
	missionVariables.gc4HandlingCount = this.$gc4HandlingCount;
	// handling fee exemption (G.E.T.)
	missionVariables.gc4HFExempt = this.$gc4HFExempt;
	// maintenance fee count
	missionVariables.gc4MaintenanceCount = this.$gc4MaintenanceCount;
}


this.shipDockedWithStation = function(station) {
	// take handling fee (if not exempt)
	var pc = player.consoleMessage;
	var ex = this.$gc4HFExempt;
	// check we have containers, the fee is not paid, and we're not exempt
	if ((this.$gc4Containers>0) && (this.$gc4HandlingPaid==="no") && (ex==="no")) {
		var fee = 0;
		for (var x=1; x<= this.$gc4Containers; x++)
			fee += this.$gc4HandlingFee;
		// record fee and debit trader's account
		this.$gc4HandlingFeeTotal += fee;
		player.credits -= fee;
		this.$gc4HandlingPaid = "yes";
		pc("40 TC Container handling fees: "+fee+" cr",9);
		this.$gc4HandlingCount++;
	}

	// conditionally take maintenance fee
	if (this.$gc4Containers>0) this._gc4DoMaintenance();

	// TEST
	if ((this.$gc4Containers<this.$gc4MCap) && (system.techLevel>=6))
		pc("Containers available in the Shipyard.");
	
	// prepare container Account and Licence page
	this._gc4PrepAcc(station);
	
	// prepare handling fee waiver request if ET or FESP is present
	if (this.$gc4Containers>0) this._gc4PrepEx(station);
}



this.shipExitedWitchspace = function() {
	// set handling paid to 'no'
	this.$gc4HandlingPaid = "no";
	this.$gc4Runs ++;
}


/* Common helper functions */


// assess and take maintenance fee
this._gc4DoMaintenance = function() {
	var pc = player.consoleMessage;
	var runs = this.$gc4Runs;
	var intv = this.$gc4MaintenanceInterval;
	var mfee = this.$gc4MaintenanceFee;
	// take maintenance fee after y runs
	if ( (runs > 0) && ((runs % intv)==0) ) {
		// maintenance for x containers
		var fee = 0;
		for (var x=1; x<= this.$gc4Containers; x++)
			fee += mfee;
		// maintenance fee tally & debit
		this.$gc4MaintenanceFeeTotal += fee;
		player.credits -= fee;
		pc("40 TC Container Maintenance fees: "+fee+" cr",9);
		// update Maintenance count
		this.$gc4MaintenanceCount++;
	}
}


/* F4 Interfaces */


// create F.E.S. 'Licence & Account' page 
this._gc4PrepAcc = function(station) {
	station.setInterface("gc4Acc",{
	title: "Your FE Shipyards 40 TC Container Class Licence",
	category: "Your FE Shipyards",
	summary: "Your FE Shipyards 40 TC Goods Container account screen shows terms, fees paid, load, and other useful information.",
	callback: this._gc4ShowAcc.bind(this)
	});	
}


// show F.E.S. 'Licence & Account' page
this._gc4ShowAcc = function() {
	var hfc = this.$gc4HandlingCount;
	var mfc = this.$gc4MaintenanceCount;
	var mfi = this.$gc4MaintenanceInterval;
	var hft = this.$gc4HandlingFeeTotal;
	var mft = this.$gc4MaintenanceFeeTotal;
	var dft = this.$gc4DismantlingFeeTotal;
		
	var parameters = new Object();
	
	parameters.title = "FE Shipyards";
	
	parameters.message = "Dear customer, \n\n";
	
	if (this.$gc4Containers>0) 
		parameters.message +="Your Account and Licence for 40 TC Class Goods Containers x "+this.$gc4Containers+": \n\n"; 
	 else
		parameters.message +="You have no 40 TC Class Containers licensed with us at this time. \n\n";
	
	parameters.message +="Handling fees paid: "+hft+" cr ("+hfc+") \n";
	parameters.message +="Maintenance fees paid: "+mft+" cr ("+mfc+") \n";
	parameters.message +="Dismantling fees paid: "+dft+" cr \n\n";
	
	parameters.message += "Our containers are re-used many times per cycle, often many times per day. Maintaining them in clean and serviceable condition for their maximum useful lifetime is our prime concern at FE Shipyards, and we trust that you, our valued customer, understand the need for your own participation in this costly and ongoing process. \n\n";
	
	parameters.message += "The handling charge (0.005 of cost) is levied upon docking, the maintenance fee (0.05 of cost) every "+mfi+" system-to-system trading runs. \n\n"
	
	parameters.message += "If you cancel your Container account with us at any time, we must charge the dismantling fee (0.1 of cost) to re-modify and restore your vessel's pylons for weapons-use. \n";
	
	parameters.choicesKey = "gc4Acknowlege";
	
	mission.runScreen(parameters, callback);	

	function callback(choice) {
		if (choice === "1_YES")  player.commsMessage("FE Shipyards thanks you for your custom.");
	}
}



// create F.E.S. handling fee waiver/restoration request  
this._gc4PrepEx = function(station) {
	station.setInterface("gc4Ex",{
	title: "Your FE Shipyards Handling Fee Waiver Request",
	category: "Your FE Shipyards",
	summary: "FE Shipyards grants Guilders and FE shipowners the privileged option to waive our handling and dismantling fees for the 40-ton container class." ,
	callback: this._gc4ShowEx.bind(this)
	});	
}


// show F.E.S. handling & dismantling fee waiver/restoration request
this._gc4ShowEx = function() {
	var priv = ((this.$gc4ET)||(this.$gc4FES));
	var privo = "";
	if (this.$gc4FES) privo="FE shipowner";
	if (this.$gc4ET) privo="Guilder";
	
	var parameters = new Object();
	
	parameters.title = "FE Shipyards";
	
	parameters.message = "Dear customer, \n\n";
	
	parameters.message += "Re: your request to waive your 40 TC container fees.\n\n"
	
	parameters.message += "The handling fee (0.005 of cost) is taken from your account upon docking, and is merely to cover our attachment/detachment & loading/unloading services. The dismantling fee (0.1 of cost) is charged when re-modifying your pylons for weapons-use after Licence cancellation. \n\n";
	
	if (priv)
		parameters.message += "FE Shipyards grants you, as a "+privo+", the privileged option to waive our handling and dismantling fees, although you are free - and encouraged - to continue supporting our efforts to provide the efficient service you as an Elite Trader deserve. \n\n";
	else
		parameters.message += "FE Shipyards regrets that we are unable at this time to grant you an exemption from fees, which is a privilege of Guilders and FE shipowners exclusively. \n\n";
	
	parameters.message += "Yours attentively,\n\n";
	
	parameters.message += "Siri Chodrum, for Dor Reval (Technical Director)\n";
	

	parameters.choicesKey = "gc4YesNoEx";
	
	mission.runScreen(parameters, callback);	

	function callback(choice) {
		if (choice === "1_AYE")  {
			if (priv) this.$gc4HFExempt = "yes"; else this.$gc4HFExempt = "no";
		} else this.$gc4HFExempt = "no";
		player.commsMessage("FE Shipyards thanks you for your attention.");
	}	
}



Scripts/gc5_script.js
"use strict";
this.name = "Goods Container 50 TC";
this.author = "Reval";
this.licence = "CC BY-NC-SA 4.0";
this.version = "2.0";


this.playerBoughtEquipment = function(equipment, paid) {
	var pc = player.consoleMessage;
	// keep tally of pylon accessories bought
	//this.$gc5Count++;
	// and don't let them exceed ship's pylon-capacity
	if ((equipment == "EQ_GC5_MINE")) { // && (this.$gc5Count<=this.$gc5MCap)) {
		player.ship.cargoSpaceCapacity += 50;
		this.$gc5Containers++;
		pc("Modifying pylon hardpoints for container clamping...",9);
		pc("Fitting 50 TC Class Container #"+this.$gc5Containers+"...",9);
		pc("F4 'Your FE Shipyards' to check your Licence.",9);
	} else
	// unmount & sell cancels all container additions
	if (equipment == "EQ_MISSILE_REMOVAL") {
		player.ship.cargoSpaceCapacity -= this.$gc5Containers*50;
		pc("Removing all 50 TC Class Containers...",9)
		pc("Restoring pylon hardpoints for weapons-use...",9);
		if ((this.$gc5Containers>0) && (!this.$gc5HFExempt)) {
			// dismantling fee
			var dft = this.$gc5Containers*this.$gc5DismantlingFee;
			this.$gc5DismantlingFeeTotal += dft;
			player.credits -= dft;
			pc("Dismantling Fee: "+dft+" cr",9);
		}
		//this.$gc5Count = 0;
		this.$gc5Containers = 0;
		// reset system-to-system runs w/containers
		this.$gc5Runs = 0;
		// reset fee totals
		this.$gc5HandlingFeeTotal = 0;
		this.$gc5MaintenanceFeeTotal = 0;
	}
}


this.playerBoughtNewShip = function(ship, price) {
	// missile capacity (not exceed)
	this.$gc5MCap = player.ship.missileCapacity;
	//this.$gc5Count = 0;
	this.$gc5Containers = 0;
}


this.equipmentRemoved = function(equipmentKey) {
    if (equipmentKey == "EQ_GC5_MINE") {
		player.ship.cargoSpaceCapacity -= 50;
		this.$gc5Containers--;	
		player.consoleMessage("50 TC Goods Container removed.",5);
	}
}


this.shipReleasedEquipment = function(mine) {
	//this.$gc5Count--;
    if (mine == "EQ_GC5_MINE") {
		player.ship.cargoSpaceCapacity -= 50;
		this.$gc5Containers--;
		player.commsMessage("50 TC Goods Container jettisoned.",5);
		// deduct container cost from credits
		player.credits -= 50000.0;
		player.commsMessage("Mishandling charge applied at cost.",9);
	}
}


this.shipFiredMissile = function(missile, target) {
	//this.$gc5Count--;
    if (missile == "EQ_GC5_MINE") {
		player.ship.cargoSpaceCapacity -= 50;
		this.$gc5Containers--;	
		player.commsMessage("50 TC Goods Container jettisoned.",5);
		// deduct container cost from credits
		player.credits -= 50000.0;
		player.commsMessage("Mishandling charge applied at cost.",9);
	}
}


this.startUpComplete = function () {
	var pc = player.consoleMessage;
	// missile capacity (not exceed)
	this.$gc5MCap = player.ship.missileCapacity;
	//this.$gc5Count = player.ship.missiles.length;
	// Load cargo space, missile & container counts if present
	if (missionVariables.gc5Cargo != null) 
		player.ship.cargoSpaceCapacity = missionVariables.gc5Cargo;
	//if (missionVariables.gc5Count != null)
		//this.$gc5Count = missionVariables.gc5Count;
	if (missionVariables.gc5Containers != null) 
		this.$gc5Containers = missionVariables.gc5Containers;
	// Load total fees taken
	if (missionVariables.gc5HandlingFeeTotal != null)
		this.$gc5HandlingFeeTotal = missionVariables.gc5HandlingFeeTotal;
	if (missionVariables.gc5HandlingPaid != null)
		this.$gc5HandlingPaid = missionVariables.gc5HandlingPaid;
	if (missionVariables.gc5MaintenanceFeeTotal != null)
		this.$gc5MaintenanceFeeTotal = missionVariables.gc5MaintenanceFeeTotal;
	if (missionVariables.gc5DismantlingFeeTotal != null)
		this.$gc5DismantlingFeeTotal = missionVariables.gc5DismantlingFeeTotal; 
    // Load system-to-system runs w/container
	if (missionVariables.gc5Runs != null)
		this.$gc5Runs = missionVariables.gc5Runs;
	// Load Handling fee count
	if (missionVariables.gc5HandlingCount != null)
		this.$gc5HandlingCount = missionVariables.gc5HandlingCount;
	// Load handling fee exemption status
	if (missionVariables.gc5HFExempt != null)
		this.$gc5HFExempt = missionVariables.gc5HFExempt;
	// Load Maintenance fee count
	if (missionVariables.gc5MaintenanceCount != null)
		this.$gc5MaintenanceCount = missionVariables.gc5MaintenanceCount;
	// CHECK
	log(this.name, this.name+" startup complete.");
	// TEST
	var sta = player.ship.dockedStation;
	if ((this.$gc5Containers<this.$gc5MCap) && (system.techLevel>=6))
		pc("Containers available in the Shipyard.");
	// prepare container Account screen
	this._gc5PrepAcc(sta);
	// optionally, prepare handling fee waiver request
	if (this.$gc5Containers>0) this._gc5PrepEx(sta);
}


this.startUp = function() {
    log(this.name, "Initialising OXP " + this.name);
	// check for G.E.T. presence
	this.$gc5ET = false;
	if (worldScripts["Elite Trader"]) 
		this.$gc5ET = true;
	// TEST	
	if (this.$gc5ET) log(this.name, "Finds Elite Trader present");
	// check for FE Ships Player
	this.$gc5FES = false;
	if (worldScripts["FE Ships Player"]) 
		this.$gc5FES = true;
	// TEST	
	if (this.$gc5ET) log(this.name, "Finds FE Ships Player present");
	// missile capacity (not exceed)
	this.$gc5MCap = 0;
	// pylon-use count
	//this.$gc5Count = 0;
	// container count
	this.$gc5Containers = 0;
	// purchase cost of container in cr
	this.$gc5Cost = 50000;
	// handling fee
	this.$gc5HandlingFee = 0.005*this.$gc5Cost; // 0.005 of cost
	this.$gc5HandlingFeeTotal = 0;
	this.$gc5HandlingPaid = "yes"; // or "no" - easier than boolean
	this.$gc5HandlingCount = 0;
	this.$gc5HFExempt = "no";
	// maintenance fee
	this.$gc5MaintenanceFee = 0.05*this.$gc5Cost; // 0.05 of cost
	this.$gc5MaintenanceFeeTotal = 0;
	this.$gc5MaintenancePaid = "no" // or "yes"
	this.$gc5MaintenanceInterval = 50; // in runs (according to cost)
	this.$gc5MaintenanceCount = 0;
	// dismantling fee
	this.$gc5DismantlingFee = 0.1*this.$gc5Cost; // 0.1 of cost
	this.$gc5DismantlingFeeTotal = 0.0;
	// system-to-system runs w/container
	this.$gc5Runs = 0;
}


this.playerWillSaveGame = function(message) {
	//missionVariables.gc5Count = this.$gc5Count;
	missionVariables.gc5Cargo = player.ship.cargoSpaceCapacity;
	missionVariables.gc5Containers = this.$gc5Containers;
	// save total fees taken
	missionVariables.gc5HandlingFeeTotal = this.$gc5HandlingFeeTotal;
	missionVariables.gc5MaintenanceFeeTotal = this.$gc5MaintenanceFeeTotal;
	missionVariables.gc5DismantlingFeeTotal = this.$gc5DismantlingFeeTotal;
	missionVariables.gc5HandlingPaid = this.$gc5HandlingPaid;
	// system-to-system runs w/container
	missionVariables.gc5Runs =this.$gc5Runs;
	// handling fee count
	missionVariables.gc5HandlingCount = this.$gc5HandlingCount;
	// handling fee exemption (G.E.T.)
	missionVariables.gc5HFExempt = this.$gc5HFExempt;
	// maintenance fee count
	missionVariables.gc5MaintenanceCount = this.$gc5MaintenanceCount;
}


this.shipDockedWithStation = function(station) {
	// take handling fee (if not exempt)
	var pc = player.consoleMessage;
	var ex = this.$gc5HFExempt;
	// check we have containers, the fee is not paid, and we're not exempt
	if ((this.$gc5Containers>0) && (this.$gc5HandlingPaid==="no") && (ex==="no")) {
		var fee = 0;
		for (var x=1; x<= this.$gc5Containers; x++)
			fee += this.$gc5HandlingFee;
		// record fee and debit trader's account
		this.$gc5HandlingFeeTotal += fee;
		player.credits -= fee;
		this.$gc5HandlingPaid = "yes";
		pc("50 TC Container handling fees: "+fee+" cr",9);
		this.$gc5HandlingCount++;
	}

	// conditionally take maintenance fee
	if (this.$gc5Containers>0) this._gc5DoMaintenance();

	// TEST
	if ((this.$gc5Containers<this.$gc5MCap) && (system.techLevel>=6))
		pc("Containers available in the Shipyard.");
	
	// prepare container Account and Licence page
	this._gc5PrepAcc(station);
	
	// prepare handling fee waiver request if ET or FESP is present
	if (this.$gc5Containers>0) this._gc5PrepEx(station);
}



this.shipExitedWitchspace = function() {
	// set handling paid to 'no'
	this.$gc5HandlingPaid = "no";
	this.$gc5Runs ++;
}


/* Common helper functions */


// assess and take maintenance fee
this._gc5DoMaintenance = function() {
	var pc = player.consoleMessage;
	var runs = this.$gc5Runs;
	var intv = this.$gc5MaintenanceInterval;
	var mfee = this.$gc5MaintenanceFee;
	// take maintenance fee after y runs
	if ( (runs > 0) && ((runs % intv)==0) ) {
		// maintenance for x containers
		var fee = 0;
		for (var x=1; x<= this.$gc5Containers; x++)
			fee += mfee;
		// maintenance fee tally & debit
		this.$gc5MaintenanceFeeTotal += fee;
		player.credits -= fee;
		pc("50 TC Container Maintenance fees: "+fee+" cr",9);
		// update Maintenance count
		this.$gc5MaintenanceCount++;
	}
}


/* F4 Interfaces */


// create F.E.S. 'Licence & Account' page 
this._gc5PrepAcc = function(station) {
	station.setInterface("gc5Acc",{
	title: "Your FE Shipyards 50 TC Container Class Licence",
	category: "Your FE Shipyards",
	summary: "Your FE Shipyards 50 TC Goods Container account screen shows terms, fees paid, load, and other useful information.",
	callback: this._gc5ShowAcc.bind(this)
	});	
}


// show F.E.S. 'Licence & Account' page
this._gc5ShowAcc = function() {
	var hfc = this.$gc5HandlingCount;
	var mfc = this.$gc5MaintenanceCount;
	var mfi = this.$gc5MaintenanceInterval;
	var hft = this.$gc5HandlingFeeTotal;
	var mft = this.$gc5MaintenanceFeeTotal;
	var dft = this.$gc5DismantlingFeeTotal;
		
	var parameters = new Object();
	
	parameters.title = "FE Shipyards";
	
	parameters.message = "Dear customer, \n\n";
	
	if (this.$gc5Containers>0) 
		parameters.message +="Your Account and Licence for 50 TC Class Goods Containers x "+this.$gc5Containers+": \n\n"; 
	 else
		parameters.message +="You have no 50 TC Class Containers licensed with us at this time. \n\n";
	
	parameters.message +="Handling fees paid: "+hft+" cr ("+hfc+") \n";
	parameters.message +="Maintenance fees paid: "+mft+" cr ("+mfc+") \n";
	parameters.message +="Dismantling fees paid: "+dft+" cr \n\n";
	
	parameters.message += "Our containers are re-used many times per cycle, often many times per day. Maintaining them in clean and serviceable condition for their maximum useful lifetime is our prime concern at FE Shipyards, and we trust that you, our valued customer, understand the need for your own participation in this costly and ongoing process. \n\n";
	
	parameters.message += "The handling charge (0.005 of cost) is levied upon docking, the maintenance fee (0.05 of cost) every "+mfi+" system-to-system trading runs. \n\n"
	
	parameters.message += "If you cancel your Container account with us at any time, we must charge the dismantling fee (0.1 of cost) to re-modify and restore your vessel's pylons for weapons-use. \n";
	
	parameters.choicesKey = "gc5Acknowlege";
	
	mission.runScreen(parameters, callback);	

	function callback(choice) {
		if (choice === "1_YES")  player.commsMessage("FE Shipyards thanks you for your custom.");
	}
}



// create F.E.S. handling fee waiver/restoration request  
this._gc5PrepEx = function(station) {
	station.setInterface("gc5Ex",{
	title: "Your FE Shipyards Handling Fee Waiver Request",
	category: "Your FE Shipyards",
	summary: "FE Shipyards grants Guilders and FE shipowners the privileged option to waive our handling and dismantling fees for the 50-ton container class." ,
	callback: this._gc5ShowEx.bind(this)
	});	
}


// show F.E.S. handling & dismantling fee waiver/restoration request
this._gc5ShowEx = function() {
	var priv = ((this.$gc5ET)||(this.$gc5FES));
	var privo = "";
	if (this.$gc5FES) privo="FE shipowner";
	if (this.$gc5ET) privo="Guilder";
	
	var parameters = new Object();
	
	parameters.title = "FE Shipyards";
	
	parameters.message = "Dear customer, \n\n";
	
	parameters.message += "Re: your request to waive your 50 TC container fees.\n\n"
	
	parameters.message += "The handling fee (0.005 of cost) is taken from your account upon docking, and is merely to cover our attachment/detachment & loading/unloading services. The dismantling fee (0.1 of cost) is charged when re-modifying your pylons for weapons-use after Licence cancellation. \n\n";
	
	if (priv)
		parameters.message += "FE Shipyards grants you, as a "+privo+", the privileged option to waive our handling and dismantling fees, although you are free - and encouraged - to continue supporting our efforts to provide the efficient service you as an Elite Trader deserve. \n\n";
	else
		parameters.message += "FE Shipyards regrets that we are unable at this time to grant you an exemption from fees, which is a privilege of Guilders and FE shipowners exclusively. \n\n";
	
	parameters.message += "Yours attentively,\n\n";
	
	parameters.message += "Siri Chodrum, for Dor Reval (Technical Director)\n";
	

	parameters.choicesKey = "gc5YesNoEx";
	
	mission.runScreen(parameters, callback);	

	function callback(choice) {
		if (choice === "1_AYE")  {
			if (priv) this.$gc5HFExempt = "yes"; else this.$gc5HFExempt = "no";
		} else this.$gc5HFExempt = "no";
		player.commsMessage("FE Shipyards thanks you for your attention.");
	}	
}



Scripts/gc_conditions.js
"use strict";

this.allowAwardEquipment = function(equipment, ship, context) {
	return true
}