Construction Set Skriptthread zum Construction Set

Danke, das mit OBSE ist kein Problem ^^. Aber gibt es noch einen besonderen Unterschied zwischen den beiden Befehlen?
 
Ja, "ModAttackDamage" verändert den aktuellen Schaden der Waffe, wobei "SetAttackDamage" den Schaden der Waffe auf den angegeben Wert stuft.
Übrigens lautet der Syntax zu den beiden Befehlen so:

Code:
ModAttackDamage <Wert> <Waffe>

Oder eben:

Code:
SetAttackDamage <Wert> <Waffe>
 
  • Like
Reaktionen: Tywele
Wie kann ich abfragen, ob eine bestimmte Zeitspanne vergangen ist (wie die berühmten 24 Stunden, nach deren Verstreichen diverse NPCs mehr wissen, als zuvor).
 
Hey Scharesöftler, nun habe ich auch mal wieder ein Problem:
Gibt es eine möglichkeit ein Script zu erstellen der eine Variable um +1 (das geht mit "set s1 to s1 +1" oder?) erhöht (Variable: s1).
Wenn irgendeine Person geshlagen wird ohne das ich einen "onHit" script auf jedden NPC legen muss?
Ich hoffe ich hab alles verständlich erklärt.
 
Muss es der NPC sein, der mit irgendeiner Waffe getroffen wird oder werden irgendwelche NPCs mit einer bestimmten Waffe getroffen?
Ich versteh' nämlich grad nicht, was du willst. :huh:

[EDIT]

Ah, ne.
Ich hab's verstanden.

Mach es als Verzauberung, welche auf der Waffe mit einem Script-Effekt liegt.
Dann der Effekt so ...

Code:
scn ....

ref Ziel

Begin scripteffectstart

set s1 to (s1 + 1)

End
 
Zuletzt bearbeitet:
  • Like
Reaktionen: death-lord
@ Dunkle Schwester:

Das könnte man so machen:

Code:
SCN ...

short day
short once

Begin gameMode

if(once == 0)
     set day to gamedayspassed
     set once to 1
 else
         if(gamedayspassed != day)
               ; do stuff / zeug machen
               set once to 2
         endif
    endif

end
@ Death-Lord:

Du willst also, sobald man irgendeinen NPC schlägt, eine Variable hochgesetzt wird? Und das nur einmal?
Das geht nur mit OBSE. Ich könnte Dir das Script hierreinschreiben, ich weis aber nicht, ob das mit OBSE für Dich okay ist. :?

MfG,
Kahmul.
 
  • Like
Reaktionen: Darth Andauril
Ich habe ein Script geschrieben, welches ich auf ein Buch gemacht habe. Jedoch kann ich es jetzt nicht mehr lesen und ich wollte eigentlich, dass das Script ausgeführt wird, sobald man das Buch liest, aber woran liegt das, dass ich es jetzt plötzlich nicht mehr lesen kann?

Das Script fängt mit OnActivate an und soll nur, nach Abfrage der Stufe des Spielers, einen bestimmten Zauber hinzufügen.
 
Danke ;)

Und gleich noch eine Frage:

Für eine Quest soll der Player in eine bestimmte Cell teleportiert werden und dann, nach dem er mit einem NPC in dieser Cell gesprochen hat, wieder zurück an seinen Ausgangspunkt teleportiert werden. Das ganze soll nur stattfinden, wenn eine bestimmte Queststage erreicht wurde. Der Spieler wird teleportiert, sobald er einen bestimmten Gegenstand benutzt.

Den Script zum Hinteleportieren hab ich schon:

scn ...

short once

Begin OnActivate player
if (getstage <Quest> == <Stage>)
set once to 1
player.moveto <MarkerRef>
endif
end

Ist der richtig so?

Und die zweite Frage: Wie schicke ich den Player an den Ort zurück, von dem er kam? Diese Cell hat nämlich keinen Ausgang oder Eingang, auf normalen Wege kommt der Spieler da also nicht wieder weg.
 
@ Tywele:

Du musst am Ende des Scripts, aber noch vor dem "End" ein "Activate" einfügen, denn der OnActivate-Block verhindert die normale Aktivierung, aber durch ein "activate" wird der Gegenstand dann noch noch aktiviert. ;)

@ Dunkle Schwester: Das "MoveTo"-Script ist in Ordnung. Aber damit du den Spieler zu seiner Ausgangsposition zurück bekommst, brauchst du "getPos" + "setPos" und "getAngle" + "SetAngle".
Also würde ich in einem Quest-Script, je nach Quest-Stufe, die Position des Spieler feststellen, ihn teleportieren und ihn dann wieder zurück teleportieren.
Also das Quest-Script dann so:

Code:
SCN ...

