Construction Set Disable, Enable und Script

MC Dirty

Neuankömmling
Moin, Leute.

Ich möchte in einem Plugin eine Person machen, die eine multiple Persönlichkeit hat. Zu diesem Zweck benutze ich zwei NPCs, die natürlich vollkommen gleich aussehen.
Ich möchte nun, dass an dem einen Tag der eine NPC da ist und am anderen der andere. Ich frage mich nun, ob es eine Funktion wie "Getdayspassed" gibt.
Ich habe die schon öfters gesehen, wenn ich mich nicht irre, aber in der Hilfe zum CS steht das nicht drin.
Wenn es die gibt, dann hätte ich schon ein passendes Script dazu, denke ich. Dieses bezieht sich jetzt auf den NPC, der am ersten Tag "Disabled" ist und am zweiten "Enabled", dann wieder "Disabled" usw.
Bei dem anderen NPC nimmt man einfach das "disable" in der ersten if-Abfrage weg.

begin my_script

short day
short doonce

if ( doonce = 0)
set doonce to 1
set day to GetDaysPassed
disable
endif

if ( day != GetDaysPassed )
set day to day + 1

if ( Getdisabled = 0)
disable
else
enable
endif

endif

end my_script

Meiner Meinung nach müsste das funzen.
Edit: Achja: Ein Problem habe ich noch. Der soll nur dieses Enable/Disable-Geändere machen, wenn der PC nicht in der selben Zelle ist. Das wird ein Haus sein.
 
Zuletzt bearbeitet:
Das Ding heisst "DaysPassed" ^^ Such mal danach,d as sollte in der Liste sein.

Und was das Script betrifft:
"day" ist eine globale Variable, das darfst du nicht als lokale verwenden!

Gruss
Kensen
 
Gut, dann nehme ich halt "Tag" oder, wenn das auch nicht geht, dann halt "kjasdjf". Wenn das eine globale Variable ist, fresse ich einen Besen ohne Senf.
Ansonsten vielen Dank.
Weiß jemand, wie ich das mache, dass dieses Disable/Enable-Rumgewurschtel nur passiert, wenn der Spieler in einer anderen Zelle ist?
Die Abfrage, ob er drin ist, ist ganz einfach. if (GetPCCell, House = 1). Wenn das wahr ist , ist er im Haus drin.
Mir kommt jetzt gerade eine Idee:

begin my_script

short Tag
short doonce

if ( doonce = 0)
set doonce to 1
set Tag to DaysPassed
disable
endif

if ( Tag != DaysPassed )

if (GetPCCell House = 0)

if (GetDisabled = 0)
disable
set Tag to Tag+1
else
enable
set Tag to Tag+1
endif

endif

endif

end my_script

Dann dürfte das Teil den Teil, der mit "if (Tag != DaysPassed)" anfängt, jeden Frame wiederholen, bis der PC endlich aus dem Haus raus ist. Dann erst macht er dieses Enable/Disable-Rumgewurschtel und erst dann wird auch "Tag" hoch gezählt.
Und dann hört er auch auf, diesen Teil zu wiederholen.
Allerdings muss er das nicht jeden Frame machen. Wie kann ich machen, dass er das z. B. nur jeden 20sten Frame macht?
Ich habe schon mal ein Warten-Kommando irgendwo gesehen, weiß aber nicht mehr, wie es heißt.
BTW: Funktioniert das Script oben so, wie ich es mir gedacht habe?
 
Ziemlich- nur auf eines musst Du unbedingt achten:

Du hast da stehen

"set Tag to Tag+1"

das ist problematisch-

schreibe es unbedingt mit Leerzeichen zwischen + und 1
ein Leerzeichen zwischen Tag und + wäre auch angebracht aber da ist es nicht so schlimm

Bei "set Tag to Tag +1" (ohne Leerzeichen zwischen + und 1) wird Morrowind sehr wahrscheinlich abstürzen und Du wirst Dich dumm und dusselig suchen da das Script ja offensichtlich keinen Fehler hat.

Achte unbedingt auf diese Leerzeichen wenn das + oder - kein Vorzeichen sein soll - ist kein Leerzeichen dazwischen wird es nämlich als Vorzeichen und nicht als Rechenzeichen interpretiert
 
  • Like
Reaktionen: MC Dirty
Moinsens.

Dieser Thread ist zwar schon alt, aber ich bin nach mehr als 4 Monaten wieder da und gewillt, bei dem Projekt weiterzuarbeiten.

Wie also ging das Warten-Kommando? Dass das Skript nicht jeden Frame überprüft, ob der PC aus dem Haus ist, sondern beispielsweise nur jeden zwanzigsten Frame?
Kann das Skript übrigens überhaupt laufen, wenn der PC nicht in der selben Zelle ist? Wenn das nicht möglich ist, dann ist das ganze Skript für'n Ar***. Bei "Scripting for Dummies" ist das irgendwie etwas unklar ausgedrückt...