NPCs sprechen lassen (via Papyrus)?

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

  1. HughJanus

    HughJanus Neuankömmling

    Hallo zusammen,

    ist es möglich, NPCs via Papyrus sprechen zu lassen?
    Ich habe mir auf youtube ein paar Videos angesehen (z.B. dieses) und es scheint so, als könnte man NPCs ausschließlich via Quest-Objekt sprechen lassen. Ist dies korrekt oder gibt es einen Weg via Skript Befehle an einen NPC zu senden, die ihn ausgewählte, generische Sounds (wie z.B. Schnarch-Sounds, eine Begrüßung, etc.) abspielen lassen?
    Und gibt es irgendwo eine Liste dieser generischen Sounds?

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

    HughJanus Neuankömmling

    Ich habe das hier gefunden: Say()
    Weiß jemand, wo ich eine Liste der "Topics" finde bzw. wie ich dieses korrekt initialisiere?
     
  4. PixelMurder

    PixelMurder Angehöriger

    Hier geht es ja nicht darum, einen NPC genau ein Audio sagen zu lassen, ein Topic ist eine Kategorie von Dialogen, die einer zu einem Sachverhalt sagen kann.
    Die Namen der Topics findest du in den Dialog-Tabs im Quest-Objekt, auf der linken Seite. Kannst ja mal nach "Dialog" suchen in den Quests. Quests sind ja normalerweise zur Quest-Steuerung da, aber manch Quests dienen nur für Dialoge.
     
  5. HughJanus

    HughJanus Neuankömmling

    Und gibt es da auch Sub-Objekte, die möglicherweise dann die Sounds enthalten?
    Wie würde ich ein solches Objekt initialisieren? (kannst du mir vielleicht ein kleines Code-Snippet von 2-3 Zeilen schreiben)
     
  6. PixelMurder

    PixelMurder Angehöriger

    Die einzelnen Dialog-Möglichkeiten innerhalb eines Topics enthalten jeweils das Audio. Ich denke, dass das so funktioniert, damit ein NPC nicht immer das exakt gleiche Audio verwendet, es geht um Abwechslung.
    Das mit dem Say(Topic) sollte für dich absolut funktionieren, du musst nur das richtige Topic finden, z.B. in der Quest DialogueGeneric oder so.
     
  7. HughJanus

    HughJanus Neuankömmling

    Ich habe da nur einen GenericWounded:
    upload_2022-11-18_18-38-27.png

    Kann ich mir irgendwie anhören, was in den einzelnen gelben Fragezeichen-Boxen so an Sounds drinnen ist?
     
  8. HughJanus

    HughJanus Neuankömmling

    Ich hab jetzt im Reiter "Misc" unter "GenericDialogueWounded" das Topic gefunden, denke ich:
    [​IMG]
    Klappt jedoch leider nicht (es passiert nichts):
    Code:
    Scriptname EffectScript extends activemagiceffect
     
    Topic GenericDialogueWoundedShared
    Actor akNPC
    
    Event OnEffectStart(Actor akTarget, Actor akCaster)
        akNPC = akTarget
        RegisterForSingleUpdate(0.25)
    EndEvent
     
    Event OnUpdate()
        akNPC.Say(GenericDialogueWoundedShared)
        RegisterForSingleUpdate(0.25)
    EndEvent
     
    Event OnEffectFinish(Actor akTarget, Actor akCaster)
        UnregisterForUpdate()
    EndEvent
    Ich habe dann, nachdem ich im Loverslab-Forum den Rat bekommen habe, via xEdit Dialoge gesucht und den Standard-Yield-Satz gefunden (den sollte eigentlich jeder NPC haben, oder?):
    [​IMG]

    Wie könnte ich diesen testen? Denn Say() nimmt leider die FormID nicht (habe den Rückgabewert von GetForm() mit der ID des Satzes im Say() als Argument mitgegeben, doch erhalte Fehler - falscher Typ).
     
  9. PixelMurder

    PixelMurder Angehöriger

    Dann such mal nach Dialog oder Generic. Es gibt Quests, die nur für Dialoge sind und sonst keine Eigenschaften haben. In der Quest gibt es verschiedene Tabs, wo die Topics zu finden sind. Innerhalb eines einzelnen Dialogs kannst du wahrscheinlich das Audio hören.
    Übrigens gibt es noch eine andere Vorgehensweise. Und zwar machst du den NPC im CK auf, denn du etwas sprechen lassen willst, da hat es einen Button links unter dem Namen, der nach meiner Erinnerung mit Dialogue beschriftet ist. Dann geht ein Fenster auf, wo sämtliche Dialoge drin sind, die dieser NPC sprechen kann. Wahrscheinlich ist es so, dass man mit Say() nur Dialoge kriegt, die der NPC darf. Wenn einer z.B. von Winterhold ist, kann er möglicherweise keine Dialoge von Rifton sprechen, auch wenn das keinen Script-Fehler ergibt.
     
  10. HughJanus

    HughJanus Neuankömmling

    Ich weiß leider noch nicht, wie ich so ein Topic korrekt verwende (wie wird es initialisiert, etc.).
    Habe jetzt beispielsweise mal das "ActorCollidesWithActor" genommen, doch wieder höre ich nichts (ich force sämtliche NPCs rund um mich via Cloak-Spell - irgendjemand müsste da schon mal was sagen, wenn ich es richtig machen würde^^):
    upload_2022-11-18_20-13-30.png

    Code ist wieder derselbe wie oben, nur eben mit "ActorCollidewithActor" anstatt dem Wounded.
    Ich glaube, das Initialisieren oder das Aufrufen passt noch nicht.
     
  11. PixelMurder

    PixelMurder Angehöriger

    Hast du mal rechts in der Liste auf einen Eintrag doppelgeklickt?
    Du musst überhaupt nichts initialisieren, alles, was sich auf der rechten Seite befindet, steht zu deiner Verfügung.
    Say(CombatGrunt)

    Das hier ist wohl der Fehler:
    Topic GenericDialogueWoundedShared

    Du musst schreiben: Topic Property GenericDialogueWoundedShared Auto
    Dann das kompilieren. Dann kannst du mit der rechten Maustaste auf das Script im MagicEffect und Properties auswählen. Hier füllst du den richtigen Topic für GenericDialogueWoundedShared ab.
    Wenn du nur Topic GenericDialogueWoundedShared schreibst, dann ist es eine Variable innerhalb des Scripts, die nicht einfach so gefüllt wird.

    Tipp:
    Topic Property MeinVerwundetDialog Auto <--Variablennamen können beliebig sein
    Topic Property GenericDialogueWoundedShared Auto <-- Wenn der Name gleich wie etwa der Topic ist, kannst du aber Autofill klicken, was die Arbeit erleichtert
     
  12. HughJanus

    HughJanus Neuankömmling

    Bist der Beste - genau das wars.
    Herzlichen Dank!
    Dann fehlt mir nur noch die Antwort auf zwei Fragen:

    1. Wie kann ich in xEdit oder CK schnell nach Dialogzeilen suchen? Beispiel: ich möchte jetzt die "yield" Zeile finden ("I yield! I yield!") - wie gehe ich am besten vor?
    In xEdit gibt es zwar die Suche nach Namen, doch die setzt den Cursor immer nur ans nächste Ergebnis und zeigt keine Ergebnisliste. Im CK sind die Topics in den Quests versteckt, daher wirds hier schwierig beim Suchen.

    2. Kann ich einzelne Zeilen (beim ActorCollideswithActor beispielsweise irgendeine der rechterhand ersichtlichen Zeilen) sprechen lassen?
     
  13. PixelMurder

    PixelMurder Angehöriger

    Beide Tools sind nicht gut darin, sowas zu finden und gut darzustellen, aber das CK ist in dem Fall wohl besser. Natürlich habe ich auch schon an Dialogen herumgeschraubt und möglicherweise sogar mal das Say() benutzt, aber es ist nicht meine Domäne. Soweit ich weiss, musst du einfach mal alles durchforsten und dir merken, wo Zeug sein könnte.
    Wenn ich gerade ein CK installiert hätte, würde ich nachsehen. Hast du probiert, die Zeilen rechts doppelt zu klicken? Es könnte da einen Button geben, um das Audio auszugeben.
     
  14. HughJanus

    HughJanus Neuankömmling

    OK, dann klick ich mich mal durch, danke.
    Ja, das hab ich schon probiert, aber keinen solchen Knopf gefunden:
    upload_2022-11-19_9-42-24.png
     
  15. HughJanus

    HughJanus Neuankömmling

    Es stellt sich außerdem heraus, dass man die Topics, welche in Klammern stehen, so nicht in der Property-Liste findet.
    Eine Idee, wie ich diese zuordnen kann?

    Edit: habe in xEdit gefunden, dass diese Dialoge keine EditorID, sondern nur eine FormID haben. Das schließt sie wohl für die Verwendung via Property aus? Gibt es einen anderen Weg?
     
    Zuletzt bearbeitet: 19. November 2022
  16. PixelMurder

    PixelMurder Angehöriger

    Ich denke, dass die nicht dafür gedacht waren, dass die per Script genutzt werden. Man könnte denen aber eine EditorId geben, wenn man wollte.
    Ich würde aber alles mit Vorbehalt nehmen, was ich zum Thema Dialoge sage, ich bin da nicht der Spezi.

    Möglicherweise könntest du die bsa mit dem Audio an einen Ort entpacken und dann diese so anhören, musst halt einen Player haben, der das Format unterstützt. Oder du probierst halt herum, was die im Game sagen, wenn du NPC verschiedene Topics zuweist.
     
  17. HughJanus

    HughJanus Neuankömmling

    Ich hörs mir eh im Spiel an :)
    Gibt es außer dir hier auch noch so bewanderte Modder oder warte in diesem Forum vergebens auf Unterstützung bzgl. Dialogen? (nur damit ich weiß, ob ich mich wo anders auch noch anmelden muss^^)

    Danke für deine Hilfe!
     
  18. PixelMurder

    PixelMurder Angehöriger

    Die meisten sind halt gegangen, da die Games ausgezockt sind. Ich selbst habe Skyrim vor drei Wochen oder so deinstalliert, weil ich es nicht mehr ertragen konnte, und merkte, dass ich nur noch am Basteln bin, aber keine Lust mehr hatte, mich mit irgend wem in dem Game zu kloppen.
    Kann aber sein, dass ich nächstens Skyrim wieder spontan installiere und zum Selbstzweck modde, weil nicht nur Bethesda versagt hat; fast jede mir bekannte und/oder einst geliebte Marke hat als letzte Version nur noch ein dünnes bis total abgefucktes Machwerk abgekriegt und ich kann in der Industrie nur noch Gier gepaart mit Inkompetenz erkennen. Da zocke ich doch lieber Creation Kit für Skyrim, als ein total abgefucktes Saints Row-Reboot, für das mir sogar fünf Mücken zu schade sind. Im Gaming bin ich inzwischen definitiv vom Zynismus bestimmt, dass ich überhaupt noch mit extrem wenig Hoffnung auf Starfield schiele, kann man nur mit purer Verzweiflung erklären.
    Du bist wahrscheinlich sogar einer der wenigen Gründe, die mich überhaupt noch hier reinsehen lässt, ich habe ehrlich gesagt nicht mal mehr Lust einen Screenshot in "Andere Spiele" zu posten. Danke, Todd, der keinen Finger rührt, solange es noch was auszulutschen gibt. Anyway, ich glaube kaum, dass du ein interessanteres Bethesda-Forum finden wirst, es leiden alle am selben Problem.
     
  19. HughJanus

    HughJanus Neuankömmling

    Mhm, verstehe dich absolut.
    Ich habe angefangen Skyrim zu modden, da es jetzt endlich DRM-frei auf GOG verfügbar ist :D
    Der Kampf ist auch ein Abtörner, darum arbeite ich gerade daran, alles etwas aufzupeppen - zumindest ist das die Idee^^
    Meine aktuellen Ziele:
    • NPCs in eine Art "verwundet"-Status zu schicken (habe drei Animationen gefunden, die ich verwenden werde), wenn sie unter einem gewissen Prozensatz an Lebenspunkten sind.
    • NPCs im "verwundet"-Status sprechen lassen (Schmerz, Bitte um Hilfe, etc.)
    • Die paar Hintergrundvariablen (Prozentsatz fürs Niedergehen, verwundet-Audio ein/ausschalten) via MCM veränderbar machen.
    Dann kommt der härtere Part:
    • NPCs bewegen sich je nach Verletzung anders (wenn es denn Animationen dazu gibt)
    • NPCs erhalten Mali je nach Verletzung (langsamere Regeneration von Ausdauer/Magica, langsamere Bewegungsgeschwindigkeit, schlechteres Ziel, etc.)
    • Befreundete NPCs können niedergegangene NPCs "wiederbeleben"
    Mit dem ersten Part bin ich bald durch, so das Glück mich nicht verlässt. Der zweite Part wird schwierig und ich weiß noch nicht, ob ich das packe bzw. die Muße dazu habe.
    Sobald der erste Teil aber mal steht und in Kämpfen eine sich gut anfühlende Abwechslung zwischen "stirbt sofort", "geht in den vanilla bleedout mode" und "geht in eine der 'verwundet'-animationen" herrscht, hab ich bestimmt auch mehr Bock aufs Kämpfen.
     
  20. HughJanus

    HughJanus Neuankömmling

    Ich habe jetzt das Thema, dass NPCs am Boden immer noch mit mir reden lol
    Kann ich denen das irgendwie abdrehen? :D
     
  21. PixelMurder

    PixelMurder Angehöriger

    Wie wäre es mit:
    if myActor.IsBleedingOut() == false
    Say(X)
    endif

    Lohnt sich sowieso, diese Seite mal anzusehen und sich annähernd zu merken, was möglich ist.
    https://www.creationkit.com/index.php?title=Actor_Script

    IsBleedingOut ist, glaube ich, auch eine Condition, die man in Dialogen verwenden kann, aber du solltest nicht unnötig Records ändern.
     
  22. 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