Autor |
|
Coxaqha
Bard
Dabei seit: Juli 2005
Geschlecht:
Herkunft: Schilda
Beiträge: 45
|
|
Ich suche seit einigen Tagen verzweifelt nach einer Möglichkeit, den Vorgang des Seelenfangs per globalScript abzufragen. Alles bisher ausprobierte scheitert mehr oder weniger kläglich:
- OnPCSoulGemUse
Hab ich natürlich gleich als erstes probiert, funzt aber NUR bei Azura's Stern. Hm. Was passiert beim Seelenfang? Ein leerer Stein wird entfernt, ein voller Stein wird hinzugefügt.
- if ( player->RemoveItem/SoulGem, "Misc_SoulGem_Grand", 1 ) ; MW crasht
- if ( player->AddItem/Soulgem, "golden saint", Grand ) ; dto., alle Syntaxänderungen ohne Ergebnis (manchmal nölt der Compiler, wenn man gar zu großen Unsinn versucht).
Nächster Ansatz: Event-Sound abfragen. Zu diesem Zweck hab ich 'Soul Trap' von 'Mystik' nach 'Beschwörung' verschoben, was ohnehin sinnvoll ist, weil der PC diese Schule (fast) komplett nicht lernen darf. Nur leider weiß der DJ nichts davon und spielt immer schön 'mysticism hit' beim Seelenfangen...
Nun weiß ich nicht mehr, wonach ich fragen soll, hat vielleicht jemand eine Idee?
|
|
16.08.2005, 13:34 |
|
GreyWanderer
Crusader
Dabei seit: Januar 2004
Geschlecht:
Herkunft: Cuiviénen
Beiträge: 465
|
|
- OnPCSoulgemUse wird sowieso nur true, wenn der Spieler den geladenen Seelenstein benutzt (zum Auffüllen oder zum Verzaubern).
- Das verwenden einer solcher Funktionen in einer Bedingung lässt das Spiel natürlich abstürzen, sie geben ja keine Werte zurück, sondern nehmen vielmehr welche an.
- Das mit dem Sound liegt daran, dass der Sound pro Zauber festgelegt ist, nicht pro Klasse. D.h. du müsstest dem Effekt manuell einen anderen Sound verpassen (der kann dann auch einzigartig sein, würde allerdings mit einigen Mods nicht funktionieren).
Zitat: Ein leerer Stein wird entfernt, ein voller Stein wird hinzugefügt.
Gute Idee, könnte tatsächlich so sein. Wenn sich die ID des Seelenstein ändern würde, nicht nur die Reference. Aber ich fürchte, dem ist nicht so. Wenn man einem Seelenstein per CS eine Seele zuordnet, dann ändert man auch nur die Reference, nicht die ID. Die Funktion, um zu prüfen, wieviele Items einer ID ein NPC (oder Container) hat ist "GetItemCount" (schau im SfD nach).
Ach ja ... die Idee mit dem Sound funktioniert übrigens (bei einzigartigem Sound), der Sound wird nur wahrscheinlich zu spät kommen für was immer du vorhast.
__________________
Abenteuer Mittel Erde
Please visit us!
Dieser Beitrag wurde von GreyWanderer am 16.08.2005, 14:14 Uhr editiert.
|
|
16.08.2005, 14:06 |
|
Coxaqha
Bard
Dabei seit: Juli 2005
Geschlecht:
Herkunft: Schilda
Beiträge: 45
|
|
Zitat: 2. Das verwenden einer solcher Funktionen in einer Bedingung lässt das Spiel natürlich abstürzen, sie geben ja keine Werte zurück, sondern nehmen vielmehr welche an.
Autsch! Aber Get/Mod/Set-___ sind doch auch Funktionen?? Das KANN gar nicht funzen? (player -> AddItem "Graue Haare", 10)
3. Yeah, danke für die Inspiration!!
Die Sounds und Visuals schienen anfangs geblockt zu sein, aber mit ein wenig Penetranz (und Aufmerksamkeit) ging es dann. Jetzt gehört 'Seelenfalle' mit allen Komponenten zur Schule Beschwörung, sauber! Aber da tut sich was neues auf: Um es wirklich Kugelsicher zu machen, müßte ich den Visual-Effekt abgreifen: 'VFX_SoulTrapHit'. Mal sehen ob 'GetEffect' auch für Visuals gilt...
Um mit geladenen Seelensteinen zu hantieren, hab ich mehrfach diese Syntax gefunden:
( player->AddSoulgem, "golden saint", Grand ) *mglw. noch mit ,1 für die Anzahl
Und ähnliche Syntax gilt beim abfragen, ob leere oder volle Steine vorhanden sind, aber das will ich ja gar nicht.
Gibt's denn wirklich keine Möglichkeit, Remove/AddItem abzufragen? (Frage zurückgezogen, sobald
[ if ( GetEffect, "VFX_SoulTrapHit" ) ]
funktioniert (vielleicht doch noch ein 'player ->' davorsetzen? NPCs benutzen es ja nicht..)
Vielen herzlichen Dank erstmal, seit Tagen das erste Land-in-Sicht.
Cox
|
|
16.08.2005, 15:09 |
|
GreyWanderer
Crusader
Dabei seit: Januar 2004
Geschlecht:
Herkunft: Cuiviénen
Beiträge: 465
|
|
Ich schrieb "solche Funktionen". Und Get/Mod/Set sind in der Tat Funktionen, aber versuch mal eine Funktion mit Mod/Set-Präfix in eine Bedingung einzubinden ... dann sollte genau das gleiche wie bei anderen (wie die oben genannten) Funktionen passieren, es sollte crashen.
Die "Get" Funktionen haben den Zweck, einen Wert aus dem Code/Speicher zu lesen ("holen") und diesen als Wert wieder auszugeben. Auch "OnActivate" und andere sind Funktionen, die den gleichen Zweck haben. Wenn man wissen will, welche Funktionen man so verwenden kann oder nicht hilft a) logisches Denken oder wenn das nicht hilft b) Scripting for Dummies.
Generell kann man sagen Funktionen mit Mod/Set/Add/Remove als Präfix kann man nicht abfragen.
Und wie ich schon sagte, du kannst dem Zaubereffekt einen einzigartigen Sound zuweisen, den dann wirklich nur der Soultrap-Effekt benutzt.
"GetEffect" fragt (wie im SfD beschrieben, sagt mal liest das eigentlich keiner?) nur ab, ob der Zaubereffekt auf dem Objekt liegt, und zwar durch eine Nummer. Eine Nummer, die festgelegt ist und nicht geändert werden kann. Dass "GetEffect" auch true wird, wenn der Spieler einen Zauber auf Jemand anderen wirkt, wage ich zu bezweifeln, ausgeschlossen ist es allerdings nicht. Trotzdem würde ich nicht darauf vertrauen.
Und wie ich schon sagte, kann man feststellen, wieviele (leere!?) Seelensteine der Spieler im Inventar hat mit "player->GetItemCount, Soulgem_ID". Dann gibt es noch die Funktion "OnPCAdd", die allerdings nur auf einzelne Objekte angewendet werden kann (also entweder per lokalem Script abgefragt werden muss oder aber das Ziel ist einzigartig und persisted).
__________________
Abenteuer Mittel Erde
Please visit us!
|
|
16.08.2005, 16:17 |
|
Coxaqha
Bard
Dabei seit: Juli 2005
Geschlecht:
Herkunft: Schilda
Beiträge: 45
|
|
Ironie entdeckt...
...vielleicht bin ich ja ein Super-Dummie, aber auch in v8 schreibt GBGhan ziemlich ausführlich über viele Dinge, die mich grad nicht interessieren (dürfen), die meisten meiner spezielleren Interessen werden in Nebensätzen abgehandelt. Dann hab ich noch ständig geöffnet: TESCompendium und die beiden Pages von UESP. Ehrlich gesagt lese ich erst, durchsuche drei Foren und probier auch ziemlich viel erstmal aus, bevor ich eine Frage poste. Für Anfänger sind 'offensichtliche Dinge' nunmal relativ, und es ist ja auch längst nicht alles logisch. Ich finde es jedenfalls ziemlich unlogisch, daß ich nicht abfragen kann, ob mir gerade irgendein Script ein Attribut verändert oder etwas ins Inventar gelegt hat.
Wie auch immer, Deine Zweifel waren berechtigt.
if ( GetEffect, "VFX_SoulTrapHit" )
mit oder ohne 'player ->' wird zwar gespeichert und das Script mault auch nichts wie 'EXPRESSION', aber bewirken tut es letztends nichts. War trotzdem den Versuch wert, jetzt mach ich's mit dem Sound.
|
|
16.08.2005, 17:10 |
|
Garak
Admin
Dabei seit: Juli 2002
Geschlecht:
Herkunft: Cardassia Prime
Beiträge: 9256
|
|
das crashproblem war ja erstmal, dass die Dinge, die innerhalb der If- bedingung stehen, am Ende einen Booleschen Wert annehmen müssen (also true oder false), keinen Float, keinen Integer, keinen Long und erst recht nicht void (also Funktionen, die gar keine Meldung zurückgeben)
gültig sind also im endeffekt boolsche variablen und deren logische Verknüpfungen, Vergleichsoperatoren ( ==, !=, >,< <=, >= ) und die gruppe der funktionen/variablen, die Bethesda (leider) mal so mal so implementiert haben: OnPCEquip, OnSoulgemUse, HasSoulgem, UsedOnMe...
was den Sound angeht, musst Du aufpassen, WER den sound abspielt - z.B. player bei den Castsounds, aber das jeweilige ziel bei den hit-sounds. Achtung: es gibt auch sounds, die gar kein adressierbares objekt abspielt - Skillraise zum Beispiel.
__________________ drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen
|
|
16.08.2005, 18:28 |
|
Coxaqha
Bard
Dabei seit: Juli 2005
Geschlecht:
Herkunft: Schilda
Beiträge: 45
|
|
Das war perfektes Timing, Garak. Bin gerade genau daran gescheitert: Der Sound war zu hören, aber der Trigger zog nicht an. Also muß ich den Sound auf ...Cast legen, nicht auf ...Hit.
Den oberen Absatz leg ich mir mal unter's Kopfkissen, damit ihn die Leute nicht sehen, die leicht zu entmutigen sind...
Danke
EDIT:
Na DAS ist ja nun blöd: Vom Item gibt's keinen Casting-Sound, aber sehr wohl einen Hit-Sound. Hab's gerade nochmal ausprobiert, ungestraft drei Seelen gefangen. Und nen Bolzen hat der verzauberte Dolch ja wohl genausowenig wie einen Area-Effekt...
Return?
Also gilt wieder die ursprüngliche Fragestellung: Wie frage ich verläßlich den Vorgang des Seelenfangs ab?
Dieser Beitrag wurde von Coxaqha am 16.08.2005, 19:04 Uhr editiert.
|
|
16.08.2005, 18:46 |
|
Garak
Admin
Dabei seit: Juli 2002
Geschlecht:
Herkunft: Cardassia Prime
Beiträge: 9256
|
|
nein, Du kannst die Messagebox nicht abfangen, auch wenn Du Dich DemDingens nennst
wenn Du den Effekt auf einem Gegner abfangen wolltest, müsstets Du Voicetopic-Hit Dialoge für alle Kreaturen schreiben und von dort aus ein "halblokales" script starten, das per getteffect und gethealthGetratio das vorhandensein des seelenfallenzaubers zum todeszeitpunkt abfrägt - extrem viel Aufwand für so ne kleinigkeit, und mod-Kompatibel wäre die lösung auch nicht. Die Technik an sich wurde z.B. von GhanBuriGhan für Combat Moves und von Argent für Fists of Fire benutzt.
__________________ drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen
|
|
17.08.2005, 00:15 |
|
Coxaqha
Bard
Dabei seit: Juli 2005
Geschlecht:
Herkunft: Schilda
Beiträge: 45
|
|
Den Nick hab ich nur geändert, um nicht wegen 'explicit language' aus dem Mutterforum zu fliegen, Elim. Und jetzt hast Du mich Cocksucker genannt, ts.javascript:smilie('')
Die Idee, die Messagebox abzufragen, finde ich immer noch genial, das wär's doch wirklich gewesen...
Aber einen hab ich noch: Ich ersetze bei Seelenfalle den Hitsound durch meinen unique Sound und frage dann im Script JEDE (wertvolle) Creature ab, ob sie den Sound getriggert hat (wieso kann mein Char nicht einfach die Ohren aufmachen?). Die Frage ist halt, wieviele werden das, und kann ein globalScript das vertragen? Da weiß ich im Moment noch nicht so genau, was da auf mich zu kommt. Die bekannten Seelenträger sind ja nicht so schlimm: Staada, Vivec, die Dagoths etc. Wie sieht's aus mit den gelevelten Kreaturen, haben die jeweils eine feste ID, und die Werte werden dynamisch angepaßt? Oder wird eine spezielle ID errechnet/generiert? Die Arbeit würde ich nicht scheuen, aber als Wahrsager tauge ich nicht soviel.
Jedenfalls bilde ich mir ein, so GBG's 'Combat Moves' nicht in die Quere zu kommen. Selbst wenn jemand anders eine ähnliche Idee umgesetzt hätte, sollte da nichts Ärger machen, weil ja außer dem Sound und dem verschobenen Zauber alles nur in meinem Script stattfindet.
Apropos andere Mods, da gibt's ja einige, die meinem (sofern ich es jemals veröffentliche) ideologisch in die Quere kommen könnten. Bspw. das Teil, mit dem man auch humanoide Seelen fangen kann (brrr). Da hätte ich die Idee, zu überprüfen, ob das Script läuft und es dann in meinem zu stoppen. Wohl eine weitere Rechnung, die ich ohne Murphy gemacht habe...
Hm, wenn's nicht zuviel Mühe macht: *was* hat GBG für das Mod da gemacht? Klingt ja extrem.
+++
Das mit den Smilies hab ich noch nicht drauf...
EDIT:
Das wären dann 261 Creatures und 123 Leveled Creatures die in diese Abfrage hinein müßten. Kann/sollte ein globalScript das bewerkstelligen?
Dieser Beitrag wurde von Coxaqha am 17.08.2005, 11:36 Uhr editiert.
|
|
17.08.2005, 10:57 |
|
Coxaqha
Bard
Dabei seit: Juli 2005
Geschlecht:
Herkunft: Schilda
Beiträge: 45
|
|
(Smiley 'geplatzte Seifenblase')
Ich bin mir ja über einige Begrifflichkeiten nicht völlig im Klaren, aber ich fürchte, da besteht ein Zusammenhang zwischen diesem Versuch und der Unmöglichkeit, reservierte Zeichen in Variablen zu benutzen. Zwei Drittel aller leveled Creatures haben ein '+' oder '-' in der ID.
if ( "ex_ascadianisles_lev+0" -> GetSoundPlaying, "Cox_Seelenfang" )
InFixToPostFix Error
Syntax Error ... Miss Mached Quotes (Rechtschreibfehler?)
endif nicht gefunden!!!
Wenn ich die Cr in .._sleep ändere, funzt es allerdings auch nicht. Sieht für mich so aus, als dürfte ich ihn gar nicht nach diesen Viechern fragen.
Ich bin ja SOWAS von offen für alternative Vorschläge...
|
|
17.08.2005, 13:04 |
|
Garak
Admin
Dabei seit: Juli 2002
Geschlecht:
Herkunft: Cardassia Prime
Beiträge: 9256
|
|
Zitat: Original von Coxaqha
Den Nick hab ich nur geändert, um nicht wegen 'explicit language' aus dem Mutterforum zu fliegen, Elim. Und jetzt hast Du mich Cocksucker genannt, ts.javascript:smilie('')
und damit willst Du einen stock-schwulen Ingenieur und Forenadmin schocken?? Wollen wir jetzt auszählen, wer damit mehr Erfahrung hat ?
Zitat: Original von Coxaqha
Aber einen hab ich noch: Ich ersetze bei Seelenfalle den Hitsound durch meinen unique Sound und frage dann im Script JEDE (wertvolle) Creature ab, ob sie den Sound getriggert hat (wieso kann mein Char nicht einfach die Ohren aufmachen?). Die Frage ist halt, wieviele werden das, und kann ein globalScript das vertragen? Da weiß ich im Moment noch nicht so genau, was da auf mich zu kommt. Die bekannten Seelenträger sind ja nicht so schlimm: Staada, Vivec, die Dagoths etc.
so weit würde es noch funktionieren, da die nur ein mal vorkommen.
Zitat: Original von Coxaqha
Wie sieht's aus mit den gelevelten Kreaturen, haben die jeweils eine feste ID, und die Werte werden dynamisch angepaßt? Oder wird eine spezielle ID errechnet/generiert? Die Arbeit würde ich nicht scheuen, aber als Wahrsager tauge ich nicht soviel.
Jedenfalls bilde ich mir ein, so GBG's 'Combat Moves' nicht in die Quere zu kommen. Selbst wenn jemand anders eine ähnliche Idee umgesetzt hätte, sollte da nichts Ärger machen, weil ja außer dem Sound und dem verschobenen Zauber alles nur in meinem Script stattfindet.
Im gegenteil, ich seh es als einzige möglichkeit für Dich an, den Combat moves in die quere zu kommen - es gibt keinen anderen weg, automatisch gespawnte Gegner mit nicht einzigartiger ID "von aussen" anzusprechen.
Zitat: Original von Coxaqha
Apropos andere Mods, da gibt's ja einige, die meinem (sofern ich es jemals veröffentliche) ideologisch in die Quere kommen könnten. Bspw. das Teil, mit dem man auch humanoide Seelen fangen kann (brrr). Da hätte ich die Idee, zu überprüfen, ob das Script läuft und es dann in meinem zu stoppen. Wohl eine weitere Rechnung, die ich ohne Murphy gemacht habe...
nicht unbedingt. Du kannst ja ein "leeres" script mit dem selben Namen laufen lassen, das überschreibt das original, falls Dein pi später geladen wird. wenn nicht, ghast Du durch Dein "dummy" immernoch die Chance, einen Stopscript-befehl compiliert zu bekommen.
Zitat: Original von Coxaqha
Hm, wenn's nicht zuviel Mühe macht: *was* hat GBG für das Mod da gemacht? Klingt ja extrem.
er hat in die Voice-Topics "hit" und "attack" startscriptbefehle gepackt, um damit lokalisierte globale scripte auf aktuellen Gegnern des spielers zu starten - wenn man das prinzip erst mal kapiert hat, ist es nicht schwer, das umzusetzen - in PMM/ ToN-RotSG benutz ich das ziemlich extensiv
Zitat: Original von Coxaqha
EDIT:
Das wären dann 261 Creatures und 123 Leveled Creatures die in diese Abfrage hinein müßten. Kann/sollte ein globalScript das bewerkstelligen?
nein. Siehe oben. Du musst die einzelnen Referenzen ansprechen, nicht die definitionsID.
__________________ drei mal dürft ihr raten, wer grade seine Signatur geschrottet hat...geht aber wieder - allerdings solltet Ihr noch die Finger von den Avataren lassen
|
|
18.08.2005, 22:19 |
|
|