Oblivion:Einführung Scriptzauber: Unterschied zwischen den Versionen

Aus Skript-Wiki
Wechseln zu: Navigation, Suche
Zeile 175: Zeile 175:
 
== Links ==
 
== Links ==
  
[[:Kategorie:Zauber|Zauber]]
+
* [[:Kategorie:Zauber|Zauber]]
 +
* [[Oblivion:Magic Effect Scripts|Magic Effect Scripts]]
  
  
 
{{ Scriptkategorie |Scriptzauber|Einführung Scriptzauber}}
 
{{ Scriptkategorie |Scriptzauber|Einführung Scriptzauber}}

Version vom 25. Oktober 2008, 15:18 Uhr

Thema

Die Kategorie der Scriptzauber oder auch [Oblivion:Magic Effect Scripts|Magic Effect Scripts] ist eigentlich die Neuerung schlechthin

im Scriptingbereich im Bezug zu Morrowind. Denn Scriptzauber sind unheimlich vielseitig und lassen sich auf fast jedes Objekt in

Oblivion anwenden.

Als allererstes muss man wissen, dass Scriptzauber nicht ganz wie normale Scripts geschrieben werden. Siehe [Oblivion:Magic Effect

Scripts|Magic Effect Scripts]. Das Wesentliche ist, dass man das ganze im [Oblivion:Script Editor Window|Scriptfenster] als Magic

Effect deklarieren muss und nicht Object Script, und dass man nicht die normalen Blocktypen benutzen darf, sondern eigens dafür

gemachte:

Blocktypen

'ScriptEffectStart' - Dieser Block wird genau einmal(!) als erstes ausgeführt, wenn der Zauber auf ein Ziel trifft 'ScriptEffectUpdate' - Dieser Block wird jeden Frame, den der Zauber wirkt, ausgeführt (auch in denselben wie ScriptEffectStart und

ScriptEffectEnd) 'ScriptEffectEnd' - Dieser Block wird wieder genau einmal ausgeführt, wenn der Zauber endet

Wie muss man sich das praktisch vorstellen? Wenn man im [Oblivion:Spell Window|Spell Window] seinen Zauber mit dem jeweiligen

Scripteffect erstellt hat, kann man u.a. auch die Dauer einstellen. Wenn man Dauer 0 hat, heißt das, das diese 3 Blöcke genau einmal

durchlaufen werden. Bei einer Dauer > 0 wird der Start- und Endblock jeweils einmal durchlaufen und die ganze Zeit dazwischen der

Updateblock.

Jedoch kann man immernoch MenuMode und GameMode-Blöcke mit einbauen. Diese werden auch normal abgearbeitet, wie bei jedem anderen

Object-Script (aber logischerweise auch nur solange, wie der Zauber wirkt).

Funktionsweise von Scriptzaubern

Sagen wir, der Spieler feuert einen selbsterstellten Zauber mit Scripteffekt irgendwo in die Gegend. Der Zauber trifft auf einen NPC.

Nun wird das Script wird auf den NPC übertragen, ungefähr so, wie wenn man im CS dem NPC ein Script zuweist, jedoch ganz automatisch.

Jetzt läuft das Script 'auf' dem NPC ab. Das Script denkt und handelt also so, wie als wenn es schon immer dem NPC zugewiesen ist,

obwohl dieser NPC evtl in Wirklichkeit gar kein Script hat! Beispiel:


Möglichkeiten

Was man alles mit Scriptzaubern grundsätzlich machen kann, soll hier erläutert werden:

Scriptzauber als Zauber

Klar, wie der Name schon sagt, sind sie ürsprünglich als Zauber gedacht, mit dem kleinen Bonus, dass man nicht nur normale

Zaubereffekte zur verfügung hat (wie Feuerschaden usw.), sondern eigene scripten kann. Das sieht dann ungefähr so aus: <tesscript> scn melonsmash

ref target

begin scripteffectstart set target to getself target.placeatme melon 0 0 200 end</tesscript> Aha, statt irgendwelchen langweiligen Zaubern fällt dem Ziel jetzt eine Melone auf den Kopf! Vielleicht nicht ungeheuer hilfreich,

aber es soll verdeutlichen, dass man die Scripts wie normale Scripts behandeln kann, also es kann alles rein, was in anderen Scripts

auch steht.

Scriptzauber zum Herausfinden von RefIDs und Eigenschaften anderer Objekte

Herausfinden von RefIDs, werdet ihr fragen, das geht doch einfach in jedem Script mit GetSelf,

GetActionRef oder z.b auch GetParentRef. Jaja, schon richtig, aber normalerweise

kann man dabei nur die RefID des Objektes auf dem das Script liegt, seinen Parent oder den, der es aktiviert hat, herausfinden.

Scriptzauber können nahezu jede RefID und andere Informationen über das getroffene Objekt herausfinden, z.b so: <tesscript> scn ActivateThingys

ref Me float hp

begin Scripteffectstart set Me to getself switch.activate me set questID.person to me set hp to getbaseav health messagebox "Lebenspunkte: %.0f" hp end</tesscript> Das sieht jetzt etwas wie sinnlos aneinandergereihte Befehle aus (ist es auch mehr oder weniger), aber zeigt erstmal etwas

wesentliches: durch getself kriegt man jetzt die refID des NPCs heraus, diese kann man gleich weiterverwerten, indem man z.b. von

genau diesen NPC einen Schalter aktivieren lässt. Oder man speichert die RefID in einem Questscript. Genausogut kann man sich auch alle Daten von dem NPC anzeigen lassen, wie die Lebenspunkte usw... Und das geht alles, obwohl der NPC

normalerweise kein Script hat!

Scriptzauber zur Steuerung von NPCs

Scriptzauber eignen sich auch hervorragend zur Massenmanipulation. Man muss nicht immer an die selbstverständlichen Aufgaben von

Zaubern denken, wenn man von Scriptzaubern spricht. Damit lassen sich auch dynamische Prozesse steuern. Als Beispiel kann man

anbringen, dass die Dorfbewohner, welche Martin vor dem Sturm auf das Obliviontor zujubeln kein eigenes Script haben, das ihnen sagt,

was sie zu tun haben. Es wird ein Scriptspell mit einem Effektradius von einigen tausend Einheiten gewirkt, welcher den NPCs sagt,

dass sie sich vor der Kirche zu versammeln haben. Ähnliche Dinge kann man selber auch ohne großen Aufwand mit Scriptzaubern machen. Dazu würde schon das Script hier reichen: <tesscript> scn massmanipulation

begin scripteffectstart addscriptpackage dosomething evp end </tesscript>

Gültigkeit von Scriptzaubern

Scriptzauber haben viele Vorzüge, jedoch muss man auch auf einiges achten, wenn man sie benutzt:

Gültige Ziele

Man sollte sich merken, dass Scriptzauber auch nicht allmächtig sind, und man jetzt locker-flockig ein paar Zauber durch die Gegend

schießt und alle Dinge das machen, was man will. Scriptzauber funktionieren nur auf diesen Objekten:

Die volle Funktionsfähigkeit entfalten Scriptzauber bei 'NPCs' und 'Creatures'.

Bei 'Leichen', 'Activators', 'Lights' 'Containers',

'Doors' und 'Furniture' werden die 3 Blöcke (sofern vorhanden) nur einmal durchlaufen, danach endet der Zauber,

ganz einfach deswegen, weil man diesen Objekten im CS normalerweise auch keine Zauber zuordnen kann.

Bei 'Statics', 'Trees' und allen 'Items' funktionieren Scriptzauber

nicht.

Probleme

Probleme treten bei der Variablenspeicherung auf. Wenn euer Zauber die Aufgabe hat, wichtige Daten über das getroffene Objekt zu

sammeln, dann müsst ihr diese woanders speichern, als in dem Script des Zaubers. Solange der Zauber aktiv ist, kann er

[Oblivion:Variablen|Variablen] speichern wie jedes andere normale Script auch. Wenn aber der Zauber zuende ist, wird er sozusagen von

dem getroffenen Objekt wieder gelöscht, und damit gehen auch alle Variablen verloren. Vorsicht: Die Variablen werden auch gelöscht,

wenn ihr die Zelle verlasst, in der das getroffene Objekt ist. Heißt also, wenn ein NPC getroffen ist, und der Spieler in eine andere

Zelle wechselt (z.b. in ein Haus geht), dann gehen auch alle gespeicherten Daten im Script verloren.

Abhilfe: Wenn es wirklich wichtige Dinge sind, die ihr über den NPC oder jedes andere getroffene Objekt erfahren wollt, so ist es

am besten, diese an ein [Oblivion:Quest Scripts|Questscript] zu übertragen. Dazu muss man vorher eine Quest erstellt haben, und

dieser ein Script zuordnen, welches vorzugsweise nur die Variablen beinhaltet: <tesscript> scn questvarsave

ref target float zpos float rotation </tesscript> Speichern kann man dann mit dem Zauber so: <tesscript> scn vargaterspell

begin scripteffectstart set questname.target to getself set questname.zpos to getpos z set questname.rotation to getange z end </tesscript>

Links



Weitere Scripts aus dieser Kategorie

  

    Level 2

         



    {{#if: Scriptzauber | }} {{#if: Einführung Scriptzauber | }}