Construction Set Skriptthread zum Construction Set

:headwall: natürlich...


Aber wenn beide eh etwas unterschiedliches tun, würde ich das Script splitten. Das ist dann um einiges weniger fehleranfällig.
Falls das allein das Problem nicht löst, probliers doch mit einer doonce-Abfrage. (Ja ich weiß, eigentlich sollte "player.moveto" das Script abbrechen, aber ich sehe keinen anderen Grund für eine Schleife.
 
Schmelz, ich habe dein Skript nachträglich geändert, weil es nicht funktionierte. Ich sage doch die ganze Zeit schon, alles erscheint zum richtigen Zeitpunkt, nur der Sound nicht.
Eine Messagebox brauche ich nicht mehr, da die Message durch die Stage schon erscheint.

Nun gut, ich habe dann MoW's Skript verwendet, das ging natürlich auch nicht. Dann habe ich, wie schon angekündigt, den GameMode-Block nach oben versetzt und den Begin-On-Trigger-Block darunter. Ich habe aber den "if (timer >==5)" weggelassen.

PHP:
scn 00InselMagicDoorTriggerSkript

short index
float timer

begin GameMode
if (index == 1)
set Timer to Timer + GetSecondsPassed
PlaySound AWDMagicDoorKnall
set index to 2
endif
end

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

Endlich war der Sound zu hören, aber eine Sekunde zu spät. Aber immerhin, er war zu hören. Ich hab die ganze Zeit geahnt, dass es der Timer war.
Jungs, wir kommen dem Ziel immer näher. Dieses Skript hier muss nur noch ein wenig verfeinert werden. Wie bringe ich den Sound dazu, vor der Stage zu ertönen?
 
Den Timer würde ich dann übrigens ganz entfernen, wenn du ihn ja sowieso nicht brauchst. In dem oberen Skript ist der Timer z.B. ungenutzt.

Du könntest es dann mal so probieren:
PHP:
scn 00InselMagicDoorTriggerSkript

short index

begin OnTrigger player
	if (index == 0)
		PlaySound AWDMagicDoorKnall
		set index to 1
	endif
end 

begin GameMode
	if (index == 1)
		SetStage 00AriellesWeyeDorfVergessenerSchrein 165
		set index to 2
	endif
end

Ob dein wechseln der Blöcke von unten nach oben und umgekehrt so klappt wie du willst, denke ich nicht. Immerhin wurde trotzdem noch vorher abgefragt ob der Index auf 0 ist und somit wurde auch die Stage vorher erhöht. Versuche es also mal ich wie es gerade geschrieben habe, dabei wird beziehungsweise sollte erst der Sound abgespielt werden und danach wird erst die Stage erhöht. Den Timer habe ich mal ganz entfernt.

MfG Master of Worlds
 
  • Like
Reaktionen: Arielle 1000
@MoW: Der Timer wird ja gebraucht, weil der Sound eine gewisse Länge hat...

Code:
scn name

short init
float timer

Begin onTrigger player

if init == 0
 set init to 1
 playSound <Sound-ID>  [COLOR="Red"];alternativ: playSound3D -> würde ich sogar empfehlen, da realistischer[/COLOR]
 set timer to <Länge-des-Sounds>
endif

end

Begin GameMode

if init == 1
 set timer to ( timer - getSecondsPassed )
 if timer < 0
  set init to 2
  setStage <Quest-ID> <Stage>
 endif
endif

end


@DarkRuler:
Ich würde auf jeden Fall empfehlen, eine Variable einzufügen. Laut CS-Wiki stoppt "playBink" jedes laufende Skript während des Videos. Das ist ein bisschen schwammig formuliert... Es kann also wie "return" wirken, den Rest des Skripts ohne Funktion "durchlaufen lassen" oder die Befehle einfach aufschieben.

Außerdem gibt es Probleme bezüglich "player.moveTo" in einem "onTrigger"-Block. Beispielsweise resultiert aus
Code:
scn name

Begin onTrigger player

player.moveTo <Ref>

end
ein endloses portieren des Spielers, obwohl er eigentlich schon nach dem ersten Mal nicht mehr im Trigger steht (eine Lösung dafür habe ich schon mal hier gepostet (ganz unten) ).

Mit einer zusätzlichen Variable kannst du das also womöglich umgehen:
Code:
scn name

short init

Begin onTrigger player

if init == 2
 set init to 0
endif

if player.getInCell <Zelle1>
 if init == 0
  set init to 1
  playBink <Video1>
 elseif init == 1
  set init to 2
  player.moveTo <Ziel1-Ref>
 endif
elseif player.getInCell <Zelle2>
 if init == 0
  set init to 1
  playBink <Video2>
 elseif init == 1
  set init to 2
  player.moveTo <Ziel2-Ref>
 endif
endif

end
 
Zuletzt bearbeitet:
Vielen, vielen Dank Diarrhoe,

jetzt ist es genau so, wie ich es wollte. Funktioniert alles ganz prächtig!

Aber auch allen anderen, die mir unermüdlich bei dieser harten Skript-Nuss geholfen haben gilt mein Dank.
Jetzt bin ich wieder richtig happy.:D

Dann kann ich mich jetzt meinem nächsten Problem widmen. Aber in einem anderen Thread. Ich hoffe, wir sehen uns dort wieder.;)
 
Kann man per Script NPC's/Kreaturen, welche man vorher tot eingebaut hat indem man ihnen 0 hp gegeben hat durch irgentetwas wie das Aktivieren oder Aufnehmen eines Gegenstandes wieder zum Leben erwecken mit der HP Zahl X?
 
Ich habe ein kleines Sayto Problem. Der NPC soll den Spieler anreden, wenn er eine Triggerzone betreten hat.

scn (Name)

float timer

; Activates linked Parent object once

short triggered
ref target
ref mySelf

begin onTrigger player

if triggered == 0
set triggered to 1
set target to getParentRef
set mySelf to getSelf
target.activate mySelf 1
(NPC Ref).sayto player (Topic ID) 1

endif

end

begin onReset

set triggered to 0

end

Wenn ich die Zone aber betrete, macht der NPC gar nichts. Was habe ich falsch gemacht?
 
Vielleicht muss
Code:
set triggered to 1
ans Ende des Blocks? Ich weiß es nicht, aber ich vermute es mal.


Ich weiß übrigens leider immernoch nicht, wie ich festlegen kann, welche NPC's wieder leben bei
Code:
ScriptName ...

Begin OnActivate

Ref.setactorvalue health zahl

End
 
Zuletzt bearbeitet:
  • Like
Reaktionen: blackHawk
Vielleicht muss
Code:
set triggered to 1
ans Ende des Blocks? Ich weiß es nicht, aber ich vermute es mal.


Ich weiß übrigens leider immernoch nicht, wie ich festlegen kann, welche NPC's wieder leben bei
Code:
ScriptName ...

Begin OnActivate

Ref.setactorvalue health zahl

End

Danke für deine Antwort, aber leider war das nicht die Lösung zu meinem Problem.

Zu deinem Problem: Hast du feste Referenzen festgelegt?
 
Nein, ich weiß ja nicht, wie das Script funktioniert. Muss ich jedem NPC eine zuweisen und dann irgentwie in das Script einbauen oder nicht?

Schade dass ich dir nicht helfen konnte, aber ich habe einfach mal angenommen, dass die Zeile eigentlich fast immer an das Ende von Blöcken gehört...

Edit: Wie kann ich Lichtquellen zu bestimmten Tageszeiten enablen und wieder disablen?
 
Zuletzt bearbeitet:
Deine Kreaturen, NPCs, whatever gibts die bei den Eigenschaften eine Refernenz (jedem eine eigene) und machst einen Hake bei "Persistant Referenz". Im Script ersetzt du "Ref durch eine Referenz. Für jede weitere eine neue Zeile. Die Zahl sollte mindestens 1, und maximal ~ 32.000 (genauen Wert vergessen) sein.
 
  • Like
Reaktionen: FreshTheFallen