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

    "Sicheres" wegstoßen mit DAM_FLY

    Hi! Wir haben bei uns den Zauber Windfaust und auch andere Fähigkeiten, die Gegner hauptsächlich wegstoßen sollen. Jetzt gibt es in Gothic II ja leider das bekannte Problem, dass Npcs häufig keine Lust haben sich durch die Gegend schleudern zu lassen und das "wegfliegen" lieber durch eine Angriffsanimation oder Strafing unterbrechen. Besonders, wenn sie ganz dich am Helden dranstehen. Ich wollte mal versuchen, ob man dieses Verhalten irgendwie unterdrücken kann oder auf anderem Wege ein "sicheres" wegstoßen garantieren kann, ohne dass es immer eine 50/50 Chance ist, dass der Gegner das auch wirklich mit sich machen lässt.

    Ich bin leider bisher auf keine funktionierende Methode gestoßen. Ich weiß zwar, an welchen Stellen ich potentiell eingreifen könnte (B_AssessMagic() oder noch besser in unserem damage-hook), allerdings muss ich dann erstmal wissen, wie ich die Npcs für einen Moment "ruhig stellen" kann oder soetwas.

    Hat da schon Mal jemand eine funktionierende Lösung gefunden oder hätte eine Idee, was man so versuchen könnte?

    Probiert habe ich bisher:
    - Npc_ClearAIQueue(victim)
    - B_ClearPerceptions(victim) // wobei das sowieso zu gefährlich wäre an solchen Stellen
    Geändert von Draxes (17.11.2018 um 18:25 Uhr)

  2. Beiträge anzeigen #2 Zitieren
    Local Hero
    Registriert seit
    Feb 2017
    Beiträge
    270
     
    F a w k e s ist offline

    Stormfist Windfist fix

    Hi Draxes,
    I had same issues in G1 (I have created very specific quest in which one way to kill an overpowered guard is by throwing him to abyss with StormFist/Windfist)

    My solution was to 'Freeze AI' by starting AI state ZS_StormFistFreeze - which stops NPC for 3 seconds.
    Maybe you can use same approach with G2A:

    Code:
    FUNC VOID B_StopStormFistFreeze ()
    {
        Npc_ClearAIQueue (self);
        
        AI_Standup (self);
        
        if (C_NpcIsHuman (self) || C_NpcIsOrc (self))
        {
            AI_StartState (self, ZS_ReactToDamage, 0, "");
        } else if (C_NpcIsMonster (self))
        {
            AI_StartState (self, ZS_MM_Attack, 0, "");
        };
    };
    
    FUNC VOID ZS_StormFistFreeze ()
    {
        Npc_PercEnable (self, PERC_ASSESSMAGIC, ZS_StormFistFreeze);
    };
    
    FUNC INT ZS_StormFistFreeze_Loop ()
    {
        if (Npc_GetStateTime (self) > 3)
        {
            B_StopStormFistFreeze ();
            return LOOP_END;
        };
    
        AI_Wait (self, 1);
        return LOOP_CONTINUE;
    };
    
    FUNC VOID ZS_StormFistFreeze_End () {};
    
    //---
    
    FUNC INT Spell_Logic_Windfist (VAR INT manaInvested)
    {
        if ((manaInvested == ((SPL_SENDCAST_WINDFIST * 3) / 10)) || (manaInvested == ((SPL_SENDCAST_WINDFIST * 5) / 10)) || (manaInvested == ((SPL_SENDCAST_WINDFIST * 8) / 10)))
        {
            return SPL_NEXTLEVEL;
        };
        
        if (manaInvested >= SPL_SENDCAST_WINDFIST)
        {
            if (Hlp_IsValidNPC (other)) {
    
                //--- MOD ---
                //'Freeze AI'
                NPC_ClearAIQueue (other);
                AI_StartState (other, ZS_StormFistFreeze, 0, "");
            };
            
            return SPL_SENDCAST;
        };
        
        return SPL_RECEIVEINVEST;
    };
    
    FUNC INT Spell_Logic_Stormfist (VAR INT manaInvested)
    {
        if ((manaInvested == ((SPL_SENDCAST_STORMFIST * 3) / 10)) || (manaInvested == ((SPL_SENDCAST_STORMFIST * 5) / 10)) || (manaInvested == ((SPL_SENDCAST_STORMFIST * 8) / 10)))
        {
            return SPL_NEXTLEVEL;
        };
    
        if (manaInvested >= SPL_SENDCAST_STORMFIST)
        {
            if (Hlp_IsValidNPC (other)) {
    		//--- MOD ---
    		//'Freeze AI'
    		NPC_ClearAIQueue (other);
    		AI_StartState (other, ZS_StormFistFreeze, 0, "");
    	};
    
    
            return SPL_SENDCAST;
        };
        
        return SPL_RECEIVEINVEST;
    };
    Geändert von F a w k e s (17.11.2018 um 19:37 Uhr)

  3. Beiträge anzeigen #3 Zitieren
    Knight Avatar von Draxes
    Registriert seit
    Aug 2007
    Ort
    Mainz
    Beiträge
    1.920
     
    Draxes ist offline
    Hi F a w k e s,

    thank you for your advice! This solution works really good!

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