Archiv verlassen und diese Seite im Standarddesign anzeigen : Skripten: Zaubereffekte und Wasseranstieg
Hallo
Ich möchte gerne eine Statue machen, die beim Wirken eines bestimmten Zaubereffekts eine Reaktion hervorruft. Gut, das ist ja nicht schwer. Aber ich möchte nicht die Reaktion durch einen ganz bestimmten Zauber hervorrufen (zB "StandardCalmTarget2Apprentice"), sondern durch alle Zauber einer Art (also zB alle "Beruhigungs"-Zauber).
Wie setze ich dies per Skript um?
Andere Frage:
Ist es möglich über Skript per Schalter den Wasserpegel ansteigen zu lassen? Also nicht schlagartig, sondern eher langsam, da sich der Spieler gleichzeitig in der selben Zelle befinden soll.
[1]sondern durch alle Zauber einer Art (also zB alle "Beruhigungs"-Zauber).
Wie setze ich dies per Skript um?
[2]Ist es möglich über Skript per Schalter den Wasserpegel ansteigen zu lassen?
1. Begin OnMagicEffectHit ####
#### = gewünschter Effekt.
2. Uah. Nicht, daß ich wüßte.
Danke, dieser Befehl wird mir noch sehr hilfreich sein. :)
zum 2. Also langsames Ansteigen ist auch nicht unbedingt nötig, es kann auch eine schlagartige Änderung der Wasserhöhe sein, falls dies möglich ist.
wie wärs mit vielen kleinen schlagatigen Anstiegen hintereinander, mit nem zeitintervall dazwischen?
http://cs.elderscrolls.com/constwiki/index.php/Changing_Water_Level_via_Script
Ist wie es aussieht nicht möglich ohne OBSE....
Naja, dann werde ich mein "Problem" wohl ein wenig anders lösen müssen. :)
So, hab noch ein Problem.
Bei Begin OnMagicEffectHit gehört eine 4-stellige Buchstabenfolge hin, welche den Zaubereffekt beschreibt. Woher soll ich jetzt wissen, was ich hier nehmen soll?
Und wie würde das Resultat-Skript aussehen, das beim Anwenden des gewünschten Zaubers einen Activator auslösen soll?
Bei Begin OnMagicEffectHit gehört eine 4-stellige Buchstabenfolge hin, welche den Zaubereffekt beschreibt. Woher soll ich jetzt wissen, was ich hier nehmen soll?Aus dem CS. Die EditorID jedes Zaubereffekts wird im CS angezeigt, wenn man da ein paar Balken verschiebt. Beispiel: FIDG = Fire Damage.
Script: Schau einfach vorhandene Scripts an, z.B. das des Magiergildenauftrags ;)
Script: Schau einfach vorhandene Scripts an, z.B. das des Magiergildenauftrags
Ja, das hab ich mir schon ausführlich angeschaut. ;)
Das Problem ist, dass die bereits vorhandenen Skripte immer mit so vielen anderen Dingen "vollgestopft" sind. So enthält dieses Magiergildenskripte erstmal 4 solche Abfragen, dann noch andere Questabfragegen und und und.
Ich möchte ein sauberes, einfaches Skript, das auf eine kurze Magieeffektabfrage einen Activator auslöst. :(
Edit:
Die Lösung war ganz einfach. :) Warum müssen selbst die einfachsten Skripte von Bethesda Softworks immer so komplex und kompliziert aufgebaut sein? :D (zB stinknormale Schalter).
Mein Ergebnis ist ganz kurz, benötigt gerade mal 2 Variablen und sieht sauber aus:
Scriptname 1FeueraufActivator
;Feuer auf den Activator löst den ParentActivator aus.
ref myParent
ref mySelf
Begin OnMagicEffectHit FIDG
set myParent to getParentRef
set mySelf to getSelf
myParent.activate mySelf 1
return
End
Funktioniert schon hervorragend, nur den Balken für die 4 Buchsttabenkennung habe ich nach langen Rumschiebeversuchen immer noch nicht gefunden. Könntest du mir eventuell einen Screenshot schicken?
Low Post
18.12.2007, 20:12
Schau dir alternativ die Liste im Wiki (http://cs.elderscrolls.com/constwiki/index.php/Magic_Effects_List) an.
PS:
Ich hab mal deine Posts zusammengefügt. In Zukunft bitte Doppelpost innerhalb so kurzer Zeit unterlassen.
hier is noch mal ein screenshot ausm cs:
http://img340.imageshack.us/img340/9118/neubitmapzp1.th.jpg (http://img340.imageshack.us/my.php?image=neubitmapzp1.jpg)
Danke, funktioniert jetzt so wie es sein sollte.
Neues Problem:
Ich möchte ein kleines Skript schreiben, das den Spieler prüft, ob ein bestimmter Magiezustand auf ihm liegt. Ich habe in den bereits vorhandenen Skripten gesucht, aber nichts gefunden. Kann mir jemand dabei behilflich sein?
Edit:
Ein Trigger ist nach einmaligem Auslösen "aufgebraucht", wenn ich mich nicht irre? Ließe sich dieser in diesem Fall durch das Betreten eines anderen Triggers wieder aktivieren? Oder schreibe ich gerade Humbug und Triger können so oft ausgelöst werden, wie man will?
*auf sich aufmerksam mach*
Was ich genau bezwecken will:
Bei Berührung eines Triggers soll per Skript geprüft werden, ob der Spieler unsichtbar ist (=> MagicEffect!).
Gibt es dafür einen geeigneten Befehl?
Und so nebenbei:
Wie heißt eigentlich die Skriptsprache, die im CS verwendet wird?
Low Post
20.12.2007, 15:49
HasMagicEffect (http://cs.elderscrolls.com/constwiki/index.php/HasMagicEffect)
Bei deinem Trigger-Problem kann ich dir leider nicht weiterhelfen. Die haben mir auch noch nicht ihr Geheimniss offenbart.
kenet_korva
20.12.2007, 16:58
Sieh dir mal das Script des Triggers an. Höchstwarscheinlich gibt es dort eine Variable "doonce" die am ende des Scripts auf einen Wert gesezt wird der höher als 0 ist. Das Script des anderen Triggers könnte dann wiefolgt lauten:
scn Scriptname
short doonce
ref parent
begin OnTrigger Player
if doonce == 0
Set Parent to GetParentRef
Set Parent.doonce to 0
set doonce to 1
endif
end
Dann musst du nur den Trigger den du wieder aktiviert haben willst als Parent des anderen einstellen.
Es funktioniert jetzt. Nur habe ich jetzt ein Problem.
Sobald ich den Trigger betrete, der auf Unsichtbarkeit prüft soll dieser danach nicht mehr ausgelöst werden können, bis der andere Trigger passiert wurde. Beim Betreten des anderen Triggers soll das Auslösen dieses Triggers dann wieder möglich sein.
Edit: (Keine Codefunktion bei Edit? :( )
Hier beide Quellcodes:
Haupttrigger:
Scriptname 1TestUnsichtbartest
short triggered
ref target
ref mySelf
ref timer
begin onTriggerActor
if timer != 1
if player.HasMagicEffect INVI != 1
set target to getParentRef
set mySelf to getSelf
target.activate mySelf 1
set timer to 1
endif
else
MessageBox "Test - Tür nicht aktiviert!"
endif
end
Rücksetztrigger:
scn 1DoonceRuecksetzen
short timer
ref parent
begin OnTrigger Player
Set Parent to GetParentRef
Set Parent.timer to 0
end
Beim Rücksetzen wird der Timer nicht wie erwartet zurückgesetzt - Die Messagebox "Test - Tür nicht aktiviert!" wird ausgegeben. Und ja, der Rücksetztrigger hat den Haupttrigger als Parent.
Sieht ganz danauch aus, als ob bei dem Rücksetzsrkipt was nicht klappt.
Low Post
20.12.2007, 17:59
Beim Edit gibt's sehr wohl Code-Tags:
Entweder klickst du auf Erweitert um in den normalen Editor zu kommen, oder du schreibst selber an den Anfang des Codes
und an's Ende hin.
Zu deinem Script:
ich würde Timer noch zu einer Short-Variablen machen.
als Ref ist das imho etwas doof. ;)
Außerdem ist bei deinem Script, so wie es jetzt aussieht die Timer-Variable im Zurücksetzt-Script etwas sinnlos ist (wird nicht verwendet).
Derzeitiger Zustand des Skripts:
Scriptname 1TestUnsichtbartest
ref target
short doonce
ref myself
begin onTriggerActor
if doonce == 0
MessageBox "Test - Tür aktiviert!"
if player.HasMagicEffect INVI != 1
set target to getParentRef
set myself to getself
target.activate myself 1
set doonce to 1
set myself to 0
endif
endif
end
scn 1DoonceRuecksetzen
short doonce
ref parent
begin OnTrigger Player
Set Parent to GetParentRef
Set Parent.doonce to 0
end
(Wenn ich versuche im Rücksetzskript "short doonce" zu entfernen wirft er mir Skript Errors entgegen)
Funktioniert nur leider nicht wie es sollte -> Hauptskript wird einmal ausgelöst, danach nie wieder. -> doonce wird nicht zurückgesetzt!
Edit: Hier noch das vorgefertigte Skript des Activator-Doors, falls dieses irgendwie reinpfuschen könnte:
scn RuinsGATEopenSCRIPT
; activated by linked child
; activates optionally linked parent after 1 sec delay
short init
short closed
short next
short busy
float timer
ref mySelf
ref myParent
begin onActivate
set mySelf to getSelf
set myParent to getParentRef
if isActionRef player == 1
if closed == 1
message "Dieses Tor wird anderswo geöffnet."
endif
elseif isActionRef mySelf == 0 && busy == 0
if closed == 0
playgroup forward 0
set closed to 1
disableLinkedPathPoints
else
playgroup backward 0
set closed to 0
enableLinkedPathPoints
endif
set next to 1
set timer to 1
set busy to 1
endif
end
begin gameMode
if init == 0
; set up ref vars
set mySelf to getSelf
set myParent to getParentRef
; prepare linked pathsgrid points
enableLinkedPathPoints
set init to 1
endif
; daisy-chain activation
if next == 1 && timer <=0
set next to 0
myParent.activate mySelf 1
endif
if timer > 0
set timer to timer - getSecondsPassed
endif
if isAnimPlaying == 0 && busy == 1
set busy to 0
endif
end
begin onReset
reset3DState
set closed to 0
set next to 0
set busy to 0
enableLinkedPathPoints
end
Problem gelöst. Ich habe das Skript auf nun anders geschrieben, sodass doonce automatisch zurückgesetzt wird, wenn sich der Spieler davon entfernt.
Nun ein neues Problem:
scn 1FalscherSchrittTeleport2
short triggered
float timer
ref me
begin onTriggerActor
if triggered == 0
set me to getself
cast 1Eiseffekt me
Player.MovetoMarker 1MarkerBack
set triggered to 1
set timer to 5
endif
end
begin gameMode
if triggered == 1 && timer <= 0
set triggered to 0
endif
if timer >= 0
set timer to timer - getSecondsPassed
endif
end
Dieses Skript soll beim Betreten eines Triggers den Spieler einfach zum Marker teleportieren. Dummerweise wird dies zu einer Endlosschleife. Was habe ich hier vergessen?
So, ich habe nun ein neues Problem.
Ich möchte in einem Skript nach ein if-Abfrage ganz einfach einen bestimmten NPC töten.
Versucht habe ich dies mit
kill NameRef
doch der NPC stirbt nicht wie geplant.
Low Post
25.12.2007, 00:06
Wiki hilf (http://cs.elderscrolls.com/constwiki/index.php/Kill)
kill bewirkt, dass der "Calling Actor" stirbt. Der Paramteter danach bestimmt den Verursacher.
Richtig wäre also:
NameRef.kill
Falls du dem Spiel noch sagen willst, der Spieler ist verantwortlich:
NameRef.kill Player
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.