Construction Set Skriptthread zum Construction Set

scn 07bwkilled

Begin onDeath bwkiller

MessageBox "Ich habe den Mörder getötet, er ließ sich nicht festnemen! Ich sollte nach Dunkelwasser zurückkehren, um meine Belohnung zu suchen. Die daedrischen Steine kann ich auch mitnemen und verkaufen!","Ok"

aabwnote07.enable ; der brief im Haus (die Ref davon)

aabwbelohnungssack.enable ; Ein Container, der wo anders gespawnt werden soll

End
Es erscheint keine Message, der Brief und der Container werden nicht gespawnt:(
moment ich teste es nochmal...

Also die ID von dem Typ (jetzt aabwkiller) lässt sich nicht speichern und die Gegenstände werden gar nicht gespawnt... Ich könnte die Ref von dem Mensch angeben, aber dann passiert ingame nix, auch wenn es sich speichern lässt.

neues Script:
scn 08bwkilled

Begin onDeath aabwkiller

MessageBox "Ich habe den Mörder getötet, er ließ sich nicht festnemen! Ich sollte nach Dunkelwasser zurückkehren, um meine Belohnung zu suchen. Die daedrischen Steine kann ich auch mitnemen und verkaufen!","Ok"

aabwnote07.enable

aabwbelohnungssack.enable

End
aabwnote07 und aabwbelonungssack sind refs
 
Zuletzt bearbeitet:
Achtung! Der Parameter beim "onDeath"-Block, bezeichnet nicht den Actor, der stirbt (wäre ja unlogisch, weil dieser ja eh der Skriptträger ist), sondern denjenigen, der ihn tötet (in deinem Fall wahrscheinlich der Spieler). Also solltest du "Begin onDeath player" schreiben.
Und das "Ok" hinter der Messagebox kannst du auch weglassen. Eine Messagebox hat immer eine Auswahlmöglichkeit à la "Fertig" oder so.


Edit:
@DarkRuler:
Hab hier wieder ein Problem.
Code:
scn aaDRCyra0AltLeg08SternentorAktivierung

float AktivierTimer
short Anwaehlwahl
short Runde

;Legende für Runde
;0 = Anfangsstadium
;1 = Abfrage auf Aktivierung überprüfen


Begin onActivate

If (Runde == 0)
     let Anwaehlwahl := -1
     let Runde := 1
    MessageBox "Was willst du tun?", "Den Altar berühren", "Nichts"
Endif

End

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

Begin GameMode

If (Runde == 0)
    Return

Elseif (Runde == 1)
     let Anwaehlwahl := getButtonPressed
     
    If Anwaehlwahl == -1
          return
     Elseif Anwaehlwahl == 0
          Let Runde := 2
        Let AktivierTimer:= GetSecondsPassed
     Else    ;if Anwaehlwahl == 1
        Return
        Let Runde := 0
    Endif

Elseif (Runde == 2)

    If (GetSecondsPassed - AktivierTimer >= 2)
        DRCyra0AltLeg08FeuerwegA1.enable
        DRCyra0AltLeg08FeuerwegB1.enable

    Elseif (GetSecondsPassed - AktivierTimer >= 4)
        DRCyra0AltLeg08FeuerwegA2.enable
        DRCyra0AltLeg08FeuerwegB2.enable

    Elseif (GetSecondsPassed - AktivierTimer >= 6)
        DRCyra0AltLeg08FeuerwegA3.enable
        DRCyra0AltLeg08FeuerwegB3.enable

    Elseif (GetSecondsPassed - AktivierTimer >= 8)
        DRCyra0AltLeg08FeuerwegA4.enable
        DRCyra0AltLeg08FeuerwegB4.enable

    Elseif (GetSecondsPassed - AktivierTimer >= 10)
        DRCyra0AltLeg08FeuerwegA5.enable
        DRCyra0AltLeg08FeuerwegB5.enable

    Elseif (GetSecondsPassed - AktivierTimer >= 12)
        DRCyra0AltLeg08FeuerwegA6.enable
        DRCyra0AltLeg08FeuerwegB6.enable

    Elseif (GetSecondsPassed - AktivierTimer >= 14)
        DRCyra0AltLeg08FeuerwegA7.enable
        DRCyra0AltLeg08FeuerwegB7.enable

    Elseif (GetSecondsPassed - AktivierTimer >= 16)
        DRCyra0AltLeg08FeuerwegA8.enable
        DRCyra0AltLeg08FeuerwegB8.enable

    Elseif (GetSecondsPassed - AktivierTimer >= 18)
        DRCyra0AltLeg08NebelA.enable
        DRCyra0AltLeg08NebelB.enable        

    Elseif (GetSecondsPassed - AktivierTimer>= 20)
        Let Runde := 3
        Let AktivierTimer := GetSecondsPassed

    Else    ;Timerdifferenz < 2
        Return
    Endif

Elseif (Runde == 3)

    If (GetSecondsPassed - AktivierTimer >= 1)
        DRCyra0AltLeg08Nebelboden01.enable

    Elseif (GetSecondsPassed - AktivierTimer >= 2)
        DRCyra0AltLeg08Nebelboden02.enable

    Elseif (GetSecondsPassed - AktivierTimer >= 3)
        DRCyra0AltLeg08Nebelboden03.enable

    Elseif (GetSecondsPassed - AktivierTimer >= 4)
        DRCyra0AltLeg08Nebelboden04.enable

    Elseif (GetSecondsPassed - AktivierTimer >= 5)
        DRCyra0AltLeg08Nebelboden05.enable

    Elseif (GetSecondsPassed - AktivierTimer >= 6)
        DRCyra0AltLeg08Nebelboden06.enable

    Elseif (GetSecondsPassed - AktivierTimer >= 7)
        DRCyra0AltLeg08Nebelboden07.enable

    Elseif (GetSecondsPassed - AktivierTimer >= 8)
        DRCyra0AltLeg08Nebelboden08.enable

    Elseif (GetSecondsPassed - AktivierTimer >= 9)
        DRCyra0AltLeg08Nebelboden09.enable

    Elseif (GetSecondsPassed - AktivierTimer >= 10)
        DRCyra0AltLeg08Nebelboden10.enable

        Let Runde := 4
        Let AktivierTimer := 0

    Else    ;weniger als 1 Sekunde Timerdifferenz

        Return

    Endif

Elseif (Runde == 4)

;BlaBlaBla

Endif
end
Beschreibung :
Man aktiviert den Schalter und dann soll schrittweise folgendes passieren.

I.
2 Flammenreihen enablen mit je 2 Flammen à 2 Sekunden

II.
Nachdem die Flammen da sind, sollen zwei andere Objekte enabled werden

III.
Und nachdem die da sind, enablen 10 Nebelobjekte.

Leider passiert optisch gar nix.
Jemand ne Idee?

@Diarrhoe:
So hast du das doch mit dem Scriptaufbau gemeint oder?
Zumindest das GetButtonPressed geht doch oder? :?

Im Grunde ist das Skript richtig. Allerdings machst du den Fehler, dass du den Timer immer gleich "getSecondsPassed" setzt. "GetSecondsPassed" gibt die Zeit in Sekunden zurück, die zwischen dem jetzigen und dem vorherigen Durchlauf des Skripts des Skripts liegen, quasi eine Umkehrung zum OBSE-Befehl "getFPS".

Bei normalen Rechnern (FPS ~ 30-40) ist "getSecondsPassed" also ungefähr 0.03. Für einen Timer wird daher immr der aktuelle Wert zu allen vorherigen addiert oder subtrahiert ("set timer to (timer +- getSecondsPassed)"). In deinem Skript wird der Timer also nie über 1 gehen, geschweige denn über 20 (kommt natürlich auf deinen Rechner an ;) ).
 
Zuletzt bearbeitet:
Danke für die ausführliche Erklärung.
Hättest du denn eine Alternative, wie ich den Skript schreiben könnte? :?

(EDIT)

Übrigens ein weiteres Problem.
Ich wollte es so machen, dass man bei der Aktivierung einer gelöschten Fackel, während man eine Fackel in der Hand hält, diese Activatorfackel disabled wird und dann die auf der gleichen Position liegende, aber disablede Fackel (mit Licht) enabled wird.

Code sieht so aus.
Code:
scn aaDRCyra0ParentScript06Fackeln

ref FackelAusRef
ref FackelAnRef

Begin onActivate player

Let FackelAusRef := GetSelf
Let FackelAnRef := GetParentRef

If (player.IsTorchOut == 1)

    FackelAusRef.disable
    FackelAnRef.enable

Else    ;player.IsTorchOut == 0

    Return

Endif
End

Jetzt aber das komische:
Ingame ist NIX sichtbar.
Und die Activatorfackeln sind nicht auf Initially Disabled.
Was ist das denn nun? :huh:
 
Zuletzt bearbeitet:
1) Zum Beispiel so:
Code:
scn aaDRCyra0AltLeg08SternentorAktivierung

float AktivierTimer
short Anwaehlwahl
short Runde
short count

