@ DragonRider:
100%-ig kann das, was du willst nur mit OBSE realisiert werden. Alerdings nur mit ellenlangen Reference-Walking-Funktionen. Die Mühe erspare ich mir jetzt lieber und schreibs in einer einfachen Variante ohne OBSE.
Zuerst brauchst du eine Quest mit so einem Skript:
Code:
scn name
ref target
short state
Dann kommt das Skript für den Zauber:
Code:
scn name
ref target
float pos_x
float pos_y
float pos_z
float ang_x
float ang_z
Begin ScriptEffectStart
if <Quest-ID>.state
if getIsReference <Actor-Ref>
set <Quest-ID>.state to 0
disable
set pos_x to getPos x
set pos_y to getPos y
set pos_z to getPos z
set ang_x to getAngle x
set ang_z to getAngle z
set target to <Quest-ID>.target
target.moveTo <Actor-Ref>
target.setPos x pos_x
target.setPos y pos_y
target.setPos z pos_z
target.setAngle x ang_x
target.setAngle z ang_z
target.enable
else
messagebox "Ihr könnt den Zauber jetzt nicht auf diesen Charakter legen!"
endif
else
set target to getSelf
set <Quest-ID>.target to target
set <Quest-ID>.state to 1
duplicateAllItems player
set pos_x to getPos x
set pos_y to getPos y
set pos_z to getPos z
set ang_x to getAngle x
set ang_z to getAngle z
disable
<Actor-Ref>.moveTo target
<Actor-Ref>.setPos x pos_x
<Actor-Ref>.setPos y pos_y
<Actor-Ref>.setPos z pos_z
<Actor-Ref>.setAngle x ang_x
<Actor-Ref>.setAngle z ang_z
<Actor-Ref>.enable
endif
end
Das birgt jetzt natürlich mehrere Probleme, zum Beispiel, wenn der Zauber auf einen questrelevanten NPC gewirkt wird oder der Ziel-NPC Questgegenstände im Inventar hat. Außerdem wird die Ausrüstung des NPC nicht automatisch vom Spieler ausgerüstet (dafür müsste OBSE benutzt werden) und die Ausrüstung wird auch nicht wieder vom Spieler entfernt (auch dafür wäre OBSE vonnöten, falls es überhaupt möglich ist).
Im unteren Skript trägst du bei "<Quest-ID>" die ID der Quest ein, der du das obere Skript zugewiesen hast, bei "<Actor-Ref>" fügst du die Referenz des Actors ein, der immer erscheinen soll. Dafür klickst du diesen NPC, wenn er im CS platziert ist, doppelt an und gibst im aufpoppenden Fenster in der obigen Zeile die Referenz ein, die du dann kopierst.
@ CreamyCewie:
Ich würde dir ja raten, einfach einen Wasserlauf-Effekt zu benutzen, aber der ist ja auch aktiv, wenn der Spieler nicht im Wasser ist. Eine Alternative, die mir einfällt, könntest du afaik mit OBSE realisieren:
Code:
scn name
ref target
short enabled
ref cell
float water_height
float pos_z
float pos_x
float old_pos_x
float pos_y
float old_pos_y
Begin ScriptEffectStart
set target to getSelf
set cell to getParentCell
set water_height to getParentCellWaterHeight
<Platte1-Ref>.moveTo target
<Platte2-Ref>.moveTo target
end
Begin ScriptEffectUpdate
if cell != getParentCell
set cell to getParentCell
set water_height to getParentCellWaterHeight
<Platte1-Ref>.moveTo target
<Platte2-Ref>.moveTo target
endif
if water_height >= getPos z
set pos_x to getPos x
set pos_y to getPos y
if pos_x != old_pos_x && pos_y != old_pos_y
if enabled == 1
set enabled to 2
<Platte1-Ref>.disable
<Platte2-Ref>.setPos x pos_x
<Platte2-Ref>.setPos y pos_y
<Platte2-Ref>.setPos z pos_z
<Platte2-Ref>.enable
else
set enabled to 1
<Platte1-Ref>.setPos x pos_x
<Platte1-Ref>.setPos y pos_y
<Platte1-Ref>.setPos z pos_z
<Platte1-Ref>.enable
<Platte2-Ref>.disable
endif
endif
set old_pos_x to pos_x
set old_pos_y to pos_y
return
elseif enabled == 1
<Platte1-Ref>.disable
elseif enabled == 2
<Platte2-Ref>.disable
endif
set enabled to 0
end