[D2NT Release] Game Announcements im Channel

08/23/2010 21:56 hendricius#91
Super Klasse Script Muddy. Vielen Dank :).

Gibt es eventuell eine Funktion has_restarted?

Damit könnte dann der Bot nach jedem game checken, wenn ja --> rejoin den angegebenen channel.

Gruß,
Hendrik
08/23/2010 22:20 Muddy Waters#92
Quote:
Originally Posted by hendricius View Post
Super Klasse Script Muddy. Vielen Dank :).

Gibt es eventuell eine Funktion has_restarted?

Damit könnte dann der Bot nach jedem game checken, wenn ja --> rejoin den angegebenen channel.

Gruß,
Hendrik
Restart im Sinne von Restart nach Crash oder Restart nach Cd Key Wechsel?
(Mit letzterem habe ich mich ehrlich gesagt noch nie beschäftigt, ich könnte nur mutmaßen wo das ansetzt)

Für den ersten Fall habe ich schon eine Lösung implementiert, die aber momentan nur im Paket mit meiner D2NT Version veröffentlicht ist.
Dabei wird ganz einfach der passende Spielname zusammen mit einem Timestamp in einer Textdatei gespeichert. Ist nun aus welchem Grund auch immer kein Spielname definiert, wird die Datei ausgelesen und der darin gespeicherte Name - sofern die Speicherung nicht zulange zurückliegt - übernommen.
Das funktionierte bislang in meinen Feldversuchen ganz gut, aber ich mache eben auch keine Dauertests... :rolleyes:

Ich muss mal schauen, wann ich das hier auf den neuesten Stand bringe, es müssten in jedem Fall minimale Änderungen vorgenommen werden, damit meine laufende Version mit dem standard D2NT Kompatibel ist.

Lg
Muddy
08/24/2010 09:59 den18#93
Quote:
Originally Posted by Muddy_Waters View Post
Um ehrlich zu sein verstehe ich mal wieder nur die Hälfte, so ganz geschickt hast du dich da nicht ausgedrückt. :(

Ich verweise mal auf meine D2NT Version (siehe Signatur) in der die aktuellste Version (aktueller als diese hier) implementiert ist.
Alternativ könntest du auch versuchen, dich so eindeutig und verständlich, dass es auch der letzte versteht (inklusive mir selbst :p ).

Lg
Muddy
Hey sorry dass es nicht so gut rüberkam...

Deinen neuen "Updatet Bot von 20.08.10" hab ich gesehen und gedownloaded.
Jedoch stellte ich fest, dass da keine Assassin config/attack usw gibt...
Ich versuchte die Einstellungen von meinem "Altem BOT" zu kopieren hat aber nicht geklappt.. bekam viele Fehlermeldungen...

Den Bot den ich hab, stellte ich aus anderen Bots zusammen damit die "Assa" auch gut gespielt wierd usw..
Ich wunder mich, wie es überhaupt funktioniert.. aber es geht ^^..

Wenn du bei deinem "Updatet BOT", Assassin Config mit Attack Script einfügen könntest wäre es supper!

ps. Fallen Assa wenn das von wichtigkeit ist.

Viele Grüße
Dennis
08/24/2010 17:34 Muddy Waters#94
Quote:
Originally Posted by den18 View Post
Hey sorry dass es nicht so gut rüberkam...

Deinen neuen "Updatet Bot von 20.08.10" hab ich gesehen und gedownloaded.
Jedoch stellte ich fest, dass da keine Assassin config/attack usw gibt...
Ich versuchte die Einstellungen von meinem "Altem BOT" zu kopieren hat aber nicht geklappt.. bekam viele Fehlermeldungen...

Den Bot den ich hab, stellte ich aus anderen Bots zusammen damit die "Assa" auch gut gespielt wierd usw..
Ich wunder mich, wie es überhaupt funktioniert.. aber es geht ^^..

Wenn du bei deinem "Updatet BOT", Assassin Config mit Attack Script einfügen könntest wäre es supper!

ps. Fallen Assa wenn das von wichtigkeit ist.

Viele Grüße
Dennis
Denke da werde ich dich enttäuschen müssen, da es eigentlich nicht mein Anliegen ist, in Richtung Modsammlung zu gehen und möglichst viele Arbeiten von Dritten einzubinden.

Daher musst du dir das wohl selbst einbinden, da ich nur Sorcs und Barbs nutze, sowas daher nicht brauche und es somit in nächster Zeit auch nicht schreiben werde, tut mir Leid. :(

Ich werde aber mal schauen, dass ich die Tage das hier hochgeladene Script aktualisiere. :)

Lg
Muddy
09/18/2010 06:45 h3xx0r1337#95
Servus,
habe gerade diese Channelfunktion versucht, doch jetzt kommt eine Fehlermeldung
NTBot.ntj (143) : ReferenceError: join Chat after Game is not defined

Hab eigendlich alles eingestellt... hier mal mein Script :

/**
* This file was modified by [Only registered and activated users can see links. Click Here To Register...]
* Check the programming section for updates and further scripts *
* Last Update: 05/28/2010
*/

var gameMinLength = 120000; // time in milliseconds, minimum game length, 180 seconds default (1 game/3 minutes)
var unableToConnectRetry = 5; // time in minutes to retry connecting on connection fail (real value is +/- 1 min)
var realmDownRetry = 300; // time in minutes to retry connecting on a realm down (default is 300 minutes)
var disconnectedRetry = 5; // time in minutes to retry on a disconnection (usually ip ban related)
var cdkeyInUseRetry = 5; // time in minutes to retry on a cdkey in use error message (set to 0 to stop)
var connectingToBnetTimeout = 20000; // time in milliseconds to wait for a login to time out and click cancel and retry
var characterScreenTimeout = 10000; // time in milliseconds to wait for character screen to appear
var pleaseWaitTimeout = 10000; // time in milliseconds to wait for a please wait popup
var createGameThreshold = 15000; // time in milliseconds to wait between making games
var createGameThresholdRandom = 5000; // time in milliseconds to randomly add +/- to the game create time
var createGameTimeout = 15000; // time in milliseconds to register a failed to create game
var waitInLineTimeout = 60000; // time in milliseconds to wait in lines for a create game (60 second default)
var characterSelectDelay = 1000; // time in milliseconds to wait before selecting a character on the char screen
var loginDelay = 1000; // time in milliseconds to wait before submitting login information
var clickDelay = 1000; // wait X milliseconds before next action after a click event
var textDelay = 1000; // wait X milliseconds before next action after inserting text into a textbox
var clickDelayRandom = 500; // random amount of time to add to a click
var textDelayRandom = 500; // random amount of time to add to a text set
var gameDoesNotExistDelayMin = 600000; // how long to wait when a Game Does Not Exist occurs - minimum - default 10 minutes
var gameDoesNotExistDelayMax = 900000; // how long to wait when a Game Does Not Exist occurs - maximum - default 15 minutes
var gameDoesNotExistTimeout = 30000; // how long to wait for the dialog to disappear (default 30 seconds, don't change this)
var joinChatAfterLogin = true; // join chat after login
var joinRandomChannel = false; // if this is true, will join a random channel, otherwise it will use the channel below..
var joinChannelInChat = "OP LastBaal"; // leave blank not to join a private channel
var channelLogin = false; // type ".login" once after joining the channel
var channelUsers = new Array(); // dynamic array that holds channel users
//---------------------------------------------------------------------------------------------------------------------------------------------------------
// add any char/account here that is supposed to perform chat actions/game announcements or join a private channel
channelUsers.push("ZeRo1337");
channelUsers.push("heXXor_eX");
//----------------------------------------------------------------------------------------------------------------------------------------------------------
//These key expressions are replaced that way: %game --> "gamename-",%counter --> number of the next game, %time --> time in seconds till game creation, %password --> game password
//Note that the announcement will start after the first run, so there won't be any anncouncement right after login
var gameAnnouncement = "Test Announcement: Join %eX-Diabaals%counter//%password in %10."; // leave blank not to post a channel announcement
var gameAnnouncementDelay = 5000; // wait X milliseconds before posting the announcement message (don't set this too low!)
var gameAnnouncementDelayRandom = 500; // random amount of time to add to a to the announcement delay
//----------------------------------------------------------------------------------------------------------------------------------------------------------
var waitBeforeEnterChatMin = 1000; // min how long to wait before entering chat
var waitBeforeEnterChatMax = 2000; // max how long to wait before entering chat
var waitInChatBeforeActionsMin = 2000; // min how long to wait before joining channel
var waitInChatBeforeActionsMax = 3000; // max how long to wait before joining channel

Grüße
09/18/2010 08:40 lanara#96
Vielleicht solltest du das ganze Script von Muddy nehmen, und nicht nur den Anfang. Und wenn du nochmal Code postest, dann machs mit [code][./code].
09/21/2010 21:14 GoZu1991#97
bekomme da immer eine fehlermeldung,

dateipfad/NTBot(1 anderes mal 2):SyntaxError :missing ; before statement

wodran könnte das liegen

Mfg Gozu
10/04/2010 21:22 Psycho3840#98
Hallo habe mal ne frage
weiß wer wie ich bei d2nt 3.0 einstelle das er im cannel next game ansage macht??
10/04/2010 22:43 lanara#99
Quote:
Originally Posted by Psycho3840 View Post
Hallo habe mal ne frage
weiß wer wie ich bei d2nt 3.0 einstelle das er im cannel next game ansage macht??
Indem du den ersten Post dieses Threads liest.
10/15/2010 02:37 Stein100#100
Code:
var joinChatAfterLogin        = true;        // join chat after login
var joinRandomChannel        = false;        // if this is true, will join a random channel, otherwise it will use the channel below..
var joinChannelInChat        = "OP lastbaal";        // leave blank not to join a private channel
var channelLogin            = true;    // type ".login" once after joining the channel
var channelUsers             = new Array(); // dynamic array that holds channel users
//---------------------------------------------------------------------------------------------------------------------------------------------------------
// add any char/account here that is supposed to perform chat actions/game announcements or join a private channel
channelUsers.push("painbad");
channelUsers.push("HaoFen");
//----------------------------------------------------------------------------------------------------------------------------------------------------------
//These key expressions are replaced that way: %game --> "gamename-",%counter --> number of the next game, %time --> time in seconds till game creation, %password --> game password
//Note that the announcement will start after the first run, so there won't be any anncouncement right after login
var gameAnnouncement        = "Test Announcement: Join %game%counter//%password in %time seconds."; // leave blank not to post a channel announcement
var gameAnnouncementDelay    = 5000;        // wait X milliseconds before posting the announcement message (don't set this too low!)
var gameAnnouncementDelayRandom = 500; // random amount of time to add to a to the announcement delay
//----------------------------------------------------------------------------------------------------------------------------------------------------------
var waitBeforeEnterChatMin    = 1000;        // min how long to wait before entering chat
Code:
var gameAnnouncement        = "Test Announcement: Join %game%counter//%password in %time seconds."; // leave blank not to post a channel announcement
wie muss ich diesen teil ausfüllen wenn ich meine games haobaal nennen will?
10/15/2010 09:34 xXSpeedboyXx#101
einfach im d2nt manager die games einen namen geben.

dann macht er das von ganz alleine. :D
10/20/2010 01:34 wc-cleaner#102
es läuft alles einwandfrei :)
10/21/2010 17:50 hippe2k#103
it join the chat, but doesn't say anntything then.

Quote:
var joinChatAfterGame = true; // join chat after leaving a game
var joinChatAfterLogin = true; // join chat after login
var joinRandomChannel = false; // if this is true, will join a random channel, otherwise it will use the channel below..
var joinChannelInChat = "OP PornoBaal"; // leave blank not to join a private channel
var channelLogin = false; // type ".login" once after joining the channel
var channelUsers = new Array(); // dynamic array that holds channel users

// account and account name are correctly spelled and case sensitive.
channelUsers.push("flippie");
channelUsers.push("flippie_hammer");

var gameAnnouncement = "Join: %game%counter in %time seconds.";
var gameAnnouncementDelay = 1000;
var gameAnnouncementDelayRandom = 500;
11/17/2010 05:06 es1d2#104
läuft
12/05/2010 01:22 bot_for_fun_#105
bei mir klappt iwas nicht

Code:
/**
*	This file was modified by [Only registered and activated users can see links. Click Here To Register...]				
*	Check the programming section for updates and further scripts							*
*	Last Update: 05/28/2010							
*/

var gameMinLength		= 80000;	// time in milliseconds, minimum game length, 180 seconds default (1 game/3 minutes)
var unableToConnectRetry	= 5;		// time in minutes to retry connecting on connection fail (real value is +/- 1 min)
var realmDownRetry		= 5;		// time in minutes to retry connecting on a realm down (default is 300 minutes)
var disconnectedRetry		= 5;		// time in minutes to retry on a disconnection (usually ip ban related)
var cdkeyInUseRetry		= 5;		// time in minutes to retry on a cdkey in use error message (set to 0 to stop)
var connectingToBnetTimeout	= 20000;	// time in milliseconds to wait for a login to time out and click cancel and retry
var characterScreenTimeout	= 10000;	// time in milliseconds to wait for character screen to appear
var pleaseWaitTimeout		= 10000;	// time in milliseconds to wait for a please wait popup
var createGameThreshold		= 3500;		// time in milliseconds to wait between making games
var createGameThresholdRandom	= 5000;		// time in milliseconds to randomly add +/- to the game create time
var createGameTimeout		= 1500;	// time in milliseconds to register a failed to create game
var waitInLineTimeout		= 6000;	// time in milliseconds to wait in lines for a create game (60 second default)
var characterSelectDelay	= 1000;		// time in milliseconds to wait before selecting a character on the char screen
var loginDelay			= 1000;		// time in milliseconds to wait before submitting login information
var clickDelay			= 500;		// wait X milliseconds before next action after a click event
var textDelay			= 500;		// wait X milliseconds before next action after inserting text into a textbox
var clickDelayRandom		= 500;		// random amount of time to add to a click
var textDelayRandom		= 500;		// random amount of time to add to a text set
var gameDoesNotExistDelayMin	= 600000; 	// how long to wait when a Game Does Not Exist occurs - minimum - default 10 minutes
var gameDoesNotExistDelayMax	= 900000; 	// how long to wait when a Game Does Not Exist occurs - maximum - default 15 minutes
var gameDoesNotExistTimeout	= 30000;	// how long to wait for the dialog to disappear (default 30 seconds, don't change this)
[COLOR="Red"]var joinChatAfterLogin		= true;		// join chat after login
var joinRandomChannel		= false;		// if this is true, will join a random channel, otherwise it will use the channel below..[/COLOR]
[COLOR="Red"]var joinChannelInChat		= "OP Pornobaal";		// leave blank not to join a private channel
var channelLogin			= true;	// type ".login" once after joining the channel
var channelUsers 			= new Array(); // dynamic array that holds channel users
//---------------------------------------------------------------------------------------------------------------------------------------------------------[/COLOR]
[COLOR="Red"]// add any char/account here that is supposed to perform chat actions/game announcements or join a private channel
channelUsers.push("someAccountName");
channelUsers.push("someCharName");[/COLOR]    // [B]was soll da denn hin ?[/B]
[COLOR="Red"]//----------------------------------------------------------------------------------------------------------------------------------------------------------
//These key expressions are replaced that way: %game --> "gamename-",%counter --> number of the next game, %time --> time in seconds till game creation, %password --> game password
//Note that the announcement will start after the first run, so there won't be any anncouncement right after login
var gameAnnouncement		= "Join %game%counter// in %time seconds."; // leave blank not to post a channel announcement
var gameAnnouncementDelay	= 5000;		// wait X milliseconds before posting the announcement message (don't set this too low!)
var gameAnnouncementDelayRandom = 500; // random amount of time to add to a to the announcement delay
//----------------------------------------------------------------------------------------------------------------------------------------------------------[/COLOR]
var waitBeforeEnterChatMin	= 1000;		// min how long to wait before entering chat
var waitBeforeEnterChatMax	= 2000;		// max how long to wait before entering chat
var waitInChatBeforeActionsMin	= 2000;		// min how long to wait before joining channel
var waitInChatBeforeActionsMax	= 3000;		// max how long to wait before joining channel

// DONT EDIT 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;

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(750);
					SetStatusText("");	
					Delay(750);
				}
			}
			else
			{
				for(var i = 0; i < 3; i++)
				{
					SetStatusText("ÿc1Chat actions disabled!");	
					Delay(750);
					SetStatusText("");	
					Delay(750);
				}
			}
		}
		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;
}

bitte einmal durchgucken danke

wer mir hilft bekommt natürlich ein THX ;) :handsdown::handsdown: