Suche ein der mir ein kleines script umschreibt d2muddys muleog > d2bs

09/23/2013 21:12 using11#1
Code:
function MWI_WriteMuleManagerOutput(account)
{
	var _items, _content, _account, _fhandle, _preData, _questData;
	var i, j;
	
	if(!account)
		_account = me.account;
	else
		_account = account;
		
	_fhandle = FileOpen("Logs/MuleManager/" + _account + "--" + me.charname + ".mmd", 2);
	
	if(_fhandle)
	{
		_preData = _fhandle.ReadLine();
		_fhandle.Close();
		
		if(_preData)
		{
			_preData = _preData.split('#')[2];
			_preData = _preData.substr(14, 6);
		}
	}
	
	if(!_preData || _preData.length != 6)
		_preData = "FFFFFF";
		
	_questData = "";
	// Imbue (3)
	for(j = 0; j < 3; j++)
	{
		if(j != me.diff)
		{
			_questData += _preData.charAt(j);
			continue;
		}
		
		for(i = 12; i >= 0; i--)
		{
			if(me.GetQuest(3, i))
			{
				_questData += MWI_GetHexString(i, 1);
				break;
			}
		}
		if(i < 0)
			_questData += '0';
	}

	// Larzuk (35)
	for(j = 0; j < 3; j++)
	{
		if(j != me.diff)
		{
			_questData += _preData.charAt(j + 3);
			continue;
		}
		
		for(i = 12; i >= 0; i--)
		{
			if(me.GetQuest(35, i))
			{
				_questData += MWI_GetHexString(i, 1);
				break;
			}
		}
		if(i < 0)
			_questData += '0';
	}
	
	_content = _account + "#" + me.charname + "#";
	_content += me.classid;
	_content += MWI_GetHexString(me.GetStat(12), 2); // Level
	_content += MWI_GetHexString(me.GetStat(14), 5); // Chargold
	_content += MWI_GetHexString(me.GetStat(15), 6); // Stashgold
	_content += _questData; // Larzuk/Imbue Status
	_content += (me.gametype) ? 1 : 0; // Classic/LoD
	_content += (me.playertype) ? 1 : 0; // Hardcore/Softcore
	_content += (me.ladder) ? 1 : 0; // Ladder/Non-Ladder
	
	_items = me.GetItems();
	
	if(_items)
	{
		for(var i = 0; i < _items.length; i++)
		{
			if(!_items[i].name)
				continue;
			
			_content += "\n" + _items[i].name.replace(/\n/g, "|");
			_content += "#" + _items[i].code;
			_content += "#" + _items[i].itemdesc.replace(/\n/g, "|");
			_content += "#" + MWI_GetHexString(_items[i].classid, 3);
			_content += (_items[i].itemflag&0x10) ? '1' : '0';
			_content += (_items[i].itemflag&0x4000000) ? '1' : '0';
			_content += (_items[i].itemflag&0x400000) ? '1' : '0';
			_content += MWI_GetHexString(_items[i].itemlevel, 2);
			_content += MWI_GetHexString(_items[i].itemloc, 1);
			_content += MWI_GetHexString(_items[i].itemprefix, 4);
			_content += MWI_GetHexString(_items[i].itemsuffix, 4);
			_content += MWI_GetHexString(_items[i].itemtype, 2);
			_content += MWI_GetHexString(_items[i].mode, 1);
			_content += MWI_GetHexString(_items[i].quality, 1);
			_content += MWI_GetHexString(_items[i].x, 2);
			_content += MWI_GetHexString(_items[i].xsize, 1);
			_content += MWI_GetHexString(_items[i].y, 2);
			_content += MWI_GetHexString(_items[i].ysize, 1);
			_content += MWI_GetHexString(_items[i].itemclass, 1);
			_content += MWI_GetHexString(_items[i].GetStat(194), 1); // Sockets
			
			_content += MWI_GetHexString(_items[i].GetStat(31), 4); // Defense
			_content += MWI_GetHexString(parseInt(_items[i].GetStat(21) + (_items[i].GetStat(22) - _items[i].GetStat(21)) / 2) + _items[i].GetStat(111), 3); // Average 1H damage
			_content += MWI_GetHexString(parseInt(_items[i].GetStat(23) + (_items[i].GetStat(24) - _items[i].GetStat(23)) / 2) + _items[i].GetStat(111), 3); // Average 2H damage
			_content += MWI_GetHexString(_items[i].GetStat(92), 2); // Level Req
		}
	}

	return MWC_WriteToTextfile(_content, "Logs/MuleManager/" + _account + "--" + me.charname + ".mmd", 1);
}

