Register for your free account! | Forgot your password?

You last visited: Today at 20:57

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[d2nt] Enigmabug

Discussion on [d2nt] Enigmabug within the Diablo 2 Programming forum part of the Diablo 2 category.

Reply
 
Old   #1
 
speCt0R's Avatar
 
elite*gold: 0
Join Date: Dec 2010
Posts: 450
Received Thanks: 63
[d2nt] Enigmabug

der enigmabug ist lästig und führt bei ungünstigen überschneidungen bei den keychanges oft zum rds.
die lösung ist praktisch genauso wie bei dem merc aurabug der in 1.13 gefixed wurde.
man muss die eni einfach resetten.

muddy hat ein solches script in seinem bot integriert jedoch ist es nicht kompatibel mit dem bluebird, public usw. er hat aber angeboten eine lösung zu erarbeiten die mit anderen d2nt mods kompatibel ist.

so muddy, dann lass uns mal die lösung erarbeiten, ich hab meinen teil erledigt
speCt0R is offline  
Old 02/27/2011, 16:57   #2
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Wird gemacht, da wir uns hier in der Programming Sektion befinden werde ich auch etwas auf die Funktionsweise eingehen, anstatt einfach nur eine Anleitung nach dem Schema "Kopiere a, Füge es bei x ein, Kopiere dann b und füge es bei y ein" zu geben.

Zunächst mal braucht man eine Funktion zum Resetten.
Diese muss eigentlich nur folgendes leisten:

  • Überprüfen, ob der Char überhaupt eine Enigma anhat (ansonsten wäre das ganze schließlich witzlos)
  • Das Inventar öffnen, dann auf die Rüstung klicken und danach, wenn sich ein Item auf dem Cursor befindet, nochmal auf dieselbe Position klicken
Meine derzeitige Funktion dazu habe ich ja schon genannt, allerdings muss man sie etwas auf die Grundbedingungen zurückführen, damit sie mit allen Versionen kompatibel ist.
Das heisst konkret: übersichtliche Konstanten raus, übersichtliche Funktionen raus.
Aus stylistischer Sicht also eine einzige Katastrophe, aber was tut man nicht alles, damit es läuft.

Macht man das, könnte eine solche Funktion in etwa so aussehen:
Code:
function MWT_ResetMyArmor()
{
    var i, n;
    var _items;
    
    _items = me.getItems();

    if(!_items)
        return false;

    for(var i = 0; i < _items.length; i++)
    {
        if(_item[i].mode == 1 && _item[i].itemloc == 3)
        {
            if((_items[i].itemflag&0x4000000) && _items[i].itemprefix == 0x503B)
            {
                SetUIState(0x1, true);

                for(n = 0; n < 80; n++)
                {
                    if(n % 40 == 0)
                        me.ClickItem(3);

                    NTC_Delay(100);

                    if(me.itemoncursor)
                    {
                        NTC_PingDelay(200);
                        break;
                    }
                }

                if(n >= 80)
                {
                    me.Cancel(1);
                    break;
                }
                
                for(n = 0; n < 120; n++)
                {
                    if(n % 40 == 0)
                        me.ClickItem(3);
                    
                    NTC_Delay(100);

                    if(!me.itemoncursor)
                        break;
                }

                me.Cancel(1);

                if(n < 120)
                    return true;
            }
            
            break;
        }
    }

    return false;
}
Wie man vielleicht sieht entspricht _items einem Array welches sämtliche auf dem Char befindlichen Items enthält, genauer gesagt, deren units.

Dieses Array wird nun durchlaufen, mit dem Ziel, unsere Rüstung zu finden.
Die Position dieser entspricht einer itemloc von 3, sofern mode gleich 1 ist.
Die Eigenschaft mode ist für alle angelegten Items immer 1, für ungenutzte Items (Inventar, Stash...) immer 0 und für Tränke im Gürtel 2.

Wurde die Rüstung nun enddeckt, wird überprüft überprüft ob die Eigenschaft itemflag das Bitmuster für Runenwörter (0x4000000) enthält, und ob die Eigenschaft itemprefix der des Runenworts Enigma (0x503B) entspricht.

Ist das der Fall, passiert genau das, was die die Funktion Leisten soll:
Das Wiederanlegen der Rüstung. Man sollte natürlich darauf achten, dass dies auch Möglich ist, ansonsten kann die Rüstung nicht wieder angelegt werden und geht möglicherweise verloren.

Achja, wie man oben am Bezeichner der Funktion erkennt, wird die Funktion in der NTTown library implementiert.

Jetzt braucht man diese Funktion eigentlich nurnoch aufzurufen.
Das soll immer dann geschehen, wenn der sich der Char bewegen soll, aber aus irgendeinem Grund Teleport fehlt.
Die Funktion dazu heisst NTM_Move() und ist, wie der Name schon vermuten lässt, in der NTMove library definiert.

Hier mal ein Auszug daraus, mit eingefügtem Aufruf der oben definierten Funktion:
Code:
if(MWConfig_ResetArmor && NTC_GetSkillLevel(54) < 1)
    MWT_ResetMyArmor();
        
if(NTC_InTown() || NTC_GetSkillLevel(54) < 1)
{
    _teleport = false;
}
else
    _teleport = true;
Die Funktion wird hier aufgerufen, wenn die Config Variable MWConfig_ResetArmor dem Wert true hat und der Char nicht über Teleport verfügt.

Die Variable müsste man natürlich noch in der NTConfig.ntl deklarieren und dann in der jeweiligen Charconfig mit dem gewünschten Wert initialisieren. Man kann sie aber auch einfach weglassen, sodass grundsätzlich die Rüstung bei fehlendem Teleport neu angelegt wird.
Sofern die Rüstung denn eine Enigma ist, ansonsten würde gar nichts passieren.

Ich hoffe das reicht als kleine Anleitung, ansonsten nachfragen.

Übrigens habe ich die Absicherung gegen den Verlust der Eni, wie sie etwa in meiner Version vorhanden ist, weggelassen, da das den Aufwand größer machen würde.
Der Verlust der Eni ist ohnehin unwahrscheinlich, sofern denn genug Stärke zum Anlegen vorhanden ist, abgesehen davon kostet eine Eni ja mittlerweile auch nicht mehr die Welt.

Lg
Muddy
Muddy Waters is offline  
Thanks
2 Users
Old 03/01/2011, 16:03   #3
 
speCt0R's Avatar
 
elite*gold: 0
Join Date: Dec 2010
Posts: 450
Received Thanks: 63
das schaut ja schon recht kompliziert aus.
ich hatte mir das script simpler vorgestellt ohne das erstmal geschaut wird eine eni vorhanden ist usw.
deine lösung ist jedenfalls super, das einzige worauf es noch zu achten gilt ist die min vorhandene stärke von 103 damit die eni beim reset auch wieder angezogen werden kann.

ich würde dir gern helfen bei der anpassung.

die instalation ist mir auch nicht 100% klar.

-> MWConfig_ResetArmor - ntconfig.ntl
-> MWConfig_ResetArmor = True; - char cfg


-> function MWT_ResetMyArmor()
{..... - botgame.ntj ?!?!


mfg
speCt0R is offline  
Old 03/01/2011, 18:42   #4
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Quote:
Originally Posted by speCt0R View Post
das schaut ja schon recht kompliziert aus.
ich hatte mir das script simpler vorgestellt ohne das erstmal geschaut wird eine eni vorhanden ist usw.
deine lösung ist jedenfalls super, das einzige worauf es noch zu achten gilt ist die min vorhandene stärke von 103 damit die eni beim reset auch wieder angezogen werden kann.

ich würde dir gern helfen bei der anpassung.

die instalation ist mir auch nicht 100% klar.

-> MWConfig_ResetArmor - ntconfig.ntl // Genau!
-> MWConfig_ResetArmor = True; - char cfg // Ja, aber true bitte klein schreiben, ansonsten wird es für einen Bezeichner einer Variable gehalten, welche aller Wahrscheinlichkeit nach nicht definiert ist.


-> function MWT_ResetMyArmor()
{..... - botgame.ntj ?!?! // Siehe unten


mfg
Die Implementierung der Funktion sollte in der NTTown.ntl erfolgen.

Darauf lässt auch schon der Name schließen, denn das Präfix einer Funktion sagt immer aus, in welcher der common libraries diese definiert ist - jedenfalls wenn der Entwickler nicht furchtbar schlampig ist, bei mir kannst du aber im Normalfall davon ausgehen, dass die Benennungen passen.
Auch wenn ich dreisterweise immer meine Initialen nutzte, statt dem üblichen NT, aber ob es jetzt NTT_ oder MTW_ heisst, beides verweist auf NTTown.ntl.

Prinzipiell ist es nicht so enorm wichtig, wo die Funktion definiert wird, es sollte nur vom Inhalt der Funktion halbwegs nachvollziehbar sein, viel wichtiger ist aber, dass der Name passt, damit man weiss, in welcher library man nach der Implementierung zu suchen hat.

Das mit der Stärker könnte man überprüfen, das würde dann aber vermutlich tatsächlich etwas komplizierter.

Lg
Muddy
Muddy Waters is offline  
Old 03/01/2011, 22:03   #5
 
speCt0R's Avatar
 
elite*gold: 0
Join Date: Dec 2010
Posts: 450
Received Thanks: 63
für mich ist das nicht so einfach, meine grundkentnisse reichen gerade mal aus um eine simple batch zu wurschteln. ich werde mich mal in ein paar sachen einlesen und etwas mehr grundverständniss zu bekommen.

ist dieses script denn nun schon kompatibel mit anderen d2nt versionen oder müssen die libs noch speziel angepasst werden? du sagtest etwas in der richtung im public bot thread.
speCt0R is offline  
Old 03/02/2011, 13:17   #6
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Ja, es kommen keinerlei Funktionen zum Einsatz, die D2NT von Haus aus nicht hat.

Sollte also allgemein kompatibel sein.

Lg
Muddy
Muddy Waters is offline  
Thanks
1 User
Old 03/04/2011, 13:19   #7
 
speCt0R's Avatar
 
elite*gold: 0
Join Date: Dec 2010
Posts: 450
Received Thanks: 63
Quote:
Originally Posted by Muddy_Waters View Post
Ja, es kommen keinerlei Funktionen zum Einsatz, die D2NT von Haus aus nicht hat.

Sollte also allgemein kompatibel sein.

Lg
Muddy
ich werds gleich einbauen und beobachten
danke dir
speCt0R is offline  
Old 03/09/2011, 23:43   #8
 
elite*gold: 0
Join Date: Mar 2011
Posts: 4
Received Thanks: 0
ähm sorry ich weiss nicht ob ich hier richtig bin um die Frage zu stellen:

Bei mir kommt immer ein enigma bug und der bot geht aus dem Spiel. Was kann ich dagegen tun? Hab schon ein paar Beiträge durchforstet, bin aber nicht schlauer geworden. Denn ich habe gar keine enigma..Kann ich dem bot nicht einfach das Laufen beibringen?

Den bot den ich habe ist der von bluebird, falls das hilfreich ist zu wissen.

Danke schon im Voraus für die Hilfe!

Mfg
s1234567 is offline  
Old 03/10/2011, 13:01   #9
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Quote:
Originally Posted by s1234567 View Post
ähm sorry ich weiss nicht ob ich hier richtig bin um die Frage zu stellen:

Bei mir kommt immer ein enigma bug und der bot geht aus dem Spiel. Was kann ich dagegen tun? Hab schon ein paar Beiträge durchforstet, bin aber nicht schlauer geworden. Denn ich habe gar keine enigma..Kann ich dem bot nicht einfach das Laufen beibringen?

Den bot den ich habe ist der von bluebird, falls das hilfreich ist zu wissen.

Danke schon im Voraus für die Hilfe!

Mfg
So ganz passt deine Frage hier nicht rein, aber natürlich begründe ich warum.

Die hier vorgestellte Funktion dient dazu, die getragene Rüstung an- und wieder abzulegen, falls dein Char eine Enigma trägt, aber trotzdem nicht über Teleport verfügt - mit anderen Worten, im Falle eines Enigma Bugs.

Soweit ich das in Erinnerung habe hat Blue eine simplere Lösung eingesetzt, die eigentlich keine Lösung ist, sondern nur dem Problem aus dem Weg geht.
Die sieht so aus: Verfügt dein Char nicht über Teleport, wird davon ausgegangen, dass es zum Enigma Bug gekommen ist. Daraufhin wird dann das Spiel verlassen.

Ob dein Char dabei überhaupt eine Enigma anhat, was natürlich die notwendige Bedingung für das Auftreten dieses Bugs ist, wird dabei nicht überprüft, darum halte ich seine Lösung für zu simpel und zu wenig durchdacht.

Aber selbst wenn du jetzt dafür Sorgen würdest, dass dein Char nichtmehr aufgrund eines vermeintlichen Enigma Bugs das Spiel verlässt, könnte er deshalb trotzdem nicht zu Fuß gehen.

Eigentlich ist das auch ganz anschaulich, wenn du dir vorstellst, was du machst, wenn du deinen Char von Hand steuerst.

Gehst du zu Fuß, dann erkennst du Hindernisse und umgehst diese einfach.

Letzteres kann D2NT nicht leisten, weil es keine Funktion gibt, die diese Umwege wirklich sauber berechnen kann.

Natürlich könnte man sowas schreiben, aber das wäre recht anspruchsvoll, da zum Einen eine Menge an Kollisionsabfragen durchgeführt werden müssen, zum Anderen der Pfad aber möglichst optimal (== möglichst kurz) verlaufen soll.
Solange solch eine Funktion nicht existiert, wird das mit dem Laufen nichts.

Falls du dich jetzt fragen solltest, warum das nicht geht, da der Char in der Stadt schließlich auch zu Fuß geht:

Ja, aber das liegt ganz einfach daran, dass es für die Städte endlich viele Variationen gibt, sodass sich ein Netz von Koordinaten erstellen lässt.
Die Pfade werden dann über diese Koordinaten gelegt, sodass immer sichergestellt ist, dass eine direkte Verbindung ohne Hindernisse besteht.

Soviel dazu, ich hoffe das ist verständlich.

Lg
Muddy
Muddy Waters is offline  
Old 03/10/2011, 16:34   #10
 
elite*gold: 0
Join Date: Mar 2011
Posts: 4
Received Thanks: 0
Danke für die ausführliche Erklärung!
das heisst also, dass ich enigma brauche oder eine Zauberin die ohnehin teleportieren kann?
s1234567 is offline  
Reply


Similar Threads Similar Threads
d2nt leech bot einstellen... d2nt config error..
07/09/2010 - Diablo 2 Programming - 2 Replies
hey mein bot zeigt mir die ganze zeit ein error und habe die einstellungen in der anleitung genauso... was tun? habe leader acc/ char name eingetragen. beide flistet. die eine datei aus baalleech rausgeholt und umbenannt und die // weg genommen habe beim manager auch auf d2nt leech eingestelln
D2NT Help?
06/01/2010 - Diablo 2 Programming - 1 Replies
Can anyone give me the item configuration to pick up gold, runes, and potions, please?:confused:
D2nt 3.0
03/31/2010 - Diablo 2 - 4 Replies
habe ne bllizzard srs mit merc mache immoment ohne probleme pindel andy mefi summoner und mausulemen was kann sie noch alles ? bitte posten und was habt ihr bei picket ausgesucht von den 3 bmöglichkeiten ???
D2NT - Modded D2NT
11/08/2009 - Diablo 2 - 9 Replies
Hey, wollte nach ner langen Pause mal wieder den Bot starten. Hatte damals den normalen D2NT, hat mir auch gut gefallen. Frage mich grad nur welchen ich mir jetzt laden soll- den D2NT oder den modded D2NT? Wo ist der Unterschied?
D2NT 1.7.2 und NTBot 3.6 , Modded D2NT 1.7.2 und NTBot 3.6 welcher ist besser?
05/23/2009 - Diablo 2 - 11 Replies
Modded D2NT 1.7.2 und NTBot 3.6 D2NT 1.7.2 und NTBot 3.6 kann mir jemand sagen welcher von denen besser ist? oder wo die unterschiede sind?



All times are GMT +2. The time now is 20:57.


Powered by vBulletin®
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2024 elitepvpers All Rights Reserved.