Construction Set Der Scriptthread

Ich habe ein Problem mit der Funktion HitOnMe. Ich wollte diese verwenden, um einen Treffer gegen den Spieler zu registrieren.

Das Script liegt auf dem Angreifer, der auch eine bestimmte Waffe benutzt. Der entscheidende Teil sieht so aus:

Code:
if ( Player->HitOnMe "glass dagger" == 1 )
  MessageBox "Treffer"
endif

Allerdings funktioniert diese Konstruktion nicht, laut Dokumentation und verschiedenen Quellen sollte dieser Befehl aber funktionieren, also wo liegt mein Fehler?
 
hab das CS grad nicht zur Hand, aber hier mal die Standard-Vorschläge

- lass mal == 1 weg oder klammer das Argument links,
- muss man HitOnMe als Variable deklarieren?
- Script global laufen lassen

Code:
short HIT
set HIT to ( Player->HitOnMe "glass dagger" )
if (HIT)
  MessageBox "Treffer"
endif
 
  • Like
Reaktionen: Killfetzer
Allerdings funktioniert diese Konstruktion nicht, laut Dokumentation und verschiedenen Quellen sollte dieser Befehl aber funktionieren, also wo liegt mein Fehler?
Was genau passiert denn ingame eigentlich? Läuft dein Script und macht nur einfach nichts, oder wird dir eine Fehlermeldung vorgehustet?

Ich bin leider momentan unterwegs und gar nichts testen, aber ich glaube, IvanDaVile hat Recht und "Fernzugriff" auf die Funktion HitOnMe kann nur erfolgreich sein, wenn man das Ergebnis als eine lokale Variable im callenden Script puffert, bevor man sie auswertet... Frag mich nicht wieso, aber Morrowind hat in der Hinsicht einige recht skurile Macken - obwohl der CS-Compiler stumm schweigt und sich nicht beschwert, geschieht ingame nix - oder du kriegst 'nen Error. Hatte ich mal, als ich versuchte, mit irgendeiner Veriablen aus einer anderen Scriptreferenz direkt zu rechnen... oh, war das 'ne miese Idee. Es lief NIX, aber es kam auch kein Fehler. Ich wunderte mich nur, warum das Ergebnis am Ende immer NULL war :D
 
  • Like
Reaktionen: Killfetzer
Es passiert nichts. Also die Abfrage wird nie erfüllt.

Ich hatte es mit Leerzeichen, Anführungszeichen und Variablenkonstrukten in allen denkbaren Formen probiert, noch bevor ich gepostet hatte.

Inzwischen umgehe ich das und frage einfach das Leben des Spielers ab. An der betreffenden Stelle sollten kaum andere Gegner sein.
 
Hallo Scharesoft^^

Ich hoffe es stört nicht wen ich euch darum bette mir 2 Scripte zu geben.

Der 1. Script soll für bestimmte Monster arten benutzt werden
und zwar soll er dafür sorgen dass die Kreaturen zu einer gewissen Uhr zeit erst erscheinen. Ich will das manche Monster erst um 21Uhr bis 6Uhr morgens
zu treffen sind.

Der 2. Script könnte vielleicht schwerer sein (hatte schon mal die frage gestellt leider wahr der Script Fehlerhaft)
Ich möchte fragen ob jemand mir eine Falle machen kann die auf denn Spieler Zauberwirft also so eine art "Magisches Geschütz"
Der Letzte Script hatte funktioniert bis auf das er ununterbrochen feuerte ich möchte das die Falle alle 2 bis 3 Sekunden einen Zauber auf denn Spieler wirft.

Hier der alte script für die Falle
Script für Fallen

begin SpellCast

short istriggered

set istriggered to "shrine_trigger".triggered

if ( istriggered == 0 )
cast "fireball" player
set istriggered to istriggered - 1
set "shrine_trigger".triggered to istriggered
endif

end
 
Ich hätte auch mal wieder eine "kleine" Scriptfrage. Und zwar versuche ich etwas für einen neuen Char, dafür bräuchte ich aber ein Script das es ermöglicht auch ohne Tribunal zu deaktivieren der dunklen Bruderschaft quasi zu verbieten in einer bestimmten Zelle aufzutauchen.
Ist so etwas überhaupt möglicht?
 
Nein, das geht nicht man müsst dafür nämlich das "dbattackScript" deaktivieren.
Das geht schon, aber dafür muss es eben ein Script mit diesem Namen geben.
Entweder man bau selbst eines, dann überschreibt man das von Tribunal (schlecht) und Tribunal ist voraussetzung (willst du ja nicht).

EDIT: £exa hat natürlich Recht und ich kann wohl nicht richtig lesen, ich versuch mal dein Problem zu lösen (in Form eines Talismans der vor der Bruderschaft schützt, das Script kannst du dann auf irgend einen unsichtbaren Activator legen und in den betreffenden Zellen platzieren)
 
Zuletzt bearbeitet:
  • Like
Reaktionen: 1 Person
Entweder man bau selbst eines, dann überschreibt man das von Tribunal (schlecht) und Tribunal ist voraussetzung (willst du ja nicht).
Hm?

Wo schreibt Caffalor das denn? So wie ich das sehe, geht es darum das Attack-Script zu blocken, wenn der Spieler in einer bestimmten Zelle ist. Dass die betreffende Mod ohne Tribunal auskommen muß, steht da nicht. Also kann man das schon machen, indem man das über scriptrunning/stopscript/startscript löst... mit Bezug auf die Variablen von Tribunal freilich. Ein Problem wird dabei nur die inscript condition IF ( journalonce == -1 ), die nicht korrekt funktioniert, wenn das Script neu gestartet wird. Die verhindert nämlich, dass die globale Variable DBAttack abermals auf 1 gesetzt wird, wenn ein Angriff erfolg ist.

Was ich momentan nicht weiss, ist inwieweit diese Global später noch einen anderen Status als 1 haben kann. Das müßte man sich genau ansehen und ggfs. den Stand vorher buffern, wenn man das dbAttack Script stoppt und neu startet. Der Rest sollte dann eigentlich kein Problem sein.
 
  • Like
Reaktionen: 1 Person
Erstmal danke £exa, allerdings muss ich gestehen liest sich das für mich nicht sonderlich verständlich. Grade deshalb klingt es aber richtig.
Du könntest mir nicht zufällig das Grundgerüst bauen oder schon das komplette Script, wenn es nicht all zu schwer wird.
Ansonsten muss ich das halt außen vor lassen.
 
Du könntest mir nicht zufällig das Grundgerüst bauen oder schon das komplette Script, wenn es nicht all zu schwer wird.
Könnte ich vermutlich schon, aber ich bin im Moment ziemlich im Stress. Komme kaum dazu, meine eigenen Projekte voranzubringen. Außerdem hat sich Ivan jetzt ja anscheinend drangesetzt (s. Beitrag) - also kriegst du 'ne Lösung, da bin ich mir ziemlich sicher :)
 
ok hab das ganze jetzt durchschaut. die globale Var. DBAttack wird quasi nur für Dialoge benutzt und nur beim Betreten des Skaaldorfes verändert, da die wachen dort euch sonst nach Ebonheart schicken würden aber sagen sie kennen die Dunkle Bruderschaft nicht, kann man aber auch über Journal überprüfen wie weit der Quest gerade ist. Da man nicht umhinkommt das dbAttackScript anzuhalten (was auch passiert wenn man es verändert), kann man der Verlust der attackOnce Var. nicht verhindern. hier wird gespeichert wie oft der Spieler schon im schlaf angegrifen wurde (... ja komischer Name).
Diese ist nur dafür da die Chance eines weiteren angriffs nochmehr zu erhöhen.Also würde ich dass Skript einfach verändern undeine Abfrage der Art

Code:
if (NoBDAttackNow > 0)
return
endif

einfügen, über die man das dann steuern kann.
Außerdem würde ich noch ein kleines Extra Script bauen mit dem man das dbAttack "sicher" neu starten kann, da dieses sonst nachträglich eingefügten Script die GetPCSleep verwenden (hab mal eines gebaut um Levelup festzustellen) blockieren (der Spieler wird geweckt bevor ein anders Script weiss er schläft)

Geht natürlich auch einfacher, z.B so

if ( GetPCCell "Seyda Neen, Zensus- und Steueramt" == 1 )
return
endif ; original in dbAttackScript

if ( GetPCCell "Meine XXX-Zelle" == 1 )
return
endif ; einfügen für deine Zelle

kann man aber nicht so schön "nachbessern" wenn weiteren Zellen hinzukommen sollen.
 
  • Like
