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 15 von 15
  1. Beiträge anzeigen #1 Zitieren
    Knight Avatar von Draxes
    Registriert seit
    Aug 2007
    Ort
    Mainz
    Beiträge
    1.920
     
    Draxes ist offline

    Effekte an Waffen abspielen

    Ich wollte mich mal an Waffenverzauberungen versuchen. Dabei habe ich mir das so vorgestellt, dass der Spieler einen Zauber castet, anschließend die Waffe gezogen wird, der Held eine Animation abspielt und dann der Waffeneffekt (z.B. brennendes Schwert) gestartet wird.

    Das hier habe ich versucht:

    Code:
    func void startWeaponEffect() {
    	var C_ITEM weapon; weapon = Npc_GetReadiedWeapon(hero);
    	Wld_PlayEffect("SPELLFX_FIRESWORD", weapon, weapon, 0, 0, DAM_MAGIC, TRUE);
    };
    
    [...]
            // Das hier dann mal in eine Testfunktion über Hotkey ausgelöst, Alternativ dann später im Spell-Script
    	AI_ReadyMeleeWeapon(hero);
    	AI_Function(hero, startWeaponEffect);
    	AI_PlayAniBS(hero, "T_1HSINSPECT", BS_LIE);
    [...]
    Leider wird der Effekt bei der Waffe nicht abgespielt. Kann Gothic keinen Effekt direkt auf der Waffe abspielen? Gibt es vielleicht eine andere Lösung, die zum Ziel führen könnte?



    Was ich nicht gerne für Lösungen hätte, da diese mit Nachteilen verbunden sind:

    1) Aktive Waffe aus dem Inventar entfernen, weapon.effect = "XYZ", Waffe wieder einfügen, Held zieht Waffe
    -> Hier würde der Effekt dann bereits beim Ziehen der Waffe aktiv sein, was ich nicht so gerne hätte. Dazu würde dann bei Ablauf der Zauberzeit die Waffe weggesteckt werden müssen, da der Effekt sonst nicht beendet werden kann.

    2) Jedes Waffen-Overlay-MDS kopieren und dort die Effekte direkt an die Animationen anfügen
    -> Gleichen Problem wie bei 1, dazu ziemlich aufwändig. Vielleicht aber später als Ergänzung, sodass man beim Schlagen die Effekte nochmal extra episch macht.

  2. Beiträge anzeigen #2 Zitieren
    Schwertmeister Avatar von TheBigLeBRUCEky
    Registriert seit
    Apr 2014
    Beiträge
    997
     
    TheBigLeBRUCEky ist offline
    Zitat Zitat von Draxes Beitrag anzeigen
    Ich wollte mich mal an Waffenverzauberungen versuchen. Dabei habe ich mir das so vorgestellt, dass der Spieler einen Zauber castet, anschließend die Waffe gezogen wird, der Held eine Animation abspielt und dann der Waffeneffekt (z.B. brennendes Schwert) gestartet wird.

    Das hier habe ich versucht:

    Code:
    func void startWeaponEffect() {
        var C_ITEM weapon; weapon = Npc_GetReadiedMeleeWeapon(hero);
        Wld_PlayEffect("SPELLFX_FIRESWORD", weapon, weapon, 0, 0, 0, FALSE);
    };
    
    [...]
            // Das hier dann mal in eine Testfunktion über Hotkey ausgelöst, Alternativ dann später im Spell-Script
        AI_ReadyMeleeWeapon(hero);
        AI_Function(hero, startWeaponEffect);
        AI_PlayAniBS(hero, "T_1HSINSPECT", BS_LIE);
    [...]
    Leider wird der Effekt bei der Waffe nicht abgespielt. Kann Gothic keinen Effekt direkt auf der Waffe abspielen? Gibt es vielleicht eine andere Lösung, die zum Ziel führen könnte?



    Was ich nicht gerne für Lösungen hätte, da diese mit Nachteilen verbunden sind:

    1) Aktive Waffe aus dem Inventar entfernen, weapon.effect = "XYZ", Waffe wieder einfügen, Held zieht Waffe
    -> Hier würde der Effekt dann bereits beim Ziehen der Waffe aktiv sein, was ich nicht so gerne hätte. Dazu würde dann bei Ablauf der Zauberzeit die Waffe weggesteckt werden müssen, da der Effekt sonst nicht beendet werden kann.

    2) Jedes Waffen-Overlay-MDS kopieren und dort die Effekte direkt an die Animationen anfügen
    -> Gleichen Problem wie bei 1, dazu ziemlich aufwändig. Vielleicht aber später als Ergänzung, sodass man beim Schlagen die Effekte nochmal extra episch macht.
    Versuch es mal mit "False", beim Effekt, da der Zauber bei "True" als Projektil definiert wird.
    Der Schadenstyp dürfte auch egal sein, da du den Schaden auf Null gelassen hast...deshalb "0" statt "Dam_Magic"(eigentlich egal ^^).
    Eventuell könntest du noch am Anfang auf Nahkampfwaffe abfragen, da du in der anderen Funktion die Nahkampfwaffe ziehst...kann allerdings auch sein, das es egal ist.

    Ist deine AI_Function etwas, was du dir selbst erstellt hast?
    Vermutlich Ikarus/LeGo, da ich die Funktion nicht kenne.

    MfG

  3. Beiträge anzeigen #3 Zitieren
    Knight Avatar von Draxes
    Registriert seit
    Aug 2007
    Ort
    Mainz
    Beiträge
    1.920
     
    Draxes ist offline
    Hi! Danke schon mal für die Antwort. Mit den Wld_PlayEffect-Parametern habe ich schon ein wenig herumprobiert, das geht leider weder mit TRUE noch FALSE. Der Schadenstyp hat auch nichts damit zu tun.

    AI_Function ist von Ikarus meine ich, das reiht die Funktion in die AI-Queue ein, sodass die Funktion erst nach AI_ReadyMeleeWeapon aufgerufen wird und nicht zeitgleich.

  4. Beiträge anzeigen #4 Zitieren
    Schwertmeister Avatar von TheBigLeBRUCEky
    Registriert seit
    Apr 2014
    Beiträge
    997
     
    TheBigLeBRUCEky ist offline
    Zitat Zitat von Draxes Beitrag anzeigen
    Hi! Danke schon mal für die Antwort. Mit den Wld_PlayEffect-Parametern habe ich schon ein wenig herumprobiert, das geht leider weder mit TRUE noch FALSE. Der Schadenstyp hat auch nichts damit zu tun.

    AI_Function ist von Ikarus meine ich, das reiht die Funktion in die AI-Queue ein, sodass die Funktion erst nach AI_ReadyMeleeWeapon aufgerufen wird und nicht zeitgleich.
    Ok, verstehe schon, was eine AI-Funktion tut, wollte nur wissen, wie du dazu gekommen bist...danke, für die Info.

    Hab auch viel mit den Zaubereffekten gearbeitet und bei mir war es so, dass, wenn ich einen Effekt auf etwas selbt casten lasse, dann sollte es kein Projektil sein.
    Das liegt daran, dass ein Projektil aufgebaut wird und dann zum Ziel fliegen muss.
    Deshalb klappt das oft nicht, wenn Caster und Ziel das Selbe sind, bei einem Projektil.
    Naja, hätte ja klappen können...schade.

    MfG

  5. Beiträge anzeigen #5 Zitieren
    Schwertmeister Avatar von TheBigLeBRUCEky
    Registriert seit
    Apr 2014
    Beiträge
    997
     
    TheBigLeBRUCEky ist offline
    Eigentlich müsste man einen Effekt auf einem Item abspielen können, wurde ja auch im Original gemacht.
    Z.B. beim Ritual, bei dem das Auge Innos geheilt wird.

    Soll der Effekt eigentlich länger aktiv bleiben?
    Vielleicht könntest du ja etwas in der Art versuchen:

    Code:
    weapon.wearEffect = "SPELLFX_FIRESWORD";
    ...und zu gegebener Zeit entfernst du den Effekt wieder.

    Edit: kann natürlich sein, dass das zur Laufzeit nicht funzt.^^
    Edit2: sehe gerade, dass du das im EP bereits erwähnt hattest, sorry.

    MfG
    Geändert von TheBigLeBRUCEky (22.02.2018 um 16:25 Uhr)

  6. Beiträge anzeigen #6 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Eigentlich müsste Wld_PlayEffect funktionieren. Es könnte natürlich am Effekt liegen. Den könntest du einmal posten.

    Alternativ kannst du trotzdem die C_Item.effect Methode wählen. Um den Effekt aber tatsächlich sofort zu starten/beenden (ohne die Waffe wegstecken zu müssen), hier ein abgeänderter Auszug wie es in GFA gemacht wird:
    Code:
    func void stopItemFX(var C_Item itm) {
        var int itmPtr; itmPtr = _@(itm);
    
        // Remove item FX immediately
        const int oCItem__RemoveEffect =  7416832; //0x712C00
        const int call = 0;
        if (CALL_Begin(call)) {
            CALL__thiscall(_@(itmPtr), oCItem__RemoveEffect);
            call = CALL_End();
        };
    
        // Clear the FX property
        itm.effect = "";
    };
    
    func void startItemFX(var C_Item itm, var string FX) {
        var int itmPtr; itmPtr = _@(itm);
    
        // Remove any previous FX
        if (!Hlp_StrCmp(itm.effect, "")) {
            stopItemFX(itm);
        };
    
        // Set the oCItem FX property
        itm.effect = FX;
    
        // Start the FX
        const int oCItem__InsertEffect =  7416896; //0x712C40
        const int call = 0;
        if (CALL_Begin(call)) {
            CALL__thiscall(_@(itmPtr), oCItem__InsertEffect);
            call = CALL_End();
        };
    };
    Dein Code könnte dann so aussehen (Änderungen in grün):
    Code:
    func void startWeaponEffect() {
        var C_ITEM weapon; weapon = Npc_GetReadiedMeleeWeapon(hero);
        startItemFX(weapon, "SPELLFX_FIRESWORD");
    };
    
    [...]
            // Das hier dann mal in eine Testfunktion über Hotkey ausgelöst, Alternativ dann später im Spell-Script
        AI_ReadyMeleeWeapon(hero);
        AI_Function(hero, startWeaponEffect);
        AI_PlayAniBS(hero, "T_1HSINSPECT", BS_LIE);
    [...]

  7. Beiträge anzeigen #7 Zitieren
    Knight Avatar von Draxes
    Registriert seit
    Aug 2007
    Ort
    Mainz
    Beiträge
    1.920
     
    Draxes ist offline
    Danke mud-freak für die ausführliche Antwort!

    Ich habe das mal ausprobiert. Es fühlt sich schon mal näher am Ziel an als vorher. Der PFX wird im Moment erst sichtbar, wenn man die Waffe nach der Animation wieder wegsteckt. Sobald die Waffe wieder am Gürtel ist legt der PFX los. Wenn man die Waffe zieht bleibt er dann auch aktiv.

    Das PFX Entfernen über deine stopItemFX() funktioniert allerdings direkt, also auch, während der Held die Waffe in der Hand hält. Das spricht für mich dafür, dass Gothic den Effekt an bestimmten Punkten erst aktualisiert. Kann man dieses Effekt-Aktualisieren vielleicht irgendwie manuell anstoßen, sodass der PFX bereits ausgeführt wird, während der Held die Waffe in der Hand hat und man nicht vorher die Waffe einmal wegstecken muss?

    Danke schon mal! =)

  8. Beiträge anzeigen #8 Zitieren
    Knight Avatar von Draxes
    Registriert seit
    Aug 2007
    Ort
    Mainz
    Beiträge
    1.920
     
    Draxes ist offline
    Okay, ich habe es jetzt auf eine etwas andere Art und Weise umschifft. Dabei wird der Effekt zwar schon direkt gestartet, sobald der Held die Waffe zieht, ist mir jetzt aber doch relativ egal, da meine Verzauber-Animation doch recht kurz ist und das hier nicht auffällt.

    Hier mein Code der startWeaponEffect-Methode, den ich jetzt verwende, falls ihn jemand braucht:

    Code:
    func void startWeaponEffect() {
    	var C_ITEM weapon; weapon = Npc_GetEquippedMeleeWeapon(hero);
    	if(Hlp_IsValidItem(weapon)) {
    	    if (Hlp_StrCmp(weapon.effect, "")) { // Waffe darf keinen Effekt haben, würde sonst überschrieben werden
    	        startItemFX(weapon, "SPELLFX_LIGHTNING_WEAPON_ENCHANTMENT");
    
    	        // RangedWeapon speichern
    	        var C_ITEM rangedWeapon;
    	        rangedWeapon = Npc_GetEquippedRangedWeapon(hero);
    
    	        // Alle Waffen unequippen
    	        AI_UnequipWeapons(hero);
    
    	        // RangedWeapon und MeleeWeapon wieder equippen
    	        EquipItem(hero, rangedWeapon);
    	        EquipItem(hero, weapon);
    	    };
    	};
    };

  9. Beiträge anzeigen #9 Zitieren
    Schwertmeister Avatar von TheBigLeBRUCEky
    Registriert seit
    Apr 2014
    Beiträge
    997
     
    TheBigLeBRUCEky ist offline
    Nur mal noch so eine Idee zu dem Thema.
    Sorry, falls es Blödsinn ist, ich bin kein Programmierer, aber, ich versuche Probleme immer logisch anzugehen.

    Kann es sein, dass an der Waffe noch ein Flag gesetzt wird, wenn sie gezogen wird?
    Hast du mal versucht, den Effekt auf die gezogene NK-Waffe zu setzen?
    Man kann ja auch "Npc_GetReadiedMeleeWeapon" abfragen.
    Du schreibst ja, dass du die Waffe wegstecken musst, damit der Effekt startet.
    Da du die ausgerüstete Waffe(nicht die gezogene) zwischengespeichert hast und den Effekt auf diese Waffe setzt, klingt das für mich so, als wäre die gezogene Waffe für Gothic irgendwie eine andere.

    Würde mich mal interressieren.

    MfG

  10. Beiträge anzeigen #10 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Ohne das genaue Skript von Draxes zu sehen kann man sich natürlich nicht sicher sein, aber ich glaube du hast den Nagel auf den Kopf getroffen. Npc_GetEquippedMeleeWeapon() liefert nichts sinnvolles ("nullptr") zurück, wenn der Held die Nahkampfwaffe gerade gezogen hat.

  11. Beiträge anzeigen #11 Zitieren
    Schwertmeister Avatar von TheBigLeBRUCEky
    Registriert seit
    Apr 2014
    Beiträge
    997
     
    TheBigLeBRUCEky ist offline
    Zitat Zitat von Lehona Beitrag anzeigen
    Ohne das genaue Skript von Draxes zu sehen kann man sich natürlich nicht sicher sein, aber ich glaube du hast den Nagel auf den Kopf getroffen. Npc_GetEquippedMeleeWeapon() liefert nichts sinnvolles ("nullptr") zurück, wenn der Held die Nahkampfwaffe gerade gezogen hat.
    Danke für die Aufklärung.

    Ist es eigentlich generell ein Problem, wenn Funktionen "Null" zurückliefern?

    Hab in meiner Mod auch das Problem, dass im zSpy einige Funktionen, bei Spielstart, "Null" liefern.
    Vor allem geht es dabei um Veränderungen am Helden und einigen Npc's(Abfragen wegen Aussehen oder OverlayMDS, wenn sie z.B. Schilde tragen).

    MfG

  12. Beiträge anzeigen #12 Zitieren
    Knight Avatar von Draxes
    Registriert seit
    Aug 2007
    Ort
    Mainz
    Beiträge
    1.920
     
    Draxes ist offline
    Ein kleiner Nachsatz zu eurer Anmerkung: Ich habe das als erstes mit Npc_GetReadiedMeleeWeapon(hero) probiert mit dem gleichen Ergebnis. Also natürlich mit der Voraussetzung, dass die Waffe dann auch gezogen war. Ich habe mir an der Stelle ein print ausgeben lassen, wenn ich dort nicht null zurückbekomme. Hat an dem Ergebnis an der Stelle aber nichts geändert.

    Allerdings muss ich sagen, dass ich mit der jetzigen Lösung absolut zufrieden bin.

  13. Beiträge anzeigen #13 Zitieren
    Schwertmeister Avatar von TheBigLeBRUCEky
    Registriert seit
    Apr 2014
    Beiträge
    997
     
    TheBigLeBRUCEky ist offline
    Zitat Zitat von Draxes Beitrag anzeigen
    Ein kleiner Nachsatz zu eurer Anmerkung: Ich habe das als erstes mit Npc_GetReadiedMeleeWeapon(hero) probiert mit dem gleichen Ergebnis. Also natürlich mit der Voraussetzung, dass die Waffe dann auch gezogen war. Ich habe mir an der Stelle ein print ausgeben lassen, wenn ich dort nicht null zurückbekomme. Hat an dem Ergebnis an der Stelle aber nichts geändert.

    Allerdings muss ich sagen, dass ich mit der jetzigen Lösung absolut zufrieden bin.
    Ok, gut zu wissen, war auch nur so ein Gedanke...hätte ja klappen können.^^
    Bleibt natürlich die Frage, warum es auf der gezogenen Waffe nicht klappt.

    MfG

  14. Beiträge anzeigen #14 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Zitat Zitat von TheBigLeBRUCEky Beitrag anzeigen
    Danke für die Aufklärung.

    Ist es eigentlich generell ein Problem, wenn Funktionen "Null" zurückliefern?

    Hab in meiner Mod auch das Problem, dass im zSpy einige Funktionen, bei Spielstart, "Null" liefern.
    Vor allem geht es dabei um Veränderungen am Helden und einigen Npc's(Abfragen wegen Aussehen oder OverlayMDS, wenn sie z.B. Schilde tragen).

    MfG
    Gothic ist da relativ kulant, wenn man auf Instanzen zugreift, die ins "Nichts" zeigen, wird als Wert einfach 0 zurückgeliefert.

  15. Beiträge anzeigen #15 Zitieren
    Schwertmeister Avatar von TheBigLeBRUCEky
    Registriert seit
    Apr 2014
    Beiträge
    997
     
    TheBigLeBRUCEky ist offline
    Zitat Zitat von Lehona Beitrag anzeigen
    Gothic ist da relativ kulant, wenn man auf Instanzen zugreift, die ins "Nichts" zeigen, wird als Wert einfach 0 zurückgeliefert.
    Danke, hatte auch nie Probleme.
    Wollte nur sichergehen, um das als Ursache bei eventuellen Abstürzen auszuschließen.

    MfG

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