Construction Set Skriptthread zum Construction Set

Ich konnte den Projektleiter auch gerade überreden, doch OBSE zu nutzen, da bisher zu viel wegfallen würde, wenn man darauf verzichtet.
 
Hi Leute,

ich hab ne Frage. Kann man aus nem Hauptscript Unterscripte aufrufen?
Wenn ja wie.
Oder sollte man das über Token bzw Items auf die man das Script legt lösen?

Und wie übergibt man dann Variabeln und bekommt die Werte zurück ?

Das sollte wenn möglich ohne Quest gehen.

Bis denn Thalon
 
Hi Leute,

ich hab ne Frage. Kann man aus nem Hauptscript Unterscripte aufrufen?
Wenn ja wie.
Oder sollte man das über Token bzw Items auf die man das Script legt lösen?

Und wie übergibt man dann Variabeln und bekommt die Werte zurück ?

Das sollte wenn möglich ohne Quest gehen.

Bis denn Thalon

Hallo Thalon,

Für die gewünschte Funktionalität gibts mehrere Lösungen.

bevor ich mir einen Wolf schreibe hänge ich einen Link zum Wiki an,
wo alles eigenlich sehr gut beschrieben ist.

http://cs.elderscrolls.com/constwiki/index.php/Ingame_Functions

Hier kurzt meine Erfahrungen zu dem Thema:
- zum Entwickeln & Testen am besten die DOCH mit Quest-Skript arbeiten, denn dann kann man ganz einfach in der Kommandokonsole mit "sqv QUESTNAME" alle Variablen einfach debuggen. Später kann man (ohne großen Aufwand) immer noch auf die Activator-Lösung umschwenken.

- Performance-Optimal sind die Skripte, welche an persistente Activatoren angehängt sind, da sie wirklich nur dann ausgeführt werden, wenn sie aufgerufen werden ("begin OnActivate" - "ACTIVATORNAME.Activate Player, 1")

- Quest-Result-Skripte sind von der Länge her sehr begrenzt. Sie eignen sich aber sehr gut für die Simulation von ARRAY's, welche das CS eigentlich nicht bietet. Das zugehörige Hauptskript benutze ich dann immer um die Tabellenwerte vorzuberechnen. Die Quest-Result-Skripte nur noch um die Endformel zu berechnen und den Wert zurückzugeben.

Wenn noch was unklar sein sollte, einfach nochmal fragen 8)

Es grüßt die Yolanda

Edit : mir fällt noch was zu der Lösung mit den Aktivatoren ein:
- Platziere die Aktivatoren in eine Interior Cell, welche du nie betreten wirst.
- Lege die Interior Cell nicht neu an, sondern kopiere eine kleine Bestehende (z.B. die gelbe Zeckenhöhle ...)
(ich selber hatte bisher noch keine Probleme mit neu erstellten Cells - wird aber von mehreren Leuten empfohlen)
- Lege die Activatoren nicht neu an, sondern kopiere bestehende Vanilla-Activatoren
(Vorteile : keine Warnmeldung wegen fehlender .nif)
- Immer die beiden Check-Boxes für "Persitent Reference" & "Initially Disabled" aktivieren
 
Zuletzt bearbeitet:
... und ich melde mich auch mal wieder mit einer Frage:

Mein Script sieht so aus:

scn zzzDämonHerholScript

Begin ScriptEffectStart

if aaaDämonHerhol == 0; aaaDämonHerhol ist eine Global-Variable

set aaaDämonHerhol to 1
Dämon1.moveto player
message "Ihr beschwört euren ersten Dämon."

endif
end

Begin ScriptEffectStart

if aaaDämonHerhol == 1

set aaaVersteinernHerhol to 0
Dämon2.moveto player
message "Ihr beschwört euren zweiten Dämon."

endif
end

wobei Folgendes passieren soll:

-man wendet den Zauber an
-der erste Dämon wird zum Spieler teleportiert
-die Nachricht "Ihr beschwört euren ersten Dämon." soll erscheinen

-dann wendet man den Zauber wieder an
-der zweite Dämon wird zum Spieler teleportiert
-die Nachricht "Ihr beschwört euren zweiten Dämon." soll erscheinen

Wenn man den Zauber erneut anwendet, soll wieder das erste passieren, also der erste Dämon wird von seinem vorherhigen Platz wieder zum Spieler teleportiert.

