Seite 1 von 3

CbC: Dokumentation-Thread

Verfasst: Di 7. Mär 2017, 14:45
von nemo
Stand: 15. März

Code-Thread:
http://forum.fantasya-pbem.de/viewtopic.php?f=7&t=192

Feedback-Thread:
http://forum.fantasya-pbem.de/viewtopic.php?f=7&t=191

Vorschläge und Konzept-Ideen:
http://forum.fantasya-pbem.de/viewtopic.php?f=7&t=194

Ansonsten dreht sich dieser Thread darum, dass ich CbC hier einigermaßen übersichtlich dokumentiere. Daher bitte nicht antworten, danke :)

DISCLAIMER: Wie unter "bekannte Probleme" vermerkt, bin ich kein professioneller Coder. Ich verwende CbC selber, sodass sichergestellt ist, dass mich jegliche Fehler als erstes treffen (ob ich sie nun mitbekomme oder nicht). Verwendung auf eigenes Risiko und eigene Verantwortung. (Im Zweifelsfalle legt ein neues Magellan-Profil zum Testen an oder pickt Euch eine einzelne Region heraus (diese Einschränkbarkeit wird unten beschrieben)).
Ferner wird empfohlen, regelmäßig in der Dokumentation nachzuschlagen, den Feedback-Thread zu beobachten und die Metabefehle höchstens ein mal pro Runde durchführen zu lassen (bzw., bei einer testweisen (Zweit-)Ausführung vorher die bereits gegebenen Befehele zu speichern bzw. zu exportieren, um darauf wieder zugreifen zu können.) -- jedenfalls für mittlere und große Parteien (wegen Übersicht-behalten).

Inhalt
- Einleitung
-- Allgemeines
-- Features
-- Update-Zyklus
-- Lizensbestimmungen
- Changelog
-- 19.03.2017
-- 14.03.2017
-- 05.03.2017
-- 25.02.1917
- Einführung Metabefehle
- Einbau, Ausführung, Update
- Meta-Kategorien und Ausführungsreihenfolge
-- Tipps und Tricks

Die Einzelnen Metas:

- Getimete Metas
-- +magbest
-- +segeln
-- +next
--- +route
-- +rotate
-- +rotaMax
-- +rotaL
-- +lernen
-- +anlernen
-- +rotaP

- Harte Metas:
-- +forst
-- +herde
-- +unterhalte
-- +silreg
-- +treibe
-- +killer

- Interaktive Metas:
-- +lehre
-- +lerne

- Weiche metas;
-- +rek
-- Lager-Metas
--- +lager
--- +sLag
--- +nLag
--- +fLag
--- +mLag
--- +rLag
--- +tLag
-- Reservierungs-Metas
--- +ruestung
--- +nkw
--- +bogner
--- +wagner
--- +reeder
-- +bewache
-- +gib

CbC: Einleitung

Verfasst: Di 7. Mär 2017, 14:56
von nemo
CbC (Command by Comments) geht auf eine Idee von Tsaria zurück und dreht sich darum, auf Fantasya das Spielerleben mit FMagellan leichter zu machen.
Vorbild in Funktionalität und Design ist das Perl-Programm Forlage von Georg Edelmeyer, der das Spiel leider verlassen und sein metadrei so umgestaltet hat, dass Forlage momentan nicht erreichbar ist.

Ursprüngliches Ziel war es, Automatisierungen, Abkürzungen und bedingte und unbedingte Routinen auch jenen zugänglich zu machen, die keine Zeit oder nicht die Nerven haben, sich in die Untiefen der erweiterten Befehle zu versenken.
Die Grenzen von Forlage sollen dabei überwunden werden, unter FMagellan nicht so ganz sinnvolle Funktionen eingespart (Forlage selbst bedient auch Text-Reporte) und neue Utilities eingeführt werden.
Mittlerweile geht es auch darum, Forlage in absehbarer Zeit zu ersetzen, da es nicht mehr von der Ursprungsquelle beziehbar und der Support schon länger eingestellt ist.

