/** * @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"); filehandle.WriteLine(""); filehandle.WriteLine(""); filehandle.WriteLine(""); } 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"); filehandle.WriteLine(""); filehandle.WriteLine(""); filehandle.WriteLine(""); } 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 += {itemdesc}; // Creation of the file output, headers first and then the itemlog content content = "\n"; content += "\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 += {itemdesc}; // Creation of the file output, headers first and then the itemlog content content = "\n"; content += "\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()) == "")) 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("", "") == 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(); } }