TerrainPatcher v0.1

» Siedler Map Source Forum » Siedler DEdK Script Forum » TerrainPatcher v0.1

Seiten: 1

bobby
#1
25.03.2014 18:39
Beiträge: 393

TerrainPatcher v0.1

Für alle die sich an diesem Thread beteiligt haben und andere die es vielleicht interessiert:

Ich habe ein Tool erstellt mit dem sich recht einfach Landschaften aus einer Map auslesen lassen, sie zu einem Skript packen und daraufhin mit einem Comfort im Spiel erzeugen lassen.

Eine genaue Erklärung wie das Tool funktioniert findet ihr im Programm selbst.
Herunterladen könnt ihr es auf meiner Seite: http://thesettlers.tk/terrainpatcher.html

Fragen und mögliche Fehler könnt ihr hier posten.

____________________
Tools und Verbesserungen für Siedler: settlers.pro

Neues:
Cutscene Editor
LuaDebugger v0.5.2

Dieser Beitrag wurde von bobby am 06.09.2016 um 19:04 editiert.

Flodder
#2
25.03.2014 18:53
Beiträge: 2608

Hallo bobby,
nachdem ich die TerrainPatcher_v0.1.exe herunter geladen hatte und ausführen wollte, bekam ich folgende Fehlermeldung:


Fehler in Anwendung
Die Anwendung konnte nicht richtig initialisiert werden (0xc0000135). Klicken Sie auf "OK", um die Anwendung zu beenden.



Woran mag das liegen?
Vielleicht am Betriebssystem?
Habe XP

Erwartet die Anwendung eine 64-Bit-Architektur?

LG
Flodder

____________________
Take a Nudelholz und hau it on the Kopp of a bekloppt Person .... to give you a better Gefühl than vorher.

Kalle
#3
25.03.2014 19:50
Beiträge: 1146

... so, nun den lahmen Laptop mit Windoofs-Achtung gestartet und siehe da, der TerrainPatcher arbeitet...

Nur ich bin zu dusselig, die Readme ordentlich zu verstehen.
Nun habe ich einfach zwei Entity's mit dem tollen Namen TP_NameDesBereichs/a und TP_NameDesBereichs/b gesetzt und das kleine Gelände ausgelesen.

Heraus kam eine kleine Lua-Datei, die ich dann in eine leere, gleichgroße Map gesetzt habe (ins Script unten angefügt).

Soweit, so gut dachte ich... Bis zur Fehlermeldung.

Irgendwas funzt noch nicht bei meinen Angaben:

function FirstMapAction()
   InitTerrainPatching({"NameDesBereichs"})
   Tools.ExploreArea (-1,-1,900)   -- Freie Sicht
   PatchRegion("NameDesBereichs")
end

Muss denn nun der TP_NameDesBereichs/a in " " oder ohne " eingegeben sein. Müssen denn beide angegeben werden?
Nachfolgend im Script enthalten wäre noch

function InitTerrainPatching(_regionNames, _luaPath)
  terrainPatcher = {
    regionNames = _regionNames,
    luaPath = _luaPath or "data\\maps\\externalmap\\",
    SaveGameOrig = Framework.SaveGame,
-- etc etc
-- ...
-- und unten der Lua-Export

patchRegions.NameDesBereichs = function()
local terrainData = {
    heightBoundaries = {
        high = { X = 41, Y = 43 },
-- und so weiter



Was mache ich falsch?

Danke in jedem Fall für Deine Mühe und bin sehr gespannt darauf, was man alles damit machen kann...

____________________
Lieber Siedeln statt (fern)sehen.....

bobby
#4
25.03.2014 19:52
Beiträge: 393

Zitat von Flodder:
Hallo bobby,
nachdem ich die TerrainPatcher_v0.1.exe herunter geladen hatte und ausführen wollte, bekam ich folgende Fehlermeldung:


Fehler in Anwendung
Die Anwendung konnte nicht richtig initialisiert werden (0xc0000135). Klicken Sie auf "OK", um die Anwendung zu beenden.



Woran mag das liegen?
Vielleicht am Betriebssystem?
Habe XP

Erwartet die Anwendung eine 64-Bit-Architektur?

LG
Flodder


Eigentlich nicht.
Möglicherweise liegt es an deiner .NET Version. (4.0 benötigt)
Ich habe noch etwas verändert und jetzt reicht .NET 3.5 aus.
Lade es bitte noch mal runter und schau was passiert.
Ansonsten .NET Updaten.

____________________
Tools und Verbesserungen für Siedler: settlers.pro

Neues:
Cutscene Editor
LuaDebugger v0.5.2

bobby
#5
25.03.2014 20:02
Beiträge: 393

@Kalle: Du hast eine Kleinigkeit falsch gemacht.
Das ComfortScript was du über das Programm erhältst (der Button "Comfort-Skript abspeichern" ) muss ins Skript unten ran kopiert werden.

Die Lua Datei mit den Terraindaten die du erhalten hast, muss in die .s5x gepackt werden oder in ein TestVerzeichnis.
Wichtig dabei ist das sie per Script.Load ladbar, aber nicht im normalen Skript enthalten ist.

In der FMA bei InitTerrainPatching muss der Name des Lua Files welches die Terraindaten enthält hinein.
Das könnte dann so aussehen

InitTerrainPatching({"namedesbereichs.lua"})



Standardmäßig wird die Lua Datei von den Comforts so geladen:

Script.Load("data/maps/externalmap/" .. "namedesbereichs.lua")



Wenn du bei InitTerrainPatching als zweites Argument einen Pfad angibst kannst du das Lua File mit den Terraindaten auch aus diesem Verzeichnis laden.

Das mit dem PatchRegion(...) ist korrekt.

____________________
Tools und Verbesserungen für Siedler: settlers.pro

Neues:
Cutscene Editor
LuaDebugger v0.5.2

daniBIGdani
#6
25.03.2014 21:02
Beiträge: 125

Hallo Bobby,

fantastisches Tool unkompliziert bei der Bedienung und eine schöne Möglichkeit Landschaften während des Spiels zu verändern. Mehrere Bereiche verändern funktionieren auch und man kann veränderte Landschaften wieder in die Originale zurückverwandeln über eine 3. Map! Man muss nur aufpassen, dass man nicht PatchRegion(...) in einem endlosen StartSimpleJob aufruft, denn das fährt zu Problemen.

LG Daniel

Kalle
#7
26.03.2014 07:42
Beiträge: 1146

Zitat von bobby:
Möglicherweise liegt es an deiner .NET Version. (4.0 benötigt)
Ich habe noch etwas verändert und jetzt reicht .NET 3.5 aus.
Lade es bitte noch mal runter und schau was passiert.
Ansonsten .NET Updaten.


hmmm... mein XP hat 4.0 und ist sonst auch so eigentlich auf neustem Stand, Tool will aber auf dem PC nicht starten... Habe nun auch die neue Version probiert, aber mit gleicher Fehlermeldung.

Daran allein kann es vermutlich nicht liegen.

____________________
Lieber Siedeln statt (fern)sehen.....

bobby
#8
26.03.2014 18:43
Beiträge: 393

@Kalle: Ich habe gestern die neue Version in einer VirtualBox unter XP ausprobiert und erhielt ebenfalls eine Fehlermeldung.
Nach der Installation von .NET 3.5 hat das Tool dann aber getan...

Handelt es sich bei der Fehlermeldung um die gleiche wie bei Flodder?

@daniBIGdani: Na da es bei dir wohl funktioniert: Hoffentlich findest du Verwendung dafür.

____________________
Tools und Verbesserungen für Siedler: settlers.pro

Neues:
Cutscene Editor
LuaDebugger v0.5.2

Kalle
#9
26.03.2014 18:50
Beiträge: 1146

nein, meine Fehlermeldung ist eine vermutlich von Dir eingebaute:
Shit Happens: System.ComponentModel.Win32Exception:The specifed executable ist not a valid Win32 application. at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo und so weiter und so fort...

____________________
Lieber Siedeln statt (fern)sehen.....

bobby
#10
26.03.2014 19:00
Beiträge: 393

*g*
Bitte die ganze Fehlermeldung wenn es möglich ist

____________________
Tools und Verbesserungen für Siedler: settlers.pro

Neues:
Cutscene Editor
LuaDebugger v0.5.2

Kalle
#11
26.03.2014 19:26
Beiträge: 1146

Shit happens:
System.ComponentModel.Win32Exception: The specified executable is not a valid Win32 application.
at System.Diagnostics.Process.StartWithCreateProcess(ProcessStartInfo startInfo)
at System.Diagnostics.Process.Start()
at System.Diagnostics.Process.Start(ProcessStartInfo startInfo)
at TerrainPatcher.Form1.btnRead_Click(Object sender, EventArgs e)

Ich hoffe, ich habe keinen Buchstaben übersehen...

____________________
Lieber Siedeln statt (fern)sehen.....

totalwarANGEL
#12
26.03.2014 19:31
Beiträge: 2049

Bobby, mir scheint du hast dich nicht ganz an die Win32 API gehalten.

____________________
Liebe ist wie ein Kopfschuss!

bobby
#13
27.03.2014 17:24
Beiträge: 393

Da ich feststellen musst, dass das bbaTool, welches auch im TerrainPatcher intern enthalten ist, nicht mit einer 32 Bit Windows XP Version kompatibel ist wurde sowohl das bbaTool als auch der TerrainPatcher geupdated.

@Kalle: Tut mir leid das du die ganze Meldung abtippen musstest aber jetzt sollte das Tool auch für deinen PC funktionieren

____________________
Tools und Verbesserungen für Siedler: settlers.pro

Neues:
Cutscene Editor
LuaDebugger v0.5.2

Kalle
#14
27.03.2014 18:47
Beiträge: 1146

Richtig.

Also, bei läuft das Tool nun.

Zwar hatte die erste Map, die irgendwie in der Auswahl auftauchte (ich habe mir nicht gemerkt, welche) gleich eine "ellen-lange" Fehlermeldung gebracht (ich habe einen Screenshot, nochmals abtippeln möchte ich nicht, die ist wirklich lang),aber dann mit meiner Testmap und einer x-beliebigen Map (Bereich zuvor markiert) klappte das Ding nun einwandfrei.

Super. Meinen allerherzlichsten Dank im Namen aller hier.

Bin mal gespannt, wer als erster damit eine Map rausbringt.

Inzwischen ist es mir auch gelungen, den Script "abzubiegen", so dass ich die Table in das eigentliche Script integrieren konnte, da ich nicht ganz so der Fan von "Pack mit in das Archiv" bin, da bei jedem nutzen des Editors und abspeichern die zusätzlichen Daten verloren gehen...

Aber für meinen Teil funzt es riesig ! Danke, danke danke !!

____________________
Lieber Siedeln statt (fern)sehen.....

Kalle
#15
28.03.2014 19:23
Beiträge: 1146

neue Meldung per Email an Bobby versendet...

____________________
Lieber Siedeln statt (fern)sehen.....

bobby
#16
29.03.2014 23:26
Beiträge: 393

Version 0.3 ist jetzt online.

Veränderungen:
- Entitäten werden jetzt skaliert
- Es können nun XS_Ambients geladen werden
- Kleine Fehlerquelle wurde beseitigt

____________________
Tools und Verbesserungen für Siedler: settlers.pro

Neues:
Cutscene Editor
LuaDebugger v0.5.2

Kalle
#17
02.04.2014 17:14
Beiträge: 1146

Verbesserungsvorschlag: Rohstoffwerte bei Minen und Haufen fehlen noch, aber muss nicht sein, da diese Werte ja per Script gesetzt werden können.

Aber mal eine andere Frage zum Comfort-Script: kannst Du mir (und anderen, die es auch nicht verstehen) erklären, was es mit der Prüfung auf doppelte ID-Nr. auf sich hat?

Und die Funktion zum vorherigen leeren des Bereichs habe ich auch nicht verstanden. Ich habe erkennen müssen, das die von mir gekürzte Fassung des Scriptes, nur um das Table mit ins Script zu packen, nicht immer ausreicht. Solange das Ziel eine leere Fläche ist, ist alles gut, aber wehe, wenn es im Ziel Bereich schon eine Mine gab....

Hat jemand eine Idee, wie ich einen Bereich von wirklich allen Entities "befreien" kann ?

____________________
Lieber Siedeln statt (fern)sehen.....

bobby
#18
02.04.2014 19:44
Beiträge: 393

Tja mit den Rohstoffen ist das so eine Sache...
1. Sind die gesetzten Rohstoffe in einer so genannten "ScriptCommandLine" gespeichert, welche wohl beim Erstellen der Entity ausgeführt ist.
Den Ressourcen "Amount" dort auszulesen ist... nervig.
2. Wird das "Patchen" einer Region dadurch deutlich langsamer, für jede Entity eine neue Abfrage benötigt wird.

Aufgrund dessen werd ich es vermutlich nicht implementieren, es wäre ja von Hand auch nicht so aufwendig, denn so viele Minen gibt es ja nicht und Ress-Haufen schauen so oder so "komisch" aus.

Zitat von Kalle:
Aber mal eine andere Frage zum Comfort-Script: kannst Du mir (und anderen, die es auch nicht verstehen) erklären, was es mit der Prüfung auf doppelte ID-Nr. auf sich hat?



Beim Löschen der Entities im zu "patchenden" Bereich ging es mir darum das Ganze möglichst effizient zu lösen. Deshalb suche ich mir nicht mittels einer Funktion wie "GetEntitiesInArea" die Entitäten im rechteckigen Bereich sondern es werden alle auf der Karte vorhanden Entities durchgeloopt. Ist das Entity im Rechteck wird es gelöscht.
Um das zu bewerkstelligen braucht man zu erst die 1. Entity und die letzte Entity.
Die erste Entität hat die Id 65537 was einer Binärzahl von 1 0000 0000 0000 0001 entspricht.
Um auf die letzte Id zu bekommen muss man so lange eine neue Entity erstellen bis die erstellte Entity keine "doppelte Id" mehr hat.

Nun zu den doppelten Id's:

Da im Spiel öfters Entitäten gelöscht werden (Doodads beim überbauen, Soldaten beim kämpfen, Gebäude beim abreißen), wären die 30000? (hab mal gehört dass das das Maximum ist, aber noch nie ausprobiert) bald aufgebraucht.
Deshalb werden die Id's von "zerstörten" Entities doppelt verwendet.
Eine doppelte Id lässt sich anhand dessen errechnen:

DoppelteId = EigentlicheId + 65536 * (Anzahl der bisherigen Zerstörungen dieser Id)


In Binär lässt sich das ganze viel einfacher veranschaulichen:
Angenommen wir haben das 5. Entity auf der Karte.
dieses Entity hätte also die Id: 65541 oder 1 0000 0000 0000 0101
Dabei entsprechen die ersten 16 Bit der Binärzahl, der Entity Id und die nächsten 16 Bit der Anzahl der Wiederverwendungen der Id. Hängt man die 32 Bit zusammen erhält man die EntityId -> 65541
Weiter im Beispiel: Die 5. Entity wird nun zerstört und eine neue wird erstellt.
Intern sucht das Spiel nach einer zerstörten Id um sie wieder zu verwenden. Findet es keine bekommt sie die höchste Id.
Findet sie aber eine, so wie in unserem Beispiel die Id 65541 wird in Binär in den zweiten 16 Bit um eins hochgezählt.
Die Anzahl der Verdopplungen wäre also:
10 -> 2
und die Id immer noch:
101 -> 5
Das wird jetzt zusammengehängt und es entsteht: 10 0000 0000 0000 0101 -> 131077

Puh komplizierte Sache...
Hoffentlich hats jemand verstanden.

____________________
Tools und Verbesserungen für Siedler: settlers.pro

Neues:
Cutscene Editor
LuaDebugger v0.5.2

Kalle
#19
03.04.2014 07:16
Beiträge: 1146

Danke. Also, mir leuchtet diese Erklärung ein, in jedem Fall leichter, als der "Schwimmende Punkt" bei den Flieskommazahlen.

Woher habt ihr immer solches Wissen/Ansätze mit der Verwaltung der ID-Nummern? Stand das irgendwo oder habt ihr das durch tüfteln und beobachten herausgefunden?

Klar, es macht weniger Aufwand, die ID's durchzugehen, als auf der Map innerhalb einer Bereiches nach Entity's zu suchen.

Mal sehen, ob ich damit weiterkomme. Danke nochmals...

PS: Das mit den Werten von von Minen schrieb ich ja auch, dass man das vernachlässigen könnte.

____________________
Lieber Siedeln statt (fern)sehen.....

bobby
#20
03.04.2014 18:24
Beiträge: 393

@Kalle: Mal so ne Frage nebenbei, verwendest du das hier?

____________________
Tools und Verbesserungen für Siedler: settlers.pro

Neues:
Cutscene Editor
LuaDebugger v0.5.2

Kalle
#21
03.04.2014 19:46
Beiträge: 1146

nicht immer, aber immer öfter...

Nein, im ernst: teils, teils.

Bei kleinen Demo- und Probemaps nutze ich auch den internen Editor. Bei größerern Script-Teilen macht es keinen Sinn mehr, da verwende ich Notepad++ V4.4, aber noch (!) ohne Syntax und weiteren Hilfen... Habe aber bei Pilgrims Rache erhebliche Zeitverluste gehabt, die Flodder "mal so nebenbei" festgestellt hatte...

Ist eines meiner nächsten, dringlichen, Aufgaben: Notepad++ erweitern...


Für alle "Neulinge" auf diesem Gebiet: das externe Script macht es wirklich, aber wirklich !, bei einigen Dingen sehr viel einfacher...

____________________
Lieber Siedeln statt (fern)sehen.....

bobby
#22
03.04.2014 20:02
Beiträge: 393

Na dann weißt du ja von was ich rede.
Du hast ja gesagt du hast keine Lust die Lua-Dateien immer wieder in die Map zu packen?
Das musst du eigentlich auch nicht, du kannst die Lua Dateien einfach neben dein Hauptscript legen und bei der Init Funktion meiner Comforts als 2. Argument den Pfad angeben. Damit werden die Lua-Dateien von dort geladen.
z.B. so:

InitTerrainPatching({"testterrain.lua"}, "C:\\LuaSkripte\\test\\")


Durch das, dass die Skripte nicht im Hauptskript stecken werden sie auch nicht mitgespeichert was Speicherplatz und Zeit spart.
So viel Aufwand ist es ja nicht. Ich glaube du tust dir mehr an wenn du meine Funktion umstellen willst.

____________________
Tools und Verbesserungen für Siedler: settlers.pro

Neues:
Cutscene Editor
LuaDebugger v0.5.2

Seiten: 1

SiteEngine v1.5.0 by nevermind, ©2005-2007
Design by SpiderFive (www.siedler-games.de) - English translation by juja

Impressum