Die Probleme kommen schon bei der Beschwörung des 2. Dämons:
-Beide Nachrichten (also "Ihr beschwört euren ersten Dämon." und "Ihr beschwört euren zweiten Dämon." erscheinen); Dämonen erscheinen ebenfalls beide.

Kann mir da bitte jemand helfen?
 
Code:
scn zzzDämonHerholScript
Begin ScriptEffectStart
if aaaDämonHerhol == 0  ; aaaDämonHerhol ist eine Global-Variable
 set aaaDämonHerhol to 1
 Dämon1.moveto player
 message "Ihr beschwört euren ersten Dämon."
elseif aaaDämonHerhol == 1
 set aaaVersteinernHerhol to 0
 Dämon2.moveto player
 message "Ihr beschwört euren zweiten Dämon."
endif
end

könnte sein das er probleme macht, aber probiers mal.. habs nur ein wenig umgestellt
 
Hi,
Ich bräuchte ein Script mit mehrerern Auswahl Möglichkeiten.
Also:
Es gibt eine Messagebox mit 3 möglichen Antworten.
Von jeder dieser Antworten geht eine neue Messagebox mit jeweils 5 Antworten aus.
Und wiederum geht von diesen Antworten jeweils eine Messagebox mit 3 Antworten aus.
Bis zur zweiten Messagebox geht mein Script schon, aber wenn ich dann eine Antwort anklicke komme ich nicht mehr weiter.

Könnt ihr mir bitte sagen was ich machen muss?
 
Tut mir leid, aber dafür ist mein Englisch nicht gut genug :oops:
Gibt es nicht eine Möglichkeit das mein Script ins Forum zu kopieren?
 
gibt es...
du öffnest dein script drückst str+a, dann strg+c, machst hier ein beitrag tippst "["CODE"]" drückst strg +v und tippst "["/CODE"]"
(ohne die anführungszeichen versteht sich^^) und schon können wir dein script sehen und dir dann evtl sagen was du falsch gemacht hast oO

mfg takbir
 
So hier ist mein Script:

Code:
scriptname TholorArenaKampfSchalterScript

short button

Begin OnActivate

	messagebox "Wo möchtet ihr kämpfen", "Im Großen Saal", "Ich möchte nicht Kämpfen"
end

Begin GameMode

set button to GetButtonPressed

if button == 0
	messagebox "Ihr werdet im Großen Saal gegen 4 Gegner kämpfen. Gegen wenn möchet ihr kämpfen?", "Gegen Zombies", "Gegen Skelette", "Gegen Banditen", "Ich lass es lieber bleiben"

endif

[QUOTE]Bis hier hin klappt es[/QUOTE]

set button to GetButtonPressed

if button == 0
	messagebox "Ihr möchtet im Großen Saal gegen 4 Zombies kämpfen. Wie schwer wollt ihr es haben?", "Leicht", "Mittel", "Schwer", "Oh, lieber nichts"

endif
set button to GetButtonPressed

if button == 0
	GrosserSaal1.placeatme TholorArenaZombieLeicht
	GrosserSaal2.placeatme TholorArenaZombieLeicht
	GrosserSaal3.placeatme TholorArenaZombieLeicht
	GrosserSaal4.placeatme TholorArenaZombieLeicht
	Player.moveto GrosserSaalSpieler
endif

if button == 1
	GrosserSaal1.placeatme TholorArenaZombieMittel
	GrosserSaal2.placeatme TholorArenaZombieMittel
	GrosserSaal3.placeatme TholorArenaZombieMittel
	GrosserSaal4.placeatme TholorArenaZombieMittel
	player.moveto GrosserSaalSpieler
endif

if button == 2
	GrosserSaal1.placeatme TholorArenaZombieSchwer
	GrosserSaal2.placeatme TholorArenaZombieSchwer
	GrosserSaal3.placeatme TholorArenaZombieSchwer
	GrosserSaal4.placeatme TholorArenaZombieSchwer
	player.moveto GrosserSaalSpieler
endif

if button == 3
	Return
endif

if button == 1
	messagebox "Ihr möchtet im Großen Saal gegen 4 Skelette kämpfen. Wie schwer wollt ihr es haben?", "Leicht", "Mittel", "Schwer", "Oh, lieber nichts"

endif
set button to GetButtonPressed

if button == 0
	GrosserSaal1.placeatme TholorArenaSkelettLeicht
	GrosserSaal2.placeatme TholorArenaSkelettLeicht
	GrosserSaal3.placeatme TholorArenaSkelettLeicht
	GrosserSaal4.placeatme TholorArenaSkelettLeicht
	player.moveto GrosserSaalSpieler
endif

if button == 1
	GrosserSaal1.placeatme TholorArenaSkelettMittel
	GrosserSaal2.placeatme TholorArenaSkelettMittel
	GrosserSaal3.placeatme TholorArenaSkelettMittel
	GrosserSaal4.placeatme TholorArenaSkelettMittel
	player.moveto GrosserSaalSpieler
endif

if button == 2
	GrosserSaal1.placeatme TholorArenaSkelettSchwer
	GrosserSaal2.placeatme TholorArenaSkelettSchwer
	GrosserSaal3.placeatme TholorArenaSkelettSchwer
	GrosserSaal4.placeatme TholorArenaSkelettSchwer
	player.moveto GrosserSaalSpieler
endif

if button == 3
	Return
endif

end
 
Code:
scriptname TholorArenaKampfSchalterScript

short button
short button2
short button3

Begin OnActivate

	messagebox "Wo möchtet ihr kämpfen", "Im Großen Saal", "Ich möchte nicht Kämpfen"

	set button to GetButtonPressed
end

Begin GameMode



if button == 0
	messagebox "Ihr werdet im Großen Saal gegen 4 Gegner kämpfen. Gegen wenn möchet ihr kämpfen?", "Gegen Zombies", "Gegen Skelette", "Gegen Banditen", "Ich lass es lieber bleiben"
	set button2 to GetButtonPressed
	if button2 == 0
		messagebox "Ihr möchtet im Großen Saal gegen 4 Zombies kämpfen. Wie schwer wollt ihr es haben?", "Leicht", "Mittel", "Schwer", "Oh, lieber nichts"
		set button3 to GetButtonPressed

		if button3 == 0
			GrosserSaal1.placeatme TholorArenaZombieLeicht
			GrosserSaal2.placeatme TholorArenaZombieLeicht
			GrosserSaal3.placeatme TholorArenaZombieLeicht
			GrosserSaal4.placeatme TholorArenaZombieLeicht
			Player.moveto GrosserSaalSpieler
		endif

		if button3 == 1
			GrosserSaal1.placeatme TholorArenaZombieMittel
			GrosserSaal2.placeatme TholorArenaZombieMittel
			GrosserSaal3.placeatme TholorArenaZombieMittel
			GrosserSaal4.placeatme TholorArenaZombieMittel
			player.moveto GrosserSaalSpieler
		endif

		if button3 == 2
			GrosserSaal1.placeatme TholorArenaZombieSchwer
			GrosserSaal2.placeatme TholorArenaZombieSchwer
			GrosserSaal3.placeatme TholorArenaZombieSchwer
			GrosserSaal4.placeatme TholorArenaZombieSchwer
			player.moveto GrosserSaalSpieler
		endif

		if button3 == 3
			Return
		endif
	endif


	if button2 == 1
		messagebox "Ihr möchtet im Großen Saal gegen 4 Skelette kämpfen. Wie schwer wollt ihr es haben?", "Leicht", "Mittel", "Schwer", "Oh, lieber nichts"
		set button to GetButtonPressed

		if button3 == 0
			GrosserSaal1.placeatme TholorArenaSkelettLeicht
			GrosserSaal2.placeatme TholorArenaSkelettLeicht
			GrosserSaal3.placeatme TholorArenaSkelettLeicht
			GrosserSaal4.placeatme TholorArenaSkelettLeicht
			player.moveto GrosserSaalSpieler
		endif

		if button3 == 1
			GrosserSaal1.placeatme TholorArenaSkelettMittel
			GrosserSaal2.placeatme TholorArenaSkelettMittel
			GrosserSaal3.placeatme TholorArenaSkelettMittel
			GrosserSaal4.placeatme TholorArenaSkelettMittel
			player.moveto GrosserSaalSpieler
		endif

		if button3 == 2
			GrosserSaal1.placeatme TholorArenaSkelettSchwer
			GrosserSaal2.placeatme TholorArenaSkelettSchwer
			GrosserSaal3.placeatme TholorArenaSkelettSchwer
			GrosserSaal4.placeatme TholorArenaSkelettSchwer
			player.moveto GrosserSaalSpieler
		endif

		if button3 == 3
			Return
		endif
	endif
endif

end

also ich hab das script mal n bissl umgearbeitet...ob das so funktioniert kann ich dir jetzt nicht sagen, aber versuch mal ob das so funzt oO
ich finds immer übersichtlicher wenn die if abfragen geschachtelt sind oO

EDIT:

die placeatme Funktion ist auch ungeünstig, das diese im Savegame gespeichert wird jedesmal wenn das script läuft und dieses somit vergrößert. und wenn das Save ne größe von ~ 10mb erreicht treten anscheinend probleme auf.
weiß aber leider grade nicht wie man das umgehen kann =( oO
 
Zuletzt bearbeitet:
Zum PlaceAtMe-Problem:
Wie wäre es mit MoveTo?!?
Oder wird das auch ins Savegame aufgenommen??
 
Das Script führt jetzt ein eigen leben.
Jedesmal wenn ich den Raum (in dem der Schalter ist) betrete kommt [code9"Ihr werdet im Großen Saal gegen 4 Gegner kämpfen. Gegen wenn möchet ihr kämpfen?", "Gegen Zombies", "Gegen Skelette", "Gegen Banditen", "Ich lass es lieber bleiben"[/code]

Egal was ich anklicke die selbe Nachricht kommt immer wieder, ohne das ich was machen kann.
 
mhh ka ich weiß grade nicht wie der moveto befehl arbeitet...
kann man damit auch objekte/kreaturen "neu" in die welt setzen oder müssen die dafür schon in der welt sein?

@ tholor

sekunde ich schau ma eben ^^

probier mal folgendes :

anfang durch folgendes ersetzen
Code:
scriptname TholorArenaKampfSchalterScript

short choosing
short button
short button2
short button3

Begin OnActivate

	set choosing to -1
 
end

Begin GameMode

if choosing == 0
	return

elseif choosing == -1
	
	messagebox "Wo möchtet ihr kämpfen", "Im Großen Saal", "Ich möchte nicht Kämpfen"

	set button to GetButtonPressed


if button == 0

und dann nach den if-abfragen für die monster noch
Code:
if button3 == 3
			Return
		endif
	endif
	
	[b][SIZE="5"]set choosing to 0[/SIZE][/b]
endif

end

einfügen
 
Zuletzt bearbeitet:
Ich komme jetzt wieder in den Raum rein aber nicht über die erste Messagebox hinaus.
Ich habe auch noch ein endif ans Ende gesetzt um
Code:
if choosing == 0
	return
zu beenden.
 
mhhh
also ich hab auch immer so meine probleme mit messageboxen *grübel*
versuch mal obs geht, wenn du set choosing to 0 in den kreaturen block reinpackst.
also:
Code:
GrosserSaal4.placeatme deinekreatur
			player.moveto GrosserSaalSpieler
set choosing to 0
dann müsste man das zwar bei jedem block einfügen aber was anderes fällt mir grade au net ein =(
 
Ich bleibe immer noch bei der Raum Auswahl stecken :cry:

So sieht es jetzt aus:
Code:
scriptname TholorArenaKampfSchalterScriptTest

short choosing
short button
short button2
short button3

Begin OnActivate

	set choosing to -1
 
end

Begin GameMode

if choosing == 0
	return

elseif choosing == -1
	
	messagebox "Wo möchtet ihr kämpfen", "Im Großen Saal", "Ich möchte nicht Kämpfen"

	set button to GetButtonPressed


if button == 0
	messagebox "Ihr werdet im Großen Saal gegen 4 Gegner kämpfen. Gegen wenn möchet ihr kämpfen?", "Gegen Zombies", "Gegen Skelette", "Gegen Banditen", "Ich lass es lieber bleiben"
	set button2 to GetButtonPressed
	if button2 == 0
		messagebox "Ihr möchtet im Großen Saal gegen 4 Zombies kämpfen. Wie schwer wollt ihr es haben?", "Leicht", "Mittel", "Schwer", "Oh, lieber nichts"
		set button3 to GetButtonPressed

		if button3 == 0
			GrosserSaal1.placeatme TholorArenaZombieLeicht
			GrosserSaal2.placeatme TholorArenaZombieLeicht
			GrosserSaal3.placeatme TholorArenaZombieLeicht
			GrosserSaal4.placeatme TholorArenaZombieLeicht
			Player.moveto GrosserSaalSpieler
			set choosing to 0
		endif

		if button3 == 1
			GrosserSaal1.placeatme TholorArenaZombieMittel
			GrosserSaal2.placeatme TholorArenaZombieMittel
			GrosserSaal3.placeatme TholorArenaZombieMittel
			GrosserSaal4.placeatme TholorArenaZombieMittel
			player.moveto GrosserSaalSpieler
			set choosing to 0
		endif

		if button3 == 2
			GrosserSaal1.placeatme TholorArenaZombieSchwer
			GrosserSaal2.placeatme TholorArenaZombieSchwer
			GrosserSaal3.placeatme TholorArenaZombieSchwer
			GrosserSaal4.placeatme TholorArenaZombieSchwer
			player.moveto GrosserSaalSpieler
			set choosing to 0
		endif

		if button3 == 3
			Return
		endif
	endif


	if button2 == 1
		messagebox "Ihr möchtet im Großen Saal gegen 4 Skelette kämpfen. Wie schwer wollt ihr es haben?", "Leicht", "Mittel", "Schwer", "Oh, lieber nichts"
		set button to GetButtonPressed

		if button3 == 0
			GrosserSaal1.placeatme TholorArenaSkelettLeicht
			GrosserSaal2.placeatme TholorArenaSkelettLeicht
			GrosserSaal3.placeatme TholorArenaSkelettLeicht
			GrosserSaal4.placeatme TholorArenaSkelettLeicht
			player.moveto GrosserSaalSpieler
			set choosing to 0
		endif

		if button3 == 1
			GrosserSaal1.placeatme TholorArenaSkelettMittel
			GrosserSaal2.placeatme TholorArenaSkelettMittel
			GrosserSaal3.placeatme TholorArenaSkelettMittel
			GrosserSaal4.placeatme TholorArenaSkelettMittel
			player.moveto GrosserSaalSpieler
			set choosing to 0
		endif

		if button3 == 2
			GrosserSaal1.placeatme TholorArenaSkelettSchwer
			GrosserSaal2.placeatme TholorArenaSkelettSchwer
			GrosserSaal3.placeatme TholorArenaSkelettSchwer
			GrosserSaal4.placeatme TholorArenaSkelettSchwer
			player.moveto GrosserSaalSpieler
			set choosing to 0
		endif

		if button3 == 3
			Return
		endif
	endif
	set choosing to 0
endif
endif

end
 
mhh langsam weiß ich auch nichtmehr weiter =(

ich werd mir nachher nochmal das Script und das Messagebox Tutorial anschauen und versuchen dein script genau so aufzubauen wie im Tutorial.
ich kann nur leider nicht testen obs funktionieren wird.
muss mich jetzt aber erstma um ein paar andere sachen kümmern aber ich denke bis heute abend sollte ich das hinbekommen.
vlt findet sich ja in der zwischenzeit jemand, der ne lösung findet oO (oder den fehler den ich/wir übersehen xD)

ansonsten kann ich dir nur empfehlen das ganze schritt für schritt nachm try&error-verfahren aufzubauen.
 
Hallo zusammen,

Soweit so schlecht

elseif choosing == -1

messagebox "Wo möchtet ihr kämpfen", "Im Großen Saal", "Ich möchte nicht Kämpfen"

set button to GetButtonPressed


if button == 0
messagebox "Ihr werdet im Großen Saal gegen 4 Gegner kämpfen. Gegen wenn möchet ihr kämpfen?", "Gegen Zombies", "Gegen Skelette", "Gegen Banditen", "Ich lass es lieber bleiben"
set button2 to GetButtonPressed
if button2 == 0
messagebox "Ihr möchtet im Großen Saal gegen 4 Zombies kämpfen. Wie schwer wollt ihr es haben?", "Leicht", "Mittel", "Schwer", "Oh, lieber nichts"
set button3 to GetButtonPressed

Im Skript haperts an ein einigen Stellen:
- Die Abfrage von GetButtonPressed liefert nur beim ersten Aufruf den korrekten Wert zurück. Alle weiteren Abfragen im Skript liefern nur "-1".
- Die Messageboxen überschreiben sich gegenseiten. Das ist auch nicht optimal.

Viele Grüße von Yolanda

... wartet ein paar Minuten, und ich schiebe einen Skriptvorschlag nach