Construction Set Skriptthread zum Construction Set

Ich bräuchte immernoch Hilfe bei diesem Skript, da die Lieder, die abgespielt werden, per Zufall ausgesucht werden, und nicht die sind, die eigentlich durch das Skript gespielt werden sollten.

Code:
Scn AAAMusikWürfelScript

Short Choosing
short button

Begin onActivate player
     if Choosing == 0
          set Choosing to -1
     endif
end

Begin onEquip player
     if Choosing == 0
          set Choosing to -1
     endif
end

Begin gameMode
     If (Choosing == -1)
          MessageBox "Was möchtet ihr tun?", "Nehmen", "Musik auswählen", "Fertig"
          set Choosing to 1
          return
     elseif (Choosing == 1)
          set button to GetButtonPressed
          if (button== -1)
               return
          elseif (button == 0)
               Activate
               Set Choosing to 0
          elseif (button == 1)
               Set Choosing to -2
          elseif (button == 2)
               Set Choosing to 0
          endif
     Endif

     If (Choosing == -2)
          MessageBox "Welche Musik möchtet ihr hören?", "Lied 1", "Lied 2", "Lied 3", "Lied 4", "Lied 5", "Zurück", "Abbrechen"
          set Choosing to 2
          return
     elseif (Choosing == 2)
          set button to GetButtonPressed
          if (button == -1)
               return
          elseif (button  == 5)
               Set Choosing to -1
          elseif (button == 6)
               Set Choosing to 0
          else
               StreamMusic random
               set Choosing to 3
               return
          endif
      elseif (Choosing == 3)
          if (button == 0)
               StreamMusic "Data\Music\Eydis\Lied_1.mp3"
          elseif (button  == 1)
               StreamMusic "Data\Music\Eydis\Lied_2.mp3"
          elseif (button == 2)
               StreamMusic "Data\Music\Eydis\Lied_3.mp3"
          elseif (button == 3)
               StreamMusic "Data\Music\Eydis\Lied_4.mp3"
          elseif (button == 4)
               StreamMusic "Data\Music\Eydis\Lied_5.mp3"
          endif
          set Choosing to 0
     Endif
End

Begin menuMode
     If (Choosing == -1)
          MessageBox "Was möchtet ihr tun?", "Ablegen", "Musik auswählen", "Fertig"
          set Choosing to 1
          return
     elseif (Choosing == 1)
          set button to GetButtonPressed
          if (button== -1)
               return
          elseif (button == 0)
               Set Choosing to 0
               DropMe
          elseif (button == 1)
               Set Choosing to -2
          elseif (button == 2)
               Set Choosing to 0
          endif
     Endif

     If (Choosing == -2)
          MessageBox "Welche Musik möchtet ihr hören?", "Lied 1", "Lied 2", "Lied 3", "Lied 4", "Lied 5", "Zurück", "Abbrechen"
          set Choosing to 2
          return
     elseif (Choosing == 2)
          set button to GetButtonPressed
          if (button == -1)
               return
          elseif (button  == 5)
               Set Choosing to -1
          elseif (button == 6)
               Set Choosing to 0
          else
               StreamMusic random
               set Choosing to 3
               return
          endif
      elseif (Choosing == 3)
          if (button == 0)
               StreamMusic "Data\Music\Eydis\Lied_1.mp3"
          elseif (button  == 1)
               StreamMusic "Data\Music\Eydis\Lied_2.mp3"
          elseif (button == 2)
               StreamMusic "Data\Music\Eydis\Lied_3.mp3"
          elseif (button == 3)
               StreamMusic "Data\Music\Eydis\Lied_4.mp3"
          elseif (button == 4)
               StreamMusic "Data\Music\Eydis\Lied_5.mp3"
          endif
          set Choosing to 0
     Endif
End
Was müsste ich bei dem Skript ändern, damit die ausgewählten Lieder abgespielt werden?

Liebe Grüße,
Eydis
 
Guten Tag,

ich bräuchte bitte den Befehl um einen Gegenstand zu enablen.

Sprich, ich habe ein Objekt, das standardmäßig deaktiviert ist. Das möchte ich nun beim aktivieren eines Objektes aktivieren.

In etwa :


scn blablabla

begin onactive

if isactionref player == 1

blablabla aktivieren

endif

end



Gruss rojep

Mit "deaktiviert" meinst Du doch disabled, oder?
Wenn ja:

Code:
SCN Möp

Short Act

Begin OnActivate Player

if(isactionref player)
    if(act)
         return
    else
           <object-Ref>.enable
           set act to 1
    endif
endif

End

@ Eydis: Find' den Fehler gerade nicht...
 
Guten Tag,

vielen Dank für die Hilfe.

Das Script verstehe ich soweit, aber was genau soll ich für <object-ref> einsetzen?
Vielleicht ein Beispiel dazu?

Gruss rojep
 
Vielen Dank,


das Ganze funktioniert recht wunderbar.

Ich habe das an meine Bedürfnisse angepasst :


scn 00nemedultaltarscript

Begin OnActivate Player

short act

if (getstage blablaquest == 10 && act == 0)
messagebox "text1"
Cast AltarKynareth player
blablablaschwert.enable
set act to 1
endif

else
messagebox "text2"
endif


End



Die Absicht ist, an einem Altar nach Abschluss einer Quest ein Schwert erscheinen zu lassen.

Solange die Quest nicht beendet wird, kommt beim aktivieren des Altars "text2".

Sobald die Quest vollendet wurde, erscheint das Schwert, der typische Altar-Lichtschein erscheint und es kommt wieder eine Messagebox mit "text2" anstatt "text1".

Es wird also der falsche Text ausgegeben.

Wie kann ich das Problem lösen ?


Gruss rojep
 
PHP:
SCN ...

Short Act

Begin OnActivate Player

if(getstage <quest> == <stage>)
    if(act == 0)
         <Schwertref>.enable
         cast <zauber> player
         messagebox "text1"

         set act to 1
    endif
else
       MessageBox "Text2"
endif

End
PS: Schreibe bitte Deine Skripts hier in einen Code
Code:
 oder in einen PHP-Code [php], damit es lesbarer wird.
 
  • Like
Reaktionen: Finkreghan
Ich habe bei folgendem Skript ein Problem. Die letzen beiden Antwortmöglichkeiten tauchen im Spiel nicht auf.
Weiß jemand Rat ?

PHP:
scn 00KampfVilla
short button

begin OnActivate

MessageBox "Gegen was wollt ihr kämpfen ?", "Einen Goblin ( Level 5 )", "Zwei Goblins ( Level 5 )", " Drei Goblins ( Level 5 )", " Ein Zombie ( Level 10 ) ", "Zwei Zombies ( Level 10 )", "Drei Zombies ( Level 10 ) " , " Einen Troll ( Level 15 ) ", " Zwei Trolle ( Level 15 )", " Drei Trolle ( Level 15 )", " Flammenatronach ( Level 20 ) ", "Frostatronach ( Level 25 ) " , " Ich will doch nicht ",

end

begin GameMode

set button to getbuttonpressed

if button == 0

alpha1.enable
alpha1.Startcombat Player
elseif button == 1

alpha1.enable
alpha2.enable
alpha1.Startcombat Player
alpha2.Startcombat Player

elseif button == 2
alpha1.enable
alpha2.enable
alpha1.Startcombat Player
alpha2.Startcombat Player
alpha3.Startcombat Player

elseif button == 3
beta1.enable
beta2.Startcombat Player

elseif button == 4
beta1.enable
beta2.enable
beta1.Startcombat Player
beta2.Startcombat Player

elseif button == 5
beta1.enable
beta2.enable
beta3.enable
beta1.Startcombat Player
beta2.Startcombat Player
beta3.Startcombat Player

elseif button == 6
crono1.enable
crono1.Startcombat Player

elseif button == 7
crono1.enable
crono2.enable
crono1.Startcombat Player
crono2.Startcombat Player

elseif button == 8
crono1.enable
crono2.enable
crono3.enable
crono1.Startcombat Player
crono2.Startcombat Player
crono3.Startcombat Player

elseif button == 9
delta1.enable
delta1.Startcombat Player

elseif button == 10
delta2.enable
delta2.Startcombat Player

elseif button == 11

endif




end
 
Das liegt daran, dass eine MessageBox nur bis zu 10 Antwortmöglichkeiten haben kann. Abgesehen davon würde ich in jedem "if(button == x)"-Block, noch ein "set button to 0" setzen.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Anti_Held
Verdammt, könntest du mir das mit Untermenüs schreiben ? Sprich man wählt erst den Gegner aus und dann die Anzahl ?
 
Hier haste schon einmal den Anfang. Das ganze Skript zu schreiben dauert mir jetzt zu lang:

PHP:
SCN Möp

Short Button

Begin OnActivate Player

MessageBox "Gegen was wollt ihr kämpfen?" "Goblins (Level 5)", "Zombies (Level 10)", "Troll (Level 15)", "Frostatronach (Level 25)", "Ich will nicht kämpfen!"

End


Begin GameMode

if(button == -1)
     return
elseif(button == 0)
     MessageBox "Wie viele?" "Einen Goblin", "Zwei Goblins", "Drei Goblins"
     set button to getbuttonpressed
    if(button == 0)
         goblinRef.enable
         goblinRef.startcombat player

         set button to 0
        return
    elseif(button == 1)
         goblinRef.enable
         goblin2Ref.enable

         goblinRef.startcombat player
         goblin2Ref.startcombat player

         set button to 0
        return
    elseif(button == 2)
         goblinRef.enable
         goblin2Ref.enable
         goblin3Ref.enable

         goblinRef.startcombat player
         goblin2Ref.startcombat player
         goblin3Ref,startcombat player

         set button to 0
        return
    endif
elseif(button == 1)

; ... und so weiter


endif


End
 
  • Like
Reaktionen: Anti_Held
Hallo!

Ich bräuchte dann auch mal wieder eure Hilfe.

Es geht mir um folgendes: Der Spieler soll sich in ein Boot setzen, welches einen bestimmten Weg abfährt. Diese Bewegung soll erst dann eingeleitet werden, wenn der Spieler sitzt. Dann sollen auch die "Player Controls" entzogen werden.
Im Endeffekt gab es dieses Szenario auch schon bei Nehrim.

Wahrscheinlich funktioniert das über die Werte der "X/Y" Koordinaten .. Diese müssten dann von mir ersetzt werden. Vielleicht ist es möglich, eine Art Beispielscript zu schreiben? :)

Mit freundlichen Grüßen,

MadHatter :)
 
Ich hab das mal gemacht,aber man muss den Player dann auch per Script bewegen und sobald er dann aufsteht kriegt er einen so hohen Fall-Schaden, dass er stirbt... Nichtmal mti "ResetFallDamageTimer" hab ich den weggekriegt...
 
Ich bin mal auf das hier gestoßen..

HTML:
   SCN MQ01BootScript

Float XAchsePosition
Float XAchse
Float Timer
Short BootState
Short BootAnkunft
Short BootAnkunft2

Begin OnActivate
   if (Player.IsCurrentFurnitureRef "MQ01BootPlayerStuhl" != 1)      
      Message "Ihr müsst Euch erst auf euren Platz am Heck setzen, damit das Boot ablegen kann."
   endif
End

Begin GameMode
   if (MQ01PorimRef.GetDistance, "MQ01BootPorimStuhlRef" <= 100) && (BootState == 0)
      Set Storyvar to 5
   endif
End

Begin GameMode
   if (Player.IsCurrentFurnitureRef "MQ01BootPlayerStuhl" == 1) && (Storyvar == 5) && (BootState == 0)
      DisablePlayerControls                  
      Set Timer to Timer + getSecondsPassed
      if ( Timer >= 5 )
         PlaySound3d DRSMetalOpen01         
         Message "Das Boot legt ab."
         Set BootState to 1
         Set Storyvar to 10                        
         Message "Das Boot legt ab."            ;Nachricht
      endif
   endif
End

Begin GameMode
   if (BootState == 1)
      Set XAchsePosition to GetPos X
      Set XAchse to XachsePosition +11         
      SetPos X Xachse
   endif
End


Begin GameMode
   if (MQ01BootRef.GetDistance, MQ01BootMarker01 <= 300) && (Storyvar == 10)
      Set Storyvar to 15                        
      Set BootAngreifer to 1
   endif
End

Begin GameMode
   if (MQ01BootRef.GetDistance, MQ01BootMarker05 <= 100) && (BootState == 1)
      Set Bootstate to 2                        
      Set Storyvar to 20                        
      SetStage MQ01Porim 15
      Set BootAnkunft to 1
   endif
End
   
Begin GameMode
   if (Bootstate == 2)
      Set XAchsePosition to GetPos X
      Set XAchse to XachsePosition +0         
      SetPos X Xachse
      Player.EnablePlayerControls            
   endif
End

Begin GameMode
   if (Storyvar == 20) && (BootAnkunft2 == 0)               
      MQ01PorimRef.moveto "MQ01BootMarkerPorim02"         
      Set BootAnkunft2 to 1                           
   endif
End

Ist das soweit verwendbar? Das stammt direkt aus Nehrim, selbstverständlich müsste ich die Queststages und so weiter verändern..
 
Also in dem Script wird der Spieler nicht bewegt... Als ich das nicht gemacht habe, saß ich in der Luft, während das Boot unter mir wegfuhr:? Aber probiers ruhig mal aus...
 
Ich kriege das beim besten Willen nicht zum Laufen. Ich weiß nicht einmal, was ich wirklich rausstreichen muss, da es sich auf Nehrim bezieht, und was theoretisch ersetzt werden muss. Verdammt, ich brauche diese Bootsfahrt doch so dringend! :(

Zitat von Hoxyd zu jemandem, der bereits das selbe probiert hat wie ich (Und dabei wohl auch erfolgreicher war) "Jo, du musst normalerweise auch noch ein Script auf den Spieler legen, damit der sich mit bewegt. Probier mal das selbe Script auf den Spieler zu legen. "

Code:
SCN BootBewegung

Float XAchsePosition
Float XAchse
Float Timer

Short State

Begin OnActivate
   if ( Player.IsCurrentFurnitureRef "001BootRef" == 1)
      Set State to 1
   endif
End

Begin GamMode
if ( State == 1 )
DisablePlayerControls
Set Timer to Timer + GetSecondsPassed
if Timer >= 2 )
Set State to 2
Set Timer to -1
endif
endif

if ( State == 2 )
      Set XAchsePosition to GetPos X
      Set XAchse to XachsePosition +5
      SetPos X Xachse
endif

if ( State == 2 )
if ( "001BootRef".GetDistance, "001BootStopMarkerRef" <= 200 )
EnablePlayerControls
Set State to -1
endif
endif
End
Ich werde aus all dem nicht schlau. Bezieht sich das Script überhaupt noch auf die Ursprungslage?
 
Zuletzt bearbeitet:
Danke sehr für deine Erklärung. Ich habe das Script jetzt so angewand:

HTML:
 SCN 000DLvDBootBewegung

Float XAchsePosition
Float XAchse
Float Timer

Short State

Begin OnActivate
   if ( Player.IsCurrentFurnitureRef "000DLvDSchiffstuhl4" == 1) ;000DLvDSchiffstuhl4 ist der Stuhl, auf den der Spieler sich setzen soll, um das Losfahren des Bootes zu bewirken
      Set State to 1
   endif
End

Begin GameMode
 if ( State == 1 )
   DisablePlayerControls
   Set Timer to Timer + GetSecondsPassed
 if (Timer >= 2 )
Set State to 2
Set Timer to -1
endif
endif

if ( State == 2 )
      Set XAchsePosition to GetPos X 23479.2090 ; hier ist der stop-marker
      Set XAchse to XachsePosition +5
      SetPos X Xachse
endif

if ( State == 2 )
if ( "000DLvDBOOT".GetDistance, "000DLvDBootSTOP" <= 200 ) ;000DLvDBOOT ist das Boot, das theoretisch fahren sollte. 
EnablePlayerControls
Set State to -1
endif
endif
End

Was geschieht? NICHTS. Ich kann mich nicht einmal auf den Stuhl setzen.
Das Script selbst liegt auf dem Stuhl, da ich dem Boot kein Script verpassen kann.
Habe ich jedoch das Boot mit dem Stuhl vertauscht? Also, im Script?
Oder stimmt die "X" Angabe nicht? (Bei 23479.2090 befindet sich der Stop-Marker). Was stimmt denn diesmal nicht? :(
 
Das Script muss auf das Boot. Dazu musst du es als Activator erstellen. Irgendwie muss das Boot dann noch aktiviert werden, dazu am beste ein Script auf den Stuhl legen, der das Boot aktiviert. Die Zahl die du da hingemacht hast muss weg, in den 3 Zeilen brauchtest du nichts verändern.
 
Irgendwie muss das Boot dann noch aktiviert werden, dazu am beste ein Script auf den Stuhl legen, der das Boot aktiviert.

Das Skript wird schon aktiviert, indem der Spieler sich auf den Stuhl setzt.

Zum Skript: Wozu soll der Timer eigentlich gut sein? Es gibt in Nehrim noch eine andere Bootsfahrt, die ohne Timer läuft. Dort wird einfach pro Frame das Boot verschoben, bis es am Ziel ist.
 
  • Like
Reaktionen: MadHatter16