Skriptthread zum Creation Kit

@LittleIce: Gerne ;) Ich bin selbst noch am lernen von Papyrus und versuche meine (wenn auch noch bescheidenen) Erkenntnisse zu teilen.

@VolkerL: Verschwinden lassen verläuft analog zum Einfügen:
Code:
Reference Property pObject auto

pObject.disable(false/true)
Hier gilt wie bei enable() die Regel: wenn Du false eingibst, wird das Objekt einfach entfernt, bei true wird es immer durchsichtiger bis es ganz weg ist.

Zum Timer: Hier bin ich mir nicht 100% sicher, aber Du könntest es mal mit folgendem Code probieren:
Code:
Wait(sekunden)
Das hält das gesamte Script für die angegebene Zeitspanne an. Alternativ könntest Du auch eine Variable vom Typ Float definieren und dann in einer if-Verzweigung regelmäßig mit getSecondsPassed() addieren und dann halt in der if-Kondition abfragen, ob der Timer deine gewollte Zeit erreicht hat.
 
@Lord Albion
Ja, ja, da sprichst du mir aus der Seele, was das Lernen betrifft.
Skripten...ein ewiger Lernprozess für mich.
Ich bin froh, dass es hier im Forum Leute wie dich gibt, die uns diesbezüglich
tatkräftig zur Seite stehen.

@VolkertL

Eventuell einen für dich noch akzeptablen Lösungsvorschlag, soweit du
diesen nicht selbst schon kennen solltest.
Genau wie es Lord Albion schon beschrieb, solltest du dein Objekt auf
"Initially Disabled" setzen.
Nun erstellst du in deinen Questoptionen, unter dem Reiter "Quest Aliases",
einen Alias zu deinem benötigten Objekt.
Dort wiederum kannst du im Untermenü "Reference Alias", spezielle Einstellungen
für deinen erstellten Alias vornehmen.
Aktiviere die Option "Allow Disabled".
Zurück zum Reiter Quest Stages.
Gehe zu deiner Stage, die das Objekt erscheinen lassen soll und
füge den Eintrag - Alias_NamedesObjektes.GetReference().Enable() - hinzu.
Compile, fertig.
Der Eintrag wird in dein Quest-Hauptskript, automatisch übernommen.
Für ein langsames Erscheinen, wäre jedoch die vorgeschlagene Methode Lord Albions,
aber die zweifelsfrei elegantere Lösung.

MfG
 
danke euch beiden
der Wait Befehl bezieht der sich auf die Real Zeit oder auf die Zeit im Spiel.

Was ich möchte, ist das erst nach 2 Ingame Tagen etwas passiert
 
Halllo,

brauche wieder einmal Hilfe der Skriptprofis.
Eine Barriere muss zu einem bestimmten Zeitpunkt disabled werden.
Da sie den Durchgang zu einem Portal, in die Gemächer des Erzmagiers verschlossen hält,
sollte sie auch erst nach Beendigung der Vanillaquest "Das Auge von Magnus", ID MG08,
diesen frei geben und damit disabled werden.
Für Skripthilfen wäre ich sehr verbunden.

MfG
 
Zuletzt bearbeitet:
Was verstehst Du unter "bestimmter Zeitpunkt"? Solange Du keinen Angaben dazu machst kann man Dir nur die Skriptteile geben.

Code:
ObjectReference Property Portal auto
Quest Property MGQuest auto

if(MGQuest.iscompleted())
  portal.disable()
endif
 
Oh sorry für den vielleicht etwas irreführenden Ausdruck "bestimmt".
Der Zeitpunkt des disableten Objektes, sollte sich eben ganz klar auf
das Ende der Quest, "Das Auge von Magnus" beziehen.
Um über mein Portal nicht vorher in die Gemächer des Erzmagiers reisen
und eventuell die Quest damit beeinflussen zu können, würde ich es gern so abhandeln.
Im Prinzip ist dein Skript damit schon völlig ausreichend für mich.
Soweit erst einmal vielen Dank für deine Hilfestellung und Vorschlag.
Jedoch wird mir auch hier nicht das Skript kompiliert.
Daher meine Bitte, um einen evntuell alternativen Lösungsvorschlag.

MfG
 
Eine Alternative wäre, "ObjectReference Property Portal auto" im Questscript von MG08 einzufügen (und dann bei Properties Dein Portal anzugeben) und dann im letzten Queststage einfach Portal.disable() auszuführen. Problem ist hierbei natürlich, dass Du die Originalquest veränderst. Es wäre aber auf jeden Fall die bequemste Methode, wenn auch vielleicht nicht die eleganteste.
 
Hallo Lord Albion,

ja ich weiß.
Diese Lösung habe ich selbst schon in Betracht gezogen.
Dafür würde es sogar noch weitere Möglichkeiten geben, das Portal dort einzufügen.
Es wäre wirklich ganz einfach.
Wie du es aber selbst schon richtig bemerktest, müsste die Quest "technisch" beeinflusst werden.
Sie ist ja auch sehr umfangreich.
Möchte ich, vorsichtig ausgedrückt, lieber bleiben lassen.
Trotzdem Danke, für deine erneute Hilfe.

MfG
 
Die Quest an sich zu verändern ist ganz schlecht. Man sollte nie bereits bestehendes verändern, es sei denn, es gibt keine andere Möglichkeit.
Du sagtest, das Skript wird nicht kompiliert. Schau' Dir doch mal an, was der Compiler ausspuckt und versuch' es selber zu beheben oder schreib' es hier.
 
Die Quest an sich zu verändern ist ganz schlecht. Man sollte nie bereits bestehendes verändern, es sei denn, es gibt keine andere Möglichkeit.
Du sagtest, das Skript wird nicht kompiliert. Schau' Dir doch mal an, was der Compiler ausspuckt und versuch' es selber zu beheben oder schreib' es hier.

Deswegen sag ich ja: lieber nicht, auch wenns bequem ist. Was mir bei Deinem Code, Kahmul, noch nicht ganz klar ist, wodurch wird es ausgelöst? Weil an sich weiß das Script ja gar nicht wann es prüfen soll, ob die Quest fertig ist, oder irre ich mich?
 
Logisch, deswegen habe ich ja geschrieben Scriptteile. Ich wusste ja nicht, wann er es ausgelöst haben will. Er sollte es mMn nach einfach ein Skript mit OnLoad auf das Portal legen und fertig.

Code:
Scriptname <Scriptname> extends ObjectReference

Quest Property MGQuest auto

Event OnLoad()

if(MGQuest.iscompleted())
   disable()
endif

EndEvent
 
  • Like
Reaktionen: Little Ice
@Kahmul

In einer bestehenden Vanilla-Quest herumpfuschen, würde für mich natürlich nicht in Frage kommen.
Daher ja auch der Grund meiner Anfrage, hier über ein Skript, eine eventuell bessere Lösung zu finden.
Ich weiß, dass es für euch Profis nicht immer ganz einfach ist, uns Anfängern alles aus der
Nase ziehen zu müssen. Mit "Ende der Quest", nahm ich an, die benötigten Infos gegeben zu haben.
Vielleicht wäre ja hier noch der letzte Queststage-Eintrag wichtig zu nennen.
Ist übrigens Queststage 200.
Aber egal.
Dein Skript wurde kompiliert und funktioniert einwandfrei!
Also, großes Danke an dich für deine Geduld und Hilfe.

MfG
 
Hallo,
Also ich habe folgendes problem:
Ich möchte diesen script:
Code:
Scriptname LockRequirement extends ObjectReference
Event OnLoad()
blockactivation(true)
EndEvent
Event OnActivate(ObjectReference actionRef)
int locklevel = getlocklevel()
if(game.getplayer().getactorvalue("Lockpicking") < locklevel)
        debug.messagebox("You need lockpick skill " + locklevel + " to open!")
     blockactivation(true)
     return
 else
        blockactivation(false)
endif
EndEvent
FormList Property Containers  Auto
bei den objecten in der FormList Containers benutzen. Der script ist auch bei den objecten hinzugefügt, aber wenn man dann ein einzelnes object betrachted steht unter scripts Status:script inherited from parent.
Wie ist es nun möglich den script über den parent laufen zu lassen?

Noch mal ein bisschen allgemeiner:
Ich möchte das der script sich auf container bezieht. Ich weis nicht genau ob eine FormList dafür der richtige weg ist. Das haupt problem besteht halt darin, dass der script funktioniert wenn ich ihn auf ein bestimmtes objekt beziehe, aber nicht wenn ich ihn auf das "Base Objekt" des objektes setze.
Sprich:
Beispiel:
Setze ich den Script auf: Reference Editor ID: TreasBanditChest (00038b58) <- also exact die truhe die irgendwo steht.
Funktioniert der Script einwandfrei.
Setze ich den Script jedoch auf: Base Object: TreasBanditChest (0003AC21) <- also das allgemeine Object wo von es mehrere im spiel gibt.
Funltioniert der Script garnicht.

Okay es scheint so als hätte ich es hinbekommen.
Hier ist es für alle die ähnliche probleme haben:
Code:
Scriptname xx extends ObjectReference

FormList Property Containers Auto 
ObjectReference Containers

Event OnLoad()
blockactivation(true)
EndEvent
Event OnActivate(ObjectReference actionRef)
int locklevel = getlocklevel()
if(game.getplayer().getactorvalue("Lockpicking") < locklevel)
debug.messagebox("You need lockpick skill " + locklevel + " to open!")
blockactivation(true)
return
else
blockactivation(false)
endif
EndEvent
Sprich einfach:
Code:
FormList Property Containers Auto 
ObjectReference Containers
überden script packen :)
 
Zuletzt bearbeitet:
Hallo,

Für mein Modprojekt brauche ich ein Script, das an eine Truhe angehangen wird und bewirken soll, dass eine bestimmte Menge(Variable) Gold an jedem Fredas (also einmal pro Woche) in diese Truhe kommt. Hat jemand eine Idee, wie man das umsetzen könnte?

Danke schonmal,

mfg alien_seth
 
gibt es eigentlich inzwischen irgendwo eine auflistung von den Befehlen, die man eingeben kann? Ich such mir schon n wolf, weil ich die befehle, die ich haben möchte, nicht finde...
 
so nachdem ich verzweifle:
Wie zum donner kann ich den IsDead befehl ordentlich nutzen? Zuerst wird mir gesagt, das es keine Variable ist, dann wird mir gesagt, dass das in eine Funktion muss und dann geht der kram wieder von vorne los -_- kann ich bitte ein beispiel für die abfrage, ob ein undefinierter NPC tot ist haben?