function MWI_GetHexString(number, length)
{
	var _hexString;
	
	if(number)
		_hexString = number.toString(16);
	else
		_hexString = "0";
	
	while(_hexString.length < length)
	{
		_hexString = '0' + _hexString;
	}
	
	return _hexString.toUpperCase();
}
Das script ist für den D2muddys Mulemanager > [Only registered and activated users can see links. Click Here To Register...]

da siese datei nicht im d2bs funktioniert so einfach suche ich einen, der mir das script so umschreiben kann, das ich die datei direkt aus d2bs in denn manager ziehen kann.

ich würde dafür auch etwas fgs oder runen oder unid annis zahlen.
09/24/2013 10:50 lejim#2
Hatte Muddy mal deswegen gefragt, er sagt ist in Ordnung wenn es wer umstrickt für den D2BS, er hat dafür aber keine Zeit. Würde mich auch mit einer Spende für denjenigen beteiligen, der es erfolgreich für den D2BS umschreibt. Allerdings müsste auch ein entsprechendes Entry-Skript ähnlich dem "MWTools"-Entry beim D2NT erzeugt werden.
09/24/2013 19:46 Muddy Waters#3
Ich hab euch mal schnell einen Ansatz gebastelt, darauf könnt ihr dann weiter aufbauen:
Code:
function MWI_WriteMuleManagerOutput(account)
{
	var i, j, k, _items, _content, _questData, _key,
		_quests = [
			// TODO: Could those be zero-based?
			[1, 5],	// Imbue
			[5, 1]	// Larzuk
		],
		_preData = '',
		_account = account || me.account;
		_fhandle = File.open("Logs/MuleManager/" + _account + "--" + me.charname + ".mmd", FILE_READ);
	
	// Read existing mule manger log file to determine quest status on other difficulty levels
	if(_fhandle)
	{
		if(_fhandle.readable)
			_preData = _fhandle.readLine();
		
		_fhandle.close();
		
		if(_preData)
			_preData = _preData.split('#')[2].substr(14, 6);
	}
	
	// Initialize with proper default value of data doesn't exist or is invalid
	if(!_preData.match(/[0-9A-F]{6}/))
		_preData = "FFFFFF";
		
	_questData = "";

	// Loop over all quest IDs
	for(k = 0; k < _quests.length; k++)
	{
		// Loop over all difficulties
		for(j = 0; j < 3; j++)
		{
			// We are not on this difficulty level, hence we can merely use the previous data as a fallback
			if(j != me.diff)
			{
				_questData += _preData.charAt(j);
				continue;
			}
			
			// We are on this difficulty, so figure out what quest stage we're at
			// Loop over all quest stages (not sure why that is useful, this should basically be a bitfield)
			for(i = 12; i >= 0; i--)
			{
				// Get actual stage of the quest (use me.getQuest(_quests[k][0], _quests[k][1]) if apply doesn't work)
				if(me.getQuest.apply(me, _quests[k]))
				{
					_questData += MWI_GetHexString(i, 1);
					break;
				}
			}
			if(i < 0)
				_questData += '0';
		}
	}

	// Store some general information about the current char
	_content = _account + "#" + me.charname + "#";
	_content += me.classId;
	_content += MWI_GetHexString(me.getStat(12), 2); // Level
	_content += MWI_GetHexString(me.getStat(14), 5); // Chargold
	_content += MWI_GetHexString(me.getStat(15), 6); // Stashgold
	_content += _questData; // Larzuk/Imbue Status
	_content += (me.gametype) ? 1 : 0; // Classic/LoD
	_content += (me.playertype) ? 1 : 0; // Hardcore/Softcore
	_content += (me.ladder) ? 1 : 0; // Ladder/Non-Ladder
	
	_items = me.getItems();
	
	if(_items)
	{
		for(i = 0; i < _items.length; i++)
		{
			// This one is definitely invalid, so skip it
			f(!_items[i].name)
				continue;
			
			_content += "\n" + _items[i].name.replace(/\n/g, "|");
			_content += "#" + _items[i].code;
			_content += "#" + _items[i].description.replace(/\n/g, "|");
			_content += "#" + MWI_GetHexString(_items[i].classid, 3);
			_content += _items[i].getFlag(0x10) ? '1' : '0';
			_content += _items[i].getFlag(0x4000000) ? '1' : '0';
			_content += _items[i].getFlag(0x400000) ? '1' : '0';
			_content += MWI_GetHexString(_items[i].ilvl, 2);
			_content += MWI_GetHexString(_items[i].location, 1);
			_content += MWI_GetHexString(_items[i].prefix, 4);
			_content += MWI_GetHexString(_items[i].suffix, 4);
			_content += MWI_GetHexString(_items[i].itemType, 2);
			_content += MWI_GetHexString(_items[i].mode, 1);
			_content += MWI_GetHexString(_items[i].quality, 1);
			_content += MWI_GetHexString(_items[i].x, 2);
			_content += MWI_GetHexString(_items[i].sizex, 1);
			_content += MWI_GetHexString(_items[i].y, 2);
			_content += MWI_GetHexString(_items[i].sizey, 1);
			_content += '0'; // TODO: Find proper replacement for itemclass prop :MWI_GetHexString(_items[i].itemclass, 1);
			_content += MWI_GetHexString(_items[i].getStat(194), 1); // Sockets
			
			_content += MWI_GetHexString(_items[i].getStat(31), 4); // Defence
			_content += MWI_GetHexString(parseInt(_items[i].getStat(21) + (_items[i].getStat(22) - _items[i].getStat(21)) / 2) + _items[i].getStat(111), 3); // Average 1H damage
			_content += MWI_GetHexString(parseInt(_items[i].getStat(23) + (_items[i].getStat(24) - _items[i].getStat(23)) / 2) + _items[i].getStat(111), 3); // Average 2H damage
			_content += MWI_GetHexString(_items[i].getStat(92), 2); // Level Req
		}
	}

	_fhandle = File.open("Logs/MuleManager/" + _account + "--" + me.charname + ".mmd", FILE_WRITE);
	
	if(_fhandle)
	{
		if(_fhandle.writeable)
			_fhandle.write(_content).flush();
		
		_fhandle.close();
	}
	
	return false;
}

function MWI_GetHexString(number, length)
{
	var _hexString;
	
	if(number)
		_hexString = number.toString(16);
	else
		_hexString = "0";
	
	while(_hexString.length < length)
	{
		_hexString = '0' + _hexString;
	}
	
	return _hexString.toUpperCase();
}
Ist absolut ungetestet und nur als Entwicklungsgrundlage gedacht. Ich bin mir gerade was Dinge wie das Auslesen der Quests angeht sehr unsicher, die [Only registered and activated users can see links. Click Here To Register...] ist da leider stellenweise etwas schwammig.

Ich habe ein paar Kommentare eingefügt, falls ihr zu irgendwas nähere Informationen braucht, könnt ihr gerne fragen. Aber an sich macht die Funktion nicht mehr als ein paar Daten in eine Textdatei zu schreiben, wobei Zahlen zuvor in HEX-Werte konvertiert werden - rückblickend verstehe ich nicht, warum ich den Kram nach HEX konvertiert habe und nicht gleich Base64 genutzt habe, was von der Packungsdichte her viel effizienter wäre. :rolleyes:
09/24/2013 21:25 using11#4
Quote:
Originally Posted by Muddy Waters View Post
Ich hab euch mal schnell einen Ansatz gebastelt, darauf könnt ihr dann weiter aufbauen:
Code:
function MWI_WriteMuleManagerOutput(account)
{
	var i, j, k, _items, _content, _questData, _key,
		_quests = [
			// TODO: Could those be zero-based?
			[1, 5],	// Imbue
			[5, 1]	// Larzuk
		],
		_preData = '',
		_account = account || me.account;
		_fhandle = File.open("Logs/MuleManager/" + _account + "--" + me.charname + ".mmd", FILE_READ);
	
	// Read existing mule manger log file to determine quest status on other difficulty levels
	if(_fhandle)
	{
		if(_fhandle.readable)
			_preData = _fhandle.readLine();
		
		_fhandle.close();
		
		if(_preData)
			_preData = _preData.split('#')[2].substr(14, 6);
	}
	
	// Initialize with proper default value of data doesn't exist or is invalid
	if(!_preData.match(/[0-9A-F]{6}/))
		_preData = "FFFFFF";
		
	_questData = "";

	// Loop over all quest IDs
	for(k = 0; k < _quests.length; k++)
	{
		// Loop over all difficulties
		for(j = 0; j < 3; j++)
		{
			// We are not on this difficulty level, hence we can merely use the previous data as a fallback
			if(j != me.diff)
			{
				_questData += _preData.charAt(j);
				continue;
			}
			
			// We are on this difficulty, so figure out what quest stage we're at
			// Loop over all quest stages (not sure why that is useful, this should basically be a bitfield)
			for(i = 12; i >= 0; i--)
			{
				// Get actual stage of the quest (use me.getQuest(_quests[k][0], _quests[k][1]) if apply doesn't work)
				if(me.getQuest.apply(me, _quests[k]))
				{
					_questData += MWI_GetHexString(i, 1);
					break;
				}
			}
			if(i < 0)
				_questData += '0';
		}
	}

	// Store some general information about the current char
	_content = _account + "#" + me.charname + "#";
	_content += me.classId;
	_content += MWI_GetHexString(me.getStat(12), 2); // Level
	_content += MWI_GetHexString(me.getStat(14), 5); // Chargold
	_content += MWI_GetHexString(me.getStat(15), 6); // Stashgold
	_content += _questData; // Larzuk/Imbue Status
	_content += (me.gametype) ? 1 : 0; // Classic/LoD
	_content += (me.playertype) ? 1 : 0; // Hardcore/Softcore
	_content += (me.ladder) ? 1 : 0; // Ladder/Non-Ladder
	
	_items = me.getItems();
	
	if(_items)
	{
		for(i = 0; i < _items.length; i++)
		{
			// This one is definitely invalid, so skip it
			f(!_items[i].name)
				continue;
			
			_content += "\n" + _items[i].name.replace(/\n/g, "|");
			_content += "#" + _items[i].code;
			_content += "#" + _items[i].description.replace(/\n/g, "|");
			_content += "#" + MWI_GetHexString(_items[i].classid, 3);
			_content += _items[i].getFlag(0x10) ? '1' : '0';
			_content += _items[i].getFlag(0x4000000) ? '1' : '0';
			_content += _items[i].getFlag(0x400000) ? '1' : '0';
			_content += MWI_GetHexString(_items[i].ilvl, 2);
			_content += MWI_GetHexString(_items[i].location, 1);
			_content += MWI_GetHexString(_items[i].prefix, 4);
			_content += MWI_GetHexString(_items[i].suffix, 4);
			_content += MWI_GetHexString(_items[i].itemType, 2);
			_content += MWI_GetHexString(_items[i].mode, 1);
			_content += MWI_GetHexString(_items[i].quality, 1);
			_content += MWI_GetHexString(_items[i].x, 2);
			_content += MWI_GetHexString(_items[i].sizex, 1);
			_content += MWI_GetHexString(_items[i].y, 2);
			_content += MWI_GetHexString(_items[i].sizey, 1);
			_content += '0'; // TODO: Find proper replacement for itemclass prop :MWI_GetHexString(_items[i].itemclass, 1);
			_content += MWI_GetHexString(_items[i].getStat(194), 1); // Sockets
			
			_content += MWI_GetHexString(_items[i].getStat(31), 4); // Defence
			_content += MWI_GetHexString(parseInt(_items[i].getStat(21) + (_items[i].getStat(22) - _items[i].getStat(21)) / 2) + _items[i].getStat(111), 3); // Average 1H damage
			_content += MWI_GetHexString(parseInt(_items[i].getStat(23) + (_items[i].getStat(24) - _items[i].getStat(23)) / 2) + _items[i].getStat(111), 3); // Average 2H damage
			_content += MWI_GetHexString(_items[i].getStat(92), 2); // Level Req
		}
	}

	_fhandle = File.open("Logs/MuleManager/" + _account + "--" + me.charname + ".mmd", FILE_WRITE);
	
	if(_fhandle)
	{
		if(_fhandle.writeable)
			_fhandle.write(_content).flush();
		
		_fhandle.close();
	}
	
	return false;
}

function MWI_GetHexString(number, length)
{
	var _hexString;
	
	if(number)
		_hexString = number.toString(16);
	else
		_hexString = "0";
	
	while(_hexString.length < length)
	{
		_hexString = '0' + _hexString;
	}
	
	return _hexString.toUpperCase();
}
Ist absolut ungetestet und nur als Entwicklungsgrundlage gedacht. Ich bin mir gerade was Dinge wie das Auslesen der Quests angeht sehr unsicher, die [Only registered and activated users can see links. Click Here To Register...] ist da leider stellenweise etwas schwammig.

Ich habe ein paar Kommentare eingefügt, falls ihr zu irgendwas nähere Informationen braucht, könnt ihr gerne fragen. Aber an sich macht die Funktion nicht mehr als ein paar Daten in eine Textdatei zu schreiben, wobei Zahlen zuvor in HEX-Werte konvertiert werden - rückblickend verstehe ich nicht, warum ich den Kram nach HEX konvertiert habe und nicht gleich Base64 genutzt habe, was von der Packungsdichte her viel effizienter wäre. :rolleyes:
danke für den ansatz :) sollte erleichtern denk ich mal der es umschreiben kann :). :handsdown:


Quote:
Originally Posted by lejim View Post
Hatte Muddy mal deswegen gefragt, er sagt ist in Ordnung wenn es wer umstrickt für den D2BS, er hat dafür aber keine Zeit. Würde mich auch mit einer Spende für denjenigen beteiligen, der es erfolgreich für den D2BS umschreibt. Allerdings müsste auch ein entsprechendes Entry-Skript ähnlich dem "MWTools"-Entry beim D2NT erzeugt werden.
Ich weiß hatte ihn ja auch im jan. 2013 gefragt.. deswegen poste ich es ja