Die vorgelegte Alpha-Version ist so weit entwickelt, dass ich davon ausgehe, dass sie alles enthällt, was man unbedingt braucht.
Allerdings ist sie noch unvollständig. Außerdem betreibe ich meine Partei auf eine bestimmte Weise, sodass ich nicht ausschließen kann, dass bestimmte Situationen, die zu Fehlern, Glitches oder sonstigem unvorhergesehenem Verhalten führen, die bei mir einfach nicht auftauchen.

Features:
- Weitgehende Kompatibilität mit Forlage (die beiden kommen sich meistens nicht in die Quere, auch wenn einzelne Meta-Befehle den selben Namen tragen -- harte und getimte Metas können aber Anweisungen, die von Forlage stammen, überschreiben)
- Lager-Funktionen für 6 Kategorien (Silber, Nahkampfwaffen, Fernkampfwaffen, Baumaterial, Rüstungsteile, Transportmaterial)
- Reservierungsfunktionen für MACHE (Waffenbau, Bogenbau, Schiffbau, Rüstungsbau, Wagenbau)
- Zuordnung von Lehrern zu Schülern (ohne "mal zehn"-Fixierung)
- Kontrolle von Wald-, Tier-, Altsilber- (Stash-) und Bauern-Beständen
- Vorausplanung über beliebig viele Runden
- Aufgaben-Rotationen (deren Einzelne Komponenten nicht direkt aufeinander folgen müssen)
- rotierendes Lernen
- rotierendes MACHE
- rhythmisch aussetztende autmoatische Bestätigung
- Autobestätigung für längere LERNE-Vorgänge
- automatiesche TARNE EINHEIT-Auslösung
- Meldung über "Getarnt als"-Partei im Befehlsblock der Einheiten
- u.v.m

Update-Zyklus
Wenn Fehler gemeldet werden und ich zum Reparieren komme, wird die gefixede Version je Woche vor dem ZAT im Code-Thread zur Verfügung gestellt. Ansonsten (also, wenn ohne Fehler) ist meine Zielstellung, alls zwei bis drei Wochen eine Version mit neuen Funktionen einzustellen.
Updates der Dokumentation werden im Feedback-Thread vermeldet werden.

Lizensierung
IHR DÜRFT den unter "CbC" bzw. "Command By Comments" bezeichneten Quellcode kopieren, kompilieren und verwenden, und zwar gratis und umsonst.
IHR DÜRFT den unter "CbC" bzw. "Command By Comments" bezeichneten Quellcode auch verändern und die veränderte Version (== "das Derivat") selbst verwenden, als auch veröffentlichen. Im Falle der Veröffentlichung einer Abgewandelten Version von CbC bestehe ich jedoch darauf, dass
1. ich über das Derivat informiert werde und Leserechte erhalte (bin halt neugierig);
2. das Derivat eindeutig als nicht-identisch mit CbC markiert wird (== lasst Euch selber einen Namen für Euer Kind einfallen 8-) )
IHR DÜRFT meinetwegen sogar mit dem unter "CbC" bzw. "Command By Comments" bezeichneten Quellcode bzw. einem Derivat davon Geld verdienen, sofern
1. Ich über das betreffende Vorhaben im Vorfeld informiert werde;
2. Ich einen dem Anteil meiner Arbeit am Endprodukt mindestens zur Hälfte entsprechenden bzw. im Vorhinein unter den Beteiligten verhandelten Anteil am Umsatz zugesichert bekomme (Plainspeech: Don't make money on me without me, or else :mrgreen: )

(Zum Thread-Anfang)

CbC: Changelog

Verfasst: Di 7. Mär 2017, 14:56
von nemo
09. April 2017
- +lernen und +anlernen zu +anlernen zusammengelegt, was einen Konflikt zwischen +lerne und +lernen ausbügeln sollte.
-- gelöschtes Skript: lernen(Unit,ArrayList)
-- ACHTUNG: Ab dieser Version wir +lernen nicht mehr ausgeführt -- sofern sie nicht anderweitig bestätigt werden, werden die betroffenen Einheiten von selber auffallen.
-- geändertes Skript: anlernen(Unit,String)
-- ACHTUNG: Syntax-Änderung für den Folgebefehl-Bereich von +anlernen: Dieser wird jetzt mit Bindestrich abgegrenzt (bei den Doppelpunkten zu bleiben, hätte bei mehreren Folgebefehlen, die ihrerseits Folgebefehle haben, zu Fehlfunktionen geführt) -- auch hier sollten evtl. betroffene Einheiten sich mit "falsch geschrieben" von selbst melden.
- +anlernen nimmt jetzt auch Talente mit ß und Umlauten an.
-- geänderte Variabeln: String skillListMitUmlaute; String skillListOhneUmlaute
- Verschiebung der Ausführung von +anlernen direkt hinter +magbest (auf die Weise kann +anlernen zusammen mit anderen Metas verwendet werden, wenn der Lernprozess durch diese gesteuert werden soll)
-- Geändertes Skript: implementMetas_cbc_Alpha(Region,String)
- Neues Lagermeta +hLag für Handelsgüter. Funktioniert genau so, wie bisher der automatische Luxusgüter-Einzug mit HANDEL. ACHTUNG: Dieser ist jetzt per default abgeschaltet (boolean luxuseinzug (unter dem Zeitstempel))
-- Geändertes Skript: implementMetas_cbc_Alpha(Region,String)
- Ausführung der Lager- und Reservierungs-Metas insgesamt nach ganz hinten verlegt (genauer: Hinter den Suchlauf für die Submetas, sodass Abgaben jetzt auch bei Ausführung langer Alternativbefehle etc. abgeführt werden).
-- Geändertes Skript: implementMetas_cbc_Alpha(Region,String)
- +magbest ist jetzt als Submeta geeignet
-- Geändertes Skript: magbest(Unit) zu magbest(Unit,String)
- +route Erweitert:
-- 1. Statt über die Koordinaten kann man nun auch über den Namen der Region (oder ein Kürzel davon) prüfen lassen;
-- 2. Jeder Region können jetzt beliebig viele Befehle zugeordnet werden. Was eine Kombination von vertikaler und horrizontaler Reise (undganz viele andere kreative Sachen) ermöglicht. Trennzeichen zwischen den Einzelnen Befehlen ist Doppelpunkt.
-- Geändertes Skript: route(Unit)
- Typo bei +mLag beseitigt. Aus irgendeinem Grund hatte mein jeweils erster +nkw lächerliche Mengen an Steinen bekommen. Stellte sich heraus, dass in der Endberechnung des Steinbedarfes zwei Minuszeichen hintereinander standen, was sich als "addiere Differenz" o.ä. auszuwirken scheint. Jetzt ist es nurnoch eins.
-- Geändertes Skript: mLager(Unit)

19. März 2017
- Neues getimetes Meta: +route. Koppelt das Setzen von Bewegungsbefehlen an eine Kontrolle der Koordinaten, auf denen die Einheit gerade steht. Bei Schiffen mit Sturmtreffern weniger fummelig als der Fantasya-Befehl ROUTE, generell für alles geeignet, was sich bewegen soll.
-- neues Skript: route(Unit)

14. März 2017
- vorletzte Woche waren die import-Anweisungen am Anfang doppelt. Hat zwar trotzdem alles funktioniert, muss ja aber nicht.
- sLag und Einzug bei HANDEL gegen mehrfache Durchführungen abgesichert und Möglichkeit eingebaut, beides global zu sperren (die booleans silberverteilung bzw. luxuseinzug unter dem Zeitstempel zu "false" ändern)
--geändertes Skript: implementMetas_cbc_Alpha(Region,String)
- +next gefixed: Wie es aussieht, mochte das Skript es nicht, wenn +next0 "nur" einen Befehl zum Auslösen hatte.
--geändertes Skript: next(Unit)
- +reg: Doppelausführung wegkorrigiertz und es kann jetzt als Submeta angewendet werden. (auch für +rotate, +next und als Alternativbefehl für harte Metas)
-- geänderte Skripte: implementMetas_cbc_Alpha(Region,String); regulator(Unit,Region,String)
- Doppelausführung von Lager-, Reservierungsmetas und +bewache gefixed.
-- geänderte Skripte: implementMetas_cbc_Alpha(Region,String)
- Einen Fehler behoben, der bei +lerne und +lehre zur Verweigerung von Abgaben an +lager (etc) geführt hatte.
-- geänderte Skripte: implementMetas_cbc_Alpha(Region,String)
- Einen Fehler behoben, der bei +next mit Metabefehl verhinderte, dass der Metabefehl in der auslösenden Runde ausgeführt wurde.
-- geändertes Skript: next(Unit)

05. März 2017
- +treibe gefixed: Kommt jetzt auch wirklich ohne Argumente aus. TREIBE wird jetzt auch wirklich auf das angegebene begrenzt (hat sich vorher eher wie +silreg verhalten). Typo im Default des Alternativbefehlt eliminiert.
Verändertes Skript: treibe(Unit,String)
- +gib gefixed: In einem Anfall fehlender Übersicht hatte ich eine ältere Variante des Skriptes zu CbC einsortiert (die erforderte noch Kommas zwischen den Items) und die neuere vorsichtshalber gelöscht. Ist jetzt wiederhergestellt. Außerdem wurde die Ausführung von +gib hinter +bewache verschoben (damit Lager umgehend auf +gib ansprechen können)
Geänderte Skripte: gib(Unit,String); implementMetas_cbc_Alpha(Region,String)
- +forst gefixed: In der Implementierung hatte ein Ausdruck gefehlt, sodass nummerische Argumente nicht erkannt werden konnten.
Geändertes Skript: forst(Unit,ArrayList)
- automatischer Einzug von Luxusgütern bei vorhandensein von "HANDEL" im Befehlsblock: implementiert. Hatte ich schlicht vergessen.
Geändertes Skript: implementMetas_cbc_Alpha(Region,String)
- +next gefixed: Durch eine falsche Zahl war der erste Befehl eines ausgelösten +next doppelt gegeben worden (wobei ich bei mir auch dreifache ausführungen gesehen habe)
Geändertes Skript: next(Unit)
- Hintergrundänderung an monoHerde(Unit,String). Funktionalität bleibt gleich, es frisst jetzt aber etwas weniger Speicher.

25.02.2017
- Ein umbenannter Metabefehl: +potter heißt jetzt +reeder (reserviert Holz für Schiffbau)
- Unterhaltskosten für Gebäude werden nicht mehr aus der Regeldatei abgefragt, sondern über eine mitgelieferte Tabelle. Gewährleistet Verwendbarkeit des Codes unter Magellan (statt FMagellan).
Verändertes Skript: sLager(Unit)
- +lernen und +lerne: Kleines Fixing in studyComplex(Region), das ausgelernte Einheiten mit +lerne davon abhalten sollte, noch Lehrer zu bekommen.
Verändertes Skript: studyComplex(Region)
- +lerne und +lehre: Einbau einer Kontrollfunktion um zu verhindern, dass alle Lehrer sich auf die selbe Schülereinheit stürzen (gab es schon vorher, keine Ahnung, warum die nicht aktiv war).
Verändertes Skript: studyComplex(Region)
- Abfang eines Fehlers, der bei +magbest (x) ohne Angabe von (y) zu einer Ausnahme geführt hatte.
Verändertes Skript: magbest(Unit)
- Einführung von subMetas/ Verkettung von Metabefehlen (s.u. unter Metabefehle: Einführung).
Veränderte Skripte: Viele. implementMetas_cbc_Alpha(Region,String) macht jetzt pro Region zwei Suchläufe, Diejenigen Skripte für die betreffenden Metas, welche sich ihre Argumente zum Meta selber suchen wurden angepasst, um ;; + zu berücksichtigen.
- neues getimtes Meta +segeln: Verhindert, dass Passagiere auf dem Wasser lange Befehele durchzuführen versuchen.
Neues Skript: segeln(Unit,String)
- Neues getimtes Meta +anlernen: bringt eine Reihe angegebener Talent auf TW=1 und bestätigt die Einheit, bis sie fertig ist.
Neues Skript: anlernen(Unit,String)
- Neues Hartes Meta +killer, das Bauern aus Regionen vertreibt (dachte ursprünglich, das wäre mit +silreg 0 abgedeckt, ist es aber nicht).
Neues Skript: killer(Unit,String)
- Neues weiches Meta +rek zum Bauern wegsammeln.
Neues Skript: regulator(Unit,Region)
- Zwei zusätzliche allgemeine Hilfsfunktionen: lerntage(Unit,String) und modifiedLerntage(Unit,String). Sind noch nicht in Verwendung, werden aber für +lerne eine Rolle spielen.


(Zum Thread-Anfang)

Einführung Metabefehle

Verfasst: Di 7. Mär 2017, 15:00
von nemo
Beim Meta-Befehl geht es darum, Kommentare, die vom Server ja nicht ausgewertet werden, zu nehmen und zur Steuerung der Partei zu verwenden.
Forlage und CbC sind dabei eher „einfach“ gestrickt (etwa wie ein Videorecorder), indem sie feste Funktionen bereit stellen, andere, wie der E3CommandParser für Eressea stellen schon eher eine eigene Programmiersprache dar.
Um einen Meta-Befehl von einem normalen Kommentar zu unterscheiden, muss er irgendwie markiert werden. CbC verwendet dafür das Plus-Zeichen „+“.
Ein Meta-Befehl unter CbC beginnt also immer mit „// +“, gefolgt vom Stichwort, das die Anweisung darstellt (im folgenden nurnoch kurz „Meta“ genannt) und zur Auslösung des gewünschten Verhaltens führt.
Einige Metas funktionieren einfach durch Anwesenheit, andere benötigen noch Argumente. In dieser Dokumantation stehen die Variabeln dieser Argumente in Klammern ( ) und optionale Angaben in eckigen Klammern [ ].

Seit der letzten Februar-Version werden subMetas unterstützt. Dabei handelt es sich darum, dass in einer Zeile, die einen Metabefehl enthält, direkt ein anderer Meta-Befehl gegeben werden kann (sie sind dem ersten Meta in der Zeile dann untergeordnet). Gekennzeichnet wird dieser durch ";; +".
Metas, die einen Alternativbefehl zulassen, können genau ein subMeta als Alternativbefehl haben.
Bsp:

Code: Alles auswählen

// +herde Pferd 0 ;; +herde Kamel 0 UNTERHALTE
+next und +rotate lösen ihre subMetas aus, wenn sie jeweils dran sind. Ein ausgelöstes +next wandelt seine subMetas zu Hauptmetas um und löscht andere vorhandene Metabefehle aus (außer +segeln, +magbest, +bewache und natürlich +next).
Bsp:

Code: Alles auswählen

// +rotate1 ;; +herde Kamel 0 ;; +herde Pferd 0 LERNE Pferdedressur
// +rotate2 ;; +herde Pferd 0 ;; +herde Elefant 0 LERNE Pferdedressur
// +rotate3 ;; +herde Elefant 0 ;; +herde Kamel 0 LERNE Pferdedressur
+lernen kann mehrere subMetas als Folgebefehl haben und wandelt diese in Dauermetas um.
Außer hinter +next werden getimte Metas nicht als subMetas berücksichtigt.
Die Lager- und Reservierung-Metas und +bewache unterstützen noch keine subMetas und können (zusammen mit +rek) auch noch nicht als subMetas gesetzt werden.


(Zum Thread-Anfang)

CbC: Einbau, Ausführung, Update

Verfasst: Di 7. Mär 2017, 15:05
von nemo
Einbau
Da CbC nur als unkompilierter Code existiert, kopiere man zuerst den gesamten Text im Code-Feldern im Ablagethread, am einfachsten durch einen Klick auf "ALLES AUSWÄHLEN", Strg+"C".

Danach muss der gesamte Text in die Bibliothek von Magellan. Dorthin kommt man am einfachsten auf diesem Weg:
Aufruf Bibo.jpg
Aufruf Bibo.jpg (18.02 KiB) 4535 mal betrachtet
Coursor in das aufpoppende Textfeld setzen, Strg+"V", und dann ein Klick auf den Button "Speichern" oder "Alles speichern".

(Bevor mich jemand anschreit: JA, das ist für Leute geschrieben, die die erweiterten Befehle bisher nicht mit der Kneifzange angefasst haben...wie ich vor 18 Monaten 8-) )

Was die Zeilen am Anfang angeht, die mit "import" beginnen: Die braucht man nur einmal, sollten sie in der Bibliothek also schon vorhanden sein, kann das, was eben verdoppelt wurde, also wieder entfernt werden.

Jetzt muss noch dafür gesorgt werden, dass die eigene Partei auch weiß, dass und wann sie die soeben abgelegten Skripte ausführen soll. Hierfür öffne man (oder mer) den Parteicontainer (im "Übersicht"-Tab von Magellan erst die eigene Partei markieren und dann Rechtsklick)
Ansteuerung Parteikontainer.jpg
Ansteuerung Parteikontainer.jpg (75.26 KiB) 4537 mal betrachtet
und kopiere folgendes in das aufpoppende Textfeld:

Code: Alles auswählen

cbc_Alpha(container.getID().toString());
(Diese Aktivierungszeile lässt sich tatsächlich in beliebigen Containern ablegen, wenn man seine Parteinummer von Hand selber einträgt (Großbuchstaben werden dabei meiner Beobachtung nach nicht akzeptiert))
Will man das alles erstmal in einer Region testen, rufe man die ausgewählte Region auf (wie oben, nur mit der Region statt der Partei) und gebe

Code: Alles auswählen

implementMetas_cbc_Alpha(container, [factionID]);
ein (wobei [factionID] durch die eigene Parteinummer (in Anführungszeichen) zu ersetzen ist -- Bsp an meiner Partei:

Code: Alles auswählen

implementMetas_cbc_Alpha(container, "zwrg");
)
Jetzt nochmal auf den "Speichern" oder "Alles Speichern"-Button klicken und die Bibliothek für die erweiterten Befehle kann schon wieder zugemacht werden.

Ausführung
Skriptausführung_alle.png
Skriptausführung_alle.png (6.82 KiB) 4537 mal betrachtet
Update
Um auch tatsächlich die neueste Version von CbC zu verwenden, sind die selben Schritte, wie unter "EInbau" zu befolgen, mit Ausnahme der Ansteuerung im Partei-Container. Jede Version enthält im Kopf das Datum ihrer Einstellung:

Code: Alles auswählen

////////{ CbC: Command By Comments /////////
//07.03.2017//


(Zum Thread-Anfang)

CbC: Kategorien und Bearbeitungsreihenfolge

Verfasst: Di 7. Mär 2017, 15:06
von nemo
Die Ausführung läuft regionsweise. Erst werden die normalen Metabefehle (mit // +) abgearbeitet, dann Submetas (die mit ;; +, die beim ersten Durchlauf an einen Zeilenanfang gekommen sind)
Getimete Metas:
(Verändern sich mit der Zeit oder laufen irgendwann aus)

// +magbest
// +anlernen
// +segeln
// +next
// +route
// +rotate (und // +rotaMax)
// +rotaL (rotierendes LERNE)
// +rotaP (rotierendes MACHE)

Harte Metas:
(Setzen lange Befehle und löschen daher andere Befehle – aber keine Kommentare)

// +forst
// +herde
// +unterhalte
// +silreg
// +treibe
// +killer

interaktive Metas:
(Einheiten unterhalten sich mit anderen Einheiten und setzen lange Befehle)

// +lehre
// +lerne

weiche Metas:
(Alles andere, was ausschließlich zu kurzen Befehlen führt)

// +rek
// +bewache
// +gib
// +segeln
// +lager (für 6 Kategorien) und Reservierungs-Metas für MACHE

(Zum Thread-Anfang)



Tipps und Tricks
-Eselsbrücken für die Lager-Funktionen:
-- Silber-Nahkampfwaffen-Fernkampfwaffen: snf-SNaFu = "Situation Normal, all Fucked up" (und 10 Punkte an jede(n), d. weiß, woher das Zitat stammt :) )
-- (Bau-)Material-Rüstungsteile-Transportzeug: MRT = MagnetResonanzTomograph. (Die Dinger sind unvergesslich...mMn)

-Belieferungs-Prioritäten vom Baumaterial-Lager:
Das hängt an einer einzelnen Liste (ArrayList mLagerBedient) , und die habe ich nach weit vorne im Quellcode verlegt, damit sie leichter zu finden ist. Die voreingestellte Priorisierung ist (von hoch zu niedrig): (Nahkampf)Waffen, Bögen&Armbrüste, Rüstungsteile, Wägen&Katapulte, Schiffe
Um das neu einzustellen, müssen die Zeilen, die mit
mLagerBedient.add
beginnen, neu angeordnet werden: Je weiter Oben die Zeile, desto höher die Priorität des Reservierung-Metas.

-Auto-Vervollständiger:
Wie vermutlich schon bemerkt, kann man, wenn man eine Befehlszeile mit einer bestimmten Zeichenfolge anfängt, die Tabulatortaste drücken und bekommt dann eine Vervollständigung herein.
Dieses Feature lässt sich Customisieren:
AutoVerf.jpg
AutoVerf.jpg (131.15 KiB) 4519 mal betrachtet
... und zwar für alles mögliche. Als forlage noch supported wurde, hatte ich "#" als Schlüssel für "// #". 1-0 für "// #next1" bis 10, die UpperCases für "// #rotate" und "m" für "// #magbest". Jetzt hab ich die (leider leider) alles auf das Pluszeichen umgestellt. Manchmal braucht das Tabulator-Makro etwas länger, aber insgesamt spart es Zeit und Gelenkverschleiß.



(Zum Thread-Anfang)

+magbest

Verfasst: Di 7. Mär 2017, 15:08
von nemo
// +magbest [(x)] [(y)] [, (Kommentar)]
Nicht als subMeta geeignet (außer bei +next)
Lässt keine subMetas zu.
(x) und (y) sind natürliche Zahlen.
Tut: Bei jedem Durchlauf wir (x) um 1 herunter gesetzt. Solange (x) größer als Null ist, wird die Einheit bestätigt. Erreicht (x) Null, wird es auf (y) gesetzt, die Einheit bleibt unbestätigt und ggf. wird eine Befehlszeile mit (Kommentar) gesetzt (Kann also ein Befehl sein, der dann ausgeführt werden soll).
Ist (y) nicht angegeben, wird es auf Null gesetzt. Ist (y) Null, wird die Zeile mit +magbest gelöscht und ggf. (Kommentar) gesetzt, sobald (x) Null erreicht.
Sind weder (x) noch (y) angegeben, wird die Einheit einfach in jeder Runde bestätigt.
Bsp:
// +magbest 5 10
Behandelndes Skript: magbest(Unit)


(Zum Thread-Anfang)

+segeln

Verfasst: Di 7. Mär 2017, 15:08
von nemo
// +segeln (Befehl)
Nichts als Submeta geeignet (außer nach +next) -- wird zwar zugelassen, sieht für mich aber sinnlos aus, weil es dann kein persistenter Befehl ist.
Unterstützt Submetas als (Befehl).
Setzt voraus: Einheit darf nicht Captain eines Schiffes sein
Sonst: Faulenzt der Captain.
Tut: An Land: (Befehl) wird gesetzt.
Auf See: FAULENZE wird gesetzt.
ACHTUNG: Auch Bewegungsbefehle sind lang und werden entsprechend behandelt. Das zu ihrem Wirksamwerden notwendige VERLASSE (des Schiffes nämlich) wird NICHT automatisch gesetzt.
Bekannte Fehlerquelle: Landregionen mit "Ozean" im Namen werden bei Segeln FAULENZE auslösen.



(Zum Thread-Anfang)

+ next und +route

Verfasst: Di 7. Mär 2017, 15:08
von nemo
// +next(n) (Befehl) [: (Befehl1) : (Befehl2)…]
Nicht als subMeta geeignet.
Wandelt subMetas zu Dauermetas um.
Löscht Dauermetas aus (außer +magbest, +next, +segeln und +bewache).
Tut: Bei jedem Durchlauf wird n um 1 verringert. Sobald n = 0, wird im Befehlsblock der Einheit eine Zeile mit (Befehl) geschrieben und die Zeile mit "+next" gelöscht. Optional können weitere Befehlszeilen angegeben werden. Trennzeichen hierfür ist Doppelpunkt :. Andere Befehle (auch lange!) werden gelöscht, Kommentare bleiben erhalten.
Bsp.:
// +next1 LERNE Hiebwaffen
// +next2 LERNE Tarnung
// +next3 TREIBE : TARNE Einheit
Behandelndes Skript: next(Unit)



(Zum Thread-Anfang)

+route (x, y, z) (bewegungsbefehl) [; (kommentar)]
+route (Region) Befehl [: Befehl1 ...] [; Kommentar]
Wird nicht als Submeta ausgeführt.
Gibt Submetas in (Befehl) weiter.
Wird nicht von +next ausgelöscht.
Setzt voraus: Einheit darf nicht überladen sein. Wenn auf Schiff: Einheit muss Captain sein (offensichtlich).
Sonst: Erfolgloses NACH.
Tut: Ist (entgegen seinem Namen) kein reiner Bewegungsmeta -- sobald die Einheit in der angegebenen Region steht, werden die angegebenen Befehle gesetzt, ob das nun wirklich Bewegungsbefehle sind oder nicht (um auch vertikale Bewegungen mit BETRETE zu ermöglichen -- was es also letztlich wirklich macht ist, Befehle oder Metabefehle in bestimmten Regionen auszulösen).
Pro Region eine Zeile.
ACHTUNG: Die Region ist in Klammern anzugeben.
Dies kann auf eine von zwei Arten geschehen:
1.: Mit Koordinaten. Dann gilt: Kommas und Leerzeichen müssen drin bleiben. Negative Vorzeichen als Bindestrich vor die Zahl.
2.: Mit Namen oder einem Kürzel davon. "Kürzel" kann dabei alles sein vom ersten Buchstaben bis zum kompletten Namen der Region. Funktioniert nicht mit Ozeanfeldern (die sowieso alle gleich heißen und deswegen mit Koordinaten angegeben werden sollten.) - Voraussetzung zum richtigen Funktionieren ist, dass Jeder Name bzw. jedes Kürzel nur einmal in den +route-Zeilen der Einheit vorkommt.
Jede Region kann nur einmal in allen +route-Metas einer Einheit vorkommen (wenn mehrfach, dann wird das letzte Vorkommen alle vorherigen überschreiben).
Bsp.e:

Code: Alles auswählen

// +route (Beil) nach o o o
// +route (3, 1, 1) nach sw so
// +route (4, 0, 1) nach w w w
// +route (1, 0, 1) nach no

Code: Alles auswählen

// +route (1, 1, 1) BETRETE Gebaeude aaa : nach o : ; runter in den Keller und eins zur Seite
// +route (28, 99, -1) nach w ; auf dem Rückweg
// +route (27, 99, -1) BETRETE Gebaeude bbb ; wieder nach oben

Code: Alles auswählen

nach o o o no no no o so so o
// +route (14, 17, 1) ;; +anlernen Unterhaltung - UNTERHALTE


(Zum Thread-Anfang)

+rotate

Verfasst: Di 7. Mär 2017, 15:09
von nemo
// +rotate(n) (Befehl) [: (Befehl1) : (Befehl2)…]
Nicht als subMeta geeignet (außer bei +next).
Setzt voraus: andere Zeilen mit +rotate(n1), +rotate(n2) …
Sonst: Passiert nichts, außer, dass die Befehle immer neu gesetzt werden.
Tut: Bei jedem Durchlauf werden n, n1, n2… um 1 herabgesetzt. Wenn ein n=0, werden die angegebenen Befehle gesetzt und n wieder hochgesetzt. Andere Befehle (auch lange!) werden gelöscht, Kommentare jedoch nicht. n, n1, n2… müssen nicht direkt aufeinander folgen. Gibt es nach einem Durchlauf kein n=0, werden einfach die alten Befehle beibehalten. Soll eine Einheit also etwa drei Runden lang Steuern einteiben und dann eine Runde Ausdauer lernen, reichen zwei +rotate-Zeilen, statt vier. Um die so erreichte Rhythmisierung aufrecht zu erhalten, wird +rotaMax (s.u.) gebraucht.
Bsp.:
// +rotate1 LERNE Hiebwaffen
// +rotate2 LERNE Tarnung
// +rotate3 TREIBE : TARNE Einheit
Behandelndes Skript: rotate(Unit)



(Zum Thread-Anfang)