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 8 von 8
  1. Beiträge anzeigen #1
    Ritter Avatar von Kirides
    Registriert seit
    Jul 2009
    Ort
    Norddeutschland
    Beiträge
    1.780
     
    Kirides ist offline

    Eisblock Effekt nachbauen

    Hallöchen Leute,


    Ich stehe heute wieder auf dem Schlauch...

    ich versuche schon seit Stunden den Eisblock-Effekt nachzubauen, welcher passiert wenn Gegner vom Eisblock getroffen werden.

    Genauer gesagt will ich als Feature ein "chance auf gefrieren für 2 sekunden" einbauen.

    Nun habe ich nach ganz viel "keine ahnung, warum klappt das nicht, MANN EY" den dreckigen Weg gewählt und einfach beim treffer mit einer wahrscheinlichkeit folgenden Code ausgeführt

    Code:
    Npc_ClearAIQueue	(oth);
    B_ClearPerceptions	(oth);
    AI_StartState		(oth, ZS_MagicFreezeShort, 0, "");
    Wld_PlayEffect("spellFX_Icespell_SENDPERCEPTION", oth, oth, 0, 0, 0, FALSE);
    ZS_MagicFreezeShort ist praktisch 1-zu-1 ZS_MagicFreeze, nur das der State nur 2 sekunden statt 19 sekunden anhält.

    Das Problem an der ganze schose ist aber:
    - Die Eisblöcke bleiben ewig und drei Tage bestehen, auch wenn der Gegner schon längst frei ist
    - Die Gegner sind nach erstmaligem Treffen für 20 sekunden Immun gegen weiteres einfrieren


    Was muss ich alles bauen / bearbeiten damit ich meinen eigenen "kurzen" Eisblock effekt haben kann?

  2. #2
    Falugify
    Gast
     
    zu finden in Scripts\System\PFX\PfxInstMagic.d

    Code:
    INSTANCE MFX_ICESPELL_TARGET (C_PARTICLEFX)
    {
         ppsvalue = 100;
         ppsscalekeys_s = "1";
         ppsissmooth = 1;
         ppsfps = 10;
         ppscreateem_s = "MFX_ICESPELL_TARGETEND";
         ppscreateemdelay = 20000;
         shptype_s = "BOX";
         shpfor_s = "object";
         shpoffsetvec_s = "0 0 0";
         shpdistribtype_s = "RAND";
         shpisvolume = 1;
         shpdim_s = "30 100 30";
         shpscalekeys_s = "1";
         shpscaleislooping = 1;
         shpscaleissmooth = 1;
         shpscalefps = 2;
         dirmode_s = "RAND";
         dirfor_s = "object";
         dirmodetargetfor_s = "OBJECT";
         dirmodetargetpos_s = "0 0 0";
         dirangleheadvar = 180;
         dirangleelevvar = 180;
         velavg = 9.99999997e-007;
         lsppartavg = 20000;
         flygravity_s = "0 0 0";
         visname_s = "MFX_FREEZE_MULTIICE.TGA";
         visorientation_s = "VELO";
         vistexisquadpoly = 1;
         vistexanifps = 18;
         vistexaniislooping = 1;
         vistexcolorstart_s = "255 255 255";
         vistexcolorend_s = "255 255 255";
         vissizestart_s = "30 30";
         vissizeendscale = 1;
         visalphafunc_s = "BLEND";
         visalphastart = 255;
         visalphaend = 255;
    };
    
    INSTANCE MFX_ICESPELL_TARGETEND (C_PARTICLEFX)
    {
         ppsvalue = 1000.000000000;
         ppsscalekeys_s = "1";
         ppsissmooth = 1;
         ppsfps = 10.000000000;
         shptype_s = "BOX";
         shpfor_s = "object";
         shpoffsetvec_s = "0 0 0";
         shpdistribtype_s = "RAND";
         shpdim_s = "30 100 30";
         shpscalekeys_s = "1";
         shpscaleislooping = 1;
         shpscaleissmooth = 1;
         shpscalefps = 2.000000000;
         dirmode_s = "RAND";
         dirfor_s = "object";
         dirmodetargetfor_s = "OBJECT";
         dirmodetargetpos_s = "0 0 0";
         dirangleheadvar = 180.000000000;
         dirangleelevvar = 180.000000000;
         velavg = 0.100000001;
         velvar = 0.039999999;
         lsppartavg = 1000.000000000;
         lsppartvar = 300.000000000;
         flygravity_s = "0 -0.001 0";
         flycolldet_b = 1;
         visname_s = "MFX_FREEZE_ICEQUADMARK.TGA";
         visorientation_s = "NONE";
         vistexisquadpoly = 1;
         vistexanifps = 18.000000000;
         vistexaniislooping = 1;
         vistexcolorstart_s = "255 255 255";
         vistexcolorend_s = "255 255 255";
         vissizestart_s = "30 30";
         vissizeendscale = 1.000000000;
         visalphafunc_s = "BLEND";
         visalphastart = 180.000000000;
         visalphaend = 100.000000000;
         mrkfadespeed = 0.100000001;
         mrktexture_s = "MFX_FREEZE_ICEQUADMARK.TGA";
         mrksize = 20.000000000;
    };

    Vielleicht hilft dir das weiter.
    Geändert von Falugify (07.08.2020 um 15:26 Uhr)

  3. Beiträge anzeigen #3
    Veteran Avatar von N1kX
    Registriert seit
    Aug 2018
    Ort
    Serov
    Beiträge
    643
     
    N1kX ist offline
    The ice block spell works as follows (From your General knowledge)
    After the spell hits the NPC, the b_assessmagic. function is called, in which the spell is checked and this NPC is transferred To the new zs_magicfreeze state
    Further from the spell code ZS_MagicFreeze.d there are 3 stages
    1. npc_percenable perception is Enabled (self, PERC_ASSESSMAGIC, B_RestartFreeze).
    and reset the counter
    2. Loup.
    Look, if the time passed in >= 19 seconds, the function B_StopMagicFreeze is called and the loop ends.
    In the cycle itself there is an accrual of time and checks for damage
    3. after exiting, you must enable the perception of Npc_PercEnable (self, PERC_ASSESSMAGIC, B_AssessMagic); and attack.

    The spell duration is specified in spell_icecube.d

    Can you use the same variables? Where does this piece of code get called?

  4. Beiträge anzeigen #4
    Ritter Avatar von Kirides
    Registriert seit
    Jul 2009
    Ort
    Norddeutschland
    Beiträge
    1.780
     
    Kirides ist offline
    Zitat Zitat von N1kX Beitrag anzeigen
    The ice block spell works as follows (From your General knowledge)
    After the spell hits the NPC, the b_assessmagic. function is called, in which the spell is checked and this NPC is transferred To the new zs_magicfreeze state
    Further from the spell code ZS_MagicFreeze.d there are 3 stages
    1. npc_percenable perception is Enabled (self, PERC_ASSESSMAGIC, B_RestartFreeze).
    and reset the counter
    2. Loup.
    Look, if the time passed in >= 19 seconds, the function B_StopMagicFreeze is called and the loop ends.
    In the cycle itself there is an accrual of time and checks for damage
    3. after exiting, you must enable the perception of Npc_PercEnable (self, PERC_ASSESSMAGIC, B_AssessMagic); and attack.

    The spell duration is specified in spell_icecube.d

    Can you use the same variables? Where does this piece of code get called?
    i recycled basically the whole code, but the duration, the "on hit" and other stuff come from the particle fx of the IceCube spell, which is not controlled by the Content-Scripts but the Pfx'

    I currently look at how i have to implement it to make it work for my case

  5. Beiträge anzeigen #5
    Ritter Avatar von Kirides
    Registriert seit
    Jul 2009
    Ort
    Norddeutschland
    Beiträge
    1.780
     
    Kirides ist offline
    Also ich habe jetzt einen Eisblock welcher 2s bestehen bleibt, soweit alles gut. Aber die Gegner sind danach trotzdem für > 20 sekunden immun gegen nochmal einfrieren :/ Ich habe nicht herausgefunden woran das liegt. Wenn die NPC im Kampf sind, frieren sie manchmal auch gar nicht ein, obwohl sie es sollten.

    irgendwie blicke ich bei den SpellFx und dem zusammenspiel von den verschiedenen Gothic-Skriptteilen nicht durch.

  6. Beiträge anzeigen #6
    Ritter Avatar von Kirides
    Registriert seit
    Jul 2009
    Ort
    Norddeutschland
    Beiträge
    1.780
     
    Kirides ist offline
    EDIT:

    Es war eigentlich ganz einfach:

    C_CanCollideWithSpell hat für die Eislanze *nur* Schaden zurückgegeben, um ein AssessMagic zu bekommen, muss aber ein COLL_DOEVERYTHING zurückgegeben werden.



    ------------------------------------------------------


    Kleiner Push.

    Inzwischen habe ichs hinbekommen das zumindest der Eispfeil einen 2s Eisblock effekt ausübt.

    Aber egal was ich z.B. am SpellFX_IceLance änder, bekomme ich es nicht hin, dass dieser ein "ASSESS MAGIC" feuert.
    Beim spellFX_IceBolt hat es gereicht, einen "emFXCollDynPerc_S" spellFX_IceBolt_SENDPERCEPTION wie folgt hinzuzufügen:

    Code:
    instance spellFX_IceBolt_SENDPERCEPTION(CFx_Base_Proto)
    {
    	visname_S 		= "DEFAULT.TGA"; // Das steht da nur weil wenn visname_S = "" nichts passiert :/
    	emtrjmode_s		= "FIXED";
    	sendAssessMagic		= 1;
    	emAdjustShpToOrigin	= 1;
    };
    Beim SpellFX_IceLance habe ich das gleiche versucht, ohne erfolg.
    Dann habe ich versucht in den ganzen spellFX_Icelance_XX (CFx_Base_Proto) - Instanzen einzeln und auch einfach einmal überall, ein "sendAssessMagic=1" fest einzubauen, ebenfalls Erfolglos.

    Mit dem Eintrag aus dem Editingwiki komme ich auch nicht weiter: https://wiki.worldofgothic.de/doku.p...spell_tutorial
    Geändert von Kirides (17.08.2020 um 18:39 Uhr)

  7. Beiträge anzeigen #7
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Hier zwei Tipps:

    1. Kopiere dafür mal alle PFX als auch die VFX (!) Instanzen in den anderen Zauber und prüfe ob es dann klappt. Anschließend kannst du einzelne Instanzen oder Werte schrittweise zurück ändern, um festzustellen, wo der Wurm drin war.

    2. Erstelle einen komplett neuen Zauber mit einer SpellID größer als der ursprünglichen MAX_SPELL (inkl. reserved). Denn Engine-intern ist einiges Verhalten an den SpellIDs hardgecodet.

  8. Beiträge anzeigen #8
    Ritter Avatar von Kirides
    Registriert seit
    Jul 2009
    Ort
    Norddeutschland
    Beiträge
    1.780
     
    Kirides ist offline
    Zitat Zitat von mud-freak Beitrag anzeigen
    Hier zwei Tipps:

    1. Kopiere dafür mal alle PFX als auch die VFX (!) Instanzen in den anderen Zauber und prüfe ob es dann klappt. Anschließend kannst du einzelne Instanzen oder Werte schrittweise zurück ändern, um festzustellen, wo der Wurm drin war.

    2. Erstelle einen komplett neuen Zauber mit einer SpellID größer als der ursprünglichen MAX_SPELL (inkl. reserved). Denn Engine-intern ist einiges Verhalten an den SpellIDs hardgecodet.
    Wie geschrieben: Es lag an der Kollisionsabfrage in C_CanNpcCollideWithSpell.
    Nach dem ändern auf "COLL_DOEVERYTHING" anstelle von "COLL_APPLYDAMAGE" funktionieren die Zauber nun FAST perfekt.

    Einzig, einige Gegner sind scheinbar Immun vor bestimmtem magischem Schaden, wenn COLL_DOEVERYTHING oder COLL_APPLYVICTIMSTATE gesetzt sind (z.B. Steinwächter ...)
    (Vielleicht liegt *das* diesmal an den VisualFX, oder auch nicht, keine Ahnung, ist echt unübersichtlich woher was, wann kommt)

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