| Scripts/autodock_core.js | "use strict";
this.name = "Autodock_Core";
this.author = "phkb";
this.copyright = "2015 phkb";
this.description = "Main routine for handling autodock option";
this.licence = "CC BY-NC-SA 4.0";
this._payment = 10;				// the cost of an autodock. (should be an even number so the refund price doesn't have decimals)
this._minTechLevel = 0;			// the minimum techlevel required for an autodock (this matches main logic of being 1 less that the actual TL. ie entering 6 here means TL7)
this._mainStationOnly = true;	// flag that indicates whether autodock is provided at the main station only (true), or all stations (false)
this._abort = false;			// used if the player has the autodock, but credit went below payment amount during flight, then tries to autodock
// docking will be cancelled, and this flag prevents the player from being refunded as no payment would have been made.
// configuration settings for use in Lib_Config
this._adConfig = {
	Name: this.name,
	Display: expandDescription("[autodock_config_display]"),
	Alias: expandDescription("[autodock_config_alias]"),
	Alive: "_adConfig",
	Bool: {
		B0: { Name: "_mainStationOnly", Def: true, Desc: expandDescription("[autodock_main_stations]") },
		Info: expandDescription("[autodock_config_bool_info]")
	},
	SInt: {
		S0: { Name: "_payment", Def: 10, Min: 1, Max: 100, Desc: expandDescription("[autodock_payment]") },
		S1: { Name: "_minTechLevel", Def: 0, Min: 0, Max: 14, Desc: expandDescription("[autodock_min_techlevel]") },
		Info: expandDescription("[autodock_config_sint_info]")
	}
};
this._trueValues = ["yes", "1", 1, "true", true];
//-------------------------------------------------------------------------------------------------------------
this.startUpComplete = function () {
	// register our settings, if Lib_Config is present
	if (worldScripts.Lib_Config) worldScripts.Lib_Config._registerSet(this._adConfig);
	if (missionVariables.Autodock_Payment) this._payment = parseInt(missionVariables.Autodock_Payment);
	if (missionVariables.Autodock_TechLevel) this._minTechLevel = parseInt(missionVariables.Autodock_TechLevel);
	if (missionVariables.Autodock_MainStation) this._mainStationOnly = (this._trueValues.indexOf(missionVariables.Autodock_MainStation) >= 0 ? true : false);
}
//-------------------------------------------------------------------------------------------------------------
this.playerWillSaveGame = function () {
	missionVariables.Autodock_Payment = this._payment;
	missionVariables.Autodock_TechLevel = this._minTechLevel;
	missionVariables.Autodock_MainStation = this._mainStationOnly;
}
//-------------------------------------------------------------------------------------------------------------
this.shipWillDockWithStation = function (station) {
	// make sure the equipment is removed on docking
	var p = player.ship;
	// check for an fast-dock
	var diff = (global.clock.adjustedSeconds - global.clock.seconds);
	if (diff > 1000 && diff <= 1200) {
		if (p.equipmentStatus("EQ_NDC_AUTODOCK") == "EQUIPMENT_OK") {
			this.$notifyAndDeduct();
		}
	}
	p.removeEquipment("EQ_NDC_AUTODOCK");
}
//-------------------------------------------------------------------------------------------------------------
this.shipWillLaunchFromStation = function (station) {
	// auto install after launching (to cope with scenario where player docks at another station, or the same one even)
	if ((station.isMainStation && this._mainStationOnly == true) || this._mainStationOnly == false) {
		this.$installAutoDock();
	}
}
//-------------------------------------------------------------------------------------------------------------
this.shipEnteredStationAegis = function (station) {
	var p = player.ship;
	if (this._mainStationOnly == true) this.$installAutoDock();
	// if we have less that payment amount when we hit the aegis, remove the autodock item so the player can't fast-dock
	if (player.credits < this._payment && p.equipmentStatus("EQ_NDC_AUTODOCK") == "EQUIPMENT_OK") {
		p.removeEquipment("EQ_NDC_AUTODOCK");
	}
}
//-------------------------------------------------------------------------------------------------------------
this.shipExitedStationAegis = function (station) {
	if (this._mainStationOnly == true) {
		var p = player.ship;
		p.removeEquipment("EQ_NDC_AUTODOCK");
	}
}
//-------------------------------------------------------------------------------------------------------------
this.shipExitedWitchspace = function () {
	var p = player.ship;
	// remove the equipment, then attempt to reinstall it
	// this allows for the new system not having a high enough tech level
	p.removeEquipment("EQ_NDC_AUTODOCK");
	// only instal the autodock at this point if the mainstationonly flag is set to false (meaning all stations)
	if (this._mainStationOnly == false) this.$installAutoDock();
}
//-------------------------------------------------------------------------------------------------------------
this.playerStartedAutoPilot = function () {
	var p = player.ship;
	if (p.equipmentStatus("EQ_NDC_AUTODOCK") === "EQUIPMENT_OK") {
		if (player.credits >= this._payment) {
			this.$notifyAndDeduct();
		} else {
			// in the off chance the player has dropped below payment amount between installing the autodock and arriving in a new system
			// (eg bribing ships via the Broadcast comms MFD)
			this._abort = true;
			p.disengageAutopilot();
			player.consoleMessage(expandDescription("[autodock_no_credits]"));
			p.removeEquipment("EQ_NDC_AUTODOCK");
		}
	}
}
//-------------------------------------------------------------------------------------------------------------
this.playerCancelledAutoPilot = function () {
	var p = player.ship;
	if (p.equipmentStatus("EQ_NDC_AUTODOCK") == "EQUIPMENT_OK" && this._abort == false) {
		// notify player
		player.consoleMessage(expandDescription("[autodock_refund]", { amount: formatCredits(this._payment / 2, false, true) }), 5);
		// refund player
		player.credits += (this._payment / 2);
		// make sure the player still has enough cash for an autodock, and remove it if they don't
		if (player.credits < this._payment) p.removeEquipment("EQ_NDC_AUTODOCK");
	}
	this._abort = false;
}
//-------------------------------------------------------------------------------------------------------------
this.equipmentDamaged = function (equipment) {
	// if the dock computer gets damaged, add the autodock equipment
	if (equipment == "EQ_DOCK_COMP") {
		// if we're only doing this at main stations, check if we're within the aegis when the docking computer was damaged
		if (this._mainStationOnly == true && player.ship.withinStationAegis == false) {
			// if not, return at this point, as the autodocker will be installed when we hit the aegis
			return;
		}
		this.$installAutoDock();
	}
}
//-------------------------------------------------------------------------------------------------------------
this.equipmentRepaired = function (equipment) {
	// check for equipment being repaired in flight
	if (equipment == "EQ_DOCK_COMP") {
		var p = player.ship;
		// if the dock computer gets repaired in flight, remove the autodock
		if (p.status == "STATUS_IN_FLIGHT") p.removeEquipment("EQ_NDC_AUTODOCK");
	}
}
//-------------------------------------------------------------------------------------------------------------
this.$installAutoDock = function () {
	var p = player.ship;
	// give the player the autodock equipment if the tech level is greater than/equal to min tech level and the player doesn't have a working dock comp and has more than required credit
	if (system.info.techlevel >= this._minTechLevel && player.credits >= this._payment) {
		if (p.equipmentStatus("EQ_DOCK_COMP") != "EQUIPMENT_OK") {
			p.awardEquipment("EQ_NDC_AUTODOCK");
		}
	}
}
//-------------------------------------------------------------------------------------------------------------
this.$notifyAndDeduct = function () {
	player.consoleMessage(expandDescription("[autodock_complete]", { amount: formatCredits(this._payment, false, true) }), 5);
	player.credits -= this._payment;
}
 |