Back to Index | Page generated: Nov 12, 2024, 11:02:04 PM |
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; }; |