Scripts/mz_script.js |
"use strict";
this.name = "Merchanter's Zeal";
this.author = "Reval";
this.version = "1.1";
this.license = "CC-BY-NC-SA 4.0";
this.description = "Join the Merchanters' League for free, accurate, and succinct advice on buy- and sell-prices at every station in every system you visit. Advisories via the F4 Interface as well as witchpoint in-flight comms. MZ uses your trading history as its basis for buy-advice, and for sell-advice your own hold's manifest. It makes an ideal pairing with the lucrative More Moolah Market (MZ + MM = $$$)";
this.startUp = function() {
// buy 'histories'
this.$mzIndBuy = new Array();
this.$mzAgrBuy = new Array();
// balance necessary b/f WPSA kicks in
this.$mzWPThresh = 2000;
}
this.startupComplete = function() {
// load buy 'histories'
var buy = missionVariables.mzAgrBuy; if (buy!=null)
this.$mzAgrBuy = JSON.parse(missionVariables.mzAgrBuy);
buy = missionVariables.mzIndBuy; if (buy!=null)
this.$mzIndBuy = JSON.parse(missionVariables.mzIndBuy);
this.$mzSystem = System.systemNameForID(system.ID);
var p = player.ship;
var pc = player.commsMessage;
// dock ship
var sta = p.dockedStation;
pc("The Merchanters' League welcomes you to "+this.$mzSystem+"!",7);
pc("Please check our special advisories on your F4 Interface.",7);
// prep ML Advisory interfaces
this._mzPrepSales(sta);
this._mzPrepBuy(sta);
}
this.playerWillSaveGame = function(message) {
// save buy 'histories'
missionVariables.mzAgrBuy = JSON.stringify(this.$mzAgrBuy);
missionVariables.mzIndBuy = JSON.stringify(this.$mzIndBuy);
}
this.shipDockedWithStation = function(station) {
this.$mzSystem = System.systemNameForID(system.ID);
var p = player.ship;
var pc = player.commsMessage;
// dock ship
pc("The Merchanters' League welcomes you to "+this.$mzSystem+"!",7);
pc("Please check our special advisories on your F4 Interface.",7);
// prep ML Advisory interfaces
this._mzPrepSales(station);
this._mzPrepBuy(station);
}
this.shipWillEnterWitchspace = function() {
var ml = manifest.list;
var pc = player.commsMessage;
// note what was bought in last system
var ind = (system.economy<4);
if (ind) this.$mzIndBuy = ml;
else this.$mzAgrBuy = ml;
}
this.shipExitedWitchspace = function() {
this.$mzSystem = System.systemNameForID(system.ID);
// witchpoint sell-advisory via comms
if (player.credits > this.$mzWPThresh)
this._mzSellAdvisory();
}
// witchpoint sell-advisory via comms
this._mzSellAdvisory = function() {
var s=system.stations, ml = manifest.list;
var pc = player.commsMessage, ps = player.ship;
var col = ps.messageGuiTextCommsColor;
ps.messageGuiTextCommsColor = "orangeColor";
// prices of ship's hold commodities, plus quantity
var i = 0, c = 0;
for (i=0; i<s.length; i++) {
if (s[i].name!="Rock Hermit") {
for (c=0; c<ml.length; c++)
pc(s[i].name + ": " + ml[c].displayName + " @ " + this._mzMPrice(s[i],ml[c].commodity) + " (" + this._mzMQuantity(s[i],ml[c].commodity) + ")",9);
}
pc(" ");
}
ps.messageGuiTextCommsColor = col;
}
/* helper functions */
// price of a good at a given station, in cr
this._mzMPrice = function(sta, good) {
var price=0.0, mar=sta.market;
price = mar[good].price/10;
return price.toFixed(1);
}
// quantity of a good at a given station
this._mzMQuantity = function(sta, good) {
var quant=0, mar=sta.market;
quant = mar[good].quantity;
return quant;
}
// F4 Interface Advisories
// create Sales Advisory on the F4 Interfaces screen
this._mzPrepSales = function(station) {
station.setInterface("mzSales",{
title: "ML Quick Sell Advisory",
category: "$$ Merchanters' League",
summary: "Sell-advice from the "+this.$mzSystem+" Merchanters' League.",
callback: this._mzShowSales.bind(this)
});
}
// sell advice from the Merchanters' League
this._mzShowSales = function() {
var parameters = new Object();
parameters.title = "The "+this.$mzSystem+" Merchanters' League: Sell!";
parameters.message = "";
var s=system.stations, ml = manifest.list;
// prices of ship's hold commodities, plus quantity
var i = 0, c = 0;
for (i=0; i<s.length; i++) {
if (s[i].name!="Rock Hermit") {
for (c=0; c<ml.length; c++)
parameters.message += s[i].name + ": " + ml[c].displayName + " @ " + this._mzMPrice(s[i],ml[c].commodity) + " (" + this._mzMQuantity(s[i],ml[c].commodity) + ") \n";
parameters.message += " \n";
}
}
parameters.choicesKey = "mzAcknowlege";
mission.runScreen(parameters, callback);
function callback(choice) {
if (choice === "1_YES") player.commsMessage("Luck in the Markets!");
}
}
// create Buy Advisory on the F4 Interfaces screen
this._mzPrepBuy = function(station) {
station.setInterface("mzBuy",{
title: "ML Quick Buy Advisory",
category: "$$ Merchanters' League",
summary: "Buy-advice from the "+this.$mzSystem+" Merchanters' League.",
callback: this._mzShowBuy.bind(this)
});
}
// buy advice from the Merchanters' League
this._mzShowBuy = function() {
var parameters = new Object();
parameters.title = "The "+this.$mzSystem+" Merchanters' League: Buy!";
parameters.message = "";
var s=system.stations, ind = (system.economy<4);
// use buy history from last agricultural or industrial system
if (ind) var hist = this.$mzIndBuy; else var hist = this.$mzAgrBuy;
// check that there _is_ a buying history
if (hist.length==0) {
// there is no buying history
parameters.message += "You have no buying-history yet, but here's our advice on two prime stock commodities...\n\n";
var i = 0;
if (ind) {
for (i=0; i<s.length; i++) {
if (s[i].name!="Rock Hermit") {
parameters.message += s[i].name + ": Computers @ " + this._mzMPrice(s[i],"computers") + " (" + this._mzMQuantity(s[i],"computers") + ") \n";
parameters.message += s[i].name + ": Luxuries @ " + this._mzMPrice(s[i],"luxuries") + " (" + this._mzMQuantity(s[i],"luxuries") + ") \n\n";
}
}
} else {
for (i=0; i<s.length; i++) {
if (s[i].name!="Rock Hermit") {
parameters.message += s[i].name + ": Pelts & Furs @ " + this._mzMPrice(s[i],"furs") + " (" + this._mzMQuantity(s[i],"furs") + ") \n";
parameters.message += s[i].name + ": Wines & Spirits @ " + this._mzMPrice(s[i],"liquor_wines") + " (" + this._mzMQuantity(s[i],"liquor_wines") + ") \n\n";
}
}
}
parameters.message += "\n";
}
// there _is_ a buying history
else {
// prices of ship's last hold commodities, plus quantity
var i = 0, c = 0;
for (i=0; i<s.length; i++) {
if (s[i].name!="Rock Hermit") {
for (c=0; c<hist.length; c++)
parameters.message += s[i].name + ": " + hist[c].displayName + " @ " + this._mzMPrice(s[i],hist[c].commodity) + " (" + this._mzMQuantity(s[i],hist[c].commodity) + ") \n";
parameters.message += " \n";
}
}
}
parameters.choicesKey = "mzAcknowlege";
mission.runScreen(parameters, callback);
function callback(choice) {
if (choice === "1_YES") player.commsMessage("Luck in the Markets!");
}
}
|