[Release] Muddy's D2NT

03/05/2011 16:53 Muddy Waters#751
Quote:
Originally Posted by jannimanni View Post
sieht bei mir aktuell so aus
Code:
MWConfig_BeltTypeColQuantity["rv"] = [4, 3];
    MWConfig_BeltTypeColQuantity["rv"] = [0, 0];
    MWConfig_BeltTypeColQuantity["rv"] = [0, 0];
hab aber auch schon
Code:
MWConfig_BeltTypeColQuantity["rv"] = [2, 3];
    MWConfig_BeltTypeColQuantity["rv"] = [1, 0];
    MWConfig_BeltTypeColQuantity["rv"] = [1, 0];
ausprobiert
Wobei beide Varianten gleichermaßen falsch sind. ;)

Du wirst tatsächlich nicht die Kommentare gelesen haben und dich an der Einstellung in anderen bzw. meinen alten Versionen gerichtet haben.

Sämtliche Dinge im Bezug auf Gürtel und Tränke werden in Version 1.2 über eine dafür vorgesehen Klasse gesteuert.
Die ganze Umsetzung ist etwas komplexer, ermöglicht dafür aber einige Dinge, die mit den alten und mittlerweile entfernten Funktionen nicht umsetzbar waren.

Es ist nun so, dass du nicht mehr Vorgeben musst, welche Art von Trank in welche Spalte deines Gürtels soll - das ergibt sich alles automatisch.
Stattdessen gibst du nurnoch an, wieviele Spalten du für welche Art von Trank möchtest.
Wenn du also nur Rejuvs nutzen möchtest, wäre die korrekte Einstellung dafür:
Code:
MWConfig_BeltTypeColQuantity["hp"] = [0, 3];
MWConfig_BeltTypeColQuantity["mp"] = [0, 3];
MWConfig_BeltTypeColQuantity["rv"] = [4, 0];
Mit der ersten Zahl lege ich fest, wieviele Spalten ich mit der angegebenen Sorte trank belegen möchte.
Die zweite Zahl ist die Mindestmenge bei einem Besuch in der Stadt, was natürlich für Rejuvs uninteressant ist.
Aber die 3 bei "hp", bedeutet Beispielsweise, dass der Char einen Händler aufsucht, wenn er sich in der Stadt befindet und in einer der "hp" Spalten weniger als 3 Tränke vorhanden sind.

Anfangs etwas ungewohnt, aber eigentlich recht einfach, wenn man den Sinn verstanden hat. :)

Lg
Muddy
03/05/2011 17:01 Onkarion#752
Quote:
Originally Posted by Muddy_Waters View Post
Das liegt vermutlich daran, dass die gute grundsätzlich Immun gegen Kälte ist und somit nicht mit Orb attackiert wird.

Kann deine Sorc auch noch was anderes als Orb? ;)

[...]

Lg
Muddy
Hallo Muddy,

ja, sie ist eine FO/FBall/Meteor-Soso
Bei Immunen ist sie so eingestellt, dass sie sich drauftelt, statikt und der Merc den Rest macht
03/05/2011 17:02 jannimanni#753
aaaaah okay, habs begriffen :D

hab schon angefangen die hp und mp zeile auszukommentieren :P

danköö ^^

edit: Funzt wieder alles prima,

thanks again mud ^^
03/05/2011 17:28 Muddy Waters#754
Quote:
Originally Posted by Onkarion View Post
Hallo Muddy,

ja, sie ist eine FO/FBall/Meteor-Soso
Bei Immunen ist sie so eingestellt, dass sie sich drauftelt, statikt und der Merc den Rest macht
Ich werde nochmal über den Algorithmus drüber schauen, allerdings vermutlich erst morgen, da ich in etwa einer Stunde erstmal für den Rest des Abends weg bin.

Grundsätzlich wollte ich diese ganze Überprüfung der Resistenzen nochmal überarbeiten, sodass neben einem Infinity Söldner auch solche mit Reaper's Toll in die Überprüfung einfließen.

@jannimanni
Sag ich doch, eigentlich alles ganz einfach. :)

Lg
Muddy
03/05/2011 17:36 jexhammer#755
@janni
hatte das selbe problem. Lösung:
Code:
	MWConfig_BeltTypeColQuantity["hp"] = [0, 0];
	MWConfig_BeltTypeColQuantity["mp"] = [0, 0];
	MWConfig_BeltTypeColQuantity["rv"] = [4, 0];
ahh schon gelöst... :D

@Muddy

ich lass das mit den leecherscript einfach ich lass über deins den Bot laufen und über lanaras die leecher und warte bis du nen neues RLS herausbringst wo es integriert ist :D:D trotzdem danke für alles bisher
03/05/2011 18:47 Onkarion#756
Quote:
Originally Posted by Muddy_Waters View Post
Ich werde nochmal über den Algorithmus drüber schauen, allerdings vermutlich erst morgen, da ich in etwa einer Stunde erstmal für den Rest des Abends weg bin.

Grundsätzlich wollte ich diese ganze Überprüfung der Resistenzen nochmal überarbeiten, sodass neben einem Infinity Söldner auch solche mit Reaper's Toll in die Überprüfung einfließen.

@jannimanni
Sag ich doch, eigentlich alles ganz einfach. :)

Lg
Muddy
Ist kein Problem:)
Hab den Bot nochmal runtergeladen und ihn bis auf die Stashbelegung original gelassen. Der Fehler tritt nach wie vor auf.

Grüße
Onkarion
03/05/2011 18:52 Muddy Waters#757
Quote:
Originally Posted by jexhammer View Post
@janni
hatte das selbe problem. Lösung:
Code:
    MWConfig_BeltTypeColQuantity["hp"] = [0, 0];
    MWConfig_BeltTypeColQuantity["mp"] = [0, 0];
    MWConfig_BeltTypeColQuantity["rv"] = [4, 0];
ahh schon gelöst... :D

@Muddy

ich lass das mit den leecherscript einfach ich lass über deins den Bot laufen und über lanaras die leecher und warte bis du nen neues RLS herausbringst wo es integriert ist :D:D trotzdem danke für alles bisher
Nur um es mal erwähnt zu haben: Aller Wahrscheinlichkeit bestünde der Änderungsaufwand aus zwei Buchstaben. ;)

Quote:
Originally Posted by Onkarion View Post
Ist kein Problem:)
Hab den Bot nochmal runtergeladen und ihn bis auf die Stashbelegung original gelassen. Der Fehler tritt nach wie vor auf.

Grüße
Onkarion
Das ist unnötig, liegt wie gesagt am Algorithmus. :)

Lg
Muddy

P.S.: Bin jetzt erstmal weg, eventuell schaue ich spät Abends nochmal rein. ;)
03/05/2011 19:47 jexhammer#758
ahh ich glaube ich habs :D
03/05/2011 20:14 jexhammer#759
Ich habs jetzt. Läuft soweit alles ganz gut, aber was du letztens meintest ist eingetreten, er erkennt nicht das der Run vorbei ist. Er stoppt zwar das Script aber steht ewig im Spiel. Hab Das Leechscript mal dran vllt kannst mir ja nochmal mit 1-2 Zeilen helfen :D

Code:
// 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 zxetay = false;
var samegame = '';
var oldgame = '';
var check = 1;

Include("libs/controlInfo.ntl");
Include("libs/common/NTCommon.ntl");
//Include("joinBotSettings.ntl");
NTC_IncludeLibs();
var controlData = new controlInfo();

var game = '';

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)
			{
			if(zxetay){
							if(Load("NTBot/NTMule.ntj"))
				{
					_ingame = true;

					sendEventToOOG(D2NT_MGR_INGAME, "In Game", 0);
					lastGameStatus = 2; // in game successful
				}
			
			}
			
			else {
			
			
				if(Load("NTBot/NTBotGame.ntj"))
				{
					_ingame = true;

					sendEventToOOG(D2NT_MGR_INGAME, "In Game", 0);
					lastGameStatus = 2; // in game successful
				}
			}
}
			Delay(1000);
		}
		else
		{
			if(_ingame)
			{
				_ingame = false;

				sendEventToOOG(D2NT_MGR_READY, "", 0);
			}


			RegisterEvent(EVENT_SCRIPTMSG, NT_ScriptMsgEvents1);




			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(check == 1)
				{
					sendEventToOOG(D2NT_MGR_CREATE_GAME, location.name, 0);
					outputGameLength();
					lastGameStatus = 0;
					setNextGameMake();
					sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
					check = check + 1;
				}
			}
		}

		if(JoinFromChat){
			game = '';
			if (joinChannelInChat)
			Delay (1200);
			//Say('Locating the leader : '+leaderAccountName);

			Say('/f l');
			Delay(ChatFLDelay);
			if(chat = controlData.get(controlData.controls.lobby.chat.textBox.channelText))
			{
				var errors = '';
				var found_leader = false;
				lines = chat.GetText();
				for (var friend = 0; friend < lines.length; friend++)
				{
					if (lines[friend].lastIndexOf(': '+leaderAccountName+',') > -1)
					{
						game = '';
						found_leader = true;
						var regOfflineEnglish=/^\d\s?:\s?(\w*)\s?,\s?offline\s*$/gi;
						var regGameNameEnglish=/^\s*(the\s)?(game\s)?([\w\s-]*\w)\s\(private\)\.\s*$/gi;
						var regGameNameFrench=/^\s*(la\s)?(partie\s)?([\w\s-]*\w)\s\(priv[^\)]*\)\.\s*$/gi;             
						var regGameNameGerman=/^\s*(Destruction\s)?(in\s)?(das\s)?(Spiel\s)?\'([\w\s-]*\w)\'\s\(privat[^\)]*\)\.\s*$/gi;

				if (lines[friend].match(regOfflineEnglish)) 
				
				{
					errors += (errors == '' ? '' : ' ') + 'leader is offline';
				//  if (joinChannelInChat)
					// Say('Leader is offline, delay 10 sec.');
				//  Delay(5000);
				} //err starts here
				if (lines[friend + 1].match(regGameNameEnglish) && lines[friend+1].substr(1, 1) != ':')
				{
					game = lines[friend + 1].replace(regGameNameEnglish, "$3");
				}
				if (!game && lines[friend + 1].match(regGameNameFrench) && lines[friend+1].substr(1, 1) != ':')
				{
					game = lines[friend + 1].replace(regGameNameFrench, "$3");
				}
			
				if (!game && lines[friend + 1].match(regGameNameGerman) && lines[friend+1].substr(1, 1) != ':')
				{
					game = lines[friend + 1].replace(regGameNameGerman, "$5");
				} 
				if (!game && lines[friend + 1].match(regGameNameFrench) && lines[friend+1].substr(1, 1) != ':')
				{
					game = lines[friend + 1].replace(regGameNameFrench, "$3");
				}
				if(!JoinGameAgain)
				{
				 if (game != '' && game != samegame)
				{
					if (joinChannelInChat)
						Delay(500);
						//Say('I found him! In the game ' + game);

					controlData.click(controlData.controls.lobby.button.join);
					Delay (200);
				}
				else
				{
					if(!errors)
					{
						errors = 'leader is not in game.';
					}
				
				}
				}
				
				else
				{
				if (game != '')
				{
					if (joinChannelInChat)
						Delay(500);
						//Say('I found him! In the game ' + game);

					controlData.click(controlData.controls.lobby.button.join);
					Delay (200);
				}
				else
				{
					if(!errors)
					{
						errors = 'leader is not in game.';
					}
				
				}
				
				}
			}
			}
			if (!found_leader && joinChannelInChat)
			{
			if (errors)
				Say('Errors : ' + errors);
			else
				Say('I couldn\'t find the leader in my friend list.');
						Delay(1500);
					}
				}
				else
				{
					if (joinChannelInChat)
					Say('I can\'t read the chat!');
					Delay(1500);
				}
				
			}
			errors = '';
			if(game != '')
			samegame = game;
			break;

			
		case 1:   // Lobby
			if(location.id == 1 && joinChatAfterGame)
			{
				Delay(Random(waitBeforeEnterChatMin, waitBeforeEnterChatMax));
				controlData.click(controlData.controls.lobby.button.enterChat);
				break;
			}

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

				switch(lastGameStatus)
				{
				case 0:
					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(); // 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);
			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);

			RunGC(); // run garbage collector between each game

			locationTimeout(5000, location);

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

		case 5: // Join Game
  		      if(!controlData.get(controlData.controls.lobby.join.editBox.gameName))
     			   {
      		      controlData.click(controlData.controls.lobby.button.create);
       		     Delay (1000);
         		   controlData.click(controlData.controls.lobby.button.join);
         		   Delay (1000);
      			  }
       			 if (game != '')
      			  {
      
       		     controlData.setText( controlData.controls.lobby.join.editBox.gameName, game);
        	    Delay (200);
         	   controlData.setText( controlData.controls.lobby.join.editBox.password, gamepassword);
           	 Delay (200);
 	           controlData.click(controlData.controls.lobby.join.button.joinGame);
	            Delay (800);
 	      controlData.click(controlData.controls.lobby.button.quit);                       
	            Delay (800);
 	           controlData.click(controlData.controls.lobby.button.join); 
	            RunGC(); // run garbage collector between each game
 	           //locationTimeout(1000, location);
 	           lastGameStatus = 1; // pending join
 		  check = 1;
 		       }
		      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
			RunGC(); // run garbage collector between each game

			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, "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);
 			 controlData.click(controlData.controls.lobby.button.quit); 
     			 lastGameStatus = 0;
 			 controlData.click(controlData.controls.lobby.button.quit); 
    			  setNextGameMake();
		}
	}













	function locationActionA(location)
	{
		switch(location.id)
		{

		case 3: // Lobby Chat

			break;

			
		case 1:   // Lobby

			Delay(500);
			controlData.click(controlData.controls.lobby.button.join);
			Delay(500);
			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);

			RunGC(); // run garbage collector between each game

			locationTimeout(5000, location);

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

		case 5: // Join Game
			if(!controlData.get(controlData.controls.lobby.join.editBox.gameName))
			{
				controlData.click(controlData.controls.lobby.button.create);
				Delay (500);
				controlData.click(controlData.controls.lobby.button.join);
				Delay (500);
			}
			
			
			controlData.setText( controlData.controls.lobby.join.editBox.gameName, MuleGame);
			Delay (200);
			controlData.setText( controlData.controls.lobby.join.editBox.password, MuleGamePassword);
			Delay (200);
			controlData.click(controlData.controls.lobby.join.button.joinGame);
			RunGC(); // run garbage collector between each game
			//locationTimeout(1000, location);
			lastGameStatus = 1; // pending join
			check = 1;
			
			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, MuleAccount);
			Delay(1000)
			controlData.setText(controlData.controls.login.editBox.password, MulePassword);
			Delay(500);
			controlData.click(controlData.controls.login.button.logIn);
			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[MuleCharLocation]);
				if(_control && _control.GetText() != undefined)
				break;

				Delay(500);
			}

			if(_time < characterScreenTimeout)
			{
				Delay(characterSelectDelay);

				controlData.click(controlData.controls.characterSelect.textBox.characters[MuleCharLocation], 0, 0, 1);
				controlData.click(controlData.controls.characterSelect.textBox.characterInfo[MuleCharLocation], 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
			RunGC(); // run garbage collector between each game

			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, "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

			controlData.click(controlData.controls.lobby.button.quit);


			//lastGameStatus = 0;
			//setNextGameMake();

			//locationTimeout(gameDoesNotExistTimeout, location);
			break;
		}
	}





	function locationActionB(location)
	{
		switch(location.id)
		{

		case 3: // Lobby Chat
			Delay(5000);
			controlData.click(controlData.controls.lobby.button.create);

			break;

			
		case 1:   // Lobby

			Delay(5000);
			controlData.click(controlData.controls.lobby.button.create);

			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);
			}
			
			controlData.setText( controlData.controls.lobby.create.editBox.gameName, MuleGame);
			Delay (200);
			controlData.setText( controlData.controls.lobby.create.editBox.password, MuleGamePassword);
			Delay (200);
			controlData.click(controlData.controls.lobby.create.button.normal);
			Delay(500);
			controlData.click(controlData.controls.lobby.create.button.createGame);
			Delay(500);	
			
			//sendEventToOOG(D2NT_MGR_CREATE_GAME, location.name, 0);

			RunGC(); // run garbage collector between each game

			locationTimeout(5000, location);

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

		case 5: // Join Game
			if(!controlData.get(controlData.controls.lobby.join.editBox.gameName))
			{
				controlData.click(controlData.controls.lobby.button.create);
				Delay (500);
				controlData.click(controlData.controls.lobby.button.join);
				Delay (500);
			}
			
			
			controlData.setText( controlData.controls.lobby.join.editBox.gameName, MuleGame);
			Delay (200);
			controlData.setText( controlData.controls.lobby.join.editBox.password, MuleGamePassword);
			Delay (200);
			controlData.click(controlData.controls.lobby.join.button.joinGame);
			RunGC(); // run garbage collector between each game
			//locationTimeout(1000, location);
			lastGameStatus = 1; // pending join
			check = 1;
			
			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, MuleAccount);
			Delay(1000)
			controlData.setText(controlData.controls.login.editBox.password, MulePassword);
			Delay(500);
			controlData.click(controlData.controls.login.button.logIn);
			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
			RunGC(); // run garbage collector between each game

			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, "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

			controlData.click(controlData.controls.lobby.button.quit);


			//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 NT_ScriptMsgEvents1(msg)
	{
		
		

		switch(msg)
		{


		case "MULE":

			ExitGame();	
			NTC_SendLogToOOG(NTC_LOG_COMMON, "Log on Mule Account");
			NTC_Delay(2000);
			//ExitGame();
			NTC_Delay(20000);
			controlData.click(controlData.controls.lobby.button.quit);
			NTC_Delay(2000);
			controlData.click(controlData.controls.characterSelect.button.exit);
			NTC_Delay(2000);

			while(1)

			{
				if(!me.ingame){
					locationActionA(controlData.getLocation());
				}
				else{
					Delay(5000);
					Load("NTBot/bots/NTJOIN.ntj");
					break;
				}
			}


			break;
			
			
		case "MULE_START":
			
			Delay(5000);
			while(1)

			{
				if(!me.ingame){
					locationActionB(controlData.getLocation());
				}
				else{
					Delay(5000);
					Load("NTBot/bots/NTMule.ntj");
					break;
				}
			}

zxetay = true;
			
			break;


			
		case "MULE_FULL":
			
			ExitGame();
			NTC_Delay(10000);
			controlData.click(controlData.controls.lobby.button.quit);
			MuleCharLocation++;
						while(1)

			{
				if(!me.ingame){
					locationActionA(controlData.getLocation());
				}
				else{
					Delay(5000);
					Load("NTBot/bots/NTJOIN.ntj");
					break;
				}
			}
			
	
	zxetay  = true;

			break;
			
			
		case "DONE":
		
		ExitGame();
		NTC_Delay(10000);
		NTC_SendLogToOOG(NTC_LOG_COMMON, "Finished Muling!");
		NTC_Delay(2000);
		controlData.click(controlData.controls.lobby.button.quit);
		NTC_Delay(2000);
		controlData.click(controlData.controls.characterSelect.button.exit);
		
		zxetay = false;
			
		}

	}
03/06/2011 03:15 Muddy Waters#760
Quote:
Originally Posted by jexhammer View Post
Ich habs jetzt. Läuft soweit alles ganz gut, aber was du letztens meintest ist eingetreten, er erkennt nicht das der Run vorbei ist. Er stoppt zwar das Script aber steht ewig im Spiel. Hab Das Leechscript mal dran vllt kannst mir ja nochmal mit 1-2 Zeilen helfen :D

Code:
// 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 zxetay = false;
var samegame = '';
var oldgame = '';
var check = 1;

Include("libs/controlInfo.ntl");
Include("libs/common/NTCommon.ntl");
//Include("joinBotSettings.ntl");
NTC_IncludeLibs();
var controlData = new controlInfo();

var game = '';

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)
            {
            if(zxetay){
                            if(Load("NTBot/NTMule.ntj"))
                {
                    _ingame = true;

                    sendEventToOOG(D2NT_MGR_INGAME, "In Game", 0);
                    lastGameStatus = 2; // in game successful
                }
            
            }
            
            else {
            
            
                if(Load("NTBot/[COLOR=Red][B]MW[/B][/COLOR]BotGame.ntj"))
                {
                    _ingame = true;

                    sendEventToOOG(D2NT_MGR_INGAME, "In Game", 0);
                    lastGameStatus = 2; // in game successful
                }
            }
}
            Delay(1000);
        }
        else
        {
            if(_ingame)
            {
                _ingame = false;

                sendEventToOOG(D2NT_MGR_READY, "", 0);
            }


            RegisterEvent(EVENT_SCRIPTMSG, NT_ScriptMsgEvents1);




            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(check == 1)
                {
                    sendEventToOOG(D2NT_MGR_CREATE_GAME, location.name, 0);
                    outputGameLength();
                    lastGameStatus = 0;
                    setNextGameMake();
                    sendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
                    check = check + 1;
                }
            }
        }

        if(JoinFromChat){
            game = '';
            if (joinChannelInChat)
            Delay (1200);
            //Say('Locating the leader : '+leaderAccountName);

            Say('/f l');
            Delay(ChatFLDelay);
            if(chat = controlData.get(controlData.controls.lobby.chat.textBox.channelText))
            {
                var errors = '';
                var found_leader = false;
                lines = chat.GetText();
                for (var friend = 0; friend < lines.length; friend++)
                {
                    if (lines[friend].lastIndexOf(': '+leaderAccountName+',') > -1)
                    {
                        game = '';
                        found_leader = true;
                        var regOfflineEnglish=/^\d\s?:\s?(\w*)\s?,\s?offline\s*$/gi;
                        var regGameNameEnglish=/^\s*(the\s)?(game\s)?([\w\s-]*\w)\s\(private\)\.\s*$/gi;
                        var regGameNameFrench=/^\s*(la\s)?(partie\s)?([\w\s-]*\w)\s\(priv[^\)]*\)\.\s*$/gi;             
                        var regGameNameGerman=/^\s*(Destruction\s)?(in\s)?(das\s)?(Spiel\s)?\'([\w\s-]*\w)\'\s\(privat[^\)]*\)\.\s*$/gi;

                if (lines[friend].match(regOfflineEnglish)) 
                
                {
                    errors += (errors == '' ? '' : ' ') + 'leader is offline';
                //  if (joinChannelInChat)
                    // Say('Leader is offline, delay 10 sec.');
                //  Delay(5000);
                } //err starts here
                if (lines[friend + 1].match(regGameNameEnglish) && lines[friend+1].substr(1, 1) != ':')
                {
                    game = lines[friend + 1].replace(regGameNameEnglish, "$3");
                }
                if (!game && lines[friend + 1].match(regGameNameFrench) && lines[friend+1].substr(1, 1) != ':')
                {
                    game = lines[friend + 1].replace(regGameNameFrench, "$3");
                }
            
                if (!game && lines[friend + 1].match(regGameNameGerman) && lines[friend+1].substr(1, 1) != ':')
                {
                    game = lines[friend + 1].replace(regGameNameGerman, "$5");
                } 
                if (!game && lines[friend + 1].match(regGameNameFrench) && lines[friend+1].substr(1, 1) != ':')
                {
                    game = lines[friend + 1].replace(regGameNameFrench, "$3");
                }
                if(!JoinGameAgain)
                {
                 if (game != '' && game != samegame)
                {
                    if (joinChannelInChat)
                        Delay(500);
                        //Say('I found him! In the game ' + game);

                    controlData.click(controlData.controls.lobby.button.join);
                    Delay (200);
                }
                else
                {
                    if(!errors)
                    {
                        errors = 'leader is not in game.';
                    }
                
                }
                }
                
                else
                {
                if (game != '')
                {
                    if (joinChannelInChat)
                        Delay(500);
                        //Say('I found him! In the game ' + game);

                    controlData.click(controlData.controls.lobby.button.join);
                    Delay (200);
                }
                else
                {
                    if(!errors)
                    {
                        errors = 'leader is not in game.';
                    }
                
                }
                
                }
            }
            }
            if (!found_leader && joinChannelInChat)
            {
            if (errors)
                Say('Errors : ' + errors);
            else
                Say('I couldn\'t find the leader in my friend list.');
                        Delay(1500);
                    }
                }
                else
                {
                    if (joinChannelInChat)
                    Say('I can\'t read the chat!');
                    Delay(1500);
                }
                
            }
            errors = '';
            if(game != '')
            samegame = game;
            break;

            
        case 1:   // Lobby
            if(location.id == 1 && joinChatAfterGame)
            {
                Delay(Random(waitBeforeEnterChatMin, waitBeforeEnterChatMax));
                controlData.click(controlData.controls.lobby.button.enterChat);
                break;
            }

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

                switch(lastGameStatus)
                {
                case 0:
                    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(); // 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);
            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);

            RunGC(); // run garbage collector between each game

            locationTimeout(5000, location);

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

        case 5: // Join Game
                if(!controlData.get(controlData.controls.lobby.join.editBox.gameName))
                    {
                    controlData.click(controlData.controls.lobby.button.create);
                    Delay (1000);
                    controlData.click(controlData.controls.lobby.button.join);
                    Delay (1000);
                    }
                    if (game != '')
                    {
      
                    controlData.setText( controlData.controls.lobby.join.editBox.gameName, game);
                Delay (200);
                controlData.setText( controlData.controls.lobby.join.editBox.password, gamepassword);
                Delay (200);
                controlData.click(controlData.controls.lobby.join.button.joinGame);
                Delay (800);
           controlData.click(controlData.controls.lobby.button.quit);                       
                Delay (800);
                controlData.click(controlData.controls.lobby.button.join); 
                RunGC(); // run garbage collector between each game
                //locationTimeout(1000, location);
                lastGameStatus = 1; // pending join
           check = 1;
                }
              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
            RunGC(); // run garbage collector between each game

            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, "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);
              controlData.click(controlData.controls.lobby.button.quit); 
                  lastGameStatus = 0;
              controlData.click(controlData.controls.lobby.button.quit); 
                  setNextGameMake();
        }
    }













    function locationActionA(location)
    {
        switch(location.id)
        {

        case 3: // Lobby Chat

            break;

            
        case 1:   // Lobby

            Delay(500);
            controlData.click(controlData.controls.lobby.button.join);
            Delay(500);
            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);

            RunGC(); // run garbage collector between each game

            locationTimeout(5000, location);

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

        case 5: // Join Game
            if(!controlData.get(controlData.controls.lobby.join.editBox.gameName))
            {
                controlData.click(controlData.controls.lobby.button.create);
                Delay (500);
                controlData.click(controlData.controls.lobby.button.join);
                Delay (500);
            }
            
            
            controlData.setText( controlData.controls.lobby.join.editBox.gameName, MuleGame);
            Delay (200);
            controlData.setText( controlData.controls.lobby.join.editBox.password, MuleGamePassword);
            Delay (200);
            controlData.click(controlData.controls.lobby.join.button.joinGame);
            RunGC(); // run garbage collector between each game
            //locationTimeout(1000, location);
            lastGameStatus = 1; // pending join
            check = 1;
            
            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, MuleAccount);
            Delay(1000)
            controlData.setText(controlData.controls.login.editBox.password, MulePassword);
            Delay(500);
            controlData.click(controlData.controls.login.button.logIn);
            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[MuleCharLocation]);
                if(_control && _control.GetText() != undefined)
                break;

                Delay(500);
            }

            if(_time < characterScreenTimeout)
            {
                Delay(characterSelectDelay);

                controlData.click(controlData.controls.characterSelect.textBox.characters[MuleCharLocation], 0, 0, 1);
                controlData.click(controlData.controls.characterSelect.textBox.characterInfo[MuleCharLocation], 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
            RunGC(); // run garbage collector between each game

            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, "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

            controlData.click(controlData.controls.lobby.button.quit);


            //lastGameStatus = 0;
            //setNextGameMake();

            //locationTimeout(gameDoesNotExistTimeout, location);
            break;
        }
    }





    function locationActionB(location)
    {
        switch(location.id)
        {

        case 3: // Lobby Chat
            Delay(5000);
            controlData.click(controlData.controls.lobby.button.create);

            break;

            
        case 1:   // Lobby

            Delay(5000);
            controlData.click(controlData.controls.lobby.button.create);

            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);
            }
            
            controlData.setText( controlData.controls.lobby.create.editBox.gameName, MuleGame);
            Delay (200);
            controlData.setText( controlData.controls.lobby.create.editBox.password, MuleGamePassword);
            Delay (200);
            controlData.click(controlData.controls.lobby.create.button.normal);
            Delay(500);
            controlData.click(controlData.controls.lobby.create.button.createGame);
            Delay(500);    
            
            //sendEventToOOG(D2NT_MGR_CREATE_GAME, location.name, 0);

            RunGC(); // run garbage collector between each game

            locationTimeout(5000, location);

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

        case 5: // Join Game
            if(!controlData.get(controlData.controls.lobby.join.editBox.gameName))
            {
                controlData.click(controlData.controls.lobby.button.create);
                Delay (500);
                controlData.click(controlData.controls.lobby.button.join);
                Delay (500);
            }
            
            
            controlData.setText( controlData.controls.lobby.join.editBox.gameName, MuleGame);
            Delay (200);
            controlData.setText( controlData.controls.lobby.join.editBox.password, MuleGamePassword);
            Delay (200);
            controlData.click(controlData.controls.lobby.join.button.joinGame);
            RunGC(); // run garbage collector between each game
            //locationTimeout(1000, location);
            lastGameStatus = 1; // pending join
            check = 1;
            
            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, MuleAccount);
            Delay(1000)
            controlData.setText(controlData.controls.login.editBox.password, MulePassword);
            Delay(500);
            controlData.click(controlData.controls.login.button.logIn);
            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
            RunGC(); // run garbage collector between each game

            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, "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

            controlData.click(controlData.controls.lobby.button.quit);


            //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 NT_ScriptMsgEvents1(msg)
    {
        
        

        switch(msg)
        {


        case "MULE":

            ExitGame();    
            NTC_SendLogToOOG(NTC_LOG_COMMON, "Log on Mule Account");
            NTC_Delay(2000);
            //ExitGame();
            NTC_Delay(20000);
            controlData.click(controlData.controls.lobby.button.quit);
            NTC_Delay(2000);
            controlData.click(controlData.controls.characterSelect.button.exit);
            NTC_Delay(2000);

            while(1)

            {
                if(!me.ingame){
                    locationActionA(controlData.getLocation());
                }
                else{
                    Delay(5000);
                    Load("NTBot/bots/NTJOIN.ntj");
                    break;
                }
            }


            break;
            
            
        case "MULE_START":
            
            Delay(5000);
            while(1)

            {
                if(!me.ingame){
                    locationActionB(controlData.getLocation());
                }
                else{
                    Delay(5000);
                    Load("NTBot/bots/NTMule.ntj");
                    break;
                }
            }

zxetay = true;
            
            break;


            
        case "MULE_FULL":
            
            ExitGame();
            NTC_Delay(10000);
            controlData.click(controlData.controls.lobby.button.quit);
            MuleCharLocation++;
                        while(1)

            {
                if(!me.ingame){
                    locationActionA(controlData.getLocation());
                }
                else{
                    Delay(5000);
                    Load("NTBot/bots/NTJOIN.ntj");
                    break;
                }
            }
            
    
    zxetay  = true;

            break;
            
            
        case "DONE":
        
        ExitGame();
        NTC_Delay(10000);
        NTC_SendLogToOOG(NTC_LOG_COMMON, "Finished Muling!");
        NTC_Delay(2000);
        controlData.click(controlData.controls.lobby.button.quit);
        NTC_Delay(2000);
        controlData.click(controlData.controls.characterSelect.button.exit);
        
        zxetay = false;
            
        }

    }
Ganz schön chaotisch das ganze, aber jedem das seine. :)
Ich habe dir die notwendige Änderung mal fett rot hervorgehoben.

Damit das Bot Script korrekt beendet wird, musst du ebenfalls nichts weiter machen, als sicherzustellen, dass die Script messages an das richtige Script gesendet werden.
Das wird dort NTBotGame.ntj heissen, heisst bei mir aber MWBotGame.ntj.

Einfach an allen Stellen entsprechend umbenennen und es sollte gehen. ;)

Lg
Muddy
03/06/2011 11:08 kal_el#761
Quote:
Wollt ihr beispielsweise intensiv Caster Amulette craften, bietet es sich an, dieses Rezept doppelt einzufügen.
also einfach nur in der MWConfig_GlobalSettings.ntl
doppelt reinschreiben?
oder sonst noch wo?

edit:
die num pad meldung "2"
treshhold.. da steht bei health chicken "669" beim ersten game start.. kann man das irgendwie rücksetzen... oder wird das von selbst erledigt'?

edit 2: 3.4 Die Globale Config

Quote:
Auch hier solltet ihr alles nach euren Wünschen anpassen, aber dabei im Hinterkopf behalten, dass die dortigen Einstellungen für sämtliche Chars übernommen werden.
also, wenn ich 2 chars laufen hab, cuben beide das selbe (global).
soll einer nur ringe machen und einer nur amus, dann füge ich das rezept einfach in der entsprechenden charconfig. unter dem punkt "Cubing Configuration" hinzu... right?

edit 3:
wie erklär ich das jetzt....
Quote:
[MaxQuantity] == 2 && [Name] == KoRune
er nimmt nur 2 ko mit, ok...
er soll danach 2 fal-runen cuben...
und von jeder weiteren rune 1 z.b
würde er dann nachdem er die 2 ko hat noch weitere aufheben um die fal zu cuben?
oder ist danach schluss?
das gilt auch für alle weitere runen die ich haben möchte z.B brauch ich 2 ist.. möchte aber dann noch ne gul haben... würde er dann cuben.. die 2 "ist" unberührt lassen und sich 2 weitere "ist" suchen um ne gul zu cuben?

so eine funktion gabs beim mmbot es wurde das aufbewahrt was man angab und der rest wurde weitergecubed.
ich hoff das war jetzt einigermasen verständlich :)

jetzt aber das letzte edit :) :
NTCows..
zeile 86 ergab nen syntaxfehler
Quote:
if(!NTT_CheckSpace(_leg.xsize, _leg.ysize))
NTTMGR_VisitTown())
hab rot weggemacht, jetzt gehts.
scheint ja dann die richtige stelle gewesen zu sein ...?
ok.. dann an diese stelle ein semikolon setzen :)
03/06/2011 13:08 Muddy Waters#762
Zu 0:
Ja ganz genau, einfach doppelt einfügen, entweder in die Char Config selbst, wenn es für einen bestimmten Char sein soll, oder eben in der globalen Config, wenn es direkt für alle Chars sein soll.

Zu 1:
Inwiefern Rücksetzen?
Das ist ja nur eine Ausgabe, die die Eigenschaften me.chickenhp sowie me.chickenmp ausgibt, welche man nicht direkt kennt, wenn man die Chicken Schwelle prozentual angibt (was man ja nicht mehr unbedingt muss).

Zu 2:
Exakt, siehe 0.

Zu 3:
Nein, weil diese Einstellung nicht das Aufwerten von Runen selbst betrifft.

Ich war der Meinung, dass es eher unwahrscheinlich ist, dass man Runen hochcubt, die man eigentlich lieber so aufbewahren würde.

Deshalb bezieht sich das eher auf die Restlichen Rezepte und somit auf low runes und gems.

Die Idee dabei war, bestimmte lowies aufzubewahren, die man Beispielsweise gerade für ein Runenwort braucht.

Wenn ich also etwa Caster Amulette crafte, während MWConfig_RestrictKeptItemsFromCubing den Wert true hat und dann die folgende Zeile in meinen .nip Files habe:
Code:
[MaxQuantity] == 2 && [Name] == RalRune
Würden die ersten 2 gefundenen RALs nicht zum Cuben verwendet.

Eine dritte würde dann nicht mehr aufgrund der .nip Files aufgehoben, sondern um damit zu Craften.

Zu 4:
Das kommt davon, wenn man Sachen anpasst ohne sie zu testen. :rolleyes:

Und ja, das ist Zeile 86, aber bitte entferne die schließende Klammer nicht nur, sondern ersetze sie stattdessen durch ein Semikolon. ;)

Lg
Muddy
03/06/2011 13:39 ldevil#763
Die neue Version sieht ja ziemlich nett aus. Vorallem das mit der Telekinese find ich Klasse, damit ist das Kisten öffnen gleich viel effizienter :handsdown:

Ich bin dabei das AutoMule mit der neuen Version zu testen. Mal sehen was passiert wenn der Stash voll is :D
03/06/2011 13:46 Muddy Waters#764
Quote:
Originally Posted by ldevil View Post
Die neue Version sieht ja ziemlich nett aus. Vorallem das mit der Telekinese find ich Klasse, damit ist das Kisten öffnen gleich viel effizienter :handsdown:

Ich bin dabei das AutoMule mit der neuen Version zu testen. Mal sehen was passiert wenn der Stash voll is :D
Das war mir eigentlich zwischendurch eingefallen und ich war dann ziemlich verwundert, dass ich das nicht schon viel eher eingbunden habe, da es je eigentlich schnell gemacht ist.

Wenn das mit dem Automule klappt, kannste dich ja mal bei mir melden. Ich hätte nichts dagegen, das fest einzubinden, dann hättest du in Zukunft weniger extra Abeit. :)

Lg
Muddy
03/06/2011 14:19 ldevil#765
Hm, ich weiss nicht wieso, aber ich hab jetzt immer den Fehler gekriegt, dass _ignorestring nicht definiert sei. Hab die Definition jetzt einfach in MWT_CheckStash() eingefügt, nun klappts (wieder), komischerweise hab ich den Fehler erst seit ich nen anderen gefixt habe ;)

Code:
function MWT_Stash_Check()
{
	var _items, _targetSlot;
	[COLOR="Red"]var _ignorestring = _NTT_IgnoredItems.join();[/COLOR]
	
	this.RefreshProperties();
		
	_items = MWC_GetItems(MWC_LOC_INVENTORY);
	
	if(!_items)
		return false;

	for(var i = 0; i < _items.length; i++)
	{
		// Checked whether the item is supposed to be stashed
		if(NTConfig_Columns[_items[i].y][_items[i].x] == 1)
		{
			_check = NTSI_CheckItem(_items[i], true);
			
			if(_ignorestring.indexOf(_items[i].code) != -1 || _check <= 0 || _check == 3)
				continue;
		}
		else
			continue;
			
		
		// The item is supposed to be stash - check if the room will suffice
		_targetSlot = this.GetTargetSlot(_items[i]);

		if(_targetSlot.x > -1) // Return true if a valid stash position was found
			return true;
		else if(_items[i].xsize == 1 && _items[i].ysize == 1)
			return false;
	}

	return false;
}
Liegt das daran, dass du nun ne Stash Klasse hast?

Wär nett wenn du mir das erklären könntest, wie ich es korrekt mache. Weil ich kann ja nicht an deinen Funktionen rumbasteln sonst bin ich noch Schuld, wenn dein Bot nimmer läuft ;)