Finally back to my rig. Here's a short howto for anyone looking for a way to bring back markets to the old OXPs containing commodities.plist definition file. This method practically makes a carbon copy of the original market by duplicating the old market creation method in js.
The initial setting should be an old station OXP with shipdata.plist and commodities.plist files in the Config folder.
1. Create a folder named "Scripts" to the root of the OXP.
2. Create a uniquely named js-file to the Scripts folder. For example "my-station-market.js".
3. Copy-paste the following into the just created market file.
Code: Select all
"use strict";
this.name = "my-station-market";
//put the original defs here. no def is handled later.
this.$originalDefs = {
"food" : [0, 0, 25, -1, -1, 250, 5, 5, 0],
"textiles" : [0, 0, 18, -1, 0, 250, 5, 10, 0],
"radioactives" : [0, 0, 53, -2, -3, 0, 7, 15, 0],
"slaves" : [0, 0, 20, -2, -1, 5, 0, 3, 0],
"liquor_wines" : [0, 0, 130, -1, -1, 250, 15, 5, 0],
"luxuries" : [0, 0, 190, 8, -1, 250, 9, 21, 0],
"narcotics" : [0, 0, 36, -5, -9, 250, 5, 5, 0],
"computers" : [0, 0, 150, 14, -1, 250, 3, 21, 0],
"machinery" : [0, 0, 120, 6, 1, 250, 31, 10, 0],
"alloys" : [0, 0, 88, 3, 1, 250, 21, 10, 0],
"firearms" : [0, 0, 100, 13, 0, 0, 63, 0, 0],
"furs" : [0, 0, 170, -9, -1, 250, 63, 21, 0],
"minerals" : [0, 0, 16, -1, -2, 15, 3, 31, 0],
"gold" : [0, 0, 100, 0, 0, 0, 4, 0, 1],
"platinum" : [0, 0, 181, 0, 0, 0, 21, 0, 1],
"gem_stones" : [0, 0, 50, 0, 0, 0, 10, 0, 2],
"alien_items" : [0, 0, 125, 1, 0, 0, 31, 0, 0]
};
this.updateLocalCommodityDefinition = function(goodDefinition) {
var commodity = goodDefinition.key;
var oldDefs = this.$originalDefs[commodity];
//define the market size for the station
goodDefinition.capacity = 127;
//old style definition found for the good. calculate it the old way
if (oldDefs) {
var market_base_price = oldDefs[2];
var market_eco_adjust_price = oldDefs[3];
var market_eco_adjust_quantity = oldDefs[4];
var market_base_quantity = oldDefs[5];
var market_mask_price = oldDefs[6];
var market_mask_quantity = oldDefs[7];
var market_rnd = Math.floor(Math.random() * 256);
var economy = system.economy;
var price = (market_base_price + (market_rnd & market_mask_price) + (economy * market_eco_adjust_price)) & 255;
price *= 0.4;
var quantity = (market_base_quantity + (market_rnd & market_mask_quantity) - (economy * market_eco_adjust_quantity)) & 255;
if (quantity > 127) quantity = 0;
quantity &= 63;
goodDefinition.quantity = quantity;
goodDefinition.price = price * 10;
}
//no definition found. just add some variance to the system market (+/-5%)
else {
goodDefinition.price = goodDefinition.price * (1.05 - Math.random() * 0.1);
goodDefinition.quantity = Math.floor(goodDefinition.quantity * (1.05 - Math.random() * 0.1));
}
//no definition found. no market on that commodity
//else {
// goodDefinition.price = 0;
// goodDefinition.quantity = 0;
// goodDefinition.capacity = 0;
//}
//scale down if quantity too high
if (goodDefinition.quantity > goodDefinition.capacity)
goodDefinition.quantity = Math.floor(goodDefinition.quantity / 127 * goodDefinition.capacity);
return goodDefinition;
};
4. Replace the definitions in the script above with the definitions from the old commodities.plist. Only replace the numbers! In case the old commodities.plist is in xml, you'll probably want to convert it to open step with xml2ns.py script found from the wiki: [wiki]Oolite Converters[/wiki].
5. Tweak the capacity of the station to your liking by editing goodDefinition.capacity.
6. Decide what to do with custom commodities. By default the script just adds some variance.
7. Remember to save your new market file!
8. Open shipdata.plist file and find the definition for the station.
9. Add
. The place really does not matter, but it's tidier that way.
10. Save shipdata.plist, start the game while holding shift and visit the station. If all went well, it should have a functional market. If not, latest.log will probably tell you what went wrong.
That should be it. Have fun tweaking
.