Construction Set Skriptthread zum Construction Set

Als Basis nimmst du Kahmuls Script von oben, aber für den Trigger, also OnTrigger-Block. Die Message machst du mit Message"bla" und den Knall (meinst du akustisch?) mit StreamMusic.
 
So, Kahmuls Skript für das Portal, ein wenig angepasst:

PHP:
SCN PortalSkript

Short i

Begin OnActivate

if(i == 0)
  set i to 1
  messagebox"Das Portal ist zerstört. Ich muss einen anderen Weg suchen, um zurückzukehren."
  activate
 return
endif

End

Und hier das Skript für den Trigger:

PHP:
scn Name des Skriptes

short doonce

begin ontrigger player
if doonce == 0
SetStage MeineQuest Stage
set doonce to 1
StreamMusic Knall.mp3     (oder auch PlaySound xyz.mp3)
messagebox "blablabla."
endif
end


Ist das richtig so?
 
Das erste Script würde dann aber, nachdem die Meldung kommt, den Spieler teleportiern (->activate im Script umgeht aufrufung des Scripts).

Aber ich komme gerade durcheinander; kannst bitte ncohmal detailiert den Ablauf schildern?
 
Ok. Ich weiß nicht, ob es so reicht:

Player durchschreitet das Magic-Tor und kommt auf der anderen Seite an. In diesem Moment hört er einen Knall, eine Message erscheint, dass das Tor kaputt ist.
Player aktiviert Tor, Message erscheint, dass es defekt ist und ihn nicht zurückteleportieren kann.
 
  • Like
Reaktionen: Schmelz
Dann streichst du einfach aus dem ersten Script alles außer folgendem raus:
Code:
SCN ...

Begin OnActivate

MessageBox"..."

End
der Rest wird nicht gebraucht, weil man ja nie in dieser Richtung durch das Tor kommen soll. (Es ind ja eigentlich zwei; eines auf jeder Seite.)

Dem zweiten Script würde sicher ein Timer nicht schlecht tun, damit man auch den Knall höhrt, bevor die Message kommt^^.
 
Code:
scn Name des Skriptes 

short index
float timer

begin ontrigger player 
  if dindex == 0 
    SetStage MeineQuest Stage 
    set index to 1 
    StreamMusic Knall.mp3     (oder auch PlaySound xyz.mp3) 
  elseif index ==1
    set timer to timer + getSecondsPassed
    if timer >= Wartezeit(sekunden)
      set index to 2
    endif
  elseif index ==2
    messagebox "blablabla." 
    set index to 3
  endif 
end
Ich hoffe mal, dass das so passt^^
 
Danke Schmelz, ich werd's aber erst morgen austesten.
Ist schon wieder so spät geworden.
Aber morgen melde ich mich wieder um zu berichten.

LG
Arielle
 
Sorry für den Doppelpost, aber ein Edit wäre nicht bemerkt worden.

Ich hab jetzt mal alles soweit fertiggestellt, und es funktioniert fast alles, wie ich es mir gewünscht habe. Nur mit dem Sound klappt es noch nicht. Ich habe ihn ins CS eingebunden und im Skript verankert, es sieht jetzt folgendermaßen aus:

PHP:
scn 00InselMagicDoorTriggerSkript

short index
float timer

begin ontrigger player
if index == 0
SetStage 00AriellesWeyeDorfVergessenerSchrein 165
set index to 1
PlaySound AWDMagicDoorKnall
elseif index == 1
set timer to timer + getSecondsPassed
if timer >=1       
set index to 2
messagebox "Was war das für ein Knall? Hoffentlich war es nicht das magische Portal."
set index to 3
endif
endif
end


Alles wird zum richtigen Zeitpunkt geschaltet, nur der Sound ist nicht zu hören. Ist vielleicht der Timer-index nicht richtig? Hab auch mal eine 3 oder eine 5 eingesetzt. Aber der Sound kommt einfach nicht.
Das sind seine Einstellungen:



Habt Ihr Ideen, was man da machen kann?
 