;Legende für Runde
;0 = Anfangsstadium
;1 = Abfrage auf Aktivierung überprüfen


Begin onActivate

If (Runde == 0)
     let Anwaehlwahl := -1
     let Runde := 1
    MessageBox "Was willst du tun?", "Den Altar berühren", "Nichts"
Endif

End

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

Begin GameMode

If (Runde == 0)
    Return

Elseif (Runde == 1)
     let Anwaehlwahl := getButtonPressed
     
    If Anwaehlwahl == -1
          return
     Elseif Anwaehlwahl == 0
          Let AktivierTimer := 2
          Let Runde := 2
     Else    ;if Anwaehlwahl == 1
        Let Runde := 0
        Return
    Endif

Elseif (Runde == 2)
    if AktivierTimer > 0
       let AktivierTimer := (AktivierTimer - getSecondsPassed)
       return
    else
       if count == 0
           DRCyra0AltLeg08FeuerwegA1.enable
           DRCyra0AltLeg08FeuerwegB1.enable
       elseif count == 1
           DRCyra0AltLeg08FeuerwegA2.enable
           DRCyra0AltLeg08FeuerwegB2.enable
       elseif count == 2
           DRCyra0AltLeg08FeuerwegA3.enable
           DRCyra0AltLeg08FeuerwegB3.enable
       elseif count == 3
           DRCyra0AltLeg08FeuerwegA4.enable
           DRCyra0AltLeg08FeuerwegB4.enable
       elseif count == 4
           DRCyra0AltLeg08FeuerwegA5.enable
           DRCyra0AltLeg08FeuerwegB5.enable
       elseif count == 5
           DRCyra0AltLeg08FeuerwegA6.enable
           DRCyra0AltLeg08FeuerwegB6.enable
       elseif count == 6
           DRCyra0AltLeg08FeuerwegA7.enable
           DRCyra0AltLeg08FeuerwegB7.enable
       elseif count == 7
           DRCyra0AltLeg08FeuerwegA8.enable
           DRCyra0AltLeg08FeuerwegB8.enable
       elseif count == 8
           DRCyra0AltLeg08NebelA.enable
           DRCyra0AltLeg08NebelB.enable

       ; jetzt kommen die Nebelböden
       elseif count == 9
           DRCyra0AltLeg08Nebelboden01.enable
       elseif count == 10
           DRCyra0AltLeg08Nebelboden02.enable
       elseif count == 11
           DRCyra0AltLeg08Nebelboden03.enable
       elseif count == 12
           DRCyra0AltLeg08Nebelboden04.enable
       elseif count == 13
           DRCyra0AltLeg08Nebelboden05.enable
       elseif count == 14
           DRCyra0AltLeg08Nebelboden06.enable
       elseif count == 15
           DRCyra0AltLeg08Nebelboden07.enable
       elseif count == 16
           DRCyra0AltLeg08Nebelboden08.enable
       elseif count == 17
           DRCyra0AltLeg08Nebelboden09.enable
       elseif count == 18
           DRCyra0AltLeg08Nebelboden10.enable
       endif
       let count := (count + 1)
       if count >= 19
           let Runde := 3
           let count := 0
       elseif count <= 9
           let AktivierTimer := 2
       else
           let AktivierTimer := 1
       endif
       return
   endif
Elseif Runde == 3

;BlaBlaBla

Endif

end

2) Du kannst keine Objekte enablen oder disablen, die ein verlinktes Parent haben. Stattdessen kannst du afaik aber bei diesen Objekten einen Haken bei "set enable state to opposite of parent" und einfach nur das Parent enablen.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: TheDarkRuler
2) Du kannst keine Objekte enablen oder disablen, die ein verlinktes Parent haben. Stattdessen kannst du afaik aber bei diesen Objekten einen Haken bei "set enable state to opposite of parent" und einfach nur das Parent enablen.
Bitte noch mal für Dummys.
Was bitte?
:huh: set enable state to opposite of parent :huh:

