Construction Set Der Scriptthread

Dieses Thema im Forum "[MW] Plugins und Mods" wurde erstellt von The Nici, 25. April 2006.

  1. Lyali

    Lyali Abenteurer

    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 :).
     
  2. Ä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.
     
    Lyali gefällt das.
  3. Somavakien

    Somavakien Neuankömmling

    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??
     
  4. Lyali

    Lyali Abenteurer

    @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.
     
    Somavakien gefällt das.
  5. Somavakien

    Somavakien Neuankömmling

    @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
     
  6. Lyali

    Lyali Abenteurer

    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.
     
  7. Somavakien

    Somavakien Neuankömmling

    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\]
     
  8. Lyali

    Lyali Abenteurer

    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?
     
    Somavakien gefällt das.
  9. Somavakien

    Somavakien Neuankömmling

    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 :)
     
  10. Lyali

    Lyali Abenteurer

    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?
     
  11. Somavakien

    Somavakien Neuankömmling

    Also ich möchte im Inventar einen Brief hinterlassen, aber sonst soll es halt eine Statue sein, mit der man nicht reden kann.
     
  12. Lyali

    Lyali Abenteurer

    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.
     
  13. Somavakien

    Somavakien Neuankömmling

    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: 5. April 2019
  14. Somavakien

    Somavakien Neuankömmling

    ausversehen 2 mal gesendet..
     
  15. Lyali

    Lyali Abenteurer

    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.
     
  16. Somavakien

    Somavakien Neuankömmling

    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: 5. April 2019
  17. Lyali

    Lyali Abenteurer

    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.
     
  18. Somavakien

    Somavakien Neuankömmling

    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
    
    :)
     
  19. Somavakien

    Somavakien Neuankömmling

    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.
     
  20. Killfetzer

    Killfetzer Super-Moderator Mitarbeiter

    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.
     
  21. Werbung (Nur für Gäste)
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden