Construction Set Der Scriptthread

Dieser script soll bewirken, dass die person dort wo sie ist verschwindet und woanders auftaucht...
BEGIN EI_shekre_script_1
short status

if (getjournalindex"EI_experte" == 20)
if (cellchanged == 1)
if (status == 0)
"EI_shekre"->positioncell, 4009, 4108, 14770, 300, "Elfen-Insel, Rodhers Hütte"
set status to 1
endif
endif
endif

end

Im moment passiert einfach nichts...
 
Dieser script soll bewirken, dass die person dort wo sie ist verschwindet und woanders auftaucht... Im moment passiert einfach nichts...
Das wundert mich nicht...

...Scripts auf NPCs sind lokal, sie laufen nur, wenn sich die NPC in Prozessweite befindet (du mußt also in der gleichen Interior sein, wie die NPC)... das "getjournalindex == xx" kann das Problem sein, vielleicht nimmst du lieber ">=" statt "==" und dann ist da noch ein "cellchanged" drin, das kann auch zum Problem beitragen. Ich weiss schliesslich nicht genau, wo du das Journal hochsetzt.

OK, wenn du das über einen Journal-Entrag steuern willst, dann muß ja dieser Eintrag irgendwo gesetzt werden. Setze den PositionCell-Befehl einfach direkt hinter den journal-Befehl und es wird funktionieren.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Darien
Den Journal-Eintrag bekommt man wie so häufig im Gespräch und dann soll die Person, mit der ich gesprochen habe im angegebenen Haus erscheinen und (selbstverständlich) am vorheriegen ort verschwinden.
Ist es mir deiner Idee nicht so, dass er sobald ich den Journal eintrag erhalte verschwindet, also direckt im Gespräch einfach weg ist...?
Hab im Moment cs nicht verfügbar, kann es deshalb nicht ausprobieren...
Aber Danke für deine Mühen
 
Cellchanged funkioniert in dem cell wo der spieler eintritt nicht in dem dass er verlaesst. Deshalb funkionierts nicht.

Fuer diessen effekt ist es normalaweise einfacher 2 identische npc's zu shaffen, EI_shekre_A und EI_shekre_B platzier beide und dann enable und disable benutzen. Etwa so:

fuer EI_shekre_A

Code:
Begin EI_shekre_script_1

if ( getdisabled )  ;braucht Tribunal
  setdelete 1
endif

if ( getjournalindex "EI_experte" >= 20 )
   if ( cellchanged == 1 )
      disable
   endif
endif

end

fuer EI_shekre_B

Code:
Begin EI_shekre_script_2
short status

if ( status == 2 )
   return
endif

if ( status == 0 )
   disable
   set status to 1
elseif (status == 1 )
   if ( getjournalindex "EI_experte" >= 20 )
        enable
        set status to 2
   endif
endif

end
 
Oder du nimmst einfach ein globales Script und beendest es nach dem Teleport wieder.

Dazu startest du dass Script im Dialog:
StartScript "my_npc_teleport_script"

dieses sieht dann wie folgt aus:

Code:
begin my_npc_teleportscript

short state

if ( state == 0 )
  if ( GetPCCell "Zelle wo NPC raussoll" == 0 )
     set state to 1
     my_NPC->PositionCell xpos, ypos, zpos, zrot, "Zelle wo NPC hinsoll"
  endif
endif

if ( state == 1 )
  StopScript "my_npc_teleport_script"
endif

end
 
Ist es mir deiner Idee nicht so, dass er sobald ich den Journal eintrag erhalte verschwindet, also direckt im Gespräch einfach weg ist...?
Ja, das wäre so... jedenfalls wenn der Journaleintrag direkt im Gespräch mit der zu portierenden NPC selbst gesetzt wird. Andernfalls wäre es die einfachste Lösung, da sie keine weitere Aktion deinerseits erforderlich macht.

Für deinen Fall würde ich Killfetzers Vorschlag mit einem globalen Script nutzen. Wenn du solche Repositionierungen mit mehreren NPCs machst, geht das am stilvollsten innerhalb eines einzigen globalen Scripts, das ständig läuft und dabei mehrere Journale abfragt, um die NPCs passend zu verschieben.
 
So, Leute, ich melde mich auch wieder einmal zurück...

Und da hab ich promt eine Mod angefangen wo ich wahrscheinlich ein einziges Script brauche und daher jetzt ne Anfrage stelle. Und die lautet wie folgt...

Ich brauche ein Script das ich auf eine Person legen kann. Ich hab nen Interiorbereich mit vielen Türen/Häusern. Und wenn ich jetzt in diesen Bereich gehe will ich das mich irgendein Typ angreift. Währenddessen müssen alle Türen verschlossen sein, damit man gegen den Gegner kämpfen MUSS. Es soll keinen Ausweg geben. Sobald der Typ gekillt ist sollen sich ALLE Türen wieder öffnen. Kann mir vielleicht jemand so ein Script geben?

mfg.
 
Das ist im Grunde sehr einfach... allerdings würde ich das mit 2 Scripts lösen. Eines für die Türen (ich nehme an, es reicht, wenn nur Load Doors zu anderen Zellen verschlossen werden) und eines für die NPC, das den Angriff steuert.

Eine Frage habe ich zunächst - wie sieht es mit Teleportzaubern aus? Soll das auch blockiert werden?
 
Jo, so was bräuchte ich...Es gehen auch 2 Scripts..Kann mir vielleicht jemand diese Scripts schreiben? Wird auch erwähnt in der Mod..

thx
 
Mit diesen skript wird der player den cell nicht verlassen koennen. Egal wie der player den cell velaesst ( tueren, teleporting, konsol ) wird er sofort zurueckgezogen.

Code:
Begin emc_trap_script

if ( GetPCCell Cell_ID == 0 )
   player -> PositionCell xpos, ypos, zpos, zrot, Cell_ID
   messagebox  "Starkes Magie zieht sie zuruek. Sie duerfen diesen platz nicht verlassen bis deinen Gegner tot ist."
endif

end

Diesen skript soll auf der gegner gesetzt.

Code:
Begin emc_trap_gegener_script

short status

if ( status == 0 )
   if ( gettarget player )
      startscript emc_trap_script
      set status to 1
elseif ( status == 1 )
   if ( ondeath )
      stopscript emc_trap_script
      set status to 2
endif

end

Ich weiss nicht ob ger gegner sofort angreifen soll oder erst nach einem gespraech mit dem player oder wenn der player etwas nimmt, oder sonst was. Egal wie es anfaengt, sobald er eingreift wird der trap gesprungen. Fuer den fall dass der player sneak benuzt und den gegner toetet ohne dass der gegner angreift wird der trap einfach nicht gasprungen.

Als Option koennen sie diesen skript auf die tuere platzeiren. Ohne diesen skript, wenn der player einen load tur benutzt wird er erst raus aus den zelle dann wieder zurueck gezogen, wie beim teleport. Mit diesen skript wird die tuere einfach nicht funkionieren.

Code:
Begin emc_trap_tur_script

if ( menumode )
  return
endif


if ( OnActivate )

   if ( ScriptRunning emc_trap_script )
      Messagebox "Diesen Tur ist magisch verschlossen bis deinen gegner tot ist"
   return
   else
      activate
   endif
endif

end

Die messageboxen in ersten und dritten skript koennen sie ruhig aus lassen wenn sie wollen.
 
nochmal zu Killfetzer:
Es funktioniert nicht...
Der Npc verschwindet nicht...
Oder auch an andere die vielleicht wissen wie das Problem zu lösen ist...
hier
 
Zuletzt bearbeitet:
Mit diesen skript wird der player den cell nicht verlassen koennen. Egal wie der player den cell velaesst ( tueren, teleporting, konsol ) wird er sofort zurueckgezogen.

Code:
Begin emc_trap_script

if ( GetPCCell Cell_ID == 0 )
   player -> PositionCell xpos, ypos, zpos, zrot, Cell_ID
   messagebox  "Starkes Magie zieht sie zuruek. Sie duerfen diesen platz nicht verlassen bis deinen Gegner tot ist."
endif

end

Diesen skript soll auf der gegner gesetzt.

Code:
Begin emc_trap_gegener_script

short status

if ( status == 0 )
   if ( gettarget player )
      startscript emc_trap_script
      set status to 1
elseif ( status == 1 )
   if ( ondeath )
      stopscript emc_trap_script
      set status to 2
endif

end

Ich weiss nicht ob ger gegner sofort angreifen soll oder erst nach einem gespraech mit dem player oder wenn der player etwas nimmt, oder sonst was. Egal wie es anfaengt, sobald er eingreift wird der trap gesprungen. Fuer den fall dass der player sneak benuzt und den gegner toetet ohne dass der gegner angreift wird der trap einfach nicht gasprungen.

Als Option koennen sie diesen skript auf die tuere platzeiren. Ohne diesen skript, wenn der player einen load tur benutzt wird er erst raus aus den zelle dann wieder zurueck gezogen, wie beim teleport. Mit diesen skript wird die tuere einfach nicht funkionieren.

Code:
Begin emc_trap_tur_script

if ( menumode )
  return
endif


if ( OnActivate )

   if ( ScriptRunning emc_trap_script )
      Messagebox "Diesen Tur ist magisch verschlossen bis deinen gegner tot ist"
   return
   else
      activate
   endif
endif

end

Die messageboxen in ersten und dritten skript koennen sie ruhig aus lassen wenn sie wollen.

Thx, für das Script...Ich weiß nicht obs schon so passt aber ich will halt das der Gegner gleich angreift und dadurch das Script ausgelöst wird...

Und wo muss ich das erste Script hintun? Auf die Türen?
 
Zuletzt bearbeitet:
nochmal zu Killfetzer:
Es funktioniert nicht...
Der Npc verschwindet nicht...
Oder auch an andere die vielleicht wissen wie das Problem zu lösen ist...
hier

Ich bin nicht 100% sicher aber es koente daran liegen das der script gestoppt wird in gliechen frame als der position command.

versuch so:

Code:
begin my_npc_teleportscript

short state

if ( state == 0 )
  if ( GetPCCell "Zelle wo NPC raussoll" == 0 )
     messagebox "Test der npc soll jetzt in dem neuen platz sein."
     set state to 1
     my_NPC->PositionCell xpos, ypos, zpos, zrot, "Zelle wo NPC hinsoll"
     return
  endif
endif

if ( state == 1 )
  StopScript "my_npc_teleport_script"
endif

end
Ich habe auch ein test message addiert. Das wird zeigen ob der problem in skript liegt oder ob das Skript nicht richtig gestartet wird. Sie sollten den Message sehen sobald Sie dem Cell mit dem NPC verlassen. Wenn Sie das Message sehen und der NPC nicht verschwindet dann gibt's ein problem mit dem Skript. Wenn Sie das Message nicht sehen liegt es hochst wahrshceinlich an den script start.
 
  • Like
Reaktionen: Darien
Thx, für das Script...Ich weiß nicht obs schon so passt aber ich will halt das der Gegner gleich angreift und dadurch das Script ausgelöst wird...

Und wo muss ich das erste Script hintun? Auf die Türen?

Im Construction set fuer den Gegner, setzt der fight setting (in AI button) auf 100. Dann wird der Gegner sofort angreiffen.

Das erste Skript soll auf nichts hingetan. Es wird von zweiten als global gestartet und gestoppt.
 
Also ich habe gleich mal mehrere Fragen die ich einfahc mal alle hier stelle da es meistens Scriptfragen sind von denne ich null ahnung habe.

1. Gibt es einen Script bei dem Mann zwischen Charaktern tauschen kann also wenn man z.B. eine Gruppe von 5 Leuten hat die ienem Folgen das man dann z.B. in den Heiler tauschen kann wenn der eigene Charakter fast tot ist und den schnell heilen.

2. Wie heißt der Script / wie geht der Script mit dem etwas nach einer anderen sache passiert? also z.B. erst nachdem Dagoth Ur tot ist??? Ist sicher total einfach aber ich hab wie gesghat keien ahnung.

3.Dann noch ein Script das bestimmte Charakter dem Spieler folgen und wenn der Charakter den man z.B. spielt nurnoch eine bestimmte HP Leben hat der iene aus der Gruppe jez einfach ma der Heiler ihn dann automatisch heielt.

4. Das wenn man vor Lava tritt etwas eingeblendet wird wo steht "Ihr tretet vor der Hitzte der Lava zurück da ihhr sonst verbrennen würdet" und dann am besten noch gleich wo fonde ich ne Bariere ( unsichtbar ) im CS auf die ich dne Script legen wollte???

5. Frage ich jez der einfachhalthalber acu heinfach ma heir
Gibt es n Mod bei dem große Knochen eingefügt werden? aklso die man im CS dann noch einfügen msus aber so das die aussehen wie Drachenknochen?

6. Dann noch einen Script für eine Fackel erstmal wie kann ich dne Radius erhöhen das die Fackel in inem größerem umkreis lecuhtet? UND ZUM sCRIPT Da bräcuhtei ch einen der alle Monster wenn man die Fackel trägt in einem bestimmtem umkreis fliehen lässt? ( aber nur in der Nacht)

So noch eien Frage ^^ Sind meine WÜnsche möglich? Fals ja wäre einer so nett mir die Scripts zu schreiben und mir zuzuschicken?
 
1. Unmöglich.

2. Wie genau meinst du das jetzt? Normalerweise verwendest du in jedem Script eine Abfrage (if-Bedingung), um zu überprüfen wann etwas passiert ist.

3. Ja, ist möglich. du kannst das mit den Befehlen AIFollow, GetCurrentHealth und Cast erreichen, allerdings da du scheinbar nichts über das Scripten weißt, solltest du etwas genauer beschreiben was du willst.

4. Du erstellst einen neuen Activator mit dem Mesh EditorMarkerBox.nif (oder so ähnlich; das ist die gesuchte unsichtbare Wand). Auf den legst du folgendes Script:

Code:
begin my_lavaschutz_script

short doOnce

if ( doOnce == 0 )
if ( GetCollidingPlayer == 1 )
MessageBox "Ihr tretet zurück..."
set doOnce to 1
endif
else
if ( GetCollidingPlayer == 0 )
set doOnce to 0
endif

end

5. Abgesehen davon, dass es hier nicht reingehört, kenne ich keinen solchen Mod.

6. Den Radius kannst du direkt bei der Lichtquelle einstellen, dazu brauchst du kein Script. Alle Monster zu vertreiben ist nicht möglich. Du könntest die Fackel höchstens alle paar Sekunden einen Untoten vertreiben Zauber aussprechen lassen.
 
  • Like
Reaktionen: 1 Person
Also das mit 3 meine ioch so wei bei WoW. Bitte keine kommentare jetzt. Ich habe mir das so vorgesteltl bie WoW sind es ja richtige Spieler die dnme Charakter spielen aber da das bei WoW ja nur NPCs sind wollte ich das so haben. Bei WoW heilen die Heiler ienen wenn man nciht merh genug Leben hat und beim nächsten Angriff sterben würde. UNd das wollte ich mitm Script auf Morrowind übertragen da ich von script aber nix verstehe hab ich hier gefagt. Also das ich kämpfe mit meinem Char jez gegen n übermächtigen Gegner habe aber n Heiler im Gepäck ( net wörtlich gemint ) also ein NPCs der auf Heilen was weiß ich spezialisiert ist und mich imemr mti starken Heielzauebrn belegt wenn ich kurz vorm Tot bin. So wollte ich das haben gibt es da ne möglcihkeit?

ZU 5 ja wusste ich aber hab tortzdem mal heir gefragt ging einfach schneller xD

2 das m,eine ich so das es erst möglich ist eine Höhle zu betreten nachdme Dagoth Ur getötet ist. Also du läufst da hin wo die höhle sien müsste mmm nix is schade dann läufst du zu dagoth ur killst den läufst wieder da hin wo die höhkle sien müsste und siehe da das is die höhle so meinte ich das
 
Zu 3:
Ja, das geht..recht simpel sogar.
Ein Scriptbeispiel mit einem Script, das Du auf den jeweiligen Heiler legst:
Code:
if ( Companion == 1 )
 if ( GetDistance Player <= X )
  if ( Player->GetCurrentHealth <= Y )
   Cast "Z" Player
  endif
 endif
endif
..wobei X die maximale Entfernung zwischen Heiler und Spieler, Y die maximale HP des Spielers ist, ab der der Heiler heilt und Z die ID des Spells (also Heilzaubers) ist, bei dem der Heiler dann heilt.

Zu 2:
Das ist auch recht simpel. Wenn eine Höhle gar nicht erst auftauchen soll, bevor etwas nicht erledigt wird, könnten dafür die Befehle disable und Position bzw PositionCell genutzt werden. Also etwa so:
Code:
if ( GetDisabled == 0 )
 if ( GetJournalIndex X <= Y )
  Disable
 endif
elseif ( GetDisabled == 1 )
 if ( GetJournalIndex X >= Z )
  enable
 endif
endif
Wenn also der Journalindex von X kleiner oder gleich Y ist, sieht man die Tür nicht (sofern Du das auf eine Tür legst). Wenn der Journalindex dann aber mindestens Z erreicht, taucht sie auf.
Ich hoffe, das hilft Dir.^^
 
Zuletzt bearbeitet:
  • Like
Reaktionen: 1 Person