Händlerscript

Aus Horizon
Wechseln zu: Navigation, Suche

Dieses GreaseMonkey Script ergänzt den Bericht eines Händlerevents um Informationen der üblichen Tauschkurse und markiert farblich die einzelnen Handelsvorschläge entsprechend ihrer Kursverhältnisse. Händlerscript

Konfigurationsmöglichkeiten[Bearbeiten]

Verhältnisse[Bearbeiten]

Über die Zeilen

var erz = 4;
var mineral = 2;
var ts = 1;

wird das Verhältnis definiert, über das die einzelnen Ressourcenarten umgerechnet werden. Sollen hier Dezimalzahlen verwendet werden so ist das Dezimalzeichen ein Punkt: 1.890

Toleranz[Bearbeiten]

Um Rundungsprobleme auszuschließen kann man eine Toleranz festlegen, in dem ein Angebot noch als gleichwertig betrachtet und somit mit der Farbe "gleich" (Standardmässig blau) versehen wird. Die Angabe erfolgt dabei in Prozent.

Farben[Bearbeiten]

Das Script unterscheidet 3 Farben:

var gut = "#00FF00";
var gleich = "#00FFFF";
var schlecht = "#CC3333";

Die Farbe "gut" wird verwendet, wenn das tatsächliche Verhältnis besser ist, als das durch die Konfiguration oben vorgebene. Standardmässig ist das grün.
"gleich" wird verwendet, wenn das Tauschverhältnis innerhalb der Toleranzen gleich dem geforderten Tauschverhältnis ist. Standardfarbe hier ist blau.
Bleibt als letztes die Standardfarbe rot für den Fall, dass das geforderte Tauschverhältnis schlechter ist, als das gewünschte.

Beispiel[Bearbeiten]

vorher:

Auf ihrer Kolonie "Hera II" ist ein fliegender Händler gelandet und bietet seine Rohstoffe zum Tausch an:
Sir, was sollen wir tun?
Bis zu 500'000 Metall für nur 163'800 Treibstoff.
Bis zu 500'000 Metall für nur 315'000 Minerale.
Bis zu 600'000 Minerale für nur 952'381 Metall.
Bis zu 600'000 Minerale für nur 312'000 Treibstoff.
Bis zu 500'000 Treibstoff für nur 1'526'252 Metall.
Bis zu 500'000 Treibstoff für nur 961'538 Minerale.
Danke, ich habe alles was ich brauche.


nachher:

Auf ihrer Kolonie "Hera II" ist ein fliegender Händler gelandet und bietet seine Rohstoffe zum Tausch an: ... Verhältnis: [ 4 : 2 : 1 ] Toleranz: 2
Sir, was sollen wir tun?
Bis zu 500'000 Metall für nur 163'800 Treibstoff. 125'000 (-38'800)
Bis zu 500'000 Metall für nur 315'000 Minerale. 250'000 (-65'000)
Bis zu 600'000 Minerale für nur 952'381 Metall. 1'200'000 (247'619)
Bis zu 600'000 Minerale für nur 312'000 Treibstoff. 300'000 (-12'000)
Bis zu 500'000 Treibstoff für nur 1'526'252 Metall. 2'000'000 (473'748)
Bis zu 500'000 Treibstoff für nur 961'538 Minerale. 1'000'000 (38'462)
Danke, ich habe alles was ich brauche.

Was bedeuten nun die Zahlen? Nehmen wir die erste Zeile:
Bis zu 500'000 Metall für nur 163'800 Treibstoff. 125'000 (-38'800)
Nach dem gewünschten Umrechnungskurs hätte der Händler für 500k Metall nur (500000/4=125000) 125K Treibstoff verlangen dürfen. Wenn man also diesen Tausch durchführt macht man Verlust: 125000-163800 = -38800. Da sich dieser Wert nicht innerhalb der Toleranz von 2% +/-3276 (163800/100*2=3276) befindet wird der Eintrag rot eingefärbt.
Die Zeile würde blau eingefärbt wenn man 24 (oder mehr) Prozent als Toleranz angibt. (163800/100*24=39312; 39312>38800)

Code[Bearbeiten]

Unterhalb von //Script sollte nichts geändert werden.

