Construction Set Skriptthread zum Construction Set

Code:
scn w123
short choice
short sword

Begin ScriptEffectStart
      MessageBox "Welches Schwert wollt ihr haben?", "S1", "S2", "S3"
set choice to 1
End


Begin ScriptEffectUpdate
if choice==1
    Set sword to GetButtonPressed
        if sword == 0
            ;Auswahl 1 S1
            player.additem abc 1
        elseif sword == 1
            ;Auswahl 2 S2
            player.addiem abc 1
        elseif sword == 2
            ;Auswahl 3 S3
            player.additem abc 1
endif
set choice to 0
        endif
End
 
  • Like
Reaktionen: Sammael666
Immer noch kein Schwert :(

So habe mir einfach das Wetterveränderungsscript genommen und meine Sachen ersetzt. Jetzt scheint es zu funktionieren. Aber trotzdem Danke an euch.

MFG
Sammael
 
Zuletzt bearbeitet von einem Moderator:
Mein Beitrag ist wohl untergegangen!

Hallo allerseits!

Ich versuche mich gerade an einem Musik System, aber leider schaff ich es nicht. Wenn ich auf speichern drücke, kommt keine Fehlermeldung.

Was mache ich falsch ?

PHP:
scn MusikSystem
 
float songtimer
float fQuestDelayTime
 
short songNR
short ZellWechsel
short Drinnen
short Kampf
short FakeFightDone
  
 
Begin Gamemode
 
if player.GetInWorldspace 00Ankarda == 1 || player.GetInCell 00HafenHouse01 == 1
; Wenn der Spieler in einer Zelle oder einem Worldspace von dir ist. 
 
    if fQuestDelayTime != 0.1  ; Durchlauf Häufigkeit
        set fQuestDelayTime to 0.1
    endif
 
 
;Zellwechsel
 
    if player.IsInInterior == 1 && drinnen == 0
        set drinnen to 1
    elseif player.IsInInterior == 0 && drinnen == 1
        set drinnen to 0;                                                                    
    endif
 
 
    if player.GetInSameCell ZellWechselFlyRef == 0 && drinnen == 1
        set ZellWechsel to 1
        set songtimer to 0    
        ZellWechselFlyRef.moveto player    
    elseif player.GetInSameCell ZellWechselFlyRef == 0 && drinnen == 0 
        if ZellWechselFlyRef.IsInInterior == 1
            ZellWechselFlyRef.moveto player
            set ZellWechsel to 1
            set songtimer to 0
        Elseif ZellWechselFlyRef.IsInInterior == 0
            ZellWechselFlyRef.moveto player    
        endif
    endif
 
 
;Kampf-Erkennung
 
    if  Kampf == 0 && player.IsInCombat == 1
        set Kampf to 1; Spieler ist grade in einem Kampf
    elseif Kampf == 1 && player.IsInCombat == 0
        set Kampf to 0; Spieler ist nicht mehr im Kampf
        set Songtimer to 0 ; Lied kann von vorne anfangen
    endif
 
 
 
 
 
    if songtimer <= 0  
 
;Kampf erzeugen
        if FakeFightDone < 3 ; 3 Frames lang den Kampf laufen lassen
            if FakeFightDone == 0
                MusikKampfDummyREF.moveto player ;Ratte zum Spieler
                MusikKampfDummyREF.StartCombat player ;Ratte greift an
                set FakeFightDone to 1
                return
            endif
            set FakeFightDone to FakeFightDone + 1 ; wird bis 3 zählen
            return
        elseif FakeFightDone == 3 ; nach 3 Frames Kampf
            MusikKampfDummyREF.poscell  0,0,0, 0, 00MusicCell ;Ratte kommt weg
            MusikKampfDummyREF.StopCombat player;Kampf beenden
            set FakeFightDone to 4; Kampferzeugen schließen
            return
        endif
 
 
    if Kampf == 0 ; Wenn der Spieler nicht im Kampf ist
 
;Zufälliges Lied spielen
        if drinnen == 1  ; Für Interior 
            set SongNR to 1 + 0.05 * GetRandompercent; 4 für Interior
        else  ; Für Exterior
            set SongNR to 5 + 0.05 * GetRandomPercent; 4 für Exterior
        endif
 
    set FakeFightDone to 0; Kampferzeugung wieder möglich machen
 
        if SongNR == 1  ;Alle Lieder mit Dauer,songtimer ist Lied-Dauer
            set songtimer to 104
            streammusic "Data\Music\Ankarda\01 - The pursuit of immortality"
        elseif SongNR == 2
            set songtimer to 207
            streammusic "Data\Music\Ankarda\02 - Escape" 
        elseif SongNR == 3
            set songtimer to 81
            streammusic "Data\Music\Ankarda\03 - Interlude - In the sky"
        elseif SongNR == 4
            set songtimer to 177
            streammusic "Data\Music\Ankarda\04 - Sword Battle"
        elseif SongNR == 5
            set songtimer to 104
            streammusic "Data\Music\Ankarda\01 - The pursuit of immortality"
        elseif SongNR == 6
            set songtimer to 207
            streammusic "Data\Music\Ankarda\02 - Escape"
        elseif SongNR == 7
            set songtimer to 81
            streammusic "Data\Music\Ankarda\03 - Interlude - In the sky" 
        elseif SongNR == 8
            set songtimer to 177
            streammusic "Data\Music\Ankarda\04 - Sword Battle" 
        endif
        endif
    elseif Songtimer > 0 
        set songtimer to songtimer - getsecondspassed;
    endif
endif
 
End
 
Begin Menumode  ;das Gleiche ohne Kampf & Zellwechsel
 
 
if player.GetInWorldspace 00Ankarda == 1 || player.GetInCell 00HafenHouse01 == 1
 
    if songtimer <= 0 
 
;Kampf-erzeugen
        if FakeFightDone < 3 ; 3 Frames lang den Kampf laufen lassen
            if FakeFightDone == 0
                MusikKampfDummyREF.moveto player ;Ratte zum Spieler
                MusikKampfDummyREF.StartCombat player ;Ratte greift an
                set FakeFightDone to 1
                return
            endif
            set FakeFightDone to FakeFightDone + 1 ; wird bis 3 zählen
            return
        elseif FakeFightDone == 3 ; nach 3 Frames Kampf
            MusikKampfDummyREF.poscell  0,0,0, 0, 00MusicCell ;Ratte kommt weg
            MusikKampfDummyREF.StopCombat player;Kampf beenden
            set FakeFightDone to 4; Kampferzeugen schließen
            return
        endif
 
 
    if Kampf == 0
 
;zufälliges lied
        if drinnen == 1
            set SongNR to 1 + 0.05 * GetRandompercent
        else
            set SongNR to 5 + 0.05 * GetRandomPercent
        endif
 
 
 
            set FakeFightDone to 0
            if SongNR == 1  ;Alle Lieder mit Dauer,songtimer ist Lied-Dauer
            set songtimer to 104
            streammusic "Data\Music\Ankarda\01 - The pursuit of immortality"
        elseif SongNR == 2
            set songtimer to 207
            streammusic "Data\Music\Ankarda\02 - Escape" 
        elseif SongNR == 3
            set songtimer to 81
            streammusic "Data\Music\Ankarda\03 - Interlude - In the sky"
        elseif SongNR == 4
            set songtimer to 177
            streammusic "Data\Music\Ankarda\04 - Sword Battle"
        elseif SongNR == 5
            set songtimer to 104
            streammusic "Data\Music\Ankarda\01 - The pursuit of immortality"
        elseif SongNR == 6
            set songtimer to 207
            streammusic "Data\Music\Ankarda\02 - Escape"
        elseif SongNR == 7
            set songtimer to 81
            streammusic "Data\Music\Ankarda\03 - Interlude - In the sky" 
        elseif SongNR == 8
            set songtimer to 177
            streammusic "Data\Music\Ankarda\04 - Sword Battle"
        endif
        endif
    elseif Songtimer > 0
        set songtimer to songtimer - getsecondspassed
    endif
endif
End
 
Hi Freunde,

muss nochmal wegen diesem Skript hier fragen. Es funktioniert bis zu der Stelle, wo beide Sounds abgespielt werden. Aber die Karte wird nicht enabled. Fehlt da noch was? Danke schon mal für die Antworten.

PHP:
scn ForgottenAltarScript

short state
short finished
short button

float timer


Begin onActivate Player

if(finished)
   return
endif

if(state == 0)
    set state to 1
    playSound AWDDaedra
    set timer to 40
endif

End


Begin GameMode

if(finished)
   return
endif

if(state == 1)
    set timer to (timer - getSecondsPassed)
  if(timer <= 0)
      set state to 2
      messagebox "Diese furchteinflößende Stimme lässt Euch erschaudern. Wollt Ihr euch dem Willen dieses Wesens unterwerfen?" "Ja!" "Nein!"
  endif

elseif state == 2
  set button to getButtonPressed
 if button == -1
     return
 elseif button == 0
       playsound AWDDaedra2
       set timer to 54

       set timer to timer - getsecondspassed
     if(timer <= 0)
       AWDQuestVSchreinKarte01ref.enable
       set timer to 0
       set finished to 1
      return
endif
 else
      set timer to 0
      set state to 0
      cast AWDVergessenerSchreinBlitzEffekt player
 endif
endif

End
 
Klar, hab den zweiten Sound bis zum Ende angehört, in der Annahme, dass die Karte danach erscheinen wird. Es könnte natürlich sein, dass er mit 54 zu hoch angesetzt ist. Aber du meinst, dass das Skript so in Ordnung ist? Dann gibt es einen anderen Grund, den ich noch suchen muss.
 
Sollte daran liegen, dass du nach dem Abspielen des Sounds weiterhin "getButtonPressed" abfragst, sodass "button" nach einem Frame wieder "-1" ist. Dort solltest du "state" nochmal erhöhen und einen "elseif state == 3" einfügen. Die Schleife beinhaltet dann den Timer.
 
Wow......:huh:

Du wärest nicht zufällig bereit, mir das Skript mit deinen Vorschlägen nochmal zu posten? Versteh' grad nur Bahnhof. :lol:
 
Änderungen sind rot markiert:
Code:
scn ForgottenAltarScript

short state
short finished
short button

float timer


Begin onActivate Player

if(finished)
   return
endif

if(state == 0)
    set state to 1
    playSound AWDDaedra
    set timer to 40
endif

End


Begin GameMode

if(finished)
   return
endif

if(state == 1)
    set timer to (timer - getSecondsPassed)
  if(timer <= 0)
      set state to 2
      messagebox "Diese furchteinflößende Stimme lässt Euch erschaudern. Wollt Ihr euch dem Willen dieses Wesens unterwerfen?" "Ja!" "Nein!"
  endif

elseif state == 2
  set button to getButtonPressed
  if button == -1
     return
  elseif button == 0
       playsound AWDDaedra2
       set timer to 54
       [COLOR="Red"]set state to 3[/COLOR]
  else
      set timer to 0
      set state to 0
      cast AWDVergessenerSchreinBlitzEffekt player
  endif
[COLOR="Red"]elseif state == 3
       set timer to timer - getsecondspassed
       if(timer <= 0)
         AWDQuestVSchreinKarte01ref.enable
         set timer to 0
         set finished to 1
         return
       endif[/COLOR]
endif

End
 
  • Like
Reaktionen: Arielle 1000
@Mr. Kennedy:
Ich gehe mal davon aus, dass das Skript auch ins Spiel eingebunden ist. Dann fallen mir einige Sachen auf:
Du unterscheidest letztendlich nur für vier verschiedene Musikstücke, unabhängig davon, ob der Spieler sich draußen oder drinnen befindet. Daher könntest du eigentlich alles, was damit zu tun hat rauslassen.
Desweiteren setzt du bei der Songauswahl die Variable "songNR" auf (1 + 0.05*getRandomPercent). Dadurch erhältst du dann aber nicht wie von dir in der Anmerkung angedeutet eine Zahl von 1-4 sondern von 1-5, sodass für manche Zahlen kein Lied vorhanden ist.

Du solltest dich auch vergewissern, dass in den betreffenden Zellen der Musik-Typ nicht auf "Default" eingestellt ist.
 
@Mr. Kennedy:
Ich gehe mal davon aus, dass das Skript auch ins Spiel eingebunden ist. Dann fallen mir einige Sachen auf:
Du unterscheidest letztendlich nur für vier verschiedene Musikstücke, unabhängig davon, ob der Spieler sich draußen oder drinnen befindet. Daher könntest du eigentlich alles, was damit zu tun hat rauslassen.
Desweiteren setzt du bei der Songauswahl die Variable "songNR" auf (1 + 0.05*getRandomPercent). Dadurch erhältst du dann aber nicht wie von dir in der Anmerkung angedeutet eine Zahl von 1-4 sondern von 1-5, sodass für manche Zahlen kein Lied vorhanden ist.

Du solltest dich auch vergewissern, dass in den betreffenden Zellen der Musik-Typ nicht auf "Default" eingestellt ist.

Kannst du denn mal die Änderungen rot makieren. Ich versteh leider nicht was ich abändern muss. :D
 
So ungefähr... (auf die Schnelle)
Code:
scn MusikSystem
 
float songtimer
float fQuestDelayTime
 
short songNR
short Kampf
short FakeFightDone
  
 
Begin Gamemode
 
if player.GetInWorldspace 00Ankarda == 1 || player.GetInCell 00HafenHouse01 == 1
; Wenn der Spieler in einer Zelle oder einem Worldspace von dir ist. 
 
    if fQuestDelayTime != 0.1  ; Durchlauf Häufigkeit
        set fQuestDelayTime to 0.1
    endif
  
 
;Kampf-Erkennung
 
    if  Kampf == 0 && player.IsInCombat == 1
        set Kampf to 1; Spieler ist grade in einem Kampf
    elseif Kampf == 1 && player.IsInCombat == 0
        set Kampf to 0; Spieler ist nicht mehr im Kampf
        set Songtimer to 0 ; Lied kann von vorne anfangen
    endif


 
    if songtimer <= 0  
 
;Kampf erzeugen
        if FakeFightDone < 3 ; 3 Frames lang den Kampf laufen lassen
            if FakeFightDone == 0
                MusikKampfDummyREF.moveto player ;Ratte zum Spieler
                MusikKampfDummyREF.StartCombat player ;Ratte greift an
                set FakeFightDone to 1
                return
            endif
            set FakeFightDone to FakeFightDone + 1 ; wird bis 3 zählen
            return
        elseif FakeFightDone == 3 ; nach 3 Frames Kampf
            MusikKampfDummyREF.poscell  0,0,0, 0, 00MusicCell ;Ratte kommt weg
            MusikKampfDummyREF.StopCombat player;Kampf beenden
            set FakeFightDone to 4; Kampferzeugen schließen
            return
        endif
 
 
    if Kampf == 0 ; Wenn der Spieler nicht im Kampf ist
 
;Zufälliges Lied spielen
            [COLOR="Red"]set SongNR to 1 + 0.04 * GetRandompercent[/COLOR]; 4 für Interior
        endif
 
       set FakeFightDone to 0; Kampferzeugung wieder möglich machen
 
        [COLOR="Red"]if SongNR == 1  ;Alle Lieder mit Dauer,songtimer ist Lied-Dauer
            set songtimer to 104
            streammusic "Data\Music\Ankarda\01 - The pursuit of immortality"
        elseif SongNR == 2
            set songtimer to 207
            streammusic "Data\Music\Ankarda\02 - Escape" 
        elseif SongNR == 3
            set songtimer to 81
            streammusic "Data\Music\Ankarda\03 - Interlude - In the sky"
        elseif SongNR == 4
            set songtimer to 177
            streammusic "Data\Music\Ankarda\04 - Sword Battle"
        endif[/COLOR]
      endif
    elseif Songtimer > 0 
        set songtimer to songtimer - getsecondspassed;
    endif
endif
 
End
 
Begin Menumode  ;das Gleiche ohne Kampf & Zellwechsel
 
 
if player.GetInWorldspace 00Ankarda == 1 || player.GetInCell 00HafenHouse01 == 1
 
    if songtimer <= 0 
 
;Kampf-erzeugen
        if FakeFightDone < 3 ; 3 Frames lang den Kampf laufen lassen
            if FakeFightDone == 0
                MusikKampfDummyREF.moveto player ;Ratte zum Spieler
                MusikKampfDummyREF.StartCombat player ;Ratte greift an
                set FakeFightDone to 1
                return
            endif
            set FakeFightDone to FakeFightDone + 1 ; wird bis 3 zählen
            return
        elseif FakeFightDone == 3 ; nach 3 Frames Kampf
            MusikKampfDummyREF.poscell  0,0,0, 0, 00MusicCell ;Ratte kommt weg
            MusikKampfDummyREF.StopCombat player;Kampf beenden
            set FakeFightDone to 4; Kampferzeugen schließen
            return
        endif
 
 
    if Kampf == 0
 
;zufälliges lied
            [COLOR="Red"]set SongNR to 1 + 0.04 * GetRandompercent[/COLOR]
 
 
 
            set FakeFightDone to 0
            [COLOR="Red"]if SongNR == 1  ;Alle Lieder mit Dauer,songtimer ist Lied-Dauer
            set songtimer to 104
            streammusic "Data\Music\Ankarda\01 - The pursuit of immortality"
        elseif SongNR == 2
            set songtimer to 207
            streammusic "Data\Music\Ankarda\02 - Escape" 
        elseif SongNR == 3
            set songtimer to 81
            streammusic "Data\Music\Ankarda\03 - Interlude - In the sky"
        elseif SongNR == 4
            set songtimer to 177
            streammusic "Data\Music\Ankarda\04 - Sword Battle"
        endif[/COLOR]
      endif
    elseif Songtimer > 0
        set songtimer to songtimer - getsecondspassed
    endif
endif
End
 
  • Like
Reaktionen: Mr. Kennedy