Skriptthread zum Creation Kit

Stimmt... Das hatte ich nicht bedacht... Aber man könnte es doch gaaaaanz vielleicht umgehen, indem man einfach einen Zauber mit etwas längerer Wirkungszeit auf den Spieler castet, sobald ein Wert unterschritten wurde. Dann sagt man halt, man hätte sich erholt... Dass ich etwa den gleichen Code hatte, tut mir leid. Ich hatte einfach nicht genug Zeit. Deshalb habe ich das nur überflogen.
 
Skript um NIF zu wechseln (bei abfeuern/nachladen der Armbrust)

Hallo

Leider gibt es nur relativ wenig Modder, die sich mit Animationen auskennen (oder es ist einfach nicht machbar), deshalb muss wohl eine Alternative her, ich könnte evtl. auf ein Skript ausweichen.

Was ich möchte? Eine funktionierende (Nachlade)Animation für mein Gewehr...es fungiert als Armbrust-Ersatz und das originale Skeleton ist nicht wirklich für entsprechende Animationen in Verbindung mit Havok geeignet, da das originale Skeleton nicht mal annähernd der Form meines Gewehrs entspricht, neues Skeleton spielt's wohl eher auch nicht und anpassen kann man es offensichtlich auch nur im kleinen Rahmen.Diese Havok Animation ist direkt an das Skeleton gebunden und wird beim Abfeuern/Nachladen abgespielt.

Die 2. Art der mir bekannten Animation ist ein Animations-Controller direkt in der .nif, diese Animation ist aber zeitlich gebunden (dh. zB startet 2 Sekunden nach Anlegen der Waffe), mir ist keine Methode bekannt, diese an ein "Event" (Abfeuern/Nachladen der Waffe) zu knüpfen - deshalb meine "out of the box" Idee:

Eine .nif mit dem Gewehr als Waffen-Slot (Armbrust) = rifle.nif und die animierten Teile (Hebel+Bolzen) als separate .nif (als eigenständiger Armor-Slot) Starre Version = A.nif. Animierte Version = B.nif.

c7kjnddsbtgf4rowj.gif


Dh. im Spiel rüstet man dann beide Teile aus und erhält das komplette Gewehr. Nun kommt das Skript in's Spiel, wenn der Spieler schießt/nachlädt soll das Skript von A.nif auf B.nif schalten, damit wird das Teil getauscht und das neue Teil startet direkt mit einer Animation. Bei erneuten Abfeuern wird B.nif erneut geladen und das Ganze wiederholt sich.

Sollte auch mit 2 Teilen funktionieren, rifle.nif und B.nif - das ist eine alte Grafik. Die komplette Waffe möchte ich nicht wechseln (also 1x starr und 1x animiert), da dies eine Animation auslösen würde (neu ausrüsten, veränderte Position) - deshalb die zerstückelte Waffe.

Solch ein Skript sollte meiner Einschätzung nach machbar sein, die Dwemer Mechanical Blade Mod verwendet sowas: http://skyrim.nexusmods.com/mods/14060

Verwendet A.nif, versteckte Klinge. Sobald man die Waffe zückt wechselt das Skript zu B.nif, diese .nif startet mit einer Animation in der die Klinge ausfährt. Wenn man die Waffe wegsteckt wird wieder zu A.nif gewechselt...das Skript ist an den "Event" sheath/draw oder so im Spiel geknüpft, evtl. gibt es auch solche "Events" für das Abfeuern der Bogens/Armbrust bzw Nachladen. Vl http://www.creationkit.com/OnPlayerBowShot_-_Actor

Hab keine Erfahrung mit Skripts, extra für diese eine Mod es zu erlernen rentiert sich wohl nicht wirklich. Im Notfall muss ich halt versuchen, das Skript vom Dwemer Mod zu verstehen & umbauen. Ideal wäre natürlich, wenn hier jemand helfen könnte - wird natürlich in den Credits/Preview Video erwähnt.

Alternativ versuche ich zur Zeit, solch eine Animation (bzw die "Verknüpfung) in die crossbow_release.hkx zu packen...also vorher eben in .kf wandeln und in 3DsMax bearbeiten, nur leider funktioniert das System ja basierend auf Bones/Skeleton - das hat's nicht so gern wenn ich Animationscontroller, die sich auch normale meshes beziehen, per NifSkope reinschiebe

Falls jemand bestätigen kann, das so ein Skript machbar ist und netterweise bereit wäre zu helfen - bitte Bescheid geben, ich setz' dann eine neue Mod auf mit Platzhalter .nifs zum Testen, die finale Fassung bau ich dann darauf auf.

Bitte/Danke
mfg
 
Skripte spinnen

Guten Abend,

nachdem ich nach längerer Zeit mal wieder ein bisschen basteln wollte, krieg ich gerade viele graue Haare bei meinen Skripten.
Das folgende Skript hat vorher problemlos funktioniert und jetzt zickt es rum.

Code:
Scriptname mdeDT_SCR_Liftsteuerung extends ObjectReference  

Int mdeDT_Auswahl

Message Property mdeDT_Liftsteuerungsmenue Auto

ObjectReference Property mdeDT_ZielWohnraum Auto
ObjectReference Property mdeDT_ZielLager Auto
ObjectReference Property mdeDT_ZielEingang Auto
ObjectReference Property mdeDT_ZielSchauraum Auto

Event OnActivate(ObjectReference akAktionRef)
  mdeDT_Auswahl = mdeDT_Liftsteuerungsmenue.Show()
  If mdeDT_Auswahl == 0
    Game.GetPlayer().MoveTo(mdeDT_ZielWohnraum)
  ElseIf mdeDT_Auswahl == 1
    Game.GetPlayer().MoveTo(mdeDT_ZielLager)
  ElseIf mdeDT_Auswahl == 2
    Game.GetPlayer().MoveTo(mdeDT_ZielEingang)
  ElseIf mdeDT_Auswahl == 3
    Game.GetPlayer().MoveTo(mdeDT_ZielSchauraum)
  ElseIf mdeDT_Auswahl == 4
  EndIf
EndEvent

Die Properties sind richtig zugewiesen, in manchen Etagen des Liftes funktionieren einige (je nach Raum verschiedene) Sprungziele.
Wenn ich das Skript ändere oder einfach so speichern will, kriege ich eine Riesenlatte an Fehlermeldungen:

Code:
Starting 1 compile threads for 1 files...
Compiling "mdeDT_SCR_Liftsteuerung"...
<unknown>(0,0): Unable to find flags file: TESV_Papyrus_Flags.flg
d:\spiele\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\mdeDT_SCR_Liftsteuerung.psc(0,0): unable to locate script ObjectReference
d:\spiele\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\mdeDT_SCR_Liftsteuerung.psc(5,17): unknown type message
d:\spiele\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\mdeDT_SCR_Liftsteuerung.psc(7,25): unknown type objectreference
d:\spiele\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\mdeDT_SCR_Liftsteuerung.psc(8,25): unknown type objectreference
d:\spiele\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\mdeDT_SCR_Liftsteuerung.psc(9,25): unknown type objectreference
d:\spiele\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\mdeDT_SCR_Liftsteuerung.psc(10,25): unknown type objectreference
d:\spiele\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\mdeDT_SCR_Liftsteuerung.psc(12,33): unknown type objectreference
d:\spiele\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\mdeDT_SCR_Liftsteuerung.psc(13,44): message is not a known user-defined type
d:\spiele\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\mdeDT_SCR_Liftsteuerung.psc(13,2): type mismatch while assigning to a int (cast missing or types unrelated)
d:\spiele\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\mdeDT_SCR_Liftsteuerung.psc(15,4): variable Game is undefined
d:\spiele\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\mdeDT_SCR_Liftsteuerung.psc(15,9): none is not a known user-defined type
d:\spiele\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\mdeDT_SCR_Liftsteuerung.psc(15,21): none is not a known user-defined type
d:\spiele\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\mdeDT_SCR_Liftsteuerung.psc(17,4): variable Game is undefined
d:\spiele\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\mdeDT_SCR_Liftsteuerung.psc(17,9): none is not a known user-defined type
d:\spiele\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\mdeDT_SCR_Liftsteuerung.psc(17,21): none is not a known user-defined type
d:\spiele\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\mdeDT_SCR_Liftsteuerung.psc(19,4): variable Game is undefined
d:\spiele\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\mdeDT_SCR_Liftsteuerung.psc(19,9): none is not a known user-defined type
d:\spiele\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\mdeDT_SCR_Liftsteuerung.psc(19,21): none is not a known user-defined type
d:\spiele\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\mdeDT_SCR_Liftsteuerung.psc(21,4): variable Game is undefined
d:\spiele\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\mdeDT_SCR_Liftsteuerung.psc(21,9): none is not a known user-defined type
d:\spiele\steam\steamapps\common\skyrim\Data\Scripts\Source\temp\mdeDT_SCR_Liftsteuerung.psc(21,21): none is not a known user-defined type
No output generated for mdeDT_SCR_Liftsteuerung, compilation failed.

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

Compilieren kann ich das Skript aber komischerweise.

Ich dreh hier noch durch ...

mfg, mde.
 
Ist dein Compiler richtig eingestellt? Wenn ich es versuche, klappt es.

Code:
Starting 1 compile threads for 1 files...
Compiling "mdeDT_SCR_Liftsteuerung"...
Starting assembly of mdeDT_SCR_Liftsteuerung
0 error(s), 0 warning(s)
Assembly succeeded

Compilation succeeded.

Batch compile of 1 files finished. 1 succeeded, 0 failed.

MfG Master of Worlds
 
Doofe Frage: wo kann ich da was einstellen ? Ich nehme den CK-internen Editor/Compiler.

In deinem Skyrimverzeichnis müsste sich der Ordner Papyrus Compiler befinden, dort müsste dann die ScriptCompile.bat liegen, die du mit einem Texteditor öffnen kannst.
Dort musst du die Pfade für dich und eben auf deine Pfade anpassen.

MfG Master of Worlds
 
  • Like
Reaktionen: mde
Bah, ich hasse STEAM ...

Hab die ESP mit dem Skript gerade mal auf dem Laptop getestet und wie erwartet, funktioniert das Skript (warum auch nicht, lief ja vorher auch und es wurde nichts dran geändert).

Aber was muss ich sehen ? Mein Skriptverzeichnis auf dem PC war (bis auf selbst erstellte Skripte) leer. Soll mir da vorhin STEAM beim Reparieren der Skyrim-Dateien aus irgendeinem Grund die Original-Skripte gekillt haben ? Seltsam ...

Hauptsache es funktioniert wieder :)
 
