Register for your free account! | Forgot your password?

Go Back   elitepvpers > Other Online Games > Diablo 2 > Diablo 2 Programming
You last visited: Today at 09:56

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

Advertisement



[BotScript] Fast Dia & Clone Hunter für Muddy's D2NT

Discussion on [BotScript] Fast Dia & Clone Hunter für Muddy's D2NT within the Diablo 2 Programming forum part of the Diablo 2 category.

Reply
 
Old   #1
 
elite*gold: 0
Join Date: Jun 2006
Posts: 3
Received Thanks: 4
[BotScript] Fast Dia & Clone Hunter für Muddy's D2NT

Ich hätte für Muddys Bot ein kleines Update für Diablo und einmal für Clone Diablo.

Fast Diablo:
Bei einem Diablo-Run hat man zusätzlich die Möglichkeit nur die Seals zu öffnen und dann Diablo zu killen. Ohne sich um jedes Monster zu kümmern. Sprich ein Fast Diablo Run.

Überarbeitete Script NTDiablo.ntj
Code:
/**
*	This file was modified by 
*	Check the programming section for updates and further scripts
*	Last Update: 02/05/2011
*/

function NTMain()
{
	Include("libs/common/NTCommon.ntl");
	NTC_IncludeLibs();
	NTC_IncludeConfig("NTBot/char_configs");

	NT_LoadConfig();
	NTSI_LoadNIPFiles("NTBot/item_configs");

	MWC_Initialize();
	
	var _monsterCount, _attackpos;

	if(!NTTM_CheckAct(me.act, true))
	{
		NTC_SendMsgToScript("MWBotGame.ntj", NTTM_CheckAct, 20, me.act, true);
		return;
	}
	
	NTTMGR_TownManager();

	if(!NTTM_TownMove("waypoint"))
	{
		NTC_SendMsgToScript("MWBotGame.ntj", NTTM_TownMove, 28, "waypoint");
		return;
	}

	if(!NTM_TakeWaypoint(107))
	{
		NTC_SendMsgToScript("MWBotGame.ntj", NTM_TakeWaypoint, 34, 107);
		return;
	}

	NTP_DoPrecast(true);

	if(!NTM_MoveTo(108, 7797, 5560))
	{
		NTC_SendMsgToScript("MWBotGame.ntj", NTM_MoveTo, 42, 108, 7797, 5560);
		return;
	}

	if(!MWConfig_StartAtStar && !MWConfig_FastDiablo)
	{
		_attackpos = [7792, 5525, 7793, 5501, 7773, 5495, 7768, 5480, 7767, 5458, 7770, 5438, 7774, 5417, 7767, 5391, 7768, 5369, 7769, 5345, 7770, 5320, 7780, 5308];

		if(!NTM_MoveTo(108, 7790, 5544))
		{
			NTC_SendMsgToScript("MWBotGame.ntj", NTM_MoveTo, 52, me.areaid, 7790, 5544);
			return;
		}

		if(NTConfig_PublicMode)

		{

			_monsterCount = MWA_FindNearbyMonsters(20);

			
if(_monsterCount > 1)

			{

				if(_monsterCount < 3)

					Say("TP cold, " + _monsterCount + " monsters close!");

				else if(_monsterCount < 6)

					Say("TP warm, " + _monsterCount + " monsters close!");

				else

					Say("TP hot, " + _monsterCount + " monsters close!");

			}

			else

				Say("TP up, no monsters close!");


			NTM_MakeTP();

		}
		
		NTA_ClearPosition(25, false, 2);

		NTM_MoveTo(108, 7790, 5544);

		NTC_PingDelay(1000);

		NTA_ClearPosition(25, true, 2);

		NTM_MoveTo(108, 7790, 5544);
		
		
		if(NTConfig_PublicMode)

		{

			if(MWA_FindNearbyMonsters(15) < 2)

				Say("TP safe!");

			else

				Say("TP is not safe!");


			for(var i = 0; i < _attackpos.length; i += 2)
			{
				NTM_MoveTo(108, _attackpos[i], _attackpos[i + 1], 3, true);
				NTA_ClearPosition(50, true, 2);
			}
		}
	}


	
if(!MWConfig_FastDiablo || NTConfig_PublicMode)
 
	{

		Say("Public ist AN || FastDiablo ist AUS!");

		if(MWConfig_StartAtStar)

		{

			NTM_MoveTo(108, 7792, 5292);

			_monsterCount = MWA_FindNearbyMonsters(25);

			
if(_monsterCount > 1)
			{
				if(_monsterCount < 3)
					Say("TP cold, " + _monsterCount + " monsters close!");
				else if(_monsterCount < 6)
					Say("TP warm, " + _monsterCount + " monsters close!");
				else
					Say("TP hot, " + _monsterCount + " monsters close!");
			}
			else
				Say("TP up, no monsters close!");

		}

		
NTM_MakeTP();


		NTP_DoPrecast(true);
		NTA_ClearPosition(30);
	
	}
	//NTM_MoveTo(108, 7792, 5292, 3, true);



	if(!NT_OpenSealsInt())
	{
		NTC_SendMsgToScript("MWBotGame.ntj", NT_OpenSealsInt, 133);
		return;
	}
	
	if(!NTTMGR_CheckSafe(NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe))
	{
		NTC_SendMsgToScript("MWBotGame.ntj", NTTMGR_CheckSafe, 139, NTConfig_CheckSelfSafe, NTConfig_CheckMercSafe);
		return;
	}

	if(!NTM_MoveTo(me.areaid, 7792, 5292))
	{
		NTC_SendMsgToScript("MWBotGame.ntj", NTM_MoveTo, 145, me.areaid, 7792, 5292);
		return;
	}

	if(!MWConfig_FastDiablo)
	{
		NTP_DoPrecast(true);
	}

	if(me.classid == NTC_CHAR_CLASS_PALADIN && !MWC_CheckForExpShrineUsers())
	{
		NTC_PutSkill(109, NTC_HAND_RIGHT);
	}

	NTC_FindUnit(NTC_UNIT_MONSTER, 243, 150);

	if(!NTA_KillMonster(243))
	{
		NTC_SendMsgToScript("MWBotGame.ntj", NTA_KillMonster, 158, 243);
		return;
	}

	NTSI_PickItems();

	if(NTConfig_PublicMode)
	{
		Say("Next game");
	}

	NTC_SendMsgToScript("MWBotGame.ntj", "SCRIPT_END");
}

// Internal function
function NT_OpenSealsInt()
{
	var i, _unit;
	var _result;

	_unit = GetPresetUnits(me.areaid, NTC_UNIT_OBJECT);

	if(!_unit)
		return false;

	_result = false;

	for(i = 0 ; i < _unit.length ; i++)
	{
		if(_unit[i].id == 396)
		{
			if(_unit[i].roomy*5 + _unit[i].y == 5275)
				_result = NT_OpenVizierSealInt(1);
			else
				_result = NT_OpenVizierSealInt(2);

			break;
		}
	}

	if(!_result)
		return false;

	if(!MWConfig_FastDiablo)
	{
		NTM_MoveTo(me.areaid, 7792, 5292, 3, true);
		NTA_ClearPosition(40);
		NTP_DoPrecast();
	}

	_result = false;

	for(i = 0 ; i < _unit.length ; i++)
	{
		if(_unit[i].id == 394)
		{
			if(_unit[i].roomx*5 + _unit[i].x == 7773)
				_result = NT_OpenDeSeisSealInt(1);
			else
				_result = NT_OpenDeSeisSealInt(2);

			break;
		}
	}

	if(!_result)
		return false;

	if(!MWConfig_FastDiablo)
	{
		NTM_MoveTo(me.areaid, 7792, 5292, 3, true);
		NTA_ClearPosition(40);
		NTP_DoPrecast(true);
	}

	_result = false;

	for(i = 0 ; i < _unit.length ; i++)
	{
		if(_unit[i].id == 392)
		{
			if(_unit[i].roomx*5 + _unit[i].x == 7893)
				_result = NT_OpenVenomSealInt(1);
			else
				_result = NT_OpenVenomSealInt(2);

			break;
		}
	}

	return _result;
}

function NT_OpenVizierSealInt(type)
{
	var i, n;
	var _attackpos = [7740, 5300, 7740, 5280, 7720, 5280, 7720, 5300];
	var _monstername = GetLocaleString(2851);

	if(!MWConfig_FastDiablo)
	{
		for(i = 0 ; i < _attackpos.length ; i += 2)
		{
			NTM_MoveTo(me.areaid, _attackpos[i], _attackpos[i+1], 3, true);
			NTA_ClearPosition(30, true, 2);
		}
	}

	for(i = 0; i < 4; i++)
	{
		if(!MW_OpenSeal(395) || !MW_OpenSeal(396))
		{
			NTC_Delay(2500);
			continue;
		}
		
		if(type == 1)
			NTM_MoveTo(me.areaid, 7665, 5277);
		
		for(n = 0; n < 10; n++)
		{
			NTC_Delay(200);

			if(NTA_KillMonster(_monstername))
			{
				if(!MWConfig_FastDiablo)
				{
					NTA_ClearPosition();
				}
				NTSI_PickItems();

				return NTM_MoveTo(me.areaid, 7750, 5280);
			}
		}
	}

	return false;
}

function NT_OpenDeSeisSealInt(type)
{
	var i, n;
	var _attackpos = [7780, 5255, 7800, 5255, 7800, 5235, 7780, 5235];
	var _monstername = GetLocaleString(2852);
	var _deSeis, _dist;

	if(!MWConfig_FastDiablo)
	{
		if(type == 1)
			_attackpos.push(7773, 5215, 7773, 5197, 7794, 5196, 7813, 5189, 7814, 5171, 7804, 5156, 7787, 5154);
		else
			_attackpos.push(7811, 5216, 7810, 5197, 7787, 5192, 7772, 5183, 7773, 5166, 7784, 5154, 7800, 5154);
		switch(me.classid)

		{

			case NTC_CHAR_CLASS_BARBARIAN:

			case NTC_CHAR_CLASS_PALADIN:

				_dist = 8;

				break;

			case NTC_CHAR_CLASS_DRUID:

				_dist = 10;

				break;

			default:

				_dist = 12;

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


	for(i = 0; i < 4; i++)
	{
		if(type == 1)
		{
			MW_OpenSeal(394);
			NTM_MoveTo(me.areaid, 7791, 5198);

			_deSeis = NTC_FindUnit(NTC_UNIT_MONSTER, _monstername, 3);
			
			if(_deSeis)
			{

				if(_deSeis.y >= 5185)
					NTM_MoveTo(me.areaid, 7776, _deSeis.y - _dist);
				else
					NTM_MoveTo(me.areaid, 7776, _deSeis.y + _dist);
			}
			else
			{
				if(!MWConfig_FastDiablo)
				{
					NTA_ClearPosition(20);
				}
			}

		}
		else
		{
			MW_OpenSeal(394);
			NTM_MoveTo(me.areaid, 7789, 5154);

			
_deSeis = NTC_FindUnit(NTC_UNIT_MONSTER, _monstername, 3);

			if(_deSeis && _deSeis.y + _dist <= 5201)
			{

				if(!NTM_MoveTo(me.areaid, 7776, _deSeis.y + _dist))
					NTM_MoveTo(me.areaid, 7776, _deSeis.y - _dist);
			}

			else

				NTM_MoveTo(me.areaid, 7776, 5195);

		}

		for(n = 0; n < 10; n++)
		{
			NTC_Delay(200);

			if(NTA_KillMonster(_monstername))
			{
				if(!MWConfig_FastDiablo)
				{
					NTA_ClearPosition(30);
				}
				NTSI_PickItems();

				return NTM_MoveTo(me.areaid, 7800, 5255);
			}
		}
	}

	return false;
}

function NT_OpenVenomSealInt(type)
{
	var i, n;
	var _attackpos = [7835, 5280, 7835, 5300, 7855, 5300, 7855, 5280];
	var _monstername = GetLocaleString(2853);
	var _sealOrder;
	
	if(MWConfig_KillFullInfectorMob)
		_sealOrder = [392, 393];
	else
		_sealOrder = [393, 392];
	
	if(!MWConfig_FastDiablo)
	{
		for(i = 0 ; i < _attackpos.length ; i += 2)
		{
			NTM_MoveTo(me.areaid, _attackpos[i], _attackpos[i+1], 3, true);
			NTA_ClearPosition(30, true, 2);
		}
	}


	for(i = 0; i < 4; i++)
	{
		if(!MW_OpenSeal(_sealOrder[0]))
		{
			NTM_MoveTo(me.areaid, _attackpos[_attackpos.length - 2], _attackpos[_attackpos.length - 1], 3, true);
			NTC_Delay(2500);
			continue;
		}

		if(_sealOrder[1] == 392 && !MW_OpenSeal(_sealOrder[1]))
		{
			NTM_MoveTo(me.areaid, _attackpos[_attackpos.length - 2], _attackpos[_attackpos.length - 1], 3, true);
			NTC_Delay(2500);
			continue;
		}

		if(type == 1)
			NTM_MoveTo(me.areaid, 7892, 5298);
		else
			NTM_MoveTo(me.areaid, 7937, 5305);
		
		for(n = 0 ; n < 10 ; n++)
		{
			NTC_Delay(200);

			if(NTA_KillMonster(_monstername))
			{
				NTSI_PickItems();
				
				if(!MWConfig_FastDiablo)
				{
					NTA_ClearPosition(40);
				}
				
				if(NTC_PutSkill(124, NTC_HAND_RIGHT))
					NTC_PingDelay(1000);
				
				if(_sealOrder[1] == 393)
				{
					for(i = 0; i < 4; i++)
					{
						if(MW_OpenSeal(393))
							break;
							
						NTC_Delay(2500);
					}
				}
				
				return true;
			}
		}
	}

	return false;
}

function MW_OpenSeal(classid)
{
	var _seal, _x, _y, _unit;

	_unit = GetPresetUnits(me.areaid, NTC_UNIT_OBJECT);

	if(!_unit)
		return false;
	
	for(i = 0 ; i < _unit.length ; i++)
	{
		if(_unit[i].id == classid)
		{
			_x = _unit[i].roomx * 5 + _unit[i].x;
			_y = _unit[i].roomy * 5 + _unit[i].y;
	
			break;
		}
	}

	NTM_MoveTo(me.areaid, _x + 1, _y + 1);

	if(!MWConfig_FastDiablo)
	{
		NTA_ClearPosition(25, true, 2, false, false);
	}	

	_seal = NTC_FindUnit(NTC_UNIT_OBJECT, classid, 5);

	if(!_seal)
		return false;

	if(_seal.mode > 0)
		return true;

	for(var i = 0; i < 8; i++)
	{
		if((i % 2) == 0)
		{
			if(GetDistance(me, _seal) > 2)
				NTM_MoveTo(_seal.areaid, _seal.x + 1, _seal.y +1 );

			NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, _seal);
		}

		NTC_Delay(500);

		if(_seal.mode > 0)
			return true;
		
		if(!MWConfig_FastDiablo)
		{	
			NTA_ClearPosition(20, true, 2, false, false);
		}
	}

	return false;
}
Wichtig! Die Variable MWConfig_FastDiablo muss in der Datei NTConfig.ntl im Ordner char_configs hinzugefügt werden. Gesamte NTConfig.ntl
Code:
/**
*	This file was modified by 
*	Check the programming section for updates and further scripts
*	Last Update: 01/28/2011
*/

var MWConfig_Script = new Array();
var MWConfig_ChestExceptions = new Array();
var MWConfig_FindItemExceptions = new Array();
var MWConfig_ShrineExceptions = new Array();
var MWConfig_EvasionExceptions = new Array();
var MWConfig_CheckImmunitySkills = new Array();

var MWConfig_CommandAssignedToNumpad = new Array(10);
var MWConfig_BulletinBoardColors = new Array();
var MWConfig_BulletinBoardFileMode;
var MWConfig_BulletinBoardFilePath;

var MWConfig_LogStashToTxt;
var MWConfig_UseXMLItemlog;
var MWConfig_LogSoldItems;
var MWConfig_LowestRuneToLog;
var MWConfig_NipDebugMode;

var MWConfig_SortStash;

var MWConfig_TornadoRange;
var MWConfig_TwisterRange;
var MWConfig_TrapRatio = new Array();
var MWConfig_AttacksBeforeRepositioning;
var MWConfig_KeepDistanceToMonsters;
var MWConfig_AttackTimeLimit = new Array(5);
var MWConfig_StaticTargets = new Array();

var MWConfig_IsRusher = false;
var MWConfig_ActiveQuestersName;
var MWConfig_NumberOfCharsToRush;
var MWConfig_GetHoradricCubesInNorm;
var MWConfig_QuestSchedule = new Array();
var MWConfig_RushActs = new Array();

var MWConfig_EnterInvalidUberPortals;
var MWConfig_IntendedUberPortal;
var MWConfig_PauseOnLackOfKeys;

var MWConfig_PauseOnLackOfOrgans;

var MWConfig_ClearWaypointPaths;
var MWConfig_SkipHallsOfPain;
var MWConfig_TPWaypoints;
var MWConfig_WaypointCatcherActs;
var MWConfig_ShowGoldPickupsPerScript;
var MWConfig_ShowGoldPickups;
var MWConfig_ShowPotionPickups;

var MWConfig_UseFindItem;
var MWConfig_FindItemRange;
var MWConfig_BuyPotionsOnLackOfMana;
var MWConfig_PickLootedItemsInstantly;
var MWConfig_PickChestLootsInstantly;
var MWConfig_PickItemsInstantly;
var MWConfig_OpenAllNearbyChests;
var MWConfig_OpenChestsRange;
var MWConfig_ResetArmor;
var MWConfig_AlwaysSellTrashItems;
var MWConfig_IdentAtCain;
var MWConfig_IdentAfterPickup;
var MWConfig_MinItemsToIdent;
var MWConfig_ActivateNearbyShrines;
var MWConfig_SkeletonMinionCount;
var MWConfig_MageMinionCount;
var MWConfig_ReviveMinionCount;

var MWConfig_CheckSojSales;
var MWConfig_WorldEventAccount;
var MWConfig_WorldEventWaitTime;

var MWConfig_ClearPathToKurastTemplesSpectype;
var MWConfig_ClearPathToKurastSewersSpectype;
var MWConfig_ClearPathToSummonerSpectype;
var MWConfig_OpenMephistoChest;
var MWConfig_MephistoClearArea;
var MWConfig_KillFullInfectorMob;
var MWConfig_FastDiablo;
var MWConfig_StartAtStar;
var MWConfig_ClearPathToDurielSpectype;
var MWConfig_ClearPathToPitSpectype;
var MWConfig_ClearPathToTunnelsSpectype;
var MWConfig_SkipLevelOnWitches;
var MWConfig_SkipLevelOnSouls;
var MWConfig_SkipLevelOnDeathLords;
var MWConfig_SkipOnTombVipers;
var MWConfig_ClearCountessRoomsSpectype;
var NTConfig_NihlathakExtension;
var NTConfig_PindleskinExtension;
var NTConfig_ShenkExtension;
var NTConfig_ClearFrozenRiver;
var NTConfig_ClearGlacialTrail;
var NTConfig_ClearIcyCellar;
var MWConfig_SkipBaalOnDolls;
var MWConfig_SkipBaalOnSouls;
var NTConfig_KillBaal;
var NTConfig_ClearA3SewersLevel1;
var NTConfig_KillFireEye;
var NTConfig_ClearPitLevel1;
var NTConfig_KillBloodRaven;
var NTConfig_ClearHoleLevel1;
var NTConfig_KillRakanishu;
var MWConfig_DoBaalPreAttack;
var MWConfig_SuperChestAreas;
var MWConfig_SuperChestClearAreaRadius;

var MWConfig_IdleModeRuntime;
var NTConfig_StartDelay;
var NTConfig_AreaDelay;
var NTConfig_SnagDelay;
var MWConfig_ExitGameOnMissingPassword;

var NTConfig_SkipHealLife;
var NTConfig_SkipHealMana;
var NTConfig_UseMerc;

var NTConfig_LifeThresh;
var NTConfig_LifeRejuvThresh;
var NTConfig_ManaThresh;
var NTConfig_ManaRejuvThresh;
var NTConfig_LifeChicken;
var NTConfig_ManaChicken;
var MWConfig_UseChickenLog;

var NTConfig_MercLifeThresh;
var NTConfig_MercRejuvThresh;
var NTConfig_MercChicken;

var NTConfig_FreeSpace;

var NTConfig_Columns = new Array(4);
NTConfig_Columns[0] = new Array(10);
NTConfig_Columns[1] = new Array(10);
NTConfig_Columns[2] = new Array(10);
NTConfig_Columns[3] = new Array(10);

var NTConfig_MinGoldToStash;

var MWConfig_ReplaceLowQualityPotions;
var MWConfig_BeltTypeColQuantity = new Array();
var NTConfig_BeltColType = new Array(4);

var NTConfig_NIPFilePath = new Array();
var NTConfig_SnagRange;
var MWConfig_PickUpPriorityItemsFirst;

var MWConfig_PickUpMoneymakers;
var MWConfig_MinimumTpScrollCount;
var MWConfig_MinimumIdScrollCount;
var MWConfig_CarryKeys;

var MWConfig_ShowCubedGemsInCommonLog;
var MWConfig_ClearCubeAfterCubing;
var MWConfig_UseAdvancedCubingAlgorithm;
var MWConfig_RestrictKeptItemsFromCubing;
var NTConfig_Cubing;
var NTConfig_CubingItem = new Array();

var NTConfig_Gamble;
var NTConfig_GambleStartGold;
var NTConfig_GambleStopGold;
var NTConfig_GambleItem = new Array();

var MWConfig_AutoParty;
var NTConfig_PublicMode;
var NTConfig_CheckCloneDiablo;
var NTConfig_OpenChest;
var MWConfig_GameErrorLimit;
var MWConfig_UseTelekinesis;
var MWConfig_ShowOverheadStatus;

var NTConfig_AttackSkill = new Array(10);

var MWConfig_PrecastSkills = new Array();
var MWConfig_SwitchSlotsAfterBoPrecast;

var MWConfig_ClearBossPosition;
var NTConfig_ClearPosition;
var NTConfig_CheckSelfSafe;
var NTConfig_CheckMercSafe;
var MWConfig_CheckSelfSafeTown;
var MWConfig_CheckMercSafeTown;

Der Aufruf von Diablo sieht dann bei dem Charakter wie folgt aus:
Code:
MWConfig_Script.push(["NTDiablo.ntj", 10]);
		MWConfig_StartAtStar = true;		// false: start at entrance, true: start at star
		MWConfig_FastDiablo = true;		// Öffnet nur die Seals und killt Diablo (Schwerer-Modus)
		MWConfig_KillFullInfectorMob = false;	// Wird bei FastDiablo ignoriert!


Clone Diablo:
Ich hab den IP-Check mit dem Idle Bot kombiniert. (wenn es dazu bessere Vorschläge gibt bzw. so etwas ähnliches was ich übersehen hab, bitte um Aufklärung)


Neues Check-IP Script mit Idle-Bot: NTCloneHunter.ntj
Code:
function NTMain()
{
	Include("NTBot/HotIP.ntl");
	Include("libs/common/NTCommon.ntl");
	NTC_IncludeLibs();
	NTC_IncludeConfig("NTBot/char_configs");

	NT_LoadConfig();
	NTSI_LoadNIPFiles("NTBot/item_configs");

	MWC_Initialize();

	if(!NTTM_CheckAct(me.act, true))
	{
		NTC_SendMsgToScript("MWBotGame.ntj", NTTM_CheckAct, 18, me.act, true);
		return;
	}
	
	var _idletime = 3600000; // Wartezeit im Game bei Hot-IP Fund (in ms), bevor der Bot weiterläuft ( 3600000 ms = 1 Stunde )
	var _serverip = me.gameserverip.split(".")[3];
	var _hot = 0;



	//--------------------------------------------------------------------------------------
	
	for( var i = 0; i <= (_hotips.length-1); i++ )
	{
		if( _hotips[i] == _serverip )
		{
            		_hot = _serverip;
        	}
    	}
    	if( _hot != 0 )
	{
        	Print( "ÿc3 >>> ÿc2HOT-IP gefunden! (ÿc8IP: " + _hot + "ÿc2)!  ÿc9Warte " + ( _idletime / 1000 ) + " Sekunden ..." );
        	NTC_SendLogToOOG(NTC_LOG_COMMON, "ÿc3 >>> ÿc2HOT-IP gefunden! (ÿc8IP: " + _hot + "ÿc2)!  Game:  ÿc3" + me.gamename + "//" + me.gamepassword );

		//---------------------------------------------------------------
		//***************************************************************
		NTTMGR_TownManager();

		var _endtime, _starttick, _loops;
	
		_loops = 0;
		
		_starttick = GetTickCount();
		
		while((!MWConfig_IdleModeRuntime || MWConfig_IdleModeRuntime * 6E4 + _starttick > GetTickCount()))
		{
			SetStatusText("ÿc8Switching to Act " + (1 + _loops % 5) + "...");
			NTTM_CheckAct(1 + _loops % 5);
				
			SetStatusText("ÿc8Moving to Portal Spot...");
			NTTM_TownMove("portalspot");
			
			_endtime = GetTickCount() + 6E4; // Wait 60 seconds in each act
			
			while(_endtime > GetTickCount() && ((MWConfig_IdleModeRuntime) ? (MWConfig_IdleModeRuntime * 6E4 + _starttick > GetTickCount()) : true))
			{
				SetStatusText("ÿc2Running ÿc8MWIdleMode (" + ((parseInt((GetTickCount() - _starttick) / 36E5) >= 1) ? parseInt((GetTickCount() - _starttick) / 36E5) + "h" : "") + (parseInt((GetTickCount() - _starttick) / 6E4) % 60) + "m"+ (parseInt((GetTickCount() - _starttick) / 1E3) % 60) +"s) ["+ ((MWConfig_IdleModeRuntime) ? ((MWConfig_IdleModeRuntime / 60 > 1) ? parseInt(MWConfig_IdleModeRuntime / 60) + "h" : "") + (MWConfig_IdleModeRuntime % 60) + "m" : "inf") + "]");
				NTC_Delay(1000);
			}
		
			_loops++;
		}
		//***************************************************************
		//---------------------------------------------------------------
		NTC_Delay( _idletime );
    	}
	else
	{
        	Print( "ÿc9Keine Hot-IP gefunden." );
    	}

	NTC_SendMsgToScript("MWBotGame.ntj", "SCRIPT_END");
}
Der Aufruf von dem Script sieht dann bei dem Charakter wie folgt aus:
Code:
// Prüft ob Game ein Clone-Diablo Game ist. Falls ja wird hier der Run angehalten.
	// In der Datei scripts/NTBot/HotIP.ntl die IP's einstellen!
	MWConfig_Script.push(["NTCloneHunter.ntj", 1]);
		MWConfig_IdleModeRuntime = 5;
Beachtet das im Ordner NTBot die Datei HotIP.ntj angelegt werden muss. Diese Datei enthält dann die IP Adressen. BEISPIEL:
Code:
	// ------------------------------------------------------------------------------------------
	// Check die Hot-IP's auf der folgenden Seite:
	// http://dclone.eskysse.com/index.php?l=3
	// ------------------------------------------------------------------------------------------
	// Hier beliebige Hot-IP's eintragen. Wenn nicht gesucht werden soll, einfach 0 eintragen.
	// ------------------------------------------------------------------------------------------


	var _hotips = [ "58", "44"];

------------------------
Würde mich über Feedback freuen
SiegfriedXxX is offline  
Thanks
4 Users
Old 06/12/2011, 01:09   #2
 
elite*gold: 0
Join Date: Apr 2011
Posts: 25
Received Thanks: 15
Quote:
Originally Posted by SiegfriedXxX View Post
Beachtet das im Ordner NTBot die Datei HotIP.ntj angelegt werden muss. Diese Datei enthält dann die IP Adressen. BEISPIEL:
Code:
	// ------------------------------------------------------------------------------------------
	// Check die Hot-IP's auf der folgenden Seite:
	// http://dclone.eskysse.com/index.php?l=3
	// ------------------------------------------------------------------------------------------
	// Hier beliebige Hot-IP's eintragen. Wenn nicht gesucht werden soll, einfach 0 eintragen.
	// ------------------------------------------------------------------------------------------


	var _hotips = [ "58", "44"];

------------------------
Würde mich über Feedback freuen
Hi,

da du ja nach Feedback gefragt hast:

Warum genau hast du für die Konfiguration der HotIPs ein extra File angelegt? Dafür wäre doch genauso gut in der NTCloneHunter.ntj Platz gewesen, oder noch besser, so wie bei den meisten anderen Scripts auch einfach in der Char-Config nach gewohntem Schema (unter verwendung einer weiteren Variable, die z.B. zuvor in der NTConfig.ntl deklariert wurde:

Code:
// Prüft ob Game ein Clone-Diablo Game ist. Falls ja wird hier der Run angehalten.
// In der Datei scripts/NTBot/HotIP.ntl die IP's einstellen!
MWConfig_Script.push(["NTCloneHunter.ntj", 1]); MWConfig_IdleModeRuntime = 5; [COLOR="Red"]NTConfig_HotIPs = [ "58", "44"];[/COLOR]
Dies gäbe einem zudem die Möglichkeit zu entscheiden, ob bestimmte Charaktere z.B. unterschiedliche IPs suchen sollen (warum auch immer, mir fällt gerade kein wirklich guter Grund ein ), oder per Definition in der MWConfig_GlobalSettings.ntl für alle Chars die gleichen IPs zu verwenden.
fabdevil is offline  
Old 06/12/2011, 15:46   #3
 
elite*gold: 0
Join Date: Jun 2006
Posts: 3
Received Thanks: 4
Danke für dein Feedback, erscheint mir aber komisch bei unterschiedlichen Chars unterschiedliche IP's zu suchen.

Hinzu kommt das die IP's so schnell wechseln, diese für alle Chars immer wieder anzupassen wird nervig, glaub mir.

Daher ist diese Lösung die Beste wie ich finde aber nehm das Feedback gern so auf.

Achso, was ich nicht verstehe ist, dass in der Standard Konfiguration von Muddys Download alle MISC Scrips an sind. Sehr nervig für Neulinge wenn der Bott dann erstmal Cow, und mehrere male den Act wechselt. Allgemein finde ich könnte man die Char-Konfiguration per extra Programm vornehmen anstatt immer in der File selber rum zu fummeln. Hab da mal von einem Programm gehört, fand ich persönlich jedoch etwas unübersichtlich gestaltet.
SiegfriedXxX is offline  
Old 06/12/2011, 16:39   #4
 
elite*gold: 0
Join Date: Apr 2011
Posts: 25
Received Thanks: 15
Ja, wie gesagt, das war nur ein "zusätzlicher" Vorschlag, dass ggf. auch für einzelne Chars konfigurierbar zu machen. Allerdings bin ich nach wie vor der Meinung, dass man die IPs dann zumindest in der NTCloneHunter.ntj konfigurieren sollte, so spart man sich das 2. Script und weiß direkt, zu was diese Variable eigentlich gehört. Dabei wäre das Script nach wie vor als "Add-On" geeignet, ohne dass man noch die MWConfig_GlobalSettings modifizieren muss.
fabdevil is offline  
Old 12/16/2011, 00:09   #5
 
elite*gold: 0
Join Date: Aug 2008
Posts: 99
Received Thanks: 6
var _hotips = [ "58", "44"]; kann man die auch erweiter z.b

var _hotips = [ "58", "44", "46"]; ?

mfg
Timo1986 is offline  
Old 12/17/2011, 10:20   #6
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41624
Join Date: Jan 2010
Posts: 22,728
Received Thanks: 12,654
Klar, Arrays sind in JavaScript voll dynamisch, d.h. du kannst dort soviele Elemente einfügen, wie du willst. Prinzipiell musst du das Array dabei nichtmal mit Strings füllen, es reicht auch, wenn du bloße Zahlen schreibst, zum Vergleichen wird dann implizit gecastet.
Muddy Waters is offline  
Old 12/25/2011, 12:35   #7
 
elite*gold: 0
Join Date: May 2011
Posts: 66
Received Thanks: 7
Hi,

bitte nehmts mir nicht übel, aber ich benutze BlueBird für D2NT und versuche mir gerade das diablo clone skript so zurechzubiegen, dass es funktioniert.

leider habe ich nicht besonders viel ahnung von programmierung.
mein skript sieht mittlerweile so aus:

Code:
function NTMain()
{
	Include("NTBot/HotIP.ntl");
	Include("libs/common/NTCommon.ntl");
	NTC_IncludeLibs();
	NTC_IncludeConfig("NTBot/char_configs");

	NT_LoadConfig();
	NTSI_LoadNIPFiles("NTBot/item_configs");

	NTC_Initialize();

	if(!NTTM_CheckAct(me.act, true))
	{
		NTC_SendMsgToScript("NTBotGame.ntj", NTTM_CheckAct, 18, me.act, true);
		return;
	}
	
	var _idletime = 3600000; // Wartezeit im Game bei Hot-IP Fund (in ms), bevor der Bot weiterläuft ( 3600000 ms = 1 Stunde )
	var _serverip = me.gameserverip.split(".")[3];
	var _hot = 0;



	//--------------------------------------------------------------------------------------
	
	for( var i = 0; i <= (_hotips.length-1); i++ )
	{
		if( _hotips[i] == _serverip )
		{
            		_hot = _serverip;
        	}
    	}
    	if( _hot != 0 )
	{
        	Print( "ÿc3 >>> ÿc2HOT-IP gefunden! (ÿc8IP: " + _hot + "ÿc2)!  ÿc9Warte " + ( _idletime / 1000 ) + " Sekunden ..." );
        	NTC_SendLogToOOG(NTC_LOG_COMMON, "ÿc3 >>> ÿc2HOT-IP gefunden! (ÿc8IP: " + _hot + "ÿc2)!  Game:  ÿc3" + me.gamename + "//" + me.gamepassword );

		//---------------------------------------------------------------
		//***************************************************************
		NTTMGR_TownManager();

		var _endtime, _starttick, _loops;
	
		_loops = 0;
		
		_starttick = GetTickCount();
		
		while((!NTConfig_IdleModeRuntime || NTConfig_IdleModeRuntime * 6E4 + _starttick > GetTickCount()))
		{
			SetStatusText("ÿc8Switching to Act " + (1 + _loops % 5) + "...");
			NTTM_CheckAct(1 + _loops % 5);
				
			SetStatusText("ÿc8Moving to Portal Spot...");
			NTTM_TownMove("portalspot");
			
			_endtime = GetTickCount() + 6E4; // Wait 60 seconds in each act
			
			while(_endtime > GetTickCount() && ((NTConfig_IdleModeRuntime) ? (NTConfig_IdleModeRuntime * 6E4 + _starttick > GetTickCount()) : true))
			{
				SetStatusText("ÿc2Running ÿc8MWIdleMode (" + ((parseInt((GetTickCount() - _starttick) / 36E5) >= 1) ? parseInt((GetTickCount() - _starttick) / 36E5) + "h" : "") + (parseInt((GetTickCount() - _starttick) / 6E4) % 60) + "m"+ (parseInt((GetTickCount() - _starttick) / 1E3) % 60) +"s) ["+ ((NTConfig_IdleModeRuntime) ? ((NTConfig_IdleModeRuntime / 60 > 1) ? parseInt(NTConfig_IdleModeRuntime / 60) + "h" : "") + (NTConfig_IdleModeRuntime % 60) + "m" : "inf") + "]");
				NTC_Delay(1000);
			}
		
			_loops++;
		}
		//***************************************************************
		//---------------------------------------------------------------
		NTC_Delay( _idletime );
    	}
	else
	{
        	Print( "ÿc9Keine Hot-IP gefunden." );
    	}

	NTC_SendMsgToScript("NTBotGame.ntj", "SCRIPT_END");
}
immerhin ist mir schon aufgefallen, dass die version von "Muddy_Waters" MW statt NT nutzt und habe das ganze soweit abgeändert. die Variable "NTConfig_IdleModeRuntime" habe ich ebenfalls in der "NTConfig.ntl" im charfolder definiert.
wenn ich
Code:
NTConfig_Script.push(["NTCloneHunter.ntj", 1]);
benutze, dann sehe ich in der statusleiste: "Running NTCloneHunter.ntj,1" und nichts passiert.
wenn ich aus dem code das ",1" und die eckigen klammern entferne läuft das skript (glaube ich) schonmal an und ich bekomme dann aber als fehler:
"ReferenceError: NTC_Initialize is not defined"

gibt es diese funktion im Bluebird nicht ?

ich habe ausserdem versucht die funktion im Muddy skript zu finden, allerdings ohne erfolg

falls mir jemand helfen möchte wäre ich dem sehr verbunden

PS: frohe Weihnachten euch
whoranzone123 is offline  
Old 12/25/2011, 20:04   #8
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41624
Join Date: Jan 2010
Posts: 22,728
Received Thanks: 12,654
Also dafür dass du keine Ahnung hast, ist deine Denkweise schon erfreulich logisch und stringent.

In meiner Version kann man für Scripte immer auch die Maximallaufzeit mit angeben, darum erfolgt die Script Definition in Form eines eindimensionalen Arrays. Da Bluebird sowas nicht kann, vereinfacht sich das ganze wieder, sprich das Script wird nur über den Namen definiert. Richtig wäre damit:
Code:
NTConfig_Script.push("NTCloneHunter.ntj");
Das MW Präfix nutze ich dabei grundsätzlich für Funktionen oder Variablen, die ich entweder in ihrer Funktion drastisch bis komplett verändert habe, oder aber für Dinge, die ich entwickelt und hinzugefügt habe. Damit ist auch klar, warum deine Funktion nicht existiert: Weil das eben gerade eine Funktion ist, die D2NT von Haus aus nicht hat.

Ist in dem Fall aber nicht weiter tragisch, da die Funktion ohenhin nicht mehr macht, als andere Funktionen zur Initialisierung aufzurufen. Wenn du diese Aufrufe einfach direkt einfügst, sollte es klappen, also den MWC_Initialize()-Aufruf ersetzen durch:
Code:
NTCU_InitCubing();
NTA_Initialize();
LG
Muddy
Muddy Waters is offline  
Thanks
1 User
Old 12/26/2011, 14:51   #9
 
elite*gold: 0
Join Date: May 2011
Posts: 66
Received Thanks: 7
naja ich werde seit 4 jahren im logischen denken alias physikstudium ausgebildet, aber das bisschen c programmierung aus dem ersten semester steckt nichtmehr so drin

aha die funktion hieß also NTA_Initialize();
mal schaun ob ich noch verstehe was InitCubing

ok jetzt läuft er an, sagt, dass ich keine hotIP habe, aber fährt dann nicht mit dem nächsten skript fort. fehlt da noch sowas wie eine "endscript" oder so ?

€dit: hm ok. scheinbar hatte ich ein wenig in der "NTBotGame.ntj" rumgepfuscht (kann mich nich dran erinnern aber egal)
mit der originalen funzt alles wieder

vielen dank für die hilfe
whoranzone123 is offline  
Old 12/29/2011, 01:32   #10
 
elite*gold: 0
Join Date: May 2011
Posts: 66
Received Thanks: 7
ok erstmal sorry für den doppelpost aber sonst würde hier ja niemand mehr reinschauen ^^

irgendwie funktioniert das ganze noch nicht so ganz wie ich mir das wünsche/denke/vorstelle/glaube dass es gedacht ist.

folgendes: er hat eine hot ip gefunden.
das aktwechseln usw funktioniert ganz gut bis er bei folgendem stehenbleibt:



genau diese anzeige bekomme ich seit 10 minuten. kein aktwechsel. nichts.
der eintrag "NTConfig_IdleModeRuntime = 5;" in der char config setzt doch nur den wert der variable auf 5 richtig ? ich blicke noch nich so ganz in deinen while schleifen durch aber ich finds doch recht verdächtig, dass er genau bei 4:59 stehen bleibt wo doch die variable auf 5 gesetzt wird.

Code:
while((!NTConfig_IdleModeRuntime || NTConfig_IdleModeRuntime * 6E4 + _starttick > GetTickCount()))
ist "!NTConfig_IdleModeRuntime" sowas wie "not NTConfig_IdleModeRuntime" ?
also nicht 5 oder 5*6e4 + (_starttick = GetTickCount() größer als GetTickCount()

GetTickCount() ist sowas wie die uhrzeit ? dann ist mir fast klar warum er bei 4:59 stehen bleibt. nach 5 minuten ist 5 + startuhrzeit nichtmehr größer als die aktuelle zeit. demnach wechselt er nichtmehr die einzelnen akte.
also springt er aus der schleife raus und macht:
NTC_Delay( _idletime ); -> er wartet ne stunde.

da kommt dann der part ins spiel den ich nicht verstehe. warum 5 minuten lang den akt wechseln und so ein "getting kicked" verhindern und nach 5 minuten einfach nichts machen und ne stunde warten ?

ich kann mir nicht vorstellen, dass es so gedacht ist und "hoffe" dass ich da was falsch verstanden habe und bitte um hilfe
whoranzone123 is offline  
Old 12/29/2011, 08:03   #11
 
elite*gold: 0
Join Date: Mar 2010
Posts: 539
Received Thanks: 418
So wie es aussieht, würde das DClone-Script wirklich so ablaufen, wie du es vermutest:
Zuerst wird NTConfig_IdleModeRuntime Minuten der Akt gewechselt und dann wird 1 Stunde an der Stelle gewartet.
Ich würde dir empfehlen, die Variable NTConfig_IdleModeRuntime in der NTCloneHunter.ntj auf die Zeit zu setzen, die du warten willst.
Kannst es natürlich auch in der Charconfig machen, dann löscht du am besten die Zeile, wo die Zeit gesetzt wird.

Dafür ersetzt du am besten diese Zeile:
Code:
	var _idletime = 3600000; // Wartezeit im Game bei Hot-IP Fund (in ms), bevor der Bot weiterläuft ( 3600000 ms = 1 Stunde )
mit (WICHTIG: das var wird nicht gebraucht, da es in der NTConfig.ntl ja gesetzt wird! Schöner wäre es natürlich, wenn es nicht in der Charconfig gesetzt wird, die Variablendefinition in der NTClonehunter.ntj zu machen...):
Code:
	NTConfig_IdleModeRuntime = 60; // Wartezeit in Minuten im Game bei Hot-IP Fund
Weiters löscht du dann folgende Zeile:
Code:
		NTC_Delay( _idletime );
Dann sollte es wie gewünscht funktionieren.
TheCrazy11 is offline  
Thanks
1 User
Old 12/29/2011, 15:25   #12
 
elite*gold: 0
Join Date: May 2011
Posts: 66
Received Thanks: 7
dann hab ichs tatsächlich richtig verstanden. wundern tuts mich trotzdem weil es ja so doch wirklich keinen sinn ergibt (oder?).

ich versuch mir das ganze jetzt mit dem shopping skript zu verbinden, also dass er in der wartezeit einfach zu anya ne runde shoppen geht
mal schaun obs klappt
whoranzone123 is offline  
Reply


Similar Threads Similar Threads
[Release] Muddy's D2NT
01/25/2021 - Diablo 2 Programming - 7420 Replies
AnnouncementPlease note: development discontinued! / Bitte beachten: Entwicklung eingestellt! English I am discontinuing development of this version and will henceforth focus on bot development using D2BS. According to this, there won't be any major updates, but merely smaller bug fixes at best. Focusing on D2BS, I will decrease my efforts in supporting this project, since it has become way too time-consuming. I might still check this topic every now and then and offer my support, but...
D2NT Muddy's error beim sellen
04/04/2011 - Diablo 2 Trading - 1 Replies
Hallo liebe Community, ich habe den D2NT von Muddys, er läuft auch einwandfrei bis er items findet die er sellen will! bekomme dan einen Diablo2 Error Diablo2 : Halt Location: , line #2245 - Expression : Unrecoverable internal error 6fb422e5 kann damit nix anfangen und hab schon vieles ausprobiert..dacht es liegt vllt an meiner pickit..aber find keinen fehler... kann mir jemand helfen?
Muddy's D2Nt
01/04/2011 - Diablo 2 - 3 Replies
Hallo zusammen Mein Problem: Mein barb greift niemanden an. Er öffnet Truhen und geht dann wieder in die Stadt. Das ganze sieht etwa so aus: //----------------------------------------------- ------------------------------- //Attack Configuration //---------------------------------------------- -------------------------------- NTConfig_AttackSkill = 154; // First skill. Set to 0 if you won't NTConfig_AttackSkill = 151; // Primary skill to boss. NTConfig_AttackSkill = 0; //...
Muddy's D2NT Help
07/29/2010 - Diablo 2 - 3 Replies
hi i just started to use the bot it work's great. how do i set up the skill's i use on my Sorc and pick up itme's? ..... if you reply to this post please use english
Wie ist ein Botscript aufgebaut D2NT [Guide]
01/25/2010 - Diablo 2 Programming - 0 Replies
Ein Script läuft immer von Oben nach unten ab. Beispiel NTSummoner.NTJ Wie man sehr gut sehen kann werden einfach Funktionen, welche über die files im Ordner "scripts\libs\common" definiert sind in der gewünschten reihenfolge abgespielt. Man muss also kein Coder sein, um ein Botscript an seine eigenen Wünsche anzupassen.



All times are GMT +1. The time now is 09:57.


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.