Construction Set Der Scriptthread

3) Ja, kannst du. Du kannst entsprechend die Werte ändern, die du auch in der Eingabemaske ändern kannst: Level, Health, Fatigue, Magicka, ... Ich glaube, ihre Angriffskraft kannst du nicht ändern.

Bei einigen Werten scheint es zu funktionieren (z.B. SetHealth), bei anderen anscheinend nicht (bspw. bekomme ich bei SetMagic eine Fehlermeldung). Kennt da jemand eine Übersicht, was geht und was nicht?

Mein Ziel ist es ja, eine Kreatur als Gegner zu erstellen, die ähnlich wie in Skyrim mitlevelt. Ich könnte ja theoretisch verschiedene Versionen dieser Kreatur erstellen und dann per Skript eine Levelabfrage schalten und dann die gewünschten Variante an die gewünschte Stelle positionieren. Ist mir aber eigentlich etwas zu aufwendig, vor allem wenn ich das bei mehreren Kreaturen machen will. Meine Frage mit den Levelled Creatures bezog sich darauf, um die Scriptabfrage umgehen zu können. Aber wenn die unabhängig von den Kreatureneinstellungen nach einer gewissen Zeit respawnen, ist das unsinnig, zumal diese Kreatur nur einmal besiegt werden soll.

Momentan tendiere ich eher in die Richtung, dass ich eine Kreatur erstelle und dann per Skript spielerlevelabhängig z.B. Health erhöhe oder bestimmte Zauber hinzufügen (da müsste ich wahrscheinlich von Beginn an einen hohen Wert bei den Spell Pts angeben, damit die Kreatur die Zauber auch häufig nutzen kann), damit der Gegner anspruchsvoller wird. Eventuell kann ich ja noch bei Kreaturen, die Waffen benutzen, stärkere Waffen hinzufügen. Leider habe ich keine Vorstellung, wie ich den waffenlosen Angriff verstärken könnte bzw. welche, der mit einem Skript editierbaren, Stats den Angriff beeinflussen. Für erhellende Hilfe wäre ich sehr dankbar :).
 
Ähm---ich habe mir immer Leute geholt die wirklich scripten konnten daher habe ich mich selbst damit nicht sehr beschäftigt. Was man mir damals aber als Grundstein ans Herz legte war das hier:

Morrowind Script Library
Selbst jemand wie ich konnte da einiges noch entwickeln und auf eigene Mods anwenden. Mag sein das du es kennst aber wenn nicht, schau mal rein. Kann ja sein das deine Frage dort beantwortet wird.
 
  • Like
Reaktionen: Lyali
Puh, ich hab jetzt auch für meinen Mods mal an Scripte gewagt und wollte eine Geheimtür mit Schalter erstellen..
Hab mich hier durchs Forum gelesen und als ichs testen wollte, stürzt mein Spiel ab und im CS bekomme ich diesen Fehler:

Code:
Script " in file "The new Iland.esp" has not been compiled.
[Code\]

hab also ein Script wohl irgenwie beschädigt.

Die Frage ist nur, wie finde ich den Fehler??
 
@EvilMind: Kannte ich wirklich bereits, hab es auch nochmal dirchgeschaut, habe aber, was mein akutes Problem betrifft, leider nichts gefunden, dafür aber andere interessante Skripts, deshalb danke schonmal ;).

@Somavakien: Bereits vorhandene Skripts kannst du eigentlich nur zerschossen haben, wenn du in ihnen irgendwas verändert hast. Das Problem liegt wahrscheinlich in einem deiner neuen Skripts. Wenn sich diese nicht aufeinander beziehen, kannst du ja beispielsweise mit Tesame die einzelnen Skripte entfernen und dann nacheinander austesten, welches rumzickt. Wenn es nur ein Skript ist, kannst du es auch hier posten, die Spezialisten finden die Fehler immer recht schnell. Außerdem müsste der Skripteditor im CS eine Compilefunktion haben.

P.S.: Das Programm Tesame zeigt dir weiterhin alle Veränderungen an, sprich du kannst sehen, ob du bei den bereits vorhandenen Skripts irgendwas verändert hast, ohne es zu merken.
 
  • Like
Reaktionen: Somavakien
@Lyali Ich danke dir!!! Mit dem Tool hab ich 2 Scripte gefunden, die kaputt waren. Jetzt läd das Game wieder.

Naja generell hab ich mehrere Anliegen:
Ich suche ein Script, dass auch seinem NPC eine Statue macht.
Dann möchte ich eine Steintür, bzw. einen Stein zur Seite schieben, wenn ich einen Schalter betätige.

Für die Geheimtür hab ich gelesen, dass das "Geisterpforte" Script sich eignet, aber gerade mit dem hab ich mein Game erst grad zerschossen.

Für die Statue gibts dieses Script. Bekomme aber eine Fehlermeldung :

Code:
begin bxMannequins_SC
short NoHello
short NoLore
short NoIlde
short NoFlee
short NoAlarm
SkipAnim
[COLOR="SeaGreen"][B]IF (OnActivate == 1)
 return
EndIF
[/B][/COLOR]end bxMannequins_SC
[Code\]

Finde auch was, zb auf der Seite die EvilMind gepostet hat, aber halt bis jetzt nichts was funktioniert :D
 
Zu dem Statuenproblem: Ich gehe davon aus, dass du das Anziehpuppen-Skript anpassen wolltest. Das SkipAnim aus dem Skript soll, glaube ich, nur das Zusammenbrechen des "sterbenden" NPCs verhindern. Du könntest folgendes versuchen: erstelle einen Spell im CS (als Fähigkeit), die den NPC permanent selbst lähmt und entferne aus deinem Skript das SkipAnim.

Zur Steintür: Schaue dir mal Killfetzers Scriptkurs an, die Lektion 4 und die Aufgabe mit dem Aufzug. Achte auch darauf, dass deine Wand, die du verschieben möchtest, ein einzigartiger Activator ist und kein Static.
 
Cool, werd ich mir anschauen. Zum Statuenscript, hab ich SkipAnim rausgenommen, bekomme aber immernoch den selben Fehler:

Code:
Script bxMannequins_SC
Script  command "COLOR" not found on line 7.
COLOR="SeaGreen"][B]F (OnActivate==1)
[Code\]
 
Mach mal folgendes:
Erstelle bei Spellmaking eine neuen Zauber mit folgenden Settings:
Effects: Lähmung
Type: Fähigkeiten
Füge dem NPC, der als Statue dienen soll, den Zauber hinzu (achte darauf, das das Häkchen bei Auto Calculate Stats weg ist, sonst klappt es nicht).

Erstelle nun folgendes Skript (achte auf die Leerzeichen) und leg es auf den NPC:
Code:
Begin Skriptname

if ( OnActivate == 1 )
    return
Endif

End

Hab es bei mir ausprobiert und es hat funktioniert.

Weiß jemand vielleicht noch etwas zu meinem Skriptproblem?
 
  • Like
Reaktionen: Somavakien
Mach mal folgendes:
Erstelle bei Spellmaking eine neuen Zauber mit folgenden Settings:
Effects: Lähmung
Type: Fähigkeiten
Füge dem NPC, der als Statue dienen soll, den Zauber hinzu (achte darauf, das das Häkchen bei Auto Calculate Stats weg ist, sonst klappt es nicht).

Erstelle nun folgendes Skript (achte auf die Leerzeichen) und leg es auf den NPC:
Code:
Begin Skriptname

if ( OnActivate == 1 )
    return
Endif

End

Hab es bei mir ausprobiert und es hat funktioniert.

Danke. Nun bewegt sich die Statue nicht mehr. Aber ich kann sie immer noch ansprechen.
Auf das Inventar von ihr zugreifen möcht ich aber noch.

Ich werd mir jetzt erstmal den Scriptkurs anschauen und schauen, was mit dem Wissen so geht :)
 
Seltsam, ansprechen konnte ich den NPC bei mir nicht mehr. Bin auch etwas verwirrt wegen deinem letzten Post. Willst du mit der Statue weder reden noch auf das Inventar zugreifen oder nur nicht reden, aber auf das Inventar zugreifen können?
 
Also ich möchte im Inventar einen Brief hinterlassen, aber sonst soll es halt eine Statue sein, mit der man nicht reden kann.
 
Ok, wenn du auf das Inventar zugreifen möchtest, gibt es meines Wissens nach nur zwei Möglichkeiten:

1. Der NPC ist tot. Dann kannst du die Mannequin-Skripts aus der Script Library nehmen.
2. Du brauchst Tribunal und arbeitest mit Set Companion im Skript. Dann kannst du allerdings nur über das Reden auf die Option teilen zugreifen, um dann Gegenstände auszutauschen.

Wenn es dir nur darum geht, dem NPC einen Brief zu geben, kannst du auch per Skript es so einrichten, dass bei Aktivierung des NPCs mit player->RemoveItem "ID Brief" 1 der Brief beim Spieler entfernt wird und mit "ID NPC"->AddItem "ID Brief" 1 dem NPC hinzugefügt wird. Dann bekommst du den Brief so ohne weiteres aber nicht mehr wieder. Entweder musst du den NPC umbringen oder eine Abfrage in das Skript einbauen, dass, wenn du den NPC aktivierst und er den Brief bereits besitzt, genau umgekehrt wie oben beschrieben du dem NPC den Brief entfernst und dem Spieler hinzufügst.

P.S.: Wenn du Skripte in einem gespeicherten Spielstand änderst, kann es sein, dass die Veränderungen erst bei Erstellung eines neuen Spiels greifen.
 
So ich hab mir jetzt mal den Scriptkurs angeschaut. Habe jetzt mal was gebastelt. Nur komm ich grad net weiter.

Ich möchte, dass wenn man auf einen Schalter (bei mir ein Pilz) drückt, dass dann ein Stein auf die Seite fährt.
Das Script für den Pilz sieht bis jetzt so aus :

Code:
begin smt_mushroom_activator_script

short state
short button
float timer

if ( MenuMode == 1 )
  return
endif

if ( state == 0 )
  if ( OnActivate == 1 )
    set state to 1
    MessageBox, "man hört etwas öffnen in der Nähe von plätschernden Wasser....."
   PlaySound3D "Door Stone Open"
   set state to 10
   endif
endif

if ( State >= 10 )

       set timer to ( timer + GetSecondsPassed )
       ;move Stone to the side
       if ( timer < 3 )
               "sm_act_move"->MoveWorld, X, 300 
 
    set state to 1
  endif
elseif ( state == 1 )
     set timer to timer + GetSecondsPassed
     MoveWorld, X, 100
     if ( timer >= 3 )
  else
    set state to 2       
  endif
endif

end

was sich aber bewegt ist der Pilz :D

(sm_act_move) ist die ID die verschoben werden soll
 
Zuletzt bearbeitet:
Das Skript dürfte so Probleme machen. Wenn du dir die Lösung der letzten Aufgabe aus Lektion 4 des Script-Kurses anschaust, wirst du sehen, dass da eine Abfrage über die Zielposition drin ist. Wenn du die Stein-ID vor die GetPos-Abfrage und den Move-Befehl setzt, müsste das für den Schalter, bei dir der Pilz, klappen. Denk aber daran, den Stein, den du bewegen willst, auf reference persist zu setzen und erst den Stein platzieren, dann das Skript. Und natürlich brauchst du die Ingame-Koordinaten des Zielortes für den Stein ( und die Koordinaten des Startpunktes, falls du den Stein wieder zurücksetzen möchtest).

Edit: Dein Pilz bewegt sich, weil sich dein Move-Befehl ohne Deklarierung des Actors auf das Objekt bezieht, auf dem das Skript liegt.
 
Boar Danke jetzt funktioniert es !! Jetzt möcht ich noch, dass der Stein zurück fährt.

Hier mein neues Script:
Code:
begin smt_mushroom_activator_script

short state
short button
float timer

if ( MenuMode == 1 )
  return
endif

if ( state == 0 )
  if ( OnActivate == 1 )
    set state to 1
    MessageBox, "man hört etwas öffnen in der Nähe von plätschernden Wasser....."
   PlaySound3D "Door Stone Open"
   set state to 2
   endif
endif

elseif ( State >== 2  )
       
       set timer to ( timer + GetSecondsPassed )       ;Stein fährt zur Seite
       if ( timer < 3 )
       "Act_smt_stone_move"->MoveWorld, X, -40
            set state to 3
         endif

elseif ( State >== 3 )       ;Stein wartet draußen

         set timer to timer + GetSecondsPassed
       if ( timer > 1 )
           set timer to 0
           set state to 4
       endif

elseif ( State >== 4 )      ; Stein fährst zurück

       set timer to ( timer + GetSecondsPassed )
       if ( timer < 3 )
       "Act_smt_stone_move"->MoveWorld, X, 40
       set state to 0
       endif
endif
end
 
Zuletzt bearbeitet:
Dein Skript dürfte für das Zurücksetzen des Steins so eigentlich nicht funktionieren, da dein state-Wert nach dem Verschieben des Steins eine erneute Aktivierung des Pilzes nicht zulässt. Ich würde versuchen, die state-Abfrage nach der Abfrage der Aktivierung zu setzen.
 
Danke dir.

Mein Script das funktioniert :

Code:
begin smt_mushroom_activator_script

short state
short button
float timer

if ( MenuMode == 1 )
  return
endif

if ( state == 0 )
  if ( OnActivate == 1 )
    set state to 1
    MessageBox, "man hört etwas öffnen in der Nähe von plätschernden Wasser....."
   PlaySound3D "Door Stone Open"
      endif

elseif ( State == 1  )
       
       set timer to ( timer + GetSecondsPassed )       ;Stein fährt zur Seite
       if ( timer < 3 )
       "Act_smt_stone_move"->MoveWorld, Z, -200
else
            set state to 2
         endif

elseif ( State == 2 )       ;Stein wartet draußen

         set timer to timer + GetSecondsPassed
       if ( timer > 1 )
           set timer to 0
           set state to 3
       endif

elseif ( State == 3 )      ; Stein fährst zurück

       set timer to ( timer + GetSecondsPassed )
       if ( timer < 3 )
       "Act_smt_stone_move"->MoveWorld, Z, 200
else
       set state to 0
       endif
endif
end

:)
 
Kannst du mir noch erklären wie ich eine Verzögerung baue?

Ich habs versucht über :

Code:
if ( timer < 1 )
set timer to 0

Ich möchte das eine Flamme nach einem nehmen eines Gegenstandes länger braucht bis sie erscheint.

Hier mein Script:
Code:
begin smt_spear_fire_after_spear_took

short state
float timer

if ( MenuMode == 1 )
  return
endif

       if ( state == 0 )
       disable
       if ( Player->GetItemCount "JEB_fusion_spear" >= 1 )   ;Name des Speers eintragen.
       set state to 1
else
            endif
endif

       elseif ( state == 1    )
           if ( timer < 1 )
           set timer to 0
           set state to 2
endif

   elseif ( state == 2 )  
   enable
   endif

 endif
end

Die Flamme ist am Anfang zwar aus, geht aber sofort an.
 
Um einen Timer zu verwenden, musst du die Construction in der Art verwenden:

Code:
float timer

if ( timer < 10 )
  set timer to GetSecondsPassed
else
  ;do something
endif

Für mehr Informationen empfehle ich meinen Scriptkurs oder die Befehelsreferenz.