Die Skripts sind doch meines Wissens nach auch in einer BSA gespeichert, wenn diese nicht entpackt ist, müsste der Skriptordner leer sein denke ich :)
 
Ich suche eine Funktion, Prozedur, Event oder sonst etwas, welches den Spieler dazu bringt den Pfeil auf einem Bogen automatisch abschießen zu lassen. Also zum Beispiel hält der Spieler den Bogen etwa 1,5 Sekunden lang gespannt und lässt die Sehne dann automatisch los, nach diesen 1,5 Sekunden.
 
So, auf Anraten jetzt hier: (Original Thread: http://forum.scharesoft.de/showthread.php?45918-Unabh%E4ngiges-Skript)
So aus reinem Spaß habe ich mal versucht mittels ein paar NPCs ein kleines nebenherlaufendes XP-System in Skyrim einzubauen.
Das Skript was momentan auf dem NPC liegt sieht so aus:

Code:
Scriptname KillToEXPScript extends ObjectReference  

MiscObject Property RLExpItem auto

GlobalVariable Property RLPlayerExp Auto
GlobalVariable Property RLPlayerLevel Auto
GlobalVariable Property RLPlayerSkillPoints Auto

Event OnDeath(Actor akKiller)

    if (akKiller == game.GetPlayer())
        int Gain = GetItemCount(RLExpItem)
        Debug.Notification("Du erhälst " + Gain + " Erfahrungspunkte")
        RLTCModExp(Gain)
    endIf

EndEvent

Function RLModEXP(int value)
    Self.RLExpGain(value)
    
    int CurrentLevel = Self.RLGetLevel()
    int CurrentExp = Self.RLGetExp()
    int LevelGainXP = (50 * CurrentLevel * (CurrentLevel + 1))
    
    If (CurrentExp >= LevelGainXP)
        Self.RLGainLevel(LevelGainXP)
    EndIf
EndFunction

Function RLExpGain(int value)
    RLPlayerExp.SetValue(RLPlayerExp.GetValue() + value)
EndFunction

Function RLGainLevel(int reduce)
    Self.RLExpGain(-reduce)
    
    game.GetPlayer().ModActorValue("health", 10.0)
    RLPlayerSkillPoints.SetValueInt(RLPlayerSkillPoints.GetValueInt() + 10)
    
    RLPlayerLevel.SetValue(RLPlayerLevel.GetValue() + 1)
    Debug.Notification("STUFENAUFSTIEG! Level " + RLPlayerLevel.GetValueInt() + " erreicht!")
EndFunction

int Function RLGetLevel()
    return RLPlayerLevel.GetValueInt()
EndFunction

int Function RLGetExp()
    return RLPlayerExp.GetValueInt()
EndFunction

Erklärung: Momentan hat jedes NPC ein Token-Item (unplayable), welches die Menge an EXP angibt die der Spieler bekommen soll.
Diese wird natürlich nur gegeben wenn der Spieler der tötende Akteur war. Ist eine bestimmte Menge an Erfahrung erreicht (Abhängig vom Level), geschieht ein Stufenaufstieg, der Spieler bekommt einige Boni und die für den Stufenaufstieg nötige XP wird aus dem XP-Pool des Spielers entfernt.

Dieses Skript funktioniert in der Gestalt wie es oberhalb angeben ist. Jedoch möchte ich eigentlich folgendes erreichen:
a) der NPC besitzt nur ein Skript namens GainExperience. In diesem wird einzig und allein fester Integerwert an das eigentliche Skript weitergeben, welches dann die Globalen Variablen verwaltet und den Stufenaufstieg steuert. Jedoch bereitet mir die Skriptsprache von TES mehr Probleme als jede bisher gesehene Programmiersprache und ich weiß nicht wie ich ein Skript (welches zu definierende Properties hat) benutzen kann OHNE es auf ein Objekt zu legen. Notfalls könnte man das zweite Skript auch in nen immergültigen Quest oder auf die Spielfigur legen, da bekomme ich aber nen Fehler, dass der Call-Aufruf ungültig wäre.
b) die Registrierung von Ereignissen in TES kommt mir unglaublich langsam vor (wenn ich ein NPC töte spürt man eine merkbare Lücke zum "Du erhälst xx Erfahrung" - Text). Kann ich mit irgendwelchen Mittel diese Abarbeitungsgeschwindigkeit erhöhen?
c) Die Methode "game.getplayer().modav("health", 10) bewirkt zwar das Gewünschte, jedoch verfärbt sich Ingame die Lebenszahl grün (als wenn man einen Bonus durch Effekte bekäme). Das möchte ich nicht. Ist die Änderung des Lebens auch möglich ohne eine Verfärbung? (zb *.setav(*.getav("health") + 10) oder sonen quak).
d) Wenn ein Akteur stirbt nachdem ich ihn mit FusRoDah von ner Klippe geworfen habe, bin nicht ich der Mörder sondern die Physikengine (auch wenn er gegen ne Wand haut, verbrennt etc..) kann man diese Fälle auch irgendwie abfangen oder muss ich mich entscheiden zwischen: Keine XP dafür oder XP dafür, aber dann unter Umständen auch XP für Fälle in denen ich diesen Tod nicht initiert habe (zb NPC fällt einfach so runter).

Danke schonmal. Wer miesen Code sieht darf mich gerne draufhinweisen (ich denke das obige ist nur solcher), ich habe jedoch sehr große Angst davor dass ich 2 NPCs nahezu gleichzeitig töte (so unwahrscheinlich es sein mag) und dann ein XP-Gewinn "wegfällt" (habe gerade vergessen wie das in klug heißt).
 
@ Tywele: Ich habe gerade kein CK zur Hand, würde es aber so in der Art machen:

Code:
; OnInit oder so etwas
registerforanimationevent(playerRef, <"BogenSpannBegin">)
;EndEvent/Function

Event OnAnimationEvent(ObjectReference source, string eventName)

  if(playerRef == source)
    if(eventName = <"BogenSpannBegin">)
       wait(1.4)
       sendanimationevent(playerRef, <"BogenAbschuss">)
    endif
  endif

EndEvent

Ohne CK kann ich die Animationsnamen nicht nachschauen, es sollte aber so etwas ähnliches vorhanden sein. die Animationen findet man irgendwo unter Gameplay oder Characters, ich weiß es nicht mehr genau.

@ Drakons:

Ziemlich umständlich, wie Du es gerade machst. Sowieso fehlen mir gerade so ziemlich alle Funktionen, die Du in Deinem Skript aufrufst. Noch dazu ist es bei Papyrus auf keinen Fall empfehlenswert Funktionen aus anderen Skripts aufzurufen. Papyrus ist da sehr schlecht konzipiert, ich will da jetzt auch nicht viel erklären, im Beth-Forum gibt's einige gute Threads dazu (z.B. hier und hier). Aber ich kann Dir sagen, dass einige Funktionen langsamer (oder zu vermeiden sind) als andere. Ein Beispiel dazu wäre game.getplayer(). Eine Property mit dem Spieler als Wert ist 1000 Mal schneller als game.getplayer(). Keine Hyperbel, wurde getestet, wirklich 1000 Mal schneller als die Funktion.
Ich würde also alles in ein Skript packen und nur auf eine Globale setzen, mit der man die aktuelle Erfahrung des Spielers speichert. Ein unabhängiges Skript auf jedem NPC kannst Du damit erreichen. Benutze ich selber in Locational Damage, benutzt so ziemlich jede Combat-Mod, weil es die beste Methode zum Verteilen von Skripts ist.
Die Änderung des Lebens kannst Du ganz einfach so machen, wie Du es erwähnt hast: playerRef.setav(playerRef.getactorvalue("Health") + 10). Hierzu noch ein kurzes Wort: Bei Papyrus niemals Abkürzungen wie getav() verwenden. Diese rufen einfach die eigentliche Funktion auf, was mit Papyrus einen sehr großen Zeitunterschied ausmacht.
Zu der Physikengine habe ich leider nichts parat. Scheint wohl nicht lösbar zu sein.


Bei Unklarheiten einfach nachfragen, ich denke manchmal, dass alles verständlich ist, ich aber trotzdem etwas vergessen habe.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Tywele und Drakons
Habe das Skript jetzt ein wenig überarbeitet:
(ok eigentlich fast alles)

Code:
Scriptname RLExpGainMonitor extends activemagiceffect    
 
Actor Target

Actor Property PlayerRef Auto
MiscObject Property RLExpItem auto

GlobalVariable Property RLPlayerExp Auto
GlobalVariable Property RLPlayerLevel Auto
GlobalVariable Property RLPlayerSkillPoints Auto
 
Event OnEffectStart(Actor akTarget, Actor akCaster)
    Target = akTarget
    GotoState("active")
EndEvent

State active
    
    Event OnDying(Actor akKiller)
        if (akKiller == PlayerRef)
            int Gain = Target.GetItemCount(RLExpItem)
            
            RLPlayerExp.SetValue(RLPlayerExp.GetValue() + Gain)
            Debug.Notification("Du erhälst " + Gain + " Erfahrungspunkte")

            int CurrentLevel = RLPlayerLevel.GetValueInt()
            int LvlUpExp = 50 * CurrentLevel * (CurrentLevel + 1)

            if (RLPlayerExp.GetValueInt() >= LvlUpExp)
                RLPlayerLevel.SetValue(CurrentLevel + 1)
                RLPlayerExp.SetValue(RLPlayerExp.GetValue() - LvlUpExp) 
                
                RLPlayerSkillPoints.SetValue(RLPlayerSkillPoints.GetValue() + 10)
                PlayerRef.SetActorValue("health", PlayerRef.GetActorValue("health") + 10)
                Debug.Notification("STUFENAUFSTIEG! Level " + RLPlayerLevel.GetValueInt() + " erreicht!")
            EndIf
        EndIf

        UnregisterForUpdate()
        GoToState("inactive")
    EndEvent

EndState

State inactive
;Do Nothing
EndState

Dieses Skript wird mittels des Cloack-Effektes (usw..) auf die NPC gelegt, wie im Link den Kahmul mir auch gegeben hat.
Die vielen Function-Calls habe ich rausgenommen, versucht das ganze zu ordnen und Abkürzungen durch natives ersetzt.
Was ich in den beiden Threads über die Scriptsprache von Skyrim lesen konnte hat mich doch einigermaßen erschreckt,
da scheint mir ja selbst die von warcraft3 besser :D

@Kahmul: Eine Sache verstehe ich jedoch nicht: Du sagtest ich solle bloß eine Global für die Exp nutzen. Wie kann ich mir das vorstellen?
Ich will meinem Spieler ja "Skillpunkte" und einen Levelwert geben, da muss ich doch auch Werte für haben die ich abspeichere.

Allgemein läuft das Skript jetzt aber scheinbar schneller durch, es fühlt sich zumindest danach an ;)

edith: Das UnregisterForUpdate() und die States sind noch Überbleibsel aus der Spielerei mit den Erklärungen der dortigen Seite. Ich denke mal die können weg..
edit2: Der Exp-Token wird nun unter auch vom NPC entfernt wenn es stirbt.
 
Zuletzt bearbeitet:
Das Skript sieht jetzt ziemlich sauber aus, ich sehe nichts verbesserungswürdiges mehr. Was ich mit der Globalen gemeint habe, hast Du bereits umgesetzt. Ich hatte nicht an die Skillpunkte oder das Level des Spielers gedacht.
 
  • Like
Reaktionen: Drakons
Danke Dir!

Habe jetzt wie im Edit gesagt die States etc. entfernt, da ich ja nicht auf Updates angewiesen bin.
Außerdem habe ich vor dem SetActorValue noch ein RestoreActorValue("health", 550) eingefügt, da "GetActorValue" leider den aktuellen Wert und nicht den maximalen liefert (sodass man nach einem Kampf mit LvlUp plötzlich 12 und nicht 60 maximal hatte[bei 50 startleben])

Falls noch jemand etwas wegen der Physik weiß: immer raus damit! ;)

Ansonsten hier die nächste Frage (die sich thematisch anschließt). Ich möchte jetzt für einige meiner Waffen eine Equip-Voraussetzung schaffen. ZB: 120 Ausdauer zum Tragen
Ich habe das so gemacht (pseudocode)
Code:
Int Property minStamina Auto
Actor Property PlayerRef Auto

Event OnEquipped(Actor akPerson)
    if ( (akPerson == PlayerRef) && (minStamina > PlayerRef.GetActorValue("stamina")) ) ;könnten auch getrennt werden
         PlayerRef.UnequipItem(Self.GetBaseObject())
    EndIf
EndEvent

Beschreibung: Sollte hoffentlich alles klar sein. Wenn der Spieler eine Waffe anlegt und weniger stamina als MinStamina hat, wird die waffe wieder abgelegt. MinStamina ist hierbei eine Property damit man nur ein Skript für n Waffen braucht.

Dazu zwei Fragen: Wenn ich jetzt im Menü die Waffe anlege und die Vorraussetzungen nicht erfülle, wird sie sofort wieder abgelegt, ABER: Das angelegt Zeichen bleibt erhalten. Muss ich mit dieser Unschönheit leben? Oder lässt sich das beheben (Am besten wäre natürlich dass man das Item erst gar nicht anlegen kann wenn man entsprechende Bedingungen nicht erfüllt. Ich habe da eine Idee, die ich morgen mal poste, wenn mir niemand zuvorkommt)
Zweite Frage: Den Max-Wert des Staminas kann ich zwar rein theoretisch mit RestoreActorValue erhalten, aber ich möchte nicht dem Spieler immer wieder die Ausdauer auffüllen nur um zu gucken ob er die Vorraussetzung erfüllt. Habe ich da vielleicht ne Funktion übersehen?

Achja und nebenbei: Worin besteht der Unterschied von SetAV und ForceAV?
 