(EDIT)
Ich habe den Button jetzt gefunden.
Muss ich dann nur das Licht anmachen?
 
Zuletzt bearbeitet:
Hi, ich hab wieder was etwas spezielles^^

Also die Idee: Ein Signalfeuer, das mit einem Fackel Activator enabled wird( Feuer und Rauch) soweit klappt es perfekt! Die Festung, die das Signalfeuer hat, ist gegenüber der Kaiserstadt und soll Verstärkung anfordern durch das Feuer, also müssen zwei Wachen in der Nähe gespawnt werden, die dann zum Signal Feuer laufen, aber etwas Zeitversetzt, da es unlogisch wäre, wenn sie sofort nach Aktivieren da wären. Kann man das mit xmarkern Regeln oder was muss ich da überhaupt machen, dass die Wachen eben ein mal pro Tag kommen können, geht das überhaupt?

Funktionierender Script (macht nur das mit dem Feuer und Rauch was muss da ungefär noch dazu?)


scn aaBwFire

short aabwtorch

begin OnActivate

If (aabwtorch == 0)
activate
bwsmoke.enable
befireopen.enable
set aabwtorch to 1

Elseif (aabwtorch == 1)
activate
bwsmoke.disable
befireopen.disable
set aabwtorch to 0

Endif
End
 
Du kannst dafür einfach einen Timer verwenden:
Code:
scn aaBwFire

short aabwtorch
short activated
float timer

begin OnActivate

If (aabwtorch == 0)
 activate
 bwsmoke.enable
 befireopen.enable
 set aabwtorch to 1
 if activated == 0
  set activated to 1
  set timer to [COLOR="Red"]x    ; hier beliebige Anzahl an Sekunden einfügen[/COLOR]
 endif
Elseif (aabwtorch == 1)
 activate
 bwsmoke.disable
 befireopen.disable
 set aabwtorch to 0
Endif

End

Begin GameMode

if activated == 1
 if timer > 0
  set timer to (timer - getSecondsPassed)
 else
  set activated to 2
  <Wache1-Ref>.enable
  <Wache2-Ref>.enable
 endif
endif

end
 
  • Like
Reaktionen: Käsekuchen
Dafür, dass sie einmal pro Tag vorbeikommen sollen brauchst du wiederum Packages.

Edit: So ein Mist! Hab wohl aus Versehen einen neuen Beitrag erstellt, anstatt den ersten zu editieren.
 
  • Like
Reaktionen: Käsekuchen
Vielen Dank das klappt!
Sie spawnen jetzt hinter einer Mauer einer Ruine in der Nähe, dass man nicht sieht, wie sie plötzlich aus dem Nichts erscheinen.

Von dort aus sollen sie zu einem XMarker laufen was müsste ich da machen? Package will nicht richtig oder ich finde die Funktion einfach nicht.


EDIT: Hmm moveto würde sie ja hinteleportieren und nicht laufen lassen auserdem passiert nix also was muss ich machen

Edit das mit dem Hinlaufen klappt jetzt vielen Dank für das Script, bis auf weiters^^

g Käse
 
Zuletzt bearbeitet:
Eine Frage

PHP:
scn aaDRCyra0AltLeg08SchutzbannScript

Ref IchGeheDurch

Begin onTrigger

Let IchGeheDurch := GetActionRef

If (DRCyra0AltLeg08Schutzkristall01.GetDisabled == 1) && (DRCyra0AltLeg08Schutzkristall02.GetDisabled == 1)

    Return

Else        ;Irgendein Kristall ist noch da

    IchGeheDurch.kill
    
Endif

End

Warum sterbe ich nicht, wenn die Kristalle noch da sind?
Ist GetActionRef ein falsche Befehl? :huh:
 
Wie genau weis ich nicht...aber schau doch mal bei dem quest mit den odiils nach...
Ok, sry nehms zurück. hab mir den questscript angesehen...für mich ist der nicht sehr aussagekräftig.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Käsekuchen
Ja, die Goblins sollen ja jeden 3ten Tag oder zumindest in festgelegten Abständen angreifen, dann kann man mit meinem Signalfeuer die Wachen alarmieren und zwei kommen rübergerannt^^
Nur so als kleiner Minnischlacht Verteidigungszeitvertreib.
 
Zuletzt bearbeitet: