Abfragefunktionen [EXTENDED COMMANDS]

Hier können nach Lust und Laune über alles außerhalb von Fantasya geschrieben werden.
Antworten
Benutzeravatar
nemo
Heerführer
Beiträge: 232
Registriert: Mi 25. Feb 2015, 12:06

Abfragefunktionen [EXTENDED COMMANDS]

Beitrag von nemo » Do 16. Jun 2016, 19:00

Gibt es irgendwo eine Aufzählung, was ich von der Einheit/Region/Partei alles erfragen kann?
War mal.
Sollten selber eine erstellen. Ist notiert. Danke :D
...Also fang ich mal an.

Vorbemerkungen:
1.:
Letztlich sind das, was unten steht, Beispiele, bei denen ich mich auf Einheiten fokussiert habe.
--> Wenn hinter unit .getRegion() kommt, sollte die entsprechende Information auch direkt aus der Region (region.getX()) abgerufen werden können. Ditto Schiffe (ship.getX()) und Gebäude (building.getX()).
Ausprobiert habe ich das aber noch nicht, also nagelt mich nicht darauf fest, sondern korrigiert ggf. einfach, danke.

2.: Kein Anspruch auf Vollständigkeit. Keine Garantie für Kompatibilität mit Magellan -- Ich habe alle angegebenen Formen auf FMagellan getestet. Wer etwas zu ergänzen oder Varianten für Magellan weiß, kann gerne ergänzen, zur Übersichtlichkeit werd ich das dann hier in die Liste einpflegen.

3.: Liste ist Sortiert nach Einheiten, Schiffen (Marines) und Regionen.

Viel Spaß:

EINHEITEN
Wer bin ich?

Code: Alles auswählen

unit.getName()
Gibt aus: Name der Einheit

Code: Alles auswählen

unit.getID()
Gibt aus: Nummer der Einheit.

Was soll ich tun?

Code: Alles auswählen

unit.getOrders()
Gibt aus: Ein nur-lesbares Set, dass alle Befehle (Zeilen) enthällt, die die Einheit zum Ausführungszeitpunkt vorliegen hat.

Talentwert der Einheit:

Code: Alles auswählen

helper.getLevel(unit,"Talentname")
(Umlaute und ß bleiben drin.)
Gibt aus: Talentwert der Einheit im Angegebenen Talent (int).

Inventar der Einheit:

Code: Alles auswählen

helper.getItemCount(unit,"Itemname")
Funktioniert mit: Holz, Eisen, Stein, Gold, Silber, Pegasus, Greif, Greifenei, Schwert, Speer, Armbrust, Bogen, Katapult.....
Gibt aus: Anzahl der Exemplare des angegebenen Items (int).

Personalstärke der Einheit

Code: Alles auswählen

unit.getPersons()
Gibt an: Anzahl der Personen in der Einheit.

Gewicht der Einheit

Code: Alles auswählen

unit.getWeight()
Gibt aus: Gewicht der Einheit (Person PLUS Ladung) IN SILBERLINGEN (= 100 je GE)

Behausung der Einheit:

Code: Alles auswählen

unit.getBuilding()
Gibt aus:
Wenn Einheit in Gebäude
Name des Gebäudes (Gebäudenummer), Gebäudetyp (Gebäudegröße)
sonst
null

Code: Alles auswählen

unit.getBuilding().getName()
Gibt aus: Name des Gebäudes, in dem sich die Einheit befindet
(wenn außerhalb Gebäude: Fehler (Zugriff auf Nullwert))

Code: Alles auswählen

unit.getBuilding().getType()
Gibt aus: Typ des Gebäudes, in dem sich die Einheit befindet
((wenn außerhalb Gebäude: Fehler (Zugriff auf Nullwert))

Code: Alles auswählen

unit.getBuilding().getID()
Gibt aus: Nummer des Gebäudes, in dem sich die Einheit befindet
((wenn außerhalb Gebäude: Fehler (Zugriff auf Nullwert))

Code: Alles auswählen

unit.getBuilding().getSize()
Gibt aus: Größenpunkte des Gebäudes, in dem sich die Einheit befindet
((wenn außerhalb Gebäude: Fehler (Zugriff auf Nullwert))

Wo bin ich?

Code: Alles auswählen

unit.getRegion()
Gibt aus: Name der Region (Koordinaten der Region)

Code: Alles auswählen

unit.getRegion().getName()
Gibt aus: Name der Region (oder null, wenn kein Name vorhanden)

Code: Alles auswählen

unit.getRegion().getType()
Gibt aus: Terrainart der Region

Code: Alles auswählen

unit.getRegion().getID()
Gibt aus: Koordinaten der Region

Marines

Code: Alles auswählen

unit.getShip()
Gibt aus: Schiffsname (Schiffsnummer), Schiffstyp

Code: Alles auswählen

unit.getShip().getName()
Gibt aus: Schiffsname

Code: Alles auswählen

unit.getShip().getID()
Gibt aus: Schiffsnummer

Code: Alles auswählen

unit.getShip().getType()
Gibt aus: Schiffsklasse

Code: Alles auswählen

unit.getShip().getSize()
Gibt aus: Größenpunkte des Schiffes

Zeug in der Region:
Regionssilber

Code: Alles auswählen

unit.getRegion().getSilver()
Gibt aus: Altsilber in der Region (BEVOR die Bauern gearbeitet haben)

Bauern:

Code: Alles auswählen

unit.getRegion().getPeasants()
Gibt aus: Anzahl der Bauern in der Region (int).

Bauernlohn

Code: Alles auswählen

unit.getRegion().getWage()
Gibt aus: Verdienst eines arbeitenden Bauern im Monat (BEVOR er gefuttert hat).

Handelspreise

Code: Alles auswählen

unit.getRegion().getPrices()
Gibt aus: Eine Hashtable (oder eine Map..bin mir nicht ganz sicher), in der den Luxusgütern (mit Umlautumschreibung) sie selbst (mit Umlauten) und der momentane Handelspreis zugeordnet sind. (das einkaufbare Luxusgut hat einen negativen Preis.)

alles andere

Code: Alles auswählen

helper.getResourceAmount("Resourcenname")
(Funktioniert für Holz, Eisen, Stein, Gold, Elefant, Pferd, Kamel, Alpaka, Mastodon)
Zuletzt geändert von nemo am Mi 7. Sep 2016, 14:27, insgesamt 3-mal geändert.
I may go pop -- Excuse me!

Benutzeravatar
PilGaldur
Kundschafter
Beiträge: 26
Registriert: Fr 6. Nov 2015, 15:23

Re: Abfragefunktionen [EXTENDED COMMANDS]

Beitrag von PilGaldur » Mi 7. Sep 2016, 11:38

Hallo,

ich experimentiere immer noch mit Extended Commands. Jetzt stellt sich mir die Frage, kann ich von einer Einheit aus Werte (ITEMS, Skills, Befehle usw) einer anderen Einheit abfragen, um Befehle (LEHRE, GIB) zu generieren?

Benutzeravatar
nemo
Heerführer
Beiträge: 232
Registriert: Mi 25. Feb 2015, 12:06

Re: Abfragefunktionen [EXTENDED COMMANDS]

Beitrag von nemo » Mi 7. Sep 2016, 14:19

PilGaldur hat geschrieben:kann ich von einer Einheit aus Werte (ITEMS, Skills, Befehle usw) einer anderen Einheit abfragen, um Befehle (LEHRE, GIB) zu generieren?
Hi,

Ja, kannst Du. Die Funktion für den Zugriff auf eine andere Einheit (oder, theoretisch, von jedem Container aus auf irgendeine Einheit) geht so:

Code: Alles auswählen

helper.getUnit("Einheit-Nr");
// Bsp.:
helper.getUnit("001")
Und gibt die Einheit selbst aus.
Die angefragten Abfragen (bzw., Möglichkeiten dafür):

Code: Alles auswählen

// ITEMS:
; Variante1: Anzahl
helper.getItemCount(helper.getUnit("Einheit-Nr."), "Item-Name"); Integer: Wie viele angegebene Items die Einheit hat

; Variante2: hat überhaupt?:
helper.getUnit("Einheit-Nr.").getItems().toString().contains("Item-Name"); boolean: Ob das Item im Inventar gelistet ist
; (toString(), weil items() eine Listenübersicht gibt);

// Skills:
helper.getLevel(helper.getUnit(), "Talentname");
helper.getUnit("Nr").getSkills().toString().contains("Skillname");

// Befehle abfragen:
helper.getUnit("Nr").getOrders().toString().contains("Befehl");

// Befehle geben:
helper.setOrder(helper.getUnit("Nr"), "Befehl");

helper.addOrder(helper.getUnit("Nr"), "Befehl");
Nataürlich kannst Du Dir im jeweiligen Container auch einfach für alle betroffenen EInheiten Variabeln setzen, wenn Du die IDs der Einheiten bereits kennst. Sonst müssen die Einheiten im Einzugsbereich halt nach ihren Eigenschaften abgeprüft werden.

Gruß,
Nemo
I may go pop -- Excuse me!

Benutzeravatar
PilGaldur
Kundschafter
Beiträge: 26
Registriert: Fr 6. Nov 2015, 15:23

Re: Abfragefunktionen [EXTENDED COMMANDS]

Beitrag von PilGaldur » Fr 14. Okt 2016, 12:49

Mittels

Code: Alles auswählen

unit.getCombatStatus()
kann man den Kampfstatus abfragen! Die Ausgabe ist eine Zahl. Dabei entspricht:
  • 1=KÄMPFE VORNE
    2=KÄMPFE HINTEN
    4=KÄMPFE NICHT

Benutzeravatar
Araloth
Hauptmann
Beiträge: 53
Registriert: Di 10. Nov 2015, 11:53

Re: Abfragefunktionen [EXTENDED COMMANDS]

Beitrag von Araloth » Mi 29. Mär 2017, 10:15

Hallo,

ich würde gerne wissen, wie ich folgendes Problem in den Griff bekomme.
Problem: "Einheit ist nicht in einem Gebäude" und unit.getBuilding gibt NULL zurück
if (!unit.getBuilding()=null){
if (unit.getBuilding().getType().toString().contains("Leuchtturm")){
helper.addOrder(helper.getUnit(""+geldsammler+""),"GIB "+unit.getID()+" 110 Silber ; Unterhalt: Leuchtturm");}}
Die Abfrage soll für Einheiten im eigenen Leuchtturm, für Einheiten im Freien und für Einheiten in fremden Leuchtturm funktionieren.

Benutzeravatar
nemo
Heerführer
Beiträge: 232
Registriert: Mi 25. Feb 2015, 12:06

Re: Abfragefunktionen [EXTENDED COMMANDS]

Beitrag von nemo » Mi 29. Mär 2017, 17:46

Moin,

Sollte soweit eigentlich funktionieren. Deine Beiden ifs lassen sich mit && zusammenlegen.
und wenn es um den Unterhalt für das Gebäude geht, sollte auch geprüft werden, ob die Einheit der Besitzer ist (sonst kriegt jede Einheit im Gebäude das Silber zugeschustert)

Code: Alles auswählen

&& unit == unit.getBuilding().getOwnerUnit()
... und vllt auch die Parteizugehörigkeit überprüft werden (braucht aber nur, wenn das Skript nicht in der Einheit selbst abgelest ist)
Gruß
nemo
Spoiler!

Code: Alles auswählen

if (!unit.getBuilding()=null && unit.getBuilding().getType().toString().contains("Leuchtturm") && unit == unit.getBuilding().getOwnerUnit())
{
helper.addOrder(helper.getUnit(""+geldsammler+""),"GIB "+unit.getID()+" 110 Silber ; Unterhalt: Leuchtturm");}
I may go pop -- Excuse me!

Antworten

Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 0 Gäste