Advertisement
dzik

Diablo 2 - ETAL - NTItemlogger.ntl

Jun 24th, 2014
200
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. /**
  2.  * @author agor
  3.  * @projectdesc Logs Items into xml file
  4.  * @mods by Muddy_Waters (Last update: 04.20.2010)
  5.  */
  6.  
  7. Include("libs/common/NTItemAlias.ntl");
  8.  
  9. function NTI_CheckLog() {
  10.     var currentDate = new Date();
  11.     var dateString = currentDate.toLocaleFormat("%y-%m-%d-[%p]");
  12.     var filehandle = FileOpen("logs/Item Log/" + dateString + "_itemlog.xml", 2);
  13.     if(filehandle)
  14.     {
  15.         var line = filehandle.ReadLine();
  16.         // Check if file already exists
  17.         if(line == "")
  18.         {
  19.             Print(COLOR_25 + "Creating New Log File for "+me.charname+": " +dateString+"_itemlog123.xml");
  20.             // Creation of the new file
  21.             filehandle.WriteLine(" ");
  22.             filehandle.WriteLine("<?xml-stylesheet href=\"itemlog.xsl\" type=\"text/xsl\"?>");
  23.             filehandle.WriteLine("<itemlog>");
  24.             filehandle.WriteLine("</itemlog>");
  25.         }
  26.         filehandle.Close();
  27.         return true;
  28.     }
  29.     return false;
  30. }
  31.  
  32. function NTI_CheckILog() {
  33.     var currentDate = new Date();
  34.     var dateString = currentDate.toLocaleFormat("%y-%m-%d-[%p]");
  35.     var filehandle = FileOpen("logs/Item Log/" + dateString + "_" + me.charname + "_itemlog.xml", 2);
  36.     if(filehandle)
  37.     {
  38.         var line = filehandle.ReadLine();
  39.         // Check if file already exists
  40.         if(line == "")
  41.         {
  42.             Print(COLOR_25 + "Creating New Log File for "+me.charname+": " + dateString + "_" + me.charname + "_itemlog.xml");
  43.             // Creation of the new file
  44.             filehandle.WriteLine(" ");
  45.             filehandle.WriteLine("<?xml-stylesheet href=\"itemlog.xsl\" type=\"text/xsl\"?>");
  46.             filehandle.WriteLine("<itemlog>");
  47.             filehandle.WriteLine("</itemlog>");
  48.         }
  49.         filehandle.Close();
  50.         return true;
  51.     }
  52.     return false;
  53. }
  54.  
  55. function NTC_GetScript(index) {
  56.     var _script;
  57.  
  58.     if(arguments.length < 1)
  59.         index = false;
  60.  
  61.     var _hfile = FileOpen("logs/loc/" + me.charname + "_LocInfo.txt", 0);
  62.     if(!_hfile) {
  63.         var _this = "Rogue Encampment";
  64.         return _this;
  65.     }
  66.  
  67.     _script = _hfile.ReadLine();
  68.     _hfile.Close();
  69.  
  70.     return _script;
  71. }
  72.  
  73. function NTI_WriteILog(item, me, _isEthereal, _mode, gamble, npc, crafted) {
  74.     if(arguments.length < 5)
  75.     {
  76.         gamble = false;
  77.         npc = '';
  78.         crafted = false;
  79.     }
  80.  
  81.     if(!NTI_CheckILog())
  82.         NTI_ErrorLog(item, me, 2);
  83.     // Checks if there is already an item logged matching the current item object
  84.     if(NTI_DIsLogged(item, me))
  85.     {
  86.         if(item.gid > 1) {
  87.             NTI_ErrorLog(item, me, 0);
  88.             return false;
  89.         }
  90.     }
  91.     var dateString = new Date().toLocaleFormat("%y-%m-%d-[%p]");
  92.     var filehandle = FileOpen("logs/Item Log/" + dateString + "_" + me.charname + "_itemlog.xml", 2);
  93.     var templine = "";
  94.     var content = "";
  95.     var aCounter = 0;
  96.     // Skips XML header lines because they cause errors when creating the E4X object
  97.     if(filehandle)
  98.     {
  99.         while(!filehandle.eof)
  100.         {
  101.             templine = filehandle.ReadLine()
  102.             if(aCounter > 1)
  103.                 content += templine;
  104.  
  105.             aCounter++;
  106.         }
  107.         filehandle.Close();
  108.     }
  109.     else
  110.     {
  111.         NTI_ErrorLog(item, me, 1);
  112.         return false;
  113.     }
  114.     // Creation of the E4X Object
  115.     var itemlog = new XML(content);
  116.     // Creates a Time String
  117.     // Format: http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html
  118.     time_now = new Date();
  119.     var timestring = time_now.toLocaleFormat("%a %y/%m/%d %H:%M:%S");
  120.     // Gets the name of the current itemtype
  121.     var itemTypeDesc = NTI_NameItem(item.classid);
  122.     // Adds a unique identifier to each item
  123.     var itemid = time_now.getTime();
  124.     var typeId = item.classid;
  125.     var _Ethereal;
  126.     if(_isEthereal) { _Ethereal = "Yes"; } else {   _Ethereal = "No"; }
  127.     var _sockets = item.GetStat(_NTIPAliasStat["sockets"]);
  128.     // Defines the itemname
  129.     var itemname;
  130.     if(item.name)
  131.         itemname = item.name.split("\n")[0];
  132.     else
  133.         itemname = "Itemname is NULL";
  134.    
  135.     var itemdesc;
  136.     var last_color='';
  137.     if(item.itemdesc)
  138.     {
  139.         itemdesc = item.itemdesc.replace(REGEX1, function(str, m1) { last_color = m1 || last_color; return '|'+last_color } ).replace(REGEX2, REPLACE2).replace(REGEX3, REPLACE3).replace(REGEX4, REPLACE4).replace(REGEX5, REPLACE5);
  140.         itemdesc = itemdesc.replace((itemdesc.split("|")[0] + "|"), "");
  141.     }
  142.     else {
  143.         itemdesc = "Item not picked up||Ethereal: " + _Ethereal + "|Sockets: " + _sockets + "|";
  144.         if(crafted) { itemdesc += "ÿc8Crafted |"; }
  145.     }
  146.     //Add the last location that was saved
  147.     if(gamble)
  148.         var loc = "Gambled: " + npc;
  149.     else if(crafted)
  150.         var loc = "Crafted";
  151.     else
  152.         var loc = NTC_GetScript();
  153.  
  154.     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>;
  155.     // Creation of the file output, headers first and then the itemlog content
  156.     content = " \n";
  157.     content += "<?xml-stylesheet href=\"Rendering/itemlog.xsl\" type=\"text/xsl\"?>\n";
  158.     content += itemlog.toXMLString();
  159.  
  160.     // Overwrites the whole file
  161.     var fhandle = FileOpen("logs/Item Log/" + dateString + "_" + me.charname + "_itemlog.xml", 1);
  162.     if(!fhandle)
  163.     {
  164.         NTI_ErrorLog(item, me, 1);
  165.         return false;
  166.     }
  167.     fhandle.WriteLine(content);
  168.     fhandle.Close();
  169.    
  170.     return true;
  171. }
  172.  
  173. function NTI_WriteLog(item, me, _isEthereal, _mode, gamble, npc, crafted) {
  174.     if(arguments.length < 5)
  175.     {
  176.         gamble = false;
  177.         npc = '';
  178.         crafted = false;
  179.     }
  180.  
  181.     if(!NTI_CheckLog())
  182.         NTI_ErrorLog(item, me, 2);
  183.     // Checks if there is already an item logged matching the current item object
  184.     if(NTI_IsLogged(item, me))
  185.     {
  186.         if(item.gid > 1) {
  187.             NTI_ErrorLog(item, me, 0);
  188.             return false;
  189.         }
  190.     }
  191.     var dateString = new Date().toLocaleFormat("%y-%m-%d-[%p]");
  192.     var filehandle = FileOpen("logs/Item Log/" + dateString + "_itemlog.xml", 2);
  193.     var templine = "";
  194.     var content = "";
  195.     var aCounter = 0;
  196.     // Skips XML header lines because they cause errors when creating the E4X object
  197.     if(filehandle)
  198.     {
  199.         while(!filehandle.eof)
  200.         {
  201.             templine = filehandle.ReadLine()
  202.             if(aCounter > 1)
  203.                 content += templine;
  204.  
  205.             aCounter++;
  206.         }
  207.         filehandle.Close();
  208.     }
  209.     else
  210.     {
  211.         NTI_ErrorLog(item, me, 1);
  212.         return false;
  213.     }
  214.     // Creation of the E4X Object
  215.     var itemlog = new XML(content);
  216.     // Creates a Time String
  217.     // Format: http://www.opengroup.org/onlinepubs/007908799/xsh/strftime.html
  218.     time_now = new Date();
  219.     var timestring = time_now.toLocaleFormat("%a %y/%m/%d %H:%M:%S");
  220.     // Gets the name of the current itemtype
  221.     var itemTypeDesc = NTI_NameItem(item.classid);
  222.     // Adds a unique identifier to each item
  223.     var itemid = time_now.getTime();
  224.     var typeId = item.classid;
  225.     var _Ethereal;
  226.     if(_isEthereal) { _Ethereal = "Yes"; } else {   _Ethereal = "No"; }
  227.     var _sockets = item.GetStat(_NTIPAliasStat["sockets"]);
  228.     // Defines the itemname
  229.     var itemname;
  230.     if(item.name)
  231.         itemname = item.name.split("\n")[0];
  232.     else
  233.         itemname = "Itemname is NULL";
  234.    
  235.     var itemdesc;
  236.     var last_color='';
  237.     if(item.itemdesc)
  238.     {
  239.         itemdesc = item.itemdesc.replace(REGEX1, function(str, m1) { last_color = m1 || last_color; return '|'+last_color } ).replace(REGEX2, REPLACE2).replace(REGEX3, REPLACE3).replace(REGEX4, REPLACE4).replace(REGEX5, REPLACE5);
  240.         itemdesc = itemdesc.replace((itemdesc.split("|")[0] + "|"), "");
  241.     }
  242.     else {
  243.         itemdesc = "Item not picked up||Ethereal: " + _Ethereal + "|Sockets: " + _sockets + "|";
  244.         if(crafted) { itemdesc += "ÿc8Crafted |"; }
  245.     }
  246.     //Add the last location that was saved
  247.     if(gamble)
  248.         var loc = "Gambled: " + npc;
  249.     else if(crafted)
  250.         var loc = "Crafted";
  251.     else
  252.         var loc = NTC_GetScript();
  253.  
  254.     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>;
  255.     // Creation of the file output, headers first and then the itemlog content
  256.     content = " \n";
  257.     content += "<?xml-stylesheet href=\"Rendering/itemlog.xsl\" type=\"text/xsl\"?>\n";
  258.     content += itemlog.toXMLString();
  259.  
  260.     // Overwrites the whole file
  261.     var fhandle = FileOpen("logs/Item Log/" + dateString + "_itemlog.xml", 1);
  262.     if(!fhandle)
  263.     {
  264.         NTI_ErrorLog(item, me, 1);
  265.         return false;
  266.     }
  267.     fhandle.WriteLine(content);
  268.     fhandle.Close();
  269.    
  270.     return true;
  271. }
  272.  
  273. function NTI_NameItem(itemid)
  274. {
  275.     if(itemid >= 610 && itemid <= 642)
  276.         return "Rune";
  277.     if((itemid >= 557 && itemid <= 586) || (itemid >= 597 && itemid <= 601))
  278.         return "Gem";
  279.     if((itemid >= 531 && itemid <= 552) || (itemid >= 644 && itemid <= 646))
  280.         return "Quest Item";
  281.     if(itemid >= 647 && itemid <= 649)
  282.         return "Key";
  283.     if(itemid >= 650 && itemid <= 652)
  284.         return "Body Part";
  285.     if(itemid == 653)
  286.         return "Token";
  287.     if(itemid >= 654 && itemid <= 657)
  288.         return "Essence";
  289.     if(!_NTIPIDToName[itemid])
  290.         return "Database Error";
  291.     else
  292.         return _NTIPIDToName[itemid];
  293. }
  294.  
  295. function NTI_DIsLogged(item, me) {
  296.     var checkTime;
  297.     switch(item.quality)
  298.     {
  299.         // checkTime in minutes!
  300.         case 1:// low quality
  301.                 checkTime = 15;
  302.                 break;             
  303.         case 2:// normal
  304.                 switch(NTI_NameItem(item.classid))
  305.                 {
  306.                     case "Rune":
  307.                         checkTime = 5;
  308.                         break;
  309.                     case "Gem":
  310.                         checkTime = 5;
  311.                         break;
  312.                     case "Quest Item:":
  313.                         checkTime = 10;
  314.                         break;
  315.                     default:
  316.                         checkTime = 20;    
  317.                 }
  318.                 break;
  319.         case 3:// superior
  320.                 checkTime = 30;
  321.                 break;
  322.         case 4:// magic
  323.                 checkTime = 30;
  324.                 break;
  325.         case 5:// set
  326.                 checkTime = 60;
  327.                 break;
  328.         case 6://rare
  329.                 checkTime = 200;
  330.                 break;
  331.         case 7:// unique
  332.                 checkTime = 60;
  333.                 break;
  334.         case 8:// crafted
  335.                 checkTime = 200;
  336.                 break;
  337.         default:
  338.                 checkTime = 20;
  339.                 break;
  340.     }
  341.     var itemdesc = "";
  342.     var last_color = "";
  343.     if(item.itemdesc)
  344.     {
  345.         itemdesc = item.itemdesc.replace(REGEX1, function(str, m1) { last_color = m1 || last_color; return '|'+last_color } ).replace(REGEX2, REPLACE2).replace(REGEX3, REPLACE3).replace(REGEX4, REPLACE4);
  346.         itemdesc = itemdesc.replace((itemdesc.split("|")[0] + "|"), "");
  347.     }
  348.     else
  349.         itemdesc = "Itemdesc is NULL|";
  350.  
  351.     var now = new Date();
  352.     var dateString = now.toLocaleFormat("%y-%m-%d-[%p]");
  353.     var fhandle = FileOpen("logs/Item Log/" + dateString + "_" + me.charname + "_itemlog.xml", 2);
  354.     var xmlDataArray = new Array();
  355.     var templine = "";
  356.     if(fhandle) {
  357.         while(!fhandle.eof)
  358.         {
  359.             if(!((templine = fhandle.ReadLine()) == "</itemlog>"))
  360.                 xmlDataArray.push(templine);
  361.         }
  362.         fhandle.Close();
  363.     } else { return false; }
  364.        
  365.     for(var i = xmlDataArray.length-2; i > 0; i--) {
  366.         if((now.getTime() - parseInt(xmlDataArray[i].split(/"/g)[1])) < checkTime*60000) {
  367.             if(parseInt(xmlDataArray[i].split(/"/g)[19]) == item.classid) {
  368.                 if(parseInt(xmlDataArray[i].split(/"/g)[7]) == item.quality) {
  369.                     if(parseInt(xmlDataArray[i].split(/"/g)[15]) == item.itemlevel) {
  370.                         if(xmlDataArray[i].split(/"/g)[13] == item.name.split("\n")[0]) {
  371.                             if(xmlDataArray[i].split(/">/g)[1].replace("</item>", "") == itemdesc) {
  372.                                 return true;
  373.                             } else { continue; }
  374.                         } else { continue; }       
  375.                     } else { continue; }
  376.                 } else { continue; }
  377.             } else { continue; }
  378.         } else { break; }
  379.     } return false;
  380. }
  381.  
  382. function NTI_IsLogged(item, me) {
  383.     var checkTime;
  384.     switch(item.quality)
  385.     {
  386.         // checkTime in minutes!
  387.         case 1:// low quality
  388.                 checkTime = 15;
  389.                 break;             
  390.         case 2:// normal
  391.                 switch(NTI_NameItem(item.classid))
  392.                 {
  393.                     case "Rune":
  394.                         checkTime = 5;
  395.                         break;
  396.                     case "Gem":
  397.                         checkTime = 5;
  398.                         break;
  399.                     case "Quest Item:":
  400.                         checkTime = 10;
  401.                         break;
  402.                     default:
  403.                         checkTime = 20;    
  404.                 }
  405.                 break;
  406.         case 3:// superior
  407.                 checkTime = 30;
  408.                 break;
  409.         case 4:// magic
  410.                 checkTime = 30;
  411.                 break;
  412.         case 5:// set
  413.                 checkTime = 60;
  414.                 break;
  415.         case 6://rare
  416.                 checkTime = 200;
  417.                 break;
  418.         case 7:// unique
  419.                 checkTime = 60;
  420.                 break;
  421.         case 8:// crafted
  422.                 checkTime = 200;
  423.                 break;
  424.         default:
  425.                 checkTime = 20;
  426.                 break;
  427.     }
  428.     var itemdesc = "";
  429.     var last_color = "";
  430.     if(item.itemdesc)
  431.     {
  432.         itemdesc = item.itemdesc.replace(REGEX1, function(str, m1) { last_color = m1 || last_color; return '|'+last_color } ).replace(REGEX2, REPLACE2).replace(REGEX3, REPLACE3).replace(REGEX4, REPLACE4);
  433.         itemdesc = itemdesc.replace((itemdesc.split("|")[0] + "|"), "");
  434.     }
  435.     else
  436.         itemdesc = "Itemdesc is NULL|";
  437.  
  438.     var now = new Date();
  439.     var dateString = now.toLocaleFormat("%y-%m-%d-[%p]");
  440.     var fhandle = FileOpen("logs/Item Log/" + dateString + "_itemlog.xml", 2);
  441.     var xmlDataArray = new Array();
  442.     var templine = "";
  443.     if(fhandle) {
  444.         while(!fhandle.eof)
  445.         {
  446.             if(!((templine = fhandle.ReadLine()) == "</itemlog>"))
  447.                 xmlDataArray.push(templine);
  448.         }
  449.         fhandle.Close();
  450.     } else { return false; }
  451.        
  452.     for(var i = xmlDataArray.length-2; i > 0; i--) {
  453.         if((now.getTime() - parseInt(xmlDataArray[i].split(/"/g)[1])) < checkTime*60000) {
  454.             if(parseInt(xmlDataArray[i].split(/"/g)[19]) == item.classid) {
  455.                 if(parseInt(xmlDataArray[i].split(/"/g)[7]) == item.quality) {
  456.                     if(parseInt(xmlDataArray[i].split(/"/g)[15]) == item.itemlevel) {
  457.                         if(xmlDataArray[i].split(/"/g)[13] == item.name.split("\n")[0]) {
  458.                             if(xmlDataArray[i].split(/">/g)[1].replace("</item>", "") == itemdesc) {
  459.                                 return true;
  460.                             } else { continue; }
  461.                         } else { continue; }       
  462.                     } else { continue; }
  463.                 } else { continue; }
  464.             } else { continue; }
  465.         } else { break; }
  466.     } return false;
  467. }
  468.  
  469. function NTI_ErrorLog(item, me, errorcode) {
  470.     var dateString = new Date().toLocaleFormat("%a %y/%m/%d %H:%M:%S");
  471.     var errorOutput = "[" + dateString + " <" + me.charname + "> ] ";
  472.     switch(errorcode)
  473.     {  
  474.         case 0:
  475.             Print(COLOR_1 + "Itemlog Error: Item is already in log!");
  476.             errorOutput += "Item Error: Item appears to be in log already (" + item.name + ", " + NTI_NameItem(item.classid) + "[" + item.quality + "])";
  477.             break;
  478.         case 1:
  479.             Print(COLOR_1 +"Itemlog Error: Filehandle is null!");
  480.             errorOutput += "File Error: Filehandle is null (Could not log "+ item.name + ", " + NTI_NameItem(item.classid) + "[" + item.quality + "])";
  481.             break;
  482.         case 2:
  483.             Print(COLOR_1 +"Itemlog Error: Logfile could not be created!");
  484.             errorOutput += "File Error: Logfile could not be created (Could not log "+ item.name + ", " + NTI_NameItem(item.classid) + "[" + item.quality + "])";
  485.             break;
  486.         default:
  487.             errorOutput += "Unknown Error";
  488.             break;
  489.     }
  490.     var filehandle = FileOpen("logs/Item Log/ErrorLog.txt", 2);
  491.     if(filehandle)
  492.     {
  493.         filehandle.WriteLine(errorOutput);
  494.         filehandle.Close();
  495.     }
  496. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement