Troy's Scriptthread (inkl. Auslösen von Animationen)
Hey Ho,
Ich brächte da ein wenig Hilfe es geht um was Scripttechnisches, und zwar:
Ich möchte mal eine etwas größere Mod machen, es geht darum Animationen in das Spiel einzubinden. Heißt Akrobatische Angriffe, Schwert durch den Körper rammen u.ä.
Einen NPC durch einen Zauber eine Animation abspielen zulassen ist ja noch ziemlich einfach, doch das ganze soll per Quest funktionieren. Also kann ich kein GetSelf verwenden, weshalb ich auf GetCrosshairRef umgestiegen bin. Das ganze soll per Knopfdruck passieren, ich hab dazu einen Extra Quest zum auswählen des Buttons gemacht. Die Funktioniert auch, bis auf eine kleinigkeit mit OBSE (komm ich später nochmal drauf zurück.)
Ich hab das ganze jetzt mal versucht, nur leider klappt das Ingame nicht mit der Animation (das folgende Script ist nur ein Testscript ob das mit dem Abspielen überhaupt klappt)
Main Script:
KeySelectorscript:
So bei der Anzeige des Keys zeigt er ne Obse Warnemdlung an das es nicht funktioniert. Ich hab OBSE v0017b.
Die Animation hat übrigens die Condition "GetQuestVariable XQuest Move == 1" und ist nur eine kleine Testanimation
Ich wollte wenn es klappt gleich mehrere Animationen einbauen (An die 5-10 weiteren, je nach dem was mir einfällt) und wollte deswegen eine bestimmte Extra Quest anlegen die die Conditions abfragt, wenn jemanden dazu noch was einfällt wäre es nett was dazu zu sagen. Sollte ich nicht weiter kommen melde ich mich wieder hier.
Edit: Noch vergessen: Der Spieler soll zur gleichen Zeit auch eine Animation abspielen, das müsste natürlich beachtet werden (das Obere Script ist jetzt halt nur für die NPC) heißt ich muss auch irgendwie abfragen wann der NPC die Animation nicht mehr spielt um ihn dann zu töten. Hat da noch jemand ne Ahnung wie das geht?
Hoffe ich hab nichts vergessen zu erwähnen. Bitte um Hilfe dabei.
Mfg
SirTroy
--
If you're not too great at construction - don't worry! You can place a variety of characters in silly positions. Ihr glaubts mir nicht? Klick
Was willst du denn mit dem > 0 abfragen? Was soll > 0 sein?
Fall damit auch Target.GetDistance Player gemeint ist müsstest du das noch extra dazu schreiben, kannst es im Grunde aber auch gleich weglassen, da GetDistance immer > 0 ist.
Zitat
Target.Playgroup Idle 1
Target.PickIdle 1
...
PickIdle sollte hier genügen und hat btw. auch keinen Parameter.
Zitat
If Timer == 5
...
Wird niemals war werden. Zum einen wird Timer nur auf 3 gesetzt und danach immer ein Wert davon abgezogen.
Außerdem ist es äußert unwahrscheinlich, dass du durch abziehen von GetSecondsPassed genau auf 5 kommst. Mach da doch ein <= draus.
Zitat
Edit: Noch vergessen: Der Spieler soll zur gleichen Zeit auch eine Animation abspielen, das müsste natürlich beachtet werden (das Obere Script ist jetzt halt nur für die NPC) heißt ich muss auch irgendwie abfragen wann der NPC die Animation nicht mehr spielt um ihn dann zu töten. Hat da noch jemand ne Ahnung wie das geht?
Also:
Zu Pickidle 1 meint jemand aus den Offiziellen Foren:
Zitat
pickidle 1 and the NPC evaluates the animation options and chooses the best matching option.
...
Deswegen Pickidle 1
Das mit dem Timer war ausversehen, weil ich erst Set Timer to Timer + Getsecondspassed machen wollte dann aber doch nicht gemacht hab
Das mit dem abspielen versuch ich jetzt per Timer zu lösen. In Nifskope kann ich ablesen wie lang die einzelnen Animationen sind (in Sekunden). Also kann ich ingame einen Timer einbauen.
If Timer == 0.1 or whatever um den Feind dann entweder zu töten oder wegfliegen zu lassen.
Ich werde das mit dem Abspielen auch via Items machen. Also als Condition GetItemCount.
Jetzt noch ne frage:
Um den NPC die Animation auch wirklich abspielen zu lassen, bringt es da etwas ihn Restrained zu setzen, oder ihn zu Belasten (also mit Gewicht vollhauen)??
--
If you're not too great at construction - don't worry! You can place a variety of characters in silly positions. Ihr glaubts mir nicht? Klick
Wie gesagt: PickIdle verwendet keine Parameter also kannst du die 1 auch einfach weglassen.
Zitat
Das mit dem Timer war ausversehen, weil ich erst Set Timer to Timer + Getsecondspassed machen wollte dann aber doch nicht gemacht hab
...
Kann ich ja nicht wissen, aber warum startest du dann nicht bei 0?
Zitat
If Timer == 0.1 or whatever um den Feind dann entweder zu töten oder wegfliegen zu lassen.
...
Ich plädiere trotzdem noch für ein >= / <= (je nach verwendeter Methode) anstelle des ==, ich bin mir nämlich ziemlich sicher, dass in so gut wie keinem Fall deine Grenze genau getroffen wird.
PS:
Ich hab den Titel mal etwas angepasst.
--
Ich kam, sah, und konnte meinen Augen nicht trauen
Huh also mittlerweile spielt der Feind die Animation ab. Ich habs wie gesagt über ein Item geregelt. Ich versuch momentan noch rum und melde mich später wieder falls probleme gibt.
Eine andere sache ist:
Ich wollte wenn der Feind bereit zum Töten ist mit Pluggy_HUD auf dem Bildschirm die mitteilung bringen das man den Knopf drücken soll. Am besten soll der Knopf der tastatur angezeigt werden (Also ein kleines Bild)
Edit: Lol ich kann keine Beiträge von dir bewerten also sag ich hier: Danke
--
If you're not too great at construction - don't worry! You can place a variety of characters in silly positions. Ihr glaubts mir nicht? Klick
Huh also mittlerweile spielt der Feind die Animation ab. Ich habs wie gesagt über ein Item geregelt. Ich versuch momentan noch rum und melde mich später wieder falls probleme gibt.
...
Falls du auf die Timer-Sache anspielst: die ist auch nur für das wegschleudern/töten verantwortlich.
Falls du die PlayGroup/Parameter-Sache meinst: ich hab nie gesagt, dass das nicht funktioniert. Es ist nur unnötig.
Zitat
Eine andere sache ist:
Ich wollte wenn der Feind bereit zum Töten ist mit Pluggy_HUD auf dem Bildschirm die mitteilung bringen das man den Knopf drücken soll. Am besten soll der Knopf der tastatur angezeigt werden (Also ein kleines Bild)
...
Da das nicht der Hauptteil der Mod ist: auf jeden Fall optional (IsHudEnabled).
Du weißt schon, wegen CTDs und so.
Ansonsten: NewHudS/NewHudT können nicht mit dem Set-Befehl verwendet werden, sofern alle Parameter verwendet werden (Absturz des CS beim kompilieren). Schuld ist der sog. 73-Bytes Bug. IIRC hat der irgendwas mit Buffer Overrun zu tun. Wer genaueres wissen will soll Scruggsy fragen.
Auf jeden Fall sorgt der dafür, dass jedes mal wenn bei einem Set-/If-/Elseif-Befehl die kompilierte Größe mehr als 73 Bytes beträgt das CS beim speichern/kompilieren des Scripts abstürzt.
Einfachste Methode das zu verhindern:
Verwende den Let-Befehl, der hat das Problem nicht.
Alternative: lass ein paar Parameter weg und bestimme die Eigenschaften mit separaten Befehlen.
Ab OBSE v0018 Beta 2 laufen (mit diese OBSE-Version kompilierte) Skripte mit OBSE-Expressions (let/Eval/While/ForEach/etc.) nicht mehr, sofern nicht mindestens v0018 Beta 2 installiert wurde.
Sofern keiner dieser Befehle verwendet wurde ist alles wie vorher.
Zitat
Edit: Lol ich kann keine Beiträge von dir bewerten also sag ich hier: Danke
...
Die Funktion wird momentan noch getestet, könnte sich also noch ändern.
--
Ich kam, sah, und konnte meinen Augen nicht trauen
So also ich bin schonmal ein wenig vorrangekommen.
Der Button wird nun in der MessageBox angezeigt, Der NPc spielt die Animation ab, der Player auch. Nur das mit dem Timer funktioniert nicht.
Empfiehlt sich da eventuell eine extra Quest einzurichten?
Das Script sieht bis jetzt so aus (Später kommen noch diverse abfragen dazu, das ist erstmal zum testen)
Ich hoffe es reicht den GetSecondsPassed befehl am anfang einmal zu verwenden, ich denke mal der läuft dann halt immer mit, oder?
Die Animation des Gegners besitzt die Condition GetItemCount ZTFinisherRing == 1, und die des Player GetQuestVariable XQuest Possible == 2 UND GetIsReference PlayerREF.
Wie gesagt das funktioniert. Er will das mit dem Timer aber einfch nicht machen -.-* Kommt mir vor als wenn Oblivion den Timer einfach ignoriert ô.o
Jemand nen Plan wie das funktionieren könnte? Und empfiehlt es sich eventuell einen Conditionquest mit einzubringen? Zurzeit orientier ich mich noch ein bisschen an Deadly Reflex (von SkyCaptain), nur erweist es sich als schwieriger als erwartet aus seinen Scripts schlau zu werden. (Hab den anfang zwar schon aber naja)
--
If you're not too great at construction - don't worry! You can place a variety of characters in silly positions. Ihr glaubts mir nicht? Klick
Danke, nur will der Timer Ingame immer nocht nicht klappen ô.o
Meiner Meinung nach ist alles richtig. Ich hab jetzt mal testweise 2 Animationen aus Deadly Reflex genommen, den Timer auf 1.2 gesetzt, aber es passiert nichts. Nach dem ersten mal abspielen läuft der Gegner einfach weiter und der Spieler führt die Animation ein 2tes mal aus Was ist denn jetzt falsch
Edit: Kann es sein das Target irgendwie wieder weggesetzt wird, sodass es nichtmehr erkannt wird?
--
If you're not too great at construction - don't worry! You can place a variety of characters in silly positions. Ihr glaubts mir nicht? Klick
Ein solches Problem mit Timern hab ich auch sehr oft. Es passiert einfach nichts. Inzwischen habe ich es aufgegeben, mit Timern zu arbeiten und mache das stattdessen über anere Wege. Is echt ein Schmarn sowas...
Mein Script funktioniert mittlerweile, hab vor der abfrage vom target ein If Possible == 0 gehängt:
Die im offiziellen Forum meinen auch das die abrfragen (IsActor, IsCreature) nacheinander gemacht werden sollten.
Jedenfalls klappt das jetzt danke, werd später wenn ich soweit bin vllt nochmal auf Pluggy zurückkommen und könnt da noch Hilfe gebrauchen.
Lg
--
If you're not too great at construction - don't worry! You can place a variety of characters in silly positions. Ihr glaubts mir nicht? Klick
Ich will jetzt nen Zweiten Move einbinden der aber den ersten vorraussetzt (Da der Gegner bei der ersten sozusagen kurz außer gefecht ist, er geht paar schritte zurück etc), und in dieser Zeit soll der Spieler halt hin und nochmal den Key drücken, damit eine zweite Animation ausgeführt wird.
Habt ihr ne Idee?
Script sieht bis jetzt so aus: (Hab momentan net viel Zeit daher können einige Flüchtigkeitsfehler drin sein sry)
2tens:
Wie kann ich ein Skelett dazu bringen in Richtung des Spielers zu sehen?
SkelettRef.Look Player funzt irgendwie net, noch ne andere Idee?
--
If you're not too great at construction - don't worry! You can place a variety of characters in silly positions. Ihr glaubts mir nicht? Klick
Ich habe mir eine ini erstellt, und habe dort ein paar Informationen gespeichert.
Ingame geht es jetzt darum, diese Informationen abzufragen (per Pluggys String funktion) und diese dann auf einen Feind zu übertragen. Heißt es soll dann ein Feind erstellt werden (Ich dachte da an eine Kopie des Spielers) nur mit anderem Namen, Level, Leben, Mana, Ausdauer, Gold, Zauber und Waffe.
Die Infos aus der ini ablesen, und in einem String speichern hab ich hinbekommen. Mir fehlt jetzt das erstellen der Kopie und dem Ausrüsten/ändern der Werte. Ich hoffte dabei könnte mir jemand behilflich sein.
Momentan sieht das Script so aus:
Ich hatte testweise versucht die Kopie zu erstellen, aber er hat dann 100 Kopien gemacht und nichtmal der Name stimmte.
Kleine Frage noch: Ist es möglich irgendwie ein Aussehen durch die ini festzulegen? Sodass ein Neuer NPc erstellt wird mit neuem Aussehen?
--
If you're not too great at construction - don't worry! You can place a variety of characters in silly positions. Ihr glaubts mir nicht? Klick