Construction Set Skriptthread zum Construction Set

Ich glaube für das SetStage ist kein player. nötig. Schließlich hat es ja direkt gesehen nichts mit dem Spielercharakter zu tun.
 
Code:
scn SotANFollowerScript

short act1
short act2
short buttonMenu
short button

short dead
short timerdead


begin OnActivate player
 set buttonMenu to -1
 set button to -1
 set act1 to 1
 MessageBox "Was wollt ihr befehlen?", "Bewegung" "Verhalten" "Kampfstil" "Beenden"
end


begin GameMode
set button to GetButtonPressed
end


begin GameMode

if (act1 == 1)
 if ( button == 0 )
  set buttonMenu to 1
  set act2 to 1
  MessageBox "Was verlangt ihr von eurem treuen Gehilfen?", "Folgt mir" "Bleibt hier" "Vergießt Blut" "Seid vorsichtig" "Geht mir aus den Augen" "Beenden"
 elseif (button == 1 )
  set buttonMenu to 2
  set act2 to 1
  MessageBox "Wie soll ich mich verhalten?", "Gehen" "Rennen" "Schleichen" "Beenden"
 elseif ( button == 2 )
  set buttonMenu to 3
  set act2 to 1
  MessageBox "Womit soll ich an eurer Seite kämpfen?", "Klinge" "Bogen" "Magie" "Beenden"
 endif
set act1 to 0
endif

if (act2 == 1)

if (buttonMenu == 1)
 if ( button == 0 )
  SetActorValue Energy 75
 elseif ( button == 1 )
  SetActorValue Energy 0
 elseif (button == 2 )
  SetActorValue Aggression 100
 elseif ( button == 3 )
  SetAlert 1
 elseif ( button == 4 ) 
  movetomarker SotANFollowStartMarker
 endif

elseif (buttonMenu == 2)
 if ( button == 0 )
  Message "Gehen"
 elseif ( button == 1 )
  Message "Rennen"
 elseif (button == 2 )
  Message "Schleichen"
 endif

elseif (buttonMenu == 3)
 if ( button == 0 )
   Message "Kinge"
 elseif ( button == 1 )
  Message "Bogen"
 elseif (button == 2 )
  Message "Magie"
 endif

set act2 to 0
endif

endif

end


begin GameMode

if dead == 1
 set timerdead to 6
 set timerdead to (timerdead - GetSecondsPassed)
 set dead to 0
endif

if timerdead == 5
 PlayMagicShaderVisuals creatureEffectUndeadBlade
elseif timerdead == 3
 Resurrect 1
elseif timerdead == 2
 StopMagicShaderVisuals creatureEffectUndeadBlade
elseif timerdead == 1
  Message "Der Begleiter hat sich geheilt und steht nun wieder zu euren Diensten"
  set timerdead to 0  
endif

end


begin OnDeath
 set dead to 1
end

Das ist mein Script.
Immer, wenn ich den Begleiter ansprechen soll, kommt zwar die 1. MessageBox, aber danach nicht mehr.
Weiß jamand, woran es liegt?
 
Code:
scn SotANFollowerScript

short act1
short act2
short buttonMenu
short button

short dead
short timerdead


begin OnActivate player
 set buttonMenu to -1
 set button to -1
 set act1 to 1
 MessageBox "Was wollt ihr befehlen?", "Bewegung" "Verhalten" "Kampfstil" "Beenden"
end
Das ist mein Script.
Immer, wenn ich den Begleiter ansprechen soll, kommt zwar die 1. MessageBox, aber danach nicht mehr.
Weiß jamand, woran es liegt?

Ja ich kann dir es sagen. Du setzt button bei der ersten Message Box auf -1. Bei allen nachfolgenden muss button aber 0 aufwärts sein. Kein Wunder also, dass die anderen nicht mehr erscheinen.
 
-1 bedeutet nur, dass kein Knopf gedrückt ist.

Wenn man im Spiel einen Knopf drückt, wird button automatisch auf den entsprechenden Wert gesetzt.
 
Das "set button to -1" ist nur dazu da, dass, falls Beenden gedrückt wird, nicht die Aktion vom letzten Mal ausgeführt wird, sondern dann einfach nichts passiert. button wird doch auf den der Auswahl endsprechenden Wert gesetzt!

Code:
begin OnActivate player
 set buttonMenu to -1
 set button to -1
 set act1 to 1
 MessageBox "Was wollt ihr befehlen?", "Bewegung" "Verhalten" "Kampfstil" "Beenden"
end


begin GameMode
[COLOR="Red"]set button to GetButtonPressed[/COLOR]   --- Ab hier ist "button" nicht mehr -1
end

Oder stell ich mir das falsch vor?
 
Nein, so ist das schon richtig.
Eine Variable hat den Standardwert 0. Das würde bereits dem ersten button entsprechen. Wenn aber kein button gedrückt ist, soll ja auch nichts passieren, deswegen nimmt man den wert -1.
 
Ich hab das Script mal umgeschrieben, vielleicht klappt es so:

Code:
scn SotANFollowerScript

short button
short boxlevel
short dead
float timerdead

begin OnActivate player
 set boxlevel to 1
 set button to -1
 end

begin GameMode
set button to GetButtonPressed
if (boxlevel == 1)
   MessageBox "Was wollt ihr befehlen?", "Bewegung" "Verhalten" "Kampfstil" "Beenden"
elseif (boxlevel == 2)
   MessageBox "Was verlangt ihr von eurem treuen Gehilfen?", "Folgt mir" "Bleibt hier" "Vergießt Blut" "Seid vorsichtig" "Geht mir aus den Augen" "Beenden"
elseif (boxlevel == 3)
   MessageBox "Wie soll ich mich verhalten?", "Gehen" "Rennen" "Schleichen" "Beenden"   
elseif (boxlevel == 4)   
   MessageBox "Womit soll ich an eurer Seite kämpfen?", "Klinge" "Bogen" "Magie" "Beenden"
endif   

if (boxlevel == 1) && (button == 0)
   set boxlevel to 2
elseif (boxlevel == 1) && (button == 1)
   set boxlevel to 3
elseif (boxlevel == 1) && (button == 2)
   set boxlevel to 4
endif

if (boxlevel == 2) && (button == 0)
   SetActorValue Energy 75 
elseif (boxlevel == 2) && (button == 1)
   SetActorValue Energy 0
elseif (boxlevel == 2) && (button == 2)
   SetActorValue Aggression 100
elseif (boxlevel == 2) && (button == 3)
   SetAlert 1
elseif (boxlevel == 2) && (button == 4)
   movetomarker SotANFollowStartMarker 
endif   

if (boxlevel == 3) && (button == 0)
   Message "Gehen" 
elseif (boxlevel == 3) && (button == 1)
   Message "Rennen"
elseif (boxlevel == 3) && (button == 2)
   Message "Schleichen"
endif

if (boxlevel == 4) && (button == 0)
   Message "Klinge"   
elseif (boxlevel == 4) && (button == 1)
   Message "Bogen"
elseif (boxlevel == 4) && (button == 2)
   Message "Magie"
endif

if (dead == 1)
 set timerdead to 6
 set timerdead to (timerdead - GetSecondsPassed)
 set dead to 0
endif

if timerdead == 5
 PlayMagicShaderVisuals creatureEffectUndeadBlade
elseif timerdead == 3
 Resurrect 1
elseif timerdead == 2
 StopMagicShaderVisuals creatureEffectUndeadBlade
elseif timerdead == 1
  Message "Der Begleiter hat sich geheilt und steht nun wieder zu euren Diensten"
  set timerdead to 0  
endif

end

begin OnDeath
 set dead to 1
end

Wobei mir eins nicht ganz klar ist:
Bei "Wie soll ich mich verhalten?" und "Wie soll ich an eurer Seite kämpfen?", ist damit der Spieler oder der NPC gemeint?
Wenn der NPC gemeint ist, scheint mir das sinnlos, weil dahinter keine Befehle stecken.
Wenn der Spieler gemeint ist, scheint es mit ebenfalls sinnlos, weil der Spieler das ja selbst entscheiden kann, wie er kämpft und es der Spieler ist, der die Wahl in der Messagebox trifft.
 
Zuletzt bearbeitet:
Der NPC ist gemeint, und die Befehle kommen noch (in Form von verschiedenen AI-Packages).
Danke, ich werde es gleich mal ausprobieren.

edit:
Sobald ich den NPC anspreche, kommt ununterbrochen die erste MessageBox.
 
Zuletzt bearbeitet von einem Moderator:
Ich habe meinen Script nun so überarbeitet:


Code:
scn Toolsscrollscript

ref Scroll
short done
short button
begin OnEquip
    Toolsscrollcontainer1.removeallitems
        if done == 0
            messagebox "Wollt ihr eine Rolle Kopieren?","Ja","Nein"
            set done to 1
        endif
    end
begin Gamemode
    if done == 1
        set button to getbuttonpressed
            if button == 0
                 if player.getitemcount Inkwell01 >= 1 && player.getitemcount BlankSheet >= 1
                    set done to 2
                else
                    set done to 0
                    message "Ihr braucht Tinte und Pergament"
                endif
    
            elseif button == 1
                set done to 0
            endif
    endif

    if done == 2
        Toolsscrollcontainer1.activate player
        message "Deponiert NUR die zu Kopierende Rolle" 10
        set scroll to Toolsscrollcontainer1.getinventoryobject 0
            if scroll != 0        
        SET DONE TO 3
            endif
    endif
    
    if done == 3

                if scroll.getbookisscroll == 1 && Scroll != 0                 
                    Toolsscrollcontainer1.additem Scroll 1
                    player.removeitem Inkwell01 1
                    player.removeitem Blanksheet 1
                    Toolsscrollcontainer1.activate player
                    Message "Entnehmt eure Kopie"
                    set done to 0
                elseif Scroll.getbookisscroll == 0 && Scroll != 0
                message "Ihr habt keine Rolle deponiert. Entnehmt allen Inhalt"
                    set done to 0
                    Toolsscrollcontainer1.activate player
                elseif scroll == 0 
                    message "BUUUUUUUUUUGGGGG"
                endif
    endif
        

end

Alles geht, außer, dass der getbookisscroll - Befehl nicht Funktioniert, denn er gibt immer 0 wieder, unabhängig davon, ob es eine Rolle ist oder nicht.

Hab ich den vllt falsch verstanden???
 
Code:
scn SotANFollowerScript

short button
short boxlevel
short boxclass

short dead
float timerdead

begin OnActivate player
 set boxlevel to 1
 set boxclass to 1
 set button to -1
end

begin GameMode

set button to GetButtonPressed

if (boxclass == 4)
	set boxclass to 0
	if (boxlevel == 2) && (button == 0)
		SetActorValue Energy 75
	elseif (boxlevel == 2) && (button == 1)
		SetActorValue Energy 0
	elseif (boxlevel == 2) && (button == 2)
		SetActorValue Aggression 100
	elseif (boxlevel == 2) && (button == 3)
		SetAlert 1
	elseif (boxlevel == 2) && (button == 4)
		movetomarker SotANFollowStartMarker

	elseif (boxlevel == 3) && (button == 0)
		Message "Gehen" 
	elseif (boxlevel == 3) && (button == 1)
		Message "Rennen"
	elseif (boxlevel == 3) && (button == 2)
		Message "Schleichen"

	elseif (boxlevel == 4) && (button == 0)
		Message "Klinge"   
	elseif (boxlevel == 4) && (button == 1)
		Message "Bogen"
	elseif (boxlevel == 4) && (button == 2)
		Message "Magie"
	endif

elseif (boxclass == 3)
	set boxclass to 4
	if (boxlevel == 2)
		MessageBox "Was verlangt ihr von eurem treuen Gehilfen?", "Folgt mir" "Bleibt hier" "Vergießt Blut" "Seid vorsichtig" "Geht mir aus den Augen" "Beenden"
	elseif (boxlevel == 3)
		MessageBox "Wie soll ich mich verhalten?", "Gehen" "Rennen" "Schleichen" "Beenden"   
	elseif (boxlevel == 4)   
		MessageBox "Womit soll ich an eurer Seite kämpfen?", "Klinge" "Bogen" "Magie" "Beenden"
	endif

elseif (boxclass == 2)
	set boxclass to 3
	if (button == 0)
		set boxlevel to 2
	elseif (button == 1)
		set boxlevel to 3
	elseif (button == 2)
		set boxlevel to 4
	endif

elseif (boxclass == 1)
	set boxclass to 2
	MessageBox "Was wollt ihr befehlen?", "Bewegung" "Verhalten" "Kampfstil" "Beenden"

endif

end

[SPOILER="Tod"]begin GameMode

if (dead == 1)
 set timerdead to 6
 set timerdead to (timerdead - GetSecondsPassed)
 set dead to 0
endif

if timerdead == 5
 PlayMagicShaderVisuals creatureEffectUndeadBlade
elseif timerdead == 3
 Resurrect 1
elseif timerdead == 2
 StopMagicShaderVisuals creatureEffectUndeadBlade
elseif timerdead == 1
  Message "Der Begleiter hat sich geheilt und steht nun wieder zu euren Diensten"
  set timerdead to 0  
endif

end

begin OnDeath
 set dead to 1
end[/SPOILER]


Habs auch noch einmal umgeschreiben, jetzt kommt die erste MB einmal, danach passiert nichts mehr...
 
Also, es kann nicht Sein, dass Scroll 0 geblieben ist, dehalb habe ich das ja eingebaut, dass da immer BUUUUUG kommt, wenn das so ist.

Es kann höchstens sein, dass Scroll einer Anderen Referenz zugewiesen wurde, aber ich habe immer nur eine Sache auf einmal in den Container getan. Vorallen läuft, wenn ich das mit dem GetBookisScroll rausnehme, alles geschmiert und man bekommt auch das Richtige Objekt in den Container
 
Ich hab das Script mal umgeschrieben, vielleicht klappt es so:

Code:
scn SotANFollowerScript

short button
short boxlevel
short dead
float timerdead

begin OnActivate player
 set boxlevel to 1
 set button to -1
 end

begin GameMode
if (boxlevel == 1)
   MessageBox "Was wollt ihr befehlen?", "Bewegung" "Verhalten" "Kampfstil" "Beenden"
set button to GetButtonPressed
elseif (boxlevel == 2)
   MessageBox "Was verlangt ihr von eurem treuen Gehilfen?", "Folgt mir" "Bleibt hier" "Vergießt Blut" "Seid vorsichtig" "Geht mir aus den Augen" "Beenden"
set button to GetButtonPressed
elseif (boxlevel == 3)
   MessageBox "Wie soll ich mich verhalten?", "Gehen" "Rennen" "Schleichen" "Beenden"   
set button to GetButtonPressed
elseif (boxlevel == 4)   
   MessageBox "Womit soll ich an eurer Seite kämpfen?", "Klinge" "Bogen" "Magie" "Beenden"
set button to GetButtonPressed
endif   

if (boxlevel == 1) && (button == 0)
   set boxlevel to 2
elseif (boxlevel == 1) && (button == 1)
   set boxlevel to 3
elseif (boxlevel == 1) && (button == 2)
   set boxlevel to 4
endif

if (boxlevel == 2) && (button == 0)
   SetActorValue Energy 75 
elseif (boxlevel == 2) && (button == 1)
   SetActorValue Energy 0
elseif (boxlevel == 2) && (button == 2)
   SetActorValue Aggression 100
elseif (boxlevel == 2) && (button == 3)
   SetAlert 1
elseif (boxlevel == 2) && (button == 4)
   movetomarker SotANFollowStartMarker 
endif   

if (boxlevel == 3) && (button == 0)
   Message "Gehen" 
elseif (boxlevel == 3) && (button == 1)
   Message "Rennen"
elseif (boxlevel == 3) && (button == 2)
   Message "Schleichen"
endif

if (boxlevel == 4) && (button == 0)
   Message "Klinge"   
elseif (boxlevel == 4) && (button == 1)
   Message "Bogen"
elseif (boxlevel == 4) && (button == 2)
   Message "Magie"
endif

if (dead == 1)
 set timerdead to 6
 set timerdead to (timerdead - GetSecondsPassed)
 set dead to 0
endif

if timerdead == 5
 PlayMagicShaderVisuals creatureEffectUndeadBlade
elseif timerdead == 3
 Resurrect 1
elseif timerdead == 2
 StopMagicShaderVisuals creatureEffectUndeadBlade
elseif timerdead == 1
  Message "Der Begleiter hat sich geheilt und steht nun wieder zu euren Diensten"
  set timerdead to 0  
endif

end

begin OnDeath
 set dead to 1
end

Die erste MessageBox erscheint dauerhaft, weil das boxlevel auf 1 gesetzt wird, aber nach dem Klick auf eine Schaltfläche wird es nicht geändert, sodass Box 1 dauerhaft erscheint. Es wird nicht geändert, weil button vor allen Message Boxen auf den geklickten Button wechselt. Da da aber noch gar nichts geklickt werden kann, versuch es mal so, wie ich es im obigen Skript gemacht habe.
 
Die erste MessageBox erscheint dauerhaft, weil das boxlevel auf 1 gesetzt wird, aber nach dem Klick auf eine Schaltfläche wird es nicht geändert, sodass Box 1 dauerhaft erscheint. Es wird nicht geändert, weil button vor allen Message Boxen auf den geklickten Button wechselt. Da da aber noch gar nichts geklickt werden kann, versuch es mal so, wie ich es im obigen Skript gemacht habe.


Natürlich wird das boxlevel beim Klick auf einen Knopf verändert;)
"set button to GetButtonPressed" wird vor allem gemacht, das gilt also für den ganzen GameMode-Block. In Kombination mit boxlevel werden die einzelnen Messageboxen differenziert.

Hier z.B. für das erste boxlevel (= 1. Messagebox)
Code:
if (boxlevel == 1) && (button == 0)
   [COLOR="Red"]set boxlevel to 2[/COLOR]
elseif (boxlevel == 1) && (button == 1)
   [COLOR="red"]set boxlevel to 3[/COLOR]
elseif (boxlevel == 1) && (button == 2)
   [COLOR="red"]set boxlevel to 4[/COLOR]
endif


In diesem Teil werden einfach nur den einzelnen boxleveln die Messageboxen zugewiesen, da ist noch nichts mit drücken.
Code:
if (boxlevel == 1)
   MessageBox "Was wollt ihr befehlen?", "Bewegung" "Verhalten" "Kampfstil" "Beenden"
elseif (boxlevel == 2)
   MessageBox "Was verlangt ihr von eurem treuen Gehilfen?", "Folgt mir" "Bleibt hier" "Vergießt Blut" "Seid vorsichtig" "Geht mir aus den Augen" "Beenden"
elseif (boxlevel == 3)
   MessageBox "Wie soll ich mich verhalten?", "Gehen" "Rennen" "Schleichen" "Beenden"   
elseif (boxlevel == 4)   
   MessageBox "Womit soll ich an eurer Seite kämpfen?", "Klinge" "Bogen" "Magie" "Beenden"
endif


@Tach810i:
Hast du mein Script schon probiert?
Spontan würde ich nämlich bei deinem sagen, dass der Umweg über boxclass nicht nötig ist.
 
Ich brauche ein script für ein objekt damit es bei ekiner Aktivierung das Alchemie-menü öffnet!

schon mal danke für antworten!
 
Natürlich wird das boxlevel beim Klick auf einen Knopf verändert;)
"set button to GetButtonPressed" wird vor allem gemacht, das gilt also für den ganzen GameMode-Block. In Kombination mit boxlevel werden die einzelnen Messageboxen differenziert.

Hier z.B. für das erste boxlevel (= 1. Messagebox)
Code:
if (boxlevel == 1) && (button == 0)
   [COLOR=Red]set boxlevel to 2[/COLOR]
elseif (boxlevel == 1) && (button == 1)
   [COLOR=red]set boxlevel to 3[/COLOR]
elseif (boxlevel == 1) && (button == 2)
   [COLOR=red]set boxlevel to 4[/COLOR]
endif
In diesem Teil werden einfach nur den einzelnen boxleveln die Messageboxen zugewiesen, da ist noch nichts mit drücken.
Code:
if (boxlevel == 1)
   MessageBox "Was wollt ihr befehlen?", "Bewegung" "Verhalten" "Kampfstil" "Beenden"
elseif (boxlevel == 2)
   MessageBox "Was verlangt ihr von eurem treuen Gehilfen?", "Folgt mir" "Bleibt hier" "Vergießt Blut" "Seid vorsichtig" "Geht mir aus den Augen" "Beenden"
elseif (boxlevel == 3)
   MessageBox "Wie soll ich mich verhalten?", "Gehen" "Rennen" "Schleichen" "Beenden"   
elseif (boxlevel == 4)   
   MessageBox "Womit soll ich an eurer Seite kämpfen?", "Klinge" "Bogen" "Magie" "Beenden"
endif

Noch mehr gelernt. Tja, das Gehirn ist groß. :D
 
SCN (Ein beliebiger freier Name)

short done

Begin OnTrigger player
if done == 0
player.setstage (Questid) (Stufe)
set done to 1
end

Hallo,
ich denke das sollte meine Frage beantworten aber ohne "player", oder?
Danke dir Unbekannter

--------------------------------------EDIT--------------------------------------------
Habe das Scipt ausprobiert und es funktioniert einwandfrei, allerdings ohne "player".
Danke nochmal
 
Zuletzt bearbeitet: