Veredler

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

Pages: 1

Play4FuN
#1
29-08-2015 14:13
Posts: 488

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

mcb
#2
29-08-2015 15:11
Posts: 1316

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
Posts: 488

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

Zedeg
#4
29-08-2015 16:06
Posts: 402

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

This posting has been edited by Zedeg: 29-08-2015 at 16:30.

mcb
#5
29-08-2015 16:07
Posts: 1316

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
Posts: 488

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

____________________
LG Play4FuN

mcb
#7
30-08-2015 12:18
Posts: 1316

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?

This posting has been edited by mcb: 30-08-2015 at 12:25.

Play4FuN
#8
30-08-2015 12:59
Posts: 488

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

mcb
#9
30-08-2015 13:39
Posts: 1316

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
Posts: 402

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

Pages: 1

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

Impressum