|
Grundlagentutorial: XIncludes |
Golan |
Benötigte Tools: Notepad oder vergleichbarer Texteditor
Benötigtes Grundwissen: Arbeiten mit XMLs, Kenntnis von Modules
Das Mod SDK zu Tiberium Wars unterstützt eine Reihe von Möglichkeiten, den Code durch globale Dateien und einträge einfacher und schneller zu bearbeiten. Während Defines einzelne Parameter festlegen und Inherits/Baseobjects komplette Grundobjekte definieren, erlaubt es das XInclude, sowohl einzelne als auch komplexe Unterelemente eines GameAssets global zu erstellen und zu bearbeiten.
Ein vollständiges XInclude besteht aus zwei Elementen - einer XInclude-Datei, welche den Code enthält der später in andere Assets eingefügt werden soll, und die XInclude-Referenz auf diese Datei, welche bestimmt an welcher Stelle der Code eingefügt wird. XInclude-Dateien können in beliebigen Ordnern gespeichert werden.
Achtung: Die XInclude-Datei beinhaltet kein vollständiges Assett. Sie muss und kann somit nicht mit einem gewöhnlichen </Include> zu einer Modifikation hinzugefügt werden!
XInclude-Datei:
Einfach: Neben der XML Declaration befindet sich in der Datei ein einzelnes, in sich geschlossenes Codeelement (mit beliebig vielen Unterelementen) das später per XInclude eingefügt werden soll; zusätzlich muss es um das Attribut xmlns="uri:ea.com:eala:asset" erweitert werden.
<?xml version="1.0" encoding="us-ascii"?> <StealthDetectorUpdate xmlns="uri:ea.com:eala:asset" id="ModuleTag_SoldierStealthDetect" ExtraForbiddenKindOf="AIRCRAFT" DetectionRange="50" DetectionRate="0.1s" />
Komplex: Neben der XML Declaration befinden sich in der Datei mehrere, in sich geschlossene Codeelemente (mit beliebig vielen Unterelementen) die später per XInclude eingefügt werden soll; zusätzlich müssen diese von einem Überelement umschlossen werden, welches um das Attribut xmlns="uri:ea.com:eala:asset" erweitert wurde.
<?xml version="1.0" encoding="us-ascii"?> <Behaviors xmlns="uri:ea.com:eala:asset"> <AutoDepositUpdate id="ModuleTag_AutoDeposit" InitialCaptureBonus="0" DepositInterval="5s" DepositAmount="100" GiveNoXP="true" Flags="ACTIVE_WHEN_REPAIRING"/> <DistributedMoney id="ModuleTag_DistributedMoney" Capacity="500" OnDieSpawnPercentage="0" /> </Behaviors>
XInclude-Referenz
Einfach: Das xi:include-Element besitzt nur ein href-Attribut, welches den Pfad zu einer einfachen XInclude-Datei angibt.
<xi:include href="DATA:DeT/Data/XIncludes/BehaviorIncludes/StealthDetectInfantry.xml"/>
Komplex: Das xi:include-Element besitzt ein href-Attribut, welches den Pfad zu einer komplexen XInclude-Datei angibt, sowie ein xpointer-Attribut, in welchem das Überelement aus der komplexen XInclude-Datei angegeben ist [in der Form (/n:[Überelement]/child::*)].
<xi:include href="DATA:SecondDawn/Data/GlobalData/Includes/VehicleIncludes.xml" xpointer="xmlns(n=uri:ea.com:eala:asset) xpointer(/n:Behaviors/child::*)" />
Hinweise:
XIncludes können Unterelemente für jede Form von Elementen enthalten. Im Gegensatz zu Inherits und Defines können somit auch normale Includes global definiert werden.
XIncludes eignen sich vorallem für Elemente, die bei einer Reihe von Assets exakt gleich sein sollen, aber nicht für alle Assets eines Typs.
Auch XIncludes müssen die Struktur der GameAssets intakt halten. Erfüllt ein XInclude dies nicht meldet der Compiler den Fehler in der Datei, in die das XInclude eingefügt werden sollte
Defines, Inherits und XIncludes werden beim Compilen fest in den Code eingeschrieben, weshalb Änderungen nur dann einen Effekt haben, wenn alle Assets an denen diese Änderung wirken sollen neu compilt werden (betrifft vorallem originale TW Assets).