D2nt Fehler

07/11/2011 14:45 Devil122#1
Tach
ich habe folgendes Problem schon seit einigen wochen:

Bei Fehlermeldungen, die D2 zum crashen bringen hängt sich D2 einfach auf bis zum manuellen restart. Die Fehlermeldung ertönt als Ton aber wird nix angezeigt.
Bei dem D2nt Manager wird "Please wait" angezeit aber keine reaktion. Bis jetzt ist es nur mein Leaderbot (Baal -Privates game) passiert.


Ich habe von paar anderen gehört, dass es auch bei anderen D2nt Versionen auftauchte..
Das problem bezieht sich daher auf alle d2nt Versionen, deswegen auch der neue thread. Habe auch schon in eigentlichen thread versucht aber scheint als ob keiner dafür eine lösung hat.

Würde mich über hilfe jeder art freuen

Devil
07/11/2011 15:33 FoGzone#2
ich glaub gegen den Crash selber kann man nichts unternehmen, aber hier im Forum gibt es ein (AutoIt)Programm, was D2 automatisch schließt, wenn es crasht und sich aufhängt.
07/11/2011 23:13 xdoddestroyer#3
ja wie gesagt das ist normal der error, dass einzige was du mal machen kannst ist in dein diablo 2 ordner die login txt ini zu löschen die in etwa so bezeichnet sind

D2110711
D2110713
D2110714
D2110715 usw

mfg

xdod
07/12/2011 11:45 Devil122#4
Danke für die ideen, aber das problem besteht leider immernoch.
07/12/2011 11:56 flow-jow#5
Mir ist aufgefallen fas ich sowas habe, wenn ich wie bots relativ schnell hintereinander starte.

Z.B. Nach dem mulen.

Anderes ist mir nicht aufgefallen. Vielleicht ein speicher-verteilungs-problem? Oder ähnliches? Rechner stark ausgelastet mit den bots evtl?
07/12/2011 12:45 Devil122#6
Quote:
Originally Posted by flow-jow View Post
Mir ist aufgefallen fas ich sowas habe, wenn ich wie bots relativ schnell hintereinander starte.

Z.B. Nach dem mulen.

Anderes ist mir nicht aufgefallen. Vielleicht ein speicher-verteilungs-problem? Oder ähnliches? Rechner stark ausgelastet mit den bots evtl?
Am Pc kann es nicht liegen, kaum eine belastung für ihn bei 4x D2.
Es passiert nur bei solchen fehler, sonst läufts stabil.
07/12/2011 14:14 FoGzone#7
was du auch noch versuchen kannst, is dass Windows automatisch Fenster schließen soll, von denen er keine Rückmeldung erlangt.

Bin mir allerdings ned sicher ob das (noch) geht
07/12/2011 16:37 lanara#8
Hängt er sich immer bei den gleichen Sachen auf, also z.B. beim verlassen des Spiels?
07/12/2011 18:05 Devil122#9
Quote:
Originally Posted by lanara View Post
Hängt er sich immer bei den gleichen Sachen auf, also z.B. beim verlassen des Spiels?
Beim verlassen das games, während der Bot läuft ja.
Bei allen anderen bin ich mir nicht sicher, weil ich meistens (wenn ich mal am Pc bin) den ton höre aber dann nicht mehr sehen kann wodurch es ausgelöst worden ist.
07/12/2011 20:29 lanara#10
Kannste mal den Entry Point posten, den du nutzt? Möglich, dass der Fehler darin versteckt ist, war zumindest bei meiner Version so.
07/12/2011 21:14 Devil122#11
Quote:
Originally Posted by lanara View Post
Kannste mal den Entry Point posten, den du nutzt? Möglich, dass der Fehler darin versteckt ist, war zumindest bei meiner Version so.
Das ist 1:1 deine Bot version.

PHP Code:
var channelUsers               = new Array();

//###################################################################
//###########################Einstellungen###########################
//###################################################################

// Wenn ihr nur einen Key benutzt, dann diesen Wert mindestens auf 180000 setzen, damit ihr keine realmdowns bekommt
var gameMinLength              180000;

var 
joinChatAfterLogin         false// true = Bot geht in den Chat, um .login/Announces zu machen
var joinChannelInChat          "xxxx"// Wenn der Bot in keinen bestimmten Channel soll, dann nichts eintragen
var channelLogin               false// true = Bot schreibt .login nachdem er eingeloggt ist
channelUsers.push("Account Name"); // Hier deinen Account Name eintragen
channelUsers.push("Char Name"); // Hier deinen Char Name eintragen

// %game --> "gamename-"
// %counter --> number of the next game
// %time --> time in seconds till game creation
// %password --> game password
var gameAnnouncement           "Next Game: %game%counter in %time seconds."// Wenn keine NG message im Chat geposted werden soll, dann nichts eintragen

//----------------------------------------------------------------------------------------------------------------------------------------------------------


//###################################################################
//##############################Delays###############################
//###################################################################

// realm delays (minutes)
var unableToConnectRetry       2;
var 
realmDownRetry             60;
var 
disconnectedRetry          2;
var 
cdkeyInUseRetry            2;

// interface delays (milliseconds)
var connectingToBnetTimeout    20000;
var 
characterScreenTimeout     10000;
var 
pleaseWaitTimeout          10000;
var 
createGameThreshold        15000;
var 
createGameThresholdRandom  2500;
var 
createGameTimeout          15000;
var 
waitInLineTimeout          60000;
var 
characterSelectDelay       1000;
var 
loginDelay                 1000;
var 
clickDelay                 1000;
var 
textDelay                  1000;
var 
clickDelayRandom           500;
var 
textDelayRandom            500;
var 
gameDoesNotExistDelayMin   600000;
var 
gameDoesNotExistDelayMax   900000;
var 
gameDoesNotExistTimeout    30000;
var 
gameAnnouncementDelay      5000;
var 
gameAnnouncementDelayRandom 500;
var 
waitBeforeEnterChatMin     1000;
var 
waitBeforeEnterChatMax     2000;
var 
waitInChatBeforeActionsMin 2000;
var 
waitInChatBeforeActionsMax 3000;


//###################################################################
//###################################################################
//###############DO NOT CHANGE ANYTHING BELOW THIS###################
//###################################################################
//###################################################################

// D2NT Manager Command

const D2NT_MGR_LOADING 1;
const 
D2NT_MGR_READY 2;
const 
D2NT_MGR_LOGIN 3;
const 
D2NT_MGR_CREATE_GAME 4;
const 
D2NT_MGR_INGAME 5;
const 
D2NT_MGR_RESTART 6;
const 
D2NT_MGR_CHICKEN 7;
const 
D2NT_MGR_PRINT_STATUS 8;
const 
D2NT_MGR_PRINT_LOG 9;

var 
lastGameMade GetTickCount();
var 
lastGameStatus 0;
var 
nextGameMake 0;
var 
inGameAt 0;
var 
chatActionsDone false;
var 
lastGameFailed false;
var    
joinedChannel false;
var 
justJoined true;
var 
joinRandomChannel false;

Include(
"libs/controlInfo.ntl");

var 
controlData = new controlInfo();

function 
NTMain()
{
    
Delay(1000);

    var 
_ingame false;

    
controlData.clickDelay clickDelay;
    
controlData.textDelay textDelay;
    
controlData.clickDelayRandom clickDelayRandom;
    
controlData.textDelayRandom textDelayRandom;

    while(
1)
    {
        if(
me.ingame)
        {
            if(!
inGameAt)
                
inGameAt GetTickCount();

            if(!
_ingame)
            {
                
RunGC(); // run garbage collector between each game

                
if(Load("NTBot/NTBotGame.ntj"))
                {
                    
_ingame true;

                    if(
me.playtype 0)
                        
sendEventToOOG(D2NT_MGR_INGAME"In Game [IP:" me.gameserverip.split(".")[3] + "]"0);
                    else
                        
sendEventToOOG(D2NT_MGR_INGAME"In Game"0);
                    
lastGameStatus 2// in game successful
                
}
            }

            
Delay(1000);
        }
        else
        {
            if(
_ingame)
            {
                
_ingame false;

                
sendEventToOOG(D2NT_MGR_READY""0);
            }

            
locationAction(controlData.getLocation());

            
Delay(500);
        }
    }
}

