Construction Set Skriptthread zum Construction Set

Kleine Frage: Kann ich per Skript in bestimmten Abständen an einem Ort Staubwolken aufwirbeln lassen? Kontext: Eine Kreatur will eine Tür durchbrechen und schmeißt sich deswegen mehreremals dagegen.

LG,

peecee
 
Du könntest jedes mal, wenn die Kreatur gegen die Wand schlägt eine Staubwolke enablen und danach wieder disablen, sieht aber in der Regel nicht gut aus. Am Besten wäre es eigentlich, wenn man dafür eine extra .nif mit Animation erstellt.
 
Angenommen, ich habe eine solche Animation, wie würde der Skript aussehen? Am Besten mit Timer, wenn der Timer abgelaufen ist, gehts los.

EDIT: Okay, das ist nicht gerade verständlich. Nochmal:

1. Man hört Sound X (Kreatur nähert sich). Der Timer wird auf X gestellt.
2. wenn der Timer bei Y angekommen ist (Monster ist an der Tür angek.), wird die Staubwolkenanimation enable
3. Wenn der Timer bei 0 angekommen ist soll die Tür disabled werden und stattdessen die kaputte Tür enable werden, und das Monster ebenfalls enabled.

Ich hoffe, das ist so verständlicher. :)

LG,

peecee
 
Zuletzt bearbeitet:
Habe mich mal daran versucht. :)

Ich denke es dürfte alles enthalten sein, was du gefordert hast. Wenn nicht, sag bescheid.

Code:
scn peeceeTriggerTimerScript

Short Act
Float Timer

Begin OnTrigger Player
if (Act == 0)
	Set Act to 1
	Set Timer to <X>
	PlaySound <XYZXYZ>

else
	return
endif
end

Begin GameMode
if Act == 1
	Set Timer to Timer - GetSecondsPassed

	if (Timer <= <Y1> && Act == 1)
		pcStaubwolkenREF.playgroup forward

		if (Timer <= <Y2> && Act == 1)
			pcStaubwolkenREF.playgroup forward

			if (Timer <= <Y3> && Act == 1)
				pcStaubwolkenREF.playgroup forward

				if (Timer <= 0 && Act == 1)
					GanzesTorREF.disable
					KaputtesTorREF.enable
					MonsterREF.enable
					Set Act to 2
				endif
			endif
		endif
	endif
endif
end

Die entsprechenden Werte und Variablen musst du dann noch eintragen.

MfG Master of Worlds
 
Zuletzt bearbeitet:
  • Like
Reaktionen: peecee
Habe mich mal daran versucht. :)

Ich denke es dürfte alles enthalten sein, was du gefordert hast. Wenn nicht, sag bescheid.

Code:
scn peeceeTriggerTimerScript

Short Act
Float Timer

Begin OnTrigger Player
if (Act == 0)
    Set Act to 1
    Set Timer to <X>
    PlaySound <XYZXYZ>

else
    return
endif
end

Begin GameMode
if Act == 1
    Set Timer to Timer - GetSecondsPassed

    if (Timer <= <Y1> && Act == 2)
        pcStaubwolkenREF.playgroup forward

        if (Timer <= <Y2> && Act == 2)
            pcStaubwolkenREF.playgroup forward

            if (Timer <= <Y3> && Act == 2)
                pcStaubwolkenREF.playgroup forward

                if (Timer <= 0 && Act == 2)
                    GanzesTorREF.disable
                    KaputtesTorREF.enable
                    MonsterREF.enable
                    Set Act to 2
                endif
            endif
        endif
    endif
endif
end
Die entsprechenden Werte und Variablen musst du dann noch eintragen.

MfG Master of Worlds

Du setzt nirgends Act auf 2. Somit können die Timer-Bedingungen nie zutreffen. Außerdem muss "set timer to timer +/- getsecondspassed" jeden Frame laufen. Also musst Du statt "if(act == 1) ein "if(act)" hinsetzen.
 
Das es eigentlich nicht benötigt wird, weiß ich.
Aber komischerweise ist es bei mir schon oft genug gewesen das es ohne diese zusätzliche Abfragen nicht richtig laufen will, wieso kann ich nicht sagen. :?

MfG Master of Worlds
 
Um noch mal auf die Skaliersache von vor einigen Seiten zurückzukommen.
Irgendwie hab ichs noch nicht ganz gecheckt. Was muss jetzt da bei Once == 3 dahinter rein?

PHP:
scn aaDRCyra0NQ05Pruefung03AlbtraumsgegnerSCRIPT

short count
short once
float scale   		;durch den Scale-Unterschied ersetzen
float seconds   		;die Sekunden, die für den Scale-Unterschied benötigt werden
float timer       	;wird auf die Variable "seconds" gesetzt
float secondsPassed
float scale_mod

Begin onHit player

If (count < 20)
	set count to (count + 1)
 	modScale 0.02
 	resetHealth
		
Elseif (count >= 20) && (once == 0)
	Set once to 1
  	setStage aaDRCyra105 45
Endif
End

Begin GameMode
	
If (Once == 0)			;Essenz der Angst wurde noch keine 20 Mal getroffen
	Return
Elseif (Once == 1)
	set timer to (timer + getsecondspassed)
	set Once to 2
Elseif (Once == 2)
	set timer to 10
	set Once to 3
		
Elseif (Once == 3)

		;Hier jetzt in 10 Sekunden um insgesamt 2 Scalewerte runterskalieren.

Endif
End


Begin onDeath

If (Once == 0)	;Irrtümlich gestorben
	Resurrect 1
	EVP
Elseif (Once == 3)
	SetStage aaDRCyra105 45
	Let Once := 4
Endif
End
 
Es würde helfen wenn du mal genauer erklärst, was du in dem Script möchtest, da mir 3 once-werte zu viel vorkommen. Außerdem:
;Hier jetzt in 10 Sekunden um insgesamt 2 Scalewerte runterskalieren.
SetScale reicht nur von 0.5 bis 2. Wenn du also die Kreatur zB. auf eine scale von 0.2 oder 3 setzen möchtest, wird die scale in echt nur auf 0.5 bzw. 2 gesetzt. Eine Größenänderung von 2 ist also nicht möglich, außer durch den OBSE Befehl setScaleEx. Nachteil: setScaleEx speichert die Änderung im Savegame.
 
Hallo nocheinmal!

Ich wollte einmal fragen, ob (und wie) folgendes möglich ist: Der Spieler soll ein Dungeon verlassen. Wenn er dies tut, und draußen ankommt, so soll es draußen "klares Wetter" bei schätzungsweise 19 Uhr haben.

Soll also heißen - Wenn der Spieler das Dungeon verlässt, so soll er den Sonnenuntergang bewundern können. Wie lässt sich das umsetzen? :?

Mit freundlichen Grüßen,

MadHatter :)
 
Hier bin ich wieder, mit einem Skriptproblem. Dieser Skript (von Diarrhoe aus der Skriptsammlung) funktioniert, bis auf dass die Kamera sich nicht richtig auf den Parent des Triggers richtet (dreht sich stattdessen sinnlos im Kreis).

Code:
scn PCPQ01ST20soundeffectcorpse

;Written by Diarrhoe
;09/2010
;Makes the player once look at the trigger's parent


short doonce
ref target

float pi
float a0
float a1
float a2
float a3

short triggered
short finished
float timer

float ang_x
float ang_z

float eye_height

float sin
float n
float sqrt
float headingAngle_x

float diff_ang_x
float diff_ang_z

float secondsPassed


Begin onTriggerActor player

if doonce == 0
    set doonce to 1
    set target to getParentRef

    set pi to 3.1415927
    set a0 to 1.5707288
    set a1 to -0.2121144
    set a2 to 0.0742610
    set a3 to -0.0187293
endif

if triggered == 0
    set ang_x to player.getAngle x
    set ang_z to player.getAngle z

    set eye_height to (player.getScale * (115 - 20 *player.isSneaking))

    set sin to ((player.getPos z + eye_height - target.getPos z) / target.getDistance player)
    set n to (1 - sin)
    set sqrt to (n / 2)
    set sqrt to ((sqrt + n/sqrt) / 2)
    set sqrt to ((sqrt + n/sqrt) / 2)
    set sqrt to ((sqrt + n/sqrt) / 2)
    set sqrt to ((sqrt + n/sqrt) / 2)
    set sqrt to ((sqrt + n/sqrt) / 2)
    set sqrt to ((sqrt + n/sqrt) / 2)
    set sqrt to ((sqrt + n/sqrt) / 2)
    set headingAngle_x to (180 / pi * (pi/2 - sqrt*(a0 + a1*sin + a2*sin*sin + a3*sin*sin*sin)))

    set diff_ang_x to (headingAngle_x - ang_x)
    set diff_ang_z to player.getHeadingAngle target

    disablePlayerControls
    Playsound PCPDreamyGhost	
    PCPGoblin01REF.enable
    PCPGoblin02REF.enable
    PCPGoblin03REF.enable
    PCPGoblin01REF.startcombat player
    PCPGoblin02REF.startcombat player
    PCPGoblin03REF.startcombat player
		
    set triggered to 1
    set finished to 0
    set timer to 1             ;hier kann eingestellt werden, wie lange die Blickbewegung dauern soll (in Sekunden)
    return
endif

end


Begin GameMode

if finished
    return
endif

if triggered
    set secondsPassed to getSecondsPassed
    if timer >= 0
        set timer to (timer - secondsPassed)
    else
        enablePlayerControls
        set finished to 1
        return
    endif

    set ang_x to (ang_x + diff_ang_x*secondsPassed/timer)
    player.setAngle x ang_x
    set ang_z to (ang_z + diff_ang_z*secondsPassed/timer)
    player.setAngle z ang_z
    return
endif

end

Ich wäre für Hilfe sehr dankbar. :)

LG,

peecee
 
Ach ja, das ist mir irgendwann auch aufgefallen und hatte es dann umgeschrieben. Hab wohl vergessen, es auch im Thread zu ändern. Das neue ist jetzt etwas länger und bietet noch andere Sachen. Beispielsweise orientiert sich die Dauer des Vorgangs daran, wie groß die Winkeländerung ist. Außerdem können mehrere Parents ausgewählt werden. Die Kamera schwenkt dann von einem Parent zum anderen. Ich werde es in der Skriptsammlung editieren.
 
  • Like
Reaktionen: peecee
Ah, ich hab noch ne kleine Frage:
Ich brauch nen Skript, der beim Berühren einer Collision Box eine Message erscheinen lässt. :)

LG,

peecee
 
Meinst du mit Berühren, dass du sie anklickst?

Wenn ja, dann so.
PHP:
scn ...

Begin onActivate

MessageBox "Blabla"

End

Wenn du das "damit zusammenstoßen" meinst, so müsstest du einen Trigger machen, welcher das drauf hat.

PHP:
scn ...

Begin onTriggerActor player

Message "Blubb" ;MessageBox wäre unpraktisch, weil du unmittelbar nach dem wegklicken wieder ne neue hättest. 

End
 
  • Like
Reaktionen: peecee
Hallo, ich bräuchte mal ein Skrip das bewirkt das wenn ich mit diesen "Schwert" 7 gegner getötet habe das der nächste gegner also der 8 mit einem Schlag stirbt.

MFG
Sammael
 
Dies ist ein Skript aus Ivellon, den ich verwenden möchte (natürlich werde ich Lazarus fragen). Allerdings verstehe ich ihn nicht. Kann mir jemand erklären, wie der funktioniert, und wie ich den dann einsetze?

Code:
scn 01IvellonTorchActivatorScript

short IT
float angle

begin onActivate
if player.isactorusingatorch == 0
message "Mithilfe einer anderen Fackel könntet Ihr diese hier entzünden."
else
set angle to GetAngle z
PlaceAtMe XFackel 1 0 0
Disable

if angle == 0  
PlaceAtMe 01IvellonTorchLight 1 15 2
elseif angle == 90
PlaceAtMe 01IvellonTorchLight 1 15 0
elseif angle == 180 || angle == -180
PlaceAtMe 01IvellonTorchLight 1 15 4
elseif angle == 270 || angle == -90
PlaceAtMe 01IvellonTorchLight 1 15 1
else
PlaceAtMe 01IvellonTorchLight 1 0 0
endif
endif
end

begin OnMagicEffectHit FIDG
set angle to GetAngle z
PlaceAtMe XFackel 1 0 0
Disable

if angle == 0  
PlaceAtMe 01IvellonTorchLight 1 15 2
elseif angle == 90
PlaceAtMe 01IvellonTorchLight 1 15 0
elseif angle == 180 || angle == -180
PlaceAtMe 01IvellonTorchLight 1 15 4
elseif angle == 270 || angle == -90
PlaceAtMe 01IvellonTorchLight 1 15 1
else
PlaceAtMe 01IvellonTorchLight 1 0 0
endif
end

begin GameMode

if IvellonTorch == 1 && IT == 0
set angle to GetAngle z
PlaceAtMe XFackel 1 0 0
set IT to 1
Disable

if angle == 0  
PlaceAtMe 01IvellonTorchLight 1 15 2
elseif angle == 90
PlaceAtMe 01IvellonTorchLight 1 15 0
elseif angle == 180 || angle == -180
PlaceAtMe 01IvellonTorchLight 1 15 4
elseif angle == 270 || angle == -90
PlaceAtMe 01IvellonTorchLight 1 15 1
else
PlaceAtMe 01IvellonTorchLight 1 0 0
endif
endif

end

Ich freue mich auf Hilfe, und meinen Vorposter nicht übersehen. :)

LG,

peecee
 
Kann mir jemand erklären, wie der funktioniert, und wie ich den dann einsetze?
Auf diese Frage hätte ich Lust "gar nicht" zu antworten...
Wie der funktioniert? Soll ich dir jede Zeile erklären?
Und wie man ihn einsetzt kann ich dir auch nicht erklären, weil ich nicht weiß, WO du ihn einsetzen willst.

Nicht böse nehmen... aber die Fragen sind etwas schwammig. Vielleicht kannst du das noch etwas deutlicher formulieren.

Grüße,

Gildur

Außerdem würde ich dir von dem Script abraten, da er PlaceAtMe benutzt, was Spielstände aufbläht und, wenn zu oft benutzt, den Spielstand unbrauchbar macht. Am Besten wäre es, wenn du uns sagst, was du möchtest und wir es für dich schreiben.