Construction Set Skriptthread zum Construction Set

@ Akira: In Skripts verwendest du keine Form-IDs sondern die normale Editor-ID des Objekts. Außerdem musst du immer ein "if" benutzen, wenn du später "elseif"s verwenden willst.

Außerdem rate ich dir nicht, Skripte die du hier postest derart zu verstümmeln. Das schränkt die Beurteilungsmöglichkeiten der anderen ein. Du solltest in deinen Skripts auch auf etwas Ordnung achten. Du kannst die ganzen Bedingungen nämlich arg verkürzen. In etwa so:
Code:
if teleporter == 1
 if cast == 1
  if button == 0
   ...
  elseif button == 1
   ...
  endif
 endif
endif
Das ist zum einen übersichtlicher und auch performancefreundlicher.
 
Hier nochmal meine Frage
Kann mir jemand erklären, wie ich einen Script(Zauber)mache mit dem sich der SPieler ein Tier (nicht Bär, ich weis des gibts schon) zb. einen Wolf beschwören kann? Um das ganze noch zu verkompliezieren;)sollte der Wolf aber nicht wieder verschwinden, sondern stadtdessen dem spieler solange folgen, bis er stirbt. geht das mit einem zauber, oder ist es da klüger, einen Wolf irgendwo hin zu plazieren und summonable zu machen? und wenn, wie sürde das dann gehen?
glaubt ihr jemadn kann mir helfen?
LG Dacri
 
Ich weiß nicht, wie oft die Frage jetzt schon war xD Ich wette 2-3 Seiten vorher hab ich ein Beispiel gegeben :p Ich such grad mal^^

Edit: Okay is scheinbar doch etwas weiter hinten :? Nunja folgendes soltle dir helfen:
Script Type: Magic Effect, Wolf in eine DummyCell packen und eine REF geben, Package mit "folow player"erstellen, Zauber mit folgendem Script erstellen
Code:
scn NAME

begin scripteffectstart
<Wolf-REF>.resurrect
<Wolf-REF>.moveto player
<Wolf-REF>.moddisposition player 250
<Wolf-REF>.pme STRP ;<--hier kannst du jede beliebige Magic-Effect-Abkürzung nehmen oder es weglassen (sieht halt so eher nach einer Beschwörung aus ;))
<Wolf-REF>.setfactionrank playerfaction 1 ;kannst du weglassen,wenn du den Wolf schon in die Faction steckst
<Wolf-REF>.setfactionrank playervampirefaction 1 ;kannst du weglassen,wenn du den Wolf schon in die Faction steckst
<Wolf-REF>.addscriptpacke <folgen-package-ID> ;kannst du weglassen,wenn du dem Wolf das Package schon gibst
end
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Dacri
Joah ist ausführlicher^^
Und mir fällt grade auf, dass er einen "Fehler" behoben hat, der bei mir aufgetreten wäre. Wenn die Kreatur nämlich nicht "initially disabled" ist, folgt sie dem Spieler ohne die condition "if getincell[...]!=1" ja schon, bevor sie beschworen wurde :oops:
Am besten verweisen wir ab jetzt einfach jeden mit einer ähnlichen Frage auf die von dir angegebene Seite^^
 
Arghh! Ich meinte natürlich beim aktuellen Package.

Zum Topic... hast du vielleicht irgendwelche Bedingungen für das Topic nicht erfüllt?

Also es gibt Fortschritte zu vermelden. Das Reden klappt jetzt. Aus irgendeinem Grund war Start Game Enabled in den Quest Einstellungen nicht aktiviert und ich hab auch nicht daran gedacht, den Quest evtl per Script zu starten. Auch das zulaufen funktioniert, zumindest so halb. Ich habe mal einen anderen Test NPC erstellt der sofort auf mich zu rennt. Der eigentliche NPC macht jedoch nix. Ich werd mal noch ein bisschen rumprobieren.

EDIT: Problem ist gelöst. Ich musste meine Package über die schon vorhandene schieben.
 
Zuletzt bearbeitet:
Ich habe 2 Probleme.
Beide hängen direkt mit MessageBox-Auswahlen zusammen.
Ich glaub, irgendwas hab ich hier falsch, denn ingame gehen die beiden nicht.

