Construction Set Skriptthread zum Construction Set

Hm..

Um die Quest erst zu starten wenn der Spieler eine bestimmte Cell betritt könnte man den Startquest befehl in einen extra Skript packen:

scn queststarter
short doonce
begin gamemode/onload
if doonce == 0
startquest xyz
set doonce to 1
endif
end

Dieses auf einen Activator welcher sich in der Cell befindet, wird das objekt/die cell geladen startet der skript.
Ich könnte mir vorstellen das onload der perfomance besser tut, da das nur 1x ausgeführt wird, sobald das objekt geladen wird, nicht ständig wie bei gamemode

Das mit der Truhe, hm.. hier mal der Wiki eintrag:
Syntax:
RemoveAllItems TargetContainerID (optional), RetainOwnershipFlag (optional)
Example:
RemoveAllItems
RemoveAllItems TreasureChest
RemoveAllItems FriendlyJailer, 1
Probiers mal ohne player. und []...ansonsten wüsste ich aktuell nicht worans liegen könnte


Für den Nebel:
müsste das wetter sofort umändern.
ForceWeather Fog 1

Laut wiki musst du das später wieder rückgäng machen mit: "ReleaseWeatherOverride"
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Verganon
Also, ich wollte eine neue Quest erstellen, und hab eigentlich alles von der Quest "SQ01" (oder so) abgeguckt, bis auf das ich nur einen statt 6 Gegenständen benötige. Bis jetzt gibt es das Thema bei meinem NPC noch gar nicht, über das der Quest anfangen soll. Habe dann halt gesehen, dass es bei "SQ01" 2 Scripts gibt, einmal einen "in der Quest":

Scriptname SQ01Script

short PotatoCount

Hab dann bei mir an die gleiche Stelle geschrieben:

Scriptname 00Script1

short NotizCount

Man soll bei meiner Quest halt eine Notiz finden, und die dann dem Auftraggeber geben.
Im Script der Kartoffeln, beim "SQ01" - Quest steht folgendes:

Scriptname SQ01PotatoScript

begin OnAdd Player

if ( SQ01.PotatoCount < 6 )
set SQ01.PotatoCount to ( SQ01.PotatoCount + 1 )
endif

if ( GetStage SQ01 < 10 ) && ( SQ01.PotatoCount >= 1 )
setstage SQ01 10
endif

if ( GetStage SQ01 >= 20 ) && ( GetStage SQ01 < 30 ) && ( SQ01.PotatoCount == 6 )
setstage SQ01 30
endif

end

Ich vermute mal, dass SQ01 für den Scriptnamen steht und PotatoCount für die Anzahl der Kartoffeln oder so. Wollte dann einfach Potato mit Notiz ersetzen und SQ01 mit 00LmQuest1 (meine Quest halt):

Scriptname 00LmQuest1NotizScript

begin OnAdd Player

if ( 00LmQuest1.NotizCount < 1 )
set SQ01.PotatoCount to ( 00LmQuest1.NotizCount + 1 )
endif

if ( GetStage SQ01 < 10 ) && ( 00LmQuest1.NotizCount >= 1 )
setstage 00LmQuest1 10
endif

if ( GetStage 00LmQuest1 >= 20 ) && ( GetStage 00LmQuest1 < 30 ) && ( 00LmQuest1.NotizCount == 1 )
setstage 00LmQuest1 30
endif

end

Hab jeweils "6" mit "1" vertauscht. Naja, dann bekomm ich die Meldung:
Script '00LmQuest1NotizScript', line 5: Unknown variable or function 'NotizCount'.
Hat einer eine Idee, wie ich den Script so ändern kann, dass ich eine Notiz brauche, die ich dem Auftraggeber geben muss, und das endlich überhaupt mal das Thema bei dem NPC sehe? Wär toll, wenn wer eine Idee hat...
 
@Cadhar: danke nur funktioniert das mit der Ausrüstung noch immer nicht (aber alles andere *verehr*). entweder sie verschwindet auf ewig, oder ich behalt sie. wenn ich die klammern weglasse sagt er, das es das objekt nicht gäbe (ja ich habs richtig eingetippt) wenn ich das player weglasse bleibt meine ausrüstung erhalten :roll:
 
@Luchs: In deinem Script darf in der 5 Zeile nicht auch SQ01 stehen, dass ist ja vom anderen Script. Bei dir muss da die ID deines Quests stehen, also wie DEIN Quest heißt. Das musst du überall, wo es steht, ind die ID deines Quests ändern.
 
Aso das. Ist mir auch schon aufgefallen, bekomme aber immer noch die Meldung, dass es die Variable "NotizCount" nicht geben würde.
 
@verganon:

ich hab mir die ganze situation jetzt auch selbst im cs nachgebaut...
und siehe da, es funktioniert!

player.RemoveAllItems cctestverganontr1

dabei ist es egal ob die truhe in der gleichen cell oder woanders steht, (feste referenz vorrausgesetzt natürlich^^). aber funktionieren tut das..
kann mir nicht erklären wieso es das bei dir nicht macht ..
 
Ich wollte einen Script auf ein Buch legen, so dass man Zauber lernt, wenn man es liest. Geht das, und hat wer die Lösung?
 
nein, das geht leider nicht. ^^
Code:
scn ScriptName

short doonce

Begin OnActivate
if ( doonce == 0 ) && ( IsActionRef player == 1 )
player.addspell TollerZauberID ;für TollerZauberID setzt du einfach die ID deines Zaubers ein
set doonce to 1
Endif
activate
End
So, den Script legst du einfach auf das Buch ;)

MfG Gildur
 
Sorry wenn ich hier dazwischen funke, aber die DoOnce-Variable ist hier etwas sinnlos. Grund: für jede Ref wird ein eigenes Skript verwendet --> bei einem neuen Buch ist DoOnce wieder 0. Abfrage nach DoOnce einfach durch '( IsSpellTarget TollerZauberID == 0 )' ersetzen. Das ganze andere DoOnce-Zeug rauslöschen.
Theoretisch könnte man die auch einfach weglassen, da AddSpell einfach keinen Effekt hat, wenn der CallingActor den Zauber schon hat (zumindest wenn es keine Eigenschaft ist. Was dann passiert weiß ich nicht). Skript würde so also auch funktionieren, aber man will doch alles optimieren. ;)
 
Ah, danke. Hab aber noch ein Problem. Will mehrere Skelette gleichzeitig beschwören, hab einfach mal versucht 3mal Skelett beschwören in einem Zauber zu erstellen. Allerdings macht er dann dreimal was und am Ende hab ich gar kein Skelett. Kann ich das irgendwie über Script toller machen?

EDIT:
Hab schon was gefunden, mein Script sieht jetzt so aus:

Scriptname Wolfsrudelzauber ; legt fest wie das Skript heißt

ref Beschwoerungskreatur
short Anzahl
short iscasted

Begin Scripteffectstart ; Alles In diesem Block wird ausgeführt, wenn der Zauber gecastet wird

set Anzahl to 3 ;Legt fest wie viele Wölfe beschworen werden, je nachdem was für eine Zahl man einsetzt.

if iscasted == 0 ; verhindert, dass man unendlich viele Wölfe machen kann
set Beschwoerungskreatur to placeatme 00Skelett Anzahl ; platziert anzahl viele 01Wolfsummon neben dem Player
set iscasted to 1
endif
End

Begin Scripteffectfinish ; Alles in diesem Block wird ausgeführt, wenn der Zauber endet

Beschwoerungskreatur.disable
set iscasted to 0 ; macht es wieder möglich, neue Wölfe zu beschwören


End

(Wolfsrudelzauber und so hab ich einfach kopiert aus dem Tutorial)

Allerdings wird am Ende nur 1 Skelett entfernt, die anderen 2 bleiben. Eine Idee wie ich das ändern kann?
 
Zuletzt bearbeitet:
@ Low Post: Klar, wenn der Spieler den Zauber schon hat, wird AddSpell ja logischerweise nicht einen zweiten Zauber hinzufügen. Aber ich wollte möglcihe Probleme ausschließen. Es könnte ja sein, dass dann ein Fehler oder Bug oder so auftritt. Und besser eine DoOnce zu viel als eine DoOnce zu wenig. Ach ja: Ich weiß, dass für jede Referenz ein eigener Script verwendet wird, das war es auch gar nicht, was ich verhindern wollte (wie vorher erwähnt). Aber trotzdem danke ^^


@ Luchs: Du kannst nicht ein und die selbe Referenz auf 3 Kreaturen legen. Du musst alle einzeln disablen:

Code:
Scriptname Wolfsrudelzauber

ref BKreatur01
ref BKreatur02
ref BKreatur03
short iscasted

Begin Scripteffectstart

if iscasted == 0
set BKreatur01 to placeatme 00Skelett 1
set BKreatur02 to placeatme 00Skelett 1
set BKreatur03 to placeatme 00Skelett 1
set iscasted to 1
endif

End

Begin Scripteffectfinish

BKreatur01.disable
BKreatur02.disable
BKreatur03.disable
set iscasted to 0

End

MfG Gildur
 
  • Like
Reaktionen: Luchs
So, jetzt brauch ich das für nen Freund noch mit Melonen :D
Wollte 15 Wassermelonen beschwören. Hab das einfach mal so versucht:

Scriptname 00Watermelon

ref BWatermelon01
ref BWatermelon02
ref BWatermelon03
ref BWatermelon04
ref BWatermelon05
ref BWatermelon06
ref BWatermelon07
ref BWatermelon08
ref BWatermelon09
ref BWatermelon10
ref BWatermelon11
ref BWatermelon12
ref BWatermelon13
ref BWatermelon14
ref BWatermelon15
short iscasted

Begin Scripteffectstart

if iscasted == 0
set BWatermelon01 to placeatme Watermelon 1
set BWatermelon02 to placeatme Watermelon 1
set BWatermelon03 to placeatme Watermelon 1
set BWatermelon04 to placeatme Watermelon 1
set BWatermelon05 to placeatme Watermelon 1
set BWatermelon06 to placeatme Watermelon 1
set BWatermelon07 to placeatme Watermelon 1
set BWatermelon08 to placeatme Watermelon 1
set BWatermelon09 to placeatme Watermelon 1
set BWatermelon10 to placeatme Watermelon 1
set BWatermelon11 to placeatme Watermelon 1
set BWatermelon12 to placeatme Watermelon 1
set BWatermelon13 to placeatme Watermelon 1
set BWatermelon14 to placeatme Watermelon 1
set BWatermelon15 to placeatme Watermelon 1

set iscasted to 1
endif

End

Begin Scripteffectfinish

BWatermelon01.disable
BWatermelon02.disable
BWatermelon03.disable
BWatermelon04.disable
BWatermelon05.disable
BWatermelon06.disable
BWatermelon07.disable
BWatermelon08.disable
BWatermelon09.disable
BWatermelon10.disable
BWatermelon11.disable
BWatermelon12.disable
BWatermelon13.disable
BWatermelon14.disable
BWatermelon15.disable

set iscasted to 0

End

Allerdings werden die 15 Wassermelonen an genau dem selben Punkt platziert, sie stecken also ineinander fest. (Wobei ich mir gar nicht mehr so sicher war, obs genau 15 war, hab nicht gezählt.) Beim 3. Versuch ist sogar Oblivion abgekratzt. Eine Idee wie ich das verbessern kann?
 
Ich bin dabei ein Skript zu erstellen mit dem man anhand verschiedener Messageboxen sich ein Schwert schmieden kann.
Das Skript ist auch fertig, wird aber nicht richtig ausgeführt. Es kommt nur einmal die Frage welches Schwert ich schmieden möchte, danach ist Schluss.
Hier einmal das Script.(in einer Version die mir am richtigsten erschien.)

scn schwertschmieden

short startscript
short schmieden
short runesilber
short runeebony
short runestahl
short startschmieden


begin ondrop

set startscript to 1

end


begin Gamemode

if startscript==1
messagebox "Welches Schwert wollt ihr schmieden?", "Silberschwert", "Mithrilschwert", "Stahlschwert"
set schmieden to getbuttonpressed &&+1
set startschmieden to 1
endif

if schmieden==1 && startschmieden==1
;Silberschwert
messagebox "Wollt ihr euer Silberschwert mit einer Rune verzieren?", "Nein", "Ja"
set runesilber to getbuttonpressed &&+1
set startschmieden to 2
endif

if schmieden==2 && startschmieden==1
;Mithrilschwert
messagebox "Wollt ihr euer Mithrilschwert mit einer Rune verzieren?", "Nein", "Ja"
set runeebony to getbuttonpressed &&+1
set startschmieden to 2
endif

if schmieden==3 && startschmieden==1
;stahlschwert
Messagebox "Wollt ihr euer Stahlschwert mit einer Rune verzieren?", "Nein", "Ja"
set runestahl to getbuttonpressed &&+1
set startschmieden to 2
endif


if runesilber==1 && startschmieden==2
player.additem WeapSilverShortsword 1
messagebox "Ihr habt ein Silberschwert geschmiedet."
set startschmieden to 3
endif

if runesilber==2 && startschmieden==2
player.additem SEEnchSilverShortswordFrostDam 1
Messagebox "Ihr habt ein Silberschwert mit Rune geschmiedet."
set startschmieden to 3
endif


if runeebony==1 && startschmieden==2
player.additem WeapEbonyShortsword 1
messagebox "Ihr habt ein Ebenerzschwert geschmiedet."
set startschmieden to 3
endif

if runeebony==2 && startschmieden==2
player.additem EnchEbonyShortswordScorch 1
Messagebox "Ihr habt ein Ebenerzschwert mit Rune geschmiedet."
set startschmieden to 3
endif


if runestahl==1 && startschmieden==2
player.additem WeapSteelShortswordFine 1
messagebox "Ihr habt ein Stahlschwert geschmiedet."
set startschmieden to 3
endif

if runestahl==2 && startschmieden==2
player.additem EnchSteelShortswordSpark 1
messagebox "Ihr habt ein Stahlschwert mit Rune geschmiedet."
set startschmieden to 3
endif

end


begin gamemode

if startscript==1 && startschmieden==3
set startscript to 2
set startschmieden to 4
endif

end

Ich habs jetzt in 10mal geändert, aber kein Erfolge gehabt.
Ich hoffe, dass ihr mir helfen könnt.

MfG
oofishoo
 
Jetzt meld ich mich mal wieder :)
Also ich hab ein Problem mit meinem Skript und zwar es soll das machen: Wenn man den Zauber spricht, dann soll eine Messagebox erscheinen, in der man auswählen kann, welche Pfeile man erhalten will. So, dass Problem ist jetzt aber nur, dass es falsch herum funktioniert. Also wenn ich jetzt die Verdammnispfeile auswähle, dann bekomme ich die normalen und anders rum oO Weiß einer woran das liegt :huh:

Code:
scn 00ActivatorSkript

short button

Begin ScriptEffectStart
set button to GetButtonPressed
	Messagebox "Wollt ihr die Verdammnispfeile oder die normalen Pfeile? (je 100g / 100 Stück)" "Verdammnispfeile" "Normale Pfeile"
		if button == 0
				player.additem ArrowDoomDreadweave 100
				player.removeitem gold001 100
			endif
		If button == 1
				player.additem ArrowDreadweave 100
				player.removeitem gold001 100
			endif
end
 
Vllt. die IDs der Pfeile vertauscht?

Mit dem Skript scheint soweit alles i.o. zu sein (auch wenn ich das eher im ScriptEffectUpdate-Block machen würde).
 
Also wenn du die Pfeile bekommst kannst du eigentlich fast nur die beiden ids vertauscht haben, wie lowpost schon sagte..
Was anderes käme da eher nich in frage :eek:)
 
Ich habe keine Ahnung, ob es daran liegt, aber packe mal die button-Abfrage in einen einzigen If-Block, also:

Code:
[...]
if button == 0
	player.additem ArrowDoomDreadweave 100
	player.removeitem gold001 100
ElseIf button == 1
	player.additem ArrowDreadweave 100
	player.removeitem gold001 100
endif

end

Ansonsten würde ich auch sagen, dass da mit den beiden IDs was nicht stimmt ;)

Mfg
 
Ich glaube, an den zwei If-Blöcken könnte es liegen (wie Saurons Auge ja schon gesagt hat). Bei den ganzen Scripts, die ich damit benutzt habe, habe ich auch nur einen If-Blöck benutzt und da klappt es wunderbar.