Zuletzt bearbeitet:
Es gibt GetBaseActorValue.
ForceActorValue beeinflusst den aktuellen Wert, SetActorValue den Basiswert, soweit ich das verstanden habe.
Vielleicht kannst Du statt unequipItem() einfach removeItem() und direkt danach addItem() machen. Danach sollte es nicht mehr als "angelegt" angezeigt werden.
 
  • Like
Reaktionen: Drakons
Ich wollte mal hier anfragen, ob mir vielleicht jemand sagen könnte, mit welchem Skript das Spiel beginnt? Wenn derjenige mir dann den Skript auch noch erklären könnte wäre das super :)
 
@Kahmul:
So, GetBaseActorValue funktioniert tadellos, vielen Dank dafür ;)

Das Anlegen, bzw. Ablegen des Items bereitet mir immer noch Probleme.
Varianten:
(1) Unequip: Hier ist wie schon genannt das Interface immer noch blöd das es das Item noch als angelegt anzeigt
(2) Remove und dann Add: Recht langer Verarbeitungsdauert. Funktioniert jedoch nur beim ersten Mal, danach wird das Skript zwar ausgeführt, aber das Item wird nicht mehr entfernt noch hinzugefügt.
(3) Remove mit Argumenten: Silentremove und in den Container Player übertragen. Äußerst flott, Skript startet danach überhaupt nicht mehr

Bei 3 könnte ich mir vorstellen das das Item als "tot" gilt. Das ergibt aber keinen Sinn. Vielleicht aber, dass das Skript sich als "Listener" (oder sowas in der Art) ausgetragen hat. Nach manuellen Abwerfen des Items klappt es übrigens wieder einmal. Bei 2 klappt es einmal, nach abwerfen des Items auch nicht wieder. Dafür bearbeitet er das Skript. Ich denke es liegt bei (2) und (3) daran, dass die Properties oder Variablen nen falschen oder leeren Inhalt bekommen

@Dacri, kann dir da nicht weiterhelfen, aber soweit ich weiß ist zumindest die Quest MQ101 die Spielbeginnende
 
Zuletzt bearbeitet:
  • Like
Reaktionen: Dacri
In der Script QF_MQ101_0003372B.psc habe ich jetzt eine Zeile gefunden die lautet:
Code:
Game.GetPlayer().moveto(Alias_PlayerStartMarker.GetReference())
(Zeile 792)
Aus dem Zusammenhang gerissen ist das wohl etwas schwer, aber wäre es plausibel, dass diese Quest den Spieler zu Anfang positioniert?
Und wenn ja, wie kann ich diesen Script dann in eine vollkommen neue *.esm einbinden, die ohne die Skyrim.esm auskommen soll? Das ganze bräuchte ich in einem Übungsprojekt...und es wäre natürlich schön wenn ich erstellte Landschaft auch ingame begutachten könnte :)
Danke schonmal!
 
Wenn du etwas mit eigenständiger, von der Skyrim.esm und Skyrim unabhängiger *.esm machen willst, also quasi ne Total Conversion (Auch wenns nur zum Üben ist)
dann solltest du mal bei SureAI vorbeischauen, die haben das alles schon bereitgestellt in deren Downloadbereich, denn es ist wohl echt ne Qual das hinzubekommen, da da Fehler an Stellen auf tauchen die man vorher noch gar nicht kannte.

Wenn ich dich missverstanden haben sollte: Ja, dass ist soweit ich weiß der im Spiel platzierte Startmarker des Spielers.
 
  • Like
Reaktionen: Dacri
Du hast mich ganz richtig verstanden, ich wollte das mit den Übungszwecken nur betonen, damit du mich nicht für wahnsinnig hältst...Das ganze läuft sozusagen um endlich den Umstieg von CS auf CK zu schaffen.
Ich habe bereits gehört, dass es auf SureAI eine vorbereitete Skyrim.esm gibt, die ohne alles ist, aber ich wollte einfach mal versuchen, ob ich es selber hinbekomme. Aber vergleichen habe ich mir ja nicht verboten, ich werde mir einfach ihren Skript mal ansehen, und schauen ob ich ihn angewandt bekomme. Sobald ich ins Spiel kann, kann ich ja die ganzen Skripting-Tutorials machen. Ich melde mich wieder, wenn es Probleme gibt :) Danke für die Idee!