Reaktionen: 1 Person
@Ivan: Vielen dank für deine Mühe, werde das heute Abend direkt mal prüfen. Das letzte klingt am einfachsten, und da nur eine Zelle betroffen sein wird sollte es da auch keine all zu großen Probleme geben, im Zensus und Steueramt wird eh nie übernachtet.

@£exa: Ok, verstehe ich, kein Problem, trotzdem danke für deine Mühe.
 
war vielleicht nicht ganz deutlich, von den
Code:
if ( GetPCCell "Meine XXX-Zelle" == 1 )
return
endif ; einfügen für deine Zelle
Blöcken kann man soviele man will rein schreiben, was nach dem return kommt wird dann ignoriert (und return kommt dann wenn man in einer genannten Zelle ist). Funktioniert auch mir sowas wie "Gramfeste" und gilt dann überall dort.
 
  • Like
Reaktionen: 1 Person
Achso, aber selbst wenn, ich mach es mir leicht und änder trotzdem die Zelle um, kann ja eigentlich nicht viel schiefgehen, außer das das Zensus Steueramt mit der Dunklen Bruderschaft bekannstschaft machen könnte.
 
Ich habe eine Frage:

Kann man mit einem Script das Wetter so beeinflussen, dass es in gewissen Exteriozellen immer Nacht ist?

mfg Teatcher
 
Wir sind hier nicht beim Militär (dort zählt man Nacht als Wetter ;)), also kommst du so zumindet nicht ran.

Allerdings könntest du über ein Script die Tageszeit ständig auf eine Nachtzeit setzen. Das kann aber drastsche Folgen haben. Das geringste Problem dürfte sein, dass sich die Sterne und Monde nicht mehr bewegen. Viel schlimmer ist, dass sämtliche Funktionen, die Zeitverlauf detektieren (u.a. Händler und Wegfindungs-KI) nicht mehr funktionieren.
 
Allerdings könntest du über ein Script die Tageszeit ständig auf eine Nachtzeit setzen. Das kann aber drastsche Folgen haben. Das geringste Problem dürfte sein, dass sich die Sterne und Monde nicht mehr bewegen. Viel schlimmer ist, dass sämtliche Funktionen, die Zeitverlauf detektieren (u.a. Händler und Wegfindungs-KI) nicht mehr funktionieren.

Danke dir, deine Antwort hat mir weitergeholfen. :)
 
Leute unsichtbar machen die dann nachher wieder sichbar werden

Hi,
kann mir jemand einen script hierein schreiben der als erstes einen Npc unsichtbar macht und nach einem quest wieder sichtbar
 
Hallo mal wieder, ich hätte dann auch noch eine Frage..

Ich möchte, dass der Spieler, nachdem er einen beliebigen Speicherstand geladen hat, in ein Dungeon "teleportiert" wird. Das heißt, nachdem das Spiel gestartet ist, soll der Spieler sofort an einen bestimmten Ort in einer bestimmten Cell gebracht werden.

Wie genau funktioniert das? :D

Danke schonmal jetzt,

MadHatter :)
 
Hi,
kann mir jemand einen script hierein schreiben der als erstes einen Npc unsichtbar macht und nach einem quest wieder sichtbar

Geht ganz einfach.

Code:
begin my_verschwinde_script

short state

if ( state == 0 )
  Disable
  set state to 1
endif

if ( state == 1 )
  if ( GetJournalIndex "my_verschwinde_quest" == 100 )
    Enable
    set state to 2
  endif
endif

end

Das legst du dann auf deinen NPC. Natürlich musst du einen passenden Namen und Journalindex wählen.

Ich möchte, dass der Spieler, nachdem er einen beliebigen Speicherstand geladen hat, in ein Dungeon "teleportiert" wird. Das heißt, nachdem das Spiel gestartet ist, soll der Spieler sofort an einen bestimmten Ort in einer bestimmten Cell gebracht werden.

Du benötigst dafür mindestens Tribunal.

Code:
begin my_teleport_startscript

short state

if ( state == 0 )
  set state to 1
  Player->PositionCell "Zellenname" xpos ypos zpos zrot
  Return
endif

if ( state == 1 )
  set state to 0     ;diese Zeile nur, wenn der Teleport bei jedem Laden passieren soll
  StopScript "my_teleport_startscript"
  Return
endif

end

Wenn du dieses Script hast fügst du es unter Gameplay -> Edit StartScripts ein. Dieses Script wird automatisch nach jedem Ladevorgang ausgeführt.
 
  • Like
Reaktionen: Alvaro9