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();
}
}