Register for your free account! | Forgot your password?

You last visited: Today at 18:19

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



[Updated] D2NT Leechbot

Discussion on [Updated] D2NT Leechbot within the Diablo 2 Programming forum part of the Diablo 2 category.

Reply
 
Old 05/03/2011, 18:35   #16
 
elite*gold: 0
Join Date: Feb 2011
Posts: 44
Received Thanks: 13
Danke Idevil leider hab ich das selbe Problem wie mit meinem Leecherscript., dass gelgentlich nen Fehler in der Snagit auftaucht. Meine Vermutung ist, dass wenn der Leader und Leecher das selbe Items picken wollen und der andere schneller ist das ein Fehler verursacht. Das muss dann an Muddys script liegen. Danke trotzdem für deine Arbeit und wer einen ähnlichen Fehler wie bei mir feststellt der ist mit GVEtal gut beraten. Hab auf 2200 Runs 0 Chickens und 0 Fehler. Aber das nur am Rande
jexhammer is offline  
Old 05/06/2011, 23:08   #17
 
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235
Hm, ok. Das Problem kann ja kaum am EntryPoint liegen, der macht ja nichts im Spiel. Aber gut zu wissen, dass der GVEtal das besser kann. Dann weiss ich wo ich suchen muss, falls ich den Fehler auch Mal hab - aber momentan botte ich eh grad nicht wirklich.

Für alle Muddy Fans, die Mühe mit der Anleitung haben, hier die NTBot.ntj (für Muddies Original, nicht das mit AutoMule!)

Code:
/**
*	This file was modified by 
*	Check the programming section for updates and further scripts
*	Last Update: 02/28/2011
*/

var GameMinLength				= 120000;		// time in milliseconds, minimum game length, 180 seconds default (1 game/3 minutes)
var UnableToConnectRetry		= 5;			// time in minutes to retry connecting on connection fail (real value is +/- 1 min)
var RealmDownRetry				= 15;			// 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			= 20000;		// time in milliseconds to wait between making games
var CreateGameThresholdRandom	= 5000;			// time in milliseconds to randomly add +/- to the game create time
var CreateGameTimeout			= 15000;		// time in milliseconds to register a failed to create game
var WaitInLineTimeout			= 60000;		// time in milliseconds to wait in lines for a create game (60 second default)
var CharacterSelectDelay		= 1000;			// time in milliseconds to wait before selecting a character on the char screen
var LoginDelay					= 1000;			// time in milliseconds to wait before submitting login information
var ClickDelay					= 1000;			// wait X milliseconds before next action after a click event
var TextDelay					= 2500;			// wait X milliseconds before next action after inserting text into a textbox
var ClickDelayRandom			= 500;			// random amount of time to add to a click
var TextDelayRandom				= 500;			// random amount of time to add to a text set
var GameDoesNotExistDelayMin	= 600000;		// how long to wait when a Game Does Not Exist occurs - minimum - default 10 minutes
var GameDoesNotExistDelayMax	= 900000;		// how long to wait when a Game Does Not Exist occurs - maximum - default 15 minutes
var GameDoesNotExistTimeout		= 30000;		// how long to wait for the dialog to disappear (default 30 seconds, don't change this)
var JoinChatAfterLogin			= true;			// join chat after login
var JoinRandomChannel			= false;		// if this is true, will join a random channel, otherwise it will use the channel below..
var JoinChannelInChat			= "";// leave blank not to join a private channel
var PerformChannelLogin			= false;		// type ".login" once after joining the channel
var ChannelUsers 				= new Array();	// dynamic array that holds channel users
var MaximumLocationLoops		= 5;			// The maximum number of loops for a single location; if the window is does not respond and is caught in an infinite loop it will be restarted when the number of loops exceeds the one you specify here
var JoinGameKeywords			= new Array("dia", "baal");
var JoinRandomGamesChars		= new Array("");
//---------------------------------------------------------------------------------------------------------------------------------------------------------
// Add any char/account here that is supposed to perform chat actions/game announcements or join a private channel
ChannelUsers.push("Default");
// Or
ChannelUsers.push("Default");

// The following key expressions will be replaced by their actual values:  %game --> "gamename-"  <>  %counter --> number of the next game  <>  %time --> time in seconds till game creation  <>  %password --> game password
// Note that the announcement will start after the first run, so there usually won't be any anncouncement right after login - If the gamename is undefined, the bot will try to load the backup file to announce the upcoming game properly
var GameAnnouncement			= "Creating %game%counter//%password in about %time seconds";			// Leave blank not to post a channel announcement
var GameAnnouncementDelay		= 5000;			// Wait X milliseconds before posting the announcement message (don't set this too low!)
var GameAnnouncementDelayRandom	= 500;			// Random amount of time to add to a to the announcement delay
var UseFileBackupTimeMax		= 30;			// Time in minutes that may pass since last file update - The backup File is updated at the beginning of every single game and is read everytime the name of your previous game is undefined (e.g. at restarts); Set to 0 to deactivate file backup
//----------------------------------------------------------------------------------------------------------------------------------------------------------
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

// Leech settings
var LeaderAccountName = "Default";	// leader account name here
var LeaderGamePW = "Default";			// The password used for the games you want to join
var LeecherAccounts = ["Default"];	// List ALL accounts that use leechscript

// DONT EDIT ANYTHING BELOW THIS

// Set Leecher Settings
var isLeecher = false;
for (var i = 0; i < LeecherAccounts.length; i++)
{
	if (me.account == LeecherAccounts[i])
	{
		isLeecher = true;
	}
}
var OldGame = '';
var Check = 1;

// 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 LocationLoops = new Array(2);
var ChatActionsDone = false;
var LastGameFailed = false;
var JoinedChannel = false;
var JustJoined = true;
var MadeAnnouncement = false;

Include("libs/controlInfo.ntl");
Include("libs/common/NTCommon.ntl");

var ControlData = new controlInfo();

function NTMain()
{
	var _ingame;
	
	Delay(1000);

	_ingame = false;

	ControlData.ClickDelay = ClickDelay;
	ControlData.TextDelay = TextDelay;
	ControlData.ClickDelayRandom = ClickDelayRandom;
	ControlData.TextDelayRandom = TextDelayRandom;

	while(true)
	{
		if(me.ingame)
		{
			if(!InGameAt)
				InGameAt = GetTickCount();
			
			if(!_ingame)
			{
				RunGC(); // run garbage collector between each game

				if(Load("NTBot/MWBotGame.ntj"))
				{
					_ingame = true;
					MadeAnnouncement = false;
					LocationLoops[1] = 0;
					
					MW_WriteBackupFile();
					
					if(me.playtype > 0)
						NT_SendEventToOOG(D2NT_MGR_INGAME, "In Game [IP:" + me.gameserverip.split(".")[3] + "]", 0);
					else
						NT_SendEventToOOG(D2NT_MGR_INGAME, "In Game", 0);

					LastGameStatus = 2; // in game successful
				}
			}

			Delay(1000);
		}
		else
		{
			if(_ingame)
			{
				_ingame = false;

				NT_SendEventToOOG(D2NT_MGR_READY, "", 0);
			}

			NT_LocationAction(ControlData.getLocation());

			Delay(500);
		}
	}
}

function NT_LocationAction(location)
{
	var _randomChannel, _output, _control;
	
	MW_CheckLocationLoops(location);
	
	switch(location.id)
	{
	case 3: // Lobby Chat
		if(JustJoined)
		{
			JustJoined = false;
			if(MW_IsChannelUser())
				_output = "ÿc2Chat actions enabled!";
			else
				_output = "ÿc1Chat actions disabled!";
			
			for(var i = 0; i < 3; i++)
			{
				SetStatusText(_output);
				Delay(500);
				SetStatusText("");
				Delay(500);
			}
		}
		
		if(!ChatActionsDone && MW_IsChannelUser())
		{
			ChatActionsDone = true;
			
			Delay(Random(WaitInChatBeforeActionsMin, WaitInChatBeforeActionsMax));
			
			if(!JoinedChannel && (JoinRandomChannel || JoinChannelInChat != ""))
			{
				_randomChannel = NT_GetRandomString(Random(3,10));
				SetStatusText("ÿc8Joining Channel ÿc;" + (JoinRandomChannel ? _randomChannel : JoinChannelInChat));
				
				Delay(500);
				
				Say("/join " + (JoinRandomChannel ? _randomChannel : JoinChannelInChat));
				JoinedChannel = true;
					
				if(PerformChannelLogin)
				{
					SetStatusText("ÿc8Channel Login...");
					Say(".login");
					Delay(1000);
				}
			}
		}
	case 1:  // Lobby
		var _Lines;
		var chat;
		var _Game = "";
		var _Errors = "";
		var _FoundLeader = false;
		var _LineWithName = "";

		if (location.id == 1 && JoinChatAfterLogin)
		{
			Delay(Random(WaitBeforeEnterChatMin, WaitBeforeEnterChatMax));
			ControlData.click(ControlData.controls.lobby.button.enterChat);
			break;
		}
		if (isLeecher)
		{
			Delay(1000);
			if (chat = ControlData.get(ControlData.controls.lobby.chat.textBox.channelText))
			{
				_Lines = chat.GetText();
				if (_Lines.length > 1)
				{
					for (var _Friend = 0; _Friend < _Lines.length; _Friend++)
					{
						if (_Lines[_Friend].indexOf(LeaderAccountName) > -1)
						{
							_Game = '';
							_FoundLeader = true;
							var regOfflineEnglish=/^\d\s?:\s?(\w*)\s?,\s?offline\s*$/gi;

							if (_Lines[_Friend].match(regOfflineEnglish))
							{
								_Errors += (_Errors == '' ? '' : ' ') + 'leader is offline';
								Delay(5000);
								break;
							}

							_LineWithName = _Lines[_Friend + 2];
							
							if (_LineWithName !== undefined)
								_LineWithName = _LineWithName.substring(4,_LineWithName.length);
								
							
							if (_LineWithName === undefined)
								_LineWithName = _Lines[_Friend + 1];
							else
								_LineWithName = _Lines[_Friend + 1] + _LineWithName;
								
							if (_LineWithName !== undefined)
								_LineWithName = _LineWithName.replace(/^\s+/,"");
							else
								break;
								
							NTC_SendLogToOOG(NTC_LOG_COMMON, "[Debug]Line " + _LineWithName);

							if (_LineWithName.indexOf('called') > -1)
								_Game = _LineWithName.substring(_LineWithName.indexOf('called')+7,_LineWithName.IndexOf('.'));
							else
								_Game = _LineWithName.substring(0,_LineWithName.lastIndexOf('.'));
							
							NTC_SendLogToOOG(NTC_LOG_COMMON, "[Debug]Game " + _Game);
							
							_LineWithName = '';

							if (_Game != '' && _Game != OldGame)
							{
								ControlData.click(ControlData.controls.lobby.button.join);
								Delay(200);
								ControlData.setText(ControlData.controls.lobby.join.editBox.gameName, _Game);
								Delay (200);
								ControlData.setText(ControlData.controls.lobby.join.editBox.password, LeaderGamePW);
								Delay (1234);
								ControlData.click(ControlData.controls.lobby.join.button.joinGame);
								Check = 1;
							}
							else
							{
								if (!_Errors)
									_Errors = 'leader is not in game.';
							}
						}
					}
				}
				if (!_FoundLeader && JoinChannelInChat)
				{
					if (_Errors)
						Say('Errors : ' + _Errors);
					else
						Delay(15000);
				}
			}
			else
			{
				Delay(1500);
			}
			_Errors = '';
			if (_Game != '')
				OldGame = _Game;
			break;
		}
		else
		{
			if (GetTickCount() > NextGameMake)
			{
				LastGameFailed = false;

				switch(LastGameStatus)
				{
				case 0:
					if (JoinRandomGamesChars.indexOf(me.charname) > -1)
					{
						_control = ControlData.get(ControlData.controls.lobby.button.join);
						
						if (_control && _control.pressed)
						{
							ControlData.click(ControlData.controls.lobby.button.create);
							Delay(500);
						}

						ControlData.click(ControlData.controls.lobby.button.join);
					}
					else
					{
						_control = ControlData.get(ControlData.controls.lobby.button.create);
						
						if (_control && _control.pressed)
						{
							ControlData.click(ControlData.controls.lobby.button.join);
							Delay(500);
						}
						
						ControlData.click(ControlData.controls.lobby.button.create);
					}
					NextGameMake = GetTickCount() + CreateGameTimeout; // set our timeout
					NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
					break;
				case 1: // game failed, rollover to reset timer
					InGameAt = GetTickCount();
					LastGameFailed = true;
					Delay(5000);
					
				case 2:
					NT_OutputGameLength();
					LastGameStatus = 0;
					NT_SetNextGameMake();
					if (LastGameFailed)
					{
						SetStatusText("ÿc1Failed to join!");
						NT_SendEventToOOG(D2NT_MGR_PRINT_LOG, "ÿBE0000Game creation failed!", 0);
						Delay(1000);
					}
					NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
					break;
				}
			}
			else
			{
				if (JoinChannelInChat && !MadeAnnouncement && MW_IsChannelUser())
				{
					if (MW_AnnounceGame())
						MadeAnnouncement = true;
				}
				
				MW_TimeoutDelay(NextGameMake - GetTickCount(), location, JoinRandomGamesChars.indexOf(me.charname) == -1);
			}
		}
		break;
	
	case 4: // Create Game
		if(JoinRandomGamesChars.indexOf(me.charname) == -1)
		{
			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);
			}
			
			NT_SendEventToOOG(D2NT_MGR_CREATE_GAME, location.name, 0);

			NT_LocationTimeout(5000, location);

			LastGameMade = GetTickCount();
			LastGameStatus = 1; // pending creation
		}
		break;

	case 5: // Join Game
		if(JoinRandomGamesChars.indexOf(me.charname) > -1)
		{
			var _games, _game;

			_games = ControlData.get(ControlData.controls.lobby.join.textBox.gameList).GetText();
			_game = "";
			
			if(_games)
			{
				for(var i = 0; i < _games.length; i++)
				{
					for(var j = 0; j < JoinGameKeywords.length; j++)
					{
						if(_games[i].toLowerCase().indexOf(JoinGameKeywords[j].toLowerCase()) > -1)
						{
							_game = _games[i];
							i = _games.length;
							break;
						}
					}
				}
			}
			
			if(_game != "")
			{
				SetStatusText("ÿc8Joining Game: " + _game);
				Delay(250);
				ControlData.setText(ControlData.controls.lobby.join.editBox.gameName, _game);
				Delay(1000);
				ControlData.click(ControlData.controls.lobby.join.button.joinGame);

				NT_LocationTimeout(5000, location);
				LastGameMade = GetTickCount();
				LastGameStatus = 1; // pending creation
			}
			else
				Delay(2500);
			
			ControlData.click(ControlData.controls.lobby.button.create);
			Delay(500);
			ControlData.click(ControlData.controls.lobby.button.join);
			Delay(500);
		}
		break;

	case 6: // Ladder
		break;

	case 7: // Channel List
		break;

	case 8: // Main Menu
		if(ControlData.getCurrentRealmIndex() == me.gatewayid)
		{
			NT_OutputGameLength();
			ControlData.click(ControlData.gameTypes[me.playtype]);
		}
		else
			ControlData.click(ControlData.controls.mainMenu.button.gateway);
		break;

	case 9: // Login
		NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name, 0);
		Delay(LoginDelay);

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

		NT_SendEventToOOG(D2NT_MGR_LOGIN, location.name, 0);

		NT_LocationTimeout(5000, location);
		break;

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

	case 11: // Unable To Connect
		MW_TimeoutDelay(UnableToConnectRetry*60*1000, location);
		ControlData.click(ControlData.controls.login.unableToConnect.button.ok);
		break;

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

		NT_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;
			NT_SetNextGameMake();
		}
		else
		{
			ControlData.click(ControlData.controls.characterSelect.button.exit);
			MW_TimeoutDelay(RealmDownRetry*60*1000, location);
		}
		break;

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

	case 14: // Character Select - Disconnected
		MW_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(!NT_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
		MW_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(!NT_LocationTimeout(ConnectingToBnetTimeout, location))
			ControlData.click(ControlData.controls.mainMenu.connecting.button.cancel);
		break;

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

	case 23: // Character Select - Connecting
		if(!NT_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(!NT_LocationTimeout(PleaseWaitTimeout, location))
			ControlData.click(ControlData.controls.lobby.pleaseWait.button.cancel);
		break;
		
	case 26: // Lobby - Game Name Exists
		NT_SendEventToOOG(D2NT_MGR_PRINT_LOG, "ÿBE0000Game already exists", 0);
		SetStatusText("ÿc1Game already exists!");
		InGameAt = 0;
		LastGameStatus = 0;
		NT_SetNextGameMake();

		NT_LocationTimeout(15000, location);
		break;

	case 27: // Gateway Select
		ControlData.clickRealmEntry(me.gatewayid);
		ControlData.click(ControlData.controls.gateway.button.ok);
		break;

	case 28: // Lobby - Game Does Not Exist
		InGameAt = Random(GameDoesNotExistDelayMin, GameDoesNotExistDelayMax);
		LastGameStatus = 0;
		NT_SetNextGameMake();

		NT_LocationTimeout(GameDoesNotExistTimeout, location);
		break;
	}
}

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

function NT_SetNextGameMake()
{
	LastGameMade = GetTickCount();
	NextGameMake = LastGameMade + CreateGameThreshold + Random(0 - CreateGameThresholdRandom, CreateGameThresholdRandom) + InGameAt;
	InGameAt = 0;
	ChatActionsDone = false;
}

function NT_OutputGameLength()
{
	var _duration;
	
	if(InGameAt)
	{
		_duration = GetTickCount() - InGameAt;

		if(_duration < GameMinLength)
			InGameAt = GameMinLength - _duration;
		else
			InGameAt = 0;
	}
}

function NT_LocationTimeout(time, location)
{
	var _endtime = GetTickCount() + time;

	while(ControlData.getLocation().id == location.id && _endtime > GetTickCount())
	{
		if(LocationLoops[1] > 1)
			NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name + " [" + MWC_ConvertTicksToTimeString(_endtime - GetTickCount()) + "] [" + LocationLoops[1] + "]", 0);
		else
			NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name + " [" + MWC_ConvertTicksToTimeString(_endtime - GetTickCount()) + "]", 0);
		
		Delay(1000);
	}

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

function MW_TimeoutDelay(time, location, showNextGameStatus)
{
	var _gamename, _outputString, _timeString;
	
	if(arguments.length < 3)
		showNextGameStatus = false;
	
	_endtime = GetTickCount() + time;
	_gamename = me.gamename;
	_timeString = "";
	
	if(!_gamename)
	{
		_gamename = MW_ReadBackupFile(0);
		
		if(_gamename)
			SetStatusText("ÿc8Using File Backup...");
	}
	
	while(_endtime > GetTickCount())
	{
		_timeString = " [" + MWC_ConvertTicksToTimeString(_endtime - GetTickCount()) + "]";
		
		NT_SendEventToOOG(D2NT_MGR_PRINT_STATUS, location.name + _timeString , 0);
		
		if(showNextGameStatus)
		{
			if(LastGameFailed && parseInt(_endtime-GetTickCount()) > CreateGameThreshold && parseInt((_endtime-GetTickCount())/1000) % 30 >= 0 && parseInt((_endtime-GetTickCount())/1000) % 30 <= 5)
			{
				_outputString = "ÿc1Last game failed!";
				_timeString = "";
			}
			else if(parseInt((_endtime-GetTickCount())/1000) >= 0)
			{
				if(_gamename && MW_GetGameCounter(_gamename, false))
					_outputString = "ÿc8Next game: " + MW_GetGameName(_gamename) + MW_GetGameCounter(_gamename, false);
				else
					_outputString = "ÿc8Game creation pending... ";
			}
			
			MWC_SetStatusText(_outputString, _timeString);
			
			if(me.ingame)
				_endtime = GetTickCount();
		}
		
		Delay(1000);
	}
	
	if(showNextGameStatus)
		SetStatusText("ÿc8Creating game...");
		
	return;
}

function NT_GetRandomString(length)
{
	_retString = "";
	_charSet = "0123456789abcdefghijklmnopqrstuvwxyz";

	while(length--)
	{
		_retString += _charSet.charAt(Random(0, _charSet.length - 1));
		Delay(1);
	}

	return _retString;
}

function MW_GetGameName(lastGameString)
{
	if(!lastGameString)
		return "";
	else
		return lastGameString.substr(0, lastGameString.lastIndexOf('-') + 1);
}

function MW_GetGameCounter(lastGameString, simple)
{
	var _count, _countString;

	if(!lastGameString)
		return "-1";
	else
	{
		_countString = lastGameString.slice(lastGameString.lastIndexOf('-') + 1);
			
		if(_countString[0] == '0')
			_countString = _countString.substr(1);

		_count = parseInt(_countString) + 1;

		if(_count == 100)
			_count = 0;

		if(!simple)
		{
			if(_count <= 9)
				return '0' + _count;
		}

		return _count;
	}
}

function MW_IsChannelUser()
{
	for(var i = 0; i < ChannelUsers.length; i++)
	{
		if(me.account.toLowerCase() == ChannelUsers[i].toLowerCase() || me.charname.toLowerCase() == ChannelUsers[i].toLowerCase())
			return true;
	}
	return false;
}

function MW_ReadBackupFile(type)
{
	var _fhandle, _buffer, _time, _now, _retValue;
	
	_fhandle = FileOpen("/Logs/Temporary Data/" + me.charname + ".channel", 2);
	_retValue = "";
	_now = new Date();
	
	if(_fhandle && _now)
	{
		_buffer = _fhandle.ReadLine();
		
		if(_buffer)
		{
			_time = parseInt(_buffer);
			if(_now.getTime() - _time < UseFileBackupTimeMax*6E4)
			{
				_retValue = _fhandle.ReadLine();
				
				if(type > 0)
					_retValue = _fhandle.ReadLine();
			}
		}
		_fhandle.Close();
	}
	else if(_fhandle)
		_fhandle.Close();
	
	return _retValue;
}

function MW_WriteBackupFile()
{
	var _fhandle, _now;
	
	if(UseFileBackupTimeMax == 0)
		return false;
		
	_fhandle = FileOpen("/Logs/Temporary Data/" + me.charname + ".channel", 1);
	_now = new Date();

	if(_fhandle && _now)
	{
		_fhandle.WriteLine(_now.getTime());
		_fhandle.WriteLine(me.gamename);
		_fhandle.WriteLine(me.gamepassword);
		
		_fhandle.Close();
		
		return true;
	}
	else if(_fhandle)
		_fhandle.Close();
	
	return false;
}

function MW_CheckLocationLoops(location)
{
	if(!location)
		return false;
	
	if(isLeecher)
		MaximumLocationLoops = 900;
		
	if(!LocationLoops[0] || location.id != LocationLoops[0].id)
	{
		LocationLoops[0] = location;
		LocationLoops[1] = 0;
	}
	else if(LocationLoops[0].id != 5)
	{
		LocationLoops[1]++;
		
		if(LocationLoops[1] >= MaximumLocationLoops)
		{
			if(LocationLoops[1] < 1000)
				NT_SendEventToOOG(D2NT_MGR_PRINT_LOG, "ÿBE0000Location Loop Restart!;ÿc1Location Loops: " + LocationLoops[1] + "\nÿBE0000Location: " + LocationLoops[0].name + "\nÿBE0000Location ID: " + LocationLoops[0].id, 0);
			
			LocationLoops[1] = 1000; // Make sure the location loop notification is only shown once
			
			NT_SendEventToOOG(D2NT_MGR_RESTART, location.name, 0);
		}
	}
	
	return true;
}

function MW_AnnounceGame()
{
	var _gamePass, _gameName, _gameText, _delay;

	_gameName = me.gamename;
	
	if(!_gameName)
		_gameName = MW_ReadBackupFile(0);
		
	_gamePass = me.gamepassword;
	
	if(!_gamePass)
		_gamePass = MW_ReadBackupFile(1);
		
	if(_gameName && !me.ingame)
	{
		_delay = (GameAnnouncementDelay > 5000) ? GameAnnouncementDelay : 5000;
		_delay += (GameAnnouncementDelayRandom > 500) ? Random(0, GameAnnouncementDelayRandom) : 500;
		
		_gameText = GameAnnouncement.replace("%password", ((_gamePass) ? _gamePass : "N/A"));
		_gameText = _gameText.replace("%game", MW_GetGameName(_gameName));
		_gameText = _gameText.replace("%counter", MW_GetGameCounter(_gameName, false));
		_gameText = _gameText.replace("%time", parseInt((NextGameMake - GetTickCount() - _delay + ClickDelay + TextDelay) / 1000 + 5));
	
		if(_gameText.indexOf("NaN") > -1)
			return false;
		
		if(parseInt((NextGameMake - GetTickCount() - _delay + ClickDelay + TextDelay) / 1000) > 3)
		{
			Delay(_delay);
			
			return Say(_gameText);
		}
	}
	
	return false;
}
ldevil is offline  
Old 05/06/2011, 23:20   #18
 
seltn's Avatar
 
elite*gold: 0
Join Date: Apr 2010
Posts: 339
Received Thanks: 68
sers!

Hatte das mal mit der oben genannten ntbot.ntj probiert,

konnte 1 leader & 2leecher laufen laufen lassen.

Aber:

Die funktion, dass ein vorgegebner channel gejoint wird, nach dem einloggen funktioniert nich.
Nachdem die Leecher die grüne flist message vom leader erhalten haben und direkt danach jmd was im channel postet, wird dieser text als game name verwendet und nicht der eigentliche gamename des leaders.

Lg Seltn
seltn is offline  
Thanks
1 User
Old 05/06/2011, 23:23   #19
 
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235
Quote:
Originally Posted by seltn View Post
sers!

Hatte das mal mit der oben genannten ntbot.ntj probiert,

konnte 1 leader & 2leecher laufen laufen lassen.

Aber:

Die funktion, dass ein vorgegebner channel gejoint wird, nach dem einloggen funktioniert nich.
Nachdem die Leecher die grüne flist message vom leader erhalten haben und direkt danach jmd was im channel postet, wird dieser text als game name verwendet und nicht der eigentliche gamename des leaders.

Lg Seltn
Das ist natürlich ungünstig, da ich immer leere Chans joine fällt mir sowas nicht auf Muss mal schauen woran das liegen kann.

edit: ja logisch total blöder Fehler den ich beim Versuch Abstände im Spielnamen zu erkennen eingebaut habe. Der Fehler tritt aber nur auf, wenn man einen Punkt im Text danach hat, weil ich nach dem letzten Punkt suche und nicht nach dem ersten nach "called" :rolleyes"
ldevil is offline  
Old 05/06/2011, 23:32   #20
 
seltn's Avatar
 
elite*gold: 0
Join Date: Apr 2010
Posts: 339
Received Thanks: 68
Ich würde ja auch gern leere channels joinen.
Funktioniert bei mir aber aus irgend einem Grund nicht.
Egal ob ich random channel aktiviere oder einen bestimmten vorgebe.

Lg
seltn is offline  
Old 05/06/2011, 23:54   #21
 
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235
Quote:
Originally Posted by seltn View Post
Ich würde ja auch gern leere channels joinen.
Funktioniert bei mir aber aus irgend einem Grund nicht.
Egal ob ich random channel aktiviere oder einen bestimmten vorgebe.

Lg
Hast du die Channel User definiert und dich da auch nicht vertippt?

Code:
ChannelUsers.push("Acc oder Char Name");
Hab's mittlerweile aber ja eh gefixt, das mit dem Punkt. Danke noch für den Hinweis, das hätte ich nie bemerkt ^^
ldevil is offline  
Thanks
1 User
Old 05/07/2011, 00:02   #22
 
seltn's Avatar
 
elite*gold: 0
Join Date: Apr 2010
Posts: 339
Received Thanks: 68
Code:
// Add any char/account here that is supposed to perform chat actions/game announcements or join a private channel
ChannelUsers.push("Default");
// Or
ChannelUsers.push("Default");
Hatte ich nich angefasst, da ich dachte "private channel" is nur was mit "OP ..."
*brainlagg off*

Hast du den Beitrag mit der "neuen" ntbot.ntj editiert?
Also sprich den letzten Punkt mit dem ersten ersetzt?
Sodass ich up to date bleiben kann und das leechscript verbessern.

Thanks!

Lg
seltn is offline  
Old 05/07/2011, 00:28   #23
 
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235
Ja, sollte alles up do date sein in hier, ez muss ich das noch in Muddies Post machen
ldevil is offline  
Old 05/07/2011, 00:28   #24
 
elite*gold: 0
Join Date: Apr 2011
Posts: 203
Received Thanks: 9
Du musst in der Config vom leader auch public mode auf true setzen sonst macht er keine tps auf!
Necro5000 is offline  
Old 05/07/2011, 00:49   #25
 
seltn's Avatar
 
elite*gold: 0
Join Date: Apr 2010
Posts: 339
Received Thanks: 68
Quote:
Originally Posted by Necro5000 View Post
Du musst in der Config vom leader auch public mode auf true setzen sonst macht er keine tps auf!
ich weiß. War aber auch keine Frage meinerseits soweit ich mich erinnern kann und nichts falsches/verwirrendes gepostet habe.
Schließlich funktioniert das Leechscript unter muddys annähernd perfekt.

Lg
seltn is offline  
Old 05/07/2011, 01:10   #26
 
elite*gold: 0
Join Date: Nov 2010
Posts: 605
Received Thanks: 109
hallo und danke für deine arbeit.

da ich großer muddy fan bin ist das top wenn ich nicht immer die bots wechseln muss.

eine frage hab ich doch dazu

Code:
var LeecherAccounts = ["acc"];	// List ALL accounts that use leechscript
list all acc mit welchen zeichen dazwischen ;,.- keine ahnung oder eine eigene zeile für jeden acc?
loki-d2 is offline  
Old 05/07/2011, 01:14   #27
 
seltn's Avatar
 
elite*gold: 0
Join Date: Apr 2010
Posts: 339
Received Thanks: 68
Quote:
Originally Posted by loki-d2 View Post
hallo und danke für deine arbeit.

da ich großer muddy fan bin ist das top wenn ich nicht immer die bots wechseln muss.

eine frage hab ich doch dazu

Code:
var LeecherAccounts = ["acc"];	// List ALL accounts that use leechscript
list all acc mit welchen zeichen dazwischen ; oder eine eigene zeile für jeden acc?
var LeecherAccounts = ["XYZ", "QWERTZ"];

Lg

P.S: Aber loki, hast au schon en funktionierendes leechscript dafür?
seltn is offline  
Thanks
1 User
Old 05/07/2011, 01:23   #28
 
elite*gold: 0
Join Date: Nov 2010
Posts: 605
Received Thanks: 109
ne nix ich test das mal so. also , dann past das schon.
loki-d2 is offline  
Old 05/07/2011, 01:51   #29
 
elite*gold: 0
Join Date: Jul 2006
Posts: 469
Received Thanks: 235
Sollte ja nicht schwer sein was umzuschreiben... aber hab mich selber Mal versucht. Zumindest das Others-BaalLeechFight.ntj funktioniert. Ich glaub das DiaLeechScript ist ziemlich Banane aber habs nicht getestet. Das BaalLeech sollte auch gehen. (Nur hab ich skip on souls drin und grad immer nur souls -.-)
Attached Files
File Type: rar LeechScripts.rar (9.0 KB, 21 views)
ldevil is offline  
Thanks
1 User
Old 05/07/2011, 01:56   #30
 
elite*gold: 0
Join Date: Nov 2010
Posts: 605
Received Thanks: 109
danke aber ganz frech diacofight hast nich auch noch zufällig da ich diabaal runs mach.
was meinst du mit skip on souls,skiped der jetzt immer wenn souls da sind oder wie?
loki-d2 is offline  
Reply


Similar Threads Similar Threads
d2nt bot v3.1 leechbot help
07/29/2010 - Diablo 2 - 6 Replies
kann mir jmd eine genaue Anleitung geben irwie bleibt mein leecher immer im channel sitzen und postet sooft die f list bis ich realm down hab ^^. ...ja ich sollte in den bot topic posten aber bitte... bei 314 Seiten durchlesen ne? :D also pls
D2NT Leechbot Frage
06/13/2010 - Diablo 2 - 2 Replies
Moin alle zusammen. Da ich kein Topic auf anhieb gefunden habe schreibe ich mal hier, ansonsten bitte ich um Entschuldigung. Ich versuche den Leechbot beim D2NT zu konfigurieren, allerdings fliegt alle Nase lang immer ein Char raus aufgrund von Timeout. Das nächste Problem welches sich manchmal stellt ist das, das er mir schreibt Error: Cant find Enemy oder sowas in der Art.
Problem mit dem D2NT Leechbot
06/10/2010 - Diablo 2 - 2 Replies
der funktioniert ja einwandfrei und ich weiß nich ob das so geplant is aber bei baal und sein waves macht er immer wieder town geht tron dann wieder town und immer so weiter!
leechbot bb v1.1 d2nt
06/09/2010 - Diablo 2 - 2 Replies
hi ich habe das problem er nimmt bei mir das tp net und wenn er es nimmt dann geht er runter und leave dann das game! oda er wartet nur 20 sek auf tp dann leavt er-.- kA hilfe bitte =) ihr seit klasse
D2NT-Bot + leechbot ?
05/31/2010 - Diablo 2 - 12 Replies
Hey! Gibt es eine Möglichkeit D2NT-Bot und leechbot gleichzeitig zu benutzen? Leechbot läuft unter redvex, D2NT nicht. Wenn jmd. weiß wie, wäre ich über eine schnelle Antwort sehr dankbar. MfG



All times are GMT +1. The time now is 18:20.


Powered by vBulletin®
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2026 elitepvpers All Rights Reserved.