[D2NT] Public Botten for Dummies

05/31/2011 23:44 muechl#1771
ich hatte das jetzt auch schön öfters, aber nachdem ich fastpick auf false gestelt hab, gehts wunderbar :)
06/01/2011 07:07 Amakra#1772
Quote:
Originally Posted by joshiii View Post
kanns sein dass du iwie 1st und 2cond slot vertauscht hat also das hoto aufm 1st slot ist ?! ._.
Wusste nicht das es ne Rolle spielt, hatte Hoto und Zaka in Slot 1 und CTA sowie Spirit in Slot zwei.
Habe es jetzt mal umgetauscht aber auch dann mag er das nicht machen, und wenn ich von vorneherein beim ausloggen auf Waffenslot mit CTA einstelle Bo´t er zwar, wechsel aber nicht aufs Hoto^^
06/01/2011 10:20 muechl#1773
Neue Frage:

Eigentlich sollte mein bot bei dolls einfach das baal script skippen und dafür bei diablo weitermachen..

aber er leavt immer... was hab ich falsch eingestellt^^
06/01/2011 11:22 TheCrazy11#1774
Quote:
Originally Posted by muechl View Post
Neue Frage:

Eigentlich sollte mein bot bei dolls einfach das baal script skippen und dafür bei diablo weitermachen..

aber er leavt immer... was hab ich falsch eingestellt^^
Oh, dann passt da wohl was nicht.
Leavt er immer oder nur wenn Dolls sind?
Poste mal das Baalscript und die Charconfig des Leaders.
06/01/2011 12:21 gulli12#1775
Quote:
Originally Posted by muechl View Post
ich hatte das jetzt auch schön öfters, aber nachdem ich fastpick auf false gestelt hab, gehts wunderbar :)
mh jo funzt^^
gibt ne möglichkeit, wie da ganze auch mit fast-pickit geht ohne, dass man dauernd dropt?^^
06/01/2011 16:48 style-#1776
eine frage, kann ich dem leader auch beibringen das er bei jeder weave msg ansagt?
06/01/2011 17:24 TheCrazy11#1777
Quote:
Originally Posted by style- View Post
eine frage, kann ich dem leader auch beibringen das er bei jeder weave msg ansagt?
3 Seiten davor steht die Lösung deines Problems...
--> [Only registered and activated users can see links. Click Here To Register...]
06/01/2011 21:51 mirkoregge#1778
So habe heute mal den Bot getestet; läuft soweit gut, aber:
im DiabloLeechfight-Script hängt der Pala sich beim letzen Siegel auf; Pala öffnet letzetes Siegel, schaltet Rücknahme an, bleibt hängen und bricht dann ab; habe heute erst die Version von Seite 1 geladen. Der Fehler tritt nur beim Pala auf; sehr merkwürdig. Jemand ne Idee?

Ich vermute, dass der Fehler hier irgendwo liegt:
Code:
function NT_OpenVenomSealInt(type)
{
	var i, n;
	var _monstername = GetLocaleString(2853);

	var _attackpos = [7835, 5280, 7835, 5300, 7855, 5300, 7855, 5280];
	

	for(i = 0 ; i < _attackpos.length ; i += 2)
	{
		NTM_MoveTo(me.areaid, _attackpos[i], _attackpos[i+1]);

		NTA_ClearPosition(25, true, 2);
	}
	
	NTM_MoveTo(me.areaid, 7843, 5292);
	NTA_ClearPosition(40, true, 2);
	
	for(i = 0 ; i < 3 ; i++)
	{
		if(type == 1)
		{
			NTM_MoveTo(me.areaid, 7871, 5293);
			NTA_ClearPosition(25, true, 2);
			NTM_MoveTo(me.areaid, 7893, 5307);
			NTA_ClearPosition(25, true, 2);
			NTM_MoveTo(me.areaid, 7912, 5280);
			NTA_ClearPosition(25, true, 2);
			NTM_MoveTo(me.areaid, 7931, 5293);
			NTA_ClearPosition(25, true, 2);
			NTM_MoveTo(me.areaid, 7908, 5293);
			NTA_ClearPosition(60, true, 2);
			
			NT_OpenSealInt(392, 7895, 5318);
			
			[COLOR="Red"]if(me.classid == NTC_CHAR_CLASS_PALADIN)
				NTM_MoveTo(me.areaid, 7892, 5298);[/COLOR]
		}
		else
		{
			NTM_MoveTo(me.areaid, 7893, 5274);
			NTA_ClearPosition(25, true, 2);
			NTM_MoveTo(me.areaid, 7927, 5280);
			NTA_ClearPosition(25, true, 2);
			NTM_MoveTo(me.areaid, 7930, 5308);
			NTA_ClearPosition(25, true, 2);
			NTM_MoveTo(me.areaid, 7929, 5294);
			NTA_ClearPosition(60, true, 2);
			
			NT_OpenSealInt(392, 7916, 5310);
			
			[COLOR="Red"]if(me.classid == NTC_CHAR_CLASS_PALADIN)
				NTM_MoveTo(me.areaid, 7927, 5275);[/COLOR]
Vielleicht stimmt ne Zahl nicht?
06/01/2011 22:09 Muddy Waters#1779
Quote:
Originally Posted by Amakra View Post
Wusste nicht das es ne Rolle spielt, hatte Hoto und Zaka in Slot 1 und CTA sowie Spirit in Slot zwei.
Habe es jetzt mal umgetauscht aber auch dann mag er das nicht machen, und wenn ich von vorneherein beim ausloggen auf Waffenslot mit CTA einstelle Bo´t er zwar, wechsel aber nicht aufs Hoto^^
Normal sollte das tatsächlich automatisch gehen. Könntest du mal ein anderes CTA versuchen? Ich hatte bisher schon einmal den Fall, dass ein CTA aus irgendeinem Grund ein zerschossenes Präfix hat, sodass es nicht als CTA erkannt werden konnte - das ist aber extrem selten.

Wie gesagt, normal sollte das so gehen.

P.S.: Das Pushen von Beiträgen ist streng genommen nur im Black Market erlaubt. Wir sehen das hier zwar etwas lockerer, aber Beiträge in unter 24h zu Pushen ist dennoch übertrieben und folglich nicht gerne gesehen.

Quote:
Originally Posted by mirkoregge View Post
So habe heute mal den Bot getestet; läuft soweit gut, aber:
im DiabloLeechfight-Script hängt der Pala sich beim letzen Siegel auf; Pala öffnet letzetes Siegel, schaltet Rücknahme an, bleibt hängen und bricht dann ab; habe heute erst die Version von Seite 1 geladen. Der Fehler tritt nur beim Pala auf; sehr merkwürdig. Jemand ne Idee?

Ich vermute, dass der Fehler hier irgendwo liegt:
Code:
function NT_OpenVenomSealInt(type)
{
	var i, n;
	var _monstername = GetLocaleString(2853);

	var _attackpos = [7835, 5280, 7835, 5300, 7855, 5300, 7855, 5280];
	

	for(i = 0 ; i < _attackpos.length ; i += 2)
	{
		NTM_MoveTo(me.areaid, _attackpos[i], _attackpos[i+1]);

		NTA_ClearPosition(25, true, 2);
	}
	
	NTM_MoveTo(me.areaid, 7843, 5292);
	NTA_ClearPosition(40, true, 2);
	
	for(i = 0 ; i < 3 ; i++)
	{
		if(type == 1)
		{
			NTM_MoveTo(me.areaid, 7871, 5293);
			NTA_ClearPosition(25, true, 2);
			NTM_MoveTo(me.areaid, 7893, 5307);
			NTA_ClearPosition(25, true, 2);
			NTM_MoveTo(me.areaid, 7912, 5280);
			NTA_ClearPosition(25, true, 2);
			NTM_MoveTo(me.areaid, 7931, 5293);
			NTA_ClearPosition(25, true, 2);
			NTM_MoveTo(me.areaid, 7908, 5293);
			NTA_ClearPosition(60, true, 2);
			
			NT_OpenSealInt(392, 7895, 5318);
			
			[COLOR="Red"]if(me.classid == NTC_CHAR_CLASS_PALADIN)
				NTM_MoveTo(me.areaid, 7892, 5298);[/COLOR]
		}
		else
		{
			NTM_MoveTo(me.areaid, 7893, 5274);
			NTA_ClearPosition(25, true, 2);
			NTM_MoveTo(me.areaid, 7927, 5280);
			NTA_ClearPosition(25, true, 2);
			NTM_MoveTo(me.areaid, 7930, 5308);
			NTA_ClearPosition(25, true, 2);
			NTM_MoveTo(me.areaid, 7929, 5294);
			NTA_ClearPosition(60, true, 2);
			
			NT_OpenSealInt(392, 7916, 5310);
			
			[COLOR="Red"]if(me.classid == NTC_CHAR_CLASS_PALADIN)
				NTM_MoveTo(me.areaid, 7927, 5275);[/COLOR]
Vielleicht stimmt ne Zahl nicht?
Ich kann dir zwar nicht direkt sagen, was die Ursache deines Problems ist, aber die von dir markierten Aufrufe halte ich für unwahrscheinlich, da der Rückgabewert von NTM_MoveTo() nicht weiter ausgewertet wird.
Selbst wenn die Funktion hier fehlschlägt, hätte dies keine erkennbaren Folgen im Aufrufkontext.

LG
Muddy
06/01/2011 22:28 style-#1780
Ich habe ein problem, mir is auf gefallen das mien leader wenn er game leavt bevor baal/dia um ist immer absturtz hat oder "bitte warten" bekomm und game dann abstürtz wodurch er nicht weiter macht.

bei "bitte warten" passiert garnichts mehr. das war jetzt 2h der fall.

wenn er game leavt sofort wenn er drin war bekomt er absturtz und game is frozen ( somit restartet er nicht)

wie kann ich das problem beheben? :(
06/02/2011 08:06 Jack_Falcone#1781
Hi !
mein Bot ist nur im channel und refreshed seine fl.
eigentlich habe ich alles richtig eingestellt und die bots haben sich auch in der fl.
wäre sehr nett, wenn mir jemand helfen kann
06/02/2011 08:11 flow-jow#1782
Quote:
Originally Posted by Jack_Falcone View Post
Hi !
mein Bot ist nur im channel und refreshed seine fl.
eigentlich habe ich alles richtig eingestellt und die bots haben sich auch in der fl.
wäre sehr nett, wenn mir jemand helfen kann
hm.. hast den leader-acc exakt so geschrieben wie in der f-list angezeigt?
06/02/2011 08:12 Jack_Falcone#1783
Quote:
Originally Posted by flow-jow View Post
hm.. hast den leader-acc exakt so geschrieben wie in der f-list angezeigt?
name vom acc ist st-jesu,
und char name St-Jesu .


// Leader Account settings
// ================================================== ===========================
var leaderAccountName = "st-jesu";
var leaderName = "St-Jesu";
06/02/2011 09:36 joshiii#1784
[QUOTE=Jack_Falcone;10964227]name vom acc ist st-jesu,
und char name St-Jesu .


ja so probleme kenne ich

wenn der accname und charname gleich sind fuehrt das manchmal zu fehlern
sowas ist mir frueher auch mal passiert ^^ als ich dann nen neuen leader mit anderem namen gemacht habe war alles wieder prima ^^
06/02/2011 10:08 lanara#1785
Quote:
Originally Posted by style- View Post
Ich habe ein problem, mir is auf gefallen das mien leader wenn er game leavt bevor baal/dia um ist immer absturtz hat oder "bitte warten" bekomm und game dann abstürtz wodurch er nicht weiter macht.

bei "bitte warten" passiert garnichts mehr. das war jetzt 2h der fall.

wenn er game leavt sofort wenn er drin war bekomt er absturtz und game is frozen ( somit restartet er nicht)

wie kann ich das problem beheben? :(
Mal mit dieser NTBot probieren:

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              = 190000;

var joinChatAfterLogin         = false; // true = Bot geht in den Chat, um .login/Announces zu machen
var joinChannelInChat          = "OP MyBaal"; // Wenn der Bot in keinen bestimmten Channel soll, dann nichts eintragen
var channelLogin               = true; // 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  = 1000;
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);
		if(!locationTimeout(pleaseWaitTimeout, location))
			sendEventToOOG(D2NT_MGR_RESTART, location.name, 60);
		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;
}