Difference between revisions of "Commodities.plist"

From Elite Wiki
(Amended formula to give final price in credits. Gave example calculation.)
m (Tagged as Legacy scripting)
 
(15 intermediate revisions by 12 users not shown)
Line 1: Line 1:
Commodities.plist is a dictionary with an entry for each type of market. Three are defined initially, 'default' containing the default (natch) information for each [[commodity]] in the universe, 'rockhermit' which has the prices and quantities available at a [[rock hermit]] and 'none' which has prices and price variation set to zero.
 
  +
'''Note: The commodities.plist file is no longer used from Oolite 1.82 and following.'''
  +
  +
Commodities.[[plist]] is a dictionary with an entry for each type of market. Three are defined initially, 'default' containing the default (natch) information for each of the [[commodities]] in the universe, 'rockhermit' which has the prices and quantities available at a [[rock hermit]] and 'none' which has prices and price variation set to zero. To create a commodities.plist for your own station, define an entry with the same name as the 'market' property of the station in [[shipdata.plist]] (or alternatively with the same name as its primary role).
 
 
 
Each market is an array of 17 commodities, each in itself an array of 10 items:
 
Each market is an array of 17 commodities, each in itself an array of 10 items:
Line 13: Line 15:
 
# The unit of quantity (0 == tons, 1 == kilos, 2 == grams)
 
# The unit of quantity (0 == tons, 1 == kilos, 2 == grams)
 
 
At each market prices and quantities are calculated from values 4..9 and a random value from 0-255 (MARKET_RND) according to a complex series of steps:-
+
At each market prices and quantities are calculated from values 4..9 and a random value from 0-255 (MARKET_RND) according to a complex series of steps:
+
Code:
+
<br>
// calculate the local price
+
<code>// calculate the local price </code><br>
price = (MARKET_BASE_PRICE + (MARKET_RND & MARKET_MASK_PRICE) + (economy * MARKET_ECO_ADJUST_PRICE)) & 255
+
<code>price = (MARKET_BASE_PRICE + (MARKET_RND & MARKET_MASK_PRICE) + (economy * MARKET_ECO_ADJUST_PRICE)) & 255</code><br>
+
<br>
// calculate the local quantity available
+
<code>// calculate the local quantity available</code><br>
quantity = (MARKET_BASE_QUANTITY + (MARKET_RND & MARKET_MASK_QUANTITY) - (economy * MARKET_ECO_ADJUST_QUANTITY)) & 255;
+
<code>quantity = (MARKET_BASE_QUANTITY + (MARKET_RND & MARKET_MASK_QUANTITY) - (economy * MARKET_ECO_ADJUST_QUANTITY)) & 255</code><br>
+
<br>
// if the quantity gets too high it's zeroed
+
<code>// if the quantity gets too high it's zeroed</code><br>
if (quantity > 127) quantity = 0;
+
<code>if (quantity > 127) quantity = 0</code><br>
+
<br>
// limit the quantity to 0..63 units
+
<code>// limit the quantity to 0..63 units</code><br>
quantity &= 63;
+
<code>quantity &= 63</code><br>
+
<br>
// price in credits is the final price x 0.4
+
<code>// price in credits is the final price x 0.4</code><br>
price *= 0.4;
+
<code>price *= 0.4</code><br>
  +
   
 
Thus if you wish the price of a commodity to be higher in good economies you set MARKET_ECO_ADJUST_PRICE to a high positive value. If you require the price to vary less randomly you set MARKET_MASK_PRICE to a low value (1 or 0). You can work out the rest I'm sure!
 
Thus if you wish the price of a commodity to be higher in good economies you set MARKET_ECO_ADJUST_PRICE to a high positive value. If you require the price to vary less randomly you set MARKET_MASK_PRICE to a low value (1 or 0). You can work out the rest I'm sure!
   
== For Example: ==
+
==Example==
   
* '''[[Radioactives]]'''
+
* '''[[Commodities#Radioactives|Radioactives]]'''
 
* MARKET_BASE_PRICE = 65
 
* MARKET_BASE_PRICE = 65
 
* MARKET_ECO_ADJUST_PRICE = -3
 
* MARKET_ECO_ADJUST_PRICE = -3
Line 41: Line 43:
 
* MARKET_BASE_QUANTITY = 2
 
* MARKET_BASE_QUANTITY = 2
 
* MARKET_MASK_PRICE = 7
 
* MARKET_MASK_PRICE = 7
* MARKET_MASK_PRICE = 7
 
  +
* MARKET_MASK_QUANTITY = 7
   
If MARKET_RND is 105 and the economy is 3 ([[Mainly Agricultural]]) then:
+
If MARKET_RND is 133 and the economy is 3 ([[Planetinfo.plist#Economy|Mainly Industrial]]) then:
   
* price = (65 + (105 & 7) + (3 * -3)) & 255 = (65 + 5 - 9) & 255 = '''61'''
+
* price = (65 + (133 & 7) + (3 * -3)) & 255 = (65 + 5 - 9) & 255 = '''61'''
* quantity = (2 + (105 & 7) - (3 * -3)) & 255 = (2 + 5 + 9) & 255 = '''16'''
+
* quantity = (2 + (133 & 7) - (3 * -3)) & 255 = (2 + 5 + 9) & 255 = '''16'''
   
 
61 * 0.4 = '''24.4 credits per ton, 16 tons available.'''
 
61 * 0.4 = '''24.4 credits per ton, 16 tons available.'''
   
  +
Since (MARKET_RND & MARKET_MASK_PRICE) will always be a value between 0 and 7, this sets the minimum price per ton of [[Commodities#Radioactives|Radioactives]] at a [[Planetinfo.plist#Economy|Poor Agricultural]] economy at 17.6 Cr. and the maximum price per ton at a [[Planetinfo.plist#Economy|Rich Industrial]] economy at 28.8 Cr.
   
 
  +
==Links==
  +
*See also the [[Commodity Calculator]] to help you with the above calculations.
  +
*[http://aegidian.org/bb/viewtopic.php?t=3777 Understanding commodities.plist] by Commander McLane (2007) - long but good!
  +
*[http://aegidian.org/bb/viewtopic.php?f=4&t=17621#p239979 How to convert markets] defined in commodities.plist to be usable from Oolite 1.82.
  +
*[[Trade-goods.plist]] the replacement for this (since Oolite v1.81 in 2014/5).
   
 
[[Category:Oolite]]
 
[[Category:Oolite]]
  +
[[Category:Oolite_scripting]]
  +
[[Category:Legacy scripting]]

Latest revision as of 10:39, 9 August 2021

Note: The commodities.plist file is no longer used from Oolite 1.82 and following.

Commodities.plist is a dictionary with an entry for each type of market. Three are defined initially, 'default' containing the default (natch) information for each of the commodities in the universe, 'rockhermit' which has the prices and quantities available at a rock hermit and 'none' which has prices and price variation set to zero. To create a commodities.plist for your own station, define an entry with the same name as the 'market' property of the station in shipdata.plist (or alternatively with the same name as its primary role).

Each market is an array of 17 commodities, each in itself an array of 10 items:

  1. The name of the commodity
  2. Units available at a market (this is calculated at each marketplace)
  3. Price per unit at a market (this is calculated at each marketplace)
  4. The base price per unit MARKET_BASE_PRICE
  5. An adjustment to price based on the economy MARKET_ECO_ADJUST_PRICE
  6. An adjustment to units availble based on the economy MARKET_ECO_ADJUST_QUANTITY
  7. The base quantity available to a market MARKET_BASE_QUANTITY
  8. A 'mask' which defines how the price varies MARKET_MASK_PRICE
  9. A 'mask' which defines how the quantity varies MARKET_MASK_QUANTITY
  10. The unit of quantity (0 == tons, 1 == kilos, 2 == grams)

At each market prices and quantities are calculated from values 4..9 and a random value from 0-255 (MARKET_RND) according to a complex series of steps:


// calculate the local price
price = (MARKET_BASE_PRICE + (MARKET_RND & MARKET_MASK_PRICE) + (economy * MARKET_ECO_ADJUST_PRICE)) & 255

// calculate the local quantity available
quantity = (MARKET_BASE_QUANTITY + (MARKET_RND & MARKET_MASK_QUANTITY) - (economy * MARKET_ECO_ADJUST_QUANTITY)) & 255

// if the quantity gets too high it's zeroed
if (quantity > 127) quantity = 0

// limit the quantity to 0..63 units
quantity &= 63

// price in credits is the final price x 0.4
price *= 0.4


Thus if you wish the price of a commodity to be higher in good economies you set MARKET_ECO_ADJUST_PRICE to a high positive value. If you require the price to vary less randomly you set MARKET_MASK_PRICE to a low value (1 or 0). You can work out the rest I'm sure!

Example

  • Radioactives
  • MARKET_BASE_PRICE = 65
  • MARKET_ECO_ADJUST_PRICE = -3
  • MARKET_ECO_ADJUST_QUANTITY = -3
  • MARKET_BASE_QUANTITY = 2
  • MARKET_MASK_PRICE = 7
  • MARKET_MASK_QUANTITY = 7

If MARKET_RND is 133 and the economy is 3 (Mainly Industrial) then:

  • price = (65 + (133 & 7) + (3 * -3)) & 255 = (65 + 5 - 9) & 255 = 61
  • quantity = (2 + (133 & 7) - (3 * -3)) & 255 = (2 + 5 + 9) & 255 = 16

61 * 0.4 = 24.4 credits per ton, 16 tons available.

Since (MARKET_RND & MARKET_MASK_PRICE) will always be a value between 0 and 7, this sets the minimum price per ton of Radioactives at a Poor Agricultural economy at 17.6 Cr. and the maximum price per ton at a Rich Industrial economy at 28.8 Cr.

Links