function 
locationAction(location)
{
    switch(
location.id)
    {
    case 
3// Lobby Chat
        
if(justJoined)
        {
            
justJoined false;
            if(
isChannelUser(me.accountme.charname))
            {
                for(var 
03i++)
                {
                    
SetStatusText("˙c2Chat actions enabled!");    
                    
Delay(150);
                    
SetStatusText("");    
                    
Delay(150);
                }
            }
            else
            {
                for(var 
03i++)
                {
                    
SetStatusText("˙c1Chat actions disabled!");    
                    
Delay(150);
                    
SetStatusText("");    
                    
Delay(150);
                }
            }
        }
        if(!
chatActionsDone && isChannelUser(me.accountme.charname))
        {
            
chatActionsDone true;
            
Delay(Random(waitInChatBeforeActionsMinwaitInChatBeforeActionsMax));
            if(!
joinedChannel && (joinRandomChannel || joinChannelInChat != ""))
            {
                var 
rndChannel getRandomString(Random(3,10));
                
SetStatusText("˙c8Joining Channel " + (joinRandomChannel rndChannel joinChannelInChat) );
                
Delay(1000);
                
Say("/join " + (joinRandomChannel rndChannel joinChannelInChat));
                
joinedChannel true;
                
Delay(1000);
                if(
channelLogin)
                {
                    
SetStatusText("˙c8Channel Login...");
                    
Say(".login");
                    
Delay(1000);
                }
            }
        }
    case 
1:    // Lobby
        
if(location.id == && joinChatAfterLogin)
        {
            
Delay(Random(waitBeforeEnterChatMinwaitBeforeEnterChatMax));
            
controlData.click(controlData.controls.lobby.button.enterChat);
            break;
        }
        if(
GetTickCount() > nextGameMake)
        {
            var 
_control;

            
lastGameFailed false;

            switch(
lastGameStatus)
            {
            case 
0:
                
_control controlData.get(controlData.controls.lobby.button.create);
                if(
_control && _control.pressed)
                {
                    
controlData.click(controlData.controls.lobby.button.join);
                    
Delay(500);
                }

                
controlData.click(controlData.controls.lobby.button.create);
                
nextGameMake GetTickCount() + createGameTimeout// set our timeout
                
sendEventToOOG(D2NT_MGR_PRINT_STATUSlocation.name0);
                break;
            case 
1// game failed, rollover to reset timer
                
inGameAt GetTickCount();
                
lastGameFailed true;
                
Delay(5000);
                
            case 
2:
                
outputGameLength();
                
lastGameStatus 0;
                
setNextGameMake();
                if(
lastGameFailed)
                {
                    
SetStatusText("˙c1Failed to join!");
                    
sendEventToOOG(D2NT_MGR_PRINT_LOG"˙E00000Game " + ((getGameCounter(me.gamenametrue)) ? ("(" getGameCounter(me.gamenametrue) + ")") : "") + " creation failed!"0)
                    
Delay(2500);
                }
                
sendEventToOOG(D2NT_MGR_PRINT_STATUSlocation.name0);
                break;
            }
        }
        else
        {
            if(
joinChannelInChat && gameAnnouncement && me.gamename && isChannelUser(me.accountme.charname))
            {
                var 
tempDelay = (gameAnnouncementDelay 5000) ? gameAnnouncementDelay 5000 
                            (
gameAnnouncementDelayRandom 500) ? Random(0gameAnnouncementDelayRandom) : 500;
                var 
gameText gameAnnouncement;
                
gameText gameText.replace("%password"me.gamepassword);
                
gameText gameText.replace("%game"getGameName(me.gamename));
                
gameText gameText.replace("%counter"getGameCounter(me.gamenamefalse));
                
gameText gameText.replace("%time"parseInt((nextGameMake GetTickCount() - tempDelay)/1000+3.0));
                if(
parseInt((nextGameMake GetTickCount() - tempDelay)/1000+3.0) > 5)
                {    
                    
Delay(tempDelay);
                    
Say(gameText);
                }
            }
            
timeoutDelay(nextGameMake-GetTickCount(), locationtrue);
        }
        break;

    case 
2// Waiting In Line
        
if(GetTickCount()-lastGameMade waitInLineTimeout)
            
controlData.click(controlData.controls.lobby.inLine.button.cancel);
        break;

    case 
4// Create Game
        
if(!controlData.get(controlData.controls.lobby.create.editBox.gameName))
        {
            
controlData.click(controlData.controls.lobby.button.join);
            
Delay (500);
            
controlData.click(controlData.controls.lobby.button.create);
            
Delay (500);
        }
        
sendEventToOOG(D2NT_MGR_CREATE_GAMElocation.name0);

        
locationTimeout(5000location);

        
lastGameMade GetTickCount();
        
lastGameStatus 1// pending creation
        
break;

    case 
5// Join Game
        
break;

    case 
6// Ladder
        
break;

    case 
7// Channel List
        
break;

    case 
8// Main Menu
        
if(controlData.getCurrentRealmIndex() == me.gatewayid)
        {
            
outputGameLength();
            
controlData.click(controlData.gameTypes[me.playtype]);
        }
        else
            
controlData.click(controlData.controls.mainMenu.button.gateway);
        break;

    case 
9// Login
        
sendEventToOOG(D2NT_MGR_PRINT_STATUSlocation.name0);
        
Delay(loginDelay);

        
controlData.setText(controlData.controls.login.editBox.accountNameme.account);

        
sendEventToOOG(D2NT_MGR_LOGINlocation.name0);

        
locationTimeout(5000location);
        break;

    case 
10// Login Error (this is a fatal error, so stop)
        
sendEventToOOG(D2NT_MGR_RESTARTlocation.name10);
        
Delay(3500);
        break;

    case 
11// Unable To Connect
        
timeoutDelay(unableToConnectRetry*60*1000location)
        
controlData.click(controlData.controls.login.unableToConnect.button.ok);
        break;

    case 
12// Character Select
        
var _time_control;

        
sendEventToOOG(D2NT_MGR_PRINT_STATUSlocation.name0);

        for(
_time _time characterScreenTimeout _time += 500)
        {
            
_control controlData.get(controlData.controls.characterSelect.textBox.characterInfo[me.charloc]);
            if(
_control && _control.GetText() != undefined)
                break;

            
Delay(500);
        }

        if(
_time characterScreenTimeout)
        {
            
Delay(characterSelectDelay);

            
controlData.click(controlData.controls.characterSelect.textBox.characters[me.charloc], 001);
            
controlData.click(controlData.controls.characterSelect.textBox.characterInfo[me.charloc], 001);

            
// reset last game made, so it doesnt make a game immediately
            
inGameAt 0;
            
setNextGameMake();
        }
        else
        {
            
controlData.click(controlData.controls.characterSelect.button.exit);
            
timeoutDelay(realmDownRetry*60*1000location);
        }
        break;

    case 
13// Realm Down - Character Select screen
        
controlData.click(controlData.controls.characterSelect.button.exit);
        
timeoutDelay(realmDownRetry*60*1000location);
        break;

    case 
14// Character Select - Disconnected
        
timeoutDelay(disconnectedRetry*60*1000location);
        
controlData.click(controlData.controls.characterSelect.disconnected.button.ok);
        break;

    case 
15// New Character
        
break;    

    case 
16// Character Select - Please Wait popup
        
if(!locationTimeout(pleaseWaitTimeoutlocation))
            
controlData.click(controlData.controls.characterSelect.pleaseWait.button.cancel);
        break;

    case 
17// Lobby - Lost Connection - just click okay, since we're toast anyway
        
controlData.click(controlData.controls.lobby.lostConnection.button.ok);
        break;

    case 
18// D2 Splash
        
controlData.click(controlData.controls.d2Splash.textBox.copyright);
        break;

    case 
19// Login - Cdkey In Use
        
timeoutDelay(cdkeyInUseRetry*60*1000location);
        
controlData.click(controlData.controls.login.cdkeyInUse.button.ok);
        break;

    case 
20// Single Player - Select Difficulty
        
controlData.click(controlData.singlePlayerDifficulties[me.diff]);
        break;

    case 
21// Main Menu - Connecting
        
if(!locationTimeout(connectingToBnetTimeoutlocation))
            
controlData.click(controlData.controls.mainMenu.connecting.button.cancel);
        break;

    case 
22// Login - Invalid Cdkey (classic or xpac)
        
sendEventToOOG(D2NT_MGR_RESTARTlocation.name3600);
        
Delay(3500);
        break;    

    case 
23// Character Select - Connecting
        
if(!locationTimeout(characterScreenTimeoutlocation))
            
controlData.click(controlData.controls.characterSelect.button.exit);
        break;

    case 
24// Server Down - not much to do but wait..
        
break;

    case 
25// Lobby - Please Wait
        
if(!locationTimeout(pleaseWaitTimeoutlocation))
            
controlData.click(controlData.controls.lobby.pleaseWait.button.cancel);
        break;

    case 
26// Lobby - Game Name Exists
        
sendEventToOOG(D2NT_MGR_PRINT_LOG"˙E00000Game already exists"0);
        
SetStatusText("˙c1Game akready exists!");
        
inGameAt 0;
        
lastGameStatus 0;
        
setNextGameMake();

        
locationTimeout(15000location);
        break;

    case 
27// Gateway Select
        
controlData.clickRealmEntry(me.gatewayid);
        
controlData.click(controlData.controls.gateway.button.ok);
        break;

    case 
28// Lobby - Game Does Not Exist
        
inGameAt Random(gameDoesNotExistDelayMingameDoesNotExistDelayMax);
        
lastGameStatus 0;
        
setNextGameMake();

        
locationTimeout(gameDoesNotExistTimeoutlocation);
        break;
    }
}

