Skriptthread zum Creation Kit

Zu 1:
Soweit ich weis sind messages nicht scriptbar. Mit der debug.messagebox function könnte dies allerdings funktionieren.
Edit: Gerade nochmal nach geschaut, es scheint so das es nicht möglich ist buttons mit der debug function zu erstellen. :(

Zu 2:
Hier ist ein etwas abgeänderte function, welche ich selber in Lock overhaul genutzt habe:

Code:
String Function GetAssociatedSkillFromSpell(Spell akSource) Global
if (akSource)
    int Index = akSource.GetCostliestEffectIndex()
    MagicEffect mEffect = akSource.GetNthEffectMagicEffect(Index)
    if (mEffect)
        return mEffect.GetAssociatedSkill()
    else
        ;
    endif
endif    
EndFunction

Umgenau zusein ermittelt die Funktion den AssociatedSkill von dem "Teuerstem" Zauber effekt, bedenke das bei Zaubern mit mehreren Effekten (Soweit ich weis sollte das für alle "vanilla" Zauber einwandfrei klappen.)

Beispiel:
Code:
if GetAssociatedSkillFromSpell(MySpell) == "Destruction"
    debug.messagebox("MySpell is a destruction spell!")
else
    debug.messagebox("MySpell is NOT a destruction spell!")    
endif

Ich hoffe es hilft dir weiter :).


Thx für die rasche Hilfe. Also das mit dem Script werd ich gleich mal testen. Das sollte passen.

Wie ich schon geschrieben habe kann man wohl den Text einer Messagebox per Script ändern. Hab das ja auch schon gemacht. Leider hab ich es noch nicht geschafft aus einem Text ein Objekt oder eine Referenz zu machen die ich dann übergeben kann.
Wenn mir hier jemand helfen könnte wär ich sehr dankbar.

Bis denn Thalon
 
Die Buttons lassen sich per Papyrus nicht ändern.
Du könntest verschiedene Messages erzeugen und je nach Ausgangslage das jeweilige im Script per Show anzeigen lassen.
 
Hi nnw,

hast Du Dir meinen Post richtig durch gelesen ?
Ich will nicht die Buttons ändern sondern den Text der Messagebox ;-)
Dies geht auch mit Platzhalter.ForceRefTo(MeineRef). Ich habe es aber nur mit Objekten wie z.B. Game.GetPlayer hinbekommen.

Was ich möchte ist einen String dafür zu nutzen.
Zum Verständnis ich möchte per Script auslesen welche Zaubersprüche ein Begleiter hat und diese in der Messagebox anzeigen lassen.
Normalerweiße kein Thema mit Debug.Messagebox("Zaubersprüche" + AusgeleseneSprueche). Nur möchte ich hier nicht die einfache Box haben sondern eine mit Buttons um nur eine Box zu haben die dann unten die Buttons zeigt.

Bis denn Thalon
 
Was ich möchte ist einen String dafür zu nutzen.
Zum Verständnis ich möchte per Script auslesen welche Zaubersprüche ein Begleiter hat und diese in der Messagebox anzeigen lassen.
Normalerweiße kein Thema mit Debug.Messagebox("Zaubersprüche" + AusgeleseneSprueche). Nur möchte ich hier nicht die einfache Box haben sondern eine mit Buttons um nur eine Box zu haben die dann unten die Buttons zeigt.

Bis denn Thalon

Hallo,

So etwas ähnliches habe ich mal gemacht, die Methode ist aber etwas aufwendig. Du kannst mittels GetName() den Namen des Zaubers auslesen und ihn mit SetName() einer ReferenceAlias zuweisen. Dadurch kann der Name des Zaubers dann mit dem Tag <Alias=AliasName> in der Message angezeigt werden. Auf was sich dieser Alias bezieht, ist im Grunde egal, es kann auch ein MiscObject sein. Das Objekt muss nur ein FULL Record haben, logisch.
Diese Prozedur muss dann für jeden Zauber wiederholt und für jeden Zauber ein Alias angelegt werden. Wie gesagt, der Aufwand ist schon ziehmlich enorm, aber die einzige Möglichkeit die ich kenne. Wenn es dafür eine bessere Löung gibt, würde mich das auch interessieren.


MfG
 
  • Like
Reaktionen: Thalon Mook
@Quad2Core
Ich bekomme leider einen Compiler Fehler wenn ich Deinen Code verwende.
Scheinbar kommt er mit den Befehlen "GetCostliestEffectIndex()" und "GetNthEffectMagicEffect()" nicht klar.
Muss ich da noch eine Klasse laden?

@Ghaunadaur
Thx für den Tipp.
Für jeden Zauber das wäre dann doch etwas zu viel Aufwand ausserdem wenn ein andere Mod nen Zauber hinzufügt wäre meiner inkompatibel. Ich möchte das Ganze so einfach wie möglich halten und auch nicht abhängig von einer Vanilla Version. Naja ich werd mal abwarten ob noch jemand eine andere Idee hat und für den Anfang mit einer DebugBox arbeiten.

edit: Gibt es ein Limit für die Länge eines Namens. Wenn das nicht zu niedrig ist könnte ich vlt den Namen missbrauchen und alle Sprüche da hinein scripten.

Bis denn Thalon
 
Zuletzt bearbeitet:
@Thalon Mook
Ich guck es mir noch mal an.
Das einzige was mir jetzt spontan einfallen würde wäre, dass die Funktion SKSE Funktionen benutzt und daher wird SKSE auch benötigt, sorry hatte vergessen das zu erwähnen.

Edit: Wenn du die funktion nur in einem script verwenden willst, kannst du den Global flag auch weglassen.
 
Zuletzt bearbeitet:
Das ging ja fix mit der Antwort :D

Ja das SKSE benötigt wird ist klar. Ich brauch das ja auch für mein Script.
Hab den Fehler gefunden lag nicht an Deinem Script sondern wie sollte es auch anders sein an dem Typen vorm Keyboard ;D

Hab die aktuelle Version vom SKSE nochmal runtergeladen und drüber gebügelt. Da hatten wohl ein paar Scripte gefehlt vorher.

Nun lief es sauber durch.

Edit: Hab noch ne Idee.
Kann man das Zauber UI auch für NPC's verwenden. Also es aufrufen mit einem Begleiter als Referenz?

Thx
Bis denn Thalon
 
Zuletzt bearbeitet:
edit: Gibt es ein Limit für die Länge eines Namens. Wenn das nicht zu niedrig ist könnte ich vlt den Namen missbrauchen und alle Sprüche da hinein scripten.


Interessante Idee. Ich habs mal getestet, das Limit scheint bei 259 Zeichen zu liegen. Je nachdem wieviele Zauber der Begleiter kennt, könnte das ausreichen. In Verbindung mit dem Skript von Quad2Core, könntest du auch einen Alias pro Zauberschule verwenden.
 
Hi,

ich brauche bitte einen Script für eine Waffe, der bewirkt, dass ein Spell gewirkt wird, sobald man jemanden mit der Waffe schlägt.
Der Spell soll dabei in keine bestimmte Richtung gewirkt werden.
Ich hoffe, ich habe mich verständlich ausgedrückt und bekomme bald eine gute Antwort.

MfG

AD42
 
Ich würde das über einen perk managen. Die Perk Entry Point's:

  • Apply Combat Hit Spell
  • Apply Weapon Swing Spell
sollten das gewünschte Ergebniss erziehlen, mit den conditions kannst du diesen Effekt dann noch genauer specifizieren (z.B. nur erlauben, wenn die speziele waffe angelegt ist). Dann musst du nur noch einen Weg finden diesen Perk dem Spieler hinzuzufügen.
z.B mit einer Quest, welche Start game enabled "angekreuzt" hat und an folgenden script angebunden ist:
Code:
Perk Property MyPerk Auto

Event OnInit()
    if !(Game.GetPlayer().HasPerk(MyPerk))
        Game.GetPlayer().AddPerk(MyPerk)    
    endif    
EndEvent

Edit: Wahrscheinlich wäre es besser den Perk über die Waffe dem Actor hinzuzufügen z.B mit diesem Script:
Code:
Perk Property MyPerk Auto

Event OnEquipped(Actor akActor)
    if (akActor == Game.GetPlayer())
        if !(Game.Getplayer().HasPerk(MyPerk))
            Game.GetPlayer().AddPerk(MyPerk)
        endif
    endif
EndEvent

Event Event OnUnequipped(Actor akActor)
    if (akActor == Game.GetPlayer())
        if !(Game.Getplayer().HasPerk(MyPerk))
            Game.GetPlayer().RemovePerk(MyPerk)
        endif
    endif
EndEvent
Wenn du willst das der Perk auch noch anderen Actors hinzugefügt werden kann (wie z.B dem Banditen der die Waffe benutzt), musst du einfach nur die
if (akActor == Game.GetPlayer()) zeilen entfernen (und natürlich auch die dazu gehörigen endif's)
 
Zuletzt bearbeitet:
  • Like
Reaktionen: ArgonianDovahkiin42
Hallo Leute,

Suche grade eine Möglichkeit per script einen magic effect oder notfalls einen spell zu aktivieren also zu casten

Das dazugehörige Skript liegt auf einem Actor und wird durch die Veränderung im Kampfmodus (Kämpfend/nicht Kämpfend) aktiviert

Kennt jemand den passenden befehl für den magic effect?


Grüße LindayWolf
 
Ich weiß einfach nicht warum dieses Scriptfragment nicht funktionieren will:

Code:
AddInventoryEventFilter(SpellTomeList)
ShowGiftMenu(true, SpellTomeList, true, false)
RemoveAllInventoryEventFilters()

SpellTomeList ist als property eingetragen und ist eine FormList mit allen Zauberbüchern.

Als Fehlermeldung erhalte ich folgendes:

Code:
Starting 1 compile threads for 1 files...
Compiling "FeyriaTrainSpellScript"...
C:\Steam\steamapps\common\skyrim\Data\Scripts\Source\temp\FeyriaTrainSpellScript.psc(9,0): AddInventoryEventFilter is not a function or does not exist
C:\Steam\steamapps\common\skyrim\Data\Scripts\Source\temp\FeyriaTrainSpellScript.psc(10,0): ShowGiftMenu is not a function or does not exist
C:\Steam\steamapps\common\skyrim\Data\Scripts\Source\temp\FeyriaTrainSpellScript.psc(11,0): RemoveAllInventoryEventFilters is not a function or does not exist
No output generated for FeyriaTrainSpellScript, compilation failed.


Batch compile of 1 files finished. 0 succeeded, 1 failed.
Failed on FeyriaTrainSpellScript

Was mache ich falsch?
Das Scriptfragment möchte ich bei einem Dialogue Topic am Beginn einfügen.
 
Ich kenne mich zwar nicht so mit Dialoguen aus aber versuch doch einfach mal dies:
Code:
akSpeakerRef.AddInventoryEventFilter(SpellTomeList)
akSpeaker.ShowGiftMenu(true, SpellTomeList, true, false)
akSpeakerRef.RemoveAllInventoryEventFilters()
 
  • Like
Reaktionen: Tywele
Danke, das war es leider hab ich das was ich damit erreichen wollte wieder verworfen. ^^

Jetzt stehe ich aber vor dem nächsten Problem: Gibt es ein Event welches aufgerufen wird sobald der Spieler eine Stufe aufgestiegen ist (oder etwas ähnliches)?
 
Muss es eigentlich geben denn genau da liegt das Problem mit der Quest "Die Wolfskönigin". Zwischen dem ersten und zweiten Teil kommt ein Kurier, wenn man eine Stufe aufsteigt, es kommt aber logischerweise dann keiner wenn man schon Stufe 81 ist ;) Evtl. mal da einen Blick reinwerfen
 
  • Like
Reaktionen: Tywele
Leider konnte ich da nichts finden. In der Quest gibt es nicht eine Condition, die irgendetwas mit der Stufe zu tun hat, und im einzigen Script, das der Quest hinzugefügt wurde, ist auch kein Hinweis auf soetwas zu finden.
 
Jetzt stehe ich aber vor dem nächsten Problem: Gibt es ein Event welches aufgerufen wird sobald der Spieler eine Stufe aufgestiegen ist (oder etwas ähnliches)?

Ja es gibt so ein event. Allerdings ist es ein teil der Story Manager 's. Das Prinzip von Story Manager Events ist das du bevor du sowelche Events nutzen kannst deine Quest erst für das gewünschte Event "registrieren" musst.
Das gesuchte Event währe das Event OnStoryIncreaseLevel(int aiNewLevel).
 
  • Like
Reaktionen: Tywele