Construction Set Skriptthread zum Construction Set

Wo wird die Variable "THIS" gesetzt? In welcher Blockart? Ich würde die Variable im Übrigen nicht unbedingt "THIS" nennen, weil "this" ein CS-Befehl mit der gleichen Funktion wie "getSelf" ist; mit dem Unterschied, dass du "this" nicht in einer Variable speichern musst, sondern direkt benutzen kannst...
 
Die wird in der ersten Zeile gesetzt *g* Und wie du siehst, setze ich sie auch auf getself =P
Das Bewegen des Lichts klappt mMn nach zur Hälfte. Die Fackel, die auf dem Boden liegt, hat größere Flammen, aber das Licht selbst fehlt.
Kann es denn sein, dass es gar nicht möglich ist, ein Licht per moveto wo anders (er)scheinen zu lassen?
 
Hmm... eigentlich müsstest du die Variable in einem Block setzen und nicht einfach so... Was mir sonst noch einfällt wäre, dass du eventuell jeweils einen Frame zwischen "disable", "moveTo" und "enable" vergehen lässt, bzw. warum benutzt du überhaupt "enable" und "disable"?
Probiers sonst mal so:
Code:
scn name

short doonce
ref mySelf

Begin onAdd

if doonce == 0
 set mySelf to getSelf
 set <Quest-ID>.Fackel to getSelf
 set doonce to 1
endif

end


Begin onDrop

<Licht-Ref>.moveTo mySelf, 0, 0, 5
mySelf.addFlames

end


Begin GameMode

if doonce == 0
 set mySelf to getSelf
 set <Quest-ID>.Fackel to getSelf
 set doonce to 1
endif

end

Ich habe jetzt "disable" und "enable" weggelassen. Das kann aber ohne große Umstände eingefügt werden...
 
Zuletzt bearbeitet:
@ Anti_Held:

Code:
scn ...

Short Init

Begin GameMode

If Init == 0
  If <Npc1>.getDead == 1
    If <Npc2>.getDead == 1
      If <Npc3>.getDead == 1
        If <Np4>.getDead == 1
          If <Npc5>.getDead == 1
            setStage <Quest> <Stage>
           set Init to 1
          Endif
        Endif
      Endif
    Endif
  Endif
Endif

End

mfg
Kahmul
 
  • Like
Reaktionen: Anti_Held
Ich bins wieder.


ICh brauch einen Script bei dem die Quest weiter geht wenn man 5Npcs gekillt hat. Wie geht das?

Code:
scn ...

short once

begin GameMode
	if NPC1.getdead == 1 && NPC2.getdead == 1 && NPC3.getdead == 1&& NPC4.getdead == 1 && NPC5.getdead == 1 && once == 0
		SetStage Quest Stage
		set once to 1
	endif
end

Du ersetzt NPC1-5 mit den jeweiligen Referenzen der NPCs und fügst bei Quest und Stage auch die entsprechenden Sachen ein.

Edit: Da war wohl jemand schneller. ^^
Aber wieso soviele "ifs"? :?

MfG Master of Worlds
 
  • Like
Reaktionen: Anti_Held
Das ist minimal performancefreundlicher... Ich hab mal wo gelesen, dass wenn man alle Bedingungen in eine Zeile schreibt, Oblivion auch alle durchgeht und guckt, ob die erfüllt sind, egal wie viele tatsächlich erfüllt sind. Wenn man mehrere "if"s verwendet bricht das Skript schon bei der ersten nicht erfüllten Bedingung ab und muss deshaln bestenfalls nur eine statt fünf Bedingungen kontrollieren...
 
  • Like
Reaktionen: Master of Worlds
Ja, solange sich der Spieler im Spiel befindet und nicht im Menü. Im Questskript aber nur alle fünf Sekunden. Das kannst du ändern indem du die Variable "float fQuestDelayTime" deklarierst und auf das Intervall setzt, indem das Skript ausgeführt werden soll. In diesem Fall sind 5 Sekunden in Ordnung, aber manchmal benötigt man ein Questskript, dass jeden Frame ausgeführt wird. Dann setzt man einfach "fQuestDelayTime" auf 0.001 anstatt des Default-Wertes (5).
 
Hallo, ich habe ein Problem mit folgenden zusammenhängenden Scripts:

Der erste ist ein Questscript und liegt auf der Quest LiteOverhaulSIUpdateVar:

Code:
scn LiteOverhaulSIUpdateVarScript

short Update

begin Gamemode

set Update to 0

end

Der zweite liegt auf einem MiscItemObject

Code:
scn LiteOverhaulUpdateScript

begin onEquip player

messagebox "Wählt nun im Menü den Bernstein oder Wahnsinnsgegenstand aus, der ausgebessert werden soll oder verlasst das Menü, um abzubrechen" "OK"
Set LiteOverhaulSIUpdateVar.Update to 1

end

Der dritte liegt auf einem Bernsteinbogen:

Code:
scn LiteOverhaulUpdateAmberBowA

short cost


begin onequip player


if LiteOverhaulSIUpdateVar.Update == 1

	set cost to 100 * LiteOverhaulSIini.Gold

		if player.getitemcount SEAmber >= LiteOverhaulSIini.Material && player getitemcount Gold001 >= cost && player.getlevel >= LiteOverhaulSIini.A
			player.removeitem SEAmberBowA 1
			player.additem SEAmberBowB 1
			player.removeitem Gold001 cost
			player.removeitem SEAmber LiteOverhaulSIini.Material
			message "Erfolgreich ausgebessert"
			set LiteOverhaulSIUpdateVar.Update to 0
		else
			message "Ihr benötigt %.0f Stück(e) Bernstein, %.0f Gold und ein Level von mindestens %.0f, um diesen Gegenstand auszubessern" LiteOverhaulSIini.Material, cost, LiteOverhaulSIini.A
			set LiteOverhaulSIUpdateVar.Update to 0
		endif
	else
	return
	endif
	end

Wenn der Spieler das Miscitem und danach im Menü sofort den Bernsteinbogen aktivert, soll er unter bestimmten Bedingungen eine Stärkere Variante dieses Bogens erhalten.
Bei dem Script auf dem MiscItem kommt tatsächlich auch die Meldung, ob die Variabele gesetzt wird weiß ich nicht. Von dem Script auf dem Bogen merke ich allerdings nichts. Jemand eine Idee, woran das liegen könnte?
 
Das du im Questscript die Variable immer wieder auf 0 setzt, dürfte schon mal ein Grund dafür sein. Selbst wenn du sie über das MiscItem auf 1 setzt, wird sie gleich darauf wieder auf 0 gesetzt, kann also für den Bogen gar nicht 1 sein.
 
Wieso denn. Die Variable wird doch nur im Gamemode auf 0 gesetzt. Wenn ich im Menü das Misc-Item und dann den Bogen ausrüste, bleibe ich die ganze Zeit im Menü...Werds trotzdem mal testen
 
scn ZweiteArena

short once

begin GameMode
if Arsan.getdead == 1 && KarGurz.getdead == 1 && Rylil.getdead == 1&& Askash.getdead == 1 && Miranda.getdead == 1 && once == 0
SetStage 00EineZeiteArena 10
set once to 20
endif
end


Kann mir einefr sagen warum der Script im Spiel nix auslöst ?
 
@ Anti_Held:

Machs mal so:

Code:
scn ZweiteArena

Short Once
Float fQuestDelaytime

Begin GameMode

Set fQuestDelayTime to 0.001

If Once == 0
        If Arsan.getDead == 1
              If KarGurz.getDead == 1
                    If Rylil.getDead == 1
                          If Askash.getDead == 1
                                If Miranda.getDead == 1
                            SetStage 00EineZweiteArena 20
                        Set Once to 1
                    Endif
                Endif
            Endif
        Endif
    Endif
Endif

End
mfg
Kahmul
 
  • Like
Reaktionen: Anti_Held
Hm, mir macht dieser Script Probleme:

Beim ersten ausrüsten des Gegenstandes kommt die Nachricht test, aber sonst passiert nichts, beim zweiten Mal passiert garnichts

Code:
scn LiteOverhaulUpdateAmberBowA

short cost
short done

begin onequip player
if LiteOverhaulSIUpdateVar.Update == 1

message "test"
	set cost to 100*LiteOverhaulSIini.Gold

		if player.getitemcount SEAmber >= LiteOverhaulSIini.Material && player getitemcount Gold001 >= cost && player.getlevel >= LiteOverhaulSIini.A
			player.removeitem SEAmberBowA 1
			player.additem SEAmberBowB 1
			player.removeitem Gold001 cost
			player.removeitem SEAmber LiteOverhaulSIini.Material
			message "Erfolgreich ausgebessert"

		else
			;message "Ihr benötigt %.0f Stück(e) Bernstein, %.0f Gold und ein Level von mindestens %.0f, um diesen Gegenstand auszubessern" LiteOverhaulSIini.Material, cost, LiteOverhaulSIini.A
			message "A"	
		endif
	else
	return
	endif
end