[Release] Muddy's D2NT

05/13/2013 17:34 postcowboy#6916
Not sure if any of you would find this helpful, but I have. In the past for resets i've come up with a clear bot for each of the first four waypoints in Act 1. When your character is still not capable of doing the latter portions of hell games and you still want to magic find, or level your character, these can also be invaluable.

Now I know what everyone will say, oh magic find in the first Act waypoints theres never anything there. Pish-Posh, there is. I've found Hoz's, mid runes, uniques and quite a few other high end items and runes simply by magic finding repeatedly the first four waypoints in Act 1. With the new reset about to hit, and high end gear being almost nothing at first, these should help and assist with at least some magic find in games.

So, how to install the four Clear bots into your Muddy's...

Go into your config file and add these four bots as part of your available runs.

//MWConfig_Script.push(["NTClearColdPlains.ntj", 10]);
//MWConfig_Script.push(["NTClearStonyField.ntj", 10]);
//MWConfig_Script.push(["NTClearDarkWood.ntj", 10]);
//MWConfig_Script.push(["NTClearBlackMarsh.ntj", 10]);

Once that is accomplished you will need to add into the "bots" file folder the four bots that will run off the available runs. (remember these here are commented out, you will need to remove the "//" in front of each of the runs you wish to have your character do)

Once you've unzipped the four clear bots, and placed them into the "bots" folder you should be ready to run.

[Only registered and activated users can see links. Click Here To Register...]

Now this will work in all difficulties. I sometimes use these clear bots when I'm upping runes in norm or NM as well. They tend to be useful when i'm on the hunt for chip/flawed gems in larger quantities. Hopefully someone else finds this useful with the new reset coming up.


Cowboy.
05/14/2013 05:07 using11#6917
Quote:
Originally Posted by using11 View Post
Besteht noch immer das Problem :(
soweit so gut, habe es nun hin bekommen, allerdings ist mir auf gefallen das nur pala geht?!

alle anderen chars fangen sofort an zu laggen und machen nichts mehr, wenn ich paladin use geht er 100% perfekt, was schwer ist am reset :D
05/19/2013 01:02 killer-mig#6918
hey leute, ich hab seit kurzem ein problem mit dem bot. der bot lief eine nacht ganz normal ohne errors etc und heute mittag kam beim spiel verlassen immer "unknown software exception". d2 ist auf englisch mit direct txt enabled und mit admin rechten :/ mit einem anderen d2nt bot funzt es (zB bluebird) aber der von muddy gefällt mir halt besser... weiß jemand eine lösung?
05/19/2013 14:42 Gazi61#6919
folgendes problem
d2nt scripts libs common ntitemparser.ntl

PHP Code:
/**
*    This file was modified by [Only registered and activated users can see links. Click Here To Register...]
*    Check the programming section for updates and further scripts
*    Last Update: 13:19 26.08.2011
*
*    New Keyword added: [MaxQuantity]
*    This Keyword must not be placed anywhere except the very beginning of a line in a nip file!
*    Any operator except '==' is invalid for [MaxQuantity]!
*    Example: [MaxQuantity] == 3 && [Name] = KeyOfDestruction
*/

/*

[Item-parser Syntax Information]

1. [Keyword] separates into two groups
   - [Property Keywords] : [Type], [Name], [Class], [Quality], [Flag], [Level], [Prefix], [Suffix]
   - [Stat Keywords] : [Number or Alias]

2. [Keyword] must be surrounded by '[' and ']'

3. [Property Keywords] must be placed first

4. Insert '#' symbol between [Property Keywords] and [Stat Keywords]

5. Use '+', '-', '*', '/', '(', ')', '&&', '||', '>', '>=', '<', '<=', '==', '!=' symbols for comparison

6. Use '//' symbol for comment

*/

Include("libs/common/NTItemAlias.ntl");

var 
_NTIP_CheckList = new Array();

function 
NTIP_OpenFile(filepath)
{
    var 
_nipfile;
    var 
_line;
    var 
_filename_lineCount_buffer;
    
    
_lineCount 0;
    
_nipfile FileOpen(filepath0);
    
_filename filepath.split("/")[filepath.split("/").length 1];

    if(!
_nipfile)
        return 
false;

    while(!
_nipfile.eof)
    {
        
_lineCount++;
        
_buffer _nipfile.ReadLine();
        
        try
        {
            
_line NTIP_ParseLineInt(_buffer);
        }
        catch(
e)
        {
            Print(
"ÿc1Wow, this one is REALLY nasty!");
            
_line = ["UNABLE TO""PARSE LINE!"];
        }
        
        if(
_line)
        {
            
_line.push("/" filepath.split("/")[filepath.split("/").length 2] + "/" _filename);
            
_line.push(_lineCount);
            
_line.push(_buffer);
            
_NTIP_CheckList.push(_line);
        }
    }

    
_nipfile.Close();

    return 
true;
}

function 
NTIP_CheckItem(itemcheckQuantitynipDebug)
{
    var 
i;
    var 
_identified;
    var 
_result 0;
    var 
_quantity_quantityString_replacedCheckListItem_specs;

    
_identified item.itemflag 0x10;
    
    if(
arguments.length 2)
        
checkQuantity false;
    if(
arguments.length 3)
        
nipDebug false;
    
    for(
_NTIP_CheckList.length i++)
    {
        if(
_NTIP_CheckList[i][0].length 0)
        {
            if(
_NTIP_CheckList[i][0].indexOf("maxquantity") == -1)
            {    
                if(eval(
_NTIP_CheckList[i][0]))
                {
                    if(
_NTIP_CheckList[i][1].length 0)
                    {
                        if(eval(
_NTIP_CheckList[i][1]))
                        {
                            if(
nipDebug)
                                return new Array(
1_NTIP_CheckList[i][2], _NTIP_CheckList[i][3], _NTIP_CheckList[i][4], _NTIP_CheckList[i][0] + " && " _NTIP_CheckList[i][1]);

                            return 
1;
                        }
                        else if(!
_identified && _result == 0)
                            
_result = -1;
                    }
                    else
                    {
                        if(
nipDebug)
                            return new Array(
1_NTIP_CheckList[i][2], _NTIP_CheckList[i][3], _NTIP_CheckList[i][4], _NTIP_CheckList[i][0]);

                        return 
1;
                    }
                }
            }
            else
            {
                
// Extract the quantity from the string and cast it to integer
                
_quantityString _NTIP_CheckList[i][0].split("&&")[0];
                
                for(var 
0_quantityString.lengthn++)
                {
                    if(!
isNaN(_quantityString.charAt(n)))
                    {
                        
_quantity parseInt(_quantityString.substring(n_quantityString.length));
                        break;
                    }
                }
    
                
// Remove the quantity definition from the nip string in JavaScript Syntax
                
_replacedCheckListItem _NTIP_CheckList[i][0].replace(/maxquantity==\d+&&/gi,"");
                
                if(eval(
_replacedCheckListItem))
                {
                    if(
_NTIP_CheckList[i][1].length 0)
                    {
                        if(eval(
_NTIP_CheckList[i][1]) && (!checkQuantity || MWIP_CheckItemQuantity(_quantity_replacedCheckListItem "&&" _NTIP_CheckList[i][1], item.gid)))
                        {
                            if(
nipDebug)
                                return new Array(
1_NTIP_CheckList[i][2], _NTIP_CheckList[i][3], _NTIP_CheckList[i][4], _replacedCheckListItem " && " _NTIP_CheckList[i][1]);
                        
                            return 
1;
                        }
                        else if(!
_identified && _result == 0)
                            
_result = -1;
                        else
                            
_result 3;
                    }
                    else if(!
checkQuantity || MWIP_CheckItemQuantity(_quantity_replacedCheckListItemitem.gid))
                    {
                        if(
nipDebug)
                            return new Array(
1_NTIP_CheckList[i][2], _NTIP_CheckList[i][3], _NTIP_CheckList[i][4], _replacedCheckListItem);
                        
                        return 
1;
                    }
                    else
                        
_result 3;
                }
            }
        }
        else if(
_NTIP_CheckList[i][1].length 0)
        {
            if(eval(
_NTIP_CheckList[i][1]))
                return 
1;
            else if(!
_identified && _result == 0)
                
_result = -1;
        }
    }
    
    return 
_result;
}

// Internal function
function NTIP_ParseLineInt(input)
{
    var 
i;
    var 
_start_end;
    var 
_section_keyword;
    var 
_result;
    
    
_end input.indexOf("//");
    if(
_end != -1)
        
input input.substring(0_end);

    
input input.replace(/ |;/g"").toLowerCase();

    if(
input.length 5)
        return 
null;

    
_result input.split("#");

    if(
_result[0] && _result[0].length 4)
    {
        
_section _result[0].split("[");

        
_result[0] = _section[0];

        for(
_section.length i++)
        {
            
_end _section[i].indexOf("]") + 1;

            switch(
_section[i][0])
            {
            case 
't':
                
_result[0] += "item.itemtype";
                break;
            case 
'm':
                
_result[0] += "maxquantity";
                break;
            case 
'n':
                
_result[0] += "item.classid";
                break;
            case 
'c':
                
_result[0] += "item.itemclass";
                break;
            case 
'q':
                
_result[0] += "item.quality";
                break;
            case 
'f':
                if(
_section[i][_end] == '!')
                    
_result[0] += "!(item.itemflag&";
                else
                    
_result[0] += "(item.itemflag&";

                
_end += 2;
                break;
            case 
'l':
                
_result[0] += "item.itemlevel";
                break;
            case 
'p':
                
_result[0] += "item.itemprefix";
                break;
            case 
's':
                
_result[0] += "item.itemsuffix";
                break;
            default:
                Print(
"Unknown Keyword : " input);
                break;
            }

            for(
_start _end _end _section[i].length _end++)
            {
                if(!
NTIP_IsSyntaxInt(_section[i][_end]))
                    break;
            }

            
_result[0] += _section[i].substring(_start_end);

            for(
_start _end _end _section[i].length _end++)
            {
                if(
NTIP_IsSyntaxInt(_section[i][_end]))
                    break;
            }

            
_keyword _section[i].substring(_start_end);

            if(
isNaN(_keyword))
            {
                switch(
_section[i][0])
                {
                case 
't':
                    
_result[0] += _NTIPAliasType[_keyword];
                    break;
                case 
'n':
                    
_result[0] += _NTIPAliasClassID[_keyword];
                    break;
                case 
'c':
                    
_result[0] += _NTIPAliasClass[_keyword];
                    break;
                case 
'q':
                    
_result[0] += _NTIPAliasQuality[_keyword];
                    break;
                case 
'f':
                    
_result[0] += "0x" parseInt(_NTIPAliasFlag[_keyword]).toString(16).toUpperCase() + ")";
                    break;
                }
            }
            else
            {
                if(
_section[i][0] == 'f')
                    
_result[0] += _keyword ")";
                else
                    
_result[0] += _keyword;
            }

            
_result[0] += _section[i].substring(_end);
        }
    }
    else
        
_result[0] = "";

    if(
_result[1] && _result[1].length 4)
    {
        
_section _result[1].split("[");

        
_result[1] = _section[0];

        for(
_section.length i++)
        {
            
_end _section[i].indexOf("]");

            
_keyword _section[i].substring(0_end);

            if(
isNaN(_keyword))
                
_result[1] += "item.GetStat(" _NTIPAliasStat[_keyword] + ")";
            else
                
_result[1] += "item.GetStat(" _keyword ")";
            
            
_result[1] += _section[i].substring(_end+1);
        }
    }
    else
        
_result[1] = "";
        
    return 
_result;
}

function 
NTIP_IsSyntaxInt(ch)
{
    return (
ch == '!' || ch == '%' || ch == '&' || (ch >= '(' && ch <= '+') || ch == '-' || ch == '/' || (ch >= ':' && ch <= '?') || ch == '|');
}

function 
MWIP_CheckItemQuantity(maxspecsgid)
{
    var 
_items_count_specs;
    
    
_items me.GetItems();
    
_count 0;
    
_specs specs.replace(/item\./gi"_items[i]."); // Replace the unit's name within the specs as it is not defined in this context

    
if(_items)
    {
        for(
_items.length i++)
        {
            if(
_items[i] && _items[i].mode == && _items[i].gid != gid && eval(_specs))
                
_count++;    
        }
    }

    return 
_count max;
}


/* 
    _NTIP_CheckList structure:
    Index 0: Properties JavaScript
    Index 1: Stats JavaScript
    Index 2: .nip Filename
    Index 3: Line index
    Index 4: .nip Line
*/
function MWIP_CheckNips()
{
    var 
_errors_jsString_items_date;
    var 
iitem;
    
    
_items me.GetItems();
    
_errors = new Array();
    
    if(!
_items || !_items[0])
        return 
false;
        
    
item _items[0]; // This item unit is just used as a dummy
    
    
for(0_NTIP_CheckList.lengthi++)
    {
        
_jsString _NTIP_CheckList[i][0].replace(/maxquantity==\d+&&/gi,"");
        
        if(
_NTIP_CheckList[i][1])
            
_jsString += "&&" _NTIP_CheckList[i][1];
        
        try
        {
            eval(
_jsString); // Will raise an exceptions on syntax errors
            
            
if(_jsString.indexOf("undefined") > 0// Adds an error remark on conversion erros due to typos
                
_errors.push([i"Invalid NIP Keyword"]);
        }
        catch(
e)
        {
            
_errors.push([ie]);
        }
    }

    Print(
"ÿc8[Nip Check Results] ÿc0Checked " _NTIP_CheckList.length " lines: " + ((_errors.length 0) ? "ÿc1" "ÿc<") + _errors.length " errors"); 
    
    
_jsString "------------------------------------------------------------------------------\nNIP Error Report - File Created: <date> by " me.charname "\n------------------------------------------------------------------------------";
    
_date = new Date();
    if(
_date)
        
_jsString _jsString.replace("<date>"_date.toLocaleFormat("%a %m/%d/%y %H:%M:%S"));
    
    for(
0_errors.lengthi++)
    {
        Print(
"ÿc1[Error #" + (1) + "]: .." _NTIP_CheckList[_errors[i][0]][2] + ", line " _NTIP_CheckList[_errors[i][0]][3]);
        
        
_jsString += "\n[Error #" + (1) + "]";
        
_jsString += "\nFile: " _NTIP_CheckList[_errors[i][0]][2];
        
_jsString += "\nLine: " _NTIP_CheckList[_errors[i][0]][3] + " (This may not be the exact line number, check the line content below to find the actual line containing the error)";
        
_jsString += "\nException: " _errors[i][1];
        
_jsString += "\nLine Content Nip: " _NTIP_CheckList[_errors[i][0]][4].replace(/([ ]?)([<>!=\+\-\*#&|][&|=><]?)([ ]?)/g, " $2 ");;
        
_jsString += "\nLine Content JavaScript: " _NTIP_CheckList[_errors[i][0]][0].replace(/maxquantity==\d+&&/gi,"").replace(/([ ]?)([<>!=\+\-\*#&|][&|=><]?)([ ]?)/g, " $2 ");;
        
if(_NTIP_CheckList[_errors[i][0]][1])
            
_jsString += " && " _NTIP_CheckList[_errors[i][0]][1].replace(/([ ]?)([<>!=\+\-\*#&|][&|=><]?)([ ]?)/g, " $2 ");;
        
_jsString += "\n------------------------------------------------------------------------------";
    
        
// Ignore the faulty line
        
_NTIP_CheckList.splice(_errors[i][0], 1);
    }

    if(
_errors.length 0)
    {
        
MWC_WriteToTextfile(_jsString"Logs/NipErrors.txt"1);
        Print(
"ÿc1Check NipErrors.txt for a more detailed error description!");
    }
    else
        
MWC_WriteToTextfile(_jsString "\nNO ERRORS""Logs/NipErrors.txt"1);
    
    return 
true;


wen jemand eine lösung hat bitte bescheid geben kenn mich damit nicht aus
05/19/2013 16:54 mirkoregge#6920
was haste denn an deiner pickit geändert? der Fehler verweist nur auf ItemAlias, da du in deiner Pickit einen Syntaxfehler gemacht hast; z.b. nut einmal & etc
05/21/2013 01:01 lesuperking#6921
Hi Jungs,
also, ich hab folgendes schon bekanntes Problem, nur die Lösung klappt bei mir nicht, bzw. hatte nicht diesen Fehler bei den Einstellungen gemacht!

Meine Soso legt nach jedem Spiel n restart hin (egal wen ich zuletzt kill), und Nein, ich hab bei cdkeys nicht 1 reingeschrieben, sondern 0, bzw gar nichts (beides probiert)...daran scheint es aber nicht zu liegen.

Ich benutze nur einen cd-key, gibt es noch irgendwo anders eine Variable für cdkeychangen? Kann die nur beim leechscript finden, leeche aber net, ganz easy nur ein bot und hab immer #runs=#restarts.

Durchforste schon seit stunden das Netz, kann aber nur den Fehler mit der "1" im Manager finden statt der "0", damit hat sichs wohl auch bei den meisten erledigt, hab aber wie gesagt ne "0" bzw "" probiert...der Fehler kommt weiter.

Jemand ne andere Idee worans liegen könnte?
Der einzige Fehler den der manager anzeigt ist [AM] Status: not ready!
Aber hat doch nix mit automule zu tun?

Vielen Dank im vorraus...
05/21/2013 18:36 NerDxx™#6922
Kennt einer den Code für Mang Songs Lektion / Mang Song's Lesson

mit,
-15% zu Feuer-Widerstand des Gegners
oder
-15% zu Blitz-Widerstand des Gegners
oder
-15% zu Kälte-Widerstand des Gegners


[Only registered and activated users can see links. Click Here To Register...]
05/21/2013 18:41 mirkoregge#6923
Quote:
Originally Posted by NerDxx™ View Post
Kennt einer den Code für Mang Songs Lektion / Mang Song's Lesson

mit,
-15% zu Feuer-Widerstand des Gegners
oder
-15% zu Blitz-Widerstand des Gegners
oder
-15% zu Kälte-Widerstand des Gegners


[Only registered and activated users can see links. Click Here To Register...]
statt && kannste || nehmen:
Code:
[Name] == ArchonStaff && [Quality] == Unique # [PassiveLtngPierce] == 15 && [PassiveColdPierce] == 15 && [PassiveFirePierce] == 15																		// Mang Song's Lesson
in meiner Unique-Pickit sind alle Uniques mit variablen stats ;)
05/21/2013 19:05 aggaa#6924
Hallo, ich habe ein Problem:
Ich will einen Baalbot laufen lassen und diesen dann mit Leechern joinen lassen, der Baalbot funktioniert auch, allerdings gibts es das Problem, dass der Leecher im Channel scheinbar wahllose Dinge schreibt und sich total mit dem Game joinen verhaspelt wenn der Leader ein Spiel erstellt.
Wenn er versucht zu joinen tippt er irgendwelche Zufallszahlen/Buchstaben (ein /f l ist auch irgendwie dabei) und versagt dann beim Game joinen weil er irgendeinen falschen Namen eingibt.
Wenn ich dann manuell auf "Einklinken" klicke, tippt er zwar trotzdem diese Zufallszahlen noch ein, joined danach aber immerhin ein Spiel. Innerhalb des Spiels klappt dann alles, allerdings habe ich dann beim nächsten spiel wieder genau das gleiche Problem.

edit: ich habe irgendwie das Gefühl, dass der Bot gleichzeitig noch ein random gamename/passwort kreiert, aber ich weiß nicht wieso.
05/21/2013 19:18 mirkoregge#6925
Was haste denn bei den Leechern als Roomname angegeben?
05/21/2013 19:36 aggaa#6926
Habe den Haken auf zufällig, daran könnte es liegen.
Allerdings kommt bei mir eine Fehlermeldung wenn ich das einfach frei lasse. Habe es mal mit jeweils einem Leerzeichen versucht, scheint jetzt zu klappen.
05/21/2013 21:13 Escaflowny#6927
könnt mir bitte mal wer nen bissichen helfen beim einstellen von dem bot fuer meine lightsorc? komm damit net so richtig klar -.-
05/21/2013 21:15 mirkoregge#6928
Quote:
Originally Posted by Escaflowny View Post
könnt mir bitte mal wer nen bissichen helfen beim einstellen von dem bot fuer meine lightsorc? komm damit net so richtig klar -.-
[Only registered and activated users can see links. Click Here To Register...]
05/21/2013 21:17 Escaflowny#6929
och das is ja schee xD danke :3
05/22/2013 11:27 nemata#6930
ahoi zusammen
ich habe einen fehler gefunden, der durchaus fatal ist
wenn jmd ingame schreibt und die nachricht die maximale erlaubte menge an buchstaben hat crashed IMMER das game.
ich habe teilweise erlebt, dass leute dies beabsichtigt nutzen um meinen char in brenzlichen tele situationen crashen zu lassen was zum tot führt.

gibt es dafür einen fix? habe leider nichts dazu gefunden

gruß :)