All pastes #1889190 Raw Edit

Something

public text v1 · immutable
#1889190 ·published 2010-06-23 12:24 UTC
rendered paste body
/**
 * @author agor
 * @projectdesc Logs Items into xml file
 * @mods by Muddy_Waters (Last update: 04.20.2010)
 */
 
Include("libs/common/NTItemAlias.ntl");

function NTI_CheckLog() 
{
	var currentDate = new Date();
	var dateString = currentDate.toLocaleFormat("%m-%d-%y");
	var filehandle = FileOpen("logs/" + dateString + "_itemlog.xml", 2);
	if(filehandle)
	{
		var line = filehandle.ReadLine();
		// Check if file already exists
		if(line == "")
		{
			Print("ÿc<Creating New Log File for "+me.charname+": " +dateString+"_itemlog.xml");
			// Creation of the new file
			filehandle.WriteLine("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>"); 
			filehandle.WriteLine("<?xml-stylesheet href=\"itemlog.xsl\" type=\"text/xsl\"?>");
			filehandle.WriteLine("<itemlog>");
			filehandle.WriteLine("</itemlog>");
		}
		filehandle.Close();
		return true;
	}
	return false;
}

function NTI_CheckILog() 
{
	var currentDate = new Date();
	var dateString = currentDate.toLocaleFormat("%m-%d-%y");
	var filehandle = FileOpen("logs/" + dateString + "_" + me.charname + "_ilog.xml", 2);
	if(filehandle)
	{
		var line = filehandle.ReadLine();
		// Check if file already exists
		if(line == "")
		{
			Print("ÿc<Creating New Log File for "+me.charname+": " +dateString+"_itemlog.xml");
			// Creation of the new file
			filehandle.WriteLine("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>"); 
			filehandle.WriteLine("<?xml-stylesheet href=\"itemlog.xsl\" type=\"text/xsl\"?>");
			filehandle.WriteLine("<itemlog>");
			filehandle.WriteLine("</itemlog>");
		}
		filehandle.Close();
		return true;
	}
	return false;
}

// Writes items to itemlog.xml via E4X
// http://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Processing_XML_with_E4X
// item			= Item Object
// me			= me Object
// isEthereal	= 1 if Item is Ethereal, 0 if not
// _mode		= 0 -> Item Kept
// _mode		= 1 -> Item Sold
function NTI_WriteILog(item, me, _isEthereal, _mode) 
{
	if(!NTI_CheckLog())
		NTI_ErrorLog(item, me, 2);
	// Checks if there is already an item logged matching the current item object
	if(NTI_IsLogged(item, me))
	{
		NTI_ErrorLog(item, me, 0);
		return false;
	}
	var dateString = new Date().toLocaleFormat("%m-%d-%y");
	var filehandle = FileOpen("logs/" + dateString + "_" + me.charname + "_ilog.xml", 2);
	var templine = "";
	var content = "";
	var aCounter = 0;
	// Skips XML header lines because they cause errors when creating the E4X object
	if(filehandle)
	{
		while(!filehandle.eof)
		{
			templine = filehandle.ReadLine()
			if(aCounter > 1) 
				content += templine;
			
			aCounter++;
		}
		filehandle.Close();
	}
	else
	{
		NTI_ErrorLog(item, me, 1);
		return false;
	}
	// Creation of the E4X Object
	var itemlog = new XML(content);
	// Creates a Time String
	// Format: http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html
	time_now = new Date();
	var timestring = time_now.toLocaleFormat("%a %m/%d/%y %H:%M:%S");
	// Gets the name of the current itemtype
	var itemTypeDesc = NTI_NameItem(item.classid);
	// Adds a unique identifier to each item
	var itemid = time_now.getTime();
	var typeId = item.classid;
	// Defines the itemname
	var itemname;
	if(item.name)
		itemname = item.name.split("\n")[0];
	else
		itemname = "Itemname is NULL";
	
	var itemdesc;
	if(item.itemdesc)
	{
		// Replaces all colors
		itemdesc = item.itemdesc.replace(/ÿc(.)/g, "");
		// Replaces new lines with spaces
		itemdesc = itemdesc.replace(/\n/g, '|');
		// Skips the first part of the description
		itemdesc = itemdesc.replace((itemdesc.split("|")[0] + "|"), "");
	}
	else
		itemdesc = "Itemdesc is NULL|";
	//Add the last location that was saved
	var loc = NTI_ReadLoc();	
				
	itemlog.item += <item id={itemid} char={me.charname} time={timestring} quality={item.quality} ethereal={_isEthereal} mode={_mode} name={itemname} ilvl={item.itemlevel} location={loc} type={typeId} typedesc={itemTypeDesc}>{itemdesc}</item>;
	// Creation of the file output, headers first and then the itemlog content
	content = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
	content += "<?xml-stylesheet href=\"itemlog.xsl\" type=\"text/xsl\"?>\n";
	content += itemlog.toXMLString();
	
	// Overwrites the whole file
	var fhandle = FileOpen("logs/" + dateString + "_" + me.charname + "_ilog.xml", 2);
	if(!fhandle)
	{
		NTI_ErrorLog(item, me, 1);
		return false;
	}
	fhandle.WriteLine(content);
	fhandle.Close();
	
	return true;
}

// Writes items to itemlog.xml via E4X
// http://developer.mozilla.org/en/Core_JavaScript_1.5_Guide/Processing_XML_with_E4X
// item			= Item Object
// me			= me Object
// isEthereal	= 1 if Item is Ethereal, 0 if not
// _mode		= 0 -> Item Kept
// _mode		= 1 -> Item Sold
function NTI_WriteLog(item, me, _isEthereal, _mode) 
{
	if(!NTI_CheckLog())
		NTI_ErrorLog(item, me, 2);
	// Checks if there is already an item logged matching the current item object
	if(NTI_IsLogged(item, me))
	{
		NTI_ErrorLog(item, me, 0);
		return false;
	}
	var dateString = new Date().toLocaleFormat("%m-%d-%y");
	var filehandle = FileOpen("logs/" + dateString + "_itemlog.xml", 2);
	var templine = "";
	var content = "";
	var aCounter = 0;
	// Skips XML header lines because they cause errors when creating the E4X object
	if(filehandle)
	{
		while(!filehandle.eof)
		{
			templine = filehandle.ReadLine()
			if(aCounter > 1) 
				content += templine;
			
			aCounter++;
		}
		filehandle.Close();
	}
	else
	{
		NTI_ErrorLog(item, me, 1);
		return false;
	}
	// Creation of the E4X Object
	var itemlog = new XML(content);
	// Creates a Time String
	// Format: http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html
	time_now = new Date();
	var timestring = time_now.toLocaleFormat("%a %m/%d/%y %H:%M:%S");
	// Gets the name of the current itemtype
	var itemTypeDesc = NTI_NameItem(item.classid);
	// Adds a unique identifier to each item
	var itemid = time_now.getTime();
	var typeId = item.classid;
	// Defines the itemname
	var itemname;
	if(item.name)
		itemname = item.name.split("\n")[0];
	else
		itemname = "Itemname is NULL";
	
	var itemdesc;
	if(item.itemdesc)
	{
		// Replaces all colors
		itemdesc = item.itemdesc.replace(/ÿc(.)/g, "");
		// Replaces new lines with spaces
		itemdesc = itemdesc.replace(/\n/g, '|');
		// Skips the first part of the description
		itemdesc = itemdesc.replace((itemdesc.split("|")[0] + "|"), "");
	}
	else
		itemdesc = "Itemdesc is NULL|";
	//Add the last location that was saved
	var loc = NTI_ReadLoc();	
				
	itemlog.item += <item id={itemid} char={me.charname} time={timestring} quality={item.quality} ethereal={_isEthereal} mode={_mode} name={itemname} ilvl={item.itemlevel} location={loc} type={typeId} typedesc={itemTypeDesc}>{itemdesc}</item>;
	// Creation of the file output, headers first and then the itemlog content
	content = "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
	content += "<?xml-stylesheet href=\"itemlog.xsl\" type=\"text/xsl\"?>\n";
	content += itemlog.toXMLString();
	
	// Overwrites the whole file
	var fhandle = FileOpen("logs/" + dateString + "_itemlog.xml", 1);
	if(!fhandle)
	{
		NTI_ErrorLog(item, me, 1);
		return false;
	}
	fhandle.WriteLine(content);
	fhandle.Close();
	
	return true;
}

function NTI_CheckLoc() {
   var filehandle = FileOpen("logs/loc/"+me.charname+"_loc.txt", 2);
   var line = filehandle.ReadLine();
   if(line=="")
      filehandle.WriteLine("undefined");
   filehandle.Close();
}

function NTI_WriteLoc() {
   var filehandle = FileOpen("logs/loc/"+me.charname+"_loc.txt", 1);
   var _area = GetArea();
   
   filehandle.WriteLine(_area.name);
   filehandle.Close();
}

function NTI_ReadLoc() {
   var filehandle = FileOpen("logs/loc/"+me.charname+"_loc.txt", 2);
   var loc = filehandle.ReadLine();
   filehandle.Close();
   return loc;
}
NTI_CheckLoc(); 


function NTI_NameItem(itemid)
{
	if(itemid >= 610 && itemid <= 642)
		return "Rune";
	if((itemid >= 557 && itemid <= 586) || (itemid >= 597 && itemid <= 601))
		return "Gem";
	if((itemid >= 644 && itemid <= 653) || (itemid >= 531 && itemid <= 552))
		return "Quest Item";
	if(itemid == 653)
		return "Token";
	if(itemid >= 654 && itemid <= 657)
		return "Essence";
	if(!_NTIPIDToName[itemid])
		return "Database Error";
	else
		return _NTIPIDToName[itemid];
}

function NTI_IsLogged(item, me)
{
	var checkTime;
	switch(item.quality)
	{
		// checkTime in minutes!
		case 1:// low quality
				checkTime = 15;
				break;				
		case 2:// normal
				switch(NTI_NameItem(item.classid))
				{
					case "Rune":
						checkTime = 5;
						break;
					case "Gem":
						checkTime = 5;
						break;
					case "Quest Item:":
						checkTime = 10;
						break;
					default:
						checkTime = 20;		
				}
				break;
		case 3:// superior
				checkTime = 30;
				break;
		case 4:// magic
				checkTime = 30;
				break;
		case 5:// set
				checkTime = 60;
				break;
		case 6://rare
				checkTime = 200;
				break;
		case 7:// unique
				checkTime = 60;
				break;
		case 8:// crafted
				checkTime = 200;
				break;
		default:
				checkTime = 20;
				break;
	}
	var itemdesc = "";
	if(item.itemdesc)
	{
		itemdesc = item.itemdesc.replace(/ÿc(.)/g, "");
		itemdesc = itemdesc.replace(/\n/g, '|');
		itemdesc = itemdesc.replace((itemdesc.split("|")[0] + "|"), "");
	}
	else
		itemdesc = "Itemdesc is NULL|";
		
	var now = new Date();
	var dateString = now.toLocaleFormat("%m-%d-%y");
	var fhandle = FileOpen("logs/" + dateString + "_itemlog.xml", 2);
	var xmlDataArray = new Array();
	var templine = "";
	if(fhandle)
	{
		while(!fhandle.eof)
		{
			if(!((templine = fhandle.ReadLine()) == "</itemlog>"))
				xmlDataArray.push(templine);
		}
		fhandle.Close();
	}
	else
		return false;
		
	for(var i = xmlDataArray.length-2; i > 0; i--)
	{
		if((now.getTime() - parseInt(xmlDataArray[i].split(/"/g)[1])) < checkTime*60000)
		{
			if(parseInt(xmlDataArray[i].split(/"/g)[19]) == item.classid)//check itemtype
			{
				if(parseInt(xmlDataArray[i].split(/"/g)[7]) == item.quality)//check quality
				{
					if(parseInt(xmlDataArray[i].split(/"/g)[15]) == item.itemlevel)//check itemlevel
					{
						if(xmlDataArray[i].split(/"/g)[13] == item.name.split("\n")[0])//check itemname
						{
							if(xmlDataArray[i].split(/">/g)[1].replace("</item>", "") == itemdesc)//check itemdesc
							{
								return true;
							}
							else
								continue;
						}
						else
							continue;		
					}
					else
						continue;
				}
				else
					continue;
			}
			else
				continue;
		
		}
		else
			break;
		
	}
	return false;
}

// 0 = item already logged
// 1 = filhandle error
// 2 = error creating logfile
function NTI_ErrorLog(item, me, errorcode)
{
	var dateString = new Date().toLocaleFormat("%a %m/%d/%y %H:%M:%S");
	var errorOutput = "[" + dateString + " <" + me.charname + "> ] ";
	switch(errorcode)
	{	
		case 0:
			Print("ÿc1Itemlog Error: Item is already in log!");
			errorOutput += "Item Error: Item appears to be in log already (" + item.name + ", " + NTI_NameItem(item.classid) + "[" + item.quality + "])";
			break;
		case 1:
			Print("ÿc1Itemlog Error: Filehandle is null!");
			errorOutput += "File Error: Filehandle is null (Could not log "+ item.name + ", " + NTI_NameItem(item.classid) + "[" + item.quality + "])";
			break;
		case 2:
			Print("ÿc1Itemlog Error: Logfile could not be created!");
			errorOutput += "File Error: Logfile could not be created (Could not log "+ item.name + ", " + NTI_NameItem(item.classid) + "[" + item.quality + "])";
			break;
		default:
			errorOutput += "Unknown Error";
			break;
	}
	var filehandle = FileOpen("logs/ErrorLog.txt", 2);
	if(filehandle)
	{
		filehandle.WriteLine(errorOutput);
		filehandle.Close();
	}
}