[Gelöst] In Ability herausfinden, ob Träger angegriffen wurde? (Papyrus)

Dieses Thema im Forum "[Skyrim] Modprobleme (SSE)" wurde erstellt von HughJanus, 18. November 2022.

  1. HughJanus

    HughJanus Neuankömmling

    Hallo zusammen,

    ich habe einen Cloak-Spell, der alle NPCs mit einer Ability versieht, die sich in der Umgebung des PlayerCharacters befinden.
    In dieser Ability läuft ein OnUpdate(), welches ein bisschen Code enthält. Dort würde ich gerne wissen, ob der Träger seit dem letzten Update angegriffen wurde bzw. Schaden erlitten hat (OnHit()).
    Wie sähe das im Code aus? OnHit() ist ja ein Listener, oder? Muss ich diesen außerhalb des OnUpdate() anlegen oder funktioniert so eine Detection nur, wenn ich mir in jedem Update die Lebenspunkte merke und prüfe (ob sie weniger sind, als zuvor)?

    Beste Grüße
    HJ
     
  2. Werbung (Nur für Gäste)
  3. PixelMurder

    PixelMurder Angehöriger

    OnHit ist ein Event-Listener, wie auch OnUpdate, beide müssen aber separat stehen. Ein gemeinsamer Verbinder kann eine Variable sein, die in OnHit geändert und in OnUpdate ausgelesen wird. Diese Variablen musst du ausserhalb der Blöcke definieren, sonst funktionieren sie nur innerhalb des betreffenden Blocks.

    Diese Notation ist nur eine Denkanregung, es würde so nicht kompilieren. OnHit hat ja Parameter, die notiert werden müssen und mit denen kann man ermitteln, ob etwa nur Zauber gezählt werden sollen. Es lohnt sich, über jede benutzte Funktion im Wiki nachzulesen, da solche, die selbsterklärend scheinen, nicht immer genau das tun, was man erwartet.

    ScriptName .....

    int hitCount = 0
    int hitEval = 0
    Actor myActor

    Event OnEffectStart(Actor akTarget, Actor akCaster)
    myActor = akTarget
    EndEvent

    Event OnHit()
    hitCount++ (oder hitCount = hitCount + 1)
    EndEvent

    Event OnUpdate()
    if hitCount != hitEval
    hitEval = hitCount
    Debug.Notification((myActor.getactorbase() as form).getname() + " wurde seit dem letzten Mal getroffen")
    endif
    EndEvent
     
  4. HughJanus

    HughJanus Neuankömmling

    Alles klar, vielen Dank.
    Wie sieht das Performance-technisch aus? Ist es weniger belastend, wenn ich einfach die Lebenspunkte beim OnUpdate prüfe oder ist der OnHit-Listener aus Performance-Sicht vernachlässigbar?
     
  5. PixelMurder

    PixelMurder Angehöriger

    Ich denke, da musst du dir keine Gedanken machen.
    Etwas anderes wäre es, wenn du etwa alle Sekunden eine Distanz zwischen einem Actor und dem Player ausliest, sowas geht auf die Performance.
     
  6. HughJanus

    HughJanus Neuankömmling

    Das Event OnHit() schmeckt ihm im Script nicht - wahrscheinlich, weil er nicht weiß, dass sich das OnHit auf den Actor beziehen soll, oder?
    Wie gebe ich ihm diese Info?
     
  7. PixelMurder

    PixelMurder Angehöriger

    HughJanus gefällt das.
  8. Werbung (Nur für Gäste)
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden