Feldzustand in Lua auslesen

Eure Foren für alle Diskussionen rund ums Thema Modding.
Balu_
Posts: 62
Joined: Tue Dec 06, 2016 5:52 pm

Feldzustand in Lua auslesen

Post by Balu_ »

Hallo,

ich probiere mich gerade an einem Mod der nicht gut umzusetzen ist, ohne den aktuellen Zustand bestimmter Felder auszulesen.
Also im Prinzip genau die Informationen die man sich auf der Kartenansicht einblenden kann.
Welche Frucht gepflanzt ist, wie der Zustand des Bodens ist. Den Wachstumsstand usw. So das man am besten sogar eine prozentuale Anzeige errechnen könnte.

Ich suche mich bereits seit Tagen durch die Script Doku und durch die files verschiedener Mods um schlauer zu werden.
Am einfachsten wäre es natürlich wenn die Daten der Kartenansicht bereits hübsch aufbereitet in einem Table zu finden wären :D
Aber da ich das fast bezweifle, habe ich gedacht könnte ich über die Felddefinitionen, den fruitTypeManager usw. die Daten auslesen indem ich Methoden wie:
-setDensityCompareParams(id, "between", desc.minHarvestingGrowthState+1, desc.maxHarvestingGrowthState+1);
-getDensityParallelogram(g_currentMission.fruitsList[1].id, field.x0, field.z0, field.widthX, field.widthZ, field.heightX, field.heightZ, 1, 4);
benutze und so an die Daten komme.
Dabei ist nur das Problem, das beide Methoden mir als nil zurückgemeldet werden. Sind die nur in FS17 noch verfügbar gewesen?

Was mich leider auch noch nicht wirklich zum Ziel geführt hat, war die Methode:
-FSDensityMapUtil.getFruitArea(1, field.x0, field.z0, field.widthX, field.widthZ, field.heightX, field.heightZ, true, false);
Die habe ich auf alle Feldpartitionen (field.getFieldStatusPartitions()) angewendet und erkenne auch Unterschiede je nach Wachstumszustand aber ganz selbsterklärend waren die Werte für mich leider noch nicht. Wenn ich einen Teil der Pflanzen gegrubbert habe, hat sich teilweise nichts an den Werten geändert, das hat mich dann stutzig gemacht. Kann mir da jemand weiterhelfen?

FieldUtil.getFruitArea() sieht auch nach einer passenden Funktion aus um den Fruchtzustand des Feldes auszulesen, aber auch dort ist die Parameterliste ellenlang und Parameter wie 'terrainDetailRequiredValueRanges' und 'terrainDetailProhibitValueRanges' nicht ganz selbsterklärend :D

Hat sich mit der groben Thematik schon jemand im LS19 auseinander gesetzt?
Ich wäre hier für jede Hilfe bzw. Schubs in die richtige Richtung dankbar :-)
twizzle
Posts: 1000
Joined: Wed Aug 06, 2008 10:10 pm
Location: Irgendwo zwischen Ni + NRÜ

Re: Feldzustand in Lua auslesen

Post by twizzle »

Ich habe selbst gar keine Ahnung davon, aber es gibt einen Mod mit dem man sich einige Felddaten anzeigen lassen kann.
Vielleicht hilft dir das ja auf die richtige Fährte zu kommen?

Code: Select all

https://www.modhoster.de/mods/fielddata-mod-zeigt-felddaten-menge-preis-uvm
mfg twizzle
Balu_
Posts: 62
Joined: Tue Dec 06, 2016 5:52 pm

Re: Feldzustand in Lua auslesen

Post by Balu_ »

Vielen Dank für die Antwort. Da habe ich schon nachgesehen. Der einzige halbwegs relevante Wert dort ist der Fruittype der auf dem Feld wächst, der ist gut zu finden. Aber die tatsächlichen Zustände wie ich sie brauche werden dort nicht abgefragt. Aber trotzdem danke!
Balu_
Posts: 62
Joined: Tue Dec 06, 2016 5:52 pm

Re: Feldzustand in Lua auslesen

Post by Balu_ »

Ok,

im GDN Forum hat mich ein freundlicher Nutzer auf die Funktion:
FSDensityMapUtil.getFieldStatusAsync()
hingewiesen.
Diese wird von FieldInfoDisplay genutzt. Und das Resultat wird an:
FieldInfoDisplay.onFieldDataUpdateFinished()
geschickt.

Das konnte ich wiederum abfangen mit:
FieldInfoDisplay.onFieldDataUpdateFinished = Utils.appendedFunction(FieldInfoDisplay.onFieldDataUpdateFinished, MyMod.onFieldDataUpdateFinished);

Die Informationen sind auch genau das was ich gesucht habe:
2019-01-21 12:59 ----fruits :: table: 0x018d38e97b50
2019-01-21 12:59 ---- 1 :: 0
2019-01-21 12:59 ---- 2 :: 0
2019-01-21 12:59 ---- 3 :: 0
2019-01-21 12:59 ---- 4 :: 0
2019-01-21 12:59 ---- 5 :: 2
2019-01-21 12:59 ---- 6 :: 0
2019-01-21 12:59 ---- 7 :: 0
2019-01-21 12:59 ---- 8 :: 0
2019-01-21 12:59 ---- 9 :: 0
2019-01-21 12:59 ---- 10 :: 0
2019-01-21 12:59 ---- 11 :: 0
2019-01-21 12:59 ---- 12 :: 0
2019-01-21 12:59 ---- 13 :: 0
2019-01-21 12:59 ---- 15 :: 0
2019-01-21 12:59 ----fertilizerFactor :: 0.5
2019-01-21 12:59 ----cultivatorFactor :: 0
2019-01-21 12:59 ----fieldArea :: 121
2019-01-21 12:59 ----weedFactor :: 0
2019-01-21 12:59 ----ownerFarmId :: 0
2019-01-21 12:59 ----fruitPixels :: table: 0x018d7295a278
2019-01-21 12:59 ---- 1 :: 0
2019-01-21 12:59 ---- 2 :: 0
2019-01-21 12:59 ---- 3 :: 0
2019-01-21 12:59 ---- 4 :: 0
2019-01-21 12:59 ---- 5 :: 121
2019-01-21 12:59 ---- 6 :: 0
2019-01-21 12:59 ---- 7 :: 0
2019-01-21 12:59 ---- 8 :: 0
2019-01-21 12:59 ---- 9 :: 0
2019-01-21 12:59 ---- 10 :: 0
2019-01-21 12:59 ---- 11 :: 0
2019-01-21 12:59 ---- 12 :: 0
2019-01-21 12:59 ---- 13 :: 0
2019-01-21 12:59 ---- 15 :: 0
2019-01-21 12:59 ----plowFactor :: 0
2019-01-21 12:59 ----farmlandId :: 30
2019-01-21 12:59 ----needsPlowFactor :: 1
2019-01-21 12:59 ----needsLimeFactor :: 0

Mit Hilfe der fieldArea und der fruitPixels kann ich so sogar in Prozent angeben, wie weit beispielsweise chon gesät wurde.
Hat nun jemand eine gute Idee oder gar einer der GIANTS Mitarbeiter eine Info welche Parameter die Funktion
FSDensityMapUtil.getFieldStatusAsync()
braucht? Diese ist leider nicht dokumentiert.
Ich habe bereits die Feldnummer, Feld rootNode und die Table für das Feld an sich genutzt. Ohne Erfolg.
Probiert habe ich es mit der FSDensityMapUtil.getFieldStatus(), da ich vermeiden wollte das es noch an dem weiteren Parameter für den Callback scheitert.

Jemand eine gute Idee?
Ich probiere es heute Abend noch weiter.
Wenn ich etwas erreiche melde ich mich nochmal. Vielleicht sind die Infos ja noch für andere Modder interessant.
Post Reply