Spawner Attachments

Estimated reading: 11 minutes 78 views

Attachments kann man sich als Erweiterung des XMLSpawners vorstellen, welche eine ziemlich gute Arbeitshilfe darstellt. Am besten kann man sie glaube ich mit Pins, also Ansteckern vergleichen, welche man Mobiles oder Items anstecken kann. Genutzt werden können die kleinen Dinger für viele Dinge, etwa das zeibegrenzte verändern einiger Eigenschaften, ohne, dass man nachher alles wieder per hand zurückstellen muss. Aber auch eine Notiz ist möglich, beispielsweise ob ein Spieler eine bestimmte Quest schon einmal abgeschlossen hat, oder ihm in bestimmten Situationen Worte in den Mund zu legen ohne selbst anwesend sein zu müssen, etc.

Allerdings sollte man immer darauf achten, ob es auch sinnvoll ist ein Attachment zu benutzen, da soetwas viele Ressourcen schluckt und es sehr oft auch sparendere Verfahrensweisen als Attachments gibt.

Wie arbeite ich mit Attachments?

Für die Arbeit mit den Attachments stehen einige Befehle zur Verfügung, hier mal aufgelistet und mit ein paar Erläuterungen versehen:

availatt

Listet alle verfügbaren Attachments in einer liste auf. Syntax dieses Befehls ist:

.availatt

addatt

Erstellt ein Attachment und gibt euch ein Zielkreuz, um zu bestimmen wem oder was ihr das Ding anheften wollt. Die zu verwende Syntax ist:

.addatt attachmenttype [args]

delatt

Ist wie der Name schon vermuten lässt zum löschen der Attachments gedacht. Syntax wäre:

.delatt type [serial]

Verwendet man es in Verbindung mit einem Typ werden alle Attachments dieses Typs gelöscht, bei Angabe einer serial wird genau dieses eine Attachment gelöscht.

getatt

Gibt euch einen Überblick über die auf diesem Objekt verwendeten Attachments und ihrer Serials. Syntax ist hier

.getatt [type]

Falls die optionale Angabe eines Typs gemacht wird werden nur die Attachments dieses Typs als Ergebnis angezeigt.

Auflistung einiger Attachments und ihrer Wirkung

XmlDialog

Dieser Befehl ermöglicht es einem beliebigen NPC oder Mobile einen Questdialog anzuheften:

.addatt XmlDialog
.addatt XmlDialog Configfile

Achtung! Bei Items bitte immer ein Item verwenden, dem man auch ansieht, dass ein Attachment dran hängt. Ein Invisschild mit der Beschriftung „Hier hängt ein XmlDialog dran“ wäre ein gutes Beispiel. Bei Umbauten kann sonst schnell mal das Item mit dem Attachment gelöscht werden, da man es ihm ja ohne Weiteres nicht ansieht.

XmlDex, XmlInt, XmlStr, XmlKonst

Diese drei Befehle ermöglichen es temporär die Werte für Strength, Intelligence und Dexterty zu verändern. Syntax dafür ist:

.addatt XmlDex[ value][ duration]
.addatt XmlInt[ value][ duration]
.addatt XmlStr[ value][ duration]
.addatt XmlKonst[ value][ duration]

Hier haben wir auch gleich ein gutes Beispiel um ressourcensparend zu arbeiten. Wenn man für eine Quest einigen Spielern über längere Zeit andere Stats geben möchte eignen sich meist invis-Ringe wesentlich besser als die Attachments. Diese werden eher interessant wenn es eine Questbelohnung einer NPC-Quest ist, da dort dann kein Staffler dabei ist.

XmlAddFame, XmlAddKarma, XmlAddTithing

Die entsprechenden Werte lassen sich dauerhaft mit diesen Attachments erhöhen, die sich sogleich auch selbst löschen wenn sie angebracht wurden.

.addatt XmlAddFame value
.addatt XmlAddKarma value
.addatt XmlAddTithing value

XmlSkill

Erlaubt es Skills eines Spielers/NPCs temporär zu verändern. Allerdings möchte ich hier eine Warnung aussprechen: Die Veränderungen sind per Gump, also mittels des Befehls „.skills“ nicht sichtbar, da dort weiterhin die Originalwerte zu finden sind. Allerdings werden die derzeit aktiven Werte über eine Befehlsabfrage a la „.get skills.mining.value“ weiterhin korrekt angezeigt.

Gesetzt wird hierbei ein relativer Skillwert, bedeutet: „.addatt xmlskill test mining 50 1“ erhöht den Miningskill um 50 für eine Minute und „.addatt xmlskill test mining -50 1“ würden den Miningskill des Mobiles um 50 senken.

Syntax:

.addatt XmlSkill name skill
.addatt XmlSkill name skill value
.addatt XmlSkill name skill value duration
.addatt XmlSkill name skill value duration word

„name“ ist hier ein Name, welcher dem Attachment gegeben werden kann, „duration“ die Dauer in Minuten und „word“ ein Schlüsselwort, welches die Wirkung auslöst. Sollte das Attachment aber ausgelöst werden erscheint es nichtmehr in den angezeigten Attachments des Spielers. Ein Grund mehr es nur sehr vorsichtig und keinesfalls zum eigenen Vorteil einzusetzen. Sollte keine duration angegeben werden wird automatisch eine Dauer von 30 Minuten benutzt. Und wie schon bei den Stats gilt auch hier: immer darauf achten, ob invis-Ringe nicht auch diesen Zweck erfüllen können. Noch eine weitere Anmerkung: einige der Skills heissen in der Engine anders als im Skillmenü. So ist zum Beispiel „Parrying“ nur über „Parry“ erreichbar.

XmlAddSkill

Erlaubt es Skills eines Spielers/NPCs dauerhaft zu verändern. Besonders interessant im Zusammenhang mit Quest-Rewards.

Syntax:

.addatt XmlAddSkill skill
.addatt XmlAddSkill skill value
.addatt XmlAddSkill skill value maxvalue

„value“ ist der Wert um den der Skill angehoben werden soll. Für +1% Skill ist als Wert hier 10 anzugeben. „maxvalue“ ist der Wert auf den maximal erhöht wird. Standardvorgabe ist 100%. Kann in ganzen Prozentschritten angeben werden. Beispielsweise 88 für 88%.

XmlDate, XmlData, XmlValue

Diese drei Attachments erlauben es zusätzliche Daten an ein Attachment hinzuzufügen. XmlDate unterstützt Datums- und Zeitangaben, XmlValue Integer und XmlData String. Diese Daten können durch Spawner hinzugefügt und ausgelsen werden.

XmlMorph

Ermöglicht es einem Mobile temporär ein anderes Aussehen zu geben. Syntax:

.addatt XmlMorph morphid
.addatt XmlMorph morphid duration
.addatt XmlMorph morphid duration word

Wobei „duration“ wieder die Dauer in Minuten, „morphid“ die bodyvalue und word das Keyword angibt, was den Vorgang auslöst. Im Augenblick scheint die Auslösung per Keyword aber nicht zu klappen, denn der Charakter wird instant gewandelt.

Alternativ kann man den body allerdings auch per Hand ändern oder einen Renamer benutzen, was in den meisten Fällen einfacher sein sollte.

XmlFreeze

Macht ein Mobile bewegungsunfähig.

.addatt XmlFreeze
.addatt XmlFreeze seconds

Hier erfolgt die Zeitangabe mal in Sekunden und nicht in Minuten, bitte beachtet das. Außerdem gibt es auch hier eine sparsame Alternative: „.set cantwalk true“ 😉

XmlHue

Färbt ein Item oder ein Mobile temporär um.

.addatt XmlHue value
.addatt XmlHue value duration

Und wie schon zuvor will ich auch hier auf mögliche Alternativen hinweisen: Man kann die Farbe auch per Hand umsetzen, und mittels „.set solidhueoverride“ kann man sogar Mobile zusammen mit Kleidung umfärben, ohne die Originalfarben zu verlieren.

XmlSound

Ermöglicht es jedesmal einen Sound abzuspielen wenn ein Spieler in Reichweite kommt oder ein Keyword sagt. Syntax:

.addatt XmlSound
.addatt XmlSound sound
.addatt XmlSound sound refractory
.addatt XmlSound sound refractory word
.addatt XmlSound sound refractory word charges
.addatt XmlSound sound refractory charges

Refractory gibt hierbei den minimalen Intervall zwischen den Aktivierungen an.

XmlMessage

Ermöglicht es eine Overhead-Nachricht zu erzeugen, wenn ein Spieler in die Nähe des Objektes kommt, dass dieses Attachment besitzt, oder ein Keyword sagt.

.addatt XmlMessage msg
.addatt XmlMessage msg refractory
.addatt XmlMessage msg refractory word
.addatt XmlMessage msg refractory word charges

XmlFire, XmlLightning

Fügt man eines dieser Attachments einer Waffe hinzu wird diese zusätzlichen Feuer/Blitzschaden verursachen. Bringt man es hingegen an einem Objekt an so wird es Schaden austeilen, sobald ein Spieler zu nahe kommt. Der Syntax wird hier mal für XmlFire demonstriert, XmlLightning ist äquivalent.

.addatt XmlFire damage
.addatt XmlFire damage refractory
.addatt XmlFire damage refractory expiresin

Lässt sich imho recht gut einsetzen, wenn es darum geht das annähern an einen Ort zu unterbinden…aber Movementtrigger und DamageDealer verbrauchen weniger Ressourcen 😉 Daher bitte nur da verwenden wo es wirklich notwendig ist.

XmlLifeDrain, XmlmanaDrain

Sollte es einem Mobile ermöglichen Leben bzw. Mana mit jedem Schlag abzuziehen 😉 Der Syntax wird hier mal für XmlLifeDrain demonstriert, XmlManaDrain ist äquivalent.

.addatt XmlLifeDrain drain
.addatt XmlLifeDrain drain refractory
.addatt XmlLifeDrain drain refractory expiresin

Beispiel: „.addatt xmllifedrain 30 3 120“ ermöglicht es einem Mobile 2 Stunden lang alle 3 Sekunden mit einem Schlag 30 HP Leben vom Gegner abzusaugen.

XmlMinionStrike

Das ist ein sehr sehr geiles Attachment: fügt man es einer Waffe hinzu hat diese bei jedem Schlag (oder einem Block des Gegners) eine gewisse Chance Untergebene für den Waffenträger zu spawnen. Fügt man es einem Mobile hinzu bekommt jede Waffe, die er trägt diese Fähigkeit, auch die Fäuste. Angaben über die Art der Untergebenen, die Dauer, die Chance, etc. können gemacht werden. Syntax:

.addatt XmlMinionStrike minion
.addatt XmlMinionStrike minion chance
.addatt XmlMinionStrike minion chance refractory
.addatt XmlMinionStrike minion chance refractory expiresin

XmlMagicWord

Dieses Attachment ist eine Art Template für ein generelles, Keyword getriggertes Attachment. Es hat verschiedene Wirkungen, welche je nach dem welches Wort gesprochen wurde aktiviert werden können. Sollte es einer Waffe oder Rüstung zugeteilt werden muss diese angelegt werden, bevor die Worte es aktivieren können. Syntax:

.addatt XmlMagicWord
.addatt XmlMagicWord word
.addatt XmlMagicWord word duration
.addatt XmlMagicWord word duration refractory
.addatt XmlMagicWord word duration refractory charges

XmlUse

Dieses Attachment legt fest was geschieht wenn man auf ein Item doppelklickt. An einen Spieler angehängt, legt es fest was geschieht wenn dieser Spieler auf irgendein Item doppelklickt.

Syntax:

.addatt XmlUse
.addatt XmlUse maxuses
.addatt XmlUse maxuses refractory

Alle anderen Eigenschaften müssen im Nachhinein hinzugefügt werden. Es lässt sich festlegen unter welchen Umständen etwas benutzt werden kann und was bei Erfolg oder Misserfolg geschieht.

Beispiel: CAPTION=XML Attachment Properties|CONTENT= Condition = GETONCARRIED,*,longsword,visible=true FailureAction = SENDMSG/Dir fehlt ein Langschwert um dieses Item zu benutzen. Dieses Attachment erlaubt die Benutzung eines Items (z.B. Tür) nur, wenn der Nutzer ein Langschwert mit sich führt. Das Sternchen bedeutet, dass der Name beliebig ist.

weiteres Beispiel: CAPTION=XML Attachment Properties|CONTENT= SuccessAction = SETONTHIS/visible/false; SETONTRIGMOB/speechhue/33/SAY/*You are eating a broadsword* BlockDefaultUse = True

Mithilfe des Semikolons können zwei Befehle in einer Zeile verstaut werden. Zuerst wird der Gegenstand unsichtbar, dann erscheint über dem Kopf des Anwenders der Text „*You are eating a broadsword*“ in roter Schrift. Für den Spieler stellt es sich so dar, dass er das Item aufgegessen hat, während es in Wirklichkeit nur unsichtbar geworden ist. Wenn man es sichtbar macht und das XmlUse-Attachment löscht, ist alles wieder beim Alten.

XmlSaveItem

Ermöglicht es ein Item auf die interne Map zu schicken und mittels des Attachments jederzeit zurückzuholen. (RestoreItem-Property des Attachments auf True setzen). Wird Das Attachment gelöscht wird auch das Item gelöscht. Sollte das Item zwischendurch von der internen Map woandershin gebracht werden so ist is nichtmehr möglich das Item mittels XmlSaveItem zu finden.

.addatt XmlSaveItem
.addatt XmlSaveItem name

XmlWeaponAbility

Ermöglicht es gespawnten Mobiles Spezialattacken zu geben. Innerhalb des Spawners würde das so aussehen:

orc/ATTACH/xmlweaponability,BleedAttack

Wenn man es per Hand hinzufügt allerdings etwas so:

.addatt XmlWeaponAbility
.addatt XmlWeaponAbility name weaponability
.addatt XmlWeaponAbility name weaponability expiresin

Die Namen der Spezialfähigkeiten sind „case sensitive“ und können sein:

  • ArmorIgnore
  • BleedAttack
  • ConcussionBlow
  • CrushingBlow
  • Disarm
  • Dismount
  • DoubleStrike
  • InfectiousStrike
  • MortalStrike
  • MovingShot
  • ParalyzingBlow
  • ShadowStrike
  • WhirlwindAttack

Attachmend Methods für dieses Attachment: * OnKill * OnKilled * OnReattach

XmlDeathAction

Dieses kleine Ding kann man Mobiles hinzufügen, um eine Aktion auszulösen sobald sie (unter bestimmten Bedingungen) sterben. Syntax:

.addatt XmlDeathaction
.addatt XmlDeathaction

Natürlich kann man das auch bereits beim spawnen von Kreaturen an diese binden. Beispiel:

CAPTION=XMLSpawner-Code|CONTENT=harpy/ATTACH/<xmldeathaction/action/@GUMP,Die Harpye muss sterben,0/Gratuliere, du hast eine Harpye getötet.> Dadurch wird eine Harpy gespawnt, nach deren Tod sich ein Gump (ähnlich den Questgumps) öffnet, was dem Spieler gratuliert.

Beispiel 2:

CAPTION=XMLSpawner-Code|CONTENT=harpy/ATTACH/<xmldeathaction/action/@SETONNEARBY,0,*,corpse/carved/true> In diesem Beispiel wird beim Tod eines Monsters bei jeder Leiche die auf exakt diesem Feld liegt die Variable carved auf true gesetzt. Damit bekommt man von der Leiche kein Fell oder Fleisch oder Schuppen mehr. Leider geht es nicht präziser…

Ach ja: „.kill“ umgeht das XMLDeathAction, also nicht verunsichern lassen wenn ihr es so testet und es nicht geht.

TemporaryQuestObject

Dieses Attachment kann man dazu benutzen ein Item/Mobile zu markieren, damit es entweder nach Ablauf einer Zeitspanne oder nach beenden der Quest gelöscht wird. Natürlich kann man es auch einfach nur zum löschen benutzen, indem man die ExpirationTime verwendet.

TemporaryQuestObject,questname
TemporaryQuestObject,questname expiresin
TemporaryQuestObject,questname expiresin questowner

Natürlich kann man dies auch bereits über einen Spawn einstellen. Beispiel hierzu:

„GIVE/<questholder/name/MyQuest/objective1/KILL,orc/autoreward/true/rewardstring/gold,100> GIVE/<longsword/name/Quest Sword/ATTACH/<temporaryquestobject,MyQuest/questowner/TRIGMOB»“

bzw. um questunabhängig etwas zu spawnen, was verfällt:

„longsword/name/poof/ATTACH/temporaryquestobject,tempsword,3“ Dies würde dann ein Schwert erzeugen, was sich nach 3 Minuten selbst vernichtet.oO(das erinnert irgendwie an die alten Agentenfilme, oder?)

Share this Doc

Spawner Attachments

Or copy link

CONTENTS