S5Hook & GUI Editor
» Siedler Map Source Forum » Siedler DEdK Script Forum » S5Hook & GUI Editor
Seiten: Zurück 1 2 3 4 5 6 7 Nächste Seite
andre111
|
#26 13.06.2014 16:56 Beiträge: 220 |
Hm ok, wenn ich allerdings die selbe Entity xml zum Beispiel in die patchex packe funktioniert alles problemlos
bobby
|
#27 14.06.2014 21:55 Beiträge: 393 |
Naja... die Funktionen sind natürlich noch nicht komplett ausgereift
Du kannst mir die patchex ja mal schicken dann schau ich es mir an.
____________________
Tools und Verbesserungen für Siedler: settlers.pro
Neues:
Cutscene Editor
LuaDebugger v0.5.2
bobby
|
#28 19.06.2014 16:40 Beiträge: 393 |
Bedienungsanleitung
Es gibt nun eine recht ausführliche Bedienungsanleitung zum GUI Editor.
Hier zu finden: Editor Guide
Hoffentlich sehen wir bald ein paar neue Widgets.
@andre111: Kann es sein das du die Entität zum selben Zeitpunkt erstellst wie du ReloadEntities() aufrufst?
____________________
Tools und Verbesserungen für Siedler: settlers.pro
Neues:
Cutscene Editor
LuaDebugger v0.5.2
Dieser Beitrag wurde von bobby am 24.03.2016 um 14:19 editiert.
Zedeg
|
#29 20.06.2014 11:36 Beiträge: 428 |
Das Problem sitzt in 99% der Fälle vorm Pc...
Der Patch 1.06 funktioniert nun (mal wieder hatte der Feuervogel die Hände im Spiel gehabt ), in ItM gehen die Arbeiter in ihre Werkstätten (endlich) und die Demomap funktioniert (tolle Musik-spielt nur leider parallel zur normalen, wenn man einen Spielstand lädt).
Ich habe mit dem Patch 1.05 den GUI-Editor v0.1 geöffnet. Widgets einfügen oder alte aus ingame.xml laden ging, doch die Texturen kamen nicht. Wollte ich manuell neue laden, kam selbst bei den spieleigenen Texturen ,,Invalid Path´´. Aha, funktioniert also doch nicht mit dem alten Patch. Doch jetzt habe ich mit Patch 1.06 und dem GUI-Editor v0.2 immer noch das gleiche Problem.
____________________
Journalisten erkundigen sich bei Wissenschaftlern meist nicht nach Grundlagen, sondern eher nach Ergebnissen und Folgerungen. Das erklärt womöglich auch, warum sich Forschungsberichte in den Medien so häufig als feststehende Erkenntnisse lesen, nicht aber als Ideen, Entdeckungen oder Indizien, um die es sich genau genommen in den meisten Fällen handelt. -Axel Bojowski
mcb
|
#30 20.06.2014 12:36 Beiträge: 1472 |
Entpack die Texturen mal neu und lösch die alten. Eventuell als Admin starten. Vielleicht hilfts.
bobby
|
#31 20.06.2014 14:15 Beiträge: 393 |
Zitat von Zedeg:
Ich habe mit dem Patch 1.05 den GUI-Editor v0.1 geöffnet. Widgets einfügen oder alte aus ingame.xml laden ging, doch die Texturen kamen nicht. Wollte ich manuell neue laden, kam selbst bei den spieleigenen Texturen ,,Invalid Path´´. Aha, funktioniert also doch nicht mit dem alten Patch. Doch jetzt habe ich mit Patch 1.06 und dem GUI-Editor v0.2 immer noch das gleiche Problem.
Wo du das Programm das erste mal gestartet hast, hast du ja einen leeren Ordner als Arbeitsverzeichnis gewählt.
Geh mal in den Ordner und lösche alles was dort drinnen ist.
Dann starte den Editor und geh unter Settings auf Set Working Directory. Wähle den Ordner neu aus und es sollte gehen.
Falls nicht schau noch mal in den Ordner und wenn der leer ist, dann stimmt irgendwas mit deiner Registry nicht und wir schauen weiter.
____________________
Tools und Verbesserungen für Siedler: settlers.pro
Neues:
Cutscene Editor
LuaDebugger v0.5.2
Zedeg
|
#32 20.06.2014 15:10 Beiträge: 428 |
Und zu diesen 99% der Fälle gehöre ich..
Dabei habe ich das schon zweimal ausprobiert. Warum 's erst jetzt klappt... seufz. Auf jeden Fall habe ich schon eine Idee, was ich einbauen könnte.
____________________
Journalisten erkundigen sich bei Wissenschaftlern meist nicht nach Grundlagen, sondern eher nach Ergebnissen und Folgerungen. Das erklärt womöglich auch, warum sich Forschungsberichte in den Medien so häufig als feststehende Erkenntnisse lesen, nicht aber als Ideen, Entdeckungen oder Indizien, um die es sich genau genommen in den meisten Fällen handelt. -Axel Bojowski
daniBIGdani
|
#33 23.06.2014 12:08 Beiträge: 153 |
SetString Funktion?
Hi,
gibt es eine Möglichkeit eigene Strings in bestehende .xml Dateien einzufügen und wie packe ich es dann in meine Map?
Mit S5Hook.ChangeString kann ich ja jeden bestehenden Text verändern, aber eben keine Neuen in die .xml Datei schreiben.
LG Daniel
bobby
|
#34 23.06.2014 14:12 Beiträge: 393 |
Was für Strings und XML Dateien meinst du genau?
Grundsätzlich gilt: Entity Definitionen aus den XMLs können geladen werden, es ist aber noch nicht sehr stabil.
____________________
Tools und Verbesserungen für Siedler: settlers.pro
Neues:
Cutscene Editor
LuaDebugger v0.5.2
daniBIGdani
|
#35 23.06.2014 16:56 Beiträge: 153 |
Ich meine die Texte.xml Dateien z.b. menutop.xml in der data.bba des Orginal Spiels. Hier würde ich gerne einen neuen Eintrag hinzufügen ala:
<string id="Find_hero1" mod="20041102152922" MasterMod="" WorkInProgress="true" CharacterName="" Recordingneeded="" Comments="" TimeSync="" TimeSyncDuration="">@color:180,180,180,255 Dario @cr @color:255,255,255,255 Springt zu Dario und selektiert ihn. Wenn Feinde in Darios Nähe sind, leuchtet dieser Button blau.</string>
Leider weiss ich nicht, wie ich die veränderte Datei dann in meine Map lade, denn nur die Ordnerstruktur nachzubauen klappt scheinbar nicht.
Deshalb hatte ich gehofft, dass es die Möglichkeit per Skriptbefehl gibt, einen neuen Eintrag in eine bestehende .xml Datei einzufügen.
z.b.
S5Hook.SetString("xml-dateiname", "key" "text");
function S5Hook.SetString(file, key, text) open(file); then setString(<string id=key mod="20041102152922" MasterMod="" WorkInProgress="true" CharacterName="" Recordingneeded="" Comments="" TimeSync="" TimeSyncDuration="">text</string>) end ...
LG Daniel
mcb
|
#36 23.06.2014 17:53 Beiträge: 1472 |
Wozu? Sämtliche GUI-Texte lassen sich per XGUIEng.SetText(widget, text) verändern, die Texte über Entities mit S5Hook.SetCustomNames. Da muss man nicht die xmls für ändern.
Oder meinst du S5Hook.ChangeString(identifier, newString)? Die Funktion ändert den String nur bis zum nächsten laden.
daniBIGdani
|
#37 23.06.2014 18:03 Beiträge: 153 |
Aus Prinzip.
Ich möchte nun mal so gut programmieren wie es technisch möglich ist. Vielleicht hast du dir schon mal die Kampagnen oder Singleplayermaps der Entwickler genauer angeschaut. Da wird viel ausgelagert, was einen schönen Programmierstil zeigt.
Zum S5Hook.ChangeString: Wenn man die Funktion bei Laden der Map wieder aufruft bleibt der geänderte Text stehen!
LG Daniel
mcb
|
#38 23.06.2014 18:10 Beiträge: 1472 |
Versuch mal per S5Hook.AddArchive(path , true) die Map-Datei erneut zu laden, ansonsten musst du sie in die patchex.bba auslagern.
bobby
|
#39 23.06.2014 18:38 Beiträge: 393 |
Es ist möglich die bestehenden Einträge dieser von dir genannten XMLs zu ändern jedoch nicht Neue einzufügen.
Die Bestehenden können durch ChangeString geändert werden, was wie mcb jedoch schon erwähnt hat nicht sehr sinnvoll ist da man sie so oder so in lua ändern kann.
Dazu kommt auch noch das ChangeString maximal 24 Zeichen erlaubt da es sonst zu unvorhersehbaren Fehlern kommen könnte. Es könnte zwar so erweitert werden, dass es möglich wird maximal so viele Zeichen einzufügen wie zuvor gespeichert waren. Dies ist der Aufwand aber nicht wert, da es ja in lua auch geht.
Wahrscheinlich kann ein neues StringTable im XML Format eingefügt werden, was aber ebenfalls nicht sehr sinnvoll ist.
Wenn du jetzt einen Eintrag ändern willst geht das so:
S5Hook.ChangeString("menutop/find_hero1", "Foobar")
____________________
Tools und Verbesserungen für Siedler: settlers.pro
Neues:
Cutscene Editor
LuaDebugger v0.5.2
andre111
|
#40 27.06.2014 09:47 Beiträge: 220 |
Könnte es auch möglich sein Text wieder aus der log-Datei auszulesen?
Ich suche seit längerem einen Weg Daten von einer Map in eine andere zu übertragen.
(z.B: Spieler startet Map 1 - ... - bestimmte daten werden irgentwie gespeichert(z.B. Log-Datei) - map 2 wird automatisch gestartet und läd diese Daten wieder)
mcb
|
#41 27.06.2014 11:14 Beiträge: 1472 |
Nimm GDB.SetSring(name, string) und GDB.GetString(name). Sie Speichern/Lesen aus der GDB-Datei des Spielers (da wird auch gespeichert, ob eine Map bereits gewonnen ist).
andre111
|
#42 27.06.2014 16:15 Beiträge: 220 |
Ok, vielen dank.
Ich habe mir nun um es leicher zu machen die Comfortfunktionen
GDB_SetTable und GDB_GetTable geschrieben um ganze tables abzuspeichern.
Ich schreibe sie mal hier rein falls jemand interessiert ist.
Verbesserungsvorschläge sind erwünscht, besonders weil ich mir fast sicher bin, dass das ganze einfacher/besser umzusetzen ist.
Verwendet werden dabei die "GDB-Strings": *name*0, *name*1, ...
Ich habe auch eine Beispielfunktion hinzugefügt: testGDB
function testGDB() local tableSave = { key1 = "text", key2 = 123, key_table = { key1_1 = "innen1" }, key3 = false, leerertable = {} } GDB_SetTable("and111_test_testTable",tableSave) for k,v in pairs(tableSave) do Message("Save: Key="..k..", Value="..tostring(v)) end local tableLoad = GDB_GetTable("and111_test_testTable") for k,v in pairs(tableLoad) do Message("Load: Key="..k..", Value="..tostring(v)) end end function GDB_SetTable(_saveName, _tableO) assert(type(_tableO) == "table", "Kann nur tables speichern!") saveTableInternal(_saveName, _tableO, 0) end function saveTableInternal(_saveName, _table, _currentID) local count = 0 for k,v in pairs(_table) do count = count + 1 end GDB.SetString(_saveName.._currentID, count) for k,v in pairs(_table) do assert(type(k) == "string", "Der Table darf nur Strings als Keys enthalten!") if type(v) == "string" then _currentID = _currentID + 1 GDB.SetString(_saveName.._currentID, "string") _currentID = _currentID + 1 GDB.SetString(_saveName.._currentID, k) _currentID = _currentID + 1 GDB.SetString(_saveName.._currentID, v) elseif type(v) == "number" then _currentID = _currentID + 1 GDB.SetString(_saveName.._currentID, "number") _currentID = _currentID + 1 GDB.SetString(_saveName.._currentID, k) _currentID = _currentID + 1 GDB.SetString(_saveName.._currentID, v) elseif type(v) == "nil" then elseif type(v) == "boolean" then _currentID = _currentID + 1 GDB.SetString(_saveName.._currentID, "boolean") _currentID = _currentID + 1 GDB.SetString(_saveName.._currentID, k) _currentID = _currentID + 1 if v then GDB.SetString(_saveName.._currentID, "true") else GDB.SetString(_saveName.._currentID, "false") end elseif type(v) == "table" then _currentID = _currentID + 1 GDB.SetString(_saveName.._currentID, "table") _currentID = _currentID + 1 GDB.SetString(_saveName.._currentID, k) _currentID = _currentID + 1 _currentID = saveTableInternal(_saveName, v, _currentID) else assert(false, "Type "..type(v).." kann nicht abgespeichert werden!") end end return _currentID end function GDB_GetTable(_saveName) local _tableO = {} loadTableInternal(_saveName, _tableO, 0) return _tableO end function loadTableInternal(_saveName, _table, _currentID) local count = tonumber(GDB.GetString(_saveName.._currentID)) for i = 1, count do _currentID = _currentID + 1 local typeS = GDB.GetString(_saveName.._currentID) if typeS == "string" then _currentID = _currentID + 1 local key = GDB.GetString(_saveName.._currentID) _currentID = _currentID + 1 local value = GDB.GetString(_saveName.._currentID) _table[key] = value elseif typeS == "number" then _currentID = _currentID + 1 local key = GDB.GetString(_saveName.._currentID) _currentID = _currentID + 1 local value = GDB.GetString(_saveName.._currentID) _table[key] = tonumber(value) elseif typeS == "boolean" then _currentID = _currentID + 1 local key = GDB.GetString(_saveName.._currentID) _currentID = _currentID + 1 local value = GDB.GetString(_saveName.._currentID) if value == "true" then _table[key] = true else _table[key] = false end elseif typeS == "table" then _currentID = _currentID + 1 local key = GDB.GetString(_saveName.._currentID) _table[key] = {} _currentID = _currentID + 1 _currentID = loadTableInternal(_saveName, _table[key], _currentID) else assert(false, "Unbekannter Type: "..typeS) end end return _currentID end
mcb
|
#43 27.06.2014 20:10 Beiträge: 1472 |
Ich denke es wäre einfacher, das ganze table in einen string zu packen:
key1===value1|||key2===value2 ...
Sowas wie === und ||| lässt sich mit string.find einfach erkennen, untertables müssten irgendwie anders gekennzeichnet werden.
andre111
|
#44 27.06.2014 20:52 Beiträge: 220 |
Hm ja das wäre ne gute Idee, ich hatte vermutet, dass GDB.SetString irgendein nicht allzu großes Limit hat.
Wie lag darf ein String in GDB sein oder ist das sogar unlimitiert?
Wenn das ganze unlimitiert und groß genug ist schreibe ich die funktionen nochmal neu.
mcb
|
#45 27.06.2014 22:12 Beiträge: 1472 |
Da hab ich ehrlich gesagt keine Ahnung... Ich hab bisher nur einzelne, kurze strings da abgelegt. Müsste man ausprobieren.
andre111
|
#46 05.07.2014 17:50 Beiträge: 220 |
Ich habe ein weiteres Problem:
Wenn ich die Map und S5Hooks einmal gestartet habe, kann ich weder die Karte neustarten noch laden/eine andere Karte starten ohne, dass das Spiel abstürtzt.
bobby
|
#47 05.07.2014 17:59 Beiträge: 393 |
Falls du AddArchive aufrufst und im 2. Argument true mitgibst musst du dass so machen sonst passiert das von dir Beschriebene:
if S5Hook.RuntimeLoad("AddedMapArchive_Mapname") ~= "yes" then S5Hook.AddArchive("extra2/shr/maps/user/" .. Framework.GetCurrentMapName() .. ".s5x", true) S5Hook.RuntimeStore("AddedMapArchive_Mapname", "yes") end
Dafür benötigst du den S5Hook v0.4.
____________________
Tools und Verbesserungen für Siedler: settlers.pro
Neues:
Cutscene Editor
LuaDebugger v0.5.2
andre111
|
#48 05.07.2014 19:43 Beiträge: 220 |
Danke, das Problem ist damit gelöst.
Den crash mit veränderten Entities konnte ich zwar noch nicht fixen, aber da ich jetzt wieder vernünftiges Internet habe werde ich dir morgen die Entity xml mal schicken
wilma456
|
#49 07.07.2014 18:12 Beiträge: 460 |
Bei mir ist das Arbeitsverzeichnis leer! Ich kann nicht wie in der Anleitung beschrieben etwas laden.
____________________
Schlacht um Crawford
Wilmasmod
Zedeg
|
#50 07.07.2014 18:50 Beiträge: 428 |
Meinst du den GUI-Editor? Dann schau dir doch mal Beitrag 31 von bobby an, vielleicht hilft 's.
____________________
Journalisten erkundigen sich bei Wissenschaftlern meist nicht nach Grundlagen, sondern eher nach Ergebnissen und Folgerungen. Das erklärt womöglich auch, warum sich Forschungsberichte in den Medien so häufig als feststehende Erkenntnisse lesen, nicht aber als Ideen, Entdeckungen oder Indizien, um die es sich genau genommen in den meisten Fällen handelt. -Axel Bojowski