| Back to Index | Page generated: Oct 27, 2025, 5:37:22 AM | 
 Expansion BlOomberg Markets
 Expansion BlOomberg Markets| from Expansion Manager's OXP list | from Expansion Manifest | |
|---|---|---|
| Description | Varies the in-game economy by generating random events that affect commodity prices. Depends on GNN. | Varies the in-game economy by generating random events that affect commodity prices. Depends on GNN. | 
| Identifier | oolite.oxp.Ramirez.BlOombergMarkets | oolite.oxp.Ramirez.BlOombergMarkets | 
| Title | BlOomberg Markets | BlOomberg Markets | 
| Category | Mechanics | Mechanics | 
| Author | Ramirez, Svengali, spara, phkb | Ramirez, Svengali, spara, phkb | 
| Version | 2.9 | 2.9 | 
| Tags | ||
| Required Oolite Version | ||
| Maximum Oolite Version | ||
| Required Expansions |  |  | 
| Optional Expansions | ||
| Conflict Expansions | ||
| Information URL | https://wiki.alioth.net/index.php/BlOomberg_Markets | n/a | 
| Download URL | https://wiki.alioth.net/img_auth.php/3/3f/BlOomberg_Markets_2.9.oxz | n/a | 
| License | CC BY-NC-SA 3 | CC BY-NC-SA 3 | 
| File Size | n/a | |
| Upload date | 1700441776 | 
Also read http://wiki.alioth.net/index.php/BlOomberg%20Markets
{\rtf1\ansi\deff3\adeflang1025
{\fonttbl{\f0\froman\fprq2\fcharset0 Times New Roman;}{\f1\froman\fprq2\fcharset2 Symbol;}{\f2\fswiss\fprq2\fcharset0 Arial;}{\f3\froman\fprq2\fcharset0 Liberation Serif{\*\falt Times New Roman};}{\f4\fswiss\fprq2\fcharset0 Liberation Sans{\*\falt Arial};}{\f5\froman\fprq2\fcharset0 Verdana;}{\f6\froman\fprq2\fcharset0 Helvetica{\*\falt Arial};}{\f7\fnil\fprq2\fcharset0 Noto Sans CJK JP DemiLight;}{\f8\fnil\fprq2\fcharset0 FreeSans;}{\f9\fswiss\fprq0\fcharset128 FreeSans;}}
{\colortbl;\red0\green0\blue0;\red0\green0\blue255;\red0\green255\blue255;\red0\green255\blue0;\red255\green0\blue255;\red255\green0\blue0;\red255\green255\blue0;\red255\green255\blue255;\red0\green0\blue128;\red0\green128\blue128;\red0\green128\blue0;\red128\green0\blue128;\red128\green0\blue0;\red128\green128\blue0;\red128\green128\blue128;\red192\green192\blue192;}
{\stylesheet{\s0\snext0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038 Normal;}
{\s15\sbasedon0\snext16\sb240\sa120\keepn\dbch\af7\dbch\af8\afs28\loch\f4\fs28 C\u237\'edmsor;}
{\s16\sbasedon0\snext16\sl288\slmult1\sb0\sa140 Sz\u246\'f6vegt\u246\'f6rzs;}
{\s17\sbasedon16\snext17\sl288\slmult1\sb0\sa140\dbch\af9 Lista;}
{\s18\sbasedon0\snext18\sb120\sa120\noline\i\dbch\af9\afs24\ai\fs24 Felirat;}
{\s19\sbasedon0\snext19\noline\dbch\af9 T\u225\'e1rgymutat\u243\'f3;}
}{\*\generator LibreOffice/5.2.7.2$Linux_X86_64 LibreOffice_project/20m0$Build-2}{\info{\creatim\yr0\mo0\dy0\hr0\min0}{\revtim\yr2017\mo6\dy3\hr13\min51}{\printim\yr0\mo0\dy0\hr0\min0}}{\*\userprops}\deftab720
{\*\pgdsctbl
{\pgdsc0\pgdscuse451\pgwsxn12240\pghsxn15840\marglsxn1800\margrsxn1800\margtsxn1440\margbsxn1440\pgdscnxt0 Alap\u233\'e9rtelmezett st\u237\'edlus;}}
\formshade{\*\pgdscno0}\paperh15840\paperw12240\margl1800\margr1800\margt1440\margb1440\sectd\sbknone\sectunlocked1\pgndec\pgwsxn12240\pghsxn15840\marglsxn1800\margrsxn1800\margtsxn1440\margbsxn1440\ftnbj\ftnstart1\ftnrstcont\ftnnar\aenddoc\aftnrstcont\aftnstart1\aftnnrlc
{\*\ftnsep}\pgndec\pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\qc\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\b\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
BlOomberg Markets v2.6.}{\cf1\ulnone\ulc0\b\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
2}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\qc\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0\rtlch \ltrch\loch\loch\f5\hich\af5
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\qc\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
An OXP by Ramirez for Oolite }{\cf1\ul\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
v1.82}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\qc\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0\rtlch \ltrch\loch\loch\f5\hich\af5
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0\rtlch \ltrch\loch\loch\f5\hich\af5
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
This is the second version of BlOomberg Markets, and features integration with the Snoopers OXP news service along with use of the new mission screen handling features introduced in Oolite v1.74.  Further tweaks have been made for compatibility with javascript updates in Oolite v1.75. Changes to the market handling introduced in 1.82 raise the requirement to Oolite 1.82.}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0\rtlch \ltrch\loch\loch\f5\hich\af5
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ul\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
What it does}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0\rtlch \ltrch\loch\loch\f5\hich\af5
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
BlOomberg Markets creates random events that affect the commodity prices in specific systems.  Prices can go up or down, and it's up to the player to decide whether to take advantage of an event to maximise their profit.  }
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0\rtlch \ltrch\loch\loch\f5\hich\af5
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
If you have Snoopers installed, you'll receive any relevant financial information from time to time through the BlOomberg Markets news channel.  Events can last for up to around 20 days; while this is usually enough time to cross much of the galaxy, there's no guarantee that a player will be able to reach any given event.  While an event is ongoing, a note is added to the Ship's Manifest (F5) screen.  Events tend to occur every 30-40 days, so if an event doesn't look that attractive a player can hold out for another one later.  }
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0\rtlch \ltrch\loch\loch\f5\hich\af5
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
Though the OXP has been designed to create fairly extreme price fluctuations, note that prices will still vary by economy type.  So, a reduction in the price of computers, for example, will result in very low prices in a Rich Industrial system (where computers are already fairly cheap) whereas the reduced prices in a Mainly Industrial system might still be quite high in comparison.  When an event occurs, it's therefore worth checking the exact economy type of a system in order to determine whether a potential deal is worth pursuing.  }
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\fs24\loch\f5\hich\af5
 }
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ul\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
Future Developments}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0\rtlch \ltrch\loch\loch\f5\hich\af5
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
I've developed a mechanism to create rarer events that affect more than one system, e.g. all those with a particular government or ecomony type, but I'm still working on the actual events and the corresponding mission text.}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\fs24\loch\f5\hich\af5
 }
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ul\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
Acknowledgements}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0\rtlch \ltrch\loch\loch\f5\hich\af5
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
Commander McLane for the concept and event scenarios}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
Captain Hesperus for some of the detailed mission text}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
The Snoopers team and Svengali in particular for help with the presentation and integration.}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0\rtlch \ltrch\loch\loch\f5\hich\af5
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ul\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
Licence}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0\rtlch \ltrch\loch\loch\f5\hich\af5
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
As usual, this OXP is licensed under the Creative Commons Attribution Non-Commercial Share-Alike Licence v3.0, details of which are available }{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f6\hich\af6
.  This mean's you're}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
free to use to use bits of it however you want so long as you give attribution to the author, though I'd appreciate it if you let me know if you're going to do so.}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0\rtlch \ltrch\loch\loch\f5\hich\af5
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ul\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
Version History}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0\rtlch \ltrch\loch\loch\f5\hich\af5
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
v2.6.2 03/06/2017 Fixed a % sign in missiontext.plist, thanks to gizmo.}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
v2.6.1 16/06/2016 A marker has been added to the chart for the market event. Small language corrections. -spara-}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
v2.6}{\rtlch \ltrch\loch\loch\f5\hich\af5
\tab }{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
24/06/2015 The oxp has been updated to work with Oolite v1.82. -spara-}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
v2.5}{\rtlch \ltrch\loch\loch\f5\hich\af5
\tab }{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
29/10/2011}{\rtlch \ltrch\loch\loch\f5\hich\af5
\tab }{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
Script fixes to correct event resetting; added mission text for minerals variations}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
v2.4}{\rtlch \ltrch\loch\loch\f5\hich\af5
\tab }{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
04/03/2011}{\rtlch \ltrch\loch\loch\f5\hich\af5
\tab }{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
Compatibility update for Oolite v1.75}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
v2.3}{\rtlch \ltrch\loch\loch\f5\hich\af5
\tab }{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
18/11/2010}{\rtlch \ltrch\loch\loch\f5\hich\af5
\tab }{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
Minor change to prioritise BlOomberg messages and ensure market resets are reported properly}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
v2.2}{\rtlch \ltrch\loch\loch\f5\hich\af5
\tab }{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
26/07/2010}{\rtlch \ltrch\loch\loch\f5\hich\af5
\tab }{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
Minor fixes to improve Snoopers integration}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
v2.1}{\rtlch \ltrch\loch\loch\f5\hich\af5
\tab }{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
17/06/2010}{\rtlch \ltrch\loch\loch\f5\hich\af5
\tab }{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
Minor fixes to typos in mission text}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
v2.0}{\rtlch \ltrch\loch\loch\f5\hich\af5
\tab }{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
13/04/2010}{\rtlch \ltrch\loch\loch\f5\hich\af5
\tab }{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
Snoopers integration and compatibility with Oolite v1.74}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
v1.0}{\rtlch \ltrch\loch\loch\f5\hich\af5
\tab }{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
30/01/2010}{\rtlch \ltrch\loch\loch\f5\hich\af5
\tab }{\cf1\ulnone\ulc0\rtlch \ltrch\loch\fs24\loch\f5\hich\af5
Initial release}
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0\rtlch \ltrch\loch\loch\f5\hich\af5
\par \pard\plain \s0\nowidctlpar\hyphpar0\cf0\kerning1\dbch\af7\langfe2052\dbch\af8\afs24\alang1081\loch\f3\hich\af3\fs24\lang1038\sl240\slmult1\nowidctlpar\li0\ri0\lin0\rin0\fi0\sb0\sa0\rtlch \ltrch\loch
\par }
        BlOomberg Markets v2.9 An OXP by Ramirez for Oolite v1.82 This is the second version of BlOomberg Markets, and features integration with the Snoopers OXP news service (now GNN) along with use of the new mission screen handling features introduced in Oolite v1.74. Further tweaks have been made for compatibility with javascript updates in Oolite v1.75. Changes to the market handling introduced in 1.82 raise the requirement to Oolite 1.82. What it does ============ BlOomberg Markets creates random events that affect the commodity prices in specific systems. Prices can go up or down, and it's up to the player to decide whether to take advantage of an event to maximise their profit. If you have GNN installed, you'll receive any relevant financial information from time to time through the BlOomberg Markets news channel. Events can last for up to around 20 days; while this is usually enough time to cross much of the galaxy, there's no guarantee that a player will be able to reach any given event. While an event is ongoing, a note is added to the Ship's Manifest (F5) screen. Events tend to occur every 30-40 days, so if an event doesn't look that attractive a player can hold out for another one later. Though the OXP has been designed to create fairly extreme price fluctuations, note that prices will still vary by economy type. So, a reduction in the price of computers, for example, will result in very low prices in a Rich Industrial system (where computers are already fairly cheap) whereas the reduced prices in a Mainly Industrial system might still be quite high in comparison. When an event occurs, it's therefore worth checking the exact economy type of a system in order to determine whether a potential deal is worth pursuing. Future Developments =================== I've developed a mechanism to create rarer events that affect more than one system, e.g. all those with a particular government or ecomony type, but I'm still working on the actual events and the corresponding mission text. Acknowledgements ================ Commander McLane for the concept and event scenarios Captain Hesperus for some of the detailed mission text The Snoopers/GNN team and Svengali in particular for help with the presentation and integration. Licence ======= As usual, this OXP is licensed under the Creative Commons Attribution Non-Commercial Share-Alike Licence v3.0, details of which are available . This mean's you're free to use to use bits of it however you want so long as you give attribution to the author, though I'd appreciate it if you let me know if you're going to do so. Version History =============== v2.9 20/11/2023 Improved robustness when applying market changes. v2.8 02/09/2023 Updated to work with MarketScriptInterface.oxp. v2.6.2 03/06/2017 Fixed a % sign in missiontext.plist, thanks to gizmo. v2.6.1 16/06/2016 A marker has been added to the chart for the market event. Small language corrections. -spara- v2.6 24/06/2015 The oxp has been updated to work with Oolite v1.82. -spara- v2.5 29/10/2011 Script fixes to correct event resetting; added mission text for minerals variations v2.4 04/03/2011 Compatibility update for Oolite v1.75 v2.3 18/11/2010 Minor change to prioritise BlOomberg messages and ensure market resets are reported properly v2.2 26/07/2010 Minor fixes to improve Snoopers integration v2.1 17/06/2010 Minor fixes to typos in mission text v2.0 13/04/2010 Snoopers integration and compatibility with Oolite v1.74 v1.0 30/01/2010 Initial release
| Path | |
|---|---|
| Config/script.js | "use strict";
this.name = "SE-main-script";
this.author = "Ramirez & Svengali";
this.copyright = "March 2011";
this.description = "Special events for market prices";
//2.8 updated to work with MarketScriptInterface.oxp
//2.6.1 added system marker -spara-
//2.6 fixed to work with Oolite 1.82 -spara-
this.startUp = function () {
	var harakiri = false;
	// Check for GNN and react if not found...
	if (!worldScripts.GNN) harakiri = true;
	else if (!this.compareVersion(worldScripts.GNN.version, "1.0")) harakiri = true;
	if (harakiri) {
		player.consoleMessage("BlOomberg - Minimum GNN version (1.0) not detected. Disabling...", 10);
		log(this.name, this.name + ': Minimum GNN version (1.0) not detected. Disabling all functionality in BlOomberg.');
		for (prop in this) { if (prop !== 'name' && prop !== 'version') delete this[prop]; }
		return;
	}
	delete this.compareVersion;
	this.logging = false; // Must be false for release
	this.checkShort = false; // Use short time check. Must be false for release
	if (this.logging) this.getLog('Loaded:');
	var msi = worldScripts.MarketScriptInterface_Main;
	msi.$addMarketInterface("system_local", "$updateLocalCommodityDefinition", this.name);
}
this.clearVars = function () {
	missionVariables.SE_commodity = null;
	missionVariables.SE_deadline = null;
	missionVariables.SE_deviation = null;
	missionVariables.SE_economy_type = null;
	missionVariables.SE_galaxy_number = null;
	missionVariables.SE_missiontext_string = null;
	missionVariables.SE_set = null;
	missionVariables.SE_status = null;
	missionVariables.SE_system_economy = null;
	missionVariables.SE_system_ID = null;
	missionVariables.SE_system_name = null;
	//used in bloomberg_market.js -spara-
	missionVariables.SE_market_key = null;
	return;
}
this.compareVersion = function (strA, strB) {
	var x = strA.split('.'), y = strB.split('.');
	var xl = x.length, yl = y.length;
	for (let i = 0; i < yl; i++) {
		if (xl <= i) return (false);
		if (parseInt(x[i]) > y[i]) break;
		if (parseInt(x[i]) < y[i]) return (false);
	}
	return (true);
}
// Check if screens should be passed or event should be reset
this.guiScreenChanged = function () {
	if (player.ship.docked && guiScreen === "GUI_SCREEN_MARKET") this.prepareScreen();
}
this.shipExitedWitchspace = function () {
	if (missionVariables.SE_status === "RUNNING" && clock.days > missionVariables.SE_deadline) this.prepareScreen();
}
this.shipWillEnterWitchspace = function (type) {
	if (type === "galactic jump") this.resetSpecialEvent();
}
// Prepare screen for Snoopers
this.prepareScreen = function () {
	if (!missionVariables.SE_status) {
		var event_delay = Math.floor(Math.random() * 10) + 20;
		if (this.checkShort) missionVariables.SE_set = clock.days;
		else missionVariables.SE_set = clock.days + event_delay;
		missionVariables.SE_status = "SET";
	}
	if (this.logging) log(this.name, this.name + ': Set is:' + missionVariables.SE_set);
	var obj = new Object();
	if (missionVariables.SE_status === "RUNNING") {
		if (this.logging) log(this.name, this.name + ': Deadline:' + missionVariables.SE_deadline);
		if (clock.days >= missionVariables.SE_deadline) {
			obj = { ID: this.name, Message: expandMissionText("SE_reset_event"), Pic: "SE-bloomberg.png", Music: "SE-stockmarket.ogg", Priority: 1 };
			this.passScreen(obj, null);
		}
		return;
	} else if (clock.days >= missionVariables.SE_set && missionVariables.SE_status === "SET") {
		missionVariables.SE_system_ID = (Math.floor(Math.random() * 255));
		missionVariables.SE_galaxy_number = galaxyNumber;
		missionVariables.SE_system_name = System.systemNameForID([missionVariables.SE_system_ID]);
		missionVariables.SE_system_economy = System.infoForSystem([missionVariables.SE_galaxy_number], [missionVariables.SE_system_ID]).economy;
		if (missionVariables.SE_system_economy > 3) {
			missionVariables.SE_economy_type = "agricultural";
			missionVariables.SE_commodity = expandDescription("[SE_agricultural_commodity]");
			missionVariables.SE_deviation = expandDescription("[SE_" + [missionVariables.SE_commodity] + "_" + [missionVariables.SE_economy_type] + "_" + "deviation" + "]");
			missionVariables.SE_missiontext_string = "SE_" + [missionVariables.SE_commodity] + "_" + [missionVariables.SE_deviation];
		} else {
			missionVariables.SE_economy_type = "industrial";
			missionVariables.SE_commodity = expandDescription("[SE_industrial_commodity]");
			missionVariables.SE_deviation = expandDescription("[SE_" + [missionVariables.SE_commodity] + "_" + [missionVariables.SE_economy_type] + "_" + "deviation" + "]");
			missionVariables.SE_missiontext_string = "SE_" + [missionVariables.SE_commodity] + "_" + [missionVariables.SE_deviation];
		}
		obj = { ID: this.name, Message: expandMissionText([missionVariables.SE_missiontext_string]), Pic: "SE-bloomberg.png", Music: "SE-stockmarket.ogg", Priority: 2 };
		if (this.logging) log(this.name, JSON.stringify(obj));
		this.passScreen(obj, 1);
	} else if (this.logging) log(this.name, 'Delay.');
	return;
}
// Pass the prepared object to GNN and set (or reset) variables
this.passScreen = function (obj, mode) {
	if (this.logging) this.getLog('Status prepared:');
	// Pass the object and get errorcode back
	var a = worldScripts.GNN._insertNews(obj);
	if (!a) { // On success
		if (mode) {
			missionVariables.SE_status = "INJECTED"; // Set flag for inserted message
		}
		if (this.logging) log(this.name, this.name + ': Event passed. Status:' + missionVariables.SE_status);
	} else {
		if (a < 0) { // If CRC is still stored or buffers full, add 2 more days and try again
			if (missionVariables.SE_status === "SET") missionVariables.SE_set = parseInt(missionVariables.SE_set) + 2;
			if (missionVariables.SE_status === "RUNNING") missionVariables.SE_deadline = parseInt(missionVariables.SE_deadline) + 2;
			return;
		}
		if (this.logging) log(this.name, 'GNN returned:' + a);
		this.resetSpecialEvent(); // On failure reset everything...
	}
	if (this.logging) this.getLog('Status after insertion:');
	return;
}
// Callback from GNN
this.newsDisplayed = function (what) { worldScripts["SE-main-script"].newsReaction(what); return; }
this.newsReaction = function (what) {
	if (missionVariables.SE_galaxy_number !== null) {
		if (missionVariables.SE_status === "INJECTED") {
			missionVariables.SE_market_key = "SE-station-" + [missionVariables.SE_commodity] + "-" + [missionVariables.SE_deviation];
			var mi = expandMissionText("SE_market_information");
			if (this.logging) log(this.name, "Mission: " + mi);
			mission.setInstructions(mi, this.name);
			mission.markSystem({
				system: missionVariables.SE_system_ID,
				name: this.name,
				markerColor: "blueColor",
				markerShape: "MARKER_DIAMOND"
			});
			var event_duration = Math.floor(Math.random() * 8) + 12;
			if (this.checkShort) missionVariables.SE_deadline = clock.days + 1;
			else missionVariables.SE_deadline = clock.days + event_duration;
			missionVariables.SE_status = "RUNNING";
			if (this.logging) log(this.name, this.name + ': Event set. Duration until:' + missionVariables.SE_deadline);
		} else if (missionVariables.SE_status === "RUNNING") this.resetSpecialEvent();
	}
	if (this.logging) this.getLog('Status after display:');
	return;
}
this.resetSpecialEvent = function () {
	// Can be undefined if status=SET but not yet displayed
	if (missionVariables.SE_set && missionVariables.SE_galaxy_number !== null) {
		mission.unmarkSystem({ system: missionVariables.SE_system_ID, name: this.name });
	}
	mission.setInstructions(null, this.name);
	this.clearVars();
	if (this.logging) this.getLog('Status after cleaning:');
	return;
}
this.getLog = function (m) {
	log(this.name, m);
	for (let prop in missionVariables) { if (prop.substring(0, 2) === 'SE_') log(this.name, "mV[" + prop + "] : " + missionVariables[prop]); }
	return;
}
this.$commodity_lookup = {
	"Alloys": "alloys",
	"Computers": "computers",
	"Firearms": "firearms",
	"Food": "food",
	"Furs": "furs",
	"Gem-stones": "gem_stones",
	"Gold": "gold",
	"Liquor/Wines": "liquor_wines",
	"Minerals": "minerals",
	"Narcotics": "narcotics",
	"Platinum": "platinum",
	"Radioactives": "radioactives",
	"Slaves": "slaves",
	"Textiles": "textiles"
};
this.$originalDefs = {
	"SE-station-Alloys-decrease" : {
		"alloys" : [0,0,42,1,1,17,31,31,0]
	},
	"SE-station-Alloys-increase" : {
		"alloys" : [0,0,150,1,1,17,31,31,0]
	},
	"SE-station-Computers-decrease" : {
		"computers" : [0,0,60,14,14,56,3,3,0]
	},
	"SE-station-Computers-increase" : {
		"computers" : [0,0,200,14,14,56,3,3,0]
	},
	"SE-station-Firearms-decrease" : {
		"firearms" : [0,0,10,13,1,60,7,3,0]
	},
	"SE-station-Firearms-increase" : {
		"firearms" : [0,0,155,13,10,50,7,7,0]
	},
	"SE-station-Food-decrease" : {
		"food" : [0,0,12,-1,2,25,1,1,0]
	},
	"SE-station-Furs-decrease" : {
		"furs" : [0,0,100,-9,-9,220,63,63,0]
	},
	"SE-station-Furs-increase" : {
		"furs" : [0,0,220,-9,-9,240,10,63,0]
	},
	"SE-station-Gem-stones-decrease" : {
		"gem_stones" : [0,0,25,-1,-1,250,15,15,2]
	},
	"SE-station-Gem-stones-increase" : {
		"gem_stones" : [0,0,90,-1,-1,250,15,15,2]
	},
	"SE-station-Gold-decrease" : {
		"gold" : [0,0,40,-1,-1,66,7,7,1]
	},
	"SE-station-Gold-increase" : {
		"gold" : [0,0,190,-1,-1,66,7,7,1]
	},
	"SE-station-Liquor/Wines-decrease" : {
		"liquor_wines" : [0,0,64,-5,-5,251,15,15,0]
	},
	"SE-station-Liquor/Wines-increase" : {
		"liquor_wines" : [0,0,180,-5,-5,251,15,15,0]
	},
	"SE-station-Minerals-decrease" : {
		"minerals" : [0,0,10,-1,-1,53,3,3,0]
	},
	"SE-station-Minerals-increase" : {
		"minerals" : [0,0,135,-1,-1,53,3,3,0]
	},
	"SE-station-Narcotics-decrease" : {
		"narcotics" : [0,0,10,5,5,40,20,5,0]
	},
	"SE-station-Platinum-decrease" : {
		"platinum" : [0,0,80,-2,-2,55,31,31,1]
	},
	"SE-station-Platinum-increase" : {
		"platinum" : [0,0,220,-2,-2,55,31,31,1]
	},
	"SE-station-Radioactives-decrease" : {
		"radioactives" : [0,0,20,-3,-3,80,7,7,0]
	},
	"SE-station-Radioactives-increase" : {
		"radioactives" : [0,0,150,-3,-3,2,7,7,0]
	},
	"SE-station-Slaves-decrease" : {
		"slaves" : [0,0,40,-5,-5,20,31,31,0]
	},
	"SE-station-Slaves-increase" : {
		"slaves" : [0,0,230,-5,-5,226,31,31,0]
	},
	"SE-station-Textiles-decrease" : {
		"textiles" : [0,0,5,-1,-1,10,3,3,0]
	},
	"SE-station-Textiles-increase" : {
		"textiles" : [0,0,100,-1,-1,10,3,3,0]
	}
};
this.$updateLocalCommodityDefinition = function(goodDefinition, station, systemID) {
	// even though defined at the system level, this will only apply to one system - wherever the event is taking place
	if (systemID && 
		galaxyNumber == missionVariables.SE_galaxy_number && 
		systemID == missionVariables.SE_system_ID && 
		goodDefinition.key == this.$commodity_lookup[missionVariables.SE_commodity]) {
			
		// if we got here, we are doing an update. make sure the key is setup.
		if (!missionVariables.SE_market_key) {
			missionVariables.SE_market_key = "SE-station-" + [missionVariables.SE_commodity] + "-" + [missionVariables.SE_deviation];
		}
		var commodity = goodDefinition.key;
		//mission variable is set in the main script
		var oldDefs = this.$originalDefs[missionVariables.SE_market_key][commodity];
		//old style definition found for the good. calculate it the old way
		//only the price is changed
		if (oldDefs) {
			var market_base_price = oldDefs[2];
			var market_eco_adjust_price = oldDefs[3];
			var market_mask_price = oldDefs[6];
			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;
			goodDefinition.price = price * 10;
		}
	}
	return goodDefinition;
};
 |