Construction Set Der Scriptthread

Du musst dem Spieler erst die Gelegenheit zum Bestätigen geben.

Code:
begin my_grabstein_script

short state
short button

if ( state == 0 )
if ( OnActivate == 1 )
MessageBox "Text 1" "Weiter."
set state to 1
endif
endif

[code] begin maik_tavernscript

short state
short button

if ( state == 0 )
if ( OnActivate == 1 )
MessageBox "Ein Mann spricht euch an" "Zuhören."
set state to 1
endif
endif

if ( state == 1 )
set button to GetButtonPressed
if ( button == 0 )
set button to -1
set state to 2
MessageBox "Oh hallo, seid gegrüsst, was verführt euch in meine Taverne ?Ihr dürft hier gratis übernachten, ist das nicht toll ?" "Weiter"
endif
endif

if ( state == 2 )
set button to GetButtonPressed
if ( button == 0 )
set button to -1
set state to 3
MessageBox "Ihr dürft hier gratis übernachten, ist das nicht toll ?" "Weiter"
endif
endif

if ( state == 3 )
set button to GetButtonPressed
if ( button == 0 )
set button to -1
set state to 4
MessageBox "Wenn ihr Hunger oder Durst habt, sagt es mir dann bekommt ihr für ein wenig Geld eine Menge Essen !" "Weiter"
endif
endif

if ( state == 4 )
set button to GetButtonPressed
if ( button == 0 )
set button to -1
set state to 0
MessageBox "Fühlt euch wie Zuhause !"
endif
endif

end maik_tavernscript

Ist dieser Script richtig? Für eine Tür, oder soll ich es erstmal ausprobieren.. Ich bin in meinem PlugIn noch ganz am Anfang, erst ein paar Interiors und Exteriors..

if ( state == 1 )
set button to GetButtonPressed
if ( button == 0 )
set button to -1
set state to 2
MessageBox "Text 2" "Weiter"
endif
endif

if ( state == 2 )
set button to GetButtonPressed
if ( button == 0 )
set button to -1
set state to 3
MessageBox "Text 3" "Weiter"
endif
endif

if ( state == 3 )
set button to GetButtonPressed
if ( button == 0 )
set button to -1
set state to 0
MessageBox "Text 4"
endif
endif
[/code]
Code:
begin maik_tavernscript

short state
short button

if ( state == 0 )
if ( OnActivate == 1 )
MessageBox "Ein Mann spricht euch an" "Zuhören."
set state to 1
endif
endif

if ( state == 1 )
set button to GetButtonPressed
if ( button == 0 )
set button to -1
set state to 2
MessageBox "Oh hallo, seid gegrüsst, was verführt euch in meine Taverne ?Ihr dürft hier gratis übernachten, ist das nicht toll ?" "Weiter"
endif
endif

if ( state == 2 )
set button to GetButtonPressed
if ( button == 0 )
set button to -1
set state to 3
MessageBox "Ihr dürft hier gratis übernachten, ist das nicht toll ?" "Weiter"
endif
endif

if ( state == 3 )
set button to GetButtonPressed
if ( button == 0 )
set button to -1
set state to 4
MessageBox "Wenn ihr Hunger oder Durst habt, sagt es mir dann bekommt ihr für ein wenig Geld eine Menge Essen !" "Weiter"
endif
endif

if ( state == 4 )
set button to GetButtonPressed
if ( button == 0 )
set button to -1
set state to 0
MessageBox "Fühlt euch wie Zuhause !"
endif
endif

end maik_tavernscript

Ist der Script richtig ? Ist für eine Tür, ich möchte meinen PlugIn noch nicht testen, bzw. sind da grobe Fehler drin?

Kann mir einer einen Skript machen, wo das gleiche für ein Bett ist? ( Anderer Message Inhalt ) Vermutlich ist das das gleiche...

Kann mir auch einer einen Schmied - Skript machen ? Das man einen Hammer hat mit dem man einen Daedrischen Kürass ( oder anderes ) bekommt ?
 
Zuletzt bearbeitet:
Soweit ich es im Moment sehe ist das Script lauffähig. Allerdings hast du die eine Textbox zweimal drin (nur als Anmerkung).

Natürlich funktioniert es entsprechend auch für andere Objekte.

Wenn das Objekt mit dem Script darauf allerdings noch funktionieren soll, musst du unter dem letzten set state to 0 noch ein Activate einfügen. Ansonsten teleportiert die Tür dich nicht.
 
  • Like
Reaktionen: FlawlezZ
Ich hätte mal eine Frage: Wie kann ich eine Global Variable auf einen bestimmten Wert setzen, z.B. die DraugrKilled? Die würde ich nämlich gern auf den Wert 3 setzen..
 
ich hab malwieder keine ahnung von irgentwas. brauche verschiedene skripts:

1. es sollen 2 neue zauber ins menü eingefügt werden, sobald das spiel gestartet wird
2. der erste zauber soll einen skript aktivieren, der einen anderen zauber aktiviert, solange der spieler gegen ein objekt stößt (collisionPC oder sowas^^) dieser effekt soll stärker werden, wenn der spieler keine handschuhe/schuhe trägt.
3. der dritte zauber soll diesen skript wieder deaktivieren.

kann mir das "mal schnell" jemand erklären? blood & gore oder skripted spells geben da keine hinweise xD
 
Zu 1.) Mach dir mal ein normales Script (mit den AddSpell x und AddSpell y ) und füge das unter Gameplay -> Edit Start Scripts hinzu. So, wie ich das mal gehört habe, wird dieses Script dann automatisch im Spiel gestartet.

Zu 2.) Damit ein Zauber nen Scripteffekt auslöst, muss er einen kleinen unscheinbaren Effekt haben, der auf keinen Fall geblockt wird. z.B. 3 Sekunden Ausdauer um 1 Regenerieren. Außerdem musst du ein Script laufen lassen, was z.B. jede Sekunde 1x prüft, ob der Spieler unter der Wirkung deines Zauber liegt. Das geht mit "GetSpellEffects, SpellID".
Die Wirkungstärke kannst du ja mit ner Variable regeln. Um Gegenstandstypen zu prüfen, müsste ich selbst nochmal nachgucken.

Zu 3.) Ähnlich wie 2.) und mit StopScript

Hier noch ein Beispiel, um einen Zauber zu prüfen und zu behandeln:
Code:
float zeit
short gezaubert

; vergangene Zeit pruefen
set zeit to ( zeit + GetSecondsPassed )


; wenn unter einer Sekunden, dann nix
if( zeit < 1 )

  return


else

  set zeit to 0
      
  ;Wurde der Zauber ausgefuehrt?
  if( GetSpellEffects "verg_zauber1" )
    ;Ist der Zauber unbehandelt?
    if( gezaubert == 0 )
      
      ;Zauber behandeln und so markieren
      StartScript verg_s_zauber1
      set gezaubert to 1

    endif

  else
    ;wenn kein Zauber, dann bereit machen,
    ;dass er wieder behandelt werden kann
    set gezaubert to 0  
  endif
endif
 
Zuletzt bearbeitet:
Das Tragen von Handschuhen kannst du abfragen wie folgt

Code:
if ( Player->GetArmorType,6 == -1 )
  if ( Player->GetArmorType, 7 == -1 )
    ;Spieler trägt keine Handschuhe
  endif
endif
 
  • Like
Reaktionen: Verganon
danke erstma, aber aus kalle's skript bin ich absolut nich schlau geworden... und die erklärung war auch nicht verganongerecht :roll:

gibts da irgentwie ne möglichkeit mir da mal alles zu verklickern? außerdem will sich bei mir per skript kein zaubereffekt aktivieren. egal ob ich nun collision = 1 hab oder nicht. und wenn ich was aus der skriptliste von dir (killfetzer) benutze, meldet sich immer das CS und sagt das der befehl nicht vorhanden ist o_O kann mir da mal wer ein einfaches beispiel skript machen fürs anschalten und das sich der zauber bei getcollisionPC == 1 anschaltet und deaktiviert wird, wenn die collision = 0 ist?
 
Ich habe gedacht, dass du nach all der Modderei langsam keine Nooberklärungen mehr benötigst :p

Also hier ein Vorschlag:

1.) Du musst ein Script laufen haben, sowas wie dies hier:

Code:
short Wirkung

; Wenn der Zauber wirkt und der Spieler ObjectID
; berührt, soll die Wirkung ausgeführt werden
; In allen anderen Fällen nicht

if( GetSpellEffects "verg_zauber1" )

    if( "ObjectID"->GetCollidingPC )
        Set Wirkung to 1
    else
        Set Wirkung to 0
    endif

else

    Set Wirkung to 0

endif


if( Wirkung == 1 )
    ; Hier jetzt die Wirkung reinschreiben
endif
Wenn du dann "verg_zauber1" aussprichst, wird die erste Bedingung wahr, wenn innerhalb dieser Zeit der Charakter "ObjectID" berührt, ist auch die zweite Bedingung wahr und "Wirkung" wird auf 1 gesetzt. Dann wird der Code ausgeführt, der unten steht.
 
Zuletzt bearbeitet:
Anfrage:

Ist es möglich einen Script zu erstellen der zwischen zwei Lichtern hin- und herschaltet, abhängig von der Uhrzeit?

Ich würde gerne an einem Fenster soetwas habe, ein Tageslicht und eines für die Nacht.

Falls das gehen sollte, kann mir das jmd vorschreiben da ich mich mit Scripts nicht so aus kenne bitte.

MFG

Fairas
 
Ist es. Das steht sogar schon hier drin, ein script das zwischen 2 laternen wechselt, abhängig von der tageszeit.
musse einfach mal suchen.
mfg erc
 
  • Like
Reaktionen: Fairas
Hallo, ich hab auch mal ne Scriptfrage, und wäre dankbar wenn ihr mal nen Blick drauf werfen könntet:

Ich will einen Zauber als "Schalter" für einen Zaubereffekt benutzen; also wenn ich den Zauber Wirke und noch nicht unter dem Effekt stehe, werde ich mit dem Effekt belegt, und wenn ich den Zauber wirke während ich unter dem Effekt stehe wird dieser wieder Aufgehoben:

begin _Chamälionwechsel

short CStatus

if ( player->getspelleffects "_shadow_C" == 1 )
if CStatus == 0
player->addspell _shadow_C_aura
set CStatus to 1
endif
endif

if ( player->getspelleffects "_shadow_C" == 1 )
if CStatus == 1
player->removespell "_shadow_C_aura"
set CStatus to 0
endif
endif

end _Chamälionwechsel

_shodow_C ist mein Triggerzauber
_shadow_C_aura ist der Magische Effekt
CStatus dient zur Abfrage, ob ich schon unter Einfluß meines Effektes stehe

Mein Problem ist nun Folgendes: ich kann meinen Effekt zwar Aktvieren, nach aussprechen meines Zaubers werde ich mit dem Effekt belegt; wenn ich den Zauber jetzt jedoch wieder auspreche Passiert nichts mehr;
-->Wo liegt der Fehler?
 
begin _Chamälionwechsel

short CStatus

if ( player->getspelleffects "_shadow_C" == 1 )
if CStatus == 0
player->addspell _shadow_C_aura
set CStatus to 1
endif
endif

if ( player->getspelleffects "_shadow_C" == 1 )
if CStatus == 1
player->removespell "_shadow_C_aura"
set CStatus to 0
endif
endif

end _Chamälionwechsel
Könnte es daran liegen? Ich würde oben == 0 einsetzen.
 
@ Informatix

das dort die 1 steht, hat schon seinen Sinn: _shadow_C ist der Trigger-Zauber, wenn der Ausgelößt wird, also der Effekt auf dem Spieler liegt (und die Variable 0 ist), soll die fähigkeit _shadow_c_aura den Zaubern des Spielers hinzugefügt werden, was auch funktioniert; bloß wenn ich den Dauerzauber habe werde ich ihn mit diesem Script nicht mehr los.
 
Ein paar dinge:

1. Objekte mit eine _ anzufange fuehrt oft zu unerchlaeliche probleme. Manchmal funktionierts problemlos manchmal nicht. Ich wuerde die dinge umbennnen (z.B. Inf_shadow_C_aura ).

2. Dass glieche gilt auch wenn mann kein Klammer benutzt in einem if.

~if CStatus == 1~ sollte ~if ( CStatus == 1 )~ sein.

3. Da Ich bisher nur auf English gescriptet habe, kann Ich nicht sagen ob Umlaute in skript namen zu probleme fuehren koennen. Es ist vieliecht nur mein generele mistrauen der Morrowind scripting gegenueber, aber ich wuerde es persoenlich nicht tun.

4. Ich denke aber das haupt problem ist: Sie muessen warten bis das trigger effect vershscwindet before sie weiter gehen. Sonst shaltet das ding ein und aus mehmals.

Meine empfehlung:

Code:
begin Inf_Chamaelionwechsel

short CStatus

if ( Cstatus >= 10 )  ;warten bis das effect verschwindet
   if ( player->getspelleffects Inf_shadow_C == 0 )
      if ( Cstatus == 10 )
         set CStatus to 1
      else
         set CStatus to 0
      endif
   endif
   return
elseif ( CStatus == 0 )
   if ( player->getspelleffects Inf_shadow_C == 1 )
     player->addspell Inf_shadow_C_aura
     set CStatus to 10
   endif
elseif ( CStatus == 1 )
   if ( player->getspelleffects Inf_shadow_C == 1 )
      player->removespell Inf_shadow_C_aura
      set CStatus to 11
   endif
endif

end
 
Zuletzt bearbeitet:
  • Like
Reaktionen: dark_ossi
Zu deinen Anmerkungen zur Klärung:

1. Ein Unterstrich führt immer dann zu Problemen, wenn eine Zeile mit diesem anfägt. Deswegen hat ein Unterstrich in einer ID am Anfang nichts zu suchen.

2. Bei den Klammern kommt es auch auf die Leerzeichen an:
if ( state == 1 )

Werden diese nicht gesetzt, kann es zu Fehlern führen. Ein bestimmtes Muster dabei ist mir nicht aufgefallen.

3. Umlaute verursachen keine Probleme, wenn sie in Anführungszeichen stehen (zB. als Text in einer MessageBox). Trotzdem würde ich in IDs darauf verzichten.
 
Bei diesem Script brauch ich bitte hilfe. Das buch auf das sich das Script bezieht kann man nicht aufnehmen...

begin EI_Yellam_buch

short status
float timer

if (menumode == 1)
return
endif

if (onactivate == 1)
if (status == 0)

player->addspell, "EI_feuerschutz"

set status to 1
messagebox "Deine Haut fühlt sich an als sei sie aus Stein..."
EI_yellam_fels->move , x, -10000
activate
endif
endif
if (status == 1)
if (timer > 10)
SET timer to timer + getsecondspassed
player->removespell "EI_feuerschutz"
set status to 3
endif
endif

if (onactivate == 1)
if (status == 3)
player->addspell, "EI_feuerschutz"
set status to 1
ACTIVATE
endif
endif
end

Danke im vorraus
 
Das kann nicht funktionieren, weil das Script den Status "OnActivate" zweimal abfragt... des weiteren wäre es doch schön zu wissen, was du mit dem Ding bezwecken willst... ich hab versucht, es anhand des Scripts zu raten. Man kann das Buch im Menumodus generell nicht aufnehmen. Wenn du das willst, muß das Script weiter verändert werden - versuch das bitte mal und sag, obs geht (ich hab das blind geschrieben):

Code:
begin EI_Yellam_buch
short status
float timer

IF ( menumode == 1 )
 return
EndIF

IF (timer > 10)
 player->removespell "EI_feuerschutz"
 set status to 3
 set timer to 0
 return
ElseIF ( status == 1 )
 set timer to timer + getsecondspassed
EndIF

IF (OnActivate == 0)
 Return
EndIF
IF (status == 0)
 messagebox "Deine Haut fühlt sich an als sei sie aus Stein..."
 EI_yellam_fels->move , x, -10000
EndIF
IF ( status != 1 )
 player->addspell, "EI_feuerschutz"
 set status to 1
EndIF

activate

end
Grüße,

£exa