Construction Set Skriptthread zum Construction Set

@ Dark Ruler: Ich glaube es liegt daran, dass du eine Variable verwendest, die in dem Script selber definiert wird, d.h. "standort" steht immer auf 0, da meines Wissens "ScriptEffectStart", das Script komplett neu beginnen lässt (ist ja logisch bei Zaubern).
 
Zuletzt bearbeitet:
Du musst das Skript nicht der Lampe zuweisen. ;) Die Lampe braucht eine Reference ID (irgendwas ohne Zahl am Anfang). Dann noch vor enable bzw. disable die Reference ID. schreiben. ;)

Damit das Script überhaupt startet, musst du dann noch eine neue Quest erstellen, den Haken bei StartGameEnabled drinne lassen und das Script (welches du zuvor als QuestScript abspeicherst) der Quest zuweisen.
 
Zuletzt bearbeitet:
Daran sollte es nicht liegen...

Du musst einfach nur das "oder" ("||") durch "und" ("&&") ersetzen. So wie es da steht, ist die obere Bedingung quasi immer erfüllt und das Licht verschwindet nie. Ich würde allerdings noch eine zusätzliche Bedingung einfügen, die verhindert, dass du das Licht enablest, wenn es gerade enabled ist und umgekehrt.
 
  • Like
Reaktionen: Arielle 1000
@DarkRuler
"player.moveto" teleportiert den Spieler und bricht das Script ab.
Ja und?
Bei dem teleportieren aus der Zelle wird dieser Block doch gar nicht abgerufen und alles andere steht ja davor.

Code:
scn aaDRPrivateTeleportzauber 

Short Standort 
;0 = Ausgangspunkt 
;1 = In der Ausrüstungszelle 

Begin ScriptEffectStart 
If ( Standort == 0 ) 
    Set Standort To 1 
    DRPrivateEquipMarker.MoveTo Player 
    Player.MoveTo DRPrivateArriveMARKER 
Else 
    Set Standort To 0 
    Player.MoveTo DRPrivateEquipMarker 
Endif 
End

Wenn MoveTo wirklick das Script beendet, passiert Folgendes:
Standort == 0?
Ja: Standort auf 1 EquipMarker mit MoveTo zum Player -> Script wird beendet. Der Player wird also nicht zum Arrive-Marker bewegt.

Jetzt ist Standort 1. Also wird Standort auf 0 gesetzt und anschließend wird der Player zum Equip-Marker verschoben.

Sollte es tatsächlich daran liegen, mache es so:
Code:
[COLOR=#000000][COLOR=#0000BB]scn aaDRPrivateTeleportzauber 

Short Standort 
[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]0 [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Ausgangspunkt 
[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]1 [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]In der Ausrüstungszelle 

Begin ScriptEffectStart 
[/COLOR][COLOR=#007700]If ( [/COLOR][COLOR=#0000BB]Standort [/COLOR][COLOR=#007700]== [/COLOR][COLOR=#0000BB]0 [/COLOR][COLOR=#007700]) 
    [/COLOR][COLOR=#0000BB]Set Standort To 1 
    DRPrivateEquipMarker[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]MoveTo Player 
ElseIf ( Standort == 1 )
    Set Standort to 2
    Player[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]MoveTo DRPrivateArriveMARKER 
[/COLOR][COLOR=#007700]Else 
    [/COLOR][COLOR=#0000BB]Set Standort To 0 
    Player[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]MoveTo DRPrivateEquipMarker 
[/COLOR][COLOR=#007700]Endif 
[/COLOR][COLOR=#0000BB]End  [/COLOR][/COLOR]
Dann müsstest Du den Zauber allerdings drei Mal ausführen.

  1. Equip-Marker zum Player
  2. Player zum Arrive-Marker
  3. Player zum Equip-Marker
 
Ist ein kleiner Denkfehler: "moveTo" bricht das Skript nur ab, wenn es auf den Spieler ausgeführt wird. Das heißt "<Ref1>.moveTo <Ref2>" ist vollkommen problemlos für <Ref1> != player.
Hebrocks Vorschlag halte ich da für richtig.
 
Na gut, wenn das nur bei Player.MoveTo passiert:

Setze bei deinem Zauberskript eine globale Variable ein, die wird vom Skript ja wohl kaum auf Null gesetzt werden.

Code:
 [COLOR=#000000][COLOR=#0000BB]scn aaDRPrivateTeleportzauber 

;GlobVariable (meine globale Variable) nutzen, anstatt einer im Skript erzeugten Variable
[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]0 [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]Ausgangspunkt 
[/COLOR][COLOR=#007700];[/COLOR][COLOR=#0000BB]1 [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]In der Ausrüstungszelle 

Begin ScriptEffectStart 
[/COLOR][COLOR=#007700]If ( [/COLOR][COLOR=#0000BB]GlobVar [/COLOR][COLOR=#007700]== [/COLOR][COLOR=#0000BB]0 [/COLOR][COLOR=#007700]) 
    [/COLOR][COLOR=#0000BB]Set GlobVar To 1 
    DRPrivateEquipMarker[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]MoveTo Player 
    Player[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]MoveTo DRPrivateArriveMARKER 
[/COLOR][COLOR=#007700]Else 
    [/COLOR][COLOR=#0000BB]Set GlobVar To 0 
    Player[/COLOR][COLOR=#007700].[/COLOR][COLOR=#0000BB]MoveTo DRPrivateEquipMarker 
[/COLOR][COLOR=#007700]Endif 
[/COLOR][COLOR=#0000BB]End  [/COLOR][/COLOR]
Globale Variablen können im CS unter Gameplay-Globals erstellt werden.
 
Zuletzt bearbeitet von einem Moderator:
@Diarrhoe und @Meister von Cyrodiil

Alles was ich erreichen will ist eine Tag/Nacht-Simulation im Wohnungsinterieur.
Ich habe das Original-streetlightskript auf Kerzen-Flammen gelegt, und es funktioniert. Sie gehen um 18:00 Uhr Ingamezeit an und um 7:00 Uhr Ingamezeit aus.
Ich hatte mir gedacht, dieses Skript würde auch funktionieren, wenn man einfach die Uhrzeiten austauscht und man sie auf interiorlights legt, damit sie morgens bis abends enabled werden und man damit Tageslicht hat.
Abends soll das Tageslicht disabled werden und die Kerzen gehen an. Mit den Kerzen hat es funktioniert, ich habe nur noch nicht verstanden, wieso es mit den interiorlights nicht klappt.



Edit: Sorry, muss mich noch schnell dazu äußern: ich habe jetzt wie von Diarrhoe vorgeschlagen im Skript das II gegen && getauscht und es funktioniert einwandfrei. Vielen Dank für den Hinweis, Diarrhoe!
 
Zuletzt bearbeitet:
Hi, ich habe ein(ig)e etwas komplexere Frage(n).
1.Hätte ich gerne, dass sich ein Tor (kein Obliviontor, sondern die großen schweren "Türen" wie sie gerne beim Pyriteschreinquest vorkommen) öffnet, eine Belagerungsraupe von dahinter hindurchläuft und sich das Tor danach wieder schließt.
Ich würded außerdem gerne der Raupe einen eigenen Kurs geben können, da sie dann um eine Kurve muss, was ich außerdem gerne haben würde ist, dass sie an einem bestimmten Punkt außerhalb der Sichtweite despawnt.
Außerdem soll an einem Punkt jede Stunde, oder besser alle 2h eine neue Raupe spawnen, welche genau das gleiche macht (Durchs sich öffnende Tor, nach Durchgang schließt sich das Tor, sie läuft um die Kurve einen Pfad entlang und despawnt außer Sichtweite).

2. Kann man per Script in einem bestimmten Gebiet das Wetter ändern? Das ganze soll einen ähnlichen Effekt haben wie wenn man in die Nähe von Obliviontoren kommt, bloß andersherum.
 
2. Kann man per Script in einem bestimmten Gebiet das Wetter ändern? Das ganze soll einen ähnlichen Effekt haben wie wenn man in die Nähe von Obliviontoren kommt, bloß andersherum.

Zu 1. fällt mir gerade nix ein
aber 2. ist einfach
// sind einzeilige kommentare. Hab gerade den Obl Befehl dafür vergessen^^. Bitte durchs richtige zeichen ersetzen
PHP:
scn SCRIPTNAME
short doonce
Begin GameMode
if player.GetInWorldSpace == Tamriel //Tamriel oder was du halt möchtest. 
ForceWeather Clear// oder 
SetWeather clear 
//Force ist, dass das Wetter sofort wechselt. Bei set zieht sich der wechsel.
endif
//Alternative lösung:
if player.GetInWorldSpace == Tamriel  
ForceWeather Clear 1//Die 1 steht dafür, dass das Wetter so bleibt bis es durch ReleaseWeatherOverride wieder zum normalen verhalten gezwungen wird.
SetWeather clear 1
else 
ReleaseWeatherOverride
end

P.S.: Seit wann nutzen hier egtl alle den php syntax parser?
 
  • Like
Reaktionen: FreshTheFallen
Also, ich weiß nicht, ob das Script in einer Oblivion Ebene nur an einigen Stellen das Wetter ändern kann, nämlich in der Nähe eines bestimmten Gegenstandes..
 
Weder noch. Ein Meter entspricht ungefähr 70 Einheiten. 500 Einheiten sind also etwas über 7 Meter.

Zu 1)
Das ist, ohne es vor Augen zu haben, gar nicht so einfach, denn dann bräuchte man ein allgemeines Skript, welches immer etwas mehr erfordert als ein spezielles. Allgemein wirds in diesem Fall sogar ziemlich kompliziert, weil du dann auf jeden Fall Winkelfunktionen etc. benötigst. Da könntest du den vorgeschriebenen Weg vorher mit X-Markern markieren und die Raupe dieser Linie folgen lassen. Einfacher wirds, wenn du einfach zeitabhängig die Richtung der Raupe änderst und sie in diese Richtung bewegst (benötigt unter Umständen auch Winkelfunktionen). Die Richtung kannst du auf jeden Fall mit "setAngle z" ändern. Für den Rest der Bewegung hilft "getPos".

Zu 2)
Als Ergänzung zu FreshTheFallens Skript:
Die richtige Syntax lautet "player.getInWorldSpace Tamriel".
 
Zuletzt bearbeitet:
  • Like
Reaktionen: FreshTheFallen
Könnte man bei 1. nicht rein theoretisch dort, wo die Raupe despawnen soll etwas machen wie

Code:
if position == <Xmarker-f> ;oder wenns ganz grob geht einfach die Zellkoordinaten
disable?
else end
Das Script von mir wird da wohl nicht gehen, aber ich denke, dass etwas in der Richtung funktionieren "könnte".
 
Zuletzt bearbeitet:
Klar geht das. Und wenn sie wieder spawnen soll, benutzt man einfach "enable". Der Skriptteil müsste aber so aussehen:
Code:
if <irgendwas>
 disable
endif
"Else" und "end" sind in der obigen Form falsch.

Für den zwei-Stunden-Timer könntest du so einen Code benutzen (bzw. schon zusammengefügt):
Code:
float Zeit

Begin GameMode

if <irgendwas>
 disable
 set Zeit to ( GameDaysPassed + ( GameHour + 2 ) / 24 )
endif
if Zeit <= ( GameDaysPassed + GameHour / 24 )
 enable
 setPos x <Start-Wert>
 setPos y <Start-Wert>
 setPos z <Start-Wert>   ; wieder an Startposition setzen
 setAngle z <Start-Wert>
endif

end

Das müsstest du nurnoch entsprechende implementieren und ergänzen.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: FreshTheFallen
Hm, also das hier ist das Script, welches auf der Belagerungsraupe aus der Hauptquest bei Bruma liegt.

Code:
scn SeigeEngineEffectsSCRIPT


short initialized
float frate
float fy
float fstarty
short Go 
float enddistance
float magicTimer
;float stepTimer
short activated
short Ready
short IntroBlast
float IntroBlastTimer

float   fTrapDamage
float   fTrapPushBack
float   fTrapMinVelocity
short    bTrapContinuous

begin OnLoad
	if initialized == 1 && go == 0
		pms effectSiegeCrawler
	endif
end

begin onTrigger player

		;Round per frame for 1 second.
	if magicTimer <= 0.5
		cast TRAPSiegeMachineFireDamage player
	endif
	if magicTimer <= 0
		set magicTimer to 4
	endif

		;3 Round Bursts of fire
	;if Ready == 1
		;cast TRAPSiegeMachineFireDamage player
	;elseif Ready == 2
		;cast TRAPSiegeMachineFireDamage player
	;elseif Ready == 3
		;cast TRAPSiegeMachineFireDamage player
	;else
		;set magicTimer to 6
		;set Ready to 0
	;endif

	
End

Begin gameMode

	if initialized == 0
		set IntroBlastTimer to 5.25
		set frate to -15
		set initialized to 1
		set go to 1
		set enddistance to GetPos Y - 10000
		;set stepTimer to 1.6
	endif

	if IntroBlastTimer <= 5 && IntroBlast <= 9
		If IntroBlast == 0
			cast TRAPSiegeMachineFireDamage OblivionSiegeTarget01
			cast TRAPSiegeMachineFireDamage OblivionSiegeTarget01b
			set IntroBlast to IntroBlast + 1
		elseif IntroBlast == 1 && IntroBlastTimer <= 4.5
			cast TRAPSiegeMachineFireDamage OblivionSiegeTarget02
			cast TRAPSiegeMachineFireDamage OblivionSiegeTarget02b
			set IntroBlast to IntroBlast + 1
		elseif IntroBlast == 2 && IntroBlastTimer <= 4
			;cast TRAPSiegeMachineFireDamage OblivionSiegeTarget03
			;cast TRAPSiegeMachineFireDamage OblivionSiegeTarget03b
			set IntroBlast to IntroBlast + 1
		elseif IntroBlast == 3 && IntroBlastTimer <= 3.5
			cast TRAPSiegeMachineFireDamage OblivionSiegeTarget04
			cast TRAPSiegeMachineFireDamage OblivionSiegeTarget04b
			set IntroBlast to IntroBlast + 1
		elseif IntroBlast == 4 && IntroBlastTimer <= 3
			;cast TRAPSiegeMachineFireDamage OblivionSiegeTarget05
			;cast TRAPSiegeMachineFireDamage OblivionSiegeTarget05b
			set IntroBlast to IntroBlast + 1
		elseif IntroBlast == 5 && IntroBlastTimer <= 2.5
			cast TRAPSiegeMachineFireDamage OblivionSiegeTarget06
			cast TRAPSiegeMachineFireDamage OblivionSiegeTarget06b
			set IntroBlast to IntroBlast + 1
		elseif IntroBlast == 6 && IntroBlastTimer <= 2
			;cast TRAPSiegeMachineFireDamage OblivionSiegeTarget07
			;cast TRAPSiegeMachineFireDamage OblivionSiegeTarget07b
			set IntroBlast to IntroBlast + 1
		elseif IntroBlast == 7 && IntroBlastTimer <= 1.5
			cast TRAPSiegeMachineFireDamage OblivionSiegeTarget08
			cast TRAPSiegeMachineFireDamage OblivionSiegeTarget08b
			set IntroBlast to IntroBlast + 1
		elseif IntroBlast == 8 && IntroBlastTimer <= 1
			cast TRAPSiegeMachineFireDamage OblivionSiegeTarget09
			cast TRAPSiegeMachineFireDamage OblivionSiegeTarget09b
			set IntroBlast to IntroBlast + 1
		elseif IntroBlast == 9 && IntroBlastTimer <= 0.5
			;cast TRAPSiegeMachineFireDamage player
			set IntroBlast to IntroBlast + 1
		endif
	endif

	;Camera Shake on initial foot step of animation
	;if player <= 1200 && stepTimer <=0
		;ths
		;set stepTimer to 6.63
	;endif

	if activated == 0
		; set up the damage values
		set fTrapDamage to 15
		set fTrapPushBack to 1000
		set fTrapMinVelocity to 0
		set bTrapContinuous to 0
		set activated to 1
	else
    		trapUpdate
	endif

	if Go == 1
		set fstarty to GetPos Y
		set fy to frate * GetSecondsPassed
		set fy to fstarty + fy
		SetPos Y fy

		if fy <= enddistance
			message "Die Belagerungsmaschine hat das Große Tor erreicht."
			set Go to 0
			playgroup Forward 1
			pms effectSiegeCrawler
		endif
	endif	

	if IntroBlastTimer > 0
		set IntroBlastTimer to IntroBlastTimer - getSecondsPassed
	endif	

	if magicTimer > 0
		set magicTimer to magicTimer - getSecondsPassed
	endif	

	;if stepTimer > 0
		;set stepTimer to stepTimer - getSecondsPassed
	;endif	


end
Ich denke ich könnte da Teile schonmal rausschneiden, denn die Raupe soll nicht auf den Spieler schießen, und die Nachricht, dass sie das Große Tor erreicht hat kann auch komplett weg.
Wie genau kann ich denn jetzt eine Abfolge von Positionen, welche sie einnehmen soll dort reinsetzen? Anders als in der HQ muss sie mindestens 1mal um ddie kurve.

Ein Kamerawackeln sollte in einer Entferung von knapp 15Metern ausgelöst werden.
 
Beim Spieler??? <- Da sehe ich irgendwie keinen sinn.
Bei einem NPC könntest du den einen disablen und den anderen enablen.
Oder meinst du rein optisch?
 
Ja rein Optisch. Es sei denn es gibt eine Möglichkeit die Rasse mit einen Zauber zu wechseln. Man kann sich mit den "Druiden Mod" ja auch ein einen Wolf verwandeln.
 
@ Sammael666 : Ich glaube nicht, dass es einen Befehl setRace oder ModPCRace gibt... Wenn doch klärt mich auf :D
Die einzige Möglichkeit die ich zur Rassenänderung kenne ist das klassische Racemenu (Befehl: showracemenu [geht der außerhalb der Konsole überhaupt? :lol:])