Oblivion:Einführung Scriptzauber: Unterschied zwischen den Versionen
MrMuh (Diskussion | Beiträge) |
MrMuh (Diskussion | Beiträge) |
||
Zeile 6: | Zeile 6: | ||
Oblivion anwenden. | Oblivion anwenden. | ||
− | Als allererstes muss man wissen, dass Scriptzauber nicht ganz wie normale Scripts geschrieben werden. Siehe [Oblivion:Magic Effect | + | 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 | + | 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 | Effect deklarieren muss und nicht Object Script, und dass man nicht die normalen Blocktypen benutzen darf, sondern eigens dafür |
Version vom 20. Dezember 2008, 23:29 Uhr
Inhaltsverzeichnis
Thema
Die Kategorie der Scriptzauber oder auch 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 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 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 | }}