// ==UserScript==
// @name           Haendlerrechner_0.60
// @namespace      goetterheimat
// @include 	   *game.horiversum.org/game/main/main.php?cmd=message&send=sent&subcmd=*&action=view*
// Version: 0.2b
// ==/UserScript==

//Settings:(nur hier was verändern)
//Variablen 

//Faktoren immer erz:mineral:teibstoff als ist basis ts
var erz = 4;
var mineral = 2;
var ts = 1;

// in welchen bereich das angebot noch den gleichteueren zugeordnet wird, Ausschalten bei 0
// Bsp: toleranz = 0.05 -> von 1:1.95 bis 2.05 (inklusive) ist der preis gleich!
var toleranz = 2;

//Farben der ausgewerteten Angebote
var gut = "#00FF00";
var gleich = "#00FFFF";
var schlecht = "#CC3333";

//Script
function my_parseNumber(n) {
	if (n.length==undefined) n = "" + n;
	var val = 0;
	var div = 1;
    var komma = div;
    for(var i=0;i<n.length;i++) {
		var ch = n.charAt(i);
		if (ch.match(/^\d$/)) {
		    val = val * 10 + (ch*1);
		    div = div * komma;
		} else if (ch==','||ch=='.') {
		    komma = 10;
		} else if (ch.toLowerCase()=='m') {
		    return Math.floor(val * 1000000 / div);
		} else if (ch.toLowerCase()=='k') {
		    return Math.floor(val * 1000 / div);
        }
	}
	return Math.floor(val/div);
}

function my_numberFormat(strObj){  // Formatierung hinzufügen, aber nur für Zahlen
  var sign="";
  if (strObj<0) sign="-";
  
  var strZahl = my_parseNumber(strObj);
  
  if(strZahl) {
  	var integer = Math.abs(strZahl).toString();
	if (integer.length>3) { // ab Tausenderwerten
		for (var i = integer.length - 3; i > 0; i -= 3) integer = integer.substring (0 , i) + "'" + integer.substring (i);
  		return sign+integer;
  	} else {
  		return strZahl;
  	}
  } else {
  	return 0;
  }
}

var vergleichswerte = new Array(ts/erz,mineral/erz,erz/mineral,ts/mineral,erz/ts,mineral/ts);
var toleranzplus = new Array(toleranz,toleranz,toleranz,toleranz,toleranz,toleranz);
var toleranzminus = new Array(-toleranz,-toleranz,-toleranz,-toleranz,-toleranz,-toleranz);

var td = null;
// '//table[@class="MessageTable"]//td[@class="MessageTableCellLeft"]'
// /html/body/div[5]/div[2]/div[2]/form/table[2]/tbody/tr/td
var tab = document.evaluate('//form//td[@class="MessageTableCellLeft"]', document, null, XPathResult.ANY_TYPE, null );
tab.iterateNext();
td = tab.iterateNext();

if (td != null && td.innerHTML.match(/Fliegender H.ndler/) && td.childNodes.length >=17){
  var i = 0;
  td.childNodes[3].innerHTML += " ... Verhältnis: [ " + my_numberFormat(erz) + " : " + my_numberFormat(mineral) + " : " + my_numberFormat(ts) + " ] Toleranz: " + toleranz;
  for (i = 0;i < 6; i += 1){
    //alert(td.childNodes[(i*2+5)].innerHTML);
	
    var a = td.childNodes[((i+1)*2+5)].childNodes[1];
	var nummer = a.innerHTML.split("nur");
    nummer[0] = nummer[0].replace(/\D+/ig,"");
    var wert = nummer[1].replace(/\D+/ig,"");
	var soll = vergleichswerte[i]*nummer[0];
	var sollplus = (1+toleranzplus[i]/100)*soll;
	var sollminus = (1+toleranzminus[i]/100)*soll;
	
	a.innerHTML = a.innerHTML + " " + my_numberFormat(soll) + " (" + my_numberFormat(soll-wert) + ")";
    if (wert < sollminus) {
      a.setAttribute("style","color:"+ gut);
    } else {
		if (wert<sollplus) {
			a.setAttribute("style","color:"+ gleich);
		} else {
			a.setAttribute("style","color:"+ schlecht);
        } 
    }
	
  }
}