Skriptthread zum Creation Kit

Beim Compile spuckt der leider noch ein paar Fehlermeldungen aus... Ist mir leider noch etwas zu hoch.

Hier der Script:

Scriptname door1getunlocked extends ObjectReference

import game

ObjectReference Property Marker2 auto
Int health

Event OnInit()

health = getplayer().getav("health")
registerforsingleupdate(1)

EndEvent

Event OnUpdate()

if(health > getplayer().getav("health")
health = getplayer().getav("health")
getplayer().moveTo(marker2)
elseif(health < getplayer().getav("health") ; falls der Spieler sich heilt.
health = getplayer().getav("health")
endif

if(islocked())
registerforsingleupdate(1)
endif

EndEvent

Fehlermeldung:

c:\program files (x86)\steam\steamapps\common\skyrim\Data\Scripts\Source\door1s.psc(17,39): missing RPAREN at '\\r\\n'
c:\program files (x86)\steam\steamapps\common\skyrim\Data\Scripts\Source\door1s.psc(20,78): missing RPAREN at '\\n'

Auch beim zweiten Script gibt es Probleme:

Scriptname killallskeever extends ObjectReference

ObjectReference Property Door auto
Int i

Event OnDeath(Actor Killer)

i += 1
if(i == 5)
door.lock(false)
endif

EndEvent

c:\program files (x86)\steam\steamapps\common\skyrim\Data\Scripts\Source\skeever.psc(3,25): cannot name a variable or property the same as a known type or script
c:\program files (x86)\steam\steamapps\common\skyrim\Data\Scripts\Source\skeever.psc(10,7): lock is not a function or does not exist
c:\program files (x86)\steam\steamapps\common\skyrim\Data\Scripts\Source\skeever.psc(10,7): cannot call the member function lock alone or on a type, must call it on a variable

vielleicht lock duch getlockedlevel ersetzen?
 
Nein, ich habe im oberen Skript ein paar Klammern vergessen und im unteren die Property Door genannt. Da es aber einen Type mit so einem Namen gibt, darf ich es nicht so nennen. Deswegen beschwert er sich auch über Lock. Ich verbessere es oben.
 
  • Like
Reaktionen: blackHawk
*seufz* schon wieder eine Fehlermeldung (Door Script):

c:\program files (x86)\steam\steamapps\common\skyrim\Data\Scripts\Source\door1s.psc(10,0): type mismatch while assigning to a int (cast missing or types unrelated)
c:\program files (x86)\steam\steamapps\common\skyrim\Data\Scripts\Source\door1s.psc(18,5): type mismatch while assigning to a int (cast missing or types unrelated)
c:\program files (x86)\steam\steamapps\common\skyrim\Data\Scripts\Source\door1s.psc(21,5): type mismatch while assigning to a int (cast missing or types unrelated)

Script:

Scriptname door1getunlocked extends ObjectReference

import game

ObjectReference Property Marker2 auto
Int health

Event OnInit()

health = getplayer().getav("health")
registerforsingleupdate(1)

EndEvent

Event OnUpdate()

if(health > getplayer().getav("health"))
health = getplayer().getav("health")
getplayer().moveTo(marker2)
elseif(health < getplayer().getav("health")) ; falls der Spieler sich heilt.
health = getplayer().getav("health")
endif

if(islocked())
registerforsingleupdate(1)
endif

EndEvent

Noch eine Frage: Ist das Event on eigentlich zwingend notwenig oder erkennt das Programm sonst das script nicht?
 
Ist das Event on eigentlich zwingend notwenig oder erkennt das Programm sonst das script nicht?

Nein, natürlich nicht. Wir fügen es einfach so ein, weil uns nichts mehr einfällt. :roll:

Stell dir vor wir haben einen Wagen, du willst den Motor starten, damit du losfahren kannst, also kennt der Zündmechanismus deinen Motor in einer bestimmten Weise. Würde man die Bezeichnung entfernen, dann wüsste der Mechanismus nicht wohin er sein "Signal" senden soll, der Motor bleibt also einfach aus.


*seufz* schon wieder eine Fehlermeldung (Door Script):

Du hast doch deine Fehlermeldung, damit kannst du sie zumindest beseitigen, bis der nächste Fehler kommt. Dazu hast du die Zeilen direkt angegeben.

Es ist wie in der Fehlermeldung beschrieben der falsche Typ des Datentyps. Dein Health ist ein int, du erhälst aber durch dein Skript an entsprechender Stelle einen float zurück. Du versuchst also eine AA-Batterie in deiner Armbanduhr zu verbauen.

Versuche also mal an allen Stellen im Skript, wo du versuchst float in einen int zu speichern folgendes:
Code:
health = getplayer().getav("health") as int

MfG Master of Worlds
 
Zuletzt bearbeitet:
  • Like
Reaktionen: blackHawk
Script-Suche: Wasserfall per Schalter aktivieren

Hallo,
ich bin gerade dabei, mir ein Badezimmer für das Haus Vlindrel in Markarth zu bauen.
Dabei möchte ich einen Wasserfall (für die Dusche) mit einem Schalter an- und ausschaltbar zu machen.

Als Wasserfall hab ich den 'FXWaterfallThin128x128' und als Schalter den 'DweButton01'.

Ich hab versucht, sie über "EnableParent" zu verknüpfen, aber das geht anscheinend nicht.
Bei Oblivion musste man das mit einem Script machen, ist hier beschrieben:

http://forum.scharesoft.de/showthread.php?6136-Skriptthread-zum-Construction-Set/page276 (Beitrag ganz unten)

Aber bei Skyrim scheint das so nicht zu klappen (Die Papyrus Syntax hat sich geändert?), und ich hab auch nicht rausgefunden, wie man nun Objekte aktiviert.

Ich würde mich über Hilfe sehr freuen, bin nämlich noch ziemlicher Neuling im modden :)
 
Bei Oblivion musste man das mit einem Script machen, ist hier beschrieben:

http://forum.scharesoft.de/showthread.php?6136-Skriptthread-zum-Construction-Set/page276 (Beitrag ganz unten)

Aber bei Skyrim scheint das so nicht zu klappen (Die Papyrus Syntax hat sich geändert?)
Ja, das trifft den Sachverhalt ziemlich genau. Die Papyrus-Version des verlinkten Skripts lautet:
Code:
ScriptName Wasserschalter extends ObjectReference [I];Die Datei muss genauso heißen wie das Skript![/I]

ObjectReference Property Wasser1 Auto
ObjectReference Property Wasser2 Auto
[I];und noch viele mehr[/I]
bool act = false [I];ist das Wasser an?[/I]

Event OnActivate (ObjectReference akActionRef)
if (act)
   Wasser1.enable()
   Wasser2.enable()
   [I];und noch viele mehr[/I]
   act=false
elseif (!act)
   Wasser1.disable()
   Wasser2.disable()
   [I];und noch viele mehr[/I]
endif
EndEvent
Alles nach ";" sind Kommentare (Können stehen gelassen werden, da Papyrus nach ";" alles bis zum Zeilenende ignoriert)
Wenn du Erfahrung mit Oblivion-Skripts hast, ist diese Seite wahrscheinlich interessant für dich: http://www.creationkit.com/Differences_from_Previous_Scripting
 
  • Like
Reaktionen: Jan R
Wasserfall-Script

Vielen, vielen Dank, Royal_Flush, hat mir sehr geholfen :good:

Der Wasserfall funktioniert jetzt so, wie er soll.
Dass das Script den gleichen Namen wie der Schalter haben muss, war mir nicht bewusst.
Ich hab bei Oblivion zwar noch nicht gescripted, aber trotzdem interessanter Link.
Papyrus scheint mir ähnlich wie Java zu sein (machen wir grad in der Schule).

Jan

PS: bei deinem Script hat im "elseif" noch die Zeile
act=true
gefehlt, deswegen ging der Wasserfall erst nicht mehr an. ;)
 
Einige Zeilen kannst du dir schenken, da sich die zweite Wasserreferenz mittels "Enable Parent" an die erste hängen lässt. Die Object Referenz kann ausserdem mittels LinkedRef direkt an den Schalter gehängt werden. Dann ist der Switch mehrfach verwendbar.

Code:
ScriptName Testskript extends ObjectReference

ObjectReference Property Wasser1 Auto Hidden

Event OnActivate (ObjectReference akActionRef)
Wasser1 = GetLinkedRef()
if (Wasser1.IsDisabled())
   Wasser1.enable(True)
else
   Wasser1.disable(True)
endif
EndEvent
 
Stimmt, mit EnableParent hab ich auch die Wasserfall-Sounds an die Wasserfälle selbst gehängt, da hier die "enable"-Funktion im Script nicht geht.
Zu deinem Code:
Warum steht nun hinter "ObjectReference Property Wasser1 Auto" ein "Hidden" ?
Und warum braucht die "enable" - Funktion hier ein "True" ?
Achja und wie kann man bereits erstellte Scripts wieder löschen?

Fragen über Fragen :-D
 
1)Damit wird im Propertys Window diese ausgeblendet. Dadurch kommst du nicht in Versuchung eine feste Referenz dran zuhängen

2)Braucht sie nicht. Diese setzt nur das "Fadding" des Objekts auf an. D.h. sie Ploppt nicht einfach in die Welt.

3)Lösche sie aus dem Ordner Scripts und Scripts/Source.
 
Ich habe mal eine Frage zu dem Befehl placeAtMe:
In Oblivion führte dieser Befehl zu einer Aufblähung des Savegames und es wurde empfohlen, ihn nicht zu benutzen, wie sieht das ganze in Skyrim aus? Kann man ihn dort gefahrlos benutzen oder wird auch hier abgeraten, placeAtMe zu benutzen?
 
Ich melde mich mal auch mit einem Problem:

Ich möchte folgendes Szenario haben: Der NPC soll bei einer bestimmten Dialogoption den Spieler angreifen und gleichzeitig soll die Faction des NPCs dem Spieler feindlich gesinnt sein. So im Stile von "Jetzt sterbt Ihr!" und alle fangen ein, auf den Spieler einzuprügeln.

Das Problem ist, dass die Paypyrus Fragment Skripte, die ich direct im TopicInfo-Fenster eingeben kann keine Properties erlauben (zumindest kann man sie nicht wie gewöhnlich einfügen) und ich somit nicht weiß, wie ich auf die Faction zugreifen soll um SetReaction(...) aufzurufen.
Wenn ich in dem Fenster rechts ein eigenes Script einfügen will, habe ich das Problem, dass es anscheinend kein Event gibt, dass getriggert wird wenn die Zeile zu Ende ist.

Ideen?

Edit:
Ich habe mal eine Frage zu dem Befehl placeAtMe:
In Oblivion führte dieser Befehl zu einer Aufblähung des Savegames und es wurde empfohlen, ihn nicht zu benutzen, wie sieht das ganze in Skyrim aus? Kann man ihn dort gefahrlos benutzen oder wird auch hier abgeraten, placeAtMe zu benutzen?
Mir ist nichts derartiges bekannt und auch auf der Seite im CreationKit-Wiki steht kein Hinweis. Also ich würde jetzt mal ohne Gewähr sagen, dass es kein Problem gibt. Du kannst ja mal einen groß angelegten Test machen ;)
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Draconis
Mir ist nichts derartiges bekannt und auch auf der Seite im CreationKit-Wiki steht kein Hinweis. Also ich würde jetzt mal ohne Gewähr sagen, dass es kein Problem gibt. Du kannst ja mal einen groß angelegten Test machen

Netter Trugschluss.
Dass Problem besteht nach wie vor. Also sparsam einsetzen. ;)
 
Das ist aber nicht so gut, ich habe mir gerade mal den Script von so einem Hund in Flammen, der explodiert, angesehen, Flammender Diener, oder so ähnlich, und dort wird der placeAtMe-Befehl verwenden. Das heißt also, dass sich der Save jedesmal aufbläht, sobald ich diesen Zauber einsetzte? Das gleiche dürfte dann auch für Fallen gelten (kenne jetzt nicht das Script, aber wo Feuer aufkommt, wird wohl der placeAtMe-Befehl für den Effekt verwendet werden.
 
Das Thema interresiert mich auch, gibts da irgendeinen vernünftigen Ersatz für 'markfordelete' ? Wenn nach dem disable die Funktion 'delete()' verwendet wird z.B.?
 
Das ist aber nicht so gut, ich habe mir gerade mal den Script von so einem Hund in Flammen, der explodiert, angesehen, Flammender Diener, oder so ähnlich, und dort wird der placeAtMe-Befehl verwenden. Das heißt also, dass sich der Save jedesmal aufbläht, sobald ich diesen Zauber einsetzte? Das gleiche dürfte dann auch für Fallen gelten (kenne jetzt nicht das Script, aber wo Feuer aufkommt, wird wohl der placeAtMe-Befehl für den Effekt verwendet werden.

Solange man es nicht exzessiv verwendet dürfte es nur halb so wild sein. Bethesda verwendet diese Funktion ja selber. MarkForDelete wirkt dem außerdem entgegen. So werden die Nirnwurzfunzeln ja auch wieder aus dem Save entfernt.

gibts da irgendeinen vernünftigen Ersatz für 'markfordelete'

Was ist denn an MarkForDelete so schlecht? Dies weist die Engine an, das entsprechende Flag zu Löschung des Objekts beim nächsten CleanReset zu setzten.
 
Was ist denn an MarkForDelete so schlecht? Dies weist die Engine an, das entsprechende Flag zu Löschung des Objekts beim nächsten CleanReset zu setzten.

Nix ist daran schlecht, hab die Funktion in den Vorgängern ja auch verwendet, glaube aber das es sie bei Skyrim abgesehen von der ingameconsole nicht mehr gibt.
 
Hey,
leider hab ich mir bei dem wenig script-üben ein script überschrieben.

Ich wollte fragen ob mir jemand den script geben kann. "JailQuestPlayerScript"
Wäre klasse xD