Veredler

» Siedler Map Source Forum » Siedler DEdK Script Forum » Veredler

Seiten: 1

Play4FuN
#1
29.08.2015 14:13
Beiträge: 704

Veredler

Gibt es eine Möglichkeit oder besser kennt jemand eine Möglichkeit sich in die "Veredler-Mechanik" rein zu hängen, sodass man für einzelne Gebäude oder Gebäudetypen das Veredeln bestimmter Rohstoffe (de)aktivieren kann?

Ich meine damit kein Simulieren/Nachbauen, sondern die "richtige" (originale) Methode, die im Spiel verwendet wird.

____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

mcb
#2
29.08.2015 15:11
Beiträge: 1472

Eventuell indem du die Entity-xmls manipulierst... (Zumindest die Menge ist einfach änderbar)
Vielleicht auch über die ScriptingValues, Kantelos funktionen können anscheinend auch die aus den xmls gelesenen Werte manipulieren (Maximal-LP).

Play4FuN
#3
29.08.2015 15:45
Beiträge: 704

Danke für die schnelle Antwort!

Von Manipulationen an den Siedler Dateien halte ich selbst nichts.

Weiß jemand etwas zu den SV, die mir hier helfen könnten?

____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

Zedeg
#4
29.08.2015 16:06
Beiträge: 428

Mit

SetBehaviorXmlValue(id, 4, 3, 4, ResourceType.Whatever)

setzt du den Veredelungstyp für alle Gebäude dieser Art. Wenn du nun zum Beispiel ResourceType.Knowledge verwendest, sollte die Veredelung stoppen.

Edit1:
@mcb:
Theoretisch müsste es gehen; versuche ich gerade herauszufinden.

P.S.: Mit

SetBehaviorXmlValue(id, 4, 3, 10, EntityCategories.WhateverSupplier)

kann man den Lieferantentyp einstellen. Meine Schmiede holen jetzt Eisen aus der Steinmine und veredeln es zu Talern.

Edit2:
Tatatata :

SetBehaviorXmlValue(id, 4, 3, 5, Float2Int(menge))


Aber immer daran denken: Vor dem Beenden der Map zurücksetzen.

____________________
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

Dieser Beitrag wurde von Zedeg am 29.08.2015 um 16:30 editiert.

mcb
#5
29.08.2015 16:07
Beiträge: 1472

Die Entity-xmls zu manipulieren führt andauernd zu Abstürzen, lohnt sich nicht wirklich...
Die GUI kann man aber recht einfach verändern

Das problem bei den ScriptingValues ist, das es (wahrscheinlich) nicht einfach ein Index ist, auf den man einfach zugreifen kann. D.h. du musst Pointer zurückverfolgen und Adressen berechnen. Eigentlich wird sowas nur beim S5Hook und bei den SCV-2.0 Funktionen von Kantelo verwendet.

Edit: War einer schneller. Kann man so auch die menge ändern?

Play4FuN
#6
30.08.2015 08:21
Beiträge: 704

Was genau bedeuten solcherlei Eingriffe? Verändern die Befehle von Zedeg Einträge in Spieldateien auf meinem Rechner?

____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

mcb
#7
30.08.2015 12:18
Beiträge: 1472

Nein, die Dateien auf der Festplatte bleiben unverändert. (Die zu verändern wäre mit S5-Lua beinahe unmöglich...)
Um die dateien Nutzen zu können, müssen sie in den Hauptspeicher geladen werden und diese Kopie veränderst du. Das ganze gilt dann für alle Entitys dieses Typs.
Weil diese Daten beim Laden einer Map nicht neu geladen werden, bleiben deine Änderungen auch in der nächsten Map bestehen, solange S5 nicht neugestartet wird oder du sie Zurücksetzt. (Eventuell funktioniert es auch, wenn du die Entitydefinitionen per Hook neulädst - nicht getestet)

Edit: Die Rohstoffe, die der Arbeiter holt (Typ und Menge) sind in der xml des Arbeiters gespeichert. Kann man irgendwie an der xml ablesen, welche 3 indizes dem zugeordnet sind?

Dieser Beitrag wurde von mcb am 30.08.2015 um 12:25 editiert.

Play4FuN
#8
30.08.2015 12:59
Beiträge: 704

Hm, das heißt also, ich brauche nicht nur den Code, der die Werte verändert, sondern brauche auch die Original Daten, um diese am Ende wieder herzustellen. Dafür müsste man wissen, wofür diese ganzen Werte stehen..

____________________
LG Play4FuN

Siedler DEdK Mapping + Scripting Tutorials

mcb
#9
30.08.2015 13:39
Beiträge: 1472

Habs inzwischen getestet: Mit Hook neuladen hilft nicht. Du musst vor dem Speichern und vor dem beeenden der Map die Originalwerte wiederherstellen. (Die kannst du vor der Änderung mit GetBehaviorXmlValue auslesen)

Zedeg
#10
30.08.2015 15:16
Beiträge: 428

Also den Ressourcentyp ändert man so:

SetBehaviorXmlValue(id, 8, 7, 27, ResourceType.Whatever)

Bei den nachfolgenden Funktionsaufrufen denke ich, dass sie es zurückgeben, überprüft habe ich es aber nicht:

GetBehaviorXmlValue(id, 8, 7, 7) -> WorkWaitUntil
GetBehaviorXmlValue(id, 8, 7, 10) -> EatWait
GetBehaviorXmlValue(id, 8, 7, 13) -> RestWait
GetBehaviorXmlValue(id, 8, 7, 17) -> WorkTimeChangeWork
GetBehaviorXmlValue(id, 8, 7, 21) -> WorkTimeMaxChangeFarm
GetBehaviorXmlValue(id, 8, 7, 22) -> WorkTimeMaxChangeResidence
GetBehaviorXmlValue(id, 8, 7, 24) -> TransportAmount
Int2Float(GetBehaviorXmlValue(id, 8, 7, 16)) -> AmountResearched
Int2Float(GetBehaviorXmlValue(id, 8, 7, 19)) -> WorkTimeChangeResidence

Den Rest dürft ihr machen :
Der erste Index ist die Behaviour-Tabelle (Index=Tabelle*4-4). Mit GetBehaviorInformationValue(id, index1, var) lässt man sich nun in einem SimpleJob alle Werte ab 0 ausgeben. Alle Werte, die durch 4 teilbar sind, muss man sich nun mit GetBehaviorXmlValue(id, index1, index2, var) ausgeben.

____________________
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

Seiten: 1

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

Impressum