Construction Set Skriptthread zum Construction Set

@ Almalexian:

Ich würde es so schreiben, benötigt aber evtl. OBSE. Du arbeitest in deinem Skript dann einfach mit der Variable "TrueTarget" weiter:

Code:
Ref Target
Ref TrueTarget

set Target to GetSelf

set TrueTarget to Target
@ Chibi:

Du musst dein Portal in eine leere, selbsterstellte Zelle stellen.
Danach gibst du diesem eine Referenz-ID.
Dann erstellst du einen Zauber mit diesem Skript:

Code:
SCN ...

Short Once

Begin ScriptEffectStart

If Once == 0
        set Once to 1
        <Portal-Ref>.MoveTo Player
[COLOR=Red]
ElseIf Once == 1
        set Once to 0[/COLOR]

    Endif


End
Der Teil, der rot markiert ist, dient nur dazu, damit man das Skript beliebig oft ausführen kann. Wenn du das nicht willst, streiche diese Teil einfach. ;)

mfg
Kahmul
 
  • Like
Reaktionen: Almalexian und Chibi
Hätte noch einmal eine Frage :

Gibt es eine Abfrage, welche angibt, ob ein Ziel eine beschworene Kreatur ist?
Aber keine getinfaction-Abfrage.

Gibt's so was?

:bye:

EDIT:
Noch was :

Wie krieg' ich es hin, dass beim Aktivieren eines Scriptzaubers eine Waffe dem Inventar des Spielers geaddet, ausgerüstet UND anschließend nicht mehr abgelegt werden kann. Das Adden geht mit player.additem xxx 1, aber wie equippen und das uneqippen verhindern?
 
Zuletzt bearbeitet:
Zum Ersten schau ich gleich. Ich schreibe jetzt erstmal das Zweite. ;)

Hier der Zauberskript:

Code:
SCN ...

Short Once

Begin ScriptEffectStart

If Once == 0
        Player.AddItem <Waffe> 1
        Player.EquipItem <Waffe> 1
        set Once to 1

    Endif


End
Diesen Skript legst du auf die Waffe:

Code:
SCN ...

Begin OnUnEquip

Player.EquipItem <Waffe> 1

End
mfg
Kahmul

EDIT: Zum Ersten habe ich jetzt nichts gefunden. Nur "IsSummonable", aber dafür muss das Ziel erst durch "SetSummonable" gesetzt werden. Dadruch würde es ja mit jedem Ziel funktionieren.
Und das willst du ja nicht. Kannst aber gerne selbst schauen. ;)
 
Zuletzt bearbeitet:
Das Skript auf der Waffe ist überflüssig. Wenn die Waffe mit "player.equipItem <XYZ> 1" ausgerüstet wird, kann der Spieler sie sowieso nicht mehr ablegen. Allerdings muss zwischen dem Hinzufügen der Waffe und dem Ausrüsten ein Frame vergehen. Am besten gibst du dem Zauber dann eine Dauer von einer Sekunde:
Code:
scn name

short delay

Begin ScriptEffectStart

player.addItem <XYZ> 1

end

Begin ScriptEffectFinish

set delay to 0
return

end

Begin ScriptEffectUpdate

if delay >= 1
 player.equipItem <XYZ> 1
 player.dispel <Zauber-ID>
else
 set delay to 1
endif

end

Zum ersten:
Du kannst abfragen, ob der Spieler von einem bestimmten Zauber "betroffen" ist. "Player.hasMagicEffect ZCLA" steht zum Beispiel dafür, dass der Spieler einen Clannfear beschworen hat.
 
Zuletzt bearbeitet:
Sorry, ich versteh nicht, was du da schreibst, Diarrhoe.
Was müsste ich bei diesem Zauberscript ändern, damit es läuft?

Code:
scn 000ZaubereffektFlammenschwert

ref target
short SpellRank
short DoOnce

;#######################
;Beginn des Script-Effektes
;#######################

begin scripteffectstart
set target to getself

;############################
;Stufe des Spielers wird überprüft
;############################

if ( player.GetLevel <= 5 )

    set SpellRank to 1

elseif (player.GetLevel >= 6 ) && ( player.GetLevel <= 10 )

    set SpellRank to 2

elseif ( player.GetLevel >= 11 ) && ( player.GetLevel <= 15 )

    set SpellRank to 3

elseif ( player.GetLevel >= 16 ) && (player.GetLevel <= 20)

    set SpellRank to 4

elseif ( player.GetLevel >= 21 )

    set SpellRank to 5

endif

;####################################################
;Schwerter werden dem Inventar hinzugefügt und ausgerüstet
;####################################################

If (DoOnce == 0)
    If (Spellrank == 1)

            Player.AddItem 0ZauberFlammenschwert01Waffe 1
            Player.EquipItem 0ZauberFlammenschwert01Waffe 1
            set DoOnce to 1

    Elseif (Spellrank == 2)

        Player.AddItem 0ZauberFlammenschwert02Waffe 1
            Player.EquipItem 0ZauberFlammenschwert02Waffe 1
            set DoOnce to 1

    Elseif (Spellrank == 3)

        Player.AddItem 0ZauberFlammenschwert03Waffe 1
            Player.EquipItem 0ZauberFlammenschwert03Waffe 1
            set DoOnce to 1

    Elseif (Spellrank == 4)

        Player.AddItem 0ZauberFlammenschwert04Waffe 1
            Player.EquipItem 0ZauberFlammenschwert04Waffe 1
            set DoOnce to 1

    Elseif (Spellrank == 5)

        Player.AddItem 0ZauberFlammenschwert05Waffe 1
            Player.EquipItem 0ZauberFlammenschwert05Waffe 1
            set DoOnce to 1

    Endif
Endif

end

;######################
;Ende des Script-Effektes
;######################

begin scripteffectfinish 

;#####################################
;Schwerter werden dem Inventar entnommen
;#####################################

If (DoOnce == 1)
    If (Spellrank == 1)

            Player.removeitem 0ZauberFlammenschwert01Waffe 1
            set DoOnce to 0

    Elseif (Spellrank == 2)

        Player.removeitem 0ZauberFlammenschwert02Waffe 1
            set DoOnce to 0

    Elseif (Spellrank == 3)

        Player.removeitem 0ZauberFlammenschwert03Waffe 1
            set DoOnce to 0

    Elseif (Spellrank == 4)

        Player.removeitem 0ZauberFlammenschwert04Waffe 1
            set DoOnce to 0

    Elseif (Spellrank == 5)

        Player.removeitem 0ZauberFlammenschwert05Waffe 1
            set DoOnce to 0

    Endif
Endif

;############################
;Variablen werden zurückgesetzt
;############################

set target to 0
set SpellRank to 0
set DoOnce to 0        ;nur zur Sicherheit

end
 
Wofür ist da jetzt die "target"-Variable? So sollte es gehen:
Code:
scn name

short spellRank
short delay

Begin ScriptEffectStart

set spellRank to ((player.getLevel / 5) + 0.9)
if spellRank == 1
 player.addItem 0ZauberFlammenschwert01Waffe 1
elseif spellRank == 2
 player.addItem 0ZauberFlammenschwert02Waffe 1
elseif spellRank == 3
 player.addItem 0ZauberFlammenschwert03Waffe 1
elseif spellRank == 4
 player.addItem 0ZauberFlammenschwert04Waffe 1
else
 player.addItem 0ZauberFlammenschwert05Waffe 1
endif

end

Begin ScriptEffectFinish

if spellRank == 1
 player.removeItem 0ZauberFlammenschwert01Waffe 1
elseif spellRank == 2
 player.removeItem 0ZauberFlammenschwert02Waffe 1
elseif spellRank == 3
 player.removeItem 0ZauberFlammenschwert03Waffe 1
elseif spellRank == 4
 player.removeItem 0ZauberFlammenschwert04Waffe 1
else
 player.removeItem 0ZauberFlammenschwert05Waffe 1
endif
set spellRank to 0
set delay to 0

end

Begin ScriptEffectUpdate

if delay == 0
 set delay to 1
elseif delay == 1
 if spellRank == 1
  player.equipItem 0ZauberFlammenschwert01Waffe 1
 elseif spellRank == 2
  player.equipItem 0ZauberFlammenschwert02Waffe 1
 elseif spellRank == 3
  player.equipItem 0ZauberFlammenschwert03Waffe 1
 elseif spellRank == 4
  player.equipItem 0ZauberFlammenschwert04Waffe 1
 else
  player.equipItem 0ZauberFlammenschwert05Waffe 1
 endif
else
 return
endif

end

@Kahmul: Es soll doch kein Zauber sein...
 
  • Like
Reaktionen: TheDarkRuler
Heidiho!
Ich könnte tatsächlich auch wiedermal hilfe brauchen :D wäre freundlich wenn mir jemand hilft, desto schneller ist mein Mod fertig, das ist - wie immer bei mir - das einzige was noch fehlt.


also Problem:
bei einer bestimmten Queststage sollen sich mehrere Statics entfernen (so wie z.B. beim Schlangenpfad). Allerdings soll der Skript entweder starten, wenn das ereigniss auftritt ODER wenn ein Spieler den Mod läd und die stelle im Spiel bereits durch hat. hier ist der aktuelle Skript:

Code:
scn VergsULSDAfterbattleSkript


short triggered

begin GameMode
	if MQ14 >= 41
		set triggered to 1
		VergsULSDBFBST1.disable
		VergsULSDBFBST2.disable
		VergsULSDBFBST3.disable
		VergsULSDBFBST4.disable
		VergsULSDBFBST5.disable
		VergsULSDBFBST6.disable
		VergsULSDBrBa1.disable
		VergsULSDBrBa2.enable
	endif
end

begin onTrigger player
	if MQ14 >= 41
		if triggered == 0
			set triggered to 1
			VergsULSDBFBST1.disable
			VergsULSDBFBST2.disable
			VergsULSDBFBST3.disable
			VergsULSDBFBST4.disable
			VergsULSDBFBST5.disable
			VergsULSDBFBST6.disable
			VergsULSDBrBa1.disable
		endif
	endif

end

zur erklärung: damit die möglichkeit: Stage grade abgeschlossen ingame läuft, steht ein Trigger direkt an einer Position, zu der der Spieler teleportiert wurde, deshalb onTrigger Player. onGameMode ist ja selbsterklärend :)


Danke schonmal für die Hilfe.

gruß
Verganon
 
Schreib die Befehle doch in das Stage-Result-Skript...

würde ich gern, aber wie du ja aus der Abkürzung vielleicht ließt, is der Skript für Unique Landscapes: Snowdale.

und um möglichst wenig Konflikte hervorzurufen und nicht in das eigentliche Spiel einzugreifen, sollte der Skript nach Möglichkeit ausgelagert sein. allerdings tut sich leider garnichts...
 
Ich bräuche auch etwas Hilfe.
Welche Art von Begin brauchen die Druckplatten aus den Ayleidenruinen?

Begin onTrigger funktioniert irgendwie nicht.

:bye:
 
Ah, ok.
Ich hab' Begin onActivate eigentlich von vornherein ausgeschlossen, weil ich als Player ja nix selbst aktiviere (per Leertaste).

Aber mal gucken ;)
 
Ah, ok.
Ich hab' Begin onActivate eigentlich von vornherein ausgeschlossen, weil ich als Player ja nix selbst aktiviere (per Leertaste).

Aber mal gucken ;)

Es ist Begin OnTrigger. ;)
Hat es bei dir vielleicht nicht "grafisch" funktioniert, also hat sich die Druckplatte nicht bewegt? Dies geschieht nämlich durch einen weiteren Skriptbefehl, du kannst dir ja auch die Vanilla Druckplattenskripte ansehen. :)

MfG Master of Worlds
 
Es ist Begin OnTrigger. ;)
Hat es bei dir vielleicht nicht "grafisch" funktioniert, also hat sich die Druckplatte nicht bewegt? Dies geschieht nämlich durch einen weiteren Skriptbefehl, du kannst dir ja auch die Vanilla Druckplattenskripte ansehen. :)

MfG Master of Worlds

Einspruch! Bei Druckplatten wird abgefragt, ob sich der Spieler auf der Druckplatte befindet, aber nicht mit einem Trigger-Block sondern durch die Entfernung. Bei allen Druckplatten, die so funktionieren (ARTrigPressurePlate01 gehört dazu) steht lediglich ein GameMode-Block mit einer "GetDistance"-Abfrage. Gewöhnlich wird hier der Wert 64 genommen, also:
Code:
scn name

short triggered

Begin GameMode

if triggered == 0
 if getDistance player < 64
  set triggered to 1
  ;Aktion
 endif
endif

end
Könnt man eigentlich auch selbst nachgucken... :roll:


@Verganon:
Ehrlich gesagt weiß ich nicht, was du meinst...
 
Danke,

Ich habe jetzt unter einer Druckplatte folgendes Script gefunden.
Code:
begin gameMode

[...]

    if activated == 0
        if getDistance player < 64
            playGroup forward 1
            set activated to 1
        endif
    endif

[...]

Ist das playGroup forward 1 für die Animation der Druckplatte (also das Eindrücken zuständig?

-----
Und ich hätte eine Vokabelfrage wegen meinem Flammenschwert-Script.
Gibt es eine Vokabel, welche den Spieler das ausgerüstete Schwert ziehen lässt?

:bye:
 
Danke,

Ich habe jetzt unter einer Druckplatte folgendes Script gefunden.
Code:
begin gameMode

[...]

    if activated == 0
        if getDistance player < 64
            playGroup forward 1
            set activated to 1
        endif
    endif

[...]

Ist das playGroup forward 1 für die Animation der Druckplatte (also das Eindrücken zuständig?

-----
Und ich hätte eine Vokabelfrage wegen meinem Flammenschwert-Script.
Gibt es eine Vokabel, welche den Spieler das ausgerüstete Schwert ziehen lässt?

:bye:

Ja, playGroup forward 1 ist für die Animation zuständig.

Was meinst du mit Vokabel? Ein Skriptbefehl? Wenn letzteres dann wäre dies wohl das richtige:
Code:
player.equipitem EditorIDdesSchwertes

Edit: Leider ist mir so ein Befehl nicht bekannt. :(

MfG Master of Worlds
 
Zuletzt bearbeitet:
  • Like
Reaktionen: TheDarkRuler