Construction Set Skriptthread zum Construction Set

Eine Variable muss nicht "DoOnce" heißen, damit etwas nur einmal ausgeführt wird. In dem Fall agiert "Act" als Variable.
Die Referenz kannst Du einstellen, indem Du im Render-Window auf die Lichter doppelklickst, oben eine Referenz eingibst und einen Haken bei "Persistent Reference" machst.
 
  • Like
Reaktionen: FreshTheFallen
Hm, ich müsste noch hinbekommen, dass die Lichter erstmal aus sind.
Ich glaube nicht dass diese Wandhalterungen so sind dass sie erstmal aus sind.
Die dürfen halt erstmal nicht brennen...
 
Hm, es funktioniert wie es soll :D
Aber der Interior ist nicht dunkel genug vorher.
Wieso ist der auf einmal nicht so dunkel wie im CS?
vllt, gibt es ja Interior, bei denen eig immer hell ist.
Wie kriege ich das hin, dass es so dunkel ist wie im CS auch gesehen?

Edit: Hat sich erledigt, in der Cellinfo war ein Häkchen bei "Behave Like Exterior" :oops:
Naja, hatte eine andere Zelle kopiert und geräumt und nicht darauf geachtet.
 
Zuletzt bearbeitet:
EDIT: Das Problem ist gelöst. Nachdem ich die Frage gestellt hatte, ist mir aufgefallen, dass ich den disable-Befehl in die falsche Reihenfolge gestellt habe. Bin halt MATLAB gewöhnt^^
Wenn die Mods wollen, kann das hier gelöscht werden, ansonsten lass ichs einfach mal stehen.


Dann hätt ich noch ne Frage:
Ich habe ein Skript, wodruch der Spieler nach Aktivieren eines Gegenstandes aus einem Menü auswäheln kann, welches Musikstück gespielt werden soll. Gleichzeitig werden auch noch diverse Effekte aktiviert.
Wenn der Spieler Musikstück eins oder zwei auswählt, funktioniert alles wie gewünscht. Nur wenn er keines auswählt, verschwindet auf einmal der Activator oO
Das ist aber recht blöd, weil er ja immer wieder auswählen soll, welche Musik er hören will.

Hier mal das Skript (es benutzt einen OBSE-Befehl, außerdem habe ich es aus dem CS-Wiki übernommen):

scriptname aaaNanoDanceTest1

short choosing
short choice
short working

begin onActivate
set Choosing to -1
set working to 1
end

begin GameMode
if working
set working to 1
if (Choosing == 0)
set working to 0
return

; ab hier Auswahl
elseif (Choosing == -1)
messagebox "Welche Musik wollt ihr hören?" "Musik 1" "Musik 2" "Keine"
set Choosing to 1
set Choice to -1

elseif (Choosing == 1)
if choice == -1
set choice to GetButtonPressed
endif

if choice == 0
playmusicfile "Data\Music\nanodance\Musik1\*.mp3"
aaaNanoDanceParticleBlue.enable
aaaNanoDanceParticleRed.disable
set Choosing to 0 ; stoppt das Script
endif

if choice == 1
playmusicfile "Data\Music\nanodance\Musik2\*.mp3"
aaaNanoDanceParticleRed.enable
aaaNanoDanceParticleBlue.disable
set Choosing to 0 ; stoppt das Script
endif

if choice == 2
aaaNanoDanceParticleRed.disable
aaaNanoDanceParticleBlue.disable
set Choosing to 0 ; stoppt das Script
endif

endif
endif
end
Als Activator habe ich aus einem der ARSidewaysCaveTablet eine neues objekt gemacht (also einfach die FormID geändert und ein neues Objekt erstellt).
 
Zuletzt bearbeitet:
Wie läuft das denn? Wenn du rot oder blau wählst wird das jeweilige enabled. Ist das dann ein neues Item das erscheint? Also so,dass du insgesamt 3 Objekte hast?
 
Also, wenn ich ein Musikstück auswähle, soll gleichzeitig ein bestimmter Effekt auftauchen. Wenn ich dann ein anderes wähle, wird dieser Effekt wieder versteckt und der neue Effekt taucht auf.
 
hi, ich brauche mal wieder einen Script.
Um einen Activator zu betätigen soll man eine bestimmte Anzahl an Stärke haben, wenn man die nicht hat soll eine Message kommen. Wenn man die Benötigte Stärke hat soll die Ausdauer um eine gewisse Anzahl an Punkte sinken, es soll etwas enablen, etwas anderes disablen und eine message soll kommen. mein script sieht bisher so aus:
Code:
[SIZE=2]scn Name[/SIZE]
 
[SIZE=2]short DoOnce[/SIZE]
 
[SIZE=2]Begin OnActivate[/SIZE]
[SIZE=2]If DoOnce == 0[/SIZE]
[SIZE=2] REF.disable[/SIZE]
[SIZE=2] REF.enable[/SIZE]
[SIZE=2] Set DoOnce to 1[/SIZE]
[SIZE=2] message "Message"[/SIZE]
[SIZE=2]else[/SIZE]
[SIZE=2] REF.disable[/SIZE]
[SIZE=2] REF.enable[/SIZE]
[SIZE=2] Set DoOnce to 0[/SIZE]
[SIZE=2] message "Message"[/SIZE]
[SIZE=2]endif[/SIZE]
[SIZE=2]end[/SIZE]

Wie und vorallem welche bedingung muss ich jetzt für die Stärke einfügen und wie mache ich das mit der Ausdauer?
Danke schonmal
LG
Dacri

EDIT: Der Script geht nicht, so wie ich ihn habe...Das Tor das enablen soll und das Tor das Disable soll verändert sich nicht. d.h. Das Tor, das verschwinden soll bleibt und das das kommen soll kommt nicht. ALso suche ich jetzt den ganzen Script.
 
Zuletzt bearbeitet:
So sollte es funktionieren:

Code:
SCN ...

Short Act


Begin OnActivate

if(act == 0)
    set act to 1
endif

end


Begin GameMode

if(act == 0)
     return
elseif(act == 1)
       if(player.getav strength < <wert>)
              Message "Du bist nicht stark genug!"

              set act to  0
             return
     else
           player.modav fatigue -<wert>
           <ref>.enable
           <ref>.disable

           Message "Bla"
           set act to 2
    endif

end
 
  • Like
Reaktionen: Dacri
(Bis auf den Return-Mist,der mMn überflüssig ist :p)
Jein, notwendig ist es nicht, aber nützlich bzw. der Performance zuträglich (allerdings sollte man es dann auch so weit wie möglich an den Anfang verfrachten).

GameMode-Scripts sollte man nach Möglichkeit vermeiden, da diese Scripts IMMER ausgeführt werden, auch wenn sie letztendlich nichts machen.
Auch werden immer sämtliche Befehle innerhalb einer If-Bedingung durchlaufen, selbst wenn die Bedingung nicht zutrifft. Oblivion weiß vorher nämlich nicht, wo das Script aufhört, oder wo die Bedingung zu Ende ist und die nächste anfängt.

Bei deinem Script sieht das so aus:
Code:
scn name
short added

begin gamemode
if added==0                  ; trifft Bedingung zu? Nein, weiter zum Nächsten
player.addspell Zauber1-ID   ; If-Bedingung trifft nicht zu, weiter
player.addspell Zauber2-ID   ; If-Bedingung trifft nicht zu, weiter
player.addspell Zauber3-ID   ; If-Bedingung trifft nicht zu, weiter
set added to 1               ; If-Bedingung trifft nicht zu, weiter
endif                        ; If-Bedingung zu Ende, weiter
end                          ; raus aus dem Script

7 Befehle, die jede Sekunde mehrere Dutzend Male ausgeführt werden.

Script mal etwas umgestellt:

Code:
scn name
short added

begin gamemode
if added==1                  ; trifft Bedingung zu? Ja, nächste Befehle ausführen
RETURN                       ; Script hier abbrechen und verlassen... Fertig!
endif
player.addspell Zauber1-ID
player.addspell Zauber2-ID
player.addspell Zauber3-ID
set added to 1
end

Hier werden nur noch 2 Befehle ausgeführt, bevor das Script verlassen wird. Bei so kleinen Scripts spielt das vielleicht noch nicht so eine große Rolle, aber in der Summe kann das schon was ausmachen, und manchmal werden die Scripte mit der Zeit immer umfangreicher, und wenn da irgendwann mehrere Hundert Zeilen drin stecken, wird das recht mühselig, das nachträglich alles umzustellen.

Quelle: http://cs.elderscrolls.com/constwiki/index.php/Minimizing_your_Script
 
  • Like
Reaktionen: Der_W@ldmeister
Achso dann hatte ich das ein bisschen missverstanden. Ich dachte, dass das Script nach einer unerfüllten Bedingung direkt zur nächsten übergeht:? Kein Wunder, dass es mir so seltsam vorkam...
 
Ich brauche ein Skript, wenn man etwas aktiviert soll sich eine Messagebox, mit den Möglichkeiten das man ein Item in eine Kiste tun kann, öffnen.
Und ich brauche ein Skript, dass sich das Gold in einer Truhe alle 7 ingame Tage um 1% erhöht.
 
1)
Code:
scn name

short button
short state

Begin onActivate

if state
 return
endif
if isActionRef player
 messagebox "Soll das Item in die Kiste?" "Ja" "Nein"
endif

end


Begin GameMode

if state
 set button to getButtonPressed
 if button == -1
  return
 elseif button == 0
  <Container-Ref>.addItem <Item-ID> 1
 endif
 set state to 0
endif

end

2)
Code:
scn name

short day
float hour
short count

Begin GameMode

if getItemCount Gold001 >= 100
 if day == 0
  set day to (GameDaysPassed + 7)
  set hour to GameHour
  return
 endif
 if day > GameDaysPassed
  return
 elseif day == GameDaysPassed && hour < GameHour
  return
 endif
 set count to (0.01 * getItemCount Gold001)
 addItem Gold001 count
 set day to (GameDaysPassed + 7)
 set hour to GameHour
 return
else
 set day to 0
 set hour to 0
endif

end
 
  • Like
Reaktionen: ichich
Ich brauch nochmal 2 Skripts
Das Erste: wenn man das Objekt das erste Mal ins Inventar bekommt soll etwas in 3 ingame
Tagen enable werden.
Das Zweite: Wenn man etwas aktiviert soll sich ne Messagebox öffnen mit der Möglichekeit das man ein Item aus einer Kiste bekommt aber nur solange sich das Item in der Kiste befindet.
 
Zu 2:
Code:
scn name
short choose
short button

begin onactivate
messagebox"Wollt Ihr eine Flasche Bier?" "ja" "Nein"
set choose to 1
end

begin gamemode
if choose==1
set button to getbuttonpressed
if button==0
  if getitemcount Item-ID >= 1
  player.additem Item-ID 1
  else
  message"Kein Bier mehr da..."
  endif
set choose to 0
set button to 2
elseif button==1
;nichts
set button to 2
set choose to 0
endif
end

Dieses Script auf den Container. Wenn das Script nicht auf den Container soll, muss das "if getitemcount Item-ID >=1" ersetzt werden durch "if container-REF.getitemcount Item-ID >=1"
 
Zuletzt bearbeitet:
  • Like
Reaktionen: ichich
Es gab doch einen Befehl, welcher das Bild verwackeln lässt oder?

Wenn ja, könnte mir einer schreiben, welcher für 1-2 Sekunden einen ENORMEN Wackler macht.
Der Script soll auf einem Trigger liegen.
 
Hallo.

Hoffe, das gehört nich in "Allgemeine CS-Fragen"

Weiß einer von euch, wie man den Anfang des Spiels verändert? das heist ein anderes anfangsvideo, anderen Startpunkt (iwas mit dem quest "chargenerator" [oder so]) wenn möglich, anderes Menülayout?

LG

Creamy