Huch du hast ja zwei Zeilen gestrichen (Wie ich gerade sehe, ändert das sogar nichts :eek:; du kannst aber auch noch das "set index to 2" rausstreichen, und für die Estethik beim nächsten die 3 in eine 2 ändern.)

Zum eigentlichen Problem: Versuch mal PlaySound zwei Zeilen nach vorne zu schieben.
Zu den Einstellungen kann ich mangels Erkennbarkeit nichts sagen:?

Wenn das alles nichts hilft, nimm StreamMusic, das ist weniger anfällig.


Noch was anderes: Du solltest darauf achten, dass die Triggerzohne groß genug ist, dass man sie nicht innerhalb der einen Sekunde wieder verlassen kann;)
 
Hallo,
Ich brauche zwei Skripts:
Einmal einen Skript wenn man ein Objekt anklickt dass es verschwindet und das der Player eine Bestimmte Menge von Gegenstand x bekommt.

Als zweitens einen Skript,
Wenn man in ein Haus geht, das da eine Musik abspielt,
und wenn man Raus geht die Musik endend.



mfg
Rushman
 
Das zweite musste glaube ich mit einer Triggerbox machen, auf die du ein Skript legst, das die Mukke abspielt (streammusic..)

Beim Skript an sich kann ich dir nicht wirklich weiterhelfen

LG :)
 
@rushman
Du hast doch die Musik schon ins CS eingepflegt, richtig? Dann kannst du über Miscelleanous/Sound deine Musik wählen und in die Innenzelle ziehen, wo sie abgespielt werden soll. Du solltest sie auf loop stellen, damit sie durchgehend gespielt wird, solange man sich in dieser Innenzelle befindet. Wenn du die Innenzelle verlässt, hörst du sie nicht mehr.



Und jetzt in eigener Sache:
Ich brauche nochmals Hilfe bei diesem Skript. Irgendwas geht hier nicht.

PHP:
scn 00InselMagicDoorTriggerSkript

short index
float timer

begin ontrigger player
if index == 0
SetStage 00AriellesWeyeDorfVergessenerSchrein 165
set index to 1
elseif index == 1
set timer to timer + getSecondsPassed
if timer >=5
StreamMusic AWDMagicDoorKnall
set index to 2
endif
endif
end

Dieses Skript liegt auf einem Trigger, den der Player durchläuft, nachdem er durch ein magisches Portal an einen neuen Ort teleportiert wird. Hier angekommen, soll der Teleporter sich selbst durch einen lauten Knall zerstören.
Alles funktioniert soweit, nur der Sound nicht. Vielleicht gibt es skripttechnisch gesehen eine andere Möglichkeit, den Knall abzuspielen. Es ist übrigens eine wav. Ich habe es auch mit dem Befehl PlaySound versucht, auch den timer mal höher und auch niedriger gesetzt. Nichts geht. Kann man nicht generell auf den Timer verzichten? Vielleicht liegt ja hier der Hase begraben?
 
  • Like
Reaktionen: rushman
Einen Timer brauchst du grundsätzlich nicht; wenn du aber eine leichte Verzögerung haben willst, ist er nötig.

Was eher Ursache des Problems sein könnte, ist die Tatsache, dass du den Timer im "onTrigger"-Block laufen lässt. Wenn der Spieler also den Trigger verlässt, bevor der Timer abgelaufen ist, wird auch der Sound nicht abgespielt, es sei denn, der Spieler betritt den Trigger wieder. Ein kurzer Timer hilft dabei natürlich, weil der Spieler dann weniger Zeit hat, den Trigger zu verlassen. Am besten ist jedoch, wenn du den Timer in einen "GameMode"-Block verfrachtest.

Trotzdem solltest du auf jeden Fall "playSound" oder "playSound3D" benutzen. "StreamMusic" würde zusätzlich die Hintergrundmusik ausschalten.
 
  • Like
Reaktionen: Master of Worlds
Da davon auszugehen ist das der Sound das richtige Format hat, würde ich das Skript noch etwas umgestalten.

PHP:
scn 00InselMagicDoorTriggerSkript

short index
float timer

begin ontrigger player
	if (index == 0)
		SetStage 00AriellesWeyeDorfVergessenerSchrein 165
		set index to 1
	endif
end

begin GameMode
	if (index == 1)
		set Timer to Timer + GetSecondsPassed

			if (timer >=5)
			StreamMusic AWDMagicDoorKnall
			set index to 2
			endif
	endif
end

Probiere das mal, ich habe den Timer nun einfach mal in den GameModeblock getan, damit der Timer auch jede Frame abgefragt wird. Ob es auch normal nur in einem Triggerblock funktioniert, weiß ich nicht, daher mein Umbau.

Wenn das noch nicht funktioniert versuche auch es noch mal mit dem PlaySound, den würde ich dann anstatt StreamMusic sowieso benutzen.
Sofern sich dann immer noch nichts tut, kannst du ja auch mal ein Message "Timer hat Ziel erreicht!" nach beziehungsweise vor deiner Zeile mit dem Befehl zum abspielen des Sounds ergänzen. Letzteres soll dann nur helfen um nachzuschauen ob der Timer denn überhaupt bis an das Ziel kommt oder irgendwo auf der Strecke der Wagen im Dreck liegt.

MfG Master of Worlds
 
Vielen Dank euch beiden,

keine Sorge, der Sound hat das richtige Format. Ist ein Vanilla Sound den ich kopiert und umbenannt habe. Die Original-Einstellungen habe ich beibehalten.

Bei näherer Betrachtung fällt mir ein, dass der Timer wahrscheinlich gar keinen Sinn macht. Ich will ja nicht so tun, als würde ich was davon verstehen, aber ich habe das Gefühl, dass bei meinem Skript das Pferd von hinten aufgezäumt wurde.:lol:
Wenn ich das Skript jetzt richtig verstehe, dann schaltet es zuerst die Stage, bei einem Timer von 5 würde der Knall erst 5 Sekunden nach der Stage zu hören sein, richtig? Dann ist diese Reihenfolge aber nicht richtig.

Mein Gedankengang ist folgender: Player wird an diesen Ort teleportiert, hört einen Knall, danach wird die Queststage gestartet, worin auf den Knall Bezug genommen wird. Nur in dieser Reihenfolge macht es Sinn.

Sollte ich also deinen GameMode-Block nach oben setzen und darunter den BeginOnTriggerPlayer-Block? Dieses wäre die richtige Reihenfolge.

Aber bist du dir sicher, dass der Timer wirklich vonnöten ist? Ich habe das Gefühl, bei diesem Skript wird keiner gebraucht.
 
Ich habe ein Problem mit "PlayBink" als Skriptbefehl.
Wenn ich das unten benutze, dann schmeißt der mir Endlosschleifen von dem Video an den Kopf.

PHP:
scn aaDRCyraAllgemSternentorSCRIPT

Begin onTriggerActor
	
If (Player.GetInCell aaDRCyra0HQ05AltLeg09 == 1)

	PlayBink "DRsCyraliaStargate.bik"
	Player.MoveTo DRCyra0HrasklXMarkerREF
Elseif (Player.GetInCell aaDRCyra0HQ06Hraskl01 == 1)

	PlayBink "DRsCyraliaStargate.bik"
	Player.MoveTo DRCyra0AltLeg08XMarkerREF
Endif	
End
 
Aber wieso hast du das auch geändert?????
In dem Script das ich gepostet hatte war es noch so, dass NACH dem Sound gewartet wird! Ich verstehe wirklich nicht wieso! Und wo ist die Messagebox geblieben...

Das mit dem GameMode ist aber eine gute Idee! So sollte es also besser sein:
PHP:
scn 00InselMagicDoorTriggerSkript

short index
float timer

begin ontrigger player
    if (index == 0)
        SetStage 00AriellesWeyeDorfVergessenerSchrein 165
        StreamMusic AWDMagicDoorKnall
        set index to 1
    endif
end

begin GameMode
    if (index == 1)
        set Timer to Timer + GetSecondsPassed
        if (timer >=5)
            Messagebox"bla"
            set index to 2
        endif
    endif
end



@Darkruler: Wieso fragst du in einem Trigger-Script die Celle ab? Die ist doch durch die Position des Triggers bestimmt.
 
  • Like
Reaktionen: Arielle 1000