Register for your free account! | Forgot your password?

Go Back   elitepvpers > Other Online Games > Diablo 2 > Diablo 2 Programming
You last visited: Today at 06:40

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

 

[Release] AutoMule mit Muddies D2NT

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235
[Release] AutoMule mit Muddies D2NT

Sop, damit auch alle Muddy Fans in den Genuss von Auto Mule kommen hab ich mich Mal wieder ran gesetzt. Ich hab jetzt zwar nur kurz nen kleinen Typo gefixt, der hatte es aber in sich. Er war dafür zuständig, dass ihr FullAuto nicht wirklich nutzen konntet Aber sollte nun gehen.

Da ich keine eigene D2NT Version mehr unterhalten werde sondern wieder nur auf das Auto Mule fokussiere gibt's hier nur noch support zum Auto Mule und momentan nur für Muddies Version!

Was müsst ihr machen?

FullAuto (V1.2):

(Anleitungen für ältere Versionen wird es nicht mehr geben, für normales AutoMule evtl. irgendwann)

Features vom AutoMule:
- Für jeden Bot Account eigene Mules & eigenes Mulegame
- Mehere Mule Accounts pro Bot
- Für jeden Mule Account kann eine eigene PickIt definiert werden
- Es wird nur gemult, was in den PickIts steht, wird etwas vom Cubing Script aufgenommen, so bleibt das auf dem Bot.
- Ihr könnt angeben, bei wievielen freien Plätzen gemult werden soll.
- Ihr könnt Items vom Mulen ausschliessen
- Der Bot kann selber Accs und Chars erstellen
- Leecher können nun auch mulen (nächste Version)

Ältere Changelogs

Geplante Features (?.??):
- Es sind keine weiteren Features geplant[/B]]



Bekannte Bugs (1.11a):

- (PremadeAccounts) Wenn der Account voll ist, werdet ihr die restlichen und alle neuen Items verlieren. Der Bot wirft die Items dann immer ins Mule Game, aber kann sich nicht mehr aufnehmen. Ok, scheinbar bleibt der Bot teilweise auch komplett stehen wenn ein Acc voll is
- Das Aufräumen der Truhe beim Mulen dauert etwas, da er alles sortiert auch wenn's schon am richtigen Ort ist. (fixed, nur noch net online)
- Das Benennen der Chars funtioniert nicht bei allen einwandfrei (-> Workaround: RandomNameLength > 0)



Danksagungen:

Ich danke Muddy, Medix, lanara und Fred so wie allen anderen deren Scripts ich verwende / weiter entwicklet habe. Auch ein Dank geht an Dino der mich auf so einige Fehler aufmerksam gemacht hat. Und alle anderen die mich auf Fehler aufmerksam gemacht haben.

Für Muddies V1.2
PW: muddy
MD5 (1.2): 6b76acd3af7357cfb45d29090bc95fa0 *new*

Alte Versionen (nicht supportet):

Sollte was unklar sein, einfach posten.
Attached Files
File Type: rar muddymitautomule_v1.0.rar (980.7 KB, 52 views)
File Type: rar muddymitautomule_v1.01.rar (994.2 KB, 162 views)
File Type: rar BlueDevilD2NT_v1.11a.rar (1.03 MB, 186 views)
File Type: rar Muddy's D2NT V1.2 mit AutoMule.rar (1.56 MB, 254 views)



ldevil is offline  
Thanks
18 Users
Old   #2
 
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235

[1] NTBot.ntj anpassen, aber wie?

Ja, da werden wohl ein paar Probleme haben, daher erklär ich das Mal anhand eines Beispieles (frei erfunden):

Code:
case "Meerschwein":
    var DGMuleAccs = ["Grunz-Runen","Grunz-Uniqs","Grunz-Esel"];
    var DGMulePws = ["12grunz","grunz34","5grunz6"];
    var DGMuleFiles = ["mule/runen.nip","mule/uniqs.nip","default"];
    var MuleCharLocation = [0,0,0]; // charloc 1 = 0 , charloc 2 = 1 , charloc 3 = 2, ..... counts +1 after mule is full
    var MuleGame = "MuleGrunzer";
    var MuleGamePassword ="a1s2d3";
    break;
Und nun im einzelnen.
Code:
case "Meerschwein":
Hier kommt euer Account Name rein mit dem ihr Bottet, hier wäre er "Meerschwein".
Code:
    var DGMuleAccs = ["Grunz-Runen","Grunz-Uniqs","Grunz-Esel"];
Hier müsst ihr die Mule Accounts eintragen. Wieviele ist euch überlassen, aber bitte denkt daran, dass ihr bei zu vielen einen RealmDown kassieren könnt!
Code:
    var DGMulePws = ["12grunz","grunz34","5grunz6"];
Und das sind die Passwörter zu den Mule Accounts, bitte auf die Reihenfolge achten!
Code:
    var DGMuleFiles = ["mule/runen.nip","mule/uniqs.nip","default"];
Ok jetzt wird's kompliziert. Damit die Mules wissen, was sie aufheben sollen, müsst ihr es ihnen angeben. Hier würden die Mules vom ersten Account nun alles aufnehmen was in der Datei "scripts\NTBot\item_configs\mule\runen.nip" steht. Diese müsst ihr selber erstellen! Wenn ihr "default" schreibt, so nehmen Mules vom entsprechenden Account alles mit was ihr in der Config als default definiert habt[2].
Code:
var MuleCharLocation = [0,0,0];
Hier müsst ihr eintragen wieviele Chars auf den Mule Accounts schon voll sind, damit der Bot nicht immer jeden durchprobieren muss. Ihr müsst umbedingt soviele '0'en haben wie ihr Mule Accounts eintragt!
Code:
    var MuleGame = "MuleGrunzer";
    var MuleGamePassword ="a1s2d3";
und hier tragt ihr ein wie das Game & Passwort heisst in dem ihr Mulen wollt. Achtet darauf, dass ihr einen speziellen Namen wählt, da der Bot es nicht mag wenn jemand anders das Spiel mit einem anderen Passwort schon erstellt hat! Der Bot mulet allerdings auch dann wenn das Spiel mit dem richtigen Passwort schon existiert - ihr könnt also auch einen Char darin deponieren, falls ihr sehen wollt ob der Bot auch alles mitnimmt oder so.

[2] Die NTConfig_mule.ntl anpassen, aber wie?
Hier müsst ihr eigentlich nicht viel machen, ausser die "default" werte für die PickIt definieren:

Code:
    //-----------------------------------------------------------------------------------
    // NipFile Configuration
    //-----------------------------------------------------------------------------------

    var filehandle = FileOpen("NTBot/char_configs/mule/" + me.account + "mulenip", 2);
    if(filehandle)
    {
        var line = filehandle.ReadLine();
        // Check if nip file is there
        if(line == "default" || line == "")
        { // Default Werte
[COLOR="Red"]            NTConfig_NIPFilePath.push("schlechtes/beispiel.nip");[/COLOR]
        }else if(line == "classic"){ // Werte für Classic
[COLOR="Red"]            NTConfig_NIPFilePath.push("schlechtes/beispiel_classic.nip");[/COLOR]
        }else{
            Say("DEBUG:" + me.charname + "'s MuleNip-File is " + line);
            NTConfig_NIPFilePath.push(line);
        }
        filehandle.Close();
    }else{
[COLOR="Red"]        NTConfig_NIPFilePath.push("schlechtes/beispiel.nip");[/COLOR]
    }
Jetzt müsst ihr nur die Roten Zeilen durch eure PickIts ersetzten, bei mir wäre das:

Code:
        NTConfig_NIPFilePath.push("nik/normal.nip");
        NTConfig_NIPFilePath.push("nik/magic_rare.nip");
        NTConfig_NIPFilePath.push("nik/set.nip");
        NTConfig_NIPFilePath.push("nik/unique.nip");
        NTConfig_NIPFilePath.push("nik/craft.nip");
für das "schlechtes/beispiel.nip" und

Code:
            NTConfig_NIPFilePath.push("nik/normal.nip");
            NTConfig_NIPFilePath.push("nik/magic_rare.nip");
            NTConfig_NIPFilePath.push("nik/set.nip");
            NTConfig_NIPFilePath.push("nik/unique.nip");
            NTConfig_NIPFilePath.push("nik/craft.nip");

            NTConfig_NIPFilePath.push("classic/classic.nip");
            NTConfig_NIPFilePath.push("classic/shoping.nip");
für das "schlechtes/beispiel_classic.nip".

Wenn ihr kein Classic verwendet könnt ihr das auch weglassen und das ganze "else if(line == "classic"){[...]}" löschen, oder natürlich auch durch ein anderes Wort ersetzten, dass ihr dann bei [1] verwenden könnt.

[3] NTFullAuto.ntj
Code:
case "BOTACCOUNTNAME":  // So wie ihr ihn im Manager eingetragen habt.
	var AccPrefix = "WHATEVER"; // (~2-4 characters) 
	var MuleAccSuffix = ["TYPE1","TYPE2","TYPE3"]; // (~2-5 characters)
	var NewAccPW = ["","",""]; // Halt das Passwort für die Accs. "" --> zufälliges PW
	var DGNipFiles = ["mule/runes.nip","mule/gems.nip","default"]; // Die NiP Files, genau das selbe wie beim NTBot.ntj
	
	var UseNumbers = false; // Lasst das lieber auf false, "true" ist nicht getestet ;)
	var isLadder = true;	// Ladder?
	var isHC = false; // HC?
	var isClassic = false; // Classic?
	
	var MuleGame = "MULEGAMENAME"; // MuleGame Name
	var MuleGamePassword ="MULEGAMEPASSWORD"; // PW fürs Mulegame
	break;


ldevil is offline  
Thanks
4 Users
Old   #3
 
elite*gold: 0
Join Date: May 2008
Posts: 153
Received Thanks: 16
gut gemacht, werde ich mir die nächsten tage mal angucken sobald meine durch hell kommt.
Nightgrey is offline  
Old   #4
 
elite*gold: 0
Join Date: Apr 2006
Posts: 6,596
Received Thanks: 1,831
Find ich sehr toll ,dass du da weiter dran arbeitest .


Medix is offline  
Old   #5
 
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235
Mach ich gern. Ihr könnt auch Vorschläge machen für Features. Ob ich die dann wirklich umsetzten kann/will ist ne andere Frage. Wollte mal versuchen, dass er die Mule Accounts auch gleich selber erstellt, aber so ganz ohne API oder ein ähnliches Script werd ich wohl nicht weit kommen - warum ich es auch noch nicht angeganegen bin

Eine andere Idee ist noch, dass er die Truhe nach dem Mulen aufräumt weil v.a. wenn man Gems & Runen Cubed könnten die u.U. ein Hinderniss sein wenn man Mal viel grosses findet. Aber hat (noch) keine Priorität, weil's bei mir auch ohne extrem gut klappt.

2 Bots laufen nun seit ~36h ohne Problem und die nehmen wirklich jeden Scheiss mit, damit sie auch brav alle paar Stunden mulen müssen
ldevil is offline  
Old   #6
 
elite*gold: 0
Join Date: Aug 2010
Posts: 91
Received Thanks: 4
Quote:
Originally Posted by ldevil View Post
Was beinhaltet das Archiv?
- Muddies D2NT (mit Bugfix, Andy + Meppel Moat und nem "safe" Dia Script)
sag mir das "mit bugfix" ein gefixter XML log ist und ich liebe dich offiziell

das safe dia script hört sich interessant an, werds mal einbinden. empfiehlst du dafür eine evasion exeption zu definieren oder läufts sogar besser mit evade?

automule brauch ich jetzt nicht, aber schön zu sehen das es das jetzt auch so einfach für muddys gibt! tolle arbeit.

EDIT: ähh, NTDiablo ist fastdia ("safe"?) und NTDiabloclearall ist CS+DIA und auch "safe?

lg,
jules
JulesWinnfiled is offline  
Old   #7
 
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235
Quote:
Originally Posted by JulesWinnfiled View Post
sag mir das "mit bugfix" ein gefixter XML log ist und ich liebe dich offiziell
Ne ist ne Variable die nicht definiert war - konnte zu nem Restart bei Charauswahl führen Das mit dem XML Log müsst ich Mal anschauen. Ist aber so, dass beim Mulen Stashlogs erstellt werden und die funktionieren bei mir bis jetzt immer!

Quote:
das safe dia script hört sich interessant an, werds mal einbinden. empfiehlst du dafür eine evasion exeption zu definieren oder läufts sogar besser mit evade?
Also meine Sorc (Blizzard / Nova) schafft mit Evade immer Mal wieder Dia, zumindest wenn Sie und der Merc richtig stehen - was leider nicht immer der Fall ist.
Ob ich's hinbekomm dass sie aktiv versucht sich so zu positionieren... kA könnt ich Mal anschauen.

Quote:
automule brauch ich jetzt nicht, aber schön zu sehen das es das jetzt auch so einfach für muddys gibt! tolle arbeit.

EDIT: ähh, NTDiablo ist fastdia ("safe"?) und NTDiabloclearall ist CS+DIA und auch "safe?

lg,
jules
Also NTDiablo sollte das normale Script sein, und das ClearAll ist das von Fred, welches für ne Classic Sorc konzipiert ist und halt alle Adds cleared und so. Weil zumindest meine Sorc hatte früher immer wieder Probs mit Adds wenn ein Siegel nicht aufging oder so

Werd wohl das Aufräumscript doch machen müssen, meine Sorc konnt natürlich promt nichts mehr aufnehmen nachdem ich gepostet hatte es funktioniere bei mir auch ohne ^^ Tja, werd das dann als nächstes machen.
Und dann schau ich evtl. wegen Log
ldevil is offline  
Thanks
1 User
Old   #8
 
elite*gold: 0
Join Date: Apr 2006
Posts: 6,596
Received Thanks: 1,831
Quote:
Originally Posted by ldevil View Post
Mach ich gern. Ihr könnt auch Vorschläge machen für Features. Ob ich die dann wirklich umsetzten kann/will ist ne andere Frage. Wollte mal versuchen, dass er die Mule Accounts auch gleich selber erstellt, aber so ganz ohne API oder ein ähnliches Script werd ich wohl nicht weit kommen - warum ich es auch noch nicht angeganegen bin

Eine andere Idee ist noch, dass er die Truhe nach dem Mulen aufräumt weil v.a. wenn man Gems & Runen Cubed könnten die u.U. ein Hinderniss sein wenn man Mal viel grosses findet. Aber hat (noch) keine Priorität, weil's bei mir auch ohne extrem gut klappt.

2 Bots laufen nun seit ~36h ohne Problem und die nehmen wirklich jeden Scheiss mit, damit sie auch brav alle paar Stunden mulen müssen
Das sollte dir weiterhelfen beim accs erstellen:

Medix is offline  
Thanks
1 User
Old   #9
 
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235
Danke, damit krieg ich's ja vielleicht doch hin
ldevil is offline  
Old   #10
 
elite*gold: 0
Join Date: Aug 2010
Posts: 91
Received Thanks: 4
wow, danke für die ganzen antworten!

also stashlog ist eine sehr große hilfe trotz dessen es nur "toTXT" funktioniert, wenn ich in ne XML parsen will gehts nicht, was sehr schade ist denn in ner TXT ist recht unübersichtlich und bei runen total unbrauchbar weil halt alle stats mitgeparst werden.

meine sorc schafft dia eigentlich ganz gut mittlerweile, auch mit dem "standard" script, das problem ist das evade manchmal zu bugs führt (was es NUR beim dia script tut! zum glück, denn ich möchte es nicht missen) z.B. beim 3. siegel (venom lord) wenn sie dort evade macht kann es passieren das sie venom einfach stehen lässt und zu diablo weiter telt, dann auf ihn wartet und irgendwann abbricht (killmonster failed)

noch eine frage wenn das erlaubt ist, es tut mir ja leid ich weiß mit automule hat das nur sehr begrenzt was zu tun...
funzt bei dir das parsen des stashes in eine XML? wie gesagt TXT geht wunderbar und ist eine große hilfe, XML will aber nicht, ich werd gleich mal schauen was genau der fehler war und es dann reineditieren.

oh und wenn du an deinem sortierscript rumschraubst, wär vielleicht ne idee runen sortieren zu lassen, so von links im stash ElElElEldEldMalOhmOhmVexZod halt, nur so als idee

EDIT also der XML stashlog funzt!! allerdings nur bis ein error kommt "HALT" irgendwas, so ein error fenster und D2 schließt sich, in der XML sind dann etwa 6-7 items angekommen, der rest fehlt

lg,
jules
JulesWinnfiled is offline  
Old   #11
 
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235
Quote:
Originally Posted by JulesWinnfiled View Post
wow, danke für die ganzen antworten!

also stashlog ist eine sehr große hilfe trotz dessen es nur "toTXT" funktioniert, wenn ich in ne XML parsen will gehts nicht, was sehr schade ist denn in ner TXT ist recht unübersichtlich und bei runen total unbrauchbar weil halt alle stats mitgeparst werden.
Also bei mir klappt das Stashlog als XML, halt nur mit Firefox und glaubs Chrome und net IE
Quote:
meine sorc schafft dia eigentlich ganz gut mittlerweile, auch mit dem "standard" script, das problem ist das evade manchmal zu bugs führt (was es NUR beim dia script tut! zum glück, denn ich möchte es nicht missen) z.B. beim 3. siegel (venom lord) wenn sie dort evade macht kann es passieren das sie venom einfach stehen lässt und zu diablo weiter telt, dann auf ihn wartet und irgendwann abbricht (killmonster failed)
Ganz ehrlich, weiss nicht ob das bei mir auch vorkommt, denn zu Dia kommt meine eh nur selten, da ich davor Baal hab wo sie oft hängen bleibt.
Quote:
noch eine frage wenn das erlaubt ist, es tut mir ja leid ich weiß mit automule hat das nur sehr begrenzt was zu tun...
funzt bei dir das parsen des stashes in eine XML? wie gesagt TXT geht wunderbar und ist eine große hilfe, XML will aber nicht, ich werd gleich mal schauen was genau der fehler war und es dann reineditieren.

oh und wenn du an deinem sortierscript rumschraubst, wär vielleicht ne idee runen sortieren zu lassen, so von links im stash ElElElEldEldMalOhmOhmVexZod halt, nur so als idee

EDIT also der XML stashlog funzt!! allerdings nur bis ein error kommt "HALT" irgendwas, so ein error fenster und D2 schließt sich, in der XML sind dann etwa 6-7 items angekommen, der rest fehlt

lg,
jules
Also mein Sortier-Script ist nicht ganz was du meinst. Es sorgt dafür, dass die Items die nicht gemult werden danach in Reih und Glied liegen
Mal schauen ob ich Zeit und Lust hab Runen zu sortieren

Wie gesagt, bei mir funktioniert das XML Loggen für die Stash ohne Probleme. Hast du denn auch brav das Spiel auf English? Ist irgendwie das einzige was mir da in den Sinn kommt ^^

edit: Hab mich nach dem "Stash Aufräumen" nun dem XML Log angenommen. Falls der Fehler so zu stande kommt wie ich denke, hab ich evtl. nen Workaround. Muss das ez Mal ne weile testen um zu sehen ob's wirklich daran liegt...
ldevil is offline  
Old   #12
 
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235
edit: Das im nächsten Post funktioniert
ldevil is offline  
Old   #13
 
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235
Sop hab jetzt das ganze umgeschrieben ... aber denke so sollte es keine Fehler mehr geben.

Hier die neue MWItemlogger.ntl (keine Garantie, beta):

Code:
/**
*    This file was modified by 
*    Check the programming section for updates and further scripts
*    Original Author: agor
*    Last Update: 09/04/2010
*/

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

function MWI_CheckLog() 
{
    var _dateString, _fhandle;
    
    _dateString = new Date().toLocaleFormat("%m-%d-%y");
    _fhandle = FileOpen("logs/" + me.charname + "/" + _dateString + "_itemlog.xml", 2);

    if(_fhandle)
    {
        // Check if file already exists
        if(!_fhandle.ReadLine())
        {
            Print("ÿc<Creating New Log File for "+me.charname+": " +_dateString+"_itemlog.xml");
            // Creation of the new file
            _fhandle.WriteLine("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>"); 
            _fhandle.WriteLine("<?xml-stylesheet href=\"itemlog.xsl\" type=\"text/xsl\"?>");
            _fhandle.WriteLine("<itemlog>");
            _fhandle.WriteLine("</itemlog>");
        }
        _fhandle.Close();
        return true;
    }
    return false;
}

// Writes items to itemlog.xml via E4X
// http://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Processing_XML_with_E4X
// item            = Item Object
// isEthereal    = 1 if Item is Ethereal, 0 if not
// mode        = 0 -> Item Kept
// mode        = 1 -> Item Sold
function MWI_WriteLog(item, isEthereal, mode, logStashed, whereAbouts) 
{
    var _fhandle, _filepath, _date, _content, _loops, _itemlog, _itemdesc, _location;
    var _content2, _content3;
            
    if(arguments.length < 4)
    {
        logStashed = false;
        whereAbouts = "";
    }    
    
    if(!item)
    {
        MWI_ErrorLog(null, 3);
        return false;
    }

    if(!logStashed && !MWI_CheckLog())
        MWI_ErrorLog(item, 2);
    
    // Checks if there is already a (unid) item logged matching the current item object
    if(!logStashed && !(item.itemflag&0x10) && MWI_IsLogged(item))
    {
        MWI_ErrorLog(item, 0);
        return false;
    }
    
    _date = new Date();
    _content = "";
    _loops = 0;
        
    if(logStashed)
    {
        _filepath = "logs/stashlogs/" + me.charname + "_StashedItems.xml";
        
        _fhandle = FileOpen(_filepath, 2);
        
        if(_fhandle)
        {
            while(!_fhandle.eof)
            {
                if(++_loops > 2) // Skips XML header lines because they cause errors when creating the E4X object
                    _content += _fhandle.ReadLine();
                else
                    _fhandle.ReadLine();
            }
            _fhandle.Close();
            
        }
        else
        {
            MWI_ErrorLog(item, 1);
            return false;
        }
        // Creation of the E4X Object
        _itemlog = new XML(_content);
    }
    else
        _filepath = "logs/"+ me.charname + "/Temp_itemlog";

    if(item.itemdesc)
    {
        // Replaces all colors
        _itemdesc = item.itemdesc.replace(/ÿc(.)/g, "");
        // Replaces new lines with spaces
        _itemdesc = _itemdesc.replace(/\n/g, '|');
        // Skips the first part of the description
        _itemdesc = _itemdesc.replace((_itemdesc.split("|")[0] + "|"), "");
    }
    else
        _itemdesc = "undefined";
        
    //Add the last location that was saved
    if(logStashed)
        _location = whereAbouts;
    else
        _location = MWI_ReadLoc(item);    
    
    if(logStashed)
    {
        // Creation of the file output, headers first and then the itemlog content
        _itemlog.item += <item id={_date.getTime()} char={me.charname} time={_date.toLocaleFormat("%a %m/%d/%y %H:%M:%S")} quality={item.quality} ethereal={isEthereal} mode={mode} name={(item.name)?item.name.split("\n")[0]:"undefined"} ilvl={item.itemlevel} location={_location} type={item.classid} typedesc={MWI_NameItem(item.classid)}>{_itemdesc}</item>;
        _content = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
        _content += "<?xml-stylesheet href=\"stashlog.xsl\" type=\"text/xsl\"?>\n";
        _content += _itemlog.toXMLString();
    }
    else
    {
        _content = "<item id=\"" + _date.getTime() + "\" char=\"" + me.charname + "\" time=\"" + _date.toLocaleFormat("%a %m/%d/%y %H:%M:%S") + "\" quality=\"" +
                    item.quality + "\" ethereal=\"" + isEthereal + "\" mode=\"" + mode + "\" name=\"" + ((item.name) ? item.name.split("\n")[0] : "undefined") + "\" ilvl=\"" +
                    item.itemlevel + "\" location=\"" + _location + "\" type=\"" + item.classid + "\" typedesc=\"" + MWI_NameItem(item.classid) + "\">";
        _content2 = _itemdesc;
        _content3 = "</item>";
    }
    if(logStashed)
        _fhandle = FileOpen(_filepath, 1);
    else
        _fhandle = FileOpen(_filepath, 2);
    
    if(!_fhandle)
    {
        MWI_ErrorLog(item, 1);
        return false;
    }
    
    _fhandle.WriteLine(_content);
    if (!logStashed)
    {
        _fhandle.WriteLine(_content2);
        _fhandle.WriteLine(_content3);
    }
    _fhandle.Close();
    
    return true;
}    

function MWI_WriteTempLogToXML()
{
    var _buffer, _itemData, _XMLData, _tempDate, _timeStamp, _fhandle, _count, _countXML, _filecontent, _lines, _ticks;
    var _buffer2, _buffer3;
    var i, k;
    var lastIncomplete = false;
    
    _itemData = new Array();
    _count = 0;
    _countXML = 0;
    _buffer = "";
    _filecontent = "";
    
    NTC_SendMsgToScript("MWBotGame.ntj", "STOP_STATUS_TEXT_UPDATE");
    SetStatusText("ÿc8Updating Your XML Log...");
    _ticks = GetTickCount();
    
    _fhandle = FileOpen("logs/"+ me.charname + "/Temp_itemlog", 2);
        
    if(_fhandle)
    {
        //Print("Debug: Reading Temp File...")
        while(!_fhandle.eof)
        {
            if (!_fhandle.eof)
                _buffer = _fhandle.ReadLine();
            if (!_fhandle.eof)
                _buffer2 = _fhandle.ReadLine();
            if (!_fhandle.eof)
                _buffer3 = _fhandle.ReadLine();
            
            //Print("Debug: Skip to next Item")
            while(!(_buffer.indexOf("<item id=") > -1 && !isNaN(_timeStamp = parseInt(_buffer.split(/"/g)[1]))) && !_fhandle.eof)
            {
                // Get first opening Tag
                _buffer = _buffer2;
                _buffer2 = _buffer3;
                _buffer3 = _fhandle.ReadLine();
            }
            
            //Print("Debug: Check if all 3 lines are correct")
            // Check if other Tags match
            if (_buffer.indexOf("<item id=") > -1 && _buffer2.indexOf("<") == -1 && _buffer2.indexOf(">") == -1 && _buffer3.indexOf("</item>") >= -1)
            {
                //Print("Debug: They are!")
                // all is correct --> write lines
                _tempDate = new Date(_timeStamp);
                
                //Print("Debug: Put Item in Struct...")
                if(_tempDate)
                {
                    for(i = 0; i < _itemData.length; i++)
                    {
                        if(_itemData[i][0] == _tempDate.toLocaleFormat("%m-%d-%y"))
                        {
                            _itemData[i].push(_buffer);
                            _itemData[i].push(_buffer2);
                            _itemData[i].push(_buffer3);
                            break;
                        }
                    }
                    if(i >= _itemData.length)
                    {
                        _itemData.push([_tempDate.toLocaleFormat("%m-%d-%y"), _buffer, _buffer2, _buffer3]);
                    }
                }
            }else{
                //Print("Debug Line1: " + _buffer);
                //Print("Debug Line2: " + _buffer2);
                //Print("Debug Line3: " + _buffer3);
            }
        }    
        _fhandle.Close();
            
        if(_itemData.length < 1)
            return false;
        
        for(i = 0; i < _itemData.length; i++)
        {
            _fhandle = FileOpen("logs/" + me.charname + "/" + _itemData[i][0] + "_itemlog.xml", 2);
                        
            //Print("Debug: Reading Log File...")
            if(_fhandle)
            {
                _XMLData = new Array();
                
                while(!_fhandle.eof)
                {
                    if (!_fhandle.eof)
                        _buffer = _fhandle.ReadLine();
                    if (!_fhandle.eof)
                        _buffer2 = _fhandle.ReadLine();
                    if (!_fhandle.eof)
                        _buffer3 = _fhandle.ReadLine();
                        
                    //Print("Debug: Skipping to next Item in Log...")
                    while(!(_buffer.indexOf("<item id=") > -1) && !_fhandle.eof)
                    {
                        // Get first opening Tag
                        _buffer = _buffer2;
                        _buffer2 = _buffer3;
                        _buffer3 = _fhandle.ReadLine();
                    }
                    
                    //Print("Debug: If this is a correct Item put it into Struct...")
                    if (_buffer.indexOf("<item id=") > -1 && _buffer2.indexOf("<") == -1 && _buffer2.indexOf(">") == -1 && _buffer3.indexOf("</item>") >= -1)
                    {
                        //Print("Correct Item read from Log");
                        _XMLData.push(_buffer);
                        _XMLData.push(_buffer2);
                        _XMLData.push(_buffer3);
                    }
                    //Print("Debug Line1: " + _buffer);
                    //Print("Debug Line2: " + _buffer2);
                    //Print("Debug Line3: " + _buffer3);
                }
                _fhandle.Close();
            }
            
            _fhandle = FileOpen("logs/" + me.charname + "/" + _itemData[i][0] + "_itemlog.xml", 1);
            
            //Print("Debug: Writing Log File...")
            if(_fhandle)
            {
                _fhandle.WriteLine("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>"); 
                _fhandle.WriteLine("<?xml-stylesheet href=\"itemlog.xsl\" type=\"text/xsl\"?>");
                _fhandle.WriteLine("<itemlog>");
                for(k = 0; k < _XMLData.length; k++)
                {
                    if (k % 3 == 0)
                        _countXML++;
                    _fhandle.WriteLine(_XMLData[k]);
                }
                
                for(k = 1; k < _itemData[i].length; k++)
                {
                    if (k % 3 == 0)
                        _count++;
                    _fhandle.WriteLine("  " + _itemData[i][k]);
                }
            
                _fhandle.WriteLine("</itemlog>");
                _fhandle.Close();
            }
            
        }
        
        Print("ÿc<ÿc8" + _count + " ÿc<Item" + ((_count > 1) ? "s were" : " was") + " successfully added to your XML Logfile. (" + (GetTickCount() - _ticks) + "ms) [Total XML Items: " + (_count + _countXML) + "]" );
        NTC_SendMsgToScript("MWBotGame.ntj", "SET_DEFAULT_STATUS");
                
        return _count > 0;
    }
    
    return false;
}

function MWI_ClearTempLog()
{
    var _fhandle, _date;
    
    _fhandle = _fhandle = FileOpen("logs/" + me.charname + "/Temp_itemlog", 1);
    _date = new Date();
    
    if(_fhandle && _date)
    {
        _fhandle.WriteLine("//* The Item Data below will be added to the matching XML file at the beginning of every game - Temp Logfile Created: " + _date.toLocaleFormat("%a %m/%d/%y %H:%M:%S") + " */");
        _fhandle.Close();
        return true;
    }
    else if(_fhandle)
        _fhandle.Close();
        
    return false;
}

function MWI_WriteLoc(itemunit)
{
    var _fhandle, _area;
        
    if(arguments.length < 1 || !itemunit)
        return;
        
    _fhandle = FileOpen("logs/loc/" + me.charname + "_loc.txt", 2);
    
    _area = GetArea();
    
    if(_fhandle)
    {
        if(_area)
            _fhandle.WriteLine(itemunit.gid + "<>" + _area.name);
        else
            _fhandle.WriteLine(itemunit.gid + "<>" + "undefined");
        _fhandle.Close();
        
    }
    
    _fhandle = FileOpen("logs/loc/" + me.charname + "_simpleloc.txt", 1);
        
    if(_fhandle)
    {
        if(_area)
            _fhandle.WriteLine(_area.name);
        else
            _fhandle.WriteLine("undefined");
        _fhandle.Close();
    }
}

function MWI_ReadLoc(itemunit)
{
    var _fhandle, _line, _loc;
    
    if(arguments.length < 1 || !itemunit)
        return "undefined";
        
    _fhandle = FileOpen("logs/loc/" + me.charname + "_loc.txt", 2);
    
    if(_fhandle)
    {
        while(!_fhandle.eof)
        {
            _line = _fhandle.ReadLine();
            if(_line && parseInt(_line.split("<>")[0]) == itemunit.gid)
            {
                _fhandle.Close();
                _loc = _line.split("<>")[1];
                return _loc;
            }
        }
        _fhandle.Close();
        
        
        _fhandle = FileOpen("logs/loc/" + me.charname + "_simpleloc.txt", 2);
        
        if(_fhandle)
        {
            _loc = _fhandle.ReadLine();
            _fhandle.Close();
            if(_loc)
                return _loc;
            else
                return "undefined";    
        }
    }
    
    return "undefined";
}

function MWI_ClearLoc()
{
    var _fhandle;
    
    _fhandle = FileOpen("logs/loc/" + me.charname + "_loc.txt", 1);
    
    if(_fhandle)
    {
        _fhandle.WriteLine("gid<>location");
        _fhandle.Close();
    }

}

function MWI_NameItem(itemid)
{
    if(itemid >= 610 && itemid <= 642)
        return "Rune";
    if((itemid >= 509 && itemid <= 516) || (itemid >= 587 && itemid <= 596))
        return "Potion";
    if(itemid >= 518 && itemid <= 519)
        return "Tome";
    if(itemid >= 529 && itemid <= 530)
        return "Scroll";    
    if((itemid >= 557 && itemid <= 586) || (itemid >= 597 && itemid <= 601))
        return "Gem";
    if((itemid >= 644 && itemid <= 657) || (itemid >= 544 && itemid <= 555))
        return "Quest Item";
    if(itemid == 653)
        return "Token";
    if(itemid >= 654 && itemid <= 657)
        return "Essence";
    if(!_NTIPIDToName[itemid])
        return "Database Error";
    else
        return _NTIPIDToName[itemid];
}

function MWI_IsLogged(item)
{
    var _checkTime, _itemdesc, _date, _fhandle, _templine, _XMLData, _dataSet;
    
    _itemdesc = "";
    _date = new Date();
    _XMLData = new Array();
        
    switch(item.quality)
    {
        // _checkTime in minutes!
        case 1: // Low quality
                _checkTime = 15;
                break;                
        case 2: // Normal
                switch(MWI_NameItem(item.classid))
                {
                    case "Rune":
                        return false;
                        break;
                    case "Gem":
                        return false;
                        break;
                    case "Quest Item:":
                        return false;
                        break;
                    default:
                        _checkTime = 20;        
                }
                break;
        case 3: // Superior
                _checkTime = 30;
                break;
        case 4: // Magic
                _checkTime = 30;
                break;
        case 5: // Set
                _checkTime = 30;
                break;
        case 6: // Rare
                _checkTime = 60;
                break;
        case 7: // Unique
                _checkTime = 90;
                break;
        case 8: // Crafted
                _checkTime = 90;
                break;
        default:
                _checkTime = 20;
                break;
    }
        
    if(item.itemdesc)
    {
        _itemdesc = item.itemdesc.replace(/ÿc(.)/g, "");
        _itemdesc = _itemdesc.replace(/\n/g, '|');
        _itemdesc = _itemdesc.replace((_itemdesc.split("|")[0] + "|"), "");
    }
    else
        _itemdesc = "Itemdesc undefined|";
        
    _fhandle = FileOpen("logs/" + me.charname + "/" + _date.toLocaleFormat("%m-%d-%y") + "_itemlog.xml", 2);
    
    if(_fhandle)
    {
        while(!_fhandle.eof)
        {
            if(((_templine = _fhandle.ReadLine()) != "</itemlog>"))
                _XMLData.push(_templine);
        }
        _fhandle.Close();
        
        
        _XMLData.pop();
        
        _fhandle = FileOpen("logs/" + me.charname + "/Temp_itemlog", 2);
        
        if(_fhandle)
        {
            while(!_fhandle.eof)
            {
                _templine = _fhandle.ReadLine();
                if(_templine.indexOf("//*") == -1)
                {
                    if(!_templine)
                        break;
                    
                    _XMLData.push(_templine);
                }
            }
            _fhandle.Close();
        }
    }
    else
        return false;
        
    for(var i = _XMLData.length-1; i > 0; i--)
    {
        _dataSet = _XMLData[i].split(/"/g);
        
        if((_date.getTime() - parseInt(_dataSet[1])) < _checkTime*6E4)
        {
            if(parseInt(_dataSet[19]) == item.classid) // Check itemtype
            {
                if(parseInt(_dataSet[7]) == item.quality) // Check quality
                {
                    if(parseInt(_dataSet[15]) == item.itemlevel) // Check itemlevel
                    {
                        if(_dataSet[13] == item.name.split("\n")[0]) // Check itemname
                        {
                            if(_XMLData[i].split(/">/g)[1].replace("</item>", "") == _itemdesc) // Check itemdesc
                                return true;
                            else
                                continue;
                        }
                        else
                            continue;        
                    }
                    else
                        continue;
                }
                else
                    continue;
            }
            else
                continue;
        }
        else
            break;
    }
    
    return false;
}

// 0 = item already logged
// 1 = filhandle error
// 2 = error creating logfile
// 3 = itemunit undefined
function MWI_ErrorLog(item, errorcode)
{
    var _dateString, _errorOutput, _fhandle;
    
    _dateString = new Date().toLocaleFormat("%a %m/%d/%y %H:%M:%S");
    _errorOutput = "[" + _dateString + " <" + me.charname + "> ] ";
    
    switch(errorcode)
    {    
        case 0:
            Print("ÿc8Itemlog Info: Item is already in log!");
            _errorOutput += "Item Error: Item appears to be already logged (" + item.name.replace("\n", "") + ", " + MWI_NameItem(item.classid) + "[" + item.quality + "])";
            break;
        case 1:
            Print("ÿc1Itemlog Error: Filehandle is null!");
            _errorOutput += "File Error: Filehandle is null (Unable to log "+ item.name.replace("\n", "") + ", " + MWI_NameItem(item.classid) + "[" + item.quality + "])";
            break;
        case 2:
            Print("ÿc1Itemlog Error: Logfile could not be created!");
            _errorOutput += "File Error: Logfile could not be created (Unable to log "+ item.name.replace("\n", "") + ", " + MWI_NameItem(item.classid) + "[" + item.quality + "])";
            break;
        case 3:
            Print("ÿc1Itemlog Error: Itemunit is undefined!");
            _errorOutput += "File Error: Itemunit is undefined!";
            break;    
        default:
            _errorOutput += "Unknown Error";
            break;
    }
    
    _fhandle = FileOpen("logs/ErrorLog.txt", 2);
    
    if(_fhandle)
    {
        _fhandle.WriteLine(_errorOutput);
        _fhandle.Close();
    }
}

function MWI_GetGoldLogDate()
{
    var _fhandle, _date, _templine;
    _fhandle = FileOpen("gamble/" + me.charname + "_GambleInfo.txt", 2);
    if(_fhandle)
    {
        _templine = _fhandle.ReadLine();
        if(_templine)
        {
            for(var i = 0; i < 3; i++)
                _templine = _fhandle.ReadLine();
            if(_templine)
                _date = _templine.split(": ")[1];
            
        }
        _fhandle.Close();
        return _date;
    }
    else
        return "Unknown";
}

function MWI_GetGoldLogSessions()
{
    var _fhandle, _sessions, _templine;
    _fhandle = FileOpen("gamble/" + me.charname + "_GambleInfo.txt", 2);
    if(_fhandle)
    {
        _templine = _fhandle.ReadLine();
        if(_templine)
        {
            for(var i = 0; i < 2; i++)
                _templine = _fhandle.ReadLine();
            if(_templine)
                _sessions = parseInt(_templine.split(": ")[1]);
            
            _fhandle.Close();
            return _sessions;
        }
        
        _fhandle.Close();
        return -1;
    }
    else
        return -1;
}

function MWI_LogGold(spentGold, count)
{
    if(arguments.length < 2)
        count = false;
    
    var _fhandle, _fileTimeStamp, _currentTimeStamp, _total, _date, _gambleCount, _templine;
    
    _currentTimeStamp = new Date().getTime();
    _date = new Date().toLocaleFormat("%a %m/%d/%y %H:%M:%S");
    _total = 0;
    _gambleCount = 0;
    
    _fhandle = FileOpen("gamble/" + me.charname + "_GambleInfo.txt", 2);
    if(_fhandle)
    {
        _templine = _fhandle.ReadLine();
        if(_templine)
        {
            _fileTimeStamp = parseInt(_templine.split(": ")[1]);
            if(true || _currentTimeStamp - _fileTimeStamp <= 3*60*60*1E3)
            {
                _templine = _fhandle.ReadLine();
                if(_templine)
                    _total = parseInt(_templine.split(": ")[1]);
                _templine = _fhandle.ReadLine();
                if(_templine)
                    _gambleCount = parseInt(_templine.split(": ")[1]);
                _templine = _fhandle.ReadLine();
                if(_templine)
                    _date = _templine.split(": ")[1];
            }
        }
        _fhandle.Close();
        
        
        _total += spentGold;
        
        _fhandle = FileOpen("gamble/" + me.charname + "_GambleInfo.txt", 1);
        if(_fhandle)
        {
            _fhandle.WriteLine("Timestamp: " + _currentTimeStamp );
            _fhandle.WriteLine("Gold: " + _total);
            _fhandle.WriteLine("Gamble Counter: " + ((count) ? ++_gambleCount : _gambleCount));
            _fhandle.WriteLine("File created: " + _date);
            _fhandle.Close();
        }
    }
    else
        return -1;
    return _total;
}

function MWI_LogStashedItems(LogToTxt)
{
    var _isEthereal, _whereabouts, _content, _items, _fhandle, _date, _logToTxt, _dataSet, _fileContent, _hasCube, _room;
    var j;
    
    _items = me.GetItems();
    
    if(!_items)
        return false;
        
    if(arguments.length < 1)
        _logToTxt = MWConfig_LogStashToTxt;
    else
        _logToTxt = LogToTxt;
    
    if(!_logToTxt)
    {
        _fhandle = FileOpen("logs/stashlogs/" + me.charname + "_StashedItems.xml", 1);
        
        if(_fhandle)
        {
            _fhandle.WriteLine("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>"); 
            _fhandle.WriteLine("<?xml-stylesheet href=\"stashlog.xsl\" type=\"text/xsl\"?>");
            _fhandle.WriteLine("<itemlog>");
            _fhandle.WriteLine("</itemlog>");
            _fhandle.Close();
            
            for(var i = 0 ; i < _items.length; i++)
            {
                if(!_items[i].itemloc && _items[i].mode == 2)
                    continue;
                
                _isEthereal = (_items[i].itemflag & 0x400000) ? 1 : 0;
                _whereabouts = MWI_ItemLocationToName(_items[i]);
                
                if(!MWI_WriteLog(_items[i], _isEthereal, 0, true, _whereabouts))
                    return false;
            }
            return true;
        }
        return false;
    }
    else
    {
        _content = new Array();
        
        _hasCube = false;
        _room = 88;    // Inventory + Stash size without cube    
        
        for(var i = 0 ; i < _items.length ; i++)
        {
            _whereabouts = MWI_ItemLocationToName(_items[i]);
            
            if(!_items[i].itemloc && _items[i].mode == 2)
                continue;
                
            if(_items[i].itemdesc)
            {
                _dataSet = new ItemData(_whereabouts, MWI_NameItem(_items[i].classid), MWI_QualityToName(_items[i].quality), _items[i].itemlevel, _items[i].itemdesc.replace(/ÿc(.)/g, ""),_items[i].xsize*_items[i].ysize, _items[i].classid);
                // Ignoring the size of equipped items
                if(_dataSet.location == "Inventory" || _dataSet.location == "Stash" || _dataSet.location == "Cube") 
                    _room -= _dataSet.size;
                
                if(_dataSet.classid == 549)
                {
                    _hasCube = true;
                    _room += 12;
                }
                            
                for(j = 0; j < _content.length; j++)
                {
                    if(_content[j].typename == _dataSet.typename && 
                       _content[j].qualityname == _dataSet.qualityname &&
                       _content[j].getGeneralDesc() == _dataSet.getGeneralDesc() &&
                       _content[j].classid == _dataSet.classid &&
                       _content[j].size == _dataSet.size)
                      break;
                }
                if(j < _content.length)
                    _content[j].amount++;
                else
                    _content.push(_dataSet);
            }
        }
        
        _fileContent = "";
        for(var i = 0; i < _content.length; i++)
        {
            _fileContent += "Location: " + me.charname + ((_content[i].amount == 1)?" (" + _content[i].location + ")":"") + "\n";
            _fileContent += "Type: " + _content[i].typename + "\n";
            _fileContent += "Quality: " + _content[i].qualityname + "\n";
            if(_content[i].amount == 1)
                _fileContent += "Item Level: " + _content[i].level + "\n";
            _fileContent += "Amount carried: " + _content[i].amount + "\n\n";
            _fileContent += _content[i].desc;
            _fileContent += "\n----------------------------------------\n";
        }
        if(!_fileContent)
            _fileContent = "Empty! :(";
        
        _date = new Date().toLocaleFormat("%a %m/%d/%y %H:%M:%S");
        _fileContent = "----------------------------------------\n" + "----------------------------------------\n" + 
                        me.charname + "'s Stashlog (Level " + me.GetStat(12) + " " + MWC_CharClassIdToString(me.classid) + ")\nFile created: " + _date + "\nItems carried: " + _items.length + "\nGold carried: " + NTC_MyGold() + "\nFree room: " + _room +" of " +((_hasCube)?"96":"88")+ "\n" +
                       "----------------------------------------\n" + "----------------------------------------\n"
                       + _fileContent;
        _fhandle = FileOpen("logs/stashlogs/" + me.charname + "_StashedItems.txt", 1);
        if(_fhandle)
        {
            _fhandle.WriteLine(_fileContent);
            _fhandle.Close();
        }
        else
            return false;
    
        return true;
    }
}

function MWI_ShowItemInfo()
{
    var _items, _itemsInCube, _nipRes, _cubingRes;
    
    _itemsInCube = false;
    
    _items = me.GetItems();
    
    if(_items)
    {
        NTCU_InitCubing();
        
        for(var i = 0; i < _items.length; i++)
        {
            if(_items[i].itemloc == 3 && _items[i].mode == 0)
            {
                _nipRes = NTIPCheckItem(_items[i], 0, true);
                _cubingRes = NTCU_CheckItem(_items[i], _nipRes);
                
                Print("ÿc0Item Level of " + NTC_ItemQualityToD2Color[MWC_GetItemColorInt(_items[i])] + _items[i].name.split("\n")[0] + "ÿc0:ÿc8 " + _items[i].itemlevel + " ÿc0 <> NIPCheckID:ÿc8 " + _nipRes + " (" + _cubingRes + ")");
                _itemsInCube = true;
            }
        }
    }
    
    if(!_itemsInCube)
        Print("Make sure the item you want to gather information about is placed in your cube ;)");
}

function MWI_ItemLocationToName(itemunit)
{
    if(arguments.length < 1 || !itemunit)
        return "Unknown";
    
    if(!itemunit.itemloc && itemunit.mode == 2)
        return "Belt";

    switch(itemunit.itemloc)
    {
        case 0:
            return "Inventory";
            break;
        case 1:
            return "Head";
            break;
        case 2:
            return "Amulet";
            break;
        case 3:
            if(itemunit.mode == 1)
                return "Torso";
            else
                return "Cube";
            break;
        case 4:
            if(itemunit.mode == 1)
                return "Right Hand I";
            else
                return "Stash";
            break;
        case 5:
            return "Left hand I";
            break;
        case 6:
            return "Right Ring";
            break;
        case 7:
            return "Left Ring";
            break;
        case 8:
            return "Belt";
            break;
        case 9:
            return "Feet";
            break;
        case 10:
            return "Gloves";
            break;
        case 11:
            return "Right Hand II";
            break;
        case 12:
            return "Left hand II";
            break;
        default:
            return "Unknown";
            break;
    }

}

function MWI_QualityToName(quality)
{
    switch(quality)
    {
        case 1:
            return "Damaged";
            break;
        case 2:
            return "Normal";
            break;
        case 3:
            return "Superior";
            break;
        case 4:
            return "Magic";
            break;
        case 5:
            return "Set";
            break;    
        case 6:
            return "Rare";
            break;    
        case 7:
            return "Unique";
            break;
        case 8:
            return "Crafted";
            break;
        default:
            return "Unknown";
    }
}

// Itemdata Class
function ItemData(loc, typename, quality, ilvl, desc, size, classid)
{
    this.location = loc;
    this.typename = typename;
    this.qualityname = quality;
    this.level = ilvl;
    this.desc = desc;
    this.size = size;
    this.classid = classid;
    this.amount = 1;
        
    this.getGeneralDesc = function()
    {
        return this.desc.replace(/Durability:\s.+\sof\s.+\s/i, "");
    }
}
edit: Immer noch kein Fehler, ich denk es klappt!

Staus Update:

Bin momentan am Testen, wie das mit dem Account erstellen klappen könnte und momentan krieg ich folgendes hin:

- Accounts nummerieren (Buchstabe oder Zahl)
- Statisches oder Zufälliges Passwort
- Account Daten in einer Datei festhalten
- Email Registrieren geht nicht - aber eigentlich auch egal
- Barbar auswählen klappt, Dudu auch, Pala nicht, aber ja Mal schauen

Gibt aber noch richtig was an Arbeit das ganze dann auch im Mule Prozess einzubauen, dass er laufend nen neuen Char / Acc erstellt und nirgends hängen bleibt
ldevil is offline  
Old   #14
 
elite*gold: 0
Join Date: Aug 2010
Posts: 91
Received Thanks: 4
ich bedanke mich hier auch noch mal ganz herzlich bei ldevil für diesen grandiosen fix! läuft einwandfrei.

Danke!

lg,
jules
JulesWinnfiled is offline  
Old   #15
 
elite*gold: 0
Join Date: May 2008
Posts: 153
Received Thanks: 16
So, funzt jetzt soweit. thx hast schon ;D
Aber das Moatscript für Andy ist ja retarded. wartet bis sie kommt, lässt sich von ihr hauen und telt dann weg -> da könnte er auch gleich stehen bleiben ;S
Sonst aber wirklich super Arbeit. Danke dir ldevil und allen die die "Basics" gestellt haben.

Edit: omg er hat mir grad erstmal meinen anni, torch, sc gestasht und 4-5 meiner charms entsorgt obwohl das inventory richtig eingestellt war oO jetzt erstmal wieder zeug kaufen auf jsp son dreck -.-'


Nightgrey is offline  
Reply



« Previous Thread | Next Thread »

Similar Threads
[Release] D2NT 3.1 1.13c
hi, hab eben den d2nt3.1 gefunden. ein neues baba script is dabei. release thread eon D2NT3.1
91 Replies - Diablo 2
[D2NT] Long Dia Release
Ein kleines Script für diablo, es startet beim eingang macht ein tp cleart den weg zum star macht am star noch ein tp dann läufts wie das normale nur...
28 Replies - Diablo 2 Programming
Automule Beta
wäre doll wenn n paar leute lust haben das automule feature bissl zu testen Download im Anhang BEKANNTE BUGS: Bitte den LobbyChat...
152 Replies - Diablo 2
wie sicher d2nt-automule
hi, wie sicher ist denn das auto-mule script? der ersteltl ja ein game in der hoffnung es bleibt offen wenn man es leaved? danke
4 Replies - Diablo 2
D2NT mit Automule?
Hi, Jo ich bin mal wieder :D Ist es möglich den D2NT mit automule auszustatten ich verwände ATM v 1.9 steig aber auchw ieder auf 1.7 um wenn...
8 Replies - Diablo 2



All times are GMT +1. The time now is 06:40.


Powered by vBulletin®
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Abuse
Copyright ©2017 elitepvpers All Rights Reserved.