Float xPos
Float yPos
Float zPos

Float xAngle
Float yAngle
Float zAngle

Float fQuestDelayTime

Short Once

Begin GameMode

if(fquestdelaytime)
     set fquestdelaytime to 0.1
endif

 if(once == 0)
      if(getstage <quest> == <Stage>)    ; Vor dem Teleport.
            set xPos to player.getpos x
            set yPos to player.getpos y
            set zPos to player.getpos z

            set xAngle to player.getAngle x
            set yAngle to player.getAngle y
            set zAngle to player.getAngle z 

            set once to 1

            player.moveTo <zelle>
      endif
    elseif(once == 1)
            if(getstage <quest> == <stage>)
                   player.setpos x xPos  
                   player.setpos y yPos  
                   player.setpos z zPos      

                   player.setangle x xAngle
                   player.setangle y yAngle
                   player.setangle z zAngle

                   set once to 2
            endif
       endif

end
 
Zuletzt bearbeitet:
So jetzt kann ich zwar das Buch wieder lesen, aber das Script schein noch nicht so zu funktionieren :lol:

Ich will ja einen Zauber hinzufügen, also player.addspell, aber was kommt danach? Der Ingame-Name des Zaubers, die ID oder doch die FormID? :?
 
@darkruler hey, erstmal danke!
Gibts denn noch andere möglichkeiten als eine Verzauberung? Wäre dumm wenn man die Waffe nicht mehr ingame verzaubern kann...
 

Danke, aber es scheint, dass ich machen kann was ich will, der Zauber wird einfach nicht hinzugefügt.

Mein Script:

Code:
scn ZauberScript

Begin OnActivate

if player.getlevel >= 5 && player.getlevel < 10
 player.addspell <Mein Zauber Stufe 5>
elseif player.getlevel >= 10 && player.getlevel <15
 player.addspell <Mein Zauber Stufe 10>
 player.removespell <Mein Zauber Stufe 5>
elseif...
usw.

endif
activate
end

Edit: Da aktualisiert man mal nicht den Tab und schon haben wieder 5 Leute was geschrieben ^^
 
Nein, die muss ich doch in das Script eintragen... oder etwa nicht?

Nein. Alles was du eintragen musst sind die Dinge, die in "<" eingeklammert sind. ;)
Für weitere Fragen für GetPos und SetPos klickste auf die Links. ;)

@ Tywele:

Da weis ich echt nicht weiter. :? Versuch mal das Level in einer Variablen zu speichern und dann abzufragen. Aber ich glaube kaum, dass das was ändert.
Oder du versuchst das ganze in einem GameMode-block.
 
  • Like
Reaktionen: Darth Andauril
@ Kahmul: Ist dir bewusst, dass dieser Script 10 mal pro Sekunde ausgeführt wird? Es ist nicht mal ein return-befehl enthalten, was die Performance nicht unwesentlich beeinträchtigt. Das geht wesentlich besser.

@ Dunke Schwester: Ich würde es anders machen. Es ist erstens performance freundlicher und zweitens meiner Meinung nach einfacher. Also:
Du platzierst noch einen Marker (ob XMarker oder XMarkerHeading ist dir überlassen) einfach direkt neben den anderen, wo der Spieler hinteleportiert wird. Und dann wird dein Script des gegenstandes etwas angepasst:

Code:
scn Scriptname

short once

Begin OnActivate player
if (getstage <Quest> == <Stage>) && (once == 0)
set once to 1
<MarkerRef_2>.moveto player
player.moveto <MarkerRef_1>
endif
end
Kurze Erklärung: Der zweite Marker wird beim Aktivieren des Gegenstandes zur Position des Spieler teleportiert, danach der Spieler zum eigentlichen Marker. Dadurch ist sozusagen die Position des Spielers gespeichert, bevor er teleportiert wurde. Anschließend fügst du noch in den Result Script des Gesprächs, nach dem der Spieler zurückteleportiert werden soll, folgende Zeile hinzu:
Code:
player.moveto <MarkerRef_2>

Das ist jedenfalls eine saubere Variante.

Grüße
Gildur
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Darth Andauril
Okay... das hinkommen ist ja kein Problem, wie komm ich jetzt zurück? Aus der Cell, zu der der Player hin teleportiert wird, gibt es ja kein entkommen außer über den Teleport, und der Teleport zurück soll erst stattfinden, wenn der Spieler mit dem NPC in dieser Cell gesprochen hat.

äh... ok, vergiss die Frage, hat sich erledigt... ich hab das mit dem Result Script überlesen *hust*

-- Übrigens... mein CS erkennt irgendwie kein "doonce"... ich muss es dann immer in "once" umändern... der Effect bleibt doch dann der selbe, oder?
 
Zuletzt bearbeitet: