Skriptthread zum Creation Kit

Hm, der "StartCombat" Befehl ist doch Teil des "ActorScripts"
evtl. musst du die Funktionen des Actor Scripts erst in dein Script reinladen.

Also entweder direkt in der 1. Zeile mittels "Scriptname .... extends Actor"
oder danach die Zeile "Actor.StartCombat" einfügen...?!?
 
Danke euch, aber es lag einfach am Quest. Manchmal führt der scheinbar grundlos keine direkten Scriptbefehle in nem Quest mehr aus, dann muss man eben das Quest wechseln. Hab ich getan und jetzt funktionierts. Das CK ist komisch. :)
 
Mein Script funktioniert immer noch nicht.
Funktion: Das Script liegt auf einen MagicEffect, dieser wiederum ist in einem Zauber enthalten. Der vom Zauber getroffene NPC soll Essential werden, wenn er es noch nicht ist, und nicht-Essential werden, wenn er Essential ist. Nur leider funktioniert das ganze nicht. Es kommt immer die Meldung "Dieser NPC ist nun Essential", egal, ob er es vorher war oder nicht, und er ist dann auch nicht Essential.

Script:
Code:
Scriptname DrReEsEssential   extends ActiveMagicEffect

ReferenceAlias property akTarget auto

Event OnEffectStart(Actor akTarget, Actor akCaster)
	Actor target = akTarget.GetActorReference()
	ActorBase targetBase = target.GetActorBase()
	bool status = targetBase.IsEssential()
    if (status == true)
        targetBase.SetEssential(False)
        Debug.Notification("Dieser NPC ist nicht mehr Essential")
    else
        targetBase.SetEssential()
        Debug.Notification("Dieser NPC ist nun Essential")
    endif
endEvent

Ich bin im Moment echt am verzweifeln, wäre super, wenn mir jemand helfen könnte.
 
hallo,
ich suche ein Script für einen Ring. wenn er ausgerüstet wird soll sich das Level auf 20 setzen
thx
 
Skriptanfrage:

Moin,

ich würde gerne etwas basteln damit Sturmmäntel und Kaiserliche nach der Quest "Battle for Windhelm" nicht mehr "essential" sind sodass man nicht vor der unlösbaren Aufgabe steht verbliebene Sturmmäntel oder Kaiserliche nicht töten zu können.
Wie lässt sich das mit einem Script realisieren? Die Quest ID wäre:
Code:
CWSiegeObj
und die Quest Stage
Code:
9999

Herzlichen Dank schon mal im voraus. :)
 
Sorry dass ich euch mit sowas belästigen muss, aber ich krieg nichtmal einen simplen Script hin...

Ich möchte, dass wenn man auf eine Tafel klickt, eine Nachricht erscheint. Dazu habe ich unter "Miscellaneous -> Message" eine kleine Nachricht geschrieben. Allerdings komme ich mit dem Script nicht weiter. Das ist mein erster Script im CK, daher fehlt mir die Übung und mache Anfängerfehler.

Scriptname Warning

event onactivate (MQpathToHHShrineTablet)

warnung.show

EndEvent

Was genau fehlt da noch? Und muss noch ein zusätzlicher Schritt unternohme werden?
 
@ BlackHawk: Kommt auf das Objekt:

Code:
ScriptName <ScriptNameEinfügen> extends Object Reference

Event OnActivate(ObjectReference akActionRef)

if(akActionRef == game.getplayer())
  debug.messagebox("<DeinText>")
endif

EndEvent

@Boby:

Das Skript kommt auf den MagicEffect eines Zaubers (kannst eventuell auch Draconis' Script nehmen, wenn seins mit meinen Änderungen funktioniert):

Code:
ScriptName <ScriptNameEinfügen> extends ActiveMagicEffect

Actor Property a1
Actor Property a2
Actor Property a3
Actor Property a4
Actor Property a5
Actor Property a6
Actor Property a7
; soviele Du brauchst

Int Stage = CWSiegeObj.getcurrentstageID()


Event OnEffectStart(Actor akTarget, Actor akCaster) 
  if(stage == 9999)
    a1.getactorbase().setessential(false)
    a2.getactorbase().setessential(false)
    a3.getactorbase().setessential(false)
    a4.getactorbase().setessential(false)
    a5.getactorbase().setessential(false)
    a6.getactorbase().setessential(false)
    a7.getactorbase().setessential(false)
    ; und so weiter, für jede Property einmal
  endif
endif

EndEvent

Du machst für jeden Hauptmann ein Property und weist den einzelnen Properties dann den Actor's zu.

@Enorm:

Laut dem CK-Wiki gibt es für das Setzen des Levels keinen Befehl.

@Draconis:

Probier' es mal so:

Code:
Scriptname DrReEsEssential extends ActiveMagicEffect

Event OnEffectStart(Actor akTarget, Actor akCaster)

   if(akTarget.getactorbase().isessential())
     akTarget.getactorbase().setessential(false)
   else
     akTarget.getactorbase().setessential(true)
   endif

endEvent
 
Zuletzt bearbeitet:
@Kahmul:

Danke schonmal, aber geht das nicht auch ohne einen Zauber? Z.B. das Script wird beim Spielstart einmal initialisiert oder ähnliches?
 
Ich habe schon oft probiert, Sachen so ablaufen zu lassen. Mit OnInit und OnUpdate sollte es eigentlich funktionieren. Aber entweder Bethesda hat da Blödsinn programmiert oder es ist nicht so vorgesehen. Im CK-Wiki steht auch nichts zur Runtime von Skripten, was ich alles andere als schön finde.
Wenn jemand Näheres dazu weiß, wäre es nett, wenn dieser es hier posten könnte.
 
Hmm... das ist ja schade.
Wie wäre es denn wenn ich auf jeden Hauptmann ein script lege, welches sobald der NPC mit einer Waffe getroffen wird den NPC auf "none essential" setzt. Würde so etwas funktionieren?
 
Ja.

Code:
ScriptName <ScriptName> extends ObjectReference

Event OnHit(ObjectReference akAggressor)

if(akAggressor == game.getplayer())
  self.getactorbase().setessential(false)
endif

EndEvent

Ob das mit "self" geht, oder ob man es überhaupt braucht, musst Du mal ausprobieren. In Obl. wurde ohne Referenz-Angabe der Befehl auf das Objekt ausgeführt. Ob es in Skyrim auch so ist, weiß ich nicht.
 
Ok danke.
Wie würde das denn in Verbindung mit einer QuestStage abfrage aussehen?
Code:
ScriptName <ScriptName> extends ObjectReference


Event OnHit(ObjectReference akAggressor)

Int Stage = CWSiegeObj.getcurrentstageID()

if (stage == 9999)

andif (akAggressor == game.getplayer())
  self.getactorbase().setessential(false)

endif

EndEvent
? Passt das so? Wahrscheinlich wohl nicht oder?
 
Irgendeine Lösung für addscriptpackage

Hallo zusammen,
ich habe jetzt schon tagelang probiert herauszufinden, ob es eine Alternative zum aus Oblivion/F:3/F:NV bekannten addscriptpackage - Befehl gibt.

Natürlich ist es möglich einzelnen Actors neue Packages per Quest Alias zuzuweisen, aber das ist nicht nur umständlich und unübersichtlich, sondern nicht einmal ausreichend. Jedes Alias kann nur einmal vergeben werden, und wenn es also z.B. um ein neues Companion-System geht, bei dem man mehr als einen Begleiter hat, dann müsste man für jeden Begleiter-Slot mindestens zwei Aliases definieren...

Hat irgendjemand vielleicht einen Hinweis, was man noch ausprobieren könnte?

Und zu der Sache, die weiter vorne im Thread gefragt wurde... ein Pferd einzuparken ist ziemlich einfach. Du brauchst 'ne Quest, in diese Quest fügst du ein Quest Alias ein und dieses Quest Alias definierst du als "Specific Reference", lässt dann aber das Auswahlfeld leer. Unten dann bei Packages noch ein Travel-Package einfügen, dass zu deinem "Pferde-Parkplatz" führt.
Schließlich musst du dir natürlich noch eine Triggerbox bauen und diese Abfragen lassen ob akActionRef ein Pferd ist und ob dieses Pferd auch dem Spieler gehört. Dann schiebst du die Reference des Pferdes, das in die Box gelaufen ist per ForceRefTo() in das QuestAlias deiner PferdeEinparkQuest.

Fertig.

Problem ist auch hier: nur ein Pferd kann gleichzeitig auf dem Parkplatz stehen, da das Alias, welches das Travel-Package verteilt, nur einmal belegt werden kann. Ansonsten wirds gleich relativ umständlich... aber das ist ja genau das Problem, für welches ich eine Lösung brauche.
 
Ok danke.
Wie würde das denn in Verbindung mit einer QuestStage abfrage aussehen?
Code:
ScriptName <ScriptName> extends ObjectReference


Event OnHit(ObjectReference akAggressor)

Int Stage = CWSiegeObj.getcurrentstageID()

if (stage == 9999)

andif (akAggressor == game.getplayer())
  self.getactorbase().setessential(false)

endif

EndEvent
? Passt das so? Wahrscheinlich wohl nicht oder?

Code:
ScriptName <ScriptName> extends ObjectReference


Event OnHit(ObjectReference akAggressor)

Int Stage = CWSiegeObj.getcurrentstageID()

if (stage == 9999)
 if (akAggressor == game.getplayer())
   self.getactorbase().setessential(false)
 endif
endif

EndEvent
 
  • Like
Reaktionen: Boby
Es gibt ja die Möglichkeit, QuestVariabeln als Bedingung für Dialoge auszuwählen. Ich habe das ganze so verstanden, dass man die Variabeln in ein Script schreiben muss, dieses dann an die Quest anhängen und nun die Quest-Variabeln auswählen kann, leider bleibt das Feld dafür grau. Habe ich irgendetwas falsch gemacht? Das Script mit den Variablen:

Code:
Scriptname DrQuestScript   extends Quest Conditional

Int Property uno = 0 Auto  
Int Property duo = 0 Auto

Als das nicht funktioniert hat, habe ich folgendes probiert, bin damit aber leider auch gescheitert:
Code:
Scriptname DrQuestScript   extends Quest Conditional

Int uno = 0
Int duo = 0
 
Code:
ScriptName <ScriptName> extends ObjectReference


Event OnHit(ObjectReference akAggressor)

Int Stage = CWSiegeObj.getcurrentstageID()

if (stage == 9999)
 if (akAggressor == game.getplayer())
   self.getactorbase().setessential(false)
 endif
endif

EndEvent
Ich habe das jetzt mal so getestet und bei mir hat das Script trotz abgeschlossener Quest keinen Effekt dh. die NPCs kann man immer noch nicht töten. Allerdings weis ich nicht warum, da ich an keiner Stelle eine Fehlermeldung bekommen habe. :?