Oblivion:Einführung Scriptzauber: Unterschied zwischen den Versionen

Aus Skript-Wiki
Wechseln zu: Navigation, Suche
K
 
(8 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
== Thema ==
 
== Thema ==
Die Kategorie der Scriptzauber oder auch [Oblivion:Magic Effect Scripts|Magic Effect Scripts] ist eigentlich die Neuerung schlechthin  
+
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.
  
im Scriptingbereich im Bezug zu Morrowind. Denn Scriptzauber sind unheimlich vielseitig und lassen sich auf fast jedes Objekt in
+
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:
 
 
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 ===
 
=== Blocktypen ===
'ScriptEffectStart' - Dieser Block wird genau einmal(!) als erstes ausgeführt, wenn der Zauber auf ein Ziel trifft
+
'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  
+
'ScriptEffectUpdate' - Dieser Block wird jeden Frame, den der Zauber wirkt, ausgeführt (auch in denselben wie ScriptEffectStart) und ScriptEffectEnd)
 
 
ScriptEffectEnd)
 
 
'ScriptEffectEnd' - Dieser Block wird wieder genau einmal ausgeführt, wenn der Zauber endet
 
'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.
  
Wie muss man sich das praktisch vorstellen? Wenn man im [Oblivion:Spell Window|Spell Window] seinen Zauber mit dem jeweiligen
+
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).
 
 
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 ===
 
=== Funktionsweise von Scriptzaubern ===
Sagen wir, der Spieler feuert einen selbsterstellten Zauber mit Scripteffekt irgendwo in die Gegend. Der Zauber trifft auf einen NPC.  
+
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 [[ob:NPC|NPC]] ein Script zuweist, jedoch ganz automatisch.  
  
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 [[ob:NPC|NPC]] ab. Das Script denkt und handelt also so, wie als wenn es schon immer dem [[ob:NPC|NPC]] zugewiesen ist, obwohl dieser [[ob:NPC|NPC]] evtl. in Wirklichkeit gar kein Script hat!
 
 
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:
 
  
  
Zeile 48: Zeile 23:
  
 
==== Scriptzauber als Zauber ====
 
==== 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  
+
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:
  
Zaubereffekte zur verfügung hat (wie Feuerschaden usw.), sondern eigene scripten kann.
 
Das sieht dann ungefähr so aus:
 
 
<tesscript>
 
<tesscript>
 
scn melonsmash
 
scn melonsmash
Zeile 58: Zeile 32:
  
 
begin scripteffectstart
 
begin scripteffectstart
set target to getself
+
  set target to getself
target.placeatme melon 0 0 200
+
  target.placeatme melon 0 0 200
 
end</tesscript>
 
end</tesscript>
Aha, statt irgendwelchen langweiligen Zaubern fällt dem Ziel jetzt eine Melone auf den Kopf! Vielleicht nicht ungeheuer hilfreich,  
+
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.
 
 
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 ====
 
==== Scriptzauber zum Herausfinden von RefIDs und Eigenschaften anderer Objekte ====
Herausfinden von RefIDs, werdet ihr fragen, das geht doch einfach in jedem Script mit [[Oblivion:Getself|GetSelf]],  
+
Herausfinden von RefIDs, werdet ihr fragen, das geht doch einfach in jedem Script mit [[Oblivion:GetSelf|GetSelf]], [[Oblivion:GetActionRef|GetActionRef]] oder z.B. auch [[Oblivion:GetParentRef|GetParentRef]]. Jaja, schon richtig, aber normalerweise
  
[[Oblivion:getactionref|GetActionRef]] oder z.b auch [[Oblivion:Getparentref|GetParentRef]]. Jaja, schon richtig, aber normalerweise
+
kann man dabei nur die RefID des Objektes auf dem das Script liegt, seinen [[ob:Parent|Parent]] oder den, der es aktiviert hat, herausfinden.
  
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:
 
 
Scriptzauber können nahezu jede RefID und andere Informationen über das getroffene Objekt herausfinden, z.b so:
 
 
<tesscript>
 
<tesscript>
 
scn ActivateThingys
 
scn ActivateThingys
Zeile 82: Zeile 50:
  
 
begin Scripteffectstart
 
begin Scripteffectstart
set Me to getself
+
  set Me to getself
switch.activate me
+
  switch.activate me
set questID.person to me
+
  set questID.person to me
set hp to getbaseav health
+
  set hp to getbaseav health
messagebox "Lebenspunkte: %.0f" hp
+
  messagebox "Lebenspunkte: %.0f" hp
 
end</tesscript>
 
end</tesscript>
Das sieht jetzt etwas wie sinnlos aneinandergereihte Befehle aus (ist es auch mehr oder weniger), aber zeigt erstmal etwas  
+
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 [[ob:NPC|NPCa]]heraus, diese kann man gleich weiter verwerten, indem man z.B. von genau diesen [[ob:NPC|NPC]] einen Schalter aktivieren lässt. Oder man speichert die RefID in einem Questscript.
 
+
Genausogut kann man sich auch alle Daten von dem [[ob:NPC|NPC]] anzeigen lassen, wie die Lebenspunkte usw... Und das geht alles, obwohl der [[ob:NPC|NPC]] normalerweise kein Script hat!
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 zur Steuerung von NPCs ====
Scriptzauber eignen sich auch hervorragend zur Massenmanipulation. Man muss nicht immer an die selbstverständlichen Aufgaben von  
+
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 [[ob:NPC|NPCs]] sagt, dass sie sich vor der Kirche zu versammeln haben.
 
 
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:
 
Ähnliche Dinge kann man selber auch ohne großen Aufwand mit Scriptzaubern machen. Dazu würde schon das Script hier reichen:
 
<tesscript>
 
<tesscript>
Zeile 112: Zeile 66:
  
 
begin scripteffectstart
 
begin scripteffectstart
addscriptpackage dosomething
+
  addscriptpackage dosomething
evp
+
  evp
 
end
 
end
 
</tesscript>
 
</tesscript>
Zeile 121: Zeile 75:
  
 
==== Gültige Ziele ====
 
==== 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  
+
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:
 
 
schießt und alle Dinge das machen, was man will. Scriptzauber funktionieren nur auf diesen Objekten:
 
  
 
Die volle Funktionsfähigkeit entfalten Scriptzauber bei '[[Oblivion:NPC|NPCs]]' und '[[Oblivion:Kreatur|Creatures]]'.
 
Die volle Funktionsfähigkeit entfalten Scriptzauber bei '[[Oblivion:NPC|NPCs]]' und '[[Oblivion:Kreatur|Creatures]]'.
 
 
Bei 'Leichen', '[[Oblivion:Activator|Activators]]', '[[Oblivion:Light|Lights]]' '[[Oblivion:Container|Containers]]',  
 
Bei 'Leichen', '[[Oblivion:Activator|Activators]]', '[[Oblivion:Light|Lights]]' '[[Oblivion:Container|Containers]]',  
 +
'[[Oblivion:Door|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.
  
'[[Oblivion:Door|Doors]]' und 'Furniture' werden die 3 Blöcke (sofern vorhanden) nur ''einmal'' durchlaufen, danach endet der Zauber,
+
Bei '[[Oblivion:Static|Statics]]', '[[Oblivion:Tree|Trees]]' und allen '[[Oblivion:Item|Items]]' funktionieren Scriptzauber ''nicht''.
 
 
ganz einfach deswegen, weil man diesen Objekten im CS normalerweise auch keine Zauber zuordnen kann.
 
 
 
Bei '[[Oblivion:Static|Statics]]', '[[Oblivion:Tree|Trees]]' und allen '[[Oblivion:Item|Items]]' funktionieren Scriptzauber  
 
 
 
''nicht''.
 
  
 
==== Probleme ====
 
==== Probleme ====
Probleme treten bei der Variablenspeicherung auf. Wenn euer Zauber die Aufgabe hat, wichtige Daten über das getroffene Objekt zu  
+
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 zu Ende 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 [[ob:NPC|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.
  
sammeln, dann müsst ihr diese woanders speichern, als in dem Script des Zaubers. Solange der Zauber aktiv ist, kann er
+
''Abhilfe'': Wenn es wirklich wichtige Dinge sind, die ihr über den [[ob:NPC|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:
 
 
[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>
 
<tesscript>
 
scn questvarsave
 
scn questvarsave
Zeile 167: Zeile 99:
  
 
begin scripteffectstart
 
begin scripteffectstart
set questname.target to getself
+
  set questname.target to getself
set questname.zpos to getpos z
+
  set questname.zpos to getpos z
set questname.rotation to getange z
+
  set questname.rotation to getange z
 
end
 
end
 
</tesscript>
 
</tesscript>
 +
  
 
== Links ==
 
== Links ==
Zeile 177: Zeile 110:
 
* [[:Kategorie:Zauber|Zauber]]
 
* [[:Kategorie:Zauber|Zauber]]
 
* [[Oblivion:Magic Effect Scripts|Magic Effect Scripts]]
 
* [[Oblivion:Magic Effect Scripts|Magic Effect Scripts]]
 +
* [[Oblivion:Questvariablen nutzen|Questvariablen nutzen]]
 +
  
 +
[[Kategorie:Scriptzauber|Einführung Scriptzauber]]
  
{{ Scriptkategorie |Scriptzauber|Einführung Scriptzauber}}
+
{{ Scriptkategorie |Scriptzauber|Level_1_Scripts}}

Aktuelle Version vom 19. Mai 2009, 16:06 Uhr

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 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!


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 NPCaheraus, diese kann man gleich weiter verwerten, 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 Variablen speichern wie jedes andere normale Script auch. Wenn aber der Zauber zu Ende 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 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: Level_1_Scripts | }}