Portal-Zone Gothic-Zone Gothic II-Zone Gothic 3-Zone Gothic 4-Zone Modifikationen-Zone Download-Zone Foren-Zone RPG-Zone Almanach-Zone Spirit of Gothic

 

Ergebnis 1 bis 10 von 10
  1. Beiträge anzeigen #1 Zitieren
    Knight Avatar von Draxes
    Registriert seit
    Aug 2007
    Ort
    Mainz
    Beiträge
    1.920
     
    Draxes ist offline

    SPL_Waterfist soll B_AssessMagic() Aufruf machen

    Wie vom Titel bereits zu erahnen ist, möchte ich, dass ein Treffer von SPL_Waterfist (also der Zauber Wasserfaust) einen Aufruf der Funktion B_AssessMagic() zur Folge hat. Bei anderen Spells wie zum Beispiel Windhose gibt es im Haupt-spellFX die Zeile

    Code:
    		emFXCollDynPerc_S     	= "spellFX_Whirlwind_SENDPERCEPTION";
    Code:
    instance spellFX_Whirlwind_SENDPERCEPTION(CFx_Base_Proto)
    {
    		visname_S 			= "";
    		sendAssessMagic		= 1;
    };
    Das funktioniert dort auch wunderbar. Ich meine mich zu erinnern, dass ich das auch schon bei einem anderen Effekt so gelöst habe. Jetzt habe ich mir für die Wasserfaust eine gleiche SENDPERCEPTION-Instanz geschrieben und die Zeile jeweils dort an beiden möglichen Stellen eingefügt:

    Code:
    INSTANCE SPELLFX_WATERFIST (CFX_BASE_PROTO)
    {
         visname_s = "MFX_WATERFIST_INIT";
         visalpha = 1;
         //visalphablendfunc_s = "ADD";
         emtrjmode_s = "FIXED";
         emtrjoriginnode = "ZS_RIGHTHAND";
         emtrjtargetrange = 50;
         emtrjnumkeys = 4;
         emtrjnumkeysvar = 1;
         emtrjangleelevvar = 0;
         emtrjangleheadvar = 0;
         emtrjeasefunc_s = "LINEAR";
         emtrjeasevel = 100;
         emtrjdynupdatedelay = 20000;
         emFXCreatedOwnTrj = 1;
         //emactioncolldyn_s = "COLLIDE CREATEONCE";
         //emactioncollstat_s = "COLLIDE CREATE";
         //emfxcollstat_s = "SPELLFX_WATERFIST_COLLIDEFX";
         //emfxcolldyn_s = "SPELLFX_WATERFIST_COLLIDEDYNFX";
    
         emFXCollDynPerc_S     	= "spellFX_Waterfist_SENDPERCEPTION";
    
         emfxlifespan = -1;
         emselfrotvel_s = "0 0 0";
         secsperdamage = -1;
    };
    
    [...]
    
    INSTANCE SPELLFX_WATERFIST_ABYSS (CFX_BASE_PROTO)
    {
         visname_s = "MFX_WATERFIST_CAST";
         visalpha = 1;
         visalphablendfunc_s = "ADD";
         emtrjmode_s = "TARGET SPLINE RANDOM";
         emtrjoriginnode = "ZS_RIGHTHAND";
         //emtrjtargetrange = 20;
         emtrjnumkeys = 4;
         emtrjnumkeysvar = 2;
         emtrjangleelevvar = 5;
         emtrjangleheadvar = 10;
         emtrjloopmode_s = "NONE";
         emtrjeasefunc_s = "LINEAR";
         emtrjeasevel = 900;
         emtrjdynupdatedelay = 0.1;
         emtrjdynupdatetargetonly = 1;
         emactioncolldyn_s = "COLLIDE CREATEONCE";
         emactioncollstat_s = "COLLIDE CREATE";
         emfxcollstat_s = "SPELLFX_WATERFIST_COLLIDEFX";
         emfxcolldyn_s = "SPELLFX_WATERFIST_COLLIDEDYNFX";
    
         emFXCollDynPerc_S     	= "spellFX_Waterfist_SENDPERCEPTION";
    
         emfxlifespan = -1;
         emselfrotvel_s = "0 0 0";
         secsperdamage = -1;
    };
    Allerdings führen beide Zeilen nicht zu dem Ergebnis, dass die B_AssessMagic() aufgerufen wird. Der Zauber macht zwar Schaden (was ja auch normal ist), kommt aber nicht in meine heißgeliebte Funktion.

    Kann sich jemand erklären, woran das liegen kann?

    Vielen Dank schon mal für Antworten!

  2. Beiträge anzeigen #2 Zitieren
    Knight Avatar von Draxes
    Registriert seit
    Aug 2007
    Ort
    Mainz
    Beiträge
    1.920
     
    Draxes ist offline
    Upps, da war ich wohl im falschen Forum unterwegs x) Mag das ein Mod ins Editing Forum verschieben? Tschuldigung!

  3. Beiträge anzeigen #3 Zitieren
    Schwertmeister Avatar von TheBigLeBRUCEky
    Registriert seit
    Apr 2014
    Beiträge
    997
     
    TheBigLeBRUCEky ist offline
    Du solltest die Scripte der Zaubereffekte mal nach "sendassessmagic" durchsuchen.
    Vermutlich fehlt der Eintrag...einfach mit anderen Zaubern vergleichen.

    MfG

  4. Beiträge anzeigen #4 Zitieren
    Knight Avatar von Draxes
    Registriert seit
    Aug 2007
    Ort
    Mainz
    Beiträge
    1.920
     
    Draxes ist offline
    Danke schon mal für die Antwort! sendassessmagic habe ich genutzt (Siehe meinen Code von spellFX_Whirlwind_SENDPERCEPTION, der identisch ist mit meinem spellFX_Waterfist_SENDPERCEPTION)

  5. Beiträge anzeigen #5 Zitieren
    Schwertmeister Avatar von TheBigLeBRUCEky
    Registriert seit
    Apr 2014
    Beiträge
    997
     
    TheBigLeBRUCEky ist offline
    Zitat Zitat von Draxes Beitrag anzeigen
    Danke schon mal für die Antwort! sendassessmagic habe ich genutzt (Siehe meinen Code von spellFX_Whirlwind_SENDPERCEPTION, der identisch ist mit meinem spellFX_Waterfist_SENDPERCEPTION)
    Oh, sorry, gar nicht gesehen.
    Möglich, dass du für den Zauber noch Einträge in B_AssessMagic und/oder C_CanCollideWithSpell machen musst.
    Hab vor Ewigkeiten mal neue Zauber erstellt und habe das eigentlich bei allen Zaubern hinbekommen, dass sie B_AssessMagic aufrufen.
    Vielleicht spielt ja noch die Schadensart eine Rolle(Waterfist = magisch | Whirlwind benötigt vielleicht Fly)...ist aber ohne Gewähr.

    MfG

  6. Beiträge anzeigen #6 Zitieren
    Knight Avatar von Draxes
    Registriert seit
    Aug 2007
    Ort
    Mainz
    Beiträge
    1.920
     
    Draxes ist offline
    In B_AssessMagic() habe ich einfach einen print drin, um zu sehen, ob die Funktion aufgerufen wird. In C_CanCollideWithSpell steht schon ein Eintrag drin für die Wasserfaust, die Logik, dass sie doppelten Schaden gegen Feuerkreaturen macht etc.
    Mit dem Damagetype hat es eigentlich auch nichts zu tun, so Feuer wie InstantFireball haben ja auch DAM_MAGIC und kommen auch in die B_AssessMagic() rein.

    Habe noch ein wenig herumprobiert, aber komme an der Stelle einfach nicht weiter. Hat vielleicht noch jemand eine Idee, woran das liegen könnte? Oder kann das mal bei sich ausprobieren? Ich bin mir ziemlich sicher, dass ich nicht viel an dem Zauber herumfrisiert habe wenn überhaupt.

  7. Beiträge anzeigen #7 Zitieren
    research Avatar von NicoDE
    Registriert seit
    Dec 2004
    Beiträge
    7.409
     
    NicoDE ist offline
    Zitat Zitat von Draxes Beitrag anzeigen
    Code:
    		emFXCollDynPerc_S     	= "spellFX_Whirlwind_SENDPERCEPTION";
    Wenn ich mich recht erinnere, dann muss der Rückgabewert von C_CanNpcCollideWithSpell COLL_APPLYVICTIMSTATE enthalten (und/oder COLL_DOEVERYTHING), damit der Effekt in emFXCollDynPerc_S überhaupt verwendet/erzeugt wird.
    Falls der Spruch Feuerschaden macht, versuch den mal testweise rauszunehmen (es gibt da eine Extrabehandlung).
    "Unter diesen schwierigen Umständen bin ich mir sicher, daß diese guten Menschen meinen augenblicklichen Bedarf an deren Gold verstehen werden." -- Connor
    Geändert von NicoDE (05.03.2018 um 20:01 Uhr)

  8. Beiträge anzeigen #8 Zitieren
    Schwertmeister Avatar von TheBigLeBRUCEky
    Registriert seit
    Apr 2014
    Beiträge
    997
     
    TheBigLeBRUCEky ist offline
    Zitat Zitat von Draxes Beitrag anzeigen
    In B_AssessMagic() habe ich einfach einen print drin, um zu sehen, ob die Funktion aufgerufen wird. In C_CanCollideWithSpell steht schon ein Eintrag drin für die Wasserfaust, die Logik, dass sie doppelten Schaden gegen Feuerkreaturen macht etc.
    Mit dem Damagetype hat es eigentlich auch nichts zu tun, so Feuer wie InstantFireball haben ja auch DAM_MAGIC und kommen auch in die B_AssessMagic() rein.

    Habe noch ein wenig herumprobiert, aber komme an der Stelle einfach nicht weiter. Hat vielleicht noch jemand eine Idee, woran das liegen könnte? Oder kann das mal bei sich ausprobieren? Ich bin mir ziemlich sicher, dass ich nicht viel an dem Zauber herumfrisiert habe wenn überhaupt.
    Hast du das mit dem Schadenstyp denn mal ausprobiert?
    Kann ja sein, dass das von der Engine geregelt wird, welcher Effekt welchen Schadenstyp benötigt.
    Habe mal versucht einen Elementarpfeil zu erstellen, der das Eispfeil-Projektil genutzt hat und habe dem Zauber auch keinen Brandeffekt geben können.
    War nur ein Test, habe nicht lange rumprobiert, deshalb weiß ich auch nicht mehr, ob ich es letztendlich hinbekommen habe.
    Ich habe mir für meine Zauber einen neuen Effekt erstellt(blaugrünes Brennen), deshalb hab ich das nicht weiter verfolgt.

    Hast du in B_AssessMagic die Wasserfaust mit eingetragen?
    Ich meine dort, wo definiert ist, dass der Zauber Whirlwind den ZS_Whirlwind auslöst.
    Den ZS_Whirlwind musst du dir auch ansehen, wegen dem Restart, bei erneutem Treffer.
    Hast du diese Zeile auch beim Pfx eingetragen, da ich sie in deinem Code nicht sehe.

    Code:
    emfxcolldyn_s = "spellFX_Whirlwind_TARGET";
    Zudem wird kein Opfer-ZS ausgelöst, wenn ApplyHalf- oder ApplyDoubleDamage beim Treffer zutrifft.

    MfG

  9. Beiträge anzeigen #9 Zitieren
    Knight Avatar von Draxes
    Registriert seit
    Aug 2007
    Ort
    Mainz
    Beiträge
    1.920
     
    Draxes ist offline
    Aaah, jetzt hab ich's. Ich habe nicht gewusst, dass der Rückgabewert C_CanCollideWithSpell ausschlaggebend dafür ist, ob die B_AssessMagic() aufgerufen wird. Ich habe jetzt bei allen möglichen Rückgaben der Wasserfaust zusätzlich COLL_APPLYVICTIMSTATE mitgegeben und schon klappt es.

    Vielen Dank! =)

    Noch als kleinen Nachsatz zu deinen anderen Vorschlägen:

    Bzgl. dem Eintrag in B_AssessMagic(): Dort brauche ich nur abfragen, ob es sich um SPL_Waterfist handelt. Mit Whirlwind hat das an der Stelle nichts mehr zu tun. Auch, wenn ich "emfxcolldyn_s = "spellFX_Whirlwind_TARGET";" benutzen würde. Dort drin ist nur das "sendAssessMagic = 1;" wichtig, der Instanzname ist dabei eigentlich unerheblich. Trotzdem habe ich der Vollständigkeit halber ein spellFX_Waterfist_SENDPERCEPTION erstellt.

    Bzgl. dem Opfer-ZS und gleichzeitigem COLL_APPLYDAMAGE: Man kann aus C_CanCollideWithSpell auch mehrere Flags gleichzeitig returnen, indem man folgendes macht:

    Code:
    return COLL_APPLYDAMAGE | COLL_DONTKILL | COLL_APPLYVICTIMSTATE;
    Da es sich um Bitwerte handelt, kann man sie einfach verodern. So kann auch halben/doppelten Schaden austeilen UND in die B_AssessMagic() gelangen.

  10. Beiträge anzeigen #10 Zitieren
    Schwertmeister Avatar von TheBigLeBRUCEky
    Registriert seit
    Apr 2014
    Beiträge
    997
     
    TheBigLeBRUCEky ist offline
    Zitat Zitat von Draxes Beitrag anzeigen
    Aaah, jetzt hab ich's. Ich habe nicht gewusst, dass der Rückgabewert C_CanCollideWithSpell ausschlaggebend dafür ist, ob die B_AssessMagic() aufgerufen wird. Ich habe jetzt bei allen möglichen Rückgaben der Wasserfaust zusätzlich COLL_APPLYVICTIMSTATE mitgegeben und schon klappt es.

    Vielen Dank! =)

    Noch als kleinen Nachsatz zu deinen anderen Vorschlägen:

    Bzgl. dem Eintrag in B_AssessMagic(): Dort brauche ich nur abfragen, ob es sich um SPL_Waterfist handelt. Mit Whirlwind hat das an der Stelle nichts mehr zu tun. Auch, wenn ich "emfxcolldyn_s = "spellFX_Whirlwind_TARGET";" benutzen würde. Dort drin ist nur das "sendAssessMagic = 1;" wichtig, der Instanzname ist dabei eigentlich unerheblich. Trotzdem habe ich der Vollständigkeit halber ein spellFX_Waterfist_SENDPERCEPTION erstellt.

    Bzgl. dem Opfer-ZS und gleichzeitigem COLL_APPLYDAMAGE: Man kann aus C_CanCollideWithSpell auch mehrere Flags gleichzeitig returnen, indem man folgendes macht:

    Code:
    return COLL_APPLYDAMAGE | COLL_DONTKILL | COLL_APPLYVICTIMSTATE;
    Da es sich um Bitwerte handelt, kann man sie einfach verodern. So kann auch halben/doppelten Schaden austeilen UND in die B_AssessMagic() gelangen.
    Das waren auch nur Vorschläge, was du probieren könntest, da es lange her ist, das ich damit gearbeitet habe.
    Das man mehrere Flags setzen kann, ist mir bewusst...trotzdem danke, vielleicht nützt es ja mal jemandem was, der über diesen Thread stolpert.

    Edit: das mit "Coll_xxx" habe ich nur geschrieben, weil in den Originalspripten viele Zauber gegen bestimmte Gegner halben oder doppelten Schaden machen.
    Hätte ja sein können, dass du da nichts geändert hast und den Zauber an einem Gegner getestet hast, bei dem die Bedingungen dafür zutreffen.

    MfG
    Geändert von TheBigLeBRUCEky (05.03.2018 um 21:51 Uhr)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
Impressum | Link Us | intern
World of Gothic © by World of Gothic Team
Gothic, Gothic 2 & Gothic 3 are © by Piranha Bytes & Egmont Interactive & JoWooD Productions AG, all rights reserved worldwide