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.account, me.charname))
            {
                for(var 
i = 0; i < 3; i++)
                {
                    
SetStatusText("˙c2Chat actions enabled!");    
                    
Delay(150);
                    
SetStatusText("");    
                    
Delay(150);
                }
            }
            else
            {
                for(var 
i = 0; i < 3; i++)
                {
                    
SetStatusText("˙c1Chat actions disabled!");    
                    
Delay(150);
                    
SetStatusText("");    
                    
Delay(150);
                }
            }
        }
        if(!
chatActionsDone && isChannelUser(me.account, me.charname))
        {
            
chatActionsDone = true;
            
Delay(Random(waitInChatBeforeActionsMin, waitInChatBeforeActionsMax));
            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 == 1 && joinChatAfterLogin)
        {
            
Delay(Random(waitBeforeEnterChatMin, waitBeforeEnterChatMax));
            
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_STATUS, location.name, 0);
                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.gamename, true)) ? ("(" + getGameCounter(me.gamename, true) + ")") : "") + " creation failed!", 0)
                    
Delay(2500);
                }
                
sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
                break;
            }
        }
        else
        {
            if(
joinChannelInChat && gameAnnouncement && me.gamename && isChannelUser(me.account, me.charname))
            {
                var 
tempDelay = (gameAnnouncementDelay > 5000) ? gameAnnouncementDelay : 5000 + 
                            (
gameAnnouncementDelayRandom > 500) ? Random(0, gameAnnouncementDelayRandom) : 500;
                var 
gameText = gameAnnouncement;
                
gameText = gameText.replace("%password", me.gamepassword);
                
gameText = gameText.replace("%game", getGameName(me.gamename));
                
gameText = gameText.replace("%counter", getGameCounter(me.gamename, false));
                
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(), location, true);
        }
        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_GAME, location.name, 0);

        
locationTimeout(5000, location);

        
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_STATUS, location.name, 0);
        
Delay(loginDelay);

        
controlData.setText(controlData.controls.login.editBox.accountName, me.account);

        
sendEventToOOG(D2NT_MGR_LOGIN, location.name, 0);

        
locationTimeout(5000, location);
        break;

    case 
10: // Login Error (this is a fatal error, so stop)
        
sendEventToOOG(D2NT_MGR_RESTART, location.name, 10);
        
Delay(3500);
        break;

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

    case 
12: // Character Select
        
var _time, _control;

        
sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);

        for(
_time = 0 ; _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], 0, 0, 1);
            
controlData.click(controlData.controls.characterSelect.textBox.characterInfo[me.charloc], 0, 0, 1);

            
// 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*1000, location);
        }
        break;

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

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

    case 
15: // New Character
        
break;    

    case 
16: // Character Select - Please Wait popup
        
if(!locationTimeout(pleaseWaitTimeout, location))
            
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*1000, location);
        
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(connectingToBnetTimeout, location))
            
controlData.click(controlData.controls.mainMenu.connecting.button.cancel);
        break;

    case 
22: // Login - Invalid Cdkey (classic or xpac)
        
sendEventToOOG(D2NT_MGR_RESTART, location.name, 3600);
        
Delay(3500);
        break;    

    case 
23: // Character Select - Connecting
        
if(!locationTimeout(characterScreenTimeout, location))
            
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(pleaseWaitTimeout, location))
            
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(15000, location);
        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(gameDoesNotExistDelayMin, gameDoesNotExistDelayMax);
        
lastGameStatus = 0;
        
setNextGameMake();

        
locationTimeout(gameDoesNotExistTimeout, location);
        break;
    }
}

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

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

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

        
inGameAt = (duration < gameMinLength ? gameMinLength - duration : 0);
    }
}

function 
locationTimeout(time, location)
{
    
endtime = GetTickCount() + time;

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

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

function 
timeoutDelay(time, location, showNextGameStatus)
{
    if(
arguments.length < 3)
        
showNextGameStatus = false;
    
    
endtime = GetTickCount() + time;

    while(
endtime > GetTickCount())
    {
        
sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.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.gamename, false))
                    
SetStatusText("˙c8Next game: " + getGameName(me.gamename) + getGameCounter(me.gamename, false) + " (" + 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.gamename, false))
                    
SetStatusText("˙c8Next game: " + getGameName(me.gamename) + getGameCounter(me.gamename, false) + " (" + 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(0, lastGameString.lastIndexOf('-')+1));
}

function 
getGameCounter(lastGameString, simple)
{
    var 
myCount, countString;
    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(accountname, charname)
{
    for(var 
i = 0; i < channelUsers.length; i++)
    {
        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.