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

 

Seite 1 von 2 12 Letzte »
Ergebnis 1 bis 20 von 24
  1. Beiträge anzeigen #1 Zitieren
    Kämpfer
    Registriert seit
    Feb 2016
    Ort
    Dresden
    Beiträge
    349
     
    gladi1994 ist offline

    Entfernung NPC - Freepoint irgendwie messbar?

    Hallo zusammen,

    bin gestern Abend auf ein neues kleines Problem gestoßen und zwar müsste ich die Entfernung zwischen NPCs (in meinem Fall der Held) und Freepoints (im Test der Freepoint, an dem ein bestimmter Waran in der Startup gespawnt wird) messen. Es gibt leider nur einen Befehl, um die Entfernung zwischen NPCs und Waypoints herauszubekommen, dieser funktioniert leider nicht für Freepoints, das hab ich schon in größter Hoffnung versucht...

    Mein Ansatz, dies zu umgehen, war nun in etwa so:

    In der Startup:
    Code:
    Wld_InsertNpc(waran_Test,"FP_ROAM_XARDAS_SECRET_08");
        var string WP_Test;
        WP_Test = Npc_GetNearestWP(waran_Test);

    In einer anderen Datei:
    Code:
    if(Npc_GetDistToWP(hero,WP_Test) > 5000)
        {
            PrintScreen("Distanz > 5000",-1,-1,FONT_Screen,3);
        } else {
            PrintScreen("Distanz < 5000",-1,-1,FONT_Screen,3);
        };

    Das funktioniert leider nicht, und das wäre wohl auch nicht sehr schön. Denn dafür müsste ich in der Gothic.src die Datei mit dem letzteren Code nach der Startup parsen lassen, was ich nicht schön finde. Außerdem würde dadurch nicht die reale Entfernung zwischen NPC und Freepoint gemessen, sondern nur die zwischen NPC und dem Waypoint, der dem Freepoint am nächsten ist.

    Gibts da irgendwie einen leichteren, schöneren Weg für mein Problem?

    Vielen Dank im Voraus,

    Gladi

  2. Beiträge anzeigen #2 Zitieren
    Knight Avatar von Draxes
    Registriert seit
    Aug 2007
    Ort
    Mainz
    Beiträge
    1.920
     
    Draxes ist offline
    Zitat Zitat von gladi1994 Beitrag anzeigen
    Hallo zusammen,

    bin gestern Abend auf ein neues kleines Problem gestoßen und zwar müsste ich die Entfernung zwischen NPCs (in meinem Fall der Held) und Freepoints (im Test der Freepoint, an dem ein bestimmter Waran in der Startup gespawnt wird) messen. Es gibt leider nur einen Befehl, um die Entfernung zwischen NPCs und Waypoints herauszubekommen, dieser funktioniert leider nicht für Freepoints, das hab ich schon in größter Hoffnung versucht...

    Mein Ansatz, dies zu umgehen, war nun in etwa so:

    In der Startup:
    Code:
    Wld_InsertNpc(waran_Test,"FP_ROAM_XARDAS_SECRET_08");
        var string WP_Test;
        WP_Test = Npc_GetNearestWP(waran_Test);

    In einer anderen Datei:
    Code:
    if(Npc_GetDistToWP(hero,WP_Test) > 5000)
        {
            PrintScreen("Distanz > 5000",-1,-1,FONT_Screen,3);
        } else {
            PrintScreen("Distanz < 5000",-1,-1,FONT_Screen,3);
        };

    Das funktioniert leider nicht, und das wäre wohl auch nicht sehr schön. Denn dafür müsste ich in der Gothic.src die Datei mit dem letzteren Code nach der Startup parsen lassen, was ich nicht schön finde. Außerdem würde dadurch nicht die reale Entfernung zwischen NPC und Freepoint gemessen, sondern nur die zwischen NPC und dem Waypoint, der dem Freepoint am nächsten ist.

    Gibts da irgendwie einen leichteren, schöneren Weg für mein Problem?

    Vielen Dank im Voraus,

    Gladi
    Was ist denn das eigentliche Problem? Du willst ja mit der Entfernung von hero zu FP irgendetwas anstellen. Vielleicht lässt sich das ja noch auf einem anderen Weg lösen, als die Distanz von hero zu FP rauszufinden? Am besten beschreibst du mal, was dein Ziel ist.

    Ansonsten sollte es möglich sein (nicht getestet!), sich den FP als Vob zu suchen und dann über Npc_GetDistToNPC() die Distanz abzufragen:

    Code:
    	var int vobPtr;
    	vobPtr = MEM_SearchVobByName("FP_ROAM_XARDAS_SECRET_08");
    	
    	if(vobPtr) {
    		var zCVob vob;
    		vob = _^(vobPtr);
    
    		if(Npc_GetDistToNPC (hero, vob) <= 1000) {
    			print("Jap. Hat geklappt.");
    		};
    	};

  3. Beiträge anzeigen #3 Zitieren
    Kämpfer
    Registriert seit
    Feb 2016
    Ort
    Dresden
    Beiträge
    349
     
    gladi1994 ist offline
    Vielen Dank für den Vorschlag!

    Zuerst das Wieso: Ich möchte das Respawnsystem verbessern, die Respawnfunktion soll nicht mehr nur beim Schlafen aufgerufen werden, sondern auch einmal täglich durch die B_RefreshArmor, welche jeden Tag um 0 Uhr einmal aufgerufen wird. Damit aber keine Monster direkt neben dem Helden respawnt werden, möchte ich dies durch die Distanz zu den jeweiligen Waypoints / Freepoints abfangen. Daher meine Frage.

    Habe es jetzt, wie von dir vorgeschlagen, im Testskript ausprobiert:

    Code:
    if(Npc_IsDead(waran_Test))
        {
            var int vobPtr;
            vobPtr = MEM_SearchVobByName("FP_ROAM_XARRDAS_SECRET_08");
            
            if(vobPtr) 
            {
                var zCVob vob;
                vob = _^(vobPtr);
            
                if(Npc_GetDistToNPC (hero, vob) > 5000) 
                {
                    print("Respawn - Distanz > 5000");
                    Wld_InsertNpc(waran_Test,"FP_ROAM_XARRDAS_SECRET_08");
                } else {
                    print("kein Respawn - Distanz < 5000");
                };
            };
        };

    Das funktioniert leider nicht korrekt, der Waran wird auch respawnt, wenn ich direkt neben ihm stehe.

  4. Beiträge anzeigen #4 Zitieren
    Ritter Avatar von Kirides
    Registriert seit
    Jul 2009
    Ort
    Norddeutschland
    Beiträge
    1.781
     
    Kirides ist offline
    Zitat Zitat von gladi1994 Beitrag anzeigen
    Vielen Dank für den Vorschlag!
    ...


    Das funktioniert leider nicht korrekt, der Waran wird auch respawnt, wenn ich direkt neben ihm stehe.
    Wenn ich könnte, würde ich dir ja eine Funktion schreiben welche direkt das hier aufrufen würde.
    Leider komme ich nicht auf den Rückgabewert klar... bekomme jedesmal werte um den dreh 1189086201 zurück (test mit hero und vob NONE_100_Xardas) mit meinen bescheidenen Ikarus und Engine kenntnissen.

    Irgendwas wird wohl an meinen Call_xxx aufrufen nicht stimmen

    Vielleicht meldet sich ja wer, der da klüger ist als ich

    Code:
    .text:0061B970         ; float __thiscall zCVob::GetDistanceToVobApprox(zCVob *this, struct zCVob *)
    Geändert von Kirides (20.07.2020 um 17:12 Uhr)

  5. Beiträge anzeigen #5 Zitieren
    Kämpfer
    Registriert seit
    Feb 2016
    Ort
    Dresden
    Beiträge
    349
     
    gladi1994 ist offline
    Puuh, ich hab leider keine Ahnung, was du da gemacht hast, aber vielen Dank für deine Hilfe! Auch, dass du mir gern eine Funktion dafür geschrieben hättest, weiß ich wirklich sehr zu schätzen.

    Es ist immer wieder toll, zu sehen, wie einem - selbst nach fast 20 Jahren - immer noch so schnell und hilfsbereit geholfen wird!
    Ich hoffe natürlich trotzdem noch, dass es dafür irgendeine Lösung gibt.


    Beste Grüße, Gladi

  6. Homepage besuchen Beiträge anzeigen #6 Zitieren
    General Avatar von Dada
    Registriert seit
    Jan 2007
    Ort
    Krefeld
    Beiträge
    3.729
     
    Dada ist offline
    Zitat Zitat von Kirides Beitrag anzeigen
    Wenn ich könnte, würde ich dir ja eine Funktion schreiben welche direkt das hier aufrufen würde.
    Leider komme ich nicht auf den Rückgabewert klar... bekomme jedesmal werte um den dreh 1189086201 zurück (test mit hero und vob NONE_100_Xardas) mit meinen bescheidenen Ikarus und Engine kenntnissen.

    Irgendwas wird wohl an meinen Call_xxx aufrufen nicht stimmen

    Vielleicht meldet sich ja wer, der da klüger ist als ich

    Code:
    .text:0061B970         ; float __thiscall zCVob::GetDistanceToVobApprox(zCVob *this, struct zCVob *)
    Könnte es daran liegen, dass der Call einen Float zurückgibt? Bedenkst du die Umrechnung?

  7. Beiträge anzeigen #7 Zitieren
    Dea
    Registriert seit
    Jul 2007
    Beiträge
    10.447
     
    Lehona ist offline
    Zitat Zitat von Dada Beitrag anzeigen
    Könnte es daran liegen, dass der Call einen Float zurückgibt? Bedenkst du die Umrechnung?
    Daran wird es liegen. Floats müssen bei Engine-Calls gesondert behandelt werden (CALL_RetValIsFloat oder so) und außerdem bekommst du dann so einen Integer-Float (Paradox, I know), d.h. du darfst nur mit den Funktionen aus dem Float-Paket rechnen. Am einfachsten kannst du roundf(float) aufrufen, um einen (gerundeten) Integer zu bekommen. Den kannst du dann auch einfach printen.

    Im Zweifelsfall kannst du ja einfach mal deinen Code zeigen.

  8. Beiträge anzeigen #8 Zitieren
    Ritter Avatar von Kirides
    Registriert seit
    Jul 2009
    Ort
    Norddeutschland
    Beiträge
    1.781
     
    Kirides ist offline
    Zitat Zitat von Lehona Beitrag anzeigen
    Daran wird es liegen. Floats müssen bei Engine-Calls gesondert behandelt werden (CALL_RetValIsFloat oder so) und außerdem bekommst du dann so einen Integer-Float (Paradox, I know), d.h. du darfst nur mit den Funktionen aus dem Float-Paket rechnen. Am einfachsten kannst du roundf(float) aufrufen, um einen (gerundeten) Integer zu bekommen. Den kannst du dann auch einfach printen.

    Im Zweifelsfall kannst du ja einfach mal deinen Code zeigen.
    An meinem Float lags nicht, sondern daran das ich die Vob-Ptr nicht korrekt übergeben habe, habe direkt _@(c_npcInst) verwendet, nachdem ich wie in FreeAim\rangedAiming.d erst eine var int npcPtr = _@(c_npcInst); und dann diese als Call_Thiscall(_@(npcPtr),...) übergeben habe hats geklappt.

    Code:
    /*
    * Gibt die Approximation der Entfernung des npc zu dem toVob zurück.
    *
    * Beispielaufruf:
    *    var zCVob xard; xard = Hlp_GetNpc(NONE_100_Xardas);
    *    var int dist; dist = Npc_GetDistToVob(hero, xard);
    */
    func int Npc_GetDistToVob(var C_NPC npc, var zCVob toVob) {
        const int zCVob__GetDistanceToVob = 6404368; // 0061B910
        const int zCVob__GetDistanceToVobApprox = 6404464; // 0x00061B970
        
        var int npcPtr; npcPtr = _@(npc);
        var int toPtr; toPtr = _@(toVob);
    
        const int call = 0;
        if (CALL_Begin(call)) {
            CALL_RetValIsFloat();
            CALL_PtrParam(_@(toPtr));
            CALL_PutRetValTo(_@(flt));
            CALL__thiscall(_@(npcPtr), zCVob__GetDistanceToVobApprox);
    
            call = CALL_End();
        };
    
        var int flt; flt = roundf(+flt);
        return +flt;
    };
    Geändert von Kirides (20.07.2020 um 20:05 Uhr)

  9. Beiträge anzeigen #9 Zitieren
    Kämpfer
    Registriert seit
    Feb 2016
    Ort
    Dresden
    Beiträge
    349
     
    gladi1994 ist offline
    Wow, vielen Dank!

    Das kann ich jetzt so beispielsweise in meine Externals.d übernehmen und dann die Funktion Npc_GetDistToVob so nutzen?

    Vielen, vielen Dank für deine Mühen!

  10. Beiträge anzeigen #10 Zitieren
    Ritter Avatar von Kirides
    Registriert seit
    Jul 2009
    Ort
    Norddeutschland
    Beiträge
    1.781
     
    Kirides ist offline
    Zitat Zitat von gladi1994 Beitrag anzeigen
    Wow, vielen Dank!

    Das kann ich jetzt so beispielsweise in meine Externals.d übernehmen und dann die Funktion Npc_GetDistToVob so nutzen?

    Vielen, vielen Dank für deine Mühen!
    Soweit ich das weiß ist die Externals.d eigentlich nicht in der Gothic.src drin, weil dort ja nur "dokumentation" ist.

    die "Npc_GetDistToVob.d" (einfach in eigene Datei abspeichern) müsste irgendwo nach Ikarus/LeGo in der Gothic.src stehen. Danach könntest du die Funktion so benutzen, wie es in dem Kommentar über der Funktion steht (im Quellcode) also mit Npc_GetDistanceToVob(hero, vob) - vob ist dabei eine zCVob Instanz.

    Falls du noch kein Ikarus verwenden solltest (irgendwo ein Mem_InitAll() beim Story.d -> Init_Global() z.B. ) müsstest du das noch entsprechend initialisieren

  11. Beiträge anzeigen #11 Zitieren
    Kämpfer
    Registriert seit
    Feb 2016
    Ort
    Dresden
    Beiträge
    349
     
    gladi1994 ist offline
    Zitat Zitat von Kirides Beitrag anzeigen
    Soweit ich das weiß ist die Externals.d eigentlich nicht in der Gothic.src drin, weil dort ja nur "dokumentation" ist.

    die "Npc_GetDistToVob.d" (einfach in eigene Datei abspeichern) müsste irgendwo nach Ikarus/LeGo in der Gothic.src stehen. Danach könntest du die Funktion so benutzen, wie es in dem Kommentar über der Funktion steht (im Quellcode) also mit Npc_GetDistanceToVob(hero, vob) - vob ist dabei eine zCVob Instanz.

    Falls du noch kein Ikarus verwenden solltest (irgendwo ein Mem_InitAll() beim Story.d -> Init_Global() z.B. ) müsstest du das noch entsprechend initialisieren
    Oh, stimmt, hab ich übersehen. Alles klar, dann weiß ich, was jetzt zu tun und zu testen ist!

    Vielen Dank für deine Mühen!

  12. Homepage besuchen Beiträge anzeigen #12 Zitieren
    General Avatar von Dada
    Registriert seit
    Jan 2007
    Ort
    Krefeld
    Beiträge
    3.729
     
    Dada ist offline
    Wäre vielleicht auch etwas für den ScriptBin.
    Könnte für den einen oder anderen nützlich sein

  13. Beiträge anzeigen #13 Zitieren
    Ritter Avatar von Kirides
    Registriert seit
    Jul 2009
    Ort
    Norddeutschland
    Beiträge
    1.781
     
    Kirides ist offline
    Zitat Zitat von Dada Beitrag anzeigen
    Wäre vielleicht auch etwas für den ScriptBin.
    Könnte für den einen oder anderen nützlich sein
    habs mal dort hinterlegt

  14. Beiträge anzeigen #14 Zitieren
    Kämpfer
    Registriert seit
    Feb 2016
    Ort
    Dresden
    Beiträge
    349
     
    gladi1994 ist offline
    Zitat Zitat von Kirides Beitrag anzeigen
    Code:
    /*
    * Beispielaufruf:
    *    var zCVob xard; xard = Hlp_GetNpc(NONE_100_Xardas);
    *    var int dist; dist = Npc_GetDistToVob(hero, xard);
    */
    Ganz kurze Frage noch hierzu, wahrscheinlich bin ich gerade einfach blind:
    Wie bekäme ich in deinem Beispiel in die zCVob -Variable "xard" einen Freepoint gespeichert?
    Du nimmst dort ja die NPC-Instanz "NONE_100_Xardas" durch Hlp_GetNPC.

  15. Homepage besuchen Beiträge anzeigen #15 Zitieren
    Team Velen
    Registriert seit
    Aug 2015
    Beiträge
    952
     
    Bloodfly91 ist offline
    Zitat Zitat von gladi1994 Beitrag anzeigen
    Ganz kurze Frage noch hierzu, wahrscheinlich bin ich gerade einfach blind:
    Wie bekäme ich in deinem Beispiel in die zCVob -Variable "xard" einen Freepoint gespeichert?
    Du nimmst dort ja die NPC-Instanz "NONE_100_Xardas" durch Hlp_GetNPC.
    Das Hlp_GetNpc musst du durch folgenden Code ersetzen:
    Code:
    MEM_PtrToInst(MEM_SearchVobByName("FREEPOINT_NAME"));

  16. Beiträge anzeigen #16 Zitieren
    Kämpfer
    Registriert seit
    Feb 2016
    Ort
    Dresden
    Beiträge
    349
     
    gladi1994 ist offline
    Dankeschön, funktioniert nun super!

  17. Beiträge anzeigen #17 Zitieren
    Kämpfer
    Registriert seit
    Feb 2016
    Ort
    Dresden
    Beiträge
    349
     
    gladi1994 ist offline
    Sorry für Doppelpost, aber ich habe ein Problem. Keine Ahnung, wieso das nun plötzlich auftaucht.

    Und zwar stürzt das Spiel jetzt mit einer Access Violation ab, wenn die Funktion "Npc_GetDistToVob" ausgeführt wird.
    Ich weiß nicht, wo das plötzlich herkommt, denn es hatte ja kurzzeitig funktioniert und Änderungen habe ich danach daran nicht mehr vorgenommen..

    Hier der Code dazu:
    Code:
    func void b_monster_respawnen()
    {
        if(Npc_IsDead(swamprat_011))
        {
            var zCVob FP_swamprat_011;
            FP_swamprat_011 = MEM_PtrToInst(MEM_SearchVobByName("FP_ROAM_BF_NEST_26"));
            if((Npc_GetDistToVob(hero,FP_swamprat_011)) > 5000)
            {
                rrandom = Hlp_Random(10);
                if(rrandom <= 5)
                {
                    Wld_InsertNpc(swamprat_011,"FP_ROAM_BF_NEST_26");
                };
            };
        };
    };

    Code:
    /*
    * Gibt die Approximation der Entfernung des npc zu dem toVob zurück.
    *
    * Beispielaufruf:
    *    var zCVob xard; xard = Hlp_GetNpc(NONE_100_Xardas);
    *    var int dist; dist = Npc_GetDistToVob(hero, xard);
    */
    func int Npc_GetDistToVob(var C_NPC npc, var zCVob toVob) {
        // für den Fall das man mehr Genauigkeit möchte, kann man diese Adressen unten im CALL_Thiscall austauschen. Sollte nicht nötig sein!
        const int zCVob__GetDistanceToVob = 6404368; // 0x0061B910
        const int zCVob__GetDistanceToVobApprox = 6404464; // 0x0061B970
        
        var int npcPtr; npcPtr = _@(npc);
        var int toPtr; toPtr = _@(toVob);
    
        const int call = 0;
        if (CALL_Begin(call)) {
            CALL_RetValIsFloat();
            CALL_PtrParam(_@(toPtr));
            CALL_PutRetValTo(_@(flt));
            CALL__thiscall(_@(npcPtr), zCVob__GetDistanceToVobApprox);
    
            call = CALL_End();
        };
    
        var int flt; flt = roundf(+flt);
        return +flt;
    };

    Und hier die Access Violation:
    [Bild: AccessViolation.png]

    in Textform:
    Spoiler:(zum lesen bitte Text markieren)
    ======================================= UNHANDLED EXCEPTION OCCURED ======================================================
    ======================================= CRASH INFOS: =====================================================================
    Gothic II - 2.6 (fix), Parser Version: 50
    User: sensm, CPUType: 586, Mem: 2048 MB total, 2048 MB free
    Camera: Pos(6883.35498/530.944519/-3953.66089), At(-0.226755887/-0.173019975/0.958460152)
    Startup Options:
    =============================================== CALLSTACK : ==============================================================
    0023:0061B977 (0x00AB4108 0x00000000 0x00AB40C0 0x00001574) Gothic2.exe, zCVob:etDistanceToVobApprox()+7 byte(s), P:\dev\g2addon\release\ZenGin\_dieter\zVobMove.cpp, line 596+4 byte(s)
    0023:00792568 (0x00001361 0x00AB4108 0x00000000 0x00AB40C0) Gothic2.exe, zCParser:oStack()+3080 byte(s), P:\dev\g2addon\release\ZenGin\_ulf\zParser.cpp, line 1433
    0023:00792504 (0x0000155A 0x00AB4108 0x00000000 0x00AB40C0) Gothic2.exe, zCParser:oStack()+2980 byte(s), P:\dev\g2addon\release\ZenGin\_ulf\zParser.cpp, line 1415
    0023:00792504 (0x0000172D 0x00AB4108 0x00000000 0x00AB40C0) Gothic2.exe, zCParser:oStack()+2980 byte(s), P:\dev\g2addon\release\ZenGin\_ulf\zParser.cpp, line 1415
    0023:00792504 (0x0002FA86 0x1EF857F4 0x00AB4118 0x00AB40C0) Gothic2.exe, zCParser:oStack()+2980 byte(s), P:\dev\g2addon\release\ZenGin\_ulf\zParser.cpp, line 1415
    0023:00792504 (0x00086DD5 0x008B8B7B 0x00AB40C0 0xFFFFFFFF) Gothic2.exe, zCParser:oStack()+2980 byte(s), P:\dev\g2addon\release\ZenGin\_ulf\zParser.cpp, line 1415
    0023:00792CBF (0x00AB40C0 0x00005172 0x31DFE240 0x007422B0) Gothic2.exe, zCParser::CallFunc()+719 byte(s), P:\dev\g2addon\release\ZenGin\_ulf\zParser.cpp, line 1551
    0023:007929E7 (0x0135FB90 0x31DFE240 0x0AB03300 0x0AB03300) Gothic2.exe, zCParser::CallFunc()+23 byte(s), P:\dev\g2addon\release\ZenGin\_ulf\zParser.cpp, line 1488+23 byte(s)
    0023:007422B0 (0x0AB03300 0x00000000 0x00000000 0x00780DB5) Gothic2.exe, oCNpc::RefreshNpc()+416 byte(s), P:\dev\g2addon\release\Gothic\_ulf\oNpc.cpp, line 8104+75 byte(s)
    0023:006CB62B (0x006C87A5 0x0135FC90 0x00000000 0x0135FC80) Gothic2.exe, oCGame::RefreshNpcs()+59 byte(s), P:\dev\g2addon\release\Gothic\_ulf\oGame.cpp, line 3430
    0023:00780DB5 (0x0135FC90 0x00000000 0x0135FC80 0x00000000) Gothic2.exe, oCWorldTimer::Timer()+53 byte(s), P:\dev\g2addon\release\Gothic\_ulf\oWorld.cpp, line 1011
    0023:006C87A5 (0x0082F0EC 0x00000001 0x00130848 0x0AB03300) Gothic2.exe, oCGame::Render()+261 byte(s), P:\dev\g2addon\release\Gothic\_ulf\oGame.cpp, line 2648
    0023:0078188B (0x0000002C 0x00000005 0x000007CA 0x00000000) Gothic2.exe, MainProg()+75 byte(s), P:\dev\g2addon\release\Gothic\_ulf\Phoenix.cpp, line 111
    0023:00503270 (0x00400000 0x00000000 0x015236E8 0x00000001) Gothic2.exe, HandledWinMain()+928 byte(s), P:\dev\g2addon\release\ZenGin\_carsten\zWin32.cpp, line 1169
    0023:00502DFD (0x0135FEB8 0x00000000 0x015236E8 0x00000001) Gothic2.exe, WinMain()+141 byte(s), P:\dev\g2addon\release\ZenGin\_carsten\zWin32.cpp, line 1054+17 byte(s)
    0023:007D43F8 (0x00000000 0x00000000 0x00000000 0x00000000) Gothic2.exe, WinMainCRTStartup()+224 byte(s)



    Wenn ich alle Schnipsel mit der Funktion "Npc_GetDistToVob" rausnehme, bekomme ich keinen Absturz mehr beim Monsterrespawn. Ich bin deshalb so verwirrt, weil es ja schon einmal geklappt hat und ich damit ausgiebig getestet hatte.

    Kann mir jemand evtl. sagen, was da das Problem ist?

    Vielen Dank schon mal!

  18. Beiträge anzeigen #18 Zitieren
    Ritter Avatar von Kirides
    Registriert seit
    Jul 2009
    Ort
    Norddeutschland
    Beiträge
    1.781
     
    Kirides ist offline
    Zitat Zitat von gladi1994 Beitrag anzeigen
    ...
    ...

    Wenn ich alle Schnipsel mit der Funktion "Npc_GetDistToVob" rausnehme, bekomme ich keinen Absturz mehr beim Monsterrespawn. Ich bin deshalb so verwirrt, weil es ja schon einmal geklappt hat und ich damit ausgiebig getestet hatte.

    Kann mir jemand evtl. sagen, was da das Problem ist?

    Vielen Dank schon mal!
    Bist du sicher das der Vob/Freepoint auch so existiert? Nicht das du dich da vertippt hast, oder den irgendwann mal umbenannt hast.

    Was gibt dir "MEM_SearchVobByName("FP_ROAM_BF_NEST_26")" zurück?

    Nach möglichkeit solltest du das ergebnis erstmal prüfen. Ebenfalls kann manchmal "hero" kein gültiger NPC sein (Ladebildschirm z.B.)

    Code:
    func void xxxxx() {
        if (Hlp_IsValidNpc(hero) {
            var int vobPtr; vobPtr = MEM_SearchVobByName("FP_ROAM_BF_NEST_26");
            if (vobPtr) {
                // Gefunden ...
    
            };
        };
    };

  19. Beiträge anzeigen #19 Zitieren
    Kämpfer
    Registriert seit
    Feb 2016
    Ort
    Dresden
    Beiträge
    349
     
    gladi1994 ist offline
    Die Freepoints müssten passen, mit dem alten Respawnsystem hat alles funktioniert. Geändert hat sich zum neuen Respawnsystem lediglich die Prüfung der Distanz zum Hero. Die Änderungen dafür hab ich per RegEx automatisch machen lassen, deshalb hat sich an den Freepoint-Bezeichnungen nichts geändert.

    Zitat Zitat von Kirides Beitrag anzeigen
    Was gibt dir "MEM_SearchVobByName("FP_ROAM_BF_NEST_26")" zurück?

    Nach möglichkeit solltest du das ergebnis erstmal prüfen. Ebenfalls kann manchmal "hero" kein gültiger NPC sein (Ladebildschirm z.B.)
    Wie kann ich das prüfen?

    Vielen Dank für deine (wie immer) so schnelle Antwort!

    Edit: Oh, hab deinen Code jetzt erst gesehen, sorry. Ich probiers mal.
    Geändert von gladi1994 (02.08.2020 um 14:26 Uhr)

  20. Beiträge anzeigen #20 Zitieren
    Kämpfer
    Registriert seit
    Feb 2016
    Ort
    Dresden
    Beiträge
    349
     
    gladi1994 ist offline
    Hab's mal so probiert:
    Code:
    func void b_monster_respawnen() {
        if (Hlp_IsValidNpc(hero)) {
            var int vobPtr; vobPtr = MEM_SearchVobByName("FP_ROAM_BF_NEST_26");
            if (vobPtr) {
                PrintScreen("Gefunden",-1,0,FONT_Screen,3);
    
            } else {
                PrintScreen("Nicht gefunden",-1,0,FONT_Screen,3);
            };
        };
    };
    Gibt mir "Nicht gefunden" aus, also gibts anscheinend ein Problem mit MEM_SearchVobByName? Der FP existiert definitiv, hab im Spacer nachgeschaut. Komisch..

Seite 1 von 2 12 Letzte »

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