[Release] Muddy's D2NT

05/24/2011 21:55 TheCrazy11#2056
Bei mir bringt der Bot schon längers folgende Fehlermeldung:
Quote:
<D2NT Error> [D2NT-Pfad]\scripts\libs\common\NTCubing.ntl (1673): TypeError: _cubeItems[0].name is undefined
Diese ist bis jetzt gekommen wenn im Cube noch ein PA, PS oder Baal-SC gelegen ist.
Kann nicht nachvollziehen, wann der Error kommt, kommt nur ca. alle 100 Games und auch immer bei unterschiedlichen Bots, haben alle die gleiche Cube- & Craft-Config:
Weiß aber nicht ob vor oder nach dem cuben, der Cube war auf jeden Fall immer offen.
Der Fehler nervt insofern, dass der eine Bot dadurch einfach hängt und die Games auf maxtime gehen.

Leider habe ich keine API-Referenz (D2NT/D2BS) gefunden, wo GetItems() dokumentiert ist.
Habe auch in der Ur-D2NT nachgesehen, da wird die name-Eigenschaft auch so verwendet wie bei Muddy's.

EDIT: Bei KingHigh scheint es das gleiche Problem zu sein, die Property name passt wohl nicht ganz?
05/24/2011 22:03 Aceridos#2057
Bei KingHigh tippe ich aber auf einen Fehler in der PickIt, versuch dich doch mal an dem NipCheck aus dem 2 Post im Thread hier, der gibt genauere Infos obs an der PickIt liegt
Bei TheCrazy11 kenn ich mich nicht gut genug aus, sry
05/24/2011 22:36 GruenerApfel#2058
Quote:
Originally Posted by KingHigh View Post
Ich bekomme bei meinen Probleläufen mit dem Bot relativ häufig folgende Fehlermldung:

<D2NT Error> C:\Programme\D2bot\Muddy's D2NT V1.22 THIS\Muddy's D2NT\scripts\libs\common\NTSnagit.ntj (168):TypeError:_item.name is undefined
schau mal [Only registered and activated users can see links. Click Here To Register...] nach
05/24/2011 22:44 Rondo80#2059
hmm gibts für muddy's nen leech und leechfight script? direkt dabei scheint nix zu sein
05/24/2011 22:56 GruenerApfel#2060
Quote:
Originally Posted by Rondo80 View Post
hmm gibts für muddy's nen leech und leechfight script? direkt dabei scheint nix zu sein
von haus aus net ... gibt aber hier im forum diverse, kann dir aber zumindest die posten welche ich verwende

ntbotleech.ntj


baalleechfight.ntj


diabloleechfight.ntj


und in deiner charconfig musst du dann noch


einfügen

ich hoffe ich hab nix vergessen O_o
05/24/2011 23:22 Muddy Waters#2061
Quote:
Originally Posted by Aceridos View Post
Afaik(!) funzt das mit dem cuben wie folgt:

Du stellst ein was er cuben soll, sagen wir... Blutgürtel

Code:
	//NTConfig_CubingItem.push([NTCU_CRAFT_BLOOD_BELT, 392]);		// Craft Mesh Belt
in dieser Zeile entfernen wir dann die "//", soweit klar

Nun wird dein Bot die Zutaten zum Gürtel (Tal Rune, Juwel, PRuby) erst sammeln, wenn das entsprechende Craftitem im Stash ist(ergo gefunden wurde)
Dieser Gürtel(in dem Beispiel ein normaler Mesh Belt), muss aber durch deine PickIt zum aufheben und behalten freigegeben/definiert werden, die Zeile oben in der Codebox definiert wohl nur das cuben an sich + Zusatzmaterial, nicht aber den Gurt an sich

Vlt hilft dir das weiter, ich cube nicht, meine das aber so hier im Thread an verschiedenen Stellen aufgeschnappt zu haben

Vlt hat er bei dir einfach nur das Hauptitem(welches gecraftet werden soll) nicht gefunden und du hattest die Zusatzmats aber in der PickIt definiert, so hört sich das für mich jedenfalls an

Ringe und Amulette werden wohl auch erst ab 94 oder 95 gecrafted, wenn sie beim gambln "gefunden" wurden, weil das ilvl des gambled Items ja irgendwie Charlvl minus 5(oder 4) oder so ist, und eben erst ab ilvl 89/90+ dann +2 Skills möglich sind

Genaue Werte zum letzten Absatz hab ich nicht im Kopf, im groben dürfte das aber passen


----------------------------

@Bashtour

PublicMode auf false?
Das Basis Item, also in dem Fall der Mesh Belt hat nichts in deinen .nips verloren!

Lediglich für Sockel und Upgrade Rezepte muss das Basisitem in den .nips stehen.

Quote:
Originally Posted by xtoa View Post
so da mein sumonner gerade fertig geworden ist musst ich das script ja gleich mal versuchen :)
sieht fantastisch aus.
Ich hätt noch eine frage .. . mein nec benuzt hoto in einem slot und beast ( zum auraspenden im 2.) wäre es möglich das er bei bossen auf diesen beast slot switcht und den hoto slot nur zum telen / sumonner benuzt ? schonmal danke
Ohne größeren Aufwand eher nicht.
Spricht irgendwas gegen Fastmod und Beast permanent im 1. Slot?

Mir würde so ehrlich gesagt auch das CTA fehlen, ich würde eher dauerhaft zum Hoto greifen, als das CTA links liegen zu lassen. ;)

Quote:
Originally Posted by KingHigh View Post
Ich bekomme bei meinen Probleläufen mit dem Bot relativ häufig folgende Fehlermldung:

<D2NT Error> C:\Programme\D2bot\Muddy's D2NT V1.22 THIS\Muddy's D2NT\scripts\libs\common\NTSnagit.ntj (168):TypeError:_item.name is undefined

Ich habe an der NTSnagit.ntj nicht geändert, es ist also die gleiche wie die in der release-Version. Die Zeilen 167 und 168 sehen so aus:
Code:
else if(MWConfig_ShowPotionPickups)
Print("Picked up " + _item.name.split("\n")[0]);
Da es hier anscheinend um das picken von Potions geht habe ich geschaut was ich an pickits aktiviert habe und was davon interessant sein könnte. So sieht es in der charconfig aus:
Code:
NTConfig_NIPFilePath.push("private/normal.nip");
NTConfig_NIPFilePath.push("private/magic_rare.nip");
//NTConfig_NIPFilePath.push("private/set.nip");
NTConfig_NIPFilePath.push("private/unique.nip");
//NTConfig_NIPFilePath.push("private/craft.nip");
//NTConfig_NIPFilePath.push("private/temp.nip");
Potions sind in der normal.nip festgelegt, dort sieht es so aus:
Code:
// ##### Potions #######################
[Name] == GreaterHealingPotion
[Name] == SuperHealingPotion
[Name] == GreaterManaPotion
[Name] == SuperManaPotion
[Name] == RejuvenationPotion
[Name] == FullRejuvenationPotion
Abgesehen von flawless und perfect diamonds und skulls sowie Gold ab 100 habe ich alles andere in dieser .nip ausgestellt.
Hat jemand eine Idee was das sein könnte/ wo ich nach einem Fehler suchen kann?
Das Problem tritt leider viel zu häufig auf als das man es ignorieren könnte....
In der SnagIt library war müsste noch ein Fehler sein, versuch es deshalb mal mit dieser hier, dann sollte das Problem nicht mehr auftreten:
Code:
/**
*	This file was modified by [Only registered and activated users can see links. Click Here To Register...]
*	Check the programming section for updates and further scripts
*	Last Update: 12:56 09.05.2011
*/

var _NTSI_IgnoredList = new Array(
526, // Arrows quiver
528, // Bolts quiver
518, // Tome of Town Portal
519, // Tome of Identify
514, // Antidote potion
513, // Stamina potion
517, // Thawing potion
80, // Rancid Gas Pot
81, // Oil Potion
82, // Choking Gas Pot
83, // Exploding Pot
84, // Strangling Gas
85); // Fulminating Pot

function NTSI_LoadNIPFiles(filepath, checkNips)
{
	if(arguments.length < 2)
		checkNips = true;
	
	for(var i = 0; i < NTConfig_NIPFilePath.length; i++)
		NTIPOpenFile(filepath + "/" + NTConfig_NIPFilePath[i]);
		
	if(MWConfig_RunNipCheck && checkNips)
		MWIPCheckNips();
}

function NTSI_PickItems(pickValuables, flag)
{
	var i, _mode;

	if(pickValuables && !MWConfig_PickUpMoneymakers)
		return;
	
	for(i = 0 ; i < 25 ; i++)
	{
		_mode = me.mode;

		if((_mode >= 1 && _mode <= 3) || _mode == 5 || _mode == 6)
			break;

		NTC_Delay(NTC_DELAY_FRAME);
	}

	if(i < parseInt(NTConfig_SnagDelay/NTC_DELAY_FRAME))
		NTC_PingDelay(NTConfig_SnagDelay-(i*NTC_DELAY_FRAME));

	NTSI_SnagIt(pickValuables, flag);
}

function NTSI_SnagIt(pickValuables)
{
	var i, j;
	var _item;
	var _checkeditem, _checkeditems;
	var _value;
	var _minindex, _mindistance;
		
	if(arguments.length < 1)
		pickValuables = false;
	
	_item = NTC_FindUnit(NTC_UNIT_ITEM);

	if(!_item)
		return;

	_checkeditems = new Array();
	
	do
	{
		if(_item.mode == 3 || _item.mode == 5)
		{
			if(NTSI_IsIgnoredItemInt(_item.classid))
				continue;

			if(GetDistance(me, _item) <= NTConfig_SnagRange)
			{
				_value = NTSI_CheckItem(_item, true);

				if(_item.classid == 529 && MWConfig_MinimumTpScrollCount != 0 || _item.classid == 530 && MWConfig_MinimumIdScrollCount != 0 || _item.classid == 543 && MWConfig_CarryKeys)
					_value = 1;
					
				if(pickValuables && (_value == 0 || _value == 3) && MWSI_IsValuable(_item))
					_value = 4;
				
				if(_value != 0 && _value != 3)
				{
					_checkeditem = new NTSI_ItemInt(_item, _value);
					
					if(_checkeditem)
						_checkeditems.push(_checkeditem);
				}
			}
		}
	} while(_item.GetNext());
	
	while(_checkeditems.length > 0)
	{
		_mindistance = 100000;

		for(i = 0; i < _checkeditems.length; i++)
		{
			if(MWConfig_PickUpPriorityItemsFirst && !_checkeditems[i].HasPriority()) // If the item at index i is a low priority item
			{
				for(j = 0; j < _checkeditems.length; j++) // Loop through all items in pickup queue
				{
					if(j == i)
						continue;
					
					if(_checkeditems[j].HasPriority())
						break;
				}
				 // If the loop was aborted due to a high priority item in the pickup queue, skip the item at index i
				if(j < _checkeditems.length)
					continue;
			}
			
			_value = GetDistance(me.x, me.y, _checkeditems[i].x, _checkeditems[i].y);

			if(_value < _mindistance)
			{
				_minindex = i;
				_mindistance = _value;
			}
		}

		_checkeditem = _checkeditems.splice(_minindex, 1)[0];
		
		_item = NTC_FindUnit(NTC_UNIT_ITEM, _checkeditem.GID);

		if(_item)
		{
			if(!NTSI_IsLimitedItemInt(_item))
			{
				if(MWConfig_ShowOverheadStatus)
					MWC_PrintOverheadStatus("Picking up items...");
				
				if(NTT_CheckSpace(_item.xsize, _item.ysize) || _checkeditem.ClassID == 523 || _item.itemtype == 4 || _item.classid == 543 || _item.itemtype == 22 || _item.itemtype >= 76 && _item.itemtype <= 78)
				{
					MWI_WriteLoc(_item);
					
					if(NTSI_PickUpItemInt(_item)) 
					{
						if(_item && _item.name && _item.itemtype != 22 && _checkeditem.ClassID != 523 && _item.itemtype != 4 && _item.classid != 543)
						{
							if(_item.itemtype < 76 || _item.itemtype > 81)
							{
								Print("Picked up " + NTC_ItemQualityToD2Color[MWC_GetItemColorInt(_item)] + _item.name.split("\n")[0] + ((_checkeditem.Status == 4) ? " ÿc8[" + MWC_InsertDigitSeperator(_item.GetItemCost(1)) + "]" : ""));
								NTC_SendMsgToScript("MWBotGame.ntj", "SET_PICKED_1");
								
								if(!pickValuables)
								{
									if(MWSI_IsCommonLogItem(_item))
										NTC_SendMsgToScript("MWBotGame.ntj", "SET_COMMONITEM_" + _item.classid);
									
									if(_item.quality < 4 && _checkeditem.Status < 2)
									{
										if(MWConfig_UseXMLItemlog)
											MWI_WriteLog(_item, 0);
											
										if(_item.classid <= 609 || _item.classid >= ((MWConfig_LowestRuneToLog < 0 || MWConfig_LowestRuneToLog > 32) ? 0 : MWConfig_LowestRuneToLog) + 610)
											MWI_WriteManagerLog(_item, 0);
									}
								}
							}
							else if(MWConfig_ShowPotionPickups)
								Print("Picked up " + _item.name.split("\n")[0]);
						}
					}
				}
				else
				{
					if(!_checkeditem.Retry && !pickValuables)
					{
						_checkeditem.Retry = true;

						if(MWConfig_IdentAfterPickup)
							MWL_IDItemsAfterPickup(true);
						
						if(!NTT_CheckSpace(_checkeditem.xSize, _checkeditem.ySize))
						{
							if(!NTTMGR_VisitTown())
								return;
						}

						_checkeditems.push(_checkeditem);
					}
				}
			}
		}
	}
	
	if(MWConfig_IdentAfterPickup)
		MWL_IDItemsAfterPickup();
}

function NTSI_CheckItem(item, checkQuantity)
{
	var _result;
	
	if(arguments.length < 2)
		checkQuantity = false;

	switch(item.quality)
	{
	case 5:
	case 8:
		_result = NTIPCheckItem(item, checkQuantity);
		break;
	default:
		_result = NTIPCheckItem(item, checkQuantity);

		if(NTCU_CheckItem(item, _result))
			_result = 2;

		break;
	}
	
	if(item.itemflag&0x4000000)
		_result = 1;
	
	return _result;
}

// Internal function
function NTSI_ItemInt(item, checkedstatus)
{
	this.ClassID = item.classid;
	this.GID = item.gid;
	this.ItemType = item.itemtype;
	this.x = item.x;
	this.y = item.y;
	this.xSize = item.xsize;
	this.ySize = item.ysize;
	this.Status = checkedstatus;
	this.Retry = false;
	
	this.HasPriority = function()
	{
		if(this.ItemType >= 91 && this.ItemType <= 102 // Gem
			|| this.ItemType >= 76 && this.ItemType <= 81 // Potions
			|| this.ClassID == 543 || this.ItemType == 4 // Gold
			|| this.ClassID >= 610 && this.ClassID <= 629 // Runes <= FAL
			|| this.ClassID == 529 || this.ClassID == 530 // Scrolls
			|| this.ClassID == 543) // Keys
			return false;
			
		return true;
	}
}

function NTSI_PickUpItemInt(snagitem)
{
	var _classid;
	var _tome, _scrollPreCount;
	var _keys, _gold;
	
	_classid = snagitem.classid;
	
	// Save properties that will be invalidated at pickup
	_gold = snagitem.GetStat(14);
	_keys = snagitem.GetStat(70);
	
	// The successful pickup of a scroll is determined by the change of quantity
	if(_classid == 529 || _classid == 530)
	{
		_tome = NTT_GetTome(Math.abs(snagitem.classid - 530));
		
		if(!_tome)
			return false;
		
		_scrollPreCount = _tome.GetStat(70); // Save the quantity before pickup
	}

	for(var i = 0; i < 40; i++)
	{
		if((i % 10) == 0 && (snagitem.mode == 3 || snagitem.mode == 5))
		{
			if(MWConfig_UseTelekinesis && i < 20 && (_classid == 523 || snagitem.itemtype == 4 || _classid == 543 || _classid == 529 || _classid == 530 || snagitem.itemtype >= 76 && snagitem.itemtype <= 81) && NTC_GetSkillLevel(MWS_TELEKINESIS) > 0)
				MWC_CastTelekinesis(snagitem);
			else
			{
				if(GetDistance(me, snagitem) > 3)
					NTM_MoveTo(snagitem.areaid, snagitem.x, snagitem.y, 3, false, 0, false);

				if(NTC_ClearCursor())
					NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, snagitem);
			}
		}

		NTC_Delay(NTC_DELAY_FRAME);
		
		if(_classid == 529 || _classid == 530) // Scrolls
		{
			_tome = NTT_GetTome(Math.abs(_classid - 530));

			if(_tome && _tome.GetStat(70) != _scrollPreCount) // The scroll was picked up successfully if the quantity after pickup differs from the one before
				return true;
		}
		else if(_classid == 543) // Keys
		{
			if(snagitem.GetStat(70) == -1) // The quantity property turns to -1 after the key was picked
			{
				if(_keys > 1)
					Print("Picked up " + _keys + " Keys");
				else
					Print("Picked up Key");
					
				return true;
			}
		}
		else if(_classid == 523 || snagitem.itemtype == 4) // Gold
		{
			if(snagitem.GetStat(14) == -1) // The gold property turns to -1 after the gold was picked
			{
				if(MWConfig_ShowGoldPickupsPerScript)
					NTC_SendMsgToScript("MWBotGame.ntj", "SET_SCRIPTGOLD_" + _gold);
				if(MWConfig_ShowGoldPickups)
					Print("Picked up " + MWC_InsertDigitSeperator(_gold) + " Gold");
					
				return true;
			}
				
			if(i % 10 == 0 && NTC_CharGoldFull())
			{
				NTC_SendMsgToScript("MWBotGame.ntj", "STOP_STATUS_TEXT_UPDATE");
				SetStatusText("ÿc8Visiting Town...");
				NTTMGR_VisitTown();
				SetStatusText("ÿc8Done!");
				NTC_SendMsgToScript("MWBotGame.ntj", "SET_DEFAULT_STATUS");
			}
			
			return true;
		}
		else if(snagitem.mode != 3 && snagitem.mode != 5)
			return true;
	}

	return false;
}

function NTSI_IsIgnoredItemInt(classid)
{
	for(var i = 0 ; i < _NTSI_IgnoredList.length ; i++)
	{
		if(classid == _NTSI_IgnoredList[i])
			return true;
	}

	return false;
}

function NTSI_IsLimitedItemInt(item)
{
	var i;
	var _items, _tome, _keys;

	if(item.itemtype >= 76 && item.itemtype <= 78)
	{
		if(!MWT_IsPotionRequired(item.code))
			return true;
	}
	else if(item.quality == 7 && item.classid >= 603 && item.classid <= 605)
	{
		_items = me.GetItems(item.classid);

		if(_items.length > 0)
			return true;
	}
	else if(item.classid == 529 || item.classid == 530) // Scrolls
	{
		_tome = NTT_GetTome(Math.abs(item.classid - 530));

		if(!_tome || _tome.GetStat(70) == 20 || item.classid == 529 && _tome.GetStat(70) >= MWConfig_MinimumTpScrollCount || item.classid == 530 && _tome.GetStat(70) >= MWConfig_MinimumIdScrollCount)
			return true;
	}
	else if(item.classid == 543) // Keys
	{
		_keys = MWTMGR_GetKeyQuantity();
		
		if(_keys >= 12 || _keys + item.GetStat(70) > 12)
			return true;
	}
	else if(item.classid == NTC_UNIT_CUBE)
	{
		_items = me.GetItems(NTC_UNIT_CUBE);
		
		if(_items.length > 0)
			return true;
	}
	else if(NTSI_CheckItem(item, true) == 3)
		return true;
		
	return false;
}

function MWSI_PickupItem(search)
{
	var _item;
	
	if(arguments.length < 1)
		return false;
	
	_item = NTC_FindUnit(NTC_UNIT_ITEM);
	
	if(_item)
	{
		do
		{
			if(_item.classid == search || _item.gid == search || _item.name == search || _item.itemprefix == search || _item.itemsuffix == search)
			{
				if(NTT_CheckSpace(_item.xsize, _item.ysize) && NTSI_PickUpItemInt(_item))
				{
					MWI_WriteLoc(_item);
					
					Print("Picked up " + NTC_ItemQualityToD2Color[MWC_GetItemColorInt(_item)] + _item.name.split("\n")[0]);
					
					if(MWSI_IsCommonLogItem(_item))
						NTC_SendMsgToScript("MWBotGame.ntj", "SET_COMMONITEM_" + _item.classid);
						
					if(GetUIState(0x01) && me.itemoncursor)
					{
						NTCU_CheckCubeInventoryInt();
						NTCU_MoveItemToInventoryInt(_item);
					}
					
					return true;
				}
			}
		} while(_item.GetNext());
	}
	
	return false;
}

function MWSI_IsCommonLogItem(item)
{
	if(item.classid >= 610 && item.classid <= 642) // Rune
		return true;
		
	if(item.classid >= 647 && item.classid <= 657) // Key/Organ/Essence
		return true;
	
	if(item.itemtype >= 91 && item.itemtype <= 102) // Gem
		return true;
	
	return false;
}

function MWSI_IsValuable(item)
{
	if(item.quality >= 2)
	{
		if(item.itemtype == 12 || item.itemtype == 24 || item.itemtype == 25 && item.quality > 3 || item.itemtype == 74 && item.classid >= 622) // Amulets/Scepters/Wands/Runes >= SHAEL
			return true;
		
		if(item.itemclass >= 1)
		{
			switch(item.itemtype)
			{
				case 19: // Belts
				case 32: // Knives
				case 37: // Helms
				case 42: // Throwing Knives
				case 67: // Claws
					if(item.quality < 4)
						break;
				case 3: // Armors
				case 65: // Circlets
				case 68: // Orbs
					return true;
			}
		}
		
		if(item.itemclass >= 2)
		{
			switch(item.itemtype)
			{
				case 2: // Shields
				case 32: // Knives
				case 37: // Helms
				case 69: // Voodooheads
				case 72: // Pelts
					return true;
				case 15: // Boots
				case 16: // Gloves
				case 42: // Throwing Knives
				case 67: // Claws
					if(item.quality > 3)
						return true;
			}
		}
		
		switch(item.classid)
		{
			case 196: // Tomahawk
			case 210: // Truncheon
			case 214: // Tyrant Club
			case 215: // Reinforced Mace
			case 216: // Devil Star
			case 221: // Falcata
			case 222: // Ataghan
			case 223: // Elegant Blade
			case 224: // Hydra Edge
			case 226: // Conquest Sword
			case 227: // Cryptic Sword
			case 228: // Mythical Sword
			case 240: // Flying Axe
			case 259: // Walking Stick
			case 324: // Gothic Plate
			case 325: // Full Plate Mail
			case 326: // Ancient Armor
			case 498: // Sacred Target
			case 499: // Sacred Rondache
			case 502: // Vortex Shield
				return true;
		}
	}
	
	if(MWT_IsSellable(item) && item.GetItemCost(1) >= 25E3)
		return true;
	
	return false;
}
Quote:
Originally Posted by TheCrazy11 View Post
Bei mir bringt der Bot schon längers folgende Fehlermeldung:

Diese ist bis jetzt gekommen wenn im Cube noch ein PA, PS oder Baal-SC gelegen ist.
Kann nicht nachvollziehen, wann der Error kommt, kommt nur ca. alle 100 Games und auch immer bei unterschiedlichen Bots, haben alle die gleiche Cube- & Craft-Config:
Weiß aber nicht ob vor oder nach dem cuben, der Cube war auf jeden Fall immer offen.
Der Fehler nervt insofern, dass der eine Bot dadurch einfach hängt und die Games auf maxtime gehen.

Leider habe ich keine API-Referenz (D2NT/D2BS) gefunden, wo GetItems() dokumentiert ist.
Habe auch in der Ur-D2NT nachgesehen, da wird die name-Eigenschaft auch so verwendet wie bei Muddy's.

EDIT: Bei KingHigh scheint es das gleiche Problem zu sein, die Property name passt wohl nicht ganz?
"Passt wohl nicht ganz" ist der falsche Ausdruck, die Eigenschaft hat ganz einfach den Wert undefined. Das wäre an sich nicht problematisch, nur wird eben über diese Eigenschaft noch die Split() Methode der String Klasse aufgerufen und die lässt sich natürlich nur über ein String Objekt aufrufen.

Es sollte an sich schon reichen, wenn man einfach vor der Ausgabe kontrolliert, ob die Eigenschaft name definiert ist. Demnach müsste die Zeile davor, also Zeile 1672 so aussehen:
Code:
if(_cubeItems[0].name && (MWConfig_ShowCubedGemsInCommonLog || _cubeItems[0].itemtype < 91))
LG
Muddy
05/24/2011 23:56 Aceridos#2062
Ah, dann hab ich das mit den Sockelrezepten gelesen und auf die Craftrezepte übertragen, dankeschön :p
05/25/2011 00:03 DeathFromHeaven#2063
mir ist gerade was sehr seltsames passiert:

wollte wie von Gruener Apfel beschrieben mir mal die Leechscripte mit einbauen.

Hab mir also 2 Bot-scripte im "bots" Ordner erstellt und den von Gruener apfel genannten Inhalt eingefügt. ebenso mit dem Entrypoint und in der Charconfig. Nach einem Manager-Restart, kommt D2 aber nicht mal mehr über den Loading screen hinaus -.-
Passiert mir nicht zum ersten Mal. Also hab ich nur die beiden Bot-Scripte im "bots" Ordner wieder gelöscht und nach nem Manager-Restart funzte alles wie gehabt :)

Kann mir wer jetzt bitte erklären wieso das so ist? Ich kann mir absolut keine eigenen Scripte einfügen :( egal was drin steht, D2 bleibt beim Loading-screen stehen, "klickt" sich also nicht durch den Splash-Screen oder versucht überhaupt sich einzuloggen oder irgendwas :(
05/25/2011 00:08 GruenerApfel#2064
war das nur bei den von mir geposteten scripten so, oder is das generell der fall ?

weil n fehler beim copy pasten habe ich eigentlich nicht gemacht und was vergessen habe ich, denke ich, auch net
05/25/2011 00:08 Rondo80#2065
Quote:
Originally Posted by GruenerApfel View Post
von haus aus net ... gibt aber hier im forum diverse, kann dir aber zumindest die posten welche ich verwende

ntbotleech.ntj


baalleechfight.ntj


diabloleechfight.ntj


und in deiner charconfig musst du dann noch


einfügen

ich hoffe ich hab nix vergessen O_o
also das klappt so nicht, bekomme immer nen error, hat noch wer ne idee?
vor allem den part check ich nit MWConfig_Script.push(["", 5]); woher weiss der bot welches script er nutzen soll?

edit: ok scheint als wenn im ntbotleech.ntj script irgendwo nen syntax error is -.-
05/25/2011 00:16 GruenerApfel#2066
Quote:
Originally Posted by Rondo80 View Post
also das klappt so nicht, bekomme immer nen error, hat noch wer ne idee?
vor allem den part check ich nit MWConfig_Script.push(["", 5]); woher weiss der bot welches script er nutzen soll?
ja rofl -.- woher weiß ich wie du das script bei dir benannt hast ? O_o

wenn du die datei im bot ordner "baalleechfight.ntj" benannt hast, steht dort logischerweise dann MWConfig_Script.push(["baalleechfight.ntj", 5]);

das erste is der entrypoint ... sollte eigentlich klar sein
05/25/2011 00:52 Rondo80#2067
ok habs jetzt anders gemacht und nehme jetzt für den leecher ne andere d2nt version, die aus dem public bot für dummies. Kann den syntax error leider nicht finden somit is das die einfachere Wahl :)
05/25/2011 09:33 TheCrazy11#2068
Quote:
Originally Posted by Muddy_Waters View Post
"Passt wohl nicht ganz" ist der falsche Ausdruck, die Eigenschaft hat ganz einfach den Wert undefined. Das wäre an sich nicht problematisch, nur wird eben über diese Eigenschaft noch die Split() Methode der String Klasse aufgerufen und die lässt sich natürlich nur über ein String Objekt aufrufen.

Es sollte an sich schon reichen, wenn man einfach vor der Ausgabe kontrolliert, ob die Eigenschaft name definiert ist. Demnach müsste die Zeile davor, also Zeile 1672 so aussehen:
Code:
if(_cubeItems[0].name && (MWConfig_ShowCubedGemsInCommonLog || _cubeItems[0].itemtype < 91))
LG
Muddy
Ach ja, hab vergessen zu erwähnen, dass ich die NTCubing.ntl nicht verändert hatte... :(

Habs jetzt eingebaut, überprüfen werde ich das nicht, mag keine extra else-Anweisung schreiben... xD

In Zeile 1762 kommt nochmals name.split() vor:
Code:
_NTCU_LogString += NTC_ItemQualityToD2Color[MWC_GetItemColorInt(_items[n])] + _items[n].name.split("\n")[0];
Habs durch folgendes ersetzt:
Code:
_NTCU_LogString += NTC_ItemQualityToD2Color[MWC_GetItemColorInt(_items[n])] + (_items[n].name) ? _items[n].name.split("\n")[0] : "_items[n].name not defined";
Dann steht einfach anstatt des Itemnamens "_items[n].name not defined".
(Ich weiß, ist dirty, aber so sieht man den Fehler, sollte er mal vorkommen...)


Da ich gerade dabei bin, was muss geändert werden, dass die gecrafteten Sachen verkauft werden und nicht gedroppt?
Habe da mal was von einem Bugfix gelesen, aber imho war das nur zur Fehlerbehebung, dass gar keine Items mehr verkauft werden?
05/25/2011 09:59 DeathFromHeaven#2069
Quote:
Originally Posted by GruenerApfel View Post
war das nur bei den von mir geposteten scripten so, oder is das generell der fall ?

weil n fehler beim copy pasten habe ich eigentlich nicht gemacht und was vergessen habe ich, denke ich, auch net
Nein, das ist Allgemein so, wenn ich eine neue Datei im "bots"-Ordner anlege, egal mit welchem Namen, und auch egal mit welchem Inhalt :(
05/25/2011 10:17 letsid#2070
Quote:
In der SnagIt library war müsste noch ein Fehler sein, versuch es deshalb mal mit dieser hier, dann sollte das Problem nicht mehr auftreten:
Code:
/**
*	This file was modified by [Only registered and activated users can see links. Click Here To Register...]
*	Check the programming section for updates and further scripts
*	Last Update: 12:56 09.05.2011
*/

var _NTSI_IgnoredList = new Array(
526, // Arrows quiver
528, // Bolts quiver
518, // Tome of Town Portal
519, // Tome of Identify
514, // Antidote potion
513, // Stamina potion
517, // Thawing potion
80, // Rancid Gas Pot
81, // Oil Potion
82, // Choking Gas Pot
83, // Exploding Pot
84, // Strangling Gas
85); // Fulminating Pot

function NTSI_LoadNIPFiles(filepath, checkNips)
{
	if(arguments.length < 2)
		checkNips = true;
	
	for(var i = 0; i < NTConfig_NIPFilePath.length; i++)
		NTIPOpenFile(filepath + "/" + NTConfig_NIPFilePath[i]);
		
	if(MWConfig_RunNipCheck && checkNips)
		MWIPCheckNips();
}

function NTSI_PickItems(pickValuables, flag)
{
	var i, _mode;

	if(pickValuables && !MWConfig_PickUpMoneymakers)
		return;
	
	for(i = 0 ; i < 25 ; i++)
	{
		_mode = me.mode;

		if((_mode >= 1 && _mode <= 3) || _mode == 5 || _mode == 6)
			break;

		NTC_Delay(NTC_DELAY_FRAME);
	}

	if(i < parseInt(NTConfig_SnagDelay/NTC_DELAY_FRAME))
		NTC_PingDelay(NTConfig_SnagDelay-(i*NTC_DELAY_FRAME));

	NTSI_SnagIt(pickValuables, flag);
}

function NTSI_SnagIt(pickValuables)
{
	var i, j;
	var _item;
	var _checkeditem, _checkeditems;
	var _value;
	var _minindex, _mindistance;
		
	if(arguments.length < 1)
		pickValuables = false;
	
	_item = NTC_FindUnit(NTC_UNIT_ITEM);

	if(!_item)
		return;

	_checkeditems = new Array();
	
	do
	{
		if(_item.mode == 3 || _item.mode == 5)
		{
			if(NTSI_IsIgnoredItemInt(_item.classid))
				continue;

			if(GetDistance(me, _item) <= NTConfig_SnagRange)
			{
				_value = NTSI_CheckItem(_item, true);

				if(_item.classid == 529 && MWConfig_MinimumTpScrollCount != 0 || _item.classid == 530 && MWConfig_MinimumIdScrollCount != 0 || _item.classid == 543 && MWConfig_CarryKeys)
					_value = 1;
					
				if(pickValuables && (_value == 0 || _value == 3) && MWSI_IsValuable(_item))
					_value = 4;
				
				if(_value != 0 && _value != 3)
				{
					_checkeditem = new NTSI_ItemInt(_item, _value);
					
					if(_checkeditem)
						_checkeditems.push(_checkeditem);
				}
			}
		}
	} while(_item.GetNext());
	
	while(_checkeditems.length > 0)
	{
		_mindistance = 100000;

		for(i = 0; i < _checkeditems.length; i++)
		{
			if(MWConfig_PickUpPriorityItemsFirst && !_checkeditems[i].HasPriority()) // If the item at index i is a low priority item
			{
				for(j = 0; j < _checkeditems.length; j++) // Loop through all items in pickup queue
				{
					if(j == i)
						continue;
					
					if(_checkeditems[j].HasPriority())
						break;
				}
				 // If the loop was aborted due to a high priority item in the pickup queue, skip the item at index i
				if(j < _checkeditems.length)
					continue;
			}
			
			_value = GetDistance(me.x, me.y, _checkeditems[i].x, _checkeditems[i].y);

			if(_value < _mindistance)
			{
				_minindex = i;
				_mindistance = _value;
			}
		}

		_checkeditem = _checkeditems.splice(_minindex, 1)[0];
		
		_item = NTC_FindUnit(NTC_UNIT_ITEM, _checkeditem.GID);

		if(_item)
		{
			if(!NTSI_IsLimitedItemInt(_item))
			{
				if(MWConfig_ShowOverheadStatus)
					MWC_PrintOverheadStatus("Picking up items...");
				
				if(NTT_CheckSpace(_item.xsize, _item.ysize) || _checkeditem.ClassID == 523 || _item.itemtype == 4 || _item.classid == 543 || _item.itemtype == 22 || _item.itemtype >= 76 && _item.itemtype <= 78)
				{
					MWI_WriteLoc(_item);
					
					if(NTSI_PickUpItemInt(_item)) 
					{
						if(_item && _item.name && _item.itemtype != 22 && _checkeditem.ClassID != 523 && _item.itemtype != 4 && _item.classid != 543)
						{
							if(_item.itemtype < 76 || _item.itemtype > 81)
							{
								Print("Picked up " + NTC_ItemQualityToD2Color[MWC_GetItemColorInt(_item)] + _item.name.split("\n")[0] + ((_checkeditem.Status == 4) ? " ÿc8[" + MWC_InsertDigitSeperator(_item.GetItemCost(1)) + "]" : ""));
								NTC_SendMsgToScript("MWBotGame.ntj", "SET_PICKED_1");
								
								if(!pickValuables)
								{
									if(MWSI_IsCommonLogItem(_item))
										NTC_SendMsgToScript("MWBotGame.ntj", "SET_COMMONITEM_" + _item.classid);
									
									if(_item.quality < 4 && _checkeditem.Status < 2)
									{
										if(MWConfig_UseXMLItemlog)
											MWI_WriteLog(_item, 0);
											
										if(_item.classid <= 609 || _item.classid >= ((MWConfig_LowestRuneToLog < 0 || MWConfig_LowestRuneToLog > 32) ? 0 : MWConfig_LowestRuneToLog) + 610)
											MWI_WriteManagerLog(_item, 0);
									}
								}
							}
							else if(MWConfig_ShowPotionPickups)
								Print("Picked up " + _item.name.split("\n")[0]);
						}
					}
				}
				else
				{
					if(!_checkeditem.Retry && !pickValuables)
					{
						_checkeditem.Retry = true;

						if(MWConfig_IdentAfterPickup)
							MWL_IDItemsAfterPickup(true);
						
						if(!NTT_CheckSpace(_checkeditem.xSize, _checkeditem.ySize))
						{
							if(!NTTMGR_VisitTown())
								return;
						}

						_checkeditems.push(_checkeditem);
					}
				}
			}
		}
	}
	
	if(MWConfig_IdentAfterPickup)
		MWL_IDItemsAfterPickup();
}

function NTSI_CheckItem(item, checkQuantity)
{
	var _result;
	
	if(arguments.length < 2)
		checkQuantity = false;

	switch(item.quality)
	{
	case 5:
	case 8:
		_result = NTIPCheckItem(item, checkQuantity);
		break;
	default:
		_result = NTIPCheckItem(item, checkQuantity);

		if(NTCU_CheckItem(item, _result))
			_result = 2;

		break;
	}
	
	if(item.itemflag&0x4000000)
		_result = 1;
	
	return _result;
}

// Internal function
function NTSI_ItemInt(item, checkedstatus)
{
	this.ClassID = item.classid;
	this.GID = item.gid;
	this.ItemType = item.itemtype;
	this.x = item.x;
	this.y = item.y;
	this.xSize = item.xsize;
	this.ySize = item.ysize;
	this.Status = checkedstatus;
	this.Retry = false;
	
	this.HasPriority = function()
	{
		if(this.ItemType >= 91 && this.ItemType <= 102 // Gem
			|| this.ItemType >= 76 && this.ItemType <= 81 // Potions
			|| this.ClassID == 543 || this.ItemType == 4 // Gold
			|| this.ClassID >= 610 && this.ClassID <= 629 // Runes <= FAL
			|| this.ClassID == 529 || this.ClassID == 530 // Scrolls
			|| this.ClassID == 543) // Keys
			return false;
			
		return true;
	}
}

function NTSI_PickUpItemInt(snagitem)
{
	var _classid;
	var _tome, _scrollPreCount;
	var _keys, _gold;
	
	_classid = snagitem.classid;
	
	// Save properties that will be invalidated at pickup
	_gold = snagitem.GetStat(14);
	_keys = snagitem.GetStat(70);
	
	// The successful pickup of a scroll is determined by the change of quantity
	if(_classid == 529 || _classid == 530)
	{
		_tome = NTT_GetTome(Math.abs(snagitem.classid - 530));
		
		if(!_tome)
			return false;
		
		_scrollPreCount = _tome.GetStat(70); // Save the quantity before pickup
	}

	for(var i = 0; i < 40; i++)
	{
		if((i % 10) == 0 && (snagitem.mode == 3 || snagitem.mode == 5))
		{
			if(MWConfig_UseTelekinesis && i < 20 && (_classid == 523 || snagitem.itemtype == 4 || _classid == 543 || _classid == 529 || _classid == 530 || snagitem.itemtype >= 76 && snagitem.itemtype <= 81) && NTC_GetSkillLevel(MWS_TELEKINESIS) > 0)
				MWC_CastTelekinesis(snagitem);
			else
			{
				if(GetDistance(me, snagitem) > 3)
					NTM_MoveTo(snagitem.areaid, snagitem.x, snagitem.y, 3, false, 0, false);

				if(NTC_ClearCursor())
					NTC_DoClick(NTC_CLICK_LDOWN, NTC_SHIFT_NONE, snagitem);
			}
		}

		NTC_Delay(NTC_DELAY_FRAME);
		
		if(_classid == 529 || _classid == 530) // Scrolls
		{
			_tome = NTT_GetTome(Math.abs(_classid - 530));

			if(_tome && _tome.GetStat(70) != _scrollPreCount) // The scroll was picked up successfully if the quantity after pickup differs from the one before
				return true;
		}
		else if(_classid == 543) // Keys
		{
			if(snagitem.GetStat(70) == -1) // The quantity property turns to -1 after the key was picked
			{
				if(_keys > 1)
					Print("Picked up " + _keys + " Keys");
				else
					Print("Picked up Key");
					
				return true;
			}
		}
		else if(_classid == 523 || snagitem.itemtype == 4) // Gold
		{
			if(snagitem.GetStat(14) == -1) // The gold property turns to -1 after the gold was picked
			{
				if(MWConfig_ShowGoldPickupsPerScript)
					NTC_SendMsgToScript("MWBotGame.ntj", "SET_SCRIPTGOLD_" + _gold);
				if(MWConfig_ShowGoldPickups)
					Print("Picked up " + MWC_InsertDigitSeperator(_gold) + " Gold");
					
				return true;
			}
				
			if(i % 10 == 0 && NTC_CharGoldFull())
			{
				NTC_SendMsgToScript("MWBotGame.ntj", "STOP_STATUS_TEXT_UPDATE");
				SetStatusText("ÿc8Visiting Town...");
				NTTMGR_VisitTown();
				SetStatusText("ÿc8Done!");
				NTC_SendMsgToScript("MWBotGame.ntj", "SET_DEFAULT_STATUS");
			}
			
			return true;
		}
		else if(snagitem.mode != 3 && snagitem.mode != 5)
			return true;
	}

	return false;
}

function NTSI_IsIgnoredItemInt(classid)
{
	for(var i = 0 ; i < _NTSI_IgnoredList.length ; i++)
	{
		if(classid == _NTSI_IgnoredList[i])
			return true;
	}

	return false;
}

function NTSI_IsLimitedItemInt(item)
{
	var i;
	var _items, _tome, _keys;

	if(item.itemtype >= 76 && item.itemtype <= 78)
	{
		if(!MWT_IsPotionRequired(item.code))
			return true;
	}
	else if(item.quality == 7 && item.classid >= 603 && item.classid <= 605)
	{
		_items = me.GetItems(item.classid);

		if(_items.length > 0)
			return true;
	}
	else if(item.classid == 529 || item.classid == 530) // Scrolls
	{
		_tome = NTT_GetTome(Math.abs(item.classid - 530));

		if(!_tome || _tome.GetStat(70) == 20 || item.classid == 529 && _tome.GetStat(70) >= MWConfig_MinimumTpScrollCount || item.classid == 530 && _tome.GetStat(70) >= MWConfig_MinimumIdScrollCount)
			return true;
	}
	else if(item.classid == 543) // Keys
	{
		_keys = MWTMGR_GetKeyQuantity();
		
		if(_keys >= 12 || _keys + item.GetStat(70) > 12)
			return true;
	}
	else if(item.classid == NTC_UNIT_CUBE)
	{
		_items = me.GetItems(NTC_UNIT_CUBE);
		
		if(_items.length > 0)
			return true;
	}
	else if(NTSI_CheckItem(item, true) == 3)
		return true;
		
	return false;
}

function MWSI_PickupItem(search)
{
	var _item;
	
	if(arguments.length < 1)
		return false;
	
	_item = NTC_FindUnit(NTC_UNIT_ITEM);
	
	if(_item)
	{
		do
		{
			if(_item.classid == search || _item.gid == search || _item.name == search || _item.itemprefix == search || _item.itemsuffix == search)
			{
				if(NTT_CheckSpace(_item.xsize, _item.ysize) && NTSI_PickUpItemInt(_item))
				{
					MWI_WriteLoc(_item);
					
					Print("Picked up " + NTC_ItemQualityToD2Color[MWC_GetItemColorInt(_item)] + _item.name.split("\n")[0]);
					
					if(MWSI_IsCommonLogItem(_item))
						NTC_SendMsgToScript("MWBotGame.ntj", "SET_COMMONITEM_" + _item.classid);
						
					if(GetUIState(0x01) && me.itemoncursor)
					{
						NTCU_CheckCubeInventoryInt();
						NTCU_MoveItemToInventoryInt(_item);
					}
					
					return true;
				}
			}
		} while(_item.GetNext());
	}
	
	return false;
}

function MWSI_IsCommonLogItem(item)
{
	if(item.classid >= 610 && item.classid <= 642) // Rune
		return true;
		
	if(item.classid >= 647 && item.classid <= 657) // Key/Organ/Essence
		return true;
	
	if(item.itemtype >= 91 && item.itemtype <= 102) // Gem
		return true;
	
	return false;
}

function MWSI_IsValuable(item)
{
	if(item.quality >= 2)
	{
		if(item.itemtype == 12 || item.itemtype == 24 || item.itemtype == 25 && item.quality > 3 || item.itemtype == 74 && item.classid >= 622) // Amulets/Scepters/Wands/Runes >= SHAEL
			return true;
		
		if(item.itemclass >= 1)
		{
			switch(item.itemtype)
			{
				case 19: // Belts
				case 32: // Knives
				case 37: // Helms
				case 42: // Throwing Knives
				case 67: // Claws
					if(item.quality < 4)
						break;
				case 3: // Armors
				case 65: // Circlets
				case 68: // Orbs
					return true;
			}
		}
		
		if(item.itemclass >= 2)
		{
			switch(item.itemtype)
			{
				case 2: // Shields
				case 32: // Knives
				case 37: // Helms
				case 69: // Voodooheads
				case 72: // Pelts
					return true;
				case 15: // Boots
				case 16: // Gloves
				case 42: // Throwing Knives
				case 67: // Claws
					if(item.quality > 3)
						return true;
			}
		}
		
		switch(item.classid)
		{
			case 196: // Tomahawk
			case 210: // Truncheon
			case 214: // Tyrant Club
			case 215: // Reinforced Mace
			case 216: // Devil Star
			case 221: // Falcata
			case 222: // Ataghan
			case 223: // Elegant Blade
			case 224: // Hydra Edge
			case 226: // Conquest Sword
			case 227: // Cryptic Sword
			case 228: // Mythical Sword
			case 240: // Flying Axe
			case 259: // Walking Stick
			case 324: // Gothic Plate
			case 325: // Full Plate Mail
			case 326: // Ancient Armor
			case 498: // Sacred Target
			case 499: // Sacred Rondache
			case 502: // Vortex Shield
				return true;
		}
	}
	
	if(MWT_IsSellable(item) && item.GetItemCost(1) >= 25E3)
		return true;
	
	return false;
}
Ich habe die Snagit ersetzt und dann kam ein fehler:
Zeile 88 in der NTBotGame.ntl