function 
sendEventToOOG(locationIdstatusStringpendingTime)
{
    return 
SendCopyData("D2NT Manager"null, (locationId<<16)|pendingTimestatusString);
}

function 
setNextGameMake()
{
    
lastGameMade GetTickCount();
    
nextGameMake lastGameMade createGameThreshold Random(0-createGameThresholdRandomcreateGameThresholdRandom) + inGameAt;
    
inGameAt 0;
    
chatActionsDone false;
}

function 
outputGameLength()
{
    if(
inGameAt)
    {
        
duration GetTickCount() - inGameAt;

        
inGameAt = (duration gameMinLength gameMinLength duration 0);
    }
}

function 
locationTimeout(timelocation)
{
    
endtime GetTickCount() + time;

    while(
controlData.getLocation().id == location.id && endtime GetTickCount())
    {
        
sendEventToOOG(D2NT_MGR_PRINT_STATUSlocation.name " (" parseInt((endtime-GetTickCount())/1000) + "s)"0);
        
Delay(500);
    }

    return (
controlData.getLocation().id != location.id);
}

function 
timeoutDelay(timelocationshowNextGameStatus)
{
    if(
arguments.length 3)
        
showNextGameStatus false;
    
    
endtime GetTickCount() + time;

    while(
endtime GetTickCount())
    {
        
sendEventToOOG(D2NT_MGR_PRINT_STATUSlocation.name " (" parseInt((endtime-GetTickCount())/1000) + "s)"0);
        if(
showNextGameStatus)
        {
            if(
lastGameFailed && parseInt((endtime-GetTickCount())/1000) > 30)
            {
                if(
parseInt((endtime-GetTickCount())/1000) % 30 == 0)
                {
                    
SetStatusText("˙c1Last game failed!");
                    
Delay(5000);
                }
                if(
me.gamename && getGameCounter(me.gamenamefalse))
                    
SetStatusText("˙c8Next game: " getGameName(me.gamename) + getGameCounter(me.gamenamefalse) + " (" parseInt((endtime-GetTickCount())/1000) + "s)");
                else
                    
SetStatusText("˙c8Game creation pending... (" parseInt((endtime-GetTickCount())/1000) + "s)");
            }
            else if(
parseInt((endtime-GetTickCount())/1000) >= 0)
            {
                if(
me.gamename && getGameCounter(me.gamenamefalse))
                    
SetStatusText("˙c8Next game: " getGameName(me.gamename) + getGameCounter(me.gamenamefalse) + " (" parseInt((endtime-GetTickCount())/1000) + "s)");
                else
                    
SetStatusText("˙c8Game creation pending... (" parseInt((endtime-GetTickCount())/1000) + "s)");
            }
            if(
me.ingame)
                
endtime GetTickCount();
        }
        
Delay(1000);
    }
    if(
showNextGameStatus)
        
SetStatusText("˙c8Creating game...");
}

function 
getRandomString(_length)
{
    
_retString "";
    
_charSet "0123456789abcdefghijklmnopqrstuvwxyz";

    while(
_length--)
    {
        
_retString += _charSet.charAt(Random(0_charSet.length-1));
        
Delay(1);
    }

    return 
_retString;
}

function 
getGameName(lastGameString)
{
    if(!
lastGameString)
        return 
"";
    else
        return (
lastGameString.substr(0lastGameString.lastIndexOf('-')+1));
}

function 
getGameCounter(lastGameStringsimple)
{
    var 
myCountcountString;
    if(!
lastGameString)
        return 
"-1";
    else
    {
        
countString lastGameString.slice(lastGameString.lastIndexOf('-')+1);
            
        switch(
countString)
        {
            case 
"08":
                
myCount 9;
                break;
            case 
"09":
                
myCount 10;
                break;
            default:
                
myCount parseInt(countString) + 1;
                break;
        }
        if(!
simple)
        {
            if(
myCount <= 9)
                return (
'0' myCount);
        }
        return 
myCount;
    }
}

function 
isChannelUser(accountnamecharname)
{
    for(var 
0channelUsers.lengthi++)
    {
        if(
accountname.toLowerCase() == channelUsers[i].toLowerCase() || charname.toLowerCase() == channelUsers[i].toLowerCase())
            return 
true;
    }
    return 
false;

07/12/2011 21:35 XxArenaxX#12
ich habe den Fehler auch bei dem Etalbot, wobei er schon ein paar Tage nicht mehr kam...
07/12/2011 21:37 lanara#13
Quote:
Originally Posted by Devil122 View Post
Das ist 1:1 deine Bot version.
Dachte ich mir schon, versuchs mal hiermit:

07/13/2011 12:01 Devil122#14
Quote:
Originally Posted by lanara View Post
Dachte ich mir schon, versuchs mal hiermit:


Ich werde das mal zwei tage beobachten, ob das problem weiterhin besteht.

Danke für eure hilfe :)
07/13/2011 18:24 mirkoregge#15
Bei mir tritt das Gleiche Phänomen beim Muddy Bot auf


Der Fehler tritt immer beim verlasen des Games auf (oben steht Exiting Game..). Gehäuft bei Chicken-Exit.