Eine kurze Beschreibung noch:
Script 01 soll nach der Aktivierung mit ein paar Blitzen rumballern und dann in der kommentierten Sektion das Tor richtig aufmachen.
Script 02 soll nach dem Aufheben der Klinge ein paar Geister sichtbar machen.

Script 01
Code:
scn aaDRCyra0AltLeg08SternentorAktivierung

short Anwaehlwahl
short Runde

Begin onActivate

If (Runde == 0)

    MessageBox "Was willst du tun?","Den Altar berühren","Nichts"
    Let Anwaehlwahl := GetButtonPressed
    Let Runde := 1

Else

    Return

Endif
End

;############

Begin GameMode

If (Anwaehlwahl == 0)

    If (Runde == 0)

        Return

    Elseif (Runde == 1)

        DRCyra0AltLeg08Anwahl01A.Cast aaDRCyra0AltLeg08Aktivierblitz DRCyra0AltLeg08Anwahl02C
        DRCyra0AltLeg08Anwahl01A.Cast aaDRCyra0AltLeg08Aktivierblitz DRCyra0AltLeg08Anwahl02D

        DRCyra0AltLeg08Anwahl01B.Cast aaDRCyra0AltLeg08Aktivierblitz DRCyra0AltLeg08Anwahl02A
        DRCyra0AltLeg08Anwahl01B.Cast aaDRCyra0AltLeg08Aktivierblitz DRCyra0AltLeg08Anwahl02B

        Let Runde := 2

    Elseif (Runde == 2)

        DRCyra0AltLeg08Anwahl02A.Cast aaDRCyra0AltLeg08Aktivierblitz DRCyra0AltLeg08Anwahl01B
        DRCyra0AltLeg08Anwahl02B.Cast aaDRCyra0AltLeg08Aktivierblitz DRCyra0AltLeg08Anwahl01B

        DRCyra0AltLeg08Anwahl02C.Cast aaDRCyra0AltLeg08Aktivierblitz DRCyra0AltLeg08Anwahl01A
        DRCyra0AltLeg08Anwahl02D.Cast aaDRCyra0AltLeg08Aktivierblitz DRCyra0AltLeg08Anwahl01A

        Let Runde := 3

    Elseif (Runde == 3)

        DRCyra0AltLeg08Anwahl01A.Cast aaDRCyra0AltLeg08Aktivierblitz DRCyra0AltLeg08Anwahl03
        DRCyra0AltLeg08Anwahl01B.Cast aaDRCyra0AltLeg08Aktivierblitz DRCyra0AltLeg08Anwahl03

        Let Runde := 4

    Elseif (Runde == 4)

        ;Tor wird aktiviert

        Let Runde := 0

    Endif

Elseif (Anwaehlwahl == 1)

    Let Runde := 0
    Let Anwaehlwahl := 0
    Return

Endif

End
Script 02
Code:
scn aaDRCyra0AltLeg09SchattenklingeScript

short DoOnce
short Button

Begin onActivate

If (DoOnce == 0)

    MessageBox "Du siehst eine seltsame Klinge vor dir. Was möchtest du tun?", "Die Klinge nehmen", "Nichts"
    Let Button := GetButtonPressed
    Let DoOnce := 1

Else

    Return

Endif
End

;#########

Begin GameMode

If (DoOnce == 0)

    Return

Elseif (DoOnce == 1)

    If (Button == 0)

        Disable
        player.AddItem aaDRCyra0GizViciousHeart2H 1
        
        DRCyra0AltLeg09Schwertwaechter01.enable
        DRCyra0AltLeg09Schwertwaechter02.enable
        DRCyra0AltLeg09Schwertwaechter03.enable
        DRCyra0AltLeg09Schwertwaechter04.enable

        DRCyra0AltLeg09Schwertwaechter01.StartCombat player
        DRCyra0AltLeg09Schwertwaechter02.StartCombat player
        DRCyra0AltLeg09Schwertwaechter03.StartCombat player
        DRCyra0AltLeg09Schwertwaechter04.StartCombat player

        Message "Als sich deine Hand um die Klinge schließt, erscheinen Gestalten um dich herum."

        Let DoOnce := 0
        Return

    Else        ;Button == 1

        Let DoOnce := 0
        Return

    Endif

Endif
End

Anmerkung am Rande.
Let xxx := yyy ist ein OBSE-Befehl, welcher im Grunde das Gleiche wie Set xxx to yyy macht.
 
Du solltest in beiden Fällen "let x := getButtonPressed" im "GameMode"-Blocke laufen lassen. "GetButtonPressed" gibt nämlich "-1" zurück, wenn nichts gedrückt wird. Und das wird im "onActivate"-Block ja auch nicht, sondern erst im "GameMode"-Block.
Standardmäßig sieht eine Messagebox so aus:
Code:
scn name

short button
short init

Begin onActivate

if init == 0
 let button := -1
 let init := 1
 messageBox "Blabla!", "Antwort1", "Antwort2"
endif

end

Begin GameMode

if init == 1
 let button := getButtonPressed
 if button == -1
  return
 elseif button == 0
  ;bla
 else    ;if button == 1
  ;blabla
 endif
endif

end
 
Zuletzt bearbeitet:
  • Like
Reaktionen: TheDarkRuler
Hi, ich brauche ein Script, das nach dem man durch eine Tür ging und das Interrior betritt eine Messagebok mit kurzem Text kommt, die mit ok weggeklickt werden kann, also nur eine Information ist. Bei mir klappt das irgendwie nicht so gut:(

g Käse
 
@ Käse, eat that :D

Code:
scn meinname
short doonce

begin

if player.getInCell MEINEZELLE && doonce == 0
set doocne to 1
MessageBox "Meine Textnachricht" , "ok"

end
Alternativ dazu kannst du statt einer MessageBox auch eine Info machen, so wie wenn Lucien Lachance zu dir kommt (Weiße schrift links oben)
Code:
scn meinname
short doonce

begin

if player.getInCell MEINEZELLE && doonce == 0
set doocne to 1
Message "Meine Textnachricht"

end
 
  • Like
Reaktionen: Käsekuchen
Danke, den Script muss ich dann auf die Tür legen oder?

scn dwscdoor1
short doonce

begin

if player.getInCell 01dwhouse && doonce == 0
set doocne to 1
MessageBox "Das hier ist der Dunkelwasser Hof, ich sollte mich umsehen. So wie es aussieht, war der Mörder wohl auch schon hier und hat etwas gesucht." , "ok"

end
stimmt so oder? da kommt aber beim Speichern: Missing block type in `begin`

Dann brauche ich noch ein Script, das einen Mapmarker nach lesen eines Briefes hinzufügt, ich hoffe das geht.

g Käse:)
 
Zuletzt bearbeitet:
Ich würds so machen.
Nimm dir ne TriggerBox, dann kannst du dir diesen Kram mit GetInCell sparen. Du musst sie aber halt in den Raum legen. Dann ne neue ID für die TriggerBox machen und den Script drauflegen.

Code:
scn ...

short DoOnce

Begin onTrigger player

If (DoOnce == 0)
  MessageBox "Das hier ist der Dunkelwasser Hof, ich sollte mich umsehen.  So wie es aussieht, war der Mörder wohl auch schon hier und hat etwas  gesucht." , "Ok"
   Set DoOnce to 1
Else  ;DoOnce != 0
   Return
Endif
End
 
  • Like
Reaktionen: Käsekuchen
Ein Skript auf den Brief:
Code:
scn name

short doonce

Begin onActivate

activate
if doonce
 return
endif
if isActionRef player
 set doonce to 1
 showMap <Marker> 1   [COLOR="Red"];die 1 bedeutet, dass der Spieler den Ort schon beim ersten Mal mit der Schnellreise erreichen kann, wenn du das nicht möchtest, lässt du sie einfach weg[/COLOR]
endif

end


Begin onEquip player

if doonce
 return
endif
set doonce to 1
showMap <Marker> 1    [COLOR="Red"];gleiches wie oben[/COLOR]

end

Das Skript sollte jetzt sowohl wenn der Spieler den Brief aus dem Inventar, als auch aus der Spielwelt heraus aktiviert ausgelöst werden. Wenn du eine Möglichkeit davon ausschließen kannst, kannst du einen der beiden Blöcke löschen.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Käsekuchen
vielen Dank! so geht es schonmal, aber kann man es auch so machen, dass man den Zettel liest und nach oder während dem Lesen die Markierung hinzugefügt wird, weil man im ersten Fall die Notiz nicht mehr Aktivieren kann und im zweiter wahrscheinlich nicht auf die Idee kommt es nach dem Lesen nocheinmal im Inventar anzuklicken.

g Käse