Construction Set Der Scriptthread

Dies ist ein script, welches einen Dremorafürst hinter dir erscheinen lässt, wenn du eine Zutat in einem Daedraschrein aktivierst, und dir danach die zutat gibt. (direkt kopiert aus dem CS)

Code:
begin BILL_MarksDaedraSummon
; Summon an Daedra when an item is removed from altar
;
; script location: should be placed upon an object on a Daedric Altar 

; variables
short done

if ( OnActivate == 1 )
    if ( done == 1 )
        Activate
        return
    else
        Set done to 1
        PlaceAtPC "Dremora_lord" 1 128 1
        ;1 of them, 256 units away, in back (1) of the player
        Activate
    endif
endif

End

wenn du aber möchtest, dass bei JEDEM aktivieren eine Kreatur beschworen wird, mach es so:

Code:
begin name ;denk dir einen aus

if ( OnActivate==1 )
 PlaceAtPc "kreaturID" anzahl entfernung richtung
endif

end

und wenns nur einmal gehen soll ohne sofortiges aktivieren danach(achtung: der gegenstand kann danach nicht mehr aktivert, werden):
Code:
begin name ;denk dir einen aus

short state

if ( OnActivate==1 )
 PlaceAtPc "kreaturID" anzahl entfernung richtung
 set state to 1
endif

end
Und wenn du willst, dass es nicht sofort aktiviert wird, aber beim nächsten anklicken schon:
Code:
begin name ;denk dir einen aus

if ( OnActivate==1 )
 if ( state==0 )
  PlaceAtPc "kreaturID" anzahl entfernung richtung
  set state to 1
 else
  activate
  endif
endif

end
 
  • Like
Reaktionen: Travok32
Und wenn ich per message box den Gegner auswählen will? wenn ich das objekt also aktiviere gibt es eine Auswahl verschiedener Gegner die gewählt werdn können.
 
da hab ich selber mal was gemacht. mal sehen *buddel*
also: ungekürzt und ohne kommentare:
Code:
begin my_trainingscript

short questionState
short button

if ( OnActivate == 1)
    Set questionState to 1
    Return
endif

if ( questionState == 0 )
    Return
endif


if ( questionState == 1 )
    MessageBox "Gegen wen wollt Ihr antreten?" "Ratte" "Kwama" "Alit" "Guar" "Kagouti" "Klippenläufer" "Shalk" "Stärkere Kreatur" "Niemand"
    Set questionState to 2
    Return
endif



if ( questionState == 2 )

    set button to GetButtonPressed

    if ( button == 0 )
        PlaySound, "bell3"
          PlaceAtPC "arena_rat" 1 512 1
        Set questionState to 0
        return
    endif

    if (button == 1 )
        PlaySound, "bell3"
          PlaceAtPC "kwama warrior" 1 512 1
        Set questionState to 0
        return
    endif

   if (button == 2 )
        PlaySound, "bell3"
          PlaceAtPC "alit" 1 512 1
        Set questionState to 0
        return
    endif

     if (button == 3 )
        PlaySound, "bell3"
          PlaceAtPC "guar" 1 512 1
        Set questionState to 0
        return
    endif

     if (button == 4 )
        PlaySound, "bell3"
          PlaceAtPC "kagouti" 1 512 1
        Set questionState to 0
        return
    endif

      if (button == 5 )
        PlaySound, "bell3"
          PlaceAtPC "cliff racer" 1 512 1
        Set questionState to 0
        return
    endif

    if (button == 6 )
        PlaySound, "bell3"
          PlaceAtPC "shalk" 1 512 1
        Set questionState to 0
        return
    endif
    
    if ( button == 7 )
        Set questionState to 3
        return
    endif
    
    if ( button == 8 )
        Set questionState to 0
        return
    endif

endif

if ( questionState == 3 )
    MessageBox "Gegen wen wollt Ihr antreten?" "Zenturio-Spinne" "Zenturio-Sphäre" "Dampfzenturio" "Blitz-Zenturio" "Schützen-Zenturio" "Besserer Schützen-Z." "Verbesserter Dampfz." "Stärkere Kreatur" "Niemand"
    Set questionState to 4
    Return
endif

if ( questionState == 4 )
    set button to GetButtonPressed

    if ( button == 0 )
        PlaySound, "bell3"
          PlaceAtPC "centurion_spider" 1 512 1
        Set questionState to 0
        return
    endif

    if (button == 1 )
        PlaySound, "bell3"
          PlaceAtPC "centurion_sphere" 1 512 1
        Set questionState to 0
        return
    endif

   if (button == 2 )
        PlaySound, "bell3"
          PlaceAtPC "centurion_steam" 1 512 1
        Set questionState to 0
        return
    endif

     if (button == 3 )
        PlaySound, "bell3"
          PlaceAtPC "arena_centurion_shock" 1 512 1
        Set questionState to 0
        return
    endif

     if (button == 4 )
        PlaySound, "bell3"
          PlaceAtPC "centurion_projectile" 1 512 1
        Set questionState to 0
        return
    endif

      if (button == 5 )
        PlaySound, "bell3"
          PlaceAtPC "centurion_projectile_C" 1 512 1
        Set questionState to 0
        return
    endif

    if (button == 6 )
        PlaySound, "bell3"
          PlaceAtPC "centurion_steam_advance" 1 512 1
        Set questionState to 0
        return
    endif
    
    if ( button == 7 )
        Set questionState to 5
        return
    endif
    
    if ( button == 8 )
        Set questionState to 0
        return
    endif
endif

if ( questionState == 5 )
    MessageBox "Gegen wen wollt Ihr antreten?" "Ratten-Mechanoid" "Riesen-Mechanoid" "Stärkere Kreatur" "Niemand"
    Set questionState to 6
    Return
endif

if ( questionState == 6 )
    set button to GetButtonPressed

    if ( button == 0 )
        PlaySound, "bell3"
          PlaceAtPC "fabricant_verminous" 1 512 1
        Set questionState to 0
        return
    endif

    if (button == 1 )
        PlaySound, "bell3"
          PlaceAtPC "fabricant_hulking" 1 512 1
        Set questionState to 0
        return
    endif
    
    if ( button == 2 )
        Set questionState to 7
        return
    endif
    
    if ( button == 3 )
        Set questionState to 0
        return
    endif
endif
if ( questionState == 7 )
    MessageBox "Gegen wen wollt Ihr antreten?" "Ahnengeist" "Skelett" "Skelettkriegsfürst" "Skelettfürst" "Skelett-Bogenschütze" "Knochenläufer" "Corprus-Bestie" "Stärkere Kreatur" "Niemand"
    Set questionState to 8
    Return
endif
    
if ( questionState == 8 )
    set button to GetButtonPressed

    if ( button == 0 )
        PlaySound, "bell3"
          PlaceAtPC "ancestor_ghost" 1 512 1
        Set questionState to 0
        return
    endif

    if (button == 1 )
        PlaySound, "bell3"
          PlaceAtPC "skeleton" 1 512 1
        Set questionState to 0
        return
    endif

   if (button == 2 )
        PlaySound, "bell3"
          PlaceAtPC "skeleton champion" 1 512 1
        Set questionState to 0
        return
    endif

     if (button == 3 )
        PlaySound, "bell3"
          PlaceAtPC "bonelord" 1 512 1
        Set questionState to 0
        return
    endif

     if (button == 4 )
        PlaySound, "bell3"
          PlaceAtPC "skeleton archer" 1 512 1
        Set questionState to 0
        return
    endif

      if (button == 5 )
        PlaySound, "bell3"
          PlaceAtPC "Bonewalker_Greater" 1 512 1
        Set questionState to 0
        return
    endif

    if (button == 6 )
        PlaySound, "bell3"
          PlaceAtPC "corprus_lame" 1 512 1
        Set questionState to 0
        return
    endif
    
    if ( button == 7 )
        Set questionState to 9
        return
    endif
    
    if ( button == 8 )
        Set questionState to 0
        return
    endif
endif
if ( questionState == 9 )
    MessageBox "Gegen wen wollt Ihr antreten?" "Skamp" "Daedroth" "Dremora" "Ogrim" "Goldene Heilige" "Erleuchteter Schläfer" "Atronachen" "Stärkere Kreatur" "Niemand"
    Set questionState to 10
    Return
endif

if ( questionState == 10 )
    set button to GetButtonPressed

    if ( button == 0 )
        PlaySound, "bell3"
          PlaceAtPC "scamp" 1 512 1
        Set questionState to 0
        return
    endif

    if (button == 1 )
        PlaySound, "bell3"
          PlaceAtPC "daedroth" 1 512 1
        Set questionState to 0
        return
    endif

   if (button == 2 )
        PlaySound, "bell3"
          PlaceAtPC "dremora" 1 512 1
        Set questionState to 0
        return
    endif

     if (button == 3 )
        PlaySound, "bell3"
          PlaceAtPC "ogrim titan" 1 512 1
        Set questionState to 0
        return
    endif

     if (button == 4 )
        PlaySound, "bell3"
          PlaceAtPC "golden saint" 1 512 1
        Set questionState to 0
        return
    endif

      if (button == 5 )
        PlaySound, "bell3"
          PlaceAtPC "ascended_sleeper" 1 512 1
        Set questionState to 0
        return
    endif

    if (button == 6 )
        PlaySound, "bell3"
          PlaceAtPC "atronach_flame" 1 512 1
        PlaceAtPC "atronach_frost" 1 512 1
        PlaceAtPC "atronach_storm" 1 512 1
        Set questionState to 0
        return
    endif
    
    if ( button == 7 )
        Set questionState to 11
        return
    endif
    
    if ( button == 8 )
        Set questionState to 0
        return
    endif
endif

if ( questionState == 11 )
    MessageBox "Gegen wen wollt Ihr antreten?" "Dagoth Ur" "Vivec" "Unfertiger" "Almalexia" "Hircine" "Stärkere Kreatur" "Niemand"
    Set questionState to 12
    Return
endif

if ( questionState == 12 )
    set button to GetButtonPressed

    if ( button == 0 )
        PlaySound, "bell3"
              PlaceAtPC "arena_dagoth_ur" 1 512 1
        Set questionState to 0
        return
    endif

    if (button == 1 )
        PlaySound, "bell3"
          PlaceAtPC "arena_vivec" 1 512 1
        Set questionState to 0
        return
    endif

   if (button == 2 )
        PlaySound, "bell3"
          PlaceAtPC "arena_Imperfect" 1 512 1
        Set questionState to 0
        return
    endif

     if (button == 3 )
        PlaySound, "bell3"
          PlaceAtPC "arena_Almalexia_warrior" 1 512 1
        Set questionState to 0
        return
    endif

     if (button == 4 )
        PlaySound, "bell3"
          PlaceAtPC "arena_hircine" 1 512 1
        Set questionState to 0
        return
    endif

         if ( button == 5 )
        MessageBox "Es gibt keine stärkeren Kreaturen mehr"
        Set questionState to 0
        return
    endif
    
    if ( button == 6 )
        Set questionState to 0
        return
    endif
endif
end

also: mit diesem script (es liegt auf einem activator) kannst du erst eine gegnergruppe nach stärke sortiert auswählen, danach den gegner und dann erscheint er hinter dir (ein gong-sound ertönt)
 
  • Like
Reaktionen: Travok32
Hab deinen Skript benutzt. Er zeigt mir aber zwei Fehlermeldungen. :cry:
Fehler 1: Skript my_trainingsscript
Script command "Ratte" not found on line 16.
"Kwama" "Alit" "Guar" "Kagouti" "Klippenläufer"

Fehler 2: Miss matched if/else/endif starting on line 14

Hier mein Skript: (hab ihn kopiert)
begin my_trainingsscript
short questionState
short button

if ( OnActivate == 1)
Set questionState to 1
Return
endif

if ( questionState == 0 )
Return
endif

if ( questionState == 1 )
MessageBox "Gegen wen wollt Ihr antreten?"
"Ratte" " Bär" "Truthahn" "Schlange" "Keinen"
endif
 
if ( button == 0 )
PlaySound, "bell3"
PlaceAtPC "rat" 1 512 1
Set questionState to 0
return
endif

if (button == 1 )
PlaySound, "bell3"
PlaceAtPC "BM_bear_black" 1 512 1
Set questionState to 0
return
endif

if (button == 2 )
PlaySound, "bell3"
PlaceAtPC "Cait_Farm_turkeyF" 1 512 1
Set questionState to 0
return
endif

if (button == 3 )
PlaySound, "bell3"
PlaceAtPC "A-DI-Snake2Baby" 1 512 1
Set questionState to 0
return
endif

if (button == 4 ) Set questionState to 0
return
endif

end
 
Wenn du eine Ratte mit "Ratte" rufen willst, muss auch eine Creature mit diesem Namen enthalten sein. (Das Original wäre glaube ich "Rat") Ansonsten wird das Script nicht finden, was es rufen soll.

Was die zweite Meldung angeht habe ich keine Fehler gefunden.
 
die ratte, welche ich gemacht hab (name arena_rat) existiert im originalspiel nicht. an dienem script kann ich aber keine fehler entdecken (kleiner tipp um platz zu sparen: benutz anstatt immer if und endif auch mal elseif, hab ich zwar nie gemacht, wegen der übersicht, spart aber mächtig zeit, platz und vllt auch performance.
kommen die fehler bei beiden scripts oder nur bei meinem? wenn ja, zumindest das erste scheint klar zu sein. das zweite dagegen...
 
Bräuchte zwei Skripts. Ihr werdet mich wahrscheinlich für den ersten schlagen. Hab aber keine Lust alle 110 Seiten nach einem ähnlichen Skript zu suchen. Der erste wird ist wahrscheinlich sehr leicht und ich nur zu blöd.:oops:

1. Bei aktivierung eines objektes einen Tagebucheintrag bekommen.

2. Wenn ein Tagebucheintrag vorhanden ist in einen anderen Raum kommen.
Das heißt: Ich gehe in ein Haus im meinetwegen Balmorastil. Dann geh ich raus bekomme einen Tagebuch eintrag. Wenn ich nun wieder reingehe, gelange ich in ein Haus im Telvannistil.

Vielen Dank im Voraus
 
1:
Code:
begin name

if ( onactivate==1 )
 journal xy z
endif

end

für xy setzt du den questnamen ein, für z den gewünschten index (z.b. 10)

2:
erstelle zwei gleich aussehende türen genau an der gleichen stelle. auf die ins hlaaluhaus legst du dieses script:

Code:
begin name

short state

if ( state==0 )
 if ( GetJournalIndex xy==z )
  disable
  set state to 1
 endif
else
 return
endif
Anm.: du kannst die variable auch weglassen, verbrachut aber mehr performance, da das tagebuch nonstop abgefragt und die üre gelöscht wird, obwohl sie das schon ist

auf die 2. tür setzt du folgendes:

Code:
begin name

short state

if ( state==0 )
 disable 
 set state to 1
elseif ( state== 1 )
 if ( getjournalindex xy== z)
  enable
  set state to 2
 endif
endif

end

achtung: es wäre möglich, dass ich die selle mit dem getjournalindex falsch in erinnerung hab. lad dir am besten killfetzers scriptbefehle-liste runter
Killfetzer hat übrigens auch einen scriptkurs im cs-unterforum gemacht. dort lernst du das wichtigste.
Ausserdem kannst du mal scripting for dummies googeln. Version 5 ist auf deutsch, allerdings fehlen die neuen möglichkeiten von bloodmoon.
 
Killfetzer hat nicht umsonst eine Übersicht hier gemacht;).Unter Literatur findest du nützliche Links zum Lesestoff,mitunter Morrowind Scripting for Dummies Version 9 in
Englisch und Version 5 in Deutsch.
 
  • Like
Reaktionen: BoneHead
Ich wollte mir mal eine kleine Kampfmod machen: einen schlauchähnlichen Tunnel mit Arenen. In jeder Arena soll ein Gegner mit einer einzigartigen fähigkeit sein.
Nun steck ich aber bei einem gegner fest. Dieser soll zuerst nicht kämpfen, aber wenn man näher kommt (er steht vor dem ausgang, dort ist eine barriere), soll um ihn herum ein feuerball entstehen und dann erst soll er angreifen. Wenn er stirbt, soll ausserdem die barriere zum ausgang verschwinden.
 
Ich denke, das müsstest du mit SetFight regeln können. Setze den Fight-Wert des Gegners auf eine geringe Stufe, so dass er dich nicht angreift. Dann setzte ihn per Script nach den Feuerbällen auf eine höhere Stufe.

Die Feuerball kannst du ja mithilfe eines Scripthalters (Licht, Stein, etc.) auslösen.
Code:
begin script
 
if ("player", GetNear* == 00) ; füge den gewünschten Wert hier ein.
      "Object_ID"->Explode Spell**, "Spell-ID"
endif
 
end
 
; * ich weiß nicht, ob es diese Funktion wirklich gibt, ich meine sie aber irgendwo gesehen zu haben - guck am besten im CS nach
; **benötigt Tribunal

Barriere (muss auf diese gelegt werden):
Code:
begin script
 
if ("Gegner-ID"->GetHealth == 0)
      disable
endif
 
end
 
Im editor scheint alles korrekt zu lauden, aber wenn ich die zelle betrete kommt das:

Script Error: EXPRESSION in bohe_ar_barriere01
Right eval

dies sind zwei unterschiedliche fehlermeldungen. Der feuerball kommt nicht und die barriere will auch nichht verschwinden.
Scripts:

Barriere:
Code:
begin bohe_ar_barriere01

if ( "BoHe_ar_daedrothfire"-> gethealth 0 )
    disable
endif

end
Gegner
Code:
begin boHe_ar_daedrothfire_script

if ( getdistance "player" < 512) ; füge den gewünschten Wert hier ein.
      ExplodeSpell, "BoHe_ar_daedroth_fireball"
endif
 
end
ach ja, muss der spruch auf ziel oder auf berühren sein?
 
Im ersten Script, müsste es da nicht "GetHealth == 0" heißen? Vielleicht muss die Lücke zwischen Pfeil und Gegner ID auch weg.

Im zweiten musst du vor "ExplodeSpell" noch die Object ID des Objektes, auf dem du den Script liegen hast legen, denke ich.
Müsste "Player" und "GetDistance" nicht umgetauscht werden, und ein Komma dazwischen kriegen?

GetDistance - das war's also!
 
Wenn nicht steht, wer etwas machen soll, machts doch das objekt auf dem das script liegt...
ein komma kommt da offenbar wirklich, aber umtauschen?
scriptbefehlliste schrieb:
"Object_ID"->GetDistance, "Object2_ID"
Liefert den Abstand zwischen den beiden Objekten in Editoreinheiten als float zurück.
Code:
if ( GetDistance, "Player" < 512 )
MessageBox, "BUMM!"
endif
 
Versuch es doch einfach mit der Object-ID - vielleicht klappt es dann ja.

Das mit dem umtauschen musst du probieren, ich hatte es nur irgendwie im Kopf... Kann auch so rum richtig sein.
 
habs mal mit "objektid".gethealth==0 versucht
fehler kommen keine, allerdings ist die barrier schon von anfang an weg...

Und der explodespell kommt irgendwann mittem im kampf... 512 ist wohl zu wenig?

/Edit: warum castet er den explodespell nicht immer wieder? so müstte es nach meinem (falschen) script ja geschehen...
 
Mit den Editoreinheiten musst du rumprobieren, was am besten passt.

Sonst versuche doch ein Script auf den Gegner zu legen. Ich denke so:
Code:
begin script
 
if ( GetHealth == 0 )
      diasble->"Barrieren_ID"
endif
 
end

Vielleicht klappts so. Sonst wüsste ich jetzt auch nicht weiter - aber ich meine solche Probleme selber schon mal gehabt zu haben... muss ich mal schauen.

Edit: Müsste zwischen "GetHealth", "==" und "0" nicht jeweils ein Leerzeichen sein? Und ich vermute der Punkt zwischen der ID und "GetHealth" ist ein Schreibfehler vom posten?
 
Zuletzt bearbeitet von einem Moderator: