Skriptthread zum Creation Kit

Code:
(32,14): SetName is not a function or does not exist

GetName und SetName sind Funktionen von SKSE. Die Fehlermeldung kann darauf hindeuten, dass du es nicht installiert hast. Du benötigst die Archiv Version, der Installer funktioniert nicht zum scripten, da die .psc Dateien nicht enthalten sind.

Weiterhin werden die Namensänderungen durch SetName nicht im Save gespeichert, der Befehl müsste also u.U. bei jedem Spielstart erneut ausgeführt werden.
 
Zuletzt bearbeitet von einem Moderator:
  • Like
Reaktionen: TripleBlade
Vielen Dank an euch beide, das hat super funktioniert! Ich hatte SKSE tatsächlich über den Installer installiert (ich hatte gedacht SKSE liefert in jedem Fall die Modders Recource mit, ist aber wohl nicht so).
Mit ein paar kleinen Änderungen hat das Script dann auch genau die Funktion erfüllt, die ich gebraucht habe.
mfg, TripleBlade
 
Ich habe ein sonderbares Problem: Während eines Dialoges wird per Script ein Item in eine Kiste eingefügt. Das Item hat folgendes Script:
Code:
Scriptname myScript   Extends ObjectReference

Quest Property myQuest Auto


Event OnContainerChanged(ObjectReference akNewContainer, ObjectReference akOldContainer)
If akNewContainer == Game.GetPlayer()
	If myQuest.GetStage() == 40
		myQuest.SetStage(45)
	EndIf
EndIf
EndEvent
Der Sinn des Scriptes ist es, die Quest-Stage zu aktualisieren (abhängig von der aktuellen Quest-Stage). Nehme ich aber jetzt ingame das Item aus der Truhe, passiert nichts, erst wenn ich es fallen lassen und wieder aufnehme, wird die Quest-Stage aktualisiert. Was mache ich falsch und wie bekomme ich es hin, dass die Quest-Stage sofort beim ersten Aufnehmen aktualisiert wird?
 
Da ich im Papyrus-Skripten eine Niete bin wollte ich mal fragen, ob mir jemand hier ein Skrikpt schreiben kann, dass beim Aufnehmen eines Items eine Queststage auslöst?
 
Meine letzten Scripts waren im CS von Morrowind. Nach zig Stunden einlesen für Papyrus krieg ich garnichts gebacken :/

Ich brauche einen Script für meine Mod:
Ein NPC verkauft Zauberbücher, die verstärkte Versionen der im Spiel enthaltenen lehren. Insgesamt kann jeder Zauber um 4 Level erhöht werden. Um ein neues Buch kaufen zu können, muss man die Vorstufe erlernt haben UND einen Mindestskill im entsprechenden Zauberbaum haben.

Sieht dann vom Sinn her so aus für z.B. den Flammenzauber

if(destruction >= 25)
if(player->getspellid flammenlv1 == 1)
Zauberbuch lv2 in Truhe des Händlers packen
endif
endif

Hab nur absolut keine Ahnung wie das in Papyrus funktioniert, die Nerven liegen blank:cry:

Hoffe mir kann jemand helfen, danke im vorraus!
 
Zuletzt bearbeitet:
Tachchen,
ich benötige ein Script für eine Zauberrolle, welches bewirkt, daß bei Benutzung der Rolle ein geladener gewöhnlicher Seelenstein verwendet (aus dem Inventar entfernt) wird.
Gibt es Unterschiede zwischen vorgeladenen und selber mit Seelenfalle aufgeladenen Seelensteinen?

Bitte um Hilfe!
Vielen Dank
 
Nach weiteren Stunden des frustriert seins, habe ich jetzt meinen ersten Script einfügen können ;)

Zur Hälfte funktioniert er auch, folgendes Problem:

Der Script liegt auf einem Buch, das von sich aus nichts bewirkt.

1) Wenn der Spieler unter Skill 25 in Zerstörung ist wenn er es liest soll nichts passieren -> klappt

2) Ist der Spieler mindestens auf Skill 25 und besitzt den Flammenzauber, so soll folgendes passieren:
a) Der Zauber "Flammen - Lv. 2" soll erlernt werden -> klappt
b) Der Zauber "Flammen" soll entfernt werden -> klappt NICHT
c) Das Buch soll aus dem Inventar verschwinden -> klappt NICHT

Wo ist der Fehler?

Code:
Scriptname zzscriptflammen2 extends ObjectReference

ObjectReference Property zzzzSpellTomeFlameslv2 auto

Spell Property Flames auto

Spell Property zzzzFlameslv2 auto


Event OnRead()

    if(Game.GetPlayer().HasSpell(Flames))
       Debug.Notification("Spieler besitzt den Flammenzauber")
    
        if(Game.GetPlayer().getAV("Destruction") >= 25)
            Debug.Notification("Spieler hat Skill von mindestens 25")
            Game.GetPlayer().AddSpell(zzzzFlameslv2)
            Game.GetPlayer().RemoveSpell(Flames)
            Game.GetPlayer().RemoveItem(zzzzSpellTomeFlameslv2, 1)
        endif

        if(Game.GetPlayer().getAV("Destruction") < 25)
            Debug.Notification("Spieler hat Skill von weniger als 25")
        endif

    endif

EndEvent

Bitte helft mir, ich weiss nicht weiter!

Gruß Tigu
 
Tachchen,
ich benötige ein Script für eine Zauberrolle, welches bewirkt, daß bei Benutzung der Rolle ein geladener gewöhnlicher Seelenstein verwendet (aus dem Inventar entfernt) wird.
Gibt es Unterschiede zwischen vorgeladenen und selber mit Seelenfalle aufgeladenen Seelensteinen?

Ich hoffe, ich habe deine Frage jetzt nicht total missverstanden, aber ein Skript auf ein Scroll Objekt legen, das geht leider nicht. In diesem Fall wäre es vielleicht besser, das Skipt auf den zugehörigen magischen Effekt zu legen. Dann könntest du auch gleich eine Bedingung hinzufügen, damit der Effekt nur dann gestartet wird, wenn der Spieler einen gewöhn. Seelenstein im Inventar hat.

Das Skript würde dann in ungefähr so aussehen:
Code:
Scriptname _test extends activemagiceffect

Soulgem Property SoulGemCommonFilled auto

Event OnEffectStart(Actor akTarget, Actor akCaster)
    akCaster.RemoveItem(SoulGemCommonFilled, 1)
EndEvent

Und die Bedingung in etwa so:
Unbenannt-1.jpg

Ob es im Spiel Unterschiede zwischen vorgeladenen und selbst geladenen Seelensteinen gibt, weiss ich jetzt auch nicht genau, musst du ausprobieren.



1) Wenn der Spieler unter Skill 25 in Zerstörung ist wenn er es liest soll nichts passieren -> klappt

2) Ist der Spieler mindestens auf Skill 25 und besitzt den Flammenzauber, so soll folgendes passieren:
a) Der Zauber "Flammen - Lv. 2" soll erlernt werden -> klappt
b) Der Zauber "Flammen" soll entfernt werden -> klappt NICHT
c) Das Buch soll aus dem Inventar verschwinden -> klappt NICHT

Wo ist der Fehler?

RemoveItem erwartet eine Base Form im ersten Parameter, dein Property ist aber eine Objekt-Referenz. Eine Möglichkeit, ändere das ObjectReference Property in ein Book Property ,oder du versuchst folgendes:

Code:
Game.GetPlayer().RemoveItem(zzzzSpellTomeFlameslv2.GetBaseObject(), 1)

Warum das mit dem Zauber entfernen nicht funktioniert, da stehe ich momentan auch auf dem Schlauch, sieht eigentlich gut aus. Schau doch mal in den Properties nach, ob du nicht versehentlich FlamesLeftHand oder FlamesRightHand ausgewählt hast.

Noch ein kleiner Hinweis: Anstatt mehrmals Game.GetPlayer() aufzurufen, ist es effizienter ein Property für den Player anzulegen.

Code:
Actor Property PlayerRef auto


...und auch auf die Gefahr hin, dass ich mich anhöre wie eine kaputte Schallplatte... SKRIPTE IMMER MIT EINEM CLEAN SAVE TESTEN!;)
 
Zuletzt bearbeitet von einem Moderator:
  • Like
Reaktionen: enorm und Tigurius
Danke erstmal für den Beitrag!

Ich habe nun ein bissel rumprobiert und die Book-Property brachte dann die Erlösung.

Der Script ist jetzt für Flammen, Frostbiss, Funken und Blitzzauber bis max Lv. 5 integriert. Das entfernen der Vorstufe des Zaubers klappt auch bei allem einwandfrei, ausser bei "Flammen". Den bekomme ich einfach nicht weg. Ist das vielleicht ein gesicherter Startzauber oder sowas?

Script sieht jetzt folgendermaßen aus (Beispiel für Frostbiss Lv. 3)

Code:
Scriptname zzscriptfrostbite3 extends ObjectReference

ObjectReference Property zzzzZaubermeisterbox auto

Spell Property zzzzFrostbisslv2 auto
Spell Property zzzzFrostbisslv3 auto
Book Property zzzzSpellTomeFrostbitelv3 auto

Event OnRead()

if(Game.GetPlayer().HasSpell(zzzzFrostbisslv2))
    
    if(Game.GetPlayer().getAV("Destruction") >= 50)
        Game.GetPlayer().AddSpell(zzzzFrostbisslv3)
        Game.GetPlayer().RemoveSpell(zzzzFrostbisslv2)
        Game.GetPlayer().RemoveItem(zzzzSpellTomeFrostbitelv3,  1, abSilent = true, akOtherContainer = None)

    else
        Debug.Notification("Voraussetzungen nicht erfüllt")
    endif

endif

EndEvent

Aus Sicht eines Profis vielleicht umständlich, erfüllt für mich aber seinen Zweck ;)

Ich denke mal, das ich die fehlenden 21 Zauber im laufe der Woche fertig bekomme, dann gibts für die Zerstörungsmagier schonmal was neues.
( Wenn vielleicht auch 2-3 Jahre zu spät :lol: )

Danach versuche ich mich an den anderen Magieschulen.
 
Hilfe bei 2 Scripten und deren Einbindung

Hallo,

dies ist mein erster Versuch irgendetwas zu Scripten seit Fo3.

Was soll(en) das(die) Script(e) machen?

Das erste Script soll wenn ein Item dem Spielerinventar hinzugefügt wird eine Referenz aktivieren (enablen).
Das zweite Script soll an eine Queststage gebunden werden und soll wiederum eine Referenz aktivieren (enablen).

Dass haben meine grauen Zellen bis jetzt ausgespuckt

Script selten01 extends Objectreference; ????

ObjectReference Property raresTeil01 auto
;ObjectReference Property raresTeil02 auto weiss nicht ob ich beide brauche

hier haperts schon ist es ein Event oder was?

if raresTeil01.enable() != true
set raresTeil01.enable;????
endif

dazu schon die erste Frage kann ich es so einrichten das das Script genau nur 1. mal durchläuft?

Mein Gedanke hierbei ist: Der Player nimmt ein Gegenstand auf (zb. die Golden Klaue ) in dem Moment wo Sie dem Inventar hinzugefügt wird wird automatisch die Referenz aktiviert.

Beim zweiten weiss ich ehrlich noch nicht genau wie.

Es soll zum Bsp. der Quest von Hircine (Haut des Erretters) hinzugefügt werden.
es soll dann entweder die Referenz für den Ring oder die Referenz für die Rüssi aktivieren.


Mfg.

Vampi

Ps.

Ich hoffe ich habe mich verständlich ausgedrückt.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: 1 Person
Beschreibst du mir mal bitte kurz und prägnant deine Aufgabenstellung? :)
Im Moment weiß ich noch nicht so genau, was du definitiv erreichen möchtest :bye:

Grüße
LF
 
Hi Ladyfalk,

also was ich erreichen möchte ist ein Modul zu erstellen das es mir erlaubt gewisse Items leichter auszustellen ohne diese extra an einem Bestimmten Platz einzulagern. Dazu habe ich eine neue Zelle erstellt in der Referenzen liegen für zb. "Die Zackenkrone".
Nun soll folgendes geschehen der Player nimmt die "Krone" auf beim aufnehmen wir die Referenz aktiviert.
Mher soll das Modul nicht machen. Jetzt kann jeder Modder der dieses Modul nutzt seine Ausstellungstücke einfach mit "aktivate Parrent"? einschalten ohne sich darum kümmern zu müssen wsie er dies aus dem Spielerinventar bekommt bzw. bei Item's die der Spieler eigentlich nicht bekommen/behalten kann.
Ich hoffe es ist etwas deutlicher. Ziel ist es auch wenn ich zb. mehrere Mods habe die ein und dasselbe Ausstellen wollen dies dann auch können.

Mfg.

Vampi
 
Okay, ich guck mal "die Tage" (nicht bös sein das es ein wenig dauern kann) was ich da so im Petto für dich von meinen eigenen Mods habe. ;)
LG
Ladyfalk
 
Hallo zusammen,

ich habe jetzt schon ewig im Internet gesucht, aber habe leider nicht gefunden was ich brauche, vielleicht kann mir ja hier jemand helfen.

Folgendes Problem:

Ich möchte mit einem Schalter ein static einschalten "enable" anschließend soll es sich nach z.B. 1 sekunde automatisch wieder ausschalten "disable". Mit dem Gleichen Schalter möchte ich einen Gegenstand einschalten ohne dass er sich automatisch selber abschaltet, sondern ganz normal mit dem Schalter, welcher dann das Script für den 1. Gegenstand wiederholen soll.

Für Ideen bzw. ein fertiges script wäre ich sehr dankbar und werde entsprechende Credits in die Beschreibung geben, wenn es zu einer fertigen Mod kommen sollte und sie so funktioniert, wie ich mir das wünsche. Wird entweder eine Ressource, oder ein Transportmittel für Skyrim oder beides.

Danke im Vorraus!

Gruß
Dest.
 
Hallo Destero,

vielleicht etwas spät, aber falls du immer noch ein Skript benötigst, kannst du es mal mit diesem hier versuchen:

Code:
Scriptname _test extends ObjectReference

ObjectReference Property Objekt01 auto
ObjectReference Property Objekt02 auto


AUTO STATE WaitingForActivation
Event OnActivate(ObjectReference akActionRef)
    if akActionRef == Game.GetPlayer()
        if Objekt02.IsDisabled()
            BlockActivation()
            Objekt01.Enable()
            Objekt02.Enable()
            RegisterForSingleUpdate(1.0)
            GotoState("")
        else
            BlockActivation()
            Objekt01.Enable()
            Objekt02.Disable()
            RegisterForSingleUpdate(1.0)
            GotoState("")
        endif
    endif
EndEvent
ENDSTATE

Event OnUpdate()
    Objekt01.Disable()
    BlockActivation(false)
    GotoState("WaitingForActivation")
EndEvent

Ich nehme an, du weißt wie du es einbauen musst. Für das Property Objekt01 wählst du den Gegenstand aus, der automatisch deaktiviert werden soll und für Objekt02 den anderen.
 
  • Like
Reaktionen: Destero und Ysolda
Fehlt nur noch der Timer

Utility.Wait(1.0)) "anschließend soll es sich nach z.B. 1 sekunde automatisch wieder ausschalten"

----
EDIT
Sorry, dieser Beitrag kann gelöscht werden. Sehe es gerade, wurde besser gelöst. ... facepalm

RegisterForSingleUpate(1.0)
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Destero
Hallo Destero,

vielleicht etwas spät, aber falls du immer noch ein Skript benötigst, kannst du es mal...

Hallo Ghaunadaur und Ysolda, danke für eure Hilfe, habe das erst jetzt gesehn, da ich mich zwischenzeitlich dann doch um was anderes gekümmert habe. Werde das aber ausprobieren, sobald ich an dieser Mod weiter machen kann.

Gruß
Destero
 
Hallo!
Nach langer Abwesenheit bin ich nochmal auf Scharest unterwegs, da ich momentan wieder mehr Zeit habe mich mit den TES spielen zu befassen :D
Ich habe mich die letzten Tage in das neue CK von Skyrim eingearbeitet doch im Bereich Skripten hat sich im Vergleich zu Oblivion einiges getan! Deswegen würde ich um etwas Starthilfe für ein Skript bitten.
Was soll das Skript machen? Also sofern der Spieler level 30 ist, soll er beim nächsten Rasten in einem Bett geweckt werden durch einen NPC der eine Unterhaltung beginnt.

Ich würde mich über eine Antwort freuen!+

Beste Grüße

Yves!
 
Hi, ich habe seit Ewigkeiten wieder angefangen zu modden und habe ein Problem mit einem Skript. Es ist eigentlich ganz einfach: Ein Schalter mit dem man das Licht an,- und ausschalten kann.

Mein Script sieht so aus:
_______________________________
Scriptname Lichtschalter01 extends ObjectReference

Int schalter
ObjectReference Property licht01 Auto
ObjectReference Property licht02 Auto

Event onactivate(ObjectReference akActionRef)

If (schalter == 0)
Licht01.enable()
Licht02.enable()
schalter += 1
endif

If (schalter == 1)
Licht01.disable()
Licht02.disable()
schalter -= 1
endif

endevent
_______________________________

schalter steht jeweils für die Betätigung des Schalter. Im Spiel passiert bei Aktivierung nichts... wenn mir jemand sagen könnte was ich falsch mache und eine Lösung hat wäre das top :)