kukbot über d2nt

12/20/2011 21:46 purgeye#1
ist das noch möglich? da der beitrag im tutorial deleted bzw geleert wurde... hoffe mir kann jemand helfen
12/21/2011 16:54 mirkoregge#2
Geht noch:

neuer Entry Point:

Code:
/////////////////////////////////////////////////////////////////////////////////////////////////////////// 
// added a line that sends whisper game name for leechers when in game revised by stairbuilder on 1-2-11 //
// added fix for white screen of death credit to korean modders revised by stairbuilder on 2-17-11       //
// added fix for creation button sticking revised by stairbuilder on 2-17-11      						 //
//////////// for use with NTLeechStarter2.ntj /////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////
//        characters in your game setting: 		 //		
///////////////////////////////////////////////////
var characterdiff        =  "90"; 						//use this to keep those pesky spam bots out of the f'ing game
														//note you must manually hit the check box the first time for this to work
var maxNumberOfPlayersss = "8";							//use this to set the maximum number of players allowed in your game

///////////////////////////////////////
//        Channel Settings: 		 //					//These controll what if any channel you join
///////////////////////////////////////
var joinChatAfterGame			= true;					// join chat after leaving a game
var joinRandomChannel			= false;		 		// if this is true, will join a random channel, otherwise it will use the channel below..
var joinChannelInChat			= "op channel";			// Channel you want your bot to join, leave blank to not join a private channel

///////////////////////////////////////
//        Message Settings: 		 //					// These controll what your bot sais to the leechers will also send a log incommand to a channel bot
///////////////////////////////////////
var chatMessageOnJoin			= ".login";				// Chat Message to say Login command for channel bot will only be sent once
var chatMessageAfterGame1		= "";					// Optional chat message Line #1 to say after each game on Channel
var chatMessageAfterGame2		= "";					// Optional chat message Line #2 to say after each game on Channel
var chatMessageAfterGame3		= "";					// Optional chat message Line #3 to say after each game on Channel
var chatMessageAfterGame4		= "";					// Optional chat message Line #4 to say after each game on Channel
var chatMessageAfterGame5		= "";					// Optional chat message Line #5 to say after each game on Channel

///////////////////////////////////////					// These will let you send a message with a game name password and time to your leechers
//      Game Message Settings:       //					// var saygamename must be true for any of these to work
///////////////////////////////////////					// You cant NOT have a - in you game name it will bug it out
var saygamename 			= true;						// Must be true for any of the game message settings to work
var nextgamemessage			= "Next Game:";				// This will come befor your next game name eg "New game is"
var saypassword 			= false;					// This will togle if the bot says your game pw
var saytime 				= false;					// This will togle if the bot says how much time till creation
var timemessage 			= "in ";					// This will come after your pw and befor the time eg. "in about" xx seconds say time MUST be true for this to be used

//////////////////////////////////////
//       Minimum Game Length:       //
//////////////////////////////////////

var gameMinLength		= 100000;						// time in milliseconds, minimum game length, 180 seconds default (1 game/3 minutes)

////////////////////////////////////////
//        Connection Settings:        //
////////////////////////////////////////

var unableToConnectRetry	= 15;						// time in minutes to retry connecting on connection fail (real value is +/- 1 min)
var realmDownRetry		= 900;							// 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		= 10000;					// time in milliseconds to wait between making games
var createGameThresholdRandom	= 1;					// time in milliseconds to randomly add +/- to the game create time
var createGameTimeout		= 20000;					// 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			= 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)
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
var waitBeforeNextLineChatMin	= 500;					// Minimum ammount of time to add after each text line	
var waitBeforeNextLineChatMax	= 1500;					// Maximum ammount of time to add after each text line

// 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 alreadyLoggedIn = false; // will only send the login command once leave as unless you want to login everytime you join a channel
var lastGameMade = GetTickCount();
var lastGameStatus = 0;
var nextGameMake = 0;
var inGameAt = 0;
var chatActionsDone = false;
var lastGameFailed = false;
var tempDelay = Random(waitBeforeNextLineChatMin, waitBeforeNextLineChatMax);
var gameInfo = "";
var bugignor = true;
Include("libs/controlInfo.ntl");
Include("libs/common/NTColorConverter.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

				
					_ingame = true;
						

						sendEventToOOG(D2NT_MGR_INGAME, "In Game", 0);
						Say("/f m in_new_game " + me.gamename);  // this is for leechers to join only after leader is in game
					lastGameStatus = 2; // in game successful

				
			}

			Delay(1000);
		}
		else
		{
			
			if(_ingame)
			{
				My_ExitGame_Check(); // out of korean modded d2nt fixes white screen of death

				_ingame = false;

				sendEventToOOG(D2NT_MGR_READY, "", 0);
			}

			locationAction(controlData.getLocation());

			Delay(500);
		}
	}
}

function locationAction(location)
{
	switch(location.id)
	{
	case 3: // Lobby Chat
		if(!chatActionsDone)
		{
			chatActionsDone = true;
			Delay(Random(waitInChatBeforeActionsMin, waitInChatBeforeActionsMax));

			if(joinRandomChannel || joinChannelInChat != "")
			{
				Say("/join " + (joinRandomChannel ? getRandomString(Random(3,10)) : joinChannelInChat));
				Delay(1000);
					if(!alreadyLoggedIn){
   					alreadyLoggedIn = true;
					if (chatMessageOnJoin.length > 0){
						Say(chatMessageOnJoin);
					}
					}
				Delay(500);
				chatActionsDone = true;
			}
		}
	case 1:	// Lobby
		if(location.id == 1 && joinChatAfterGame)
		{
			Delay(Random(waitBeforeEnterChatMin, waitBeforeEnterChatMax));
			controlData.click(controlData.controls.lobby.button.enterChat);
			break;
		}
		LogPrintSimple(me.account + "MyAccountTest.txt", me.account + " / " + me.charname) // this is to check for 2nd account login

		if(GetTickCount() > nextGameMake)
		{
			lastGameFailed = false;

			switch(lastGameStatus)
			{
			case 0:	
				password = (me.gamepassword);
				game = (getGameName(me.gamename));
				counter = (getGameCounter(me.gamename, false));
				time = (parseInt((nextGameMake - GetTickCount() - tempDelay)/1000+3.0));
				if (saygamename){{
					gameInfo += nextgamemessage + " " + game + counter;
				}
					if (saypassword){
					gameInfo += "//" + password
					}
						if (saytime){
						gameInfo += " " + timemessage + " " + time + " seconds"
						}
				}
				if(joinChatAfterGame){
					if(chatMessageAfterGame1.length > 0){
						Say(chatMessageAfterGame1);
						if(chatMessageAfterGame1.length > 0){
							Delay(tempDelay);
						}
					}
					if(chatMessageAfterGame2.length > 0){
						Say(chatMessageAfterGame2);
							if(chatMessageAfterGame2.length > 0){
								Delay(tempDelay);
							}
					}
					if(chatMessageAfterGame3.length > 0){
						Say(chatMessageAfterGame3);
						if(chatMessageAfterGame3.length > 0){
							Delay(tempDelay);
						}
					}
					if(chatMessageAfterGame4.length > 0){
						Say(chatMessageAfterGame4);
						if(chatMessageAfterGame4.length > 0){
							Delay(tempDelay);
						}
					}
					if(chatMessageAfterGame5.length > 0){
						Say(chatMessageAfterGame5);
						if(chatMessageAfterGame5.length > 0){
							Delay(tempDelay);
						}
					}
					if(saygamename) {
						if(bugignor){
							bugignor = false;
							gameInfo = "";
						}
					else{
						Say(gameInfo)
						Delay(tempDelay)
						gameInfo = "";
					}
					}
				}
				_control = controlData.get(controlData.controls.lobby.button.create); // fixes creation stuck button bug out of unmodded d2nt
				if(_control && _control.pressed)
				{
					controlData.click(controlData.controls.lobby.button.join);
					Delay(500);
				}

				controlData.click(controlData.controls.lobby.button.create);
				_control = controlData.get(controlData.controls.lobby.create.button.useCharacterDifference);
				if(_control && !_control.pressed)
				{
					controlData.click(controlData.controls.lobby.create.button.useCharacterDifference);//checks the use character diff box...does this every time so no go
				}
				controlData.setText(controlData.controls.lobby.create.editBox.characterDifference,(characterdiff)); //level restriction
				controlData.setText(controlData.controls.lobby.create.editBox.maxNumberOfPlayers, (maxNumberOfPlayersss)); //max players
				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(); // reset inGameAt, to wait how long we should have waited..
				lastGameFailed = true;
			case 2:
				outputGameLength();
				lastGameStatus = 0;
				setNextGameMake();
				sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
				break;
			}
		}
		else
			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
		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, COLOR_1 + "Game already exists", 0);

		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);
		//Delay(inGameAt);
		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)
{
	endtime = GetTickCount() + time;

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

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.split("-")[0] + "-");
}

function getGameCounter(lastGameString, simple)
{
   var myCount;
   if(!lastGameString)
      return "-1";
   else
   {
      switch(lastGameString.split("-")[1])
      {
         case "08":
            myCount = 9;
            break;
         case "09":
            myCount = 10;
            break;
		case "99":
			myCount = 00;
			break;
         default:
            myCount = parseInt(lastGameString.split("-")[1]) + 1;
            break;
      }
      if(!simple)
      {
         if(myCount <= 9)
            return ('0' + myCount);
      }
      return myCount;
   }
}

function My_ExitGame_Check()
{
    for (var i = 0; i < 40; i++)
    {
        if (controlData.getLocation().id != undefined)
            break;

        if (i > 38)
        {
            LogPrintSimple(me.account + " StarterTest.txt", "White Screen of Death: Restarting")
			sendEventToOOG(D2NT_MGR_PRINT_LOG, COLOR_1 + "White Screen of Death: Restarting", 0);
            sendEventToOOG(D2NT_MGR_RESTART, "", 5);
            My_Delay(); // make sure and add this also
        }

        Delay(500);
    }
}

function My_Delay(retry)
{
    if (arguments.length < 1)
        retry = 20;

    while (retry-- > 0)
        Delay(1000);
}

function LogPrintSimple(filepath, mesg){ 

	var _filepath = filepath;
	var _mesg = mesg;
	
	var date = new Date().toLocaleFormat("<%a, %b %d, %H:%M>");
	var logfile = FileOpen(_filepath, 2); // opens file 
	if(!logfile)
		var logfile = FileOpen(_filepath, 1); // if file not there then creates it

	logfile.WriteLine(date + " " + _mesg );
	logfile.Close();
}
hf