| Config/script.js |
"use strict";
this.name = "FlightLog";
this.author = "Thargoid";
this.copyright = "Creative Commons: attribution, non-commercial, sharealike with clauses - see readme.txt";
this.description = "Saves a list of systems visited, plus the kills and profit for each";
this.version = "1.12";
this.startUpComplete = function () {
this.maxLogLength = 100; // the max size of the log - minimum size should be 10 (the latest 10 are displayed in-game).
this.blankArray = "";
let setupCounter = 0; // reset the counter
for (setupCounter = 0; setupCounter < this.maxLogLength; setupCounter++) { this.blankArray = this.blankArray + "0:"; }
this.blankArray = this.blankArray.substr(0, (this.blankArray.length - 1)); // snip off the last :
if (!missionVariables.flightLogMemory) { // if this is the first run of the OXP
missionVariables.flightLogMemory = this.blankArray;
missionVariables.flightKillsMemory = this.blankArray;
missionVariables.flightCreditsMemory = this.blankArray;
missionVariables.flightKillsStore = player.score;
missionVariables.flightCreditsStore = player.credits;
}
this.flightArray = missionVariables.flightLogMemory.split(":");
this.killsArray = missionVariables.flightKillsMemory.split(":");
this.creditsArray = missionVariables.flightCreditsMemory.split(":");
this.baseKills = missionVariables.flightKillsStore;
this.baseCredits = missionVariables.flightCreditsStore;
if (this.flightArray.length !== this.maxLogLength) // just in case this.maxLogLength has been changed since last run.
{
let setupCounter = 0; // reset the counter
for (setupCounter = this.flightArray.length; setupCounter < this.maxLogLength; setupCounter++) { // this loop will run if the array is smaller than the max log size
this.flightArray[setupCounter] = "0";
this.killsArray[setupCounter] = "0";
this.creditsArray[setupCounter] = "0";
}
this.$trimArrays(); // this will trim things down if the array is larger than the max log size
}
setupCounter = 0; // reset the counter
for (setupCounter = 0; setupCounter < this.flightArray.length; setupCounter++) {
this.flightArray[setupCounter] *= 1; // to swap values from string to number
this.killsArray[setupCounter] *= 1;
this.creditsArray[setupCounter] *= 1;
}
this.$dockedCheck();
}
this.shipDockedWithStation = function () {
this.$dockedCheck();
this.playerWillSaveGame();
}
this.playerWillSaveGame = function () {
missionVariables.flightKillsStore = this.baseKills;
missionVariables.flightCreditsStore = this.baseCredits;
}
this.$dockedCheck = function () {
if (player.ship.docked) {
player.ship.dockedStation.setInterface("FlightLog",
{
title: "Flight log",
category: "Logs",
summary: "Displays the ships flight log.",
callback: this.$showLog.bind(this)
});
}
}
this.guiScreenChanged = function (to, from) {
if (from == "GUI_SCREEN_MARKET" || from == "GUI_SCREEN_EQUIP_SHIP" || from == "GUI_SCREEN_SHIPYARD" || from == "GUI_SCREEN_STATUS") { // refresh the mission variables if we come from market/equipment/shipyard or status screens
this.playerWillSaveGame();
}
// showing mission screen during flight is no longer recommended
//if(player.ship.docked || to != "GUI_SCREEN_SHORT_RANGE_CHART" || from != "GUI_SCREEN_MANIFEST")
// { // access main screen only from manifest to short range chart when in flight (via F4 when docked)
// return;
// }
//this.$showLog();
}
this.guiScreenWillChange = function (to, from) {
if (to === "GUI_SCREEN_MANIFEST") {
if (!player.ship.docked) {
if (system.ID == -1) {
mission.setInstructions("You are currently in interstellar space (" + (player.score - this.baseKills) + " kills, " + (Math.floor(10 * (player.credits - this.baseCredits)) / 10) + "cr).", this.name);
} else {
mission.setInstructions("You are currently in the " + system.name + " system in galaxy " + (galaxyNumber + 1) + " (" + (player.score - this.baseKills) + " kills, " + (Math.floor(10 * (player.credits - this.baseCredits)) / 10) + "cr).", this.name);
}
} else {
mission.setInstructions(null, this.name);
}
}
}
this.$showLog = function () {
if (this.flightArray[this.flightArray.length - 1] == 0) {// if the last entry is 0, then assume the array is blank (all zero)
mission.runScreen({ screenID: "oolite-flightlog-main-map", title: "Flight Log", overlay: { name: "fl-note_book.png", height: 546 }, exitScreen: "GUI_SCREEN_INTERFACES", messageKey: "flightLog_empty" });
if (system.ID == -1) {
mission.addMessageText("\nYou are currently in interstellar space.");
} else {
mission.addMessageText("\nYou are currently in the " + system.name + " system in galaxy " + (galaxyNumber + 1) + ".");
}
return;
}
mission.runScreen({ screenID: "oolite-flightlog-main-map", title: "Flight Log", messageKey: "flightLog_header", overlay: { name: "fl-note_book.png", height: 546 }, exitScreen: "GUI_SCREEN_INTERFACES", choicesKey: "flightLog_choices" }, this.$choice);
this.endPoint = this.flightArray.length;
this.startPoint = this.endPoint - 10;
let listCounter = 0; // reset the counter
for (listCounter = this.startPoint; listCounter < this.endPoint; listCounter++) {
if (this.flightArray[listCounter] >= 0) {
mission.addMessageText((this.flightArray.length - listCounter) + " - " + System.systemNameForID(this.flightArray[listCounter]) + ", (" + this.killsArray[listCounter] + " kills, " + this.creditsArray[listCounter] + " cr).");
}
if (this.flightArray[listCounter] == -1) {
mission.addMessageText((this.flightArray.length - listCounter) + " - Interstellar Space, (" + this.killsArray[listCounter] + " kills, " + this.creditsArray[listCounter] + " cr).");
}
}
if (system.ID == -1) {
mission.addMessageText("\nYou are currently in interstellar space (" + (player.score - this.baseKills) + " kills, " + (Math.floor(10 * (player.credits - this.baseCredits)) / 10) + "cr).");
} else {
mission.addMessageText("\nYou are currently in the " + system.name + " system in galaxy " + (galaxyNumber + 1) + " (" + (player.score - this.baseKills) + " kills, " + (Math.floor(10 * (player.credits - this.baseCredits)) / 10) + "cr).");
}
}
this.$choice = function (choice) {
switch (choice) {
case "FLIGHTLOG_1_DUMP":
{
player.consoleMessage("Flight log written to latest.log", 6);
log(this.name, "==================================");
log(this.name, " ");
let logCounter = 0; // reset the counter
for (logCounter = 0; logCounter < this.flightArray.length; logCounter++) {
if (this.flightArray[logCounter] >= 0) {
log(this.name, (this.flightArray.length - logCounter) + " - " + System.systemNameForID(this.flightArray[logCounter]) + ", (" + this.killsArray[logCounter] + " kills, " + this.creditsArray[logCounter] + "cr).");
}
if (this.flightArray[logCounter] == -1) {
log(this.name, (this.flightArray.length - logCounter) + " - Interstellar Space, (" + this.killsArray[logCounter] + " kills, " + this.creditsArray[logCounter] + "cr).");
}
}
log(this.name, " ");
if (system.ID != -1) {
log(this.name, "Current system - " + system.name + " in galaxy " + (galaxyNumber + 1) + ", (" + (player.score - this.baseKills) + " kills, " + (Math.floor(10 * (player.credits - this.baseCredits)) / 10) + "cr).");
}
else {
log(this.name, "Currently in interstellar space, (" + (player.score - this.baseKills) + " kills, " + (Math.floor(10 * (player.credits - this.baseCredits)) / 10) + "cr).");
}
log(this.name, "==================================");
break;
}
case "FLIGHTLOG_2_RESET":
{
player.consoleMessage("Flight log cleared.", 6);
this.playerEnteredNewGalaxy();
break;
}
}
}
this.shipWillExitWitchspace = function () {
this.baseKills = player.score;
this.baseCredits = player.credits;
}
this.shipWillEnterWitchspace = function (cause) {
this.kills = player.score - this.baseKills;
this.profit = Math.floor(10 * (player.credits - this.baseCredits)) / 10;
this.flightArray.push(system.ID);
this.killsArray.push(this.kills);
this.creditsArray.push(this.profit);
this.$trimArrays();
missionVariables.flightLogMemory = this.flightArray[0];
missionVariables.flightKillsMemory = this.killsArray[0];
missionVariables.flightCreditsMemory = this.creditsArray[0];
let arrayCounter = 1; // set the counter
for (arrayCounter = 1; arrayCounter < this.flightArray.length; arrayCounter++) {
missionVariables.flightLogMemory = missionVariables.flightLogMemory + ":" + this.flightArray[arrayCounter];
missionVariables.flightKillsMemory = missionVariables.flightKillsMemory + ":" + this.killsArray[arrayCounter];
missionVariables.flightCreditsMemory = missionVariables.flightCreditsMemory + ":" + this.creditsArray[arrayCounter];
}
}
this.$trimArrays = function () { // trim the arrays back to their original lengths by throwing out oldest (first in the array) log entries
while (this.flightArray.length > this.maxLogLength) { this.discard = this.flightArray.shift(); }
while (this.killsArray.length > this.maxLogLength) { this.discard = this.killsArray.shift(); }
while (this.creditsArray.length > this.maxLogLength) { this.discard = this.creditsArray.shift(); }
}
this.playerEnteredNewGalaxy = function () {
missionVariables.flightLogMemory = this.blankArray;
missionVariables.flightKillsMemory = this.blankArray;
missionVariables.flightCreditsMemory = this.blankArray;
this.startUpComplete();
} |