Handel - ein Überblick

Der Handel ist wichtig. Er wird oft auch von erfahrenen Eressea-Spielern unterschätzt. Er ist eine Silberdruckmaschine. Seine Einnahmen übersteigen regelmässig die Einkunftsmöglichkeiten aus Steuern und Unterhaltung, bis die Burgen gut ausgebaut sind.

Zentrale Figur des Handels ist der Händler (// script Handeln). Er fordert jede Runde Waren zum Verkauf an und bezieht sie direkt von den Transportern und Depots. Sind die Waren in der Region nicht verfügbar, versucht der TransportManger, diesen Bedarf überregional zu decken.

Als besondere Parameter sind für den Händler "Vorrat" und "Prognose" zu beachten, die normalerweise für die ganze Insel bzw den ganzen Report per SetScripterOption gesetzt werden. Der Prognose-Parameter sollte bei etablierten Inseln höher gesetzt werden, damit die Händler für weitere Runden im Vorraus Waren anfordern. Dies lastet die Transporter besser aus und verbessert die allgemeine Verteilung der Waren, sodaß selbst kleine Regionen "hinter" großen Regionen (gesehen von einer Warenquelle aus) häufiger Waren erhalten.

Der normale Händler ermittelt für sein Gebiet (TradeArea) den Bedarf mit einer einfachen Überschußrechnung: Wieviel kann von einem Gut gekauft und wieviel verkauft werden - daraus ergibt sich die Einkaufsmenge aller Händler des Gebietes. Soll aus script-fremden Gründen eine manuelle Menge festgelegt werden, dient dazu die Option menge.
Jedoch kann die Rechnung weiter beeinflusst werden, insbesondere von Vorräten. Vorräte werden meist für eine manuell eingerichtete Handelsrouten in andere Gebiete oder Inseln angelegt. Bei ihnen wird festgeleget, welche Menge eines Gutes pro Runde zusätzlich im Gebiet gekauft werden soll, um einen angegebenen Vorrat zu erreichen. Diese Menge erhöht natürlich die von den Händlern einzukaufende Menge.
Sollte das Transportsystem versagen ist eine Situation denkbar, in der die Handler weiter einkaufen aber die Güter nicht transprotiert werden. Übersteigt die Menge im Depot das Dreifache des geplanten Regionseinkaufes, so gilt das Lager als in der Region als voll und es wird nicht mehr überkauft. Es kommt somit auch dann zu keiner "Blasenbildung".
Oft soll aber auch ein gewisser Puffer im System etabliert werden, quasi immer ein wenig mehr eingekauft werden als gebraucht. Dies kann ab Version 0.48 mit dem TA-Vorratsfaktor eingestellt werden (über SetScripterOptions). Liegt der bei 150%, werden Vorräte in den Regionen erst berücksichtigt, wenn sie 150% des wöchentlichen gebietsweiten Einkaufes übersteigen.

ToDo: maximaler Überkauf, TradeAreaConnections (erledigt, s.u.)

Fiete, 22.12.2010

Handel zwischen Inseln

Das regionale Grundkonzept des Handels in FFTools2 ist nicht die Insel, sondern das TradeArea (TA). Im Normalfall entspricht aber jede Insel auch genau einem Tradearea. In exotischen Fällen (Große Insel mit sehr schmalem Verbindungssteg zwischen beiden Teilen, Insel durch unfreundliches Gebiet unterbrochen bzw geteilt) können auch mehrere TAs auf einer Insel eingerichtet werden. (Sie dazu auch entsprechende Option beim Händler)

Insofern müsste die Überschrift hier eigentlich heißen: Handel zwischen TradeAreas. Automatische Transporter werden grundsätzlich nur in ihrem TA aktiv. der Handel zwischen TAs ist vordefiniert auf Schiffsverkehr zwischen festgelegten Regionen und sogar anhand festgelegter Einheitennummern. Die benötigten Schritte werden hier zusammenfassend dargestellt:

1. Verbindung definieren
Pro Region gibt es stationäre Einheiten, sei es der Wahrnehmer, ein Tarner, welche als Referenz für eine feste Verbindung zu einem TA genutzt werden können. Um die Warenströme ein wenig auseinander zu halten, empfiehlt es sich, nicht das Depot oder den Händler dafür zu nutzen. Denn die für die Verbindung zwischen TAs, den TradeAreaConnections (TAC), genutzten Einheiten werden benutzt, um die notwendigen Vorräte für die Handelsverbindung anzulegen. Dazu werden ganz klassische Scriptkommandos automatisch erzeugt, hauptsächlich natürlich der Vorratsbefehl.
Die eigentliche TAC wird zwischen 2 Einheiten definiert, die sich permanent in den jeweiligen anlandefähigen Regionen der TAs aufhalten. Einer der beiden Einheiten wird der setTradeConnection-Befehl erteilt, in welchem auf die andere Einheit als Zieleinheit verwiesen wird. Welcher der beiden Einheiten den Befehl erhält, ist völlig egal, nur muss jeweils die andere Einheit als Ziel genannt werden.

// script setTradeAreaConnection Ziel=abcd Name=Insel1-Insel2

Der genutzte Name ist dabei nicht Makulatur, sondern als Referenz für diese TAC bei weiteren Befehlen zu benutzen. Er sollte daher eindeutig und tippfehlerunanfällig sein.

2. Auswirkungen einer Installierten TAC
Bei beiden genutzten Einheiten erscheinen in den Befehlskommentaren entsprechende Hinweise, dass die TAC erfolgreich eingerichtet wurde:

; Verbindung zum TA: Rigel(Name: Orion-Rigel)

Recht früh im Scriptablauf analysiert FFTools2 die Versorgungssituation der TAs insgesammt, derzeit lediglich in Hinsicht auf das Angebot und die Nachfrage nach Handelsgütern. Dazu werden pro TA alle mit TACs verknüpften weiteren TAs berücksichtigt und versucht, auftretende Unterversorgung in einem TA durch Überschüsse in einem verbundenen TA auszugleichen. Dabei wird nicht das komplette Netzwerk untersucht, sondern lediglich die direkten Verbindungen genutzt. Ein Handelsausgleich zwischen 2 TAs über ein drittes Hinweg ist nicht vorgesehen, eine direkte Verbindung ist notwendig. Sehr wohl wird aber bei der Optimierung der Abstand der Regionen berücksichtigt und die daraus resultierende Anzahl von Runden, die für einen Transportweg benötigt werden. Dabei werden übrigends 6 Regionen/Runde als Geschwindigkeit angenommen.
Überschüsse ergeben sich aus tatsächlich vorhandenen sehr großen Lagerbeständen (bei Depots) und nicht genutztem Überkaufpotential. Die Ausgleichsrechnung liefert den Transportbedarf zwischen den TAs pro Runde. In einer ersten Übersicht werden die aktuellen Überschüsse und Bedürfnisse der angeschlossenen TAs zusammengefasst:

; Weihrauch (925)<->: Rigel(-183) Delta(1660) I2F(1348)
; Seide (11411)<->: Rigel(-183) Delta(-346) I2F(-203)
; Öl (2251)<->: Rigel(-183) Delta(7375) I2F(1302)
; Myrrhe (3245)<->: Rigel(14712) Delta(2729) I2F(1536)
; Juwel (-315)<->: Rigel(73191) Delta(-97) I2F(1446)
; Gewürz (4461)<->: Rigel(32100) Delta(299) I2F(-203)
; Balsam (-315)<->: Rigel(5402) Delta(-346) I2F(-203)

Negative Zahlen stellen Bedarf dar, positive Zahlen stellen einen Überschuss dar. Mit dem aktuellen TA ("Orion") sind 3 weitere TAs verknüpft: Rigel, Delta und I2F. Ganz Links ist die Versorgungssituation des aktuellen TAs dargestellt, Orion hat ausser bei Juwelen und Balsam eine Überschusssituation. Das Ergebnis nach der Optimierung beinhaltet dann ausschliesslich die resultierenden Warenströme, wiederum pro Runde berechnet:

; Weihrauch (742)<->: ->Rigel:183
; Seide (10882)<->: ->Rigel:183 ->Delta:346
; Öl (2068)<->: ->Rigel:183
; Myrrhe (3245)<->:
; Juwel (0)<->: <-Rigel:315
; Gewürz (4258)<->: ->I2F:203
; Balsam (0)<->: <-Rigel:315

Ganz Links sind die resultierenden Versorgungsstände nach dem berechneten Transport dargestellt - einige Überschusse wurden kleiner, die Mängel werden durch Lieferungen anderer TAs ausgeglichen (haben jetzt den Wert 0). So erhält Orion von Rigel pro Runde 315 Juwelen und 315 Balsam, gibt aber an Rigel je 183 Seide, Weihrauch und Öl ab. Diese Zahlen spiegeln sich auch direkt in den angelegten Vorräten wieder. Die Information dazu hat auch die genutzte Einheit in ihren Befehlen:

; TAC: Vorratsscript hinzugefügt: [source=TAC, Ware=Öl, Summe=732, proRunde=183, prio=50, prioTM=99]
; TAC: Vorratsscript hinzugefügt: [source=TAC, Ware=Weihrauch, Summe=732, proRunde=183, prio=50, prioTM=99]
; TAC: Vorratsscript hinzugefügt: [source=TAC, Ware=Seide, Summe=732, proRunde=183, prio=50, prioTM=99]

Die TACs nach Delta und I2F nutzen ganz offensichtlich andere Einheiten als Referenz, denn ein Vorrat für Gewürz wird bei dieser Einheit nicht angelegt. Die Höhe des Mehreinkaufes pro Runde entspricht genau der Liefermenge (183), die Gesamtsumme des Vorrates entspricht in diesem Fall dem 4-fachen der Transportmenge pro Runde, ein derzeit fester Schlüssel, der aber bei steigender Entfernung zwischen den TACs auch steigt. Die Priorität, die dem Transportmanager (TM) mitgeteilt wurde, ist fixiert auf 99. Sie liegt damit knapp unterhalb der Untergrenze des Standardbereiches für Handelstransporte, der ja 700-100 beträgt. Dies bewirkt, dass Waren erst dann für den Handel zwischen den TAs transportiert werden, wenn der Transportbedarf innerhalb des TAs gedeckt ist.
Im TA Orion werden nun die Händler systematisch 183 mehr Öl, Weihrauch und Seide einkaufen und diese Mehrmengen werden ihren Weg zu unserer Einheit finden, denn bei dieser ist der entsprechende Vorrat definiert. Doch wie kommen die jetzt auf ein Schiff?

3. Ein Schiff der TAC zuordnen
Ein Schiff muss explizit einer TAC zugeordnet werden, damit es Warenströme dieser TAC transportieren kann. Dabei ist der Kapitän selbst für die Route des Schiffes verantwortlich, denn so können bestimmte Wege und Zwischenstationen definiert werden. Er wird nur jeweils in den Zielregionen einer TAC Güter gemäß der obigen Optimierung anfordern, in anderen Regionen wird er lediglich seine Ladung zu bewahren versuchen (mit geringer Prio). Sollte also in einer als Zwischenstation genutzen Region Bedarf an seinen transportierten Waren bestehen, wird er sie auch abgeben.
Die Funktionalität der Warenübernahme einer TAC wird durch folgenden Befehl eines Kapitäns aktiviert:

// script onTradeAreaConnection name=Orion-Rigel

Mehr ist es nicht. Damit wird dieses Schiff genau der benannten TAC zugeordnet. Entscheidend ist weiterhin, wieviel Gewicht dieses Schiff für die TAC reservieren soll. Dort sei auf den Befehl setKapa verwiesen, der dies genau festlegt. Der Standardfall (Kapitän ist allein auf dem Schiff und hat keine mauellen Sonderaufträge) wird natürlich so aussehen:

// script setKapa gewicht=schiff

Damit wird die gesamte freie Kapazität des Schiffes als Beladungsgrenze des Kapitäns genutzt - zuerst wird er sie für Lohn einsetzen, dann vielleicht noch für Material, anschliessend bleibt Raum für die TAC. Eine entsprechende Rückmeldung findet sich in den Befehlen des Kapitäns:

; SetKapa: erkannte Kapazität: 2970 GE
; setKapa Schiff auf: 3000 GE

Damit der Kapitän errechnen kann, wieviel des Transportbedarfes auf ihn entfällt, berücksichtigt er weitere Schiffe, die dieser TAC zugeordnet sind. Sollte er das einzige Schiff auf dieser TAC führen, würde sich ein Bild ähnlich diesem ergeben:

; TAC: 630 Balsam nach Orion mit Prio 51 angefordert
; TAC: 630 Juwel nach Orion mit Prio 51 angefordert
; TAC: Anteil der Unit nach Kapa:100,00%
; GE insgesammt benötigt: 2928 (1464GE -> Rigel,945GE -> Orion; Dist: 1)
; Summe Transporter 2970GE: Mannen (kjb8) in Wassernase (-51, 33)(2970)

(Das Schiff befindet sich derzeit in der Hafenregion auf Rigel (s.o.), es sind 315 Balsam und Juwel pro Runde zu transportieren. Bei einer Fahrdauer von 1 Runde pro Richtung ist das Schiff alle 2 Wochen vor Ort und muss somit 630 Stück der Güter laden.)
Die benötigten und verfügbaren Gewichtseinheiten sind aufgeführt und somit ist ersichtlich, ob genügend Schiffe zugeteilt worden sind, oder zu viel Schiffsraum existiert.
In den jeweiligen Zielregionen fordert der Kapitän die berechneten Summen mit prio 51 an und entnimmt somit den Vorräten die gelagerten Mengen - sofern die Waren da sind. Er wird auch mit weniger Ladung, ja sogar komplett ohne Ladung losfahren - ein "Warten auf Ladung" ist nicht implementiert.

Die oben angesprochene notwendige Reiseroute des Schiffes wird üblicherweise mit genau diesem Befehl festgelegt, und so ergibt sich als Standard-Befehlssatz eines Kapitäns eines Schiffes auf einer TAC:

// script material
// script Lohn 3
// script setKapa gewicht=schiff
// script onTradeAreaConnection name=Orion-Rigel
// script ROUTE -48,30 -51,33

(wobei Material hochgradig optional ist, nur "meine" Matrosen haben Waffentalent und tragen Ausrüstung..., und Lohn muss angepasst werden, bei weiten Strecken sollte der Wert ruhig höher sein)

Der mithin grösste Unterschied im Handel zwischen TAs zum Handel innerhalb eines TAs ist derzeit, dass die Transportrouten für TACs manuell definiert und festgelegt werden. Automatische Transporter bewegen sich innerhalb ihres TAs komplett frei und suchen sich ihre Be- und Entladestellen selber - soweit ist der Handel zwischen TAs noch nicht.


4. Manuell MEHR über eine TAC transportieren
Bisher beschränkt sich das automatische Beladen auf Handelswaren. Manuell ist aber auch die Ausweitung auf andere Güter möglich. Sollen z.B. Kräuter (in der Itemgroup Kraut zusammengefasst) mit transportiert werden, so muss eine Einheit manuell die Kräuter anfordern und sammeln und der TAC muss dieser zusätzliche Transportaufwand mitgeteilt werden, natürlich mit Art, Menge und Prio:

// script Vorrat Ware=Kraut menge=100000 prio=110
// script UseTradeAreaConnection name=Orion-Rigel Ware=Kraut Menge=10000 prio=120

Die mit dem Vorratsscript gesammelten Waren werden dann mit Hilfe der Schiffe auf der TAC "Orion-Rigel" abtransportiert. Die Reihenfolge der Berücksichtigung der Waren geschieht wie üblich nach Priorität, wobei alle Waren der automatischen Vorratsscripte mit Prio 51 angefordert werden. (Die Vorräte selbst fordern regionsintern mit 50 an, regionsextern über den TM mit 99.) Der Kapitän meldet die zusätzliche Berücksichtigung spartanisch mit folgender Zeile:

; TAC-Usage: 10000 Kraut nach Rigel mit Prio 120 angefordert

Es sei nochmal darauf hingewiesen, dass dem Kapitän lediglich der Name der TAC und die Reiseroute sowie die Gewichtsbeschränkung "mitgegeben" werden muss. Die Inhalte der TAC werden aus der Optimierung des Handels zwischen des TAs und ggf manuellen "Mitgaben" mittels UseTradeAreaConnection generiert - nicht per direkten Befehlen beim Kapitän
(Natürlich können dem Kapitän zusätzliche Befehle inkl Requests erteilt werden, diese werden auch innerhalb des normalen Warenpools berücksichtigt.)

5. Zusammenfassung
Die Gelddruckmaschine Handel kann über die Grenzen von TAs hinaus installiert werden. Mit setTradeAreaConnection werden Verbindungen fest definiert, die von Kapitänen mit onTradeAreaConnection genutzt werden. Zusätzliche Transporte können mit useTradeAreaConnection hinzugefügt werden. Ergebnis ist ein funktionierender Warenaustausch zwischen den TAs.

Fiete, 31.03.2012