Register for your free account! | Forgot your password?

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

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

Advertisement



Kleinere D2NT 1.7 Modifikationen gefällig?

Discussion on Kleinere D2NT 1.7 Modifikationen gefällig? within the Diablo 2 Programming forum part of the Diablo 2 category.

Reply
 
Old   #1
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Kleinere D2NT 1.7 Modifikationen gefällig?

Moin zusammen,
vielleicht geht es einigen anderen ja auch so, dass sie frei nach dem Motto "Never touch a running system" dem 1.7er treu geblieben sind.
Da ich bei mir mittlerweile schon in fast allen Scripten kleinere Veränderungen vorgenommen habe, dachte ich mir, ich poste mal die nützlichsten für andere 1.7er Freunde.

Ich fange an dieser Stelle erstmal mit zwei Kleinigkeiten an, vielleicht gibts später mehr.

Punkt 1: Gold wird zu langsam aufgehoben (2 Sekunden Delay)

An sich ne sehr simple Sache, aber für Freunde des Gamblens die gerne etwas Gold mitnehmen sicherlich ziemlich nervig. Grund für die Verzögerung beim Picken von Gold ist eine Schleife in einer Funktion in der "NTSnagIt.ntl".
Hier mal die besagte Funktion im Original:
Code:
function NTSI_PickUpItemInt(snagitem)
{
	for(var i = 0 ; i < 20 ; i++)
	{
		if((i % 5) == 0 && (snagitem.mode == 3 || snagitem.mode == 5))
		{
			if(GetDistance(me, snagitem) > 2)
				NTM_MoveTo(snagitem.areaid, snagitem.x, snagitem.y);

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

		NTC_Delay(100);

		if(snagitem.mode != 3 && snagitem.mode != 5)
		{
			NTC_PingDelay(200);
			return true;
		}
	}

	return false;
}
An dieser Stelle ist anzumerken, dass der Wert der Variable mode der Klasse snagitem für Gold den Wert 3 oder 5 annimmt. Als Folge läuft die for Schleife also für Gold immer 20 mal durch und gibt dann false zurück. Etwas ungeschickt, ob das so gedacht war weiss man nicht, ich meine in 2.1 wurde es als "bug" bezeichnet und entfernt. Um die Änderung gering zu halten erweitern wir einfach die if-Bedingung etwas.
Das ganze sieht dann so aus:
Code:
function NTSI_PickUpItemInt(snagitem)
{
	for(var i = 0 ; i < 20 ; i++)
	{
		if((i % 5) == 0 && (snagitem.mode == 3 || snagitem.mode == 5))
		{
			if(GetDistance(me, snagitem) > 2)
				NTM_MoveTo(snagitem.areaid, snagitem.x, snagitem.y);

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

		NTC_Delay(100);

		[COLOR="Red"]if(snagitem.mode != 3 && snagitem.mode != 5 || snagitem.name == "Gold")[/COLOR]
		{
			NTC_PingDelay(200);
			return true;
		}
	}

	return false;
}
Nun wird läuft die Schleife bei Gold nurnoch einmal durch, die 300ms Delay sollten bleiben und stören auch nicht weiter. Im Grunde könnte man die for-Schleife wohl auch ganz entfernen, da nach meinen Tests alles andere beim ersten durchlauf gepickt wird, aber das sparen wir uns mal, so gehts ja schließlich auch.

Punkt 2: Tränke nach Bedarf Picken

Auch hier ein Feature, dass in den neueren Versionen von Haus aus verfügbar ist, in 1.7 muss man dafür selbst Hand anlegen. Hierbei ist anzumerken, dass ich mir die Funktionen bei Cybervirus abgeschaut habe. Warum soll man schließlich das Rad neu erfinden? (Auch wenn vorher einige Fehler in den Funktionen waren )
Zunächst müssen dazu mal die neuen Funktionen einfügen. Und zwar in die "NTTown.ntl". Folgende Funktionen sind dafür notwendig:
Code:
function NTT_CheckBeltJuvies()
{
	var _needed_juvs = 0;
	for(var i = 0 ; i < 4 ; i++)
	{
		_NTT_BeltColNeeded[i] = NTT_GetNeededPotionsColInt(NTConfig_BeltColType[i], i);
		if(NTConfig_BeltColType[i] == "rv")
			_needed_juvs = _needed_juvs + _NTT_BeltColNeeded[i];
	}
	return _needed_juvs;
}

function NTT_CheckBeltHealing()
{
	var _needed_hp = 0;
	for(var i = 0 ; i < 4 ; i++)
	{
		_NTT_BeltColNeeded[i] = NTT_GetNeededPotionsColInt(NTConfig_BeltColType[i], i);
		if(NTConfig_BeltColType[i] == "hp")
			_needed_hp = _needed_hp + _NTT_BeltColNeeded[i];
	}
	return _needed_hp;
}

function NTT_CheckBeltMana()
{
	var _needed_mp = 0;
	for(var i = 0 ; i < 4 ; i++)
	{
		_NTT_BeltColNeeded[i] = NTT_GetNeededPotionsColInt(NTConfig_BeltColType[i], i);
		if(NTConfig_BeltColType[i] == "mp")
			_needed_mp = _needed_mp + _NTT_BeltColNeeded[i];
	}
	return _needed_mp;
}
Nachdem die Funtionen nun bekannt sind muss natürlich noch der entsprechende Aufruf erfolgen. Dies geschieht mal wieder in der "NTSnagIt.ntl" und sieht wie folgt aus:
Code:
			if(!_itemfound)
			{
				_itemtosnag.ShouldSnag = 0;
				_itemtosnag.HasBeenSnagged = true;
			}
			
[COLOR="Red"]			//Checking if there is any need of potions
			if((_itemunit.classid >= 515 && _itemunit.classid <= 516) && NTT_CheckBeltJuvies() == 0)
			{         
				_itemtosnag.ShouldSnag = 0;
				_itemtosnag.HasBeenSnagged = true;
			}

			if((_itemunit.classid >= 592 && _itemunit.classid <= 596) && NTT_CheckBeltMana() == 0)
			{
				_itemtosnag.ShouldSnag = 0;
				_itemtosnag.HasBeenSnagged = true;
			}
		
			if((_itemunit.classid >= 587 && _itemunit.classid <= 591) && NTT_CheckBeltHealing() == 0)
			{
				_itemtosnag.ShouldSnag = 0;
				_itemtosnag.HasBeenSnagged = true;
			} 
			//--------------------------[/COLOR]
			if(_itemtosnag.ShouldSnag == 10)
			{
Der Teil in rot ist neu, hier wird überprüft ob das betrachtete Item eine Art von Trank ist. Wenn ja wird nun mit den Funktionen weiter oben überpüft wieviele Tränke dieser Art benötigt werden. Ist der Rückgabewert Null, wird der betrachtete Trank liegen gelassen.

So, das soll es vorerst gewesen sein, ich hoffe dem ein oder anderem hilft das weiter.
Falls jemand Fehler findet bitte melden, sollte an sich alles soweit passen.

Lg
Muddy
Muddy Waters is offline  
Thanks
5 Users
Old 03/12/2010, 12:27   #2
 
elite*gold: 0
Join Date: Feb 2008
Posts: 496
Received Thanks: 30
hab mal thanks'd
bizeps is offline  
Old 03/13/2010, 22:28   #3
 
Metal God's Avatar
 
elite*gold: 0
Join Date: Sep 2009
Posts: 636
Received Thanks: 43
Quote:
Originally Posted by bizeps View Post
hab mal thanks'd
gut dass dus nochmal schreibst, sonst hätte es ja keiner bemerkt^^ die Gold aufheb funktion is echt nett =)
Metal God is offline  
Old 03/17/2010, 00:49   #4
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Quote:
Originally Posted by Metal *** View Post
gut dass dus nochmal schreibst, sonst hätte es ja keiner bemerkt^^ die Gold aufheb funktion is echt nett =)
Ich fands auch furchtbar nervig, zumal ich auf Goldfind ausgelegte Bots habe, bei denen das eine echte Erleichterung ist. Und schnell gemacht ist es allemal.

Ich spiele übrigens gerade mit dem Gedanken meine Itemlogger Version zu posten. Dieser loggt sämtliche stats gepickter Items nebst einiger Zusatzinfos in ein xml file. An sich extrem schick, allerdings basiert die Basis nicht auf meinem Mist, auch wenn ich mal wieder einiges editiert habe, um das ganze wirklich gut nutzbar zu machen. Jemand ne Idee wie man sowas semi-veröffentlichen könnte? Vielleicht ein Archiv mit Passwort oder so...

Besteht generell Interesse daran?
Muddy Waters is offline  
Old 03/17/2010, 11:34   #5
 
kal_el's Avatar
 
elite*gold: 0
Join Date: Jan 2009
Posts: 7,310
Received Thanks: 2,205
wir haben ja paar so "ich will meine items loggen " freaks ^^
und wen du aufs original verweist..creator... seite..etc. und credits gibts...die veränderungen bekannt gibst, wirds auch keine probs geben.

regards
kal_el is offline  
Old 03/17/2010, 16:22   #6
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Quote:
Originally Posted by kal_el View Post
wir haben ja paar so "ich will meine items loggen " freaks ^^
und wen du aufs original verweist..creator... seite..etc. und credits gibts...die veränderungen bekannt gibst, wirds auch keine probs geben.

regards
Alles klar, dann lege ich mal los, wird etwas mehr, darum werde ich es wohl auf mehrere Beiträge strecken.

Punkt 3: Agor's itemlog adaptiert und erweitert für D2NT 1.7.2

Meines Wissens nach ursprünglich von agor verfasst, für das zusätzlich Loggen der location war snyles verantwortlich, der diese Funktion nachträglich hinzugefügt hat hat.
Credits gehen also in erster Linie an diese beiden Herren.

Dann hätten wir noch ein paar kleine Änderungen meinerseits:
- Sockelzahlen ins Log eingefügt
- Stats von Runen werden korrekt angezeigt
- diverse Layout und Farbanpassungen im Log
- Angabe der Absolutdefense für alle Arten von Rüstungrn
- Angabe etwaiger Absolutschadenswerte für alle Arten von Waffen (eventuell buggy)
-Behebung eines Bugs, der die Verwendung mit D2NT 1.7 unmöglich machte
- Änderung der Log Speicherung: Nun wird ein Log file für den jeweiligen Tag angelegt
- Angabe des Itemtyps im Log
- Einbinden des loggers fürs gambling
- jede Menge kleinkram

Für die die sich nichts drunter vorstellen können, hier mal ein Bildchen:

(Verzeihung dass es so groß ist, aber resizing per BB Code wollte leider nicht)

Anforderungen:
- der Logger wird NUR bei englischem D2 funktionieren (ob euer D2 ohnehin englisch ist oder ihr es nachträglich umstellt ist natürlich egal)
-D2NT 1.7.2, vermutlich auch kompatibel zu neueren Versionen
- ein bisschen Verstand um das ganze zu implementieren

Features:
Jedes gepickte Item wird beim Verkaufen oder Behalten in ein log file gespeichert. Dieses wird jeden Tag neu erstellt (ansonsten wird es mit der Zeit zu groß und führt zu massiven delays). Dabei werden folgende Attribute geloggt: Datum/Uhrzeit, Char(indirekt), Fundort(ungenau), Itemlevel, Itemtyp, Itemname, Itemqualität(magic, set, etc...), sowie sämtliche Stats.
Dadurch bekommt man eine schicke Übersicht auch über die Dinge, die nicht behalten wurden und kann so beispielsweise Fehler in der Pickit Config ausmachen oder sehen, dass doch einiges gepickt wurde, was grundsätzlich hätte gut sein können.

Soviel zur Einführung, in meinem nächsten Beitrag gehts dann ans Eingemachte.

LG
Muddy
Muddy Waters is offline  
Old 03/17/2010, 18:11   #7
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
So, dann schreiten wir mal zur Tat.

Im Anhang finden sich die benötigten Dateien. Ich habe die Stellen/Funktionen bei denen Änderungen vorgenommen worden mit Comments versehen, wer also nur das ändern möchte was er braucht findet die Sachen so hoffentlich schneller.

Was ich oben noch vergessen hatte; Bekannte Probleme:

Sorgt dafür, dass nicht ins Inventar ausgelagert wird, ansonsten wird das Item bei jedem Identen neu geloggt.
Es kann zu Problemen kommen wenn ihr das Log öffnet, während der bot versucht darin zu schreiben. Also immer nur mal eben reinschauen, am besten wenn der Bot gerade nicht Identet. (Wobei ich das auch immer mache wie es mir passt) Sollte obiges passieren, kann es sein dass nur der XML Kopf in eurem log file steht, in diesem Fall manuell <itemlog> /n </itemlog> einfügen oder das alte löschen, dann wird automatisch beim Start eines games ein neues erstellt.

Ein neu erstelltes Log sollte in etwa so aussehen:
HTML Code:
<?xml version="1.0" encoding="iso-8859-1"?>
<?xml-stylesheet href="itemlog.xsl" type="text/xsl"?>
<itemlog> 
</itemlog>

Weiter gehts mit dem was zusätzlich noch gemacht werden muss:

Im Ordner logs findet sich ein Ordner den ich mal provokativ "CHARNAME" genannt habe.
Wie man sich unschwer denken kann muss dieser den Namen eures bzw. eurer Chars haben. Am besten ihr kopiert den Ordner und benennt ihn danach um, die beiden dateien in dem Ordner sind notwendig für die spätere formatierte Ausgabe im Browser, sprich damit alles schick aussieht.
In diesem Ordner werden später auch die Log files gespeichert, welche ihr mit einem handelsüblichen Browser öffnen könnt.

Zusätzlich habe ich noch zwei globale bool Variablen eingeführt, damit man das Log bei bedarf auch deaktivieren kann. Diese sind schon in der beigefügten NTConfig.ntl deklariert, ihr müsst sie aber natürlich noch in eurer char config initialisieren.

Das sollte dann wie folgt aussehen:
Code:
NTConfig_FullLog = true;     //Log any item which is picked and either sold or kept
NTConfig_LogToManager = false;     // Log Pickups to the Manager's Log as well
Die Namen lassen schon darauf schließen, erstere Variable ist für das Itemlog zuständig, zweitere legt fest, ob Pickups auch nochmal im Log des D2NT Managers auftauchen sollen.

Das isses dann auch schon, an sich eine ganz einfache Sache.
Ich hoffe ich habe keine Fehler reingebaut und es ist halbwegs verständlich.
Ich weiss nicht ob das für ganz ohne programmiertechnische Vorschädigung zu verstehen ist, aber darum stehts ja auch in der Programming Sektion, ist also eher für Leute gedacht, die ein bisschen Ahnung mitbringen.

Bei Fehlern in den Scripten selbst bitte melden, man baut doch schnell mal kleine Fehler ein, wobei ich das Ganze in der Form schon eine Weile erfolgreich nutze und daher grobe Fehler in den Scripten relativ sicher ausschließen kann. Viel Spaß beim Testen!

LG
Muddy

P.S.: Das Passwort für das ZIP-Archiv lautet "muddy"
Attached Files
File Type: zip Myitemlog.zip (41.2 KB, 13 views)
Muddy Waters is offline  
Thanks
2 Users
Old 04/02/2010, 06:27   #8
 
elite*gold: 0
Join Date: Mar 2010
Posts: 2
Received Thanks: 0
Hey Muddy,

saubere Arbeit! Ist es möglich das auch für den aktuellen D2NT zu implementieren?
.phreak is offline  
Old 04/09/2010, 17:04   #9
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Quote:
Originally Posted by .phreak View Post
Hey Muddy,

saubere Arbeit! Ist es möglich das auch für den aktuellen D2NT zu implementieren?
Ist in Arbeit, kann aber noch ein paar Tage dauern da ich gerade erst beginne mich mit D2NT 3.0 zu befassen.

Bin schon sehr gespannt, nach dem überfliegen des Change Logs gibts doch einige schicke neue Funktionen.
Beispielsweise sollte das auslesen der Lvl requirements endlich korrekt funktionieren, diese werde ich dann mit ins Log einbinden.

Stay tuned!

LG
Muddy
Muddy Waters is offline  
Old 04/14/2010, 19:11   #10
 
elite*gold: 0
Join Date: Apr 2010
Posts: 3
Received Thanks: 0
Moin, hab mich bisschen damit beschäftigt und geschafft dein Logsystem einzubauen. Folgende Änderungen hab ich vorgenommen:

In Scripts/libs/ die Itemlogger.ntl geschoben, und in der Datei

Code:
Include("njipAliases.ntl");
zu
Code:
Include("libs/common/NTItemAlias.ntl");
geändert.

Die NTSnagIt.ntl so bearbeitet:

Code:
Include("libs/itemlogger.ntl");

function NTSI_SnagIt()
{
	var i;
	var _item;
	var _checkeditem, _checkeditems;
	var _value;
	var _minindex, _mindistance;
	var _isEthereal;
	
	
	_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);

				if(_value)
					_checkeditems.push(new NTSI_ItemInt(_item, _value));
			}
		}
	} while(_item.GetNext());

	while(_checkeditems.length > 0)
	{
		_mindistance = 100000;

		for(i = 0 ; i < _checkeditems.length ; i++)
		{
			_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(NTT_CheckSpace(_item.xsize, _item.ysize))
				{
					if(NTSI_PickUpItemInt(_item))
					{
						if(_checkeditem.ClassID == 523)
							Print("Picked up " + GetLocaleString(2215));
						else
							Print("Picked up " + NTC_ItemQualityToD2Color[_item.quality] + _item.name.split("\n")[0]);

						if(_item.quality < 4 && _checkeditem.Status < 2 && _item.itemtype != 4 && (_item.itemtype < 76 || _item.itemtype > 81))
						{
							if(_item.itemflag == 0x400000)
								_isEthereal = 1;
							else
								_isEthereal = 0;
							writeLog(_item, me, _isEthereal, 0);
							NTC_SendLogToOOG(NTC_LOG_ITEM,  "Kept "+ NTC_ItemQualityToMGRColor[_item.quality] + _item.name.split("\n")[0] + ";" + _item.itemdesc );
						}
					}
				}
				else
				{
					if(!_checkeditem.Retry)
					{
						_checkeditem.Retry = true;

						if(!NTTMGR_VisitTown())
							return;

						_checkeditems.push(_checkeditem);
					}
				}
			}
		}
	}
}
In NTTown.ntl
Code:
Include("libs/itemlogger.ntl");

function NTT_GambleIt(npc)
{
	var _items, _newitem;

	if(!npc)
		return false;

	if(!GetUIState(0x0C))
		return false;

	_items = npc.GetItems();

	if(!_items)
		return false;

	for(var i = 0 ; i < _items.length ; i++)
	{
		if(NTC_MyGold() < NTConfig_GambleStopGold)
			return false;

		if(NTT_IsItemInGambleArrayInt(_items[i].classid))
		{
			if(NTT_CheckSpace(_items[i].xsize, _items[i].ysize))
			{
				NTT_GetOldItemsInt();

				if(NTT_ShopItem(_items[i], npc, 2))
					_newitem = NTT_GetGambledItemInt();
				else
					return false;

				if(_newitem)
				{
					while(!(_newitem.itemflag&0x10))
						NTC_Delay(100);

					switch(NTSI_CheckItem(_newitem))
					{
					case 1:
						writeLog(_newitem, me, 0, 0);
						NTC_SendLogToOOG(NTC_LOG_ITEM, "Kept " + NTC_ItemQualityToMGRColor[_newitem.quality] + _newitem.name.split("\n")[0] + ";" + _newitem.itemdesc);
					case 2:
						break;
					default:
						writeLog(_items[i], me, 0, 1);
						NTT_ShopItem(_newitem, npc, 1);
						break;
					}
				}
			} 
		}
	}

	return true;
}
in NTTownManager.ntl

Code:
function NTTMGR_IDItems(npc)
{
	Include("libs/itemlogger.ntl");
	
	var _tome, _scroll;
	var _result;
	var _items = NTT_GetUnidItems();
	var _isEthereal;

	if(!_items || _items.length < 1)
		return;

	_tome = NTT_GetTome();

	if(_tome && _tome.GetStat(70) < _items.length)
		NTT_FillTome(npc);

	for(var i = 0 ; i < _items.length ; i++)
	{
		if(_items[i].itemflag == 0x400000)
			_isEthereal = 1;
		else
			_isEthereal = 0;
		switch(NTSI_CheckItem(_items[i]))
		{
		case 1:
			writeLog(_items[i], me, _isEthereal, 0);
			NTC_SendLogToOOG(NTC_LOG_ITEM,ReadLoc() + ": Kept " + NTC_ItemQualityToMGRColor[_items[i].quality] + _items[i].name.split("\n")[0] + ";" + _items[i].itemdesc);
		case 2:
			break;
		case -1:
			if(_tome)
				_result = NTT_IdItem(_tome, _items[i]);
			else
			{
				_scroll = NTT_GetScroll();

				if(!_scroll)
				{
					NTT_BuyScrolls(npc);
					_scroll = NTT_GetScroll();
				}

				_result = NTT_IdItem(_scroll, _items[i]);
			}

			if(_result)
			{
				switch(NTSI_CheckItem(_items[i]))
				{
				case 1:
					writeLog(_items[i], me, 0, 0);
					NTC_SendLogToOOG(NTC_LOG_ITEM,ReadLoc() + ": Kept " + NTC_ItemQualityToMGRColor[_items[i].quality] + _items[i].name.split("\n")[0] + ";" + _items[i].itemdesc);
				case 2:
					break;
				default:
					writeLog(_items[i], me, 0, 1);
					NTT_ShopItem(_items[i], npc, 1);
					break;
				}
			}
			else	
				NTT_ShopItem(_items[i], npc, 1);

			break;
		}
	}
}
und zu guter letzt in NTItemAlias.ntl
der Array ist _nicht_ vorhanden, einfach unten anhängen.

Code:
//Array to convert classId to Itemname
var njipNameString = new Array(658);
njipNameString[0]="Hand Axe";
njipNameString[1]="Axe";
njipNameString[2]="Double Axe";
njipNameString[3]="Military Pick";
njipNameString[4]="War Axe";
njipNameString[5]="Large Axe";
njipNameString[6]="Broad Axe";
njipNameString[7]="Battle Axe";
njipNameString[8]="Great Axe";
njipNameString[9]="Giant Axe";
njipNameString[10]="Wand";
njipNameString[11]="Yew Wand";
njipNameString[12]="Bone Wand";
njipNameString[13]="Grim Wand";
njipNameString[14]="Club";
njipNameString[15]="Scepter";
njipNameString[16]="Grand Scepter";
njipNameString[17]="War Scepter";
njipNameString[18]="Spiked Club";
njipNameString[19]="Mace";
njipNameString[20]="Morning Star";
njipNameString[21]="Flail";
njipNameString[22]="War Hammer";
njipNameString[23]="Maul";
njipNameString[24]="Great Maul";
njipNameString[25]="Short Sword";
njipNameString[26]="Scimitar";
njipNameString[27]="Sabre";
njipNameString[28]="Falchion";
njipNameString[29]="Crystal Sword";
njipNameString[30]="Broad Sword";
njipNameString[31]="Long Sword";
njipNameString[32]="War Sword";
njipNameString[33]="Two-handed Sword";
njipNameString[34]="Claymore";
njipNameString[35]="Giant Sword";
njipNameString[36]="Bastard Sword";
njipNameString[37]="Flamberge";
njipNameString[38]="Great Sword";
njipNameString[39]="Dagger";
njipNameString[40]="Dirk";
njipNameString[41]="Kris";
njipNameString[42]="Blade";
njipNameString[43]="Throwing Knife";
njipNameString[44]="Throwing Axe";
njipNameString[45]="Balanced Knife";
njipNameString[46]="Balanced Axe";
njipNameString[47]="Javelin";
njipNameString[48]="Pilum";
njipNameString[49]="Short Spear";
njipNameString[50]="Glaive";
njipNameString[51]="Throwing Spear";
njipNameString[52]="Spear";
njipNameString[53]="Trident";
njipNameString[54]="Brandistock";
njipNameString[55]="Spetum";
njipNameString[56]="Pike";
njipNameString[57]="Bardiche";
njipNameString[58]="Voulge";
njipNameString[59]="Scythe";
njipNameString[60]="Pole Axe";
njipNameString[61]="Halberd";
njipNameString[62]="War Scythe";
njipNameString[63]="Short Staff";
njipNameString[64]="Long Staff";
njipNameString[65]="Gnarled Staff";
njipNameString[66]="Battle Staff";
njipNameString[67]="War Staff";
njipNameString[68]="Short Bow";
njipNameString[69]="Hunter's Bow";
njipNameString[70]="Long Bow";
njipNameString[71]="Composite Bow";
njipNameString[72]="Short Battle Bow";
njipNameString[73]="Long Battle ow";
njipNameString[74]="Short War Bow";
njipNameString[75]="Long War Bow";
njipNameString[76]="Light CrossBow";
njipNameString[77]="CrossBow";
njipNameString[78]="Heavy CrossBow";
njipNameString[79]="Repeating CrossBow";
njipNameString[80]="Rancid Gas Potion";
njipNameString[81]="Oil Potion";
njipNameString[82]="Choking Gas Potion";
njipNameString[83]="Exploding Potion";
njipNameString[84]="Strangling Gas Potion";
njipNameString[85]="Fulminating Potion";
njipNameString[86]="Decoy Gidbinn";
njipNameString[87]="The Gidbinn";
njipNameString[88]="Wirt's Leg";
njipNameString[89]="Horadric Malus";
njipNameString[90]="Hellforge Hammer";
njipNameString[91]="Horadric Staff";
njipNameString[92]="Shaft Of The Horadric Staff";
njipNameString[93]="Hatchet";
njipNameString[94]="Cleaver";
njipNameString[95]="Twin Axe";
njipNameString[96]="Crowbill";
njipNameString[97]="Naga";
njipNameString[98]="Military Axe";
njipNameString[99]="Bearded Axe";
njipNameString[100]="Tabar";
njipNameString[101]="Gothic Axe";
njipNameString[102]="Ancient Axe";
njipNameString[103]="Burnt Wand";
njipNameString[104]="Petrified Wand";
njipNameString[105]="Tomb Wand";
njipNameString[106]="Grave Wand";
njipNameString[107]="Cudgel";
njipNameString[108]="Rune Scepter";
njipNameString[109]="Holy Water Sprinkler";
njipNameString[110]="Divine Scepter";
njipNameString[111]="Barbed Club";
njipNameString[112]="Flanged Mace";
njipNameString[113]="Jagged Star";
njipNameString[114]="Knout";
njipNameString[115]="Battle Hammer";
njipNameString[116]="War Club";
njipNameString[117]="Martel De Fer";
njipNameString[118]="Gladius";
njipNameString[119]="Cutlass";
njipNameString[120]="Shamshir";
njipNameString[121]="Tulwar";
njipNameString[122]="Dimensional Blade";
njipNameString[123]="Battle Sword";
njipNameString[124]="Rune Sword";
njipNameString[125]="Ancient Sword";
njipNameString[126]="Espandon";
njipNameString[127]="Dacian Falx";
njipNameString[128]="Tusk Sword";
njipNameString[129]="Gothic Sword";
njipNameString[130]="Zweihander";
njipNameString[131]="Executioner Sword";
njipNameString[132]="Poignard";
njipNameString[133]="Rondel";
njipNameString[134]="Cinquedeas";
njipNameString[135]="Stiletto";
njipNameString[136]="Battle Dart";
njipNameString[137]="Francisca";
njipNameString[138]="Wardart";
njipNameString[139]="Hurlbat";
njipNameString[140]="War Javelin";
njipNameString[141]="Great Pilum";
njipNameString[142]="Simbilan";
njipNameString[143]="Spiculum";
njipNameString[144]="Harpoon";
njipNameString[145]="War Spear";
njipNameString[146]="Fuscina";
njipNameString[147]="Warfork";
njipNameString[148]="Yari";
njipNameString[149]="Lance";
njipNameString[150]="Lochaber Axe";
njipNameString[151]="Bill";
njipNameString[152]="Battle Scythe";
njipNameString[153]="Partizan";
njipNameString[154]="Bec-De-Corbin";
njipNameString[155]="Grim Scythe";
njipNameString[156]="Jo Staff";
njipNameString[157]="Quarter Staff";
njipNameString[158]="Cedar Staff";
njipNameString[159]="Gothic Staff";
njipNameString[160]="Rune Staff";
njipNameString[161]="Edge Bow";
njipNameString[162]="Razor Bow";
njipNameString[163]="Cedar Bow";
njipNameString[164]="Double Bow";
njipNameString[165]="Short Siege Bow";
njipNameString[166]="Large Siege Bow";
njipNameString[167]="Rune Bow";
njipNameString[168]="Gothic Bow";
njipNameString[169]="Arbalest";
njipNameString[170]="Siege Crossbow";
njipNameString[171]="Ballista";
njipNameString[172]="Chu-ko-nu";
njipNameString[173]="Khalim's Flail";
njipNameString[174]="Khalim's Will";
njipNameString[175]="Katar";
njipNameString[176]="Wrist Blade";
njipNameString[177]="Hatchet Hands";
njipNameString[178]="Cestus";
njipNameString[179]="Claws";
njipNameString[180]="Blade Talons";
njipNameString[181]="Scissors Katar";
njipNameString[182]="Quhab";
njipNameString[183]="Wrist Spike";
njipNameString[184]="Fascia";
njipNameString[185]="Hand Scythe";
njipNameString[186]="Greater Claws";
njipNameString[187]="Greater Talons";
njipNameString[188]="Scissors Quhab";
njipNameString[189]="Suwayyah";
njipNameString[190]="Wrist Sword";
njipNameString[191]="War Fist";
njipNameString[192]="Battle Cestus";
njipNameString[193]="Feral Claws";
njipNameString[194]="Runic Talons";
njipNameString[195]="Scissors Suwayyah";
njipNameString[196]="Tomahawk";
njipNameString[197]="Small Crescent";
njipNameString[198]="Ettin Axe";
njipNameString[199]="War Spike";
njipNameString[200]="Berserker Axe";
njipNameString[201]="Feral Axe";
njipNameString[202]="Silver-Edged Axe";
njipNameString[203]="Decapitator";
njipNameString[204]="Champion Axe";
njipNameString[205]="Glorious Axe";
njipNameString[206]="Polished Wand";
njipNameString[207]="Ghost Wand";
njipNameString[208]="Lich Wand";
njipNameString[209]="Unearthed Wand";
njipNameString[210]="Truncheon";
njipNameString[211]="Mighty Scepter";
njipNameString[212]="Seraphrod";
njipNameString[213]="Caduceus";
njipNameString[214]="Tyrant Club";
njipNameString[215]="Reinforcedmace";
njipNameString[216]="Devil Star";
njipNameString[217]="Scourge";
njipNameString[218]="Legendary Mallet";
njipNameString[219]="Ogre Maul";
njipNameString[220]="Thunder Maul";
njipNameString[221]="Falcata";
njipNameString[222]="Ataghan";
njipNameString[223]="Elegant Blade";
njipNameString[224]="Hydra Edge";
njipNameString[225]="Phase Blade";
njipNameString[226]="Conquest Sword";
njipNameString[227]="Cryptic Sword";
njipNameString[228]="Mythical Sword";
njipNameString[229]="Legend Sword";
njipNameString[230]="Highland Blade";
njipNameString[231]="Balrog Blade";
njipNameString[232]="Champion Sword";
njipNameString[233]="Colossus Sword";
njipNameString[234]="Colossus Blade";
njipNameString[235]="Bone Knife";
njipNameString[236]="Mithril Point";
njipNameString[237]="Fanged Knife";
njipNameString[238]="Legend Spike";
njipNameString[239]="Flying Knife";
njipNameString[240]="Flying Axe";
njipNameString[241]="Winged Knife";
njipNameString[242]="Winged Axe";
njipNameString[243]="Hyperion Javelin";
njipNameString[244]="Stygian Pilum";
njipNameString[245]="Balrog Spear";
njipNameString[246]="Ghost Glaive";
njipNameString[247]="Winged Harpoon";
njipNameString[248]="Hyperion Spear";
njipNameString[249]="Stygian Pike";
njipNameString[250]="Mancatcher";
njipNameString[251]="Ghost Spear";
njipNameString[252]="War Pike";
njipNameString[253]="Ogre Axe";
njipNameString[254]="Colossus Voulge";
njipNameString[255]="Thresher";
njipNameString[256]="Cryptic Axe";
njipNameString[257]="Greatpole Axe";
njipNameString[258]="Giant Thresher";
njipNameString[259]="Walking Stick";
njipNameString[260]="Stalagmite";
njipNameString[261]="Elder Staff";
njipNameString[262]="Shillelagh";
njipNameString[263]="Archon Staff";
njipNameString[264]="Spider Bow";
njipNameString[265]="Blade Bow";
njipNameString[266]="Shadow Bow";
njipNameString[267]="Great Bow";
njipNameString[268]="Diamond Bow";
njipNameString[269]="Crusader Bow";
njipNameString[270]="Ward Bow";
njipNameString[271]="Hydra Bow";
njipNameString[272]="Pellet Bow";
njipNameString[273]="Gorgon CrossBow";
njipNameString[274]="Colossus CrossBow";
njipNameString[275]="Demon CrossBow";
njipNameString[276]="Eagle Orb";
njipNameString[277]="Sacred Globe";
njipNameString[278]="Smoked Sphere";
njipNameString[279]="Clasped Orb";
njipNameString[280]="Jared's Stone";
njipNameString[281]="Stag Bow";
njipNameString[282]="Reflex Bow";
njipNameString[283]="Maiden Spear";
njipNameString[284]="Maiden Pike";
njipNameString[285]="Maiden Javelin";
njipNameString[286]="Glowing Orb";
njipNameString[287]="Crystalline Globe";
njipNameString[288]="Cloudy Sphere";
njipNameString[289]="Sparkling Ball";
njipNameString[290]="Swirling Crystal";
njipNameString[291]="Ashwood Bow";
njipNameString[292]="Ceremonial Bow";
njipNameString[293]="Ceremonial Spear";
njipNameString[294]="Ceremonial Pike";
njipNameString[295]="Ceremonial Javelin";
njipNameString[296]="Heavenly Stone";
njipNameString[297]="Eldritch Orb";
njipNameString[298]="Demon Heart";
njipNameString[299]="Vortex Orb";
njipNameString[300]="Dimensional Shard";
njipNameString[301]="Matriarchal Bow";
njipNameString[302]="Grandmatron Bow";
njipNameString[303]="Matriarchal Spear";
njipNameString[304]="Matriarchal Pike";
njipNameString[305]="Matriarchal Javelin";
njipNameString[306]="Cap";
njipNameString[307]="Skull Cap";
njipNameString[308]="Helm";
njipNameString[309]="Full Helm";
njipNameString[310]="Great Helm";
njipNameString[311]="Crown";
njipNameString[312]="Mask";
njipNameString[313]="Quilted Armor";
njipNameString[314]="Leather Armor";
njipNameString[315]="Hardleather Armor";
njipNameString[316]="Studded Leather";
njipNameString[317]="Ring Mail";
njipNameString[318]="Scale Mail";
njipNameString[319]="Chain Mail";
njipNameString[320]="Breast Plate";
njipNameString[321]="Splint Mail";
njipNameString[322]="Plate Mail";
njipNameString[323]="Field Plate";
njipNameString[324]="Gothic Plate";
njipNameString[325]="Full Plate Mail";
njipNameString[326]="Ancient Armor";
njipNameString[327]="Light Plate";
njipNameString[328]="Buckler";
njipNameString[329]="Small Shield";
njipNameString[330]="Large Shield";
njipNameString[331]="Kite Shield";
njipNameString[332]="Tower Shield";
njipNameString[333]="Gothic Shield";
njipNameString[334]="Leather Gloves";
njipNameString[335]="Heavy Gloves";
njipNameString[336]="Chain Gloves";
njipNameString[337]="Light Gauntlets";
njipNameString[338]="Gauntlets";
njipNameString[339]="Boots";
njipNameString[340]="Heavy Boots";
njipNameString[341]="Chain Boots";
njipNameString[342]="Light Plated Boots";
njipNameString[343]="Greaves";
njipNameString[344]="Sash";
njipNameString[345]="Light Belt";
njipNameString[346]="Belt";
njipNameString[347]="Heavy Belt";
njipNameString[348]="Plated Belt";
njipNameString[349]="Bone Helm";
njipNameString[350]="Bone Shield";
njipNameString[351]="Spiked Shield";
njipNameString[352]="War Hat";
njipNameString[353]="Sallet";
njipNameString[354]="Casque";
njipNameString[355]="Basinet";
njipNameString[356]="Winged Helm";
njipNameString[357]="Grand Crown";
njipNameString[358]="Death Mask";
njipNameString[359]="Ghost Armor";
njipNameString[360]="Serpentskin Armor";
njipNameString[361]="Demonhide Armor";
njipNameString[362]="Trellised Armor";
njipNameString[363]="Linked Mail";
njipNameString[364]="Tigulated Mail";
njipNameString[365]="Mesh Armor";
njipNameString[366]="Cuirass";
njipNameString[367]="Russet Armor";
njipNameString[368]="Templar Coat";
njipNameString[369]="Sharktooth Armor";
njipNameString[370]="Embossed Plate";
njipNameString[371]="Chaos Armor";
njipNameString[372]="Ornate Plate";
njipNameString[373]="Mage Plate";
njipNameString[374]="Defender";
njipNameString[375]="Round Shield";
njipNameString[376]="Scutum";
njipNameString[377]="Dragon Shield";
njipNameString[378]="Pavise";
njipNameString[379]="Ancient Shield";
njipNameString[380]="Demonhide Gloves";
njipNameString[381]="Sharkskin Gloves";
njipNameString[382]="Heavy Bracers";
njipNameString[383]="Battle Gauntlets";
njipNameString[384]="War Gauntlets";
njipNameString[385]="Demonhide Boots";
njipNameString[386]="Sharkskin Boots";
njipNameString[387]="Mesh Boots";
njipNameString[388]="Battle Boots";
njipNameString[389]="War Boots";
njipNameString[390]="Demonhide Sash";
njipNameString[391]="Sharkskin Belt";
njipNameString[392]="Mesh Belt";
njipNameString[393]="Battle Belt";
njipNameString[394]="War Belt";
njipNameString[395]="Grim Helm";
njipNameString[396]="Grim Shield";
njipNameString[397]="Barbed Shield";
njipNameString[398]="Wolf Head";
njipNameString[399]="Hawk Helm";
njipNameString[400]="Antlers";
njipNameString[401]="Falcon Mask";
njipNameString[402]="Spirit Mask";
njipNameString[403]="Jawbone Cap";
njipNameString[404]="Fanged Helm";
njipNameString[405]="Horned Helm";
njipNameString[406]="Assault Helmet";
njipNameString[407]="Avenger Guard";
njipNameString[408]="Targe";
njipNameString[409]="Rondache";
njipNameString[410]="Heraldic Shield";
njipNameString[411]="Aerin Shield";
njipNameString[412]="Crown Shield";
njipNameString[413]="Preserved Head";
njipNameString[414]="Zombie Head";
njipNameString[415]="Unraveller Head";
njipNameString[416]="Gargoyle Head";
njipNameString[417]="Demon Head";
njipNameString[418]="Circlet";
njipNameString[419]="Coronet";
njipNameString[420]="Tiara";
njipNameString[421]="Diadem";
njipNameString[422]="Shako";
njipNameString[423]="Hydra Skull";
njipNameString[424]="Armet";
njipNameString[425]="Giant Conch";
njipNameString[426]="Spired Helm";
njipNameString[427]="Corona";
njipNameString[428]="Demon Head";
njipNameString[429]="Dusk Shroud";
njipNameString[430]="Wyrm Hide";
njipNameString[431]="Scarab Husk";
njipNameString[432]="Wire Fleece";
njipNameString[433]="Diamond Mail";
njipNameString[434]="Loricated Mail";
njipNameString[435]="Bone Weave";
njipNameString[436]="Great Hauberk";
njipNameString[437]="Balrog Skin";
njipNameString[438]="Hellforge Plate";
njipNameString[439]="Kraken Shell";
njipNameString[440]="Lacquered Plate";
njipNameString[441]="Shadow Plate";
njipNameString[442]="Sacred Armor";
njipNameString[443]="Archon Plate";
njipNameString[444]="Heater";
njipNameString[445]="Luna";
njipNameString[446]="Hyperion";
njipNameString[447]="Monarch";
njipNameString[448]="Aegis";
njipNameString[449]="Ward";
njipNameString[450]="Bramble Mitts";
njipNameString[451]="Vampirebone Gloves";
njipNameString[452]="Vambraces";
njipNameString[453]="Crusader Gauntlets";
njipNameString[454]="Ogre Gauntlets";
njipNameString[455]="Wyrmhide Boots";
njipNameString[456]="Scarabshell Boots";
njipNameString[457]="Boneweave Boots";
njipNameString[458]="Mirrored Boots";
njipNameString[459]="Myrmidon Greaves";
njipNameString[460]="Spiderweb Sash";
njipNameString[461]="Vampirefang Belt";
njipNameString[462]="Mithril Coil";
njipNameString[463]="Troll Belt";
njipNameString[464]="Colossus Girdle";
njipNameString[465]="Bone Visage";
njipNameString[466]="Troll Nest";
njipNameString[467]="Blade Barrier";
njipNameString[468]="Alpha Helm";
njipNameString[469]="Griffon Headdress";
njipNameString[470]="Hunter's Guise";
njipNameString[471]="Sacred Feathers";
njipNameString[472]="Totemic Mask";
njipNameString[473]="Jawbone Visor";
njipNameString[474]="Lion Helm";
njipNameString[475]="Rage Mask";
njipNameString[476]="Savage Helmet";
njipNameString[477]="Slayer Guard";
njipNameString[478]="Akaran Targe";
njipNameString[479]="Akaran Rondache";
njipNameString[480]="Protector Shield";
njipNameString[481]="Gilded Shield";
njipNameString[482]="Royal Shield";
njipNameString[483]="Mummified Trophy";
njipNameString[484]="Fetish Trophy";
njipNameString[485]="Sexton Trophy";
njipNameString[486]="Cantor Trophy";
njipNameString[487]="Hierophant Trophy";
njipNameString[488]="Blood Spirit";
njipNameString[489]="Sun Spirit";
njipNameString[490]="Earth Spirit";
njipNameString[491]="Sky Spirit";
njipNameString[492]="Dream Spirit";
njipNameString[493]="Carnage Helm";
njipNameString[494]="Fury Visor";
njipNameString[495]="Destroyer Helm";
njipNameString[496]="Conqueror Crown";
njipNameString[497]="Guardian Crown";
njipNameString[498]="Sacred Targe";
njipNameString[499]="Sacred Rondache";
njipNameString[500]="Kurast Shield";
njipNameString[501]="Zakarum Shield";
njipNameString[502]="Vortex Shield";
njipNameString[503]="Minion Skull";
njipNameString[504]="Hellspawn Skull";
njipNameString[505]="Overseer Skull";
njipNameString[506]="Succubus Skull";
njipNameString[507]="Bloodlord Skull";
njipNameString[508]="Elixir";
njipNameString[509]="INVALID 509"
njipNameString[510]="INVALID 510"
njipNameString[511]="INVALID 511"
njipNameString[512]="INVALID 512"
njipNameString[513]="Stamina Potion";
njipNameString[514]="Antidote Potion";
njipNameString[515]="Rejuvenation Potion";
njipNameString[516]="Full Rejuvenation Potion";
njipNameString[517]="Thawing Potion";
njipNameString[518]="Tome Of Town Portal";
njipNameString[519]="Tome Of Identify";
njipNameString[520]="Amulet";
njipNameString[521]="Top Of The Horadric Staff";
njipNameString[522]="Ring";
njipNameString[523]="Gold";
njipNameString[524]="Scroll Of Inifuss";
njipNameString[525]="Key To The Cairn Stones";
njipNameString[526]="Arrows";
njipNameString[527]="Torch";
njipNameString[528]="Bolts";
njipNameString[529]="Scroll Of Town Portal";
njipNameString[530]="Scroll Of Identify";
njipNameString[531]="Heart";
njipNameString[532]="Brain";
njipNameString[533]="Jawbone";
njipNameString[534]="Eye";
njipNameString[535]="Horn";
njipNameString[536]="Tail";
njipNameString[537]="Flag";
njipNameString[538]="Fang";
njipNameString[539]="Quill";
njipNameString[540]="Soul";
njipNameString[541]="Scalp";
njipNameString[542]="Spleen";
njipNameString[543]="Key";
njipNameString[544]="The Black Tower Key";
njipNameString[545]="Potion Of Life";
njipNameString[546]="A Jade Figurine";
njipNameString[547]="The Golden Bird";
njipNameString[548]="Lam Esen's Tome";
njipNameString[549]="Horadric Cube";
njipNameString[550]="Horadric Scroll";
njipNameString[551]="Mephisto's Soulstone";
njipNameString[552]="Book Of Skill";
njipNameString[553]="Khalim's Eye";
njipNameString[554]="Khalim's Heart";
njipNameString[555]="Khalim's Brain";
njipNameString[556]="Ear";
njipNameString[557]="Chipped Amethyst";
njipNameString[558]="Flawed Amethyst";
njipNameString[559]="Amethyst";
njipNameString[560]="Flawless Amethyst";
njipNameString[561]="Perfect Amethyst";
njipNameString[562]="Chipped Topaz";
njipNameString[563]="Flawed Topaz";
njipNameString[564]="Topaz";
njipNameString[565]="Flawless Topaz";
njipNameString[566]="Perfect Topaz";
njipNameString[567]="Chipped Sapphire";
njipNameString[568]="Flawed Sapphire";
njipNameString[569]="Sapphire";
njipNameString[570]="Flawless Sapphire";
njipNameString[571]="Perfect Sapphire";
njipNameString[572]="Chipped Emerald";
njipNameString[573]="Flawed Emerald";
njipNameString[574]="Emerald";
njipNameString[575]="Flawless Emerald";
njipNameString[576]="Perfect Emerald";
njipNameString[577]="Chipped Ruby";
njipNameString[578]="Flawed Ruby";
njipNameString[579]="Ruby";
njipNameString[580]="Flawless Ruby";
njipNameString[581]="Perfect Ruby";
njipNameString[582]="Chipped Diamond";
njipNameString[583]="Flawed Diamond";
njipNameString[584]="Diamond";
njipNameString[585]="Flawless Diamond";
njipNameString[586]="Perfect Diamond";
njipNameString[587]="Minor Healing Potion";
njipNameString[588]="Light Healing Potion";
njipNameString[589]="Healing Potion";
njipNameString[590]="Greater Healing Potion";
njipNameString[591]="Super Healing Potion";
njipNameString[592]="Minor Mana Potion";
njipNameString[593]="Light Mana Potion";
njipNameString[594]="Mana Potion";
njipNameString[595]="Greater Mana Potion";
njipNameString[596]="Super Mana Potion";
njipNameString[597]="Chipped Skull";
njipNameString[598]="Flawed Skull";
njipNameString[599]="Skull";
njipNameString[600]="Flawless Skull";
njipNameString[601]="Perfect Skull";
njipNameString[602]="Herb";
njipNameString[603]="Small Charm";
njipNameString[604]="Large Charm";
njipNameString[605]="Grand Charm";
njipNameString[606]="INVALID 606"
njipNameString[607]="INVALID 607"
njipNameString[608]="INVALID 608"
njipNameString[609]="INVALID 609"
njipNameString[610]="El Rune";
njipNameString[611]="Eld Rune";
njipNameString[612]="Tir Rune";
njipNameString[613]="Nef Rune";
njipNameString[614]="Eth Rune";
njipNameString[615]="Ith Rune";
njipNameString[616]="Tal Rune";
njipNameString[617]="Ral Rune";
njipNameString[618]="Ort Rune";
njipNameString[619]="Thul Rune";
njipNameString[620]="Amn Rune";
njipNameString[621]="Sol Rune";
njipNameString[622]="Shael Rune";
njipNameString[623]="Dol Rune";
njipNameString[624]="Hel Rune";
njipNameString[625]="Io Rune";
njipNameString[626]="Lum Rune";
njipNameString[627]="Ko Rune";
njipNameString[628]="Fal Rune";
njipNameString[629]="Lem Rune";
njipNameString[630]="Pul Rune";
njipNameString[631]="Um Rune";
njipNameString[632]="Mal Rune";
njipNameString[633]="Ist Rune";
njipNameString[634]="Gul Rune";
njipNameString[635]="Vex Rune";
njipNameString[636]="Ohm Rune";
njipNameString[637]="Lo Rune";
njipNameString[638]="Sur Rune";
njipNameString[639]="Ber Rune";
njipNameString[640]="Jah Rune";
njipNameString[641]="Cham Rune";
njipNameString[642]="Zod Rune";
njipNameString[643]="Jewel";
njipNameString[644]="Malah's Potion";
njipNameString[645]="Scroll Of Knowledge";
njipNameString[646]="Scroll Of Resistance";
njipNameString[647]="Key Of Terror";
njipNameString[648]="Key Of Hate";
njipNameString[649]="Key Of Destruction";
njipNameString[650]="Diablo's Horn";
njipNameString[651]="Baal's Eye";
njipNameString[652]="Mephisto's Brain";
njipNameString[653]="Standard Of Heroes";
njipNameString[654]="Twisted Essence Of Suffering";
njipNameString[655]="Charged Essence Of Hatred";
njipNameString[656]="Burning Essence Of Terror";
njipNameString[657]="Festering Essence Of Destruction";
fehlt natürlich noch sowas wie ein config Eintrag etc, auch bin ich mir nicht sicher ob die Ethflag Abfrage so funktioniert, allerdings funktioniert dein Log so wieder.

€: Das einzige Problem das ich jetzt mit dem Bot noch hab ist dass er manchmal Items nicht in die Truhe legen kann und dann bei jedem Inventarcheck das log mit Kept zuspammt.

mfg
asdfghu is offline  
Old 04/14/2010, 19:39   #11
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Huhu,

soweit so gut, dummerweise passt aber die itemlogger Funktion selbst nicht mehr ganz, da ich die ja speziell auf 1.7.2 angepasst hatte.

Der String item.itemdesc sieht in 3.x deutlich anders aus als es noch in 1.7.2 der Fall war. Hier kommen nun im Grunde sämtliche Item stats vor, die gab es so früher nicht und man musste sie zusätzlich aus dem item Objekt auslesen. Darum sollte die obige Version oben ohne weitere Änderung Falschausgaben liefern bzw. stats doppelt ausgeben.

Grundsätzlich habe ich zwar schon eine für 3.x adaptierte Version, die unter anderem auch die normale Ausgabe im Manager etwas anpasst. Allerdings gefällt mir das so optisch noch nicht...
Ich habe an sich im hinterkopf die in obigem string enthaltenen Farbcodes mit zu übernehmen und die XML Ausgabe entsprechend anzupassen. Also eine Farbgebung der XML Ausgabe die der D2 Internen bzw. der des Managers entspricht.
Dazu muss ich aber zunächst Funktionen entwickeln die den item.itemdesc String entsprechend formatieren, oder ich muss die XML Ausgabe entsprechend anpassen. Zweiteres wäre zwar schick aber würde mir deutlich schwerer fallen, da ich was XML Programmierung angeht etwas doof bin.

Mit anderen Worten, ich weiss noch nicht genau wann ich das fertig bekomme. Falls starker Bedarf besteht könnte ich allerdings die Version die ich aktuell nutze als vorab Version posten. Die führt allerdings ab und an noch zu Fehlern und die stats der item werden nur in einer Farbe angezeigt.

Wirklich Zeit zum weitermachen werde ich vermutlich erst wieder am Wochenende haben.

LG
Muddy
Muddy Waters is offline  
Old 04/14/2010, 19:52   #12
 
elite*gold: 0
Join Date: Apr 2010
Posts: 3
Received Thanks: 0
Möglich, dass er anders aussieht, allerdings funktioniert das Log einwandfrei.
Beim Mouseover über dem Item werden die Stats ausgegeben und bisher nach einigen Einträgen noch keinen Fehler entdeckt. Das einzige was ich bisher mangels Eth Item nicht testen konnte, ist wie das ausgegeben wird.


Hm Img tag zeigt nix an also nur die url .p
asdfghu is offline  
Old 04/14/2010, 20:21   #13
Administrator
 
Muddy Waters's Avatar
 
elite*gold: 41364
Join Date: Jan 2010
Posts: 22,729
Received Thanks: 12,625
Quote:
Originally Posted by asdfghu View Post
Möglich, dass er anders aussieht, allerdings funktioniert das Log einwandfrei.
Beim Mouseover über dem Item werden die Stats ausgegeben und bisher nach einigen Einträgen noch keinen Fehler entdeckt. Das einzige was ich bisher mangels Eth Item nicht testen konnte, ist wie das ausgegeben wird.
Es kann aber nicht korrekt funktionieren.

Ich hatte Funktionen geschrieben die feststellen, ob das item eine Waffe oder eine Rüstung. Falls ja wurde der Beschreibung damage bzw. die defense hinzugefügt. Diese Werte sind bei 3.0 schon alle in der Objektvariablen item.itemdesc enthalten, folglich ergeben sich dabei doppelte Ausgaben.

Achja, die if Abfrage bezüglich des item flags sollte so stimmen, auch wenn mans kompakter hätte schreiben können.

Ich denke ich poste demnächst mal meinen Zwischenstand.

LG
Muddy

Edit:
Bei mir schauts derzeit so aus:
Muddy Waters is offline  
Reply


Similar Threads Similar Threads
[D2NT] linkliste für ein paar Modifikationen
10/21/2010 - Diablo 2 - 39 Replies
hi,hab hier eine liste von links für ein paar modifikationen für den D2NT.leider ist alles in englich. If you're getting an nip file error, use this (CLICK HERE) by gumshield D2NT 3.1 API references by bajazzle Blizzhackers &bull; View topic - D2NT 3.1 Sort-of-API Latest D2NT 3.1 download thread 3.1 + Rusher + Leecher -
[GUIDE] Handy aufpimpen gefällig?
03/12/2010 - Tutorials - 17 Replies
Huhu, heute zeige ich euch wie ihr ganz easy und schnell Themes, Spiele, Sounds uvm. auf euer Handy laden könnt GUIDE: 1. Ihr geht auf Free ringtones, themes, wallpapers, games for mobile phone - mobile9 2. Ihr geht oben auf "GALLERY" 3. Dann bei "Select a phone" euer Handy raussuchen 4. Dann bei "Select Category" eure gewünschte Kategorie auswählen HINWEIS: Themes = Hintergründe
Yang gefällig? kein prob
03/12/2010 - Metin2 Trading - 86 Replies
Hi com, da ich zurzeit auf fast jeden server accs habe und mit sehr viel yang mitdem ich nicht weiß wohin damit ^^ habe ich mir gedacht ich vk es . HABE YANG AUF JEDEN SERVER Naja die preise sind meiner meinung nach billig wenn man vergleicht . Alle Serverpreise sind gleich. (das yang auf server 23 kostet soviel wie auf s1 usw usw) MIndestkauf 10€
Forum gefällig? :P
08/22/2009 - Main - 6 Replies
Ich frag ma ganz blöd: Will wer ein Forum? :P Hab mir vor kurzem eins zugelegt als übung für HTML/Java Scripten ;) Es war ursprünglich für nen Clan gedacht, der hat aba dicht gemacht :( Ich un meine Mods (alle Kumpel von mir und zu 100% vertrauenswürdig) ham jetz allerdings kb die Arbeit so wegzuschmeißen ... Von daher:
Namens modifikationen
01/23/2007 - World of Warcraft - 2 Replies
Hi , Um mich kurz zu fassen : ich suche etw. was die GILDEN Namenvon geg. Spielern größer anzeigen lässt . Bsp: Compotias <Rumpelstielzchen> Danke für alle antworten . Eluo



All times are GMT +2. The time now is 16:18.


Powered by vBulletin®
Copyright ©2000 - 2024, 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 ©2024 elitepvpers All Rights Reserved.