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 12 von 12
  1. Beiträge anzeigen #1 Zitieren
    Provinzheld
    Registriert seit
    May 2017
    Ort
    Neue Lager
    Beiträge
    205
     
    ErzSchmuggler ist offline

    Verbessertes Irrlicht

    Hallo Gothic-Freunde,

    ich finde es spannend das IrrlichtAmulett zu vebessern.

    Ich möchte den Suchradius verändern, die Geschwindigkeit erhöhen und das Amulett zusätzlich anziehen können.

    Hat jemand von euch schonmal das Irrlicht dahingehend verbessert?
    Oder einen weiteren guten Einfall dieses Amulett brauchbarer zu gestalten ?

    Ich bin auf eure Antworten gespannt.
    Gruß ErzSchmuggler

  2. Beiträge anzeigen #2 Zitieren
    Rock Me Amadeus  Avatar von Askanius
    Registriert seit
    Oct 2009
    Beiträge
    3.972
     
    Askanius ist offline
    Das Amulett zusätzlich anziehen zu können, finde ich doof. Ab dem Midgame ist es doch eh egal, ob man jetzt 5-15 Schutz mehr hat oder nicht. Am Anfang als Hanswurst ist es doch zumindest eine kleine interessante Wahl, ob man gerne Unterstützung bei der Schatzsuche hätte oder etwas mehr Schutz vor DEM EINEN entscheidenden Wolfsbiss...

    Ich gebe aber zu, dass ich das Amulett aus einem Grund nie benutzt habe. LP sind viel zu wertvoll, um sie dafür zu verschwenden. Das Irrlicht gegen Gold zu trainieren fände ich viel interessanter. Wäre vielleicht was für einen Ninja-Patch.

  3. Beiträge anzeigen #3 Zitieren
    Union - Testphase Avatar von Niko5511
    Registriert seit
    Jan 2018
    Beiträge
    2.570
     
    Niko5511 ist offline
    Die neueste Returning AB Version benutzt sogar 2 verschiedene Irrlichter. Das zweite Irrlicht, über F5 aufrufbar, hat verschiedene Talente, z. B. Gräser einsammeln im Radius, schneller einsammeln im Radius, usw. Du könntest Haart auf RPGRussia anschreiben, er kennt sich mit dem Irrlicht sehr gut aus und kann auch etwas Englisch

  4. Beiträge anzeigen #4 Zitieren
    Kämpfer
    Registriert seit
    May 2011
    Beiträge
    353
     
    easecon ist offline
    Fände das auch SUPER vor allem als Ninja-Patch :P

    Das Irrlicht ist eine coole Sache nur wird es so selten verwendet. Bei vielen Mods sind deswegen die Lernpunkte auf 1 heruntergeschraubt. Und 1 Lernpunkt für Pflanzen sammeln ist echt ok. Gold wäre natürlich auch ok bzw. eigentlich besser, aber ob das via Ninja-Patch geht? (Kenne mich da nicht aus)

    Das man es zusätzlich anziehen kann fände ich auch cool, das macht es noch viel wertvoller (vor allem, wenn man an die Sets denkt, die man sonst nicht komplett hat)

    Was mich ebenfalls am Irrlicht stört ist, dass man es während dem Kampf immer wieder anvisiert. Ich meine es ist schon lustig, wie das Irrlicht mitkämpft und die Gegner immer wieder "anstupst" aber weil man es anvisiert, bringt es einem im Kampf eher Nachteile. Wenn man es mit gezogener Waffe nicht mehr anvisieren könnte, wäre dem schon geholfen.

    Außerdem fände ich es cool, wenn man ihm "Licht" beibringen könnte, es also (optional, wenn man es darauf anspricht) den Weg leuchtet. Weil es aber dabei immer so hinterherhinken würde, könnte es ja auch wie der Zauber über dem Kopf tanzen oder so, muss aber nicht. Dafür, dass es hinterherhinkend eh schon schlechter wäre als die normale Licht-Rune verliert diese auch nicht komplett an Bedeutung und man könnte den Radius auch etwas erhöhen, wenn's nötig ist.

    Ich fände es auch gut, dass es andersfarbend zu leuchten beginnt SOBALD es sich auf den Weg zu etwas macht, das es sieht, sodass man nicht immer erst warten muss und nicht mehr fälschlicherweise reagiert. Es könnte auch rot leuchten, sobald es Gegner spürt (natürlich mit erhöhtem Radius). Und blau wenn sich auf den Weg begibt.

    Es könnte auch Heilung lernen, dafür müsste man es außerhalb eines Kampfes ansprechen und sagen "Heile mich" (dafür gibt's den Soundfile ja schon glaube ich) und dann schwirrt es um einen herum und heilt langsam). Aber vielleicht wäre das zu imba :P

    Mehr fällt mir gerade nicht ein ^^
    Geändert von easecon (10.11.2018 um 10:42 Uhr)

  5. Beiträge anzeigen #5 Zitieren
    Union - Testphase Avatar von Niko5511
    Registriert seit
    Jan 2018
    Beiträge
    2.570
     
    Niko5511 ist offline
    Spiel halt einfach mal Returning 2.0 AB und teste das. Ist mit F5 aktivierbar. Es lässt sich auch nicht ins target nehmen im Kampf. Zudem kannst ihm alles beibringen, Waffen sammeln, Sammelradius und Geschwindigkeit erhöhen, Blablabla sammeln.....

  6. Beiträge anzeigen #6 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Zum Thema Ninja hier kurz ein Stimmungsdämpfer:

    Das Irrlicht damit zu ändern ist nicht sinnvoll/möglich/... Wie jeder andere NPC im Spiel ist auch das Irrlicht ein Storyelement und damit stark von Mod zu Mod (und zum Original) unterschiedlich. Auch wenn es möglich wäre, die Irrlicht-Instanz verlässlich ausfindig zu machen (was schon sehr knifflig sein sollte, denn Mods mögen das Irrlicht umbenennen, mehrere Irrlichter-Arten haben, usw.), kann sich dessen Mechanik sehr unterscheiden. In vielen Mods mag es vielleicht auch gar kein Irrlicht geben. Damit würde der Patch wieder Mod-spezifisch werden, was eben nicht der Idee von Ninja entspricht. Patches sind eher für Story-unabhängige Features gedacht.
    Geändert von mud-freak (15.01.2021 um 10:34 Uhr)

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

    NPC_PerceiveAll range - NPC_CreateVobList, Wld_DetectItem, Wisp

    Hello ErzSchmuggler, easecon,
    I loved your ideas so much that I just had to work on this :P

    Increase search radius:
    Standard function for object detection does not allow you to specify range:
    NPC_PerceiveAll (self);

    New function (code below) will allow you to specify range:
    NPC_CreateVobList (self, 3000);

    Increase speed:
    You can use this function below to increase speed of any NPC in the game:
    NPC_SetTimeScale (npc, f);
    https://forum.worldofplayers.de/foru...1#post25962976

    Disable targeting in fight mode:
    This function will allow you to change _zCVob_type - so you can tell Gothic that NPC is actually not NPC, and therefore Gothic will not auto-aim at it:
    NPC_Change_zCVob_type (self, VOB_TYPE_SOUND); (code below)
    Edit 2018-11-15: definitely do not change NPC to VOB_TYPE_LIGHT - if Wisp died and its body was removed Gothic crashed VOB_TYPE_SOUND was so far working fine.

    Light:
    In my case I didn't have G2A model available in G1, so I just used
    Wld_StopEffect_Ext ("FX_WISPLIGHT", 0, 0, 1); //thanks mud-freak, super-cool function!
    Wld_PlayEffect ("FX_WISPLIGHT", self, self, 0, 0, 0, FALSE);
    on NPC without any visuals to put a light effect on it

    Changing color when it detects item:
    Since I am using Wld_PlayEffect function I can simply change color as I wish

    Healing:
    Instead of talking, when you interact with Wisp, it will heal you - you can achieve that by:
    NPC_PercEnable (self, PERC_ASSESSTALK, B_Wisp_Release);

    Wisp in action:
    [Video]

    Should anyone be interested in the code:
    Code:
    /*
        Tested with G1, Ikarus 1.2, Lego 2.5.0
        Functions should be compatible with G2A - but I never tested it :)
    */
    
    /*
        Same functionality as NPC_PerceiveAll, however allows you to specify range.
        It collects all objects within range of self to self.vobList_array.
        NPC_CreateVobList (self, range);
    */
    //006B7110  .text     Debug data           ?CreateVobList@oCNpc@@QAEXM@Z
    const int oCNpc__CreateVobList_G1 = 7041296;
    
    //0x0075DA40 public: void __thiscall oCNpc::CreateVobList(float)
    const int oCNpc__CreateVobList_G2 = 7723584;
    
    FUNC VOID NPC_CreateVobList (var C_NPC slf, var int range)
    {
        CALL_IntParam (mkf (range));
        CALL__thiscall (MEM_InstToPtr (slf), MEMINT_SwitchG1G2 (oCNpc__CreateVobList_G1, oCNpc__CreateVobList_G2));
    };
    
    /*
        Function removes vobPtr from self.vobList_array
    */
    //006B7080  .text     Debug data           ?RemoveFromVobList@oCNpc@@QAEXPAVzCVob@@@Z
    const int oCNpc__RemoveFromVobList_G1 = 7041152;
    
    //0x0075D9B0 public: void __thiscall oCNpc::RemoveFromVobList(class zCVob *)
    const int oCNpc__RemoveFromVobList_G2 = 7723440;
    
    FUNC VOID NPC_RemoveFromVobList (var C_NPC slf, var int vobPtr)
    {
        if (!vobPtr)    {    return;        };
        
        CALL_PtrParam (vobPtr);
        CALL__thiscall (MEM_InstToPtr (slf), MEMINT_SwitchG1G2 (oCNpc__RemoveFromVobList_G1, oCNpc__RemoveFromVobList_G2));
    };
    
    /*
        Function allows you to change _zCVob_type
    */
    const int cVOB_TYPE_LIGHT        = 1;
    const int cVOB_TYPE_SOUND        = 2;
    const int cVOB_TYPE_STARTPOINT    = 6;
    const int cVOB_TYPE_WAYPOINT        = 7;
    const int cVOB_TYPE_MOB            = 128;
    const int cVOB_TYPE_ITEM            = 129;
    const int cVOB_TYPE_NPC            = 130;
    
    FUNC VOID NPC_Change_zCVob_type (var C_NPC slf, var int vobType)
    {
        var oCNPC npc;
        npc = Hlp_GetNPC (slf);
    
        npc._zCVob_type = vobType;
    };
    
    /*
        Wisp start_aistate ...
    */
    
    FUNC VOID B_Wisp_Release ()
    {
        B_World_RemoveNPC (self);
    
        Wld_PlayEffect ("FX_WISPLIGHT_HEAL", hero, hero, 0, 0, 0, FALSE);
        hero.attribute [ATR_HITPOINTS] += 40;
    };
    
    FUNC VOID ZS_Wisp ()
    {
        B_ClearPerceptions (self);
        NPC_PercEnable (self, PERC_ASSESSTALK, B_Wisp_Release);
    
        NPC_ClearAIQueue (self);
        NPC_SetPercTime (self, 1);
    
        Wld_StopEffect_Ext ("FX_WISPLIGHT", 0, 0, 1);
        Wld_StopEffect_Ext ("FX_WISPLIGHT_GOLD", 0, 0, 1);
        //---
        Wld_PlayEffect ("FX_WISPLIGHT", self, self, 0, 0, 0, FALSE);
        
        NPC_SetTimeScale (self, mkf (3));
        
        Wisp_Vob_Type = cVOB_TYPE_NPC;
        NPC_Change_zCVob_type (self, cVOB_TYPE_NPC);
    
        AI_SetWalkMode (self, NPC_RUN);
        AI_Wait (self, 1);
    };
    
    FUNC INT ZS_Wisp_Loop ()
    {
    //---  Is player in Fight mode ? if Yes change _zCVob_type to VOB_TYPE_LIGHT - this will not allow player to target Wisp (though he can still kill it! by shooting at it for example ...)
    
        if (C_NPCIsInFightMode (hero))
        {
            if (Wisp_Vob_Type == cVOB_TYPE_NPC)
            {
                NPC_Change_zCVob_type (self, cVOB_TYPE_SOUND);
                Wisp_Vob_Type = cVOB_TYPE_SOUND;
            };
        } else
        {
            if (Wisp_Vob_Type == cVOB_TYPE_SOUND)
            {
                NPC_Change_zCVob_type (self, cVOB_TYPE_NPC);
                Wisp_Vob_Type = cVOB_TYPE_NPC;
            };
        };    
        
    //--- create vobList_array
    
        //NPC_PerceiveAll (self);
        //Same as NPC_PerceiveAll - but restricted to specific range
        NPC_CreateVobList (self, 3000);
    
    /***
        This piece below is here just to demonstrate NPC_RemoveFromVobList :)
        In theory you can use this piece of code to write your own version of Wld_DetectItem.
    ***/
    
    //--- clear vobList_array - remove all items, that are too far, or those which our Wisp can't see
    
        var oCNPC slf;
        slf = Hlp_GetNPC (self);
    
        var int i; i = 0;
        var int loop;
    
        MEM_InitLabels ();
        loop = MEM_StackPos.position;
        
        if (slf.vobList_numInArray > 0)
        {
            var int vobPtr; vobPtr = MEM_ReadIntArray (slf.vobList_array, i);
            
            if (Hlp_Is_oCItem (vobPtr))
            {
                var C_Item myItem;
                myItem = _^ (vobPtr);
                
                //Is item too far ? remove it from vobList_array
                if (NPC_GetDistToItem (self, myItem) > 3000)
                {
                    //remove item from vobList_array
                    NPC_RemoveFromVobList (self, vobPtr);
                    
                    //restart loop
                    i = 0;
                    MEM_StackPos.position = loop;
                };
                
                //Can I see this item ? if not, remove it from vobList_array
                if (NPC_FreeLineOfSight (self, vobPtr) == FALSE)
                && (NPC_CanSeeItem (self, myItem) == FALSE)
                && (NPC_GetDistToItem (self, myItem) > 300)
                {
                    //remove item from vobList_array
                    NPC_RemoveFromVobList (self, vobPtr);
    
                    //restart loop
                    i = 0;
                    MEM_StackPos.position = loop;
                };
            } else
            {
                //remove object from vobList_array
                NPC_RemoveFromVobList (self, vobPtr);
                
                //restart loop
                i = 0;
                MEM_StackPos.position = loop;
            };
            
            i += 1;
            
            if (i < slf.vobList_numInArray)
            {
                MEM_StackPos.position = loop;
            };
        };
    
    //--- Detect item
    
        if (Wld_DetectItem (self, ITEM_KAT_NONE))
        {
            if (Hlp_IsValidItem (item))
            {
                //Check the distance, just in case
                if (NPC_GetDistToItem (self, item) < 3000)
                {
                    //Can Wisp see detected item? (it should, but just in case :))
                    if (NPC_CanSeeItem (self, item))
                    || (NPC_GetDistToItem (self, item) <= 300)
                    {
                        //If Wisp is close enough - pick the item / notify player
                        if (NPC_GetDistToItem (self, item) <= 300)
                        {
                            //Is Wisp in item-picking mode?
                            if (Wisp_Mode_Picking == TRUE)
                            {
                                if (Wisp_Golden == FALSE)
                                {
                                    Wisp_Golden = TRUE;
                                    Wld_StopEffect_Ext ("FX_WISPLIGHT", 0, self, 1);
                                    Wld_PlayEffect ("FX_WISPLIGHT_GOLD", self, self, 0, 0, 0, FALSE);
                                    
                                    NPC_SetStateTime (self, 0);
                                };
                            
                                if (NPC_GetStateTime (self) >= 1)
                                {
                                    Wisp_Golden = FALSE;
                                    Wld_StopEffect_Ext ("FX_WISPLIGHT_GOLD", 0, self, 1);
                                    Wld_PlayEffect ("FX_WISPLIGHT", self, self, 0, 0, 0, FALSE);
    
                                    var int itm_Instance;
                                    
                                    var ocItem itm;
                                    var int amount;
                                    
                                    var int itm_Ptr;
                                    itm_Ptr = _@ (item);
                                    itm = _^ (itm_Ptr);
                                    amount = itm.amount;
                                    
                                    itm_Instance = Hlp_GetInstanceID (item);
    
                                    CreateInvItems (self, itm_Instance, amount);
                                    Wld_RemoveItem (item);
                                    B_GiveInvItems (self, hero, itm_Instance, amount);
                                    
                                    NPC_SetStateTime (self, 0);
    
                                    //Send perception to NPCs - Wisp might be stealing their items !
                                    Npc_SendPassivePerc (self, PERC_ASSESSTHEFT, self, self);
                                };
                            } else
                            //Wisp is not in item-picking mode, so if will just change color
                            {
                                if (Wisp_Golden == FALSE)
                                {
                                    if (NPC_GetStateTime (self) >= 2)
                                    {
                                        Wisp_Golden = TRUE;
                                        Wld_StopEffect_Ext ("FX_WISPLIGHT", 0, self, 1);
                                        Wld_PlayEffect ("FX_WISPLIGHT_GOLD", self, self, 0, 0, 0, FALSE);
                                        
                                        NPC_SetStateTime (self, 0);
                                    };
                                } else
                                
                                if (NPC_GetStateTime (self) >= 8)
                                {
                                    Wisp_Golden = FALSE;
                                    Wld_StopEffect_Ext ("FX_WISPLIGHT_GOLD", 0, self, 1);
                                    Wld_PlayEffect ("FX_WISPLIGHT", self, self, 0, 0, 0, FALSE);
                                    
                                    NPC_SetStateTime (self, 0);
                                };
                            };
                        } else
                        //If Wisp is not close enough, go to item
                        {
                            AI_GotoItem (self, item);
                        };
                    };
                };
            };
        };
            
        AI_Wait (self, 1);
        
        return LOOP_CONTINUE;
    };
    
    FUNC VOID ZS_Wisp_End ()
    {
    };
    Geändert von F a w k e s (15.11.2018 um 17:47 Uhr) Grund: Changing cVOB_TYPE_LIGHT to cVOB_TYPE_SOUND

  8. Beiträge anzeigen #8 Zitieren
    Kämpfer
    Registriert seit
    May 2011
    Beiträge
    353
     
    easecon ist offline
    WoW amazing is the whisp picking up the stuff by itself? ^^
    That would also be valuable of course. It could have an own inventory so that you don't get confused by what he's picked up for you already and what you still have to do. I actually meant to change colour the moment it starts to move to a plant/item but with that speed it's not necessary anymore :P
    Did the whisp just sacrifice itself to heal you? ^^ Looked like it
    Maybe an option to make the whisp be a bit more quite would be good too :P
    Thank you for the effort looks really cool

    @ mud-freak
    ja schon, dennoch gibt es ja immer diese "nahe zum Original"-Mods, so wie die deutsche L'Hiver Edition, die MiniMod-Balance, VBE oder Atariar. Bei diesen ganzen Mods müsste es ja gehen oder? Weil das Irrlicht so weit ich weiß dort immer unangetastet blieb. Und wenn es gut genug ist, könnte es doch auch "einfach" (oder nicht so einfach?) in zukünftige Mods implementiert werden oder?

    Naja ich hab da zu wenig Wissen aber wenn es für Originaltreue Mods wie die vorher genannten funktioniert wäre das schon ein dicker Bonus.

  9. Beiträge anzeigen #9 Zitieren
    Ehrengarde Avatar von mud-freak
    Registriert seit
    Dec 2005
    Beiträge
    2.199
     
    mud-freak ist offline
    Nice work, Fawkes!


    Zitat Zitat von easecon Beitrag anzeigen
    @ mud-freak
    ja schon, dennoch gibt es ja immer diese "nahe zum Original"-Mods, so wie die deutsche L'Hiver Edition, die MiniMod-Balance, VBE oder Atariar. Bei diesen ganzen Mods müsste es ja gehen oder? Weil das Irrlicht so weit ich weiß dort immer unangetastet blieb. Und wenn es gut genug ist, könnte es doch auch "einfach" (oder nicht so einfach?) in zukünftige Mods implementiert werden oder?

    Naja ich hab da zu wenig Wissen aber wenn es für Originaltreue Mods wie die vorher genannten funktioniert wäre das schon ein dicker Bonus.
    Mir war nicht bewusst, dass sich die genannten Änderungen alle innerhalb des ZS-Skripts des Irrlichts bewerkstelligen lassen (so wie Fawkes das gemacht hat). Damit fallen fast alle meiner Bedenken bzgl. eines Patches weg. Ein Patch mit diesem Skript sollte mit jeder Mod laufen (auch mit Mods, die das Irrlicht nicht benutzen, dort ändert sich dann halt nichts merkliches).
    Die Mechanik des Irrlichts würde dann zwar komplett mit der neuen überschrieben, das wird aber nur dann zu einem Problem, wenn die Mod eigene Änderungen am Irrlicht vorgenommen hatte - und auch nur dann wirklich, wenn diese eigene Funktionalität für eine Quest o.ä. gebraucht wird. So etwas könnte man zuvor ja in Erfahrung bringen (für so etwas gibt es ja die Release-Threads im Mod-Forum), Stichwort: Kompatibilität zwischen einer Mod und einem bestimmten Patch.

    Was nach wie vor nicht so leicht sein sollte, ist das Lernen von neuen Irrlicht-Features in die Lehrer-Dialoge einzubauen (z.B. dass das Irrlicht selbstständig Items aufsammelt). Darauf müsste man dann verzichten. D.h. entweder geht das von Beginn an oder wird auf alternativem Weg gelernt, z.B. nach X Benutzungen vom Irrlicht.

    Falls jemand das Skript in einen Patch verpacken will, empfehle ich noch ein paar Wochen zu warten, ich tüftle gerade an einer neuen Version von Ninja.
    Geändert von mud-freak (15.01.2021 um 10:35 Uhr)

  10. Beiträge anzeigen #10 Zitieren
    Abenteurer
    Registriert seit
    Dec 2017
    Beiträge
    72
     
    PapaZwuckiii ist offline
    Eine Kurze Frage zum verbesserten Irrlicht bei Returning 2.0 New alternate Balancing.

    Wie bringe ich dem Irrlicht die neuen Sachen bei ? Bei mir lässt sich das Irrlicht nicht ansprechen. Habe ich was übersehen ?

  11. Beiträge anzeigen #11 Zitieren
    Ritter Avatar von Kirides
    Registriert seit
    Jul 2009
    Ort
    Norddeutschland
    Beiträge
    1.780
     
    Kirides ist offline
    Zitat Zitat von PapaZwuckiii Beitrag anzeigen
    Eine Kurze Frage zum verbesserten Irrlicht bei Returning 2.0 New alternate Balancing.

    Wie bringe ich dem Irrlicht die neuen Sachen bei ? Bei mir lässt sich das Irrlicht nicht ansprechen. Habe ich was übersehen ?
    Diese frage ist im entsprechenden Thread der Mod besser aufgehoben, da Returning 2 nicht aus diesem Forum kommt (Editing ist hier unser Modding Bereich, hier entstehen Techniken, Modelle, Texturen, ...)

    Thread zu "new Alternative Balancing"
    https://forum.worldofplayers.de/foru...alacing/page80

  12. Beiträge anzeigen #12 Zitieren
    Union - Testphase Avatar von Niko5511
    Registriert seit
    Jan 2018
    Beiträge
    2.570
     
    Niko5511 ist offline
    Verbessertes Irrlicht:
    https://rpgrussia.com/threads/union-...llowisp.28312/
    kann hier runtergeladen werden fuer Union. Muesst nur in der ini die Werte einstellen und die hotkeys+uebersetzen wenn wer was spezielles will. Suchradius, was genau sammeln usw kann beigebracht werden.

    @Papa
    shift+k oder shift+h um freundliche ziele anvisieren zu können

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