Advertisement
Guest User

Untitled

a guest
Jul 21st, 2017
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. if(!isIncluded("njip.dbl")) include("njip.dbl");
  2.  
  3. var _NTT_BeltColNeeded = new Array(4);
  4. _NTT_BeltColNeeded[0] = 0;
  5. _NTT_BeltColNeeded[1] = 0;
  6. _NTT_BeltColNeeded[2] = 0;
  7. _NTT_BeltColNeeded[3] = 0;
  8.  
  9. var _NTT_BeltSize = false;
  10.  
  11. var _NTT_OldItems;
  12.  
  13. var _NTT_IgnoredItems = new Array(
  14. "aqv", // Arrows quiver
  15. "cqv", // Bolts quiver
  16. "key", // Keys
  17. "tbk", // Tome of Town Portal
  18. "ibk", // Tome of Identify
  19. "tsc", // Scroll of Town Portal
  20. "isc", // Scroll of Identify
  21. "yps", // Antidote potion
  22. "vps", // Stamina potion
  23. "wms", // Thawing potion
  24. "gps", // Rancid Gas Pot
  25. "ops", // Oil Potion
  26. "gpm", // Choking Gas Pot
  27. "opm", // Exploding Pot
  28. "gpl", // Strangling Gas
  29. "opl", // Fulminating Pot
  30. "hp1","hp2","hp3","hp4","hp5", // Healing potions
  31. "mp1","mp2","mp3","mp4","mp5", // Mana potions
  32. "rvs","rvl"); // Rejuvenation potions
  33.  
  34. // type : 1 = shop, 2 = ressurect, 3 = repair, 4 = potion, 5 = scrolls, 6 = gamble, 7 = ammo, 8 = healing
  35. function NTT_CheckNPC(npc, type)
  36. {
  37.     var _npcclassid;
  38.  
  39.     if(typeof(npc) == "number")
  40.         _npcclassid = npc;
  41.     else
  42.         _npcclassid = npc.classid;
  43.  
  44.     if(type == 1)
  45.     {
  46.         if(_npcclassid == 147 || _npcclassid == 148 || _npcclassid == 154 || _npcclassid == 177 ||
  47.             _npcclassid == 178 || _npcclassid == 199 || _npcclassid == 202 || _npcclassid == 252 ||
  48.             _npcclassid == 253 || _npcclassid == 254 || _npcclassid == 255 || _npcclassid == 257 ||
  49.             _npcclassid == 405 || _npcclassid == 511 || _npcclassid == 512 || _npcclassid == 513)
  50.             return true;
  51.         else
  52.             return false;
  53.     }
  54.  
  55.     if(type == 2)
  56.     {
  57.         if(_npcclassid == 150 || _npcclassid == 198 || _npcclassid == 252 || _npcclassid == 367 || _npcclassid == 515)
  58.             return true;
  59.         else
  60.             return false;
  61.     }
  62.  
  63.     if(type == 3)
  64.     {
  65.         if(_npcclassid == 154 || _npcclassid == 178 || _npcclassid == 253 || _npcclassid == 257 || _npcclassid == 511)
  66.             return true;
  67.         else
  68.             return false;
  69.     }
  70.  
  71.     if(type == 4)
  72.     {
  73.         if(_npcclassid == 148 || _npcclassid == 177 || _npcclassid == 198 || _npcclassid == 202 ||
  74.             _npcclassid == 255 || _npcclassid == 405 || _npcclassid == 513)
  75.             return true;
  76.         else
  77.             return false;
  78.     }
  79.  
  80.     if(type == 5)
  81.     {
  82.         if(_npcclassid == 148 || _npcclassid == 177 || _npcclassid == 255 || _npcclassid == 405 || _npcclassid == 513)
  83.             return true;
  84.         else
  85.             return false;
  86.     }
  87.  
  88.     if(type == 6)
  89.     {
  90.         if(_npcclassid == 147 || _npcclassid == 199 || _npcclassid == 254 ||
  91.             _npcclassid == 405 || _npcclassid == 512 || _npcclassid == 514)
  92.             return true;
  93.         else
  94.             return false;
  95.     }
  96.  
  97.     if(type == 7)
  98.     {
  99.         if(_npcclassid == 147 || _npcclassid == 154 || _npcclassid == 178 || _npcclassid == 199 || _npcclassid == 252 ||
  100.             _npcclassid == 253 || _npcclassid == 257 || _npcclassid == 511 || _npcclassid == 512)
  101.             return true;
  102.         else
  103.             return false;
  104.     }
  105.  
  106.     if(type == 8)
  107.     {
  108.         if(_npcclassid == 148 || _npcclassid == 178 || _npcclassid == 255 || _npcclassid == 513)
  109.             return true;
  110.         else
  111.             return false;
  112.     }
  113.  
  114.     return false;
  115. }
  116.  
  117. // npc : NPC, stash or cube
  118. function NTT_DoInteract(npc)
  119. {
  120.  debugPrint("ntt do Interact npc:"+npc.name);
  121.     var _uiflag = 0x08;
  122.  
  123.     if(!npc)
  124.         return false;
  125.  
  126.     if(npc.classid == 267)
  127.         _uiflag = 0x19;
  128.     else if(npc.classid == 549)
  129.         _uiflag = 0x1A;
  130.  
  131.     if(getUIFlag(_uiflag))
  132.         return true;
  133.  
  134.     for(var i = 0 ; i < 36 ; i++)
  135.     {
  136.         if((i % 2) == 0)
  137.         {
  138.             if(getUIFlag(0x17))
  139.             {
  140.                 me.cancel(1);
  141.                 NTC_Delay(250);
  142.             }
  143.  
  144.             if(npc.classid == 549)
  145.                 clickItem(1, npc);
  146.             else
  147.                 npc.interact();
  148.         }
  149.         if((i % 4) == 0){
  150.                 me.cancel(1);
  151.         }
  152.  
  153.         NTC_Delay(250);
  154.  
  155.         if(getUIFlag(_uiflag))
  156.         {
  157.             NTC_PingDelay(1000);
  158.             return true;
  159.         }
  160.     }
  161.  
  162.     return false;
  163. }
  164.  
  165. // type : 0 = shop, 1 = gamble
  166. function NTT_DoTrade(npc, type)
  167. {
  168.  debugPrint("ntt_DoTrade npc:"+npc.name);
  169.     if(!npc)
  170.         return false;
  171.  
  172.     if(getUIFlag(0x0C))
  173.         return true;
  174.  
  175.     if(arguments.length < 2)
  176.         type = 0;
  177.  
  178.     for(var i = 0 ; i < 12 ; i++)
  179.     {
  180.         if((i % 4) == 0)
  181.         {
  182.             if(NTT_CheckNPC(npc.classid, 3))
  183.                 npc.useMenu(0x0D06);
  184.             else if(type == 1 && NTT_CheckNPC(npc.classid, 6))
  185.                 npc.useMenu(0x0D46);
  186.             else
  187.                 npc.useMenu(0x0D44);
  188.         }
  189.  
  190.         NTC_Delay(250);
  191.  
  192.         if(getUIFlag(0x0C))
  193.         {
  194.             NTC_PingDelay(1000);
  195.             if(NTSB_ShopOnNpcVisit && !type) NTSB_QuickShop(npc);
  196.             return true;
  197.         }
  198.     }
  199.  
  200.     return false;
  201. }
  202.  
  203. function NTT_MenuCancel()
  204. {
  205.     var i;
  206.  
  207.     for(i = 0 ; i < 4 ; i++)
  208.     {
  209.         if(getUIFlag(0x0C) || getUIFlag(0x0D) || getUIFlag(0x14) || getUIFlag(0x19) || getUIFlag(0x1A))
  210.         {
  211.             me.cancel(0);
  212.             NTC_Delay(500);
  213.         }
  214.         else
  215.             break;
  216.     }
  217.  
  218.     for(i = 0 ; i < 4 ; i++)
  219.     {
  220.         if(getUIFlag(0x08) || getUIFlag(0x17))
  221.         {
  222.             me.cancel(1);
  223.             NTC_Delay(250);
  224.  
  225.         }
  226.         else
  227.             break;
  228.     }
  229.  
  230. }
  231.  
  232. function NTT_GetCorpses()
  233. {
  234.     var _corpse;
  235.  
  236.  
  237.     for(var i = 0 ; i < 2 ; i++)
  238.     {
  239.         _corpse = NTC_GetUnit(NTC_UNIT_PLAYER);
  240.  
  241.         do
  242.         {
  243.             if(_corpse.name == me.name && _corpse.hpmax == 0)
  244.             {
  245.                 NTC_DoWeaponSwitch(0);
  246.  
  247.                 _corpse.interact();
  248.  
  249.                 NTC_PingDelay(1000);
  250.  
  251.                 break;
  252.             }
  253.         } while(_corpse.getNext());
  254.     }
  255.     for(var i = 0 ; i < 2 ; i++)
  256.     {
  257.         _corpse = NTC_GetUnit(NTC_UNIT_PLAYER);
  258.         do
  259.         {
  260.             if(_corpse.name == me.name && _corpse.hpmax == 0)
  261.             {
  262.                 // st buged corpse telling oog to stop
  263.                 sendCopyData(null, "OOG", 0,"Stop Me");
  264.                 ShowConsole = 0;
  265.                 print("failed to pick corpse, stopping")
  266.             }
  267.         } while(_corpse.getNext());
  268.     }
  269.  
  270.  
  271. }
  272.  
  273. function NTT_CheckMerc()
  274. {
  275.     if(NTConfig_UseMerc)
  276.     {
  277.         if(NTC_GetMerc())
  278.             return false;
  279.         else
  280.         {
  281.             if(NTC_MyGold() < me.mercrevivecost)
  282.                 return false;
  283.  
  284.             return true;
  285.         }
  286.     }
  287.  
  288.     return false;
  289. }
  290.  
  291. function NTT_ReviveMerc(npc)
  292. {
  293.     var _mygold;
  294.  
  295.     if(!NTT_CheckMerc())
  296.         return true;
  297.  
  298.     if(!npc)
  299.         return false;
  300.  
  301.     if(!getUIFlag(0x08))
  302.         return false;
  303.  
  304.     _mygold = NTC_MyGold();
  305.  
  306.     if(_mygold < me.mercrevivecost)
  307.         return false;
  308.  
  309.     for(var i = 0 ; i < 6 ; i++)
  310.     {
  311.         if((i % 2) == 0)
  312.             npc.useMenu(0x1507);
  313.  
  314.         NTC_Delay(500);
  315.  
  316.         if(_mygold > NTC_MyGold())
  317.             return true;
  318.     }
  319.  
  320.     return false;
  321. }
  322.  
  323. function NTT_ResetWeaponMerc()
  324. {
  325.     var i, n;
  326.     var _merc, _items;
  327.     var _result = 0;
  328.  
  329.     _merc = NTC_GetMerc();
  330.  
  331.     if(!_merc)
  332.         return false;
  333.  
  334.     _items = NTC_GetItems(_merc);
  335.  
  336.     for(i = 0 ; i < _items.length ; i++)
  337.     {
  338.         if(_items[i].bodylocation == 4)// && _items[i].getFlag(0x4000000))
  339.         {
  340.             _result = _items[i].gid;
  341.             for(n = 0 ; n < 60 ; n++)
  342.             {
  343.                 if((n % 20) == 0)
  344.  
  345.                     clickItem(4, 4);
  346.  
  347.                 NTC_Delay(100);
  348.  
  349.                 if(me.itemoncursor)
  350.                 {
  351.                     NTC_PingDelay(1000);
  352.                     break;
  353.                 }
  354.             }
  355.  
  356.             if(n >= 60)
  357.                 break;
  358.  
  359.             for(n = 0 ; n < 100 ; n++)
  360.             {
  361.                 if((n % 20) == 0)
  362.                     clickItem(4, 4);
  363.  
  364.                 NTC_Delay(100);
  365.  
  366.                 if(!me.itemoncursor)
  367.                 {
  368.                     NTC_PingDelay(500);
  369.  
  370.                     break;;
  371.                 }
  372.             }
  373.  
  374.             break;
  375.         }
  376.     }
  377.     if (_result ==0)
  378.         return true;
  379.  
  380.     delay(1500);
  381.     _items = NTC_GetItems(_merc);
  382.     for(i = 0 ; i < _items.length ; i++)
  383.     {
  384.         if(_items[i].bodylocation == 1 )
  385.         {
  386.             return true;
  387.         }
  388.     }
  389.     if(me.itemoncursor){
  390.         while(me.itemoncursor){
  391.                 clickItem(4, 4);
  392.                 NTC_Delay(1000);
  393.         }
  394.     }else {
  395.     var droped = NTSI_findItemGID(_result);
  396.     if (droped){
  397.         NTSI_PickUpItemInt(droped);
  398.         print("crap i droped merc's wepon pausing");
  399.         NT_Pause=true;
  400.         sendCopyData(null, "OOG", 0,"Stop Me");
  401.         NTC_Delay(100);
  402.     }
  403.     }
  404.     NTSI_PickItems();
  405.  
  406.  
  407.     return false;
  408. }
  409.  
  410. function NTT_CheckRepair(repairpercent)
  411. {
  412.     var _max_dur;
  413.     var _percent;
  414.     var _items = NTC_GetItems();
  415.  
  416.     if(!_items)
  417.         return false;
  418.  
  419.     for(var i = 0 ; i < _items.length ; i++)
  420.     {
  421.         if(_items[i].mode == 1 && !_items[i].getFlag(0x400000) && !_items[i].getStat(152) && !getBaseStat(0, _items[i].classid, 59))
  422.         {
  423.             _max_dur = _items[i].getStat(73);
  424.             if(_max_dur == 0)
  425.                 continue;
  426.  
  427.             _percent = Math.floor((_items[i].getStat(72)*100) / (_max_dur*(_items[i].getStat(75)/100 + 1)));
  428.  
  429.             if(_percent <= repairpercent)
  430.                 return true;
  431.         }
  432.     }
  433.  
  434.     return false;
  435. }
  436.  
  437. function NTT_RepairItems(npc)
  438. {
  439.     var _mygold;
  440.  
  441.     if(!npc)
  442.         return false;
  443.  
  444.     if(!getUIFlag(0x08) || !getUIFlag(0x0C))
  445.         return false;
  446.  
  447.     _mygold = NTC_MyGold();
  448.  
  449.     for(var i = 0 ; i < 6 ; i++)
  450.     {
  451.         if((i % 2) == 0)
  452.             me.repair();
  453.  
  454.         NTC_Delay(500);
  455.  
  456.         if(_mygold > NTC_MyGold())
  457.             return true;
  458.     }
  459.  
  460.     return false;
  461. }
  462.  
  463. function NTT_CheckInventory()
  464. {
  465.     var x, y;
  466.     var _items;
  467.  
  468.     var _itemlist = new Array();
  469.     var _ignorestring = _NTT_IgnoredItems.join();
  470.  
  471.     if(!NTC_StashGoldFull() && NTC_MyGoldCarry() > NTConfig_MinGoldToStash )
  472.         return true;
  473.  
  474.     var _invspace = new Array(4);
  475.     _invspace[0] = new Array(10);
  476.     _invspace[1] = new Array(10);
  477.     _invspace[2] = new Array(10);
  478.     _invspace[3] = new Array(10);
  479.  
  480.     for(y = 0 ; y < 4 ; y++)
  481.     {
  482.         for(x = 0 ; x < 10 ; x++)
  483.             _invspace[y][x] = 0;
  484.     }
  485.  
  486.     _items = NTC_GetItems();
  487.  
  488.     if(!_items)
  489.         return false;
  490.  
  491.     for(var i = 0 ; i < _items.length ; i++)
  492.     {
  493.         if(_items[i].mode == 0 && _items[i].location == 0)
  494.         {
  495.             if(NTConfig_Columns[_items[i].y][_items[i].x] > 0)
  496.                 _itemlist.push(_items[i].code);
  497.  
  498.             for(y = 0 ; y < _items[i].sizey ; y++)
  499.             {
  500.                 for(x = 0 ; x < _items[i].sizex ; x++)
  501.                     _invspace[y+_items[i].y][x+_items[i].x] = 1;
  502.             }
  503.         }
  504.     }
  505.  
  506.     var _freecols = new Array(10);
  507.  
  508.     for(var x = 0 ; x < 10 ; x++)
  509.         _freecols[x] = 0;
  510.  
  511.     for(var x = 0 ; x < 10 ; x++)
  512.     {
  513.         for(var y = 0 ; y < 4 ; y++)
  514.         {
  515.             if(_invspace[y][x] == 1)
  516.             {
  517.                 _freecols[x] = 1;
  518.                 break;
  519.             }
  520.         }
  521.     }
  522.  
  523.     var _numfreecols = 0;
  524.  
  525.     for(var x = 0 ; x < 10 ; x++)
  526.     {
  527.         if(_freecols[x] == 0)
  528.             _numfreecols++;
  529.     }
  530.  
  531.     if(NTConfig_FreeSpace > _numfreecols)
  532.     {
  533.         for(var x = 0 ; x < _itemlist.length ; x++)
  534.         {
  535.             if(_ignorestring.indexOf(_itemlist[x]) != -1)
  536.                 _itemlist.splice(x, 1);
  537.         }
  538.  
  539.         if(_itemlist.length > 0)
  540.             return true;
  541.     }
  542.  
  543.     return false;
  544. }
  545.  
  546. function NTT_CheckStash()
  547. {
  548.     var x, y;
  549.     var _items;
  550.     var _StashHeight = (me.gametype == 0) ? 4 : 8;
  551.     var _stashspace = new Array(_StashHeight);
  552.  
  553.     for(y = 0 ; y < _StashHeight ; y++)
  554.         _stashspace[y] = new Array(6);
  555.  
  556.     for(y = 0 ; y < _StashHeight ; y++)
  557.     {
  558.         for(x = 0 ; x < 6 ; x++)
  559.             _stashspace[y][x] = 0;
  560.     }
  561.  
  562.     _items = NTC_GetItems();
  563.  
  564.     if(!_items)
  565.         return false;
  566.  
  567.     for(var i = 0 ; i < _items.length ; i++)
  568.     {
  569.         if(_items[i].mode == 0 && _items[i].location == 4)
  570.         {
  571.             for(y = 0 ; y < _items[i].sizey ; y++)
  572.             {
  573.                 for(x = 0 ; x < _items[i].sizex ; x++)
  574.                     _stashspace[y+_items[i].y][x+_items[i].x] = 1;
  575.             }
  576.         }
  577.     }
  578.  
  579.     for(y = 0 ; y < _StashHeight ; y++)
  580.     {
  581.         for(x = 0 ; x < 6 ; x++)
  582.         {
  583.             if(_stashspace[y][x] != 1)
  584.                 return true;
  585.         }
  586.     }
  587.  
  588.     return false;
  589. }
  590.  
  591. function NTT_ManageStash(invitem)
  592. {
  593.     var i, x, y;
  594.     var _items;
  595.     var _stashall;
  596.     var StashHeight = (me.gametype == 0) ? 4 : 8;
  597.     var _ignorestring = _NTT_IgnoredItems.join();
  598.     var _ignoreitem;
  599.  
  600.     if(!getUIFlag(0x19))
  601.         return false;
  602.  
  603.     if(arguments.length < 1)
  604.         _stashall = true;
  605.     else
  606.         _stashall = false;
  607.  
  608.     if(!NTC_StashGoldFull() && NTC_MyGoldCarry() > NTConfig_MinGoldToStash)
  609.     {
  610.         var _mygold = NTC_MyGoldCarry();
  611.  
  612.         gold(_mygold, 3);
  613.  
  614.         for(i = 0 ; i < 2 ; i++)
  615.         {
  616.             NTC_Delay(500);
  617.  
  618.             if(_mygold > NTC_MyGoldCarry())
  619.                 break;
  620.         }
  621.     }
  622.  
  623.     var _stashspace = new Array(StashHeight);
  624.  
  625.     for(y = 0 ; y < StashHeight ; y++)
  626.         _stashspace[y] = new Array(6);
  627.  
  628.     for(y = 0 ; y < StashHeight ; y++)
  629.     {
  630.         for(x = 0 ; x < 6 ; x++)
  631.             _stashspace[y][x] = 0;
  632.     }
  633.  
  634.     _items = NTC_GetItems();
  635.  
  636.     if(!_items)
  637.         return false;
  638.  
  639.     for(i = 0 ; i < _items.length ; i++)
  640.     {
  641.         if(_items[i].mode == 0 && _items[i].location == 4)
  642.         {
  643.             for(y = 0 ; y < _items[i].sizey ; y++)
  644.             {
  645.                 for(x = 0 ; x < _items[i].sizex ; x++)
  646.                     _stashspace[y+_items[i].y][x+_items[i].x] = 1;
  647.             }
  648.         }
  649.     }
  650.  
  651.     for(var i = 0 ; i < _items.length ; i++)
  652.     {
  653.         if(_items[i].mode == 0 && _items[i].location == 0 && (_stashall || (_items[i].x == invitem.x && _items[i].y == invitem.y)))
  654.         {
  655.             if(_stashall)
  656.             {
  657.                 _ignoreitem = (NTConfig_Columns[_items[i].y][_items[i].x] == 0);
  658.  
  659.                 if(!_ignoreitem)
  660.                 {
  661.                             if( _ignorestring.indexOf(_items[i].code) != -1 || (!_items[i].getFlag(0x10) && njipCheckGoodItem(_items[i], NJIP_CHECK_SIMPLE) < 0 ))
  662.                         _ignoreitem = true;
  663.                         }
  664.             }
  665.             else
  666.                 _ignoreitem = false;
  667.  
  668.             if(!_ignoreitem)
  669.             {
  670.                 var _itemdone = false;
  671.  
  672.                 for(y = 0 ; y < StashHeight ; y++)
  673.                 {
  674.                     if(_itemdone)
  675.                         break;
  676.  
  677.                     for(x = 0 ; x < 6 ; x++)
  678.                     {
  679.                         if(_itemdone)
  680.                             break;
  681.  
  682.                         if(_stashspace[y][x] == 0)
  683.                         {
  684.                             if((x+_items[i].sizex-1) < 6 && (y+_items[i].sizey-1) < StashHeight)
  685.                             {
  686.                                 var _havespace = true;
  687.  
  688.                                 for(var m = 0 ; m < _items[i].sizey ; m++)
  689.                                 {
  690.                                     for(var n = 0 ; n < _items[i].sizex ; n++)
  691.                                     {
  692.                                         if(_stashspace[y+m][x+n] == 1)
  693.                                         {
  694.                                             _havespace = false;
  695.                                             m = 4;
  696.                                             break;
  697.                                         }
  698.                                     }
  699.                                 }
  700.  
  701.                                 if(_havespace)
  702.                                 {
  703.                                     if(NTC_ItemToCursor(_items[i]))
  704.                                     {
  705.                                         NTC_PingDelay(500);
  706.  
  707.                                         for(n = 0 ; n < 50 ; n++)
  708.                                         {
  709.                                             if((n % 10) == 0)
  710.                                                 clickItem(0, x, y, 4);
  711.  
  712.                                             NTC_Delay(100);
  713.  
  714.                                             if(!me.itemoncursor)
  715.                                                 break;
  716.                                         }
  717.  
  718.                                         if(n < 50)
  719.                                         {
  720.                                             for(m = 0 ; m < _items[i].sizey ; m++)
  721.                                             {
  722.                                                 for(n = 0 ; n < _items[i].sizex ; n++)
  723.                                                     _stashspace[y+m][x+n] = 1;
  724.                                             }
  725.                                         }
  726.  
  727.                                         NTC_PingDelay(500);
  728.                                     }
  729.  
  730.                                     _itemdone = true;
  731.                                 }
  732.                             }
  733.                         }
  734.                     }
  735.                 }
  736.             }
  737.  
  738.             if(!_stashall)
  739.                 return true;
  740.         }
  741.     }
  742.  
  743.     return true;
  744. }
  745.  
  746. // type : id = 0, tp = 1
  747. function NTT_GetScroll(type)
  748. {
  749.     var _items;
  750.     var _scrollcode;
  751.  
  752.     if(arguments.length < 1)
  753.         type = 0;
  754.  
  755.     _items = NTC_GetItems();
  756.  
  757.     if(!_items)
  758.         return false;
  759.  
  760.     if(type)
  761.         _scrollcode = "tsc";
  762.     else
  763.         _scrollcode = "isc";
  764.  
  765.     for(var i = 0 ; i < _items.length ; i++)
  766.     {
  767.         if(_items[i].mode == 0 && _items[i].location == 0 && _items[i].code == _scrollcode)
  768.             return _items[i];
  769.     }
  770.  
  771.     return false;
  772. }
  773.  
  774. // type : id = 0, tp = 1
  775. function NTT_GetTome(type)
  776. {
  777.     var _items;
  778.     var _tomecode;
  779.  
  780.     if(arguments.length < 1)
  781.         type = 0;
  782.  
  783.     _items = NTC_GetItems();
  784.  
  785.     if(!_items)
  786.         return false;
  787.  
  788.     if(type)
  789.         _tomecode = "tbk";
  790.     else
  791.         _tomecode = "ibk";
  792.  
  793.     for(var i = 0 ; i < _items.length ; i++)
  794.     {
  795.         if(_items[i].mode == 0 && _items[i].location == 0 && _items[i].code == _tomecode)
  796.             return _items[i];
  797.     }
  798.  
  799.     return false;
  800. }
  801.  
  802. // type : id = 0, tp = 1
  803. function NTT_FillTome(npc, type)
  804. {
  805.     var _tome;
  806.  
  807.     if(arguments.length < 1)
  808.         return false;
  809.  
  810.     if(arguments.length < 2)
  811.         type = 0;
  812.  
  813.     _tome = NTT_GetTome(type);
  814.  
  815.     if(_tome)
  816.     {
  817.         var _items;
  818.         var _scrollcode;
  819.  
  820.         if(_tome.getStat(70) >= 20)
  821.             return true;
  822. //_items = who.getItems();
  823.         _items = NTC_GetItems(npc);
  824.  
  825.         if(!_items)
  826.             return false;
  827.  
  828.         if(type)
  829.             _scrollcode = "tsc";
  830.         else
  831.             _scrollcode = "isc";
  832.  
  833.         for(var i = 0 ; i < _items.length ; i++)
  834.         {
  835.             if(_items[i].code == _scrollcode)
  836.                 return NTT_ShopItem(_items[i], npc, 3);
  837.         }
  838.     }
  839.  
  840.     return false;
  841. }
  842.  
  843. // type : id = 0, tp = 1
  844. function NTT_BuyScrolls(npc, type, amount)
  845. {
  846.     var _items;
  847.     var _scrollcode;
  848.     var _counter = 0;
  849.  
  850.     if(arguments.length < 1)
  851.         return false;
  852.  
  853.     if(arguments.length < 2)
  854.         type = 0;
  855.  
  856.     if(arguments.length < 3)
  857.         amount = 1;
  858.  
  859.     if(amount == 0)
  860.         return false;
  861.  
  862.     _items = NTC_GetItems(npc);
  863.  
  864.     if(!_items)
  865.         return false;
  866.  
  867.     if(type)
  868.         _scrollcode = "tsc";
  869.     else
  870.         _scrollcode = "isc";
  871.  
  872.     for(var i = 0 ; i < _items.length ; i++)
  873.     {
  874.         if(_items[i].code == _scrollcode)
  875.         {
  876.             for(var n = 0 ; n < amount ; n++)
  877.             {
  878.                 if(NTT_ShopItem(_items[i], npc, 2))
  879.                     _counter++;
  880.             }
  881.  
  882.             break;
  883.         }
  884.     }
  885.  
  886.     return (_counter > 0);
  887. }
  888.  
  889. function NTT_GetKey()
  890. {
  891.     var _items;
  892.  
  893.     _items = NTC_GetItems();
  894.  
  895.     if(!_items)
  896.         return false;
  897.  
  898.     for(var i = 0 ; i < _items.length ; i++)
  899.     {
  900.         if(_items[i].mode == 0 && _items[i].location == 0 && _items[i].code == "key")
  901.             return _items[i];
  902.     }
  903.  
  904.     return false;
  905. }
  906.  
  907. function NTT_FillKey(npc)
  908. {
  909.     var _key;
  910.     var _items;
  911.  
  912.     if(arguments.length < 1)
  913.         return false;
  914.  
  915.     _key = NTT_GetKey();
  916.  
  917.     if(_key)
  918.     {
  919.         if(_key.getStat(70) >= 12)
  920.             return true;
  921.  
  922.         _items = NTC_GetItems(npc);
  923.  
  924.         if(!_items)
  925.             return false;
  926.  
  927.         for(var i = 0 ; i < _items.length ; i++)
  928.         {
  929.             if(_items[i].code == "key")
  930.                 return NTT_ShopItem(_items[i], npc, 3);
  931.         }
  932.     }
  933.     else
  934.     {
  935.         _items = NTC_GetItems(npc);
  936.  
  937.         if(!_items)
  938.             return false;
  939.  
  940.         for(var i = 0 ; i < _items.length ; i++)
  941.         {
  942.             if(_items[i].code == "key")
  943.             {
  944.                 NTT_ShopItem(_items[i], npc, 2);
  945.                 return NTT_ShopItem(_items[i], npc, 3);
  946.             }
  947.         }
  948.     }
  949.  
  950.     return false;
  951. }
  952.  
  953. function NTT_CheckBelt()
  954. {
  955.     var _needpotions = false;
  956.  
  957.     for(var i = 0 ; i < 4 ; i++)
  958.     {
  959.         _NTT_BeltColNeeded[i] = NTT_GetNeededPotionsColInt(NTConfig_BeltColType[i], i);
  960.  
  961.         if(4-_NTT_BeltColNeeded[i] < NTConfig_BeltColMin[i] && NTConfig_BeltColType[i] != "rv")
  962.             _needpotions = true;
  963.     }
  964.  
  965.     return _needpotions;
  966. }
  967.  
  968. function NTT_FillBelt(npc)
  969. {
  970.     if(!npc)
  971.         return false;
  972.  
  973.     if(!getUIFlag(0x08) || !getUIFlag(0x0C))
  974.         return false;
  975.  
  976.     if(!_NTT_BeltSize)
  977.         _NTT_BeltSize = NTC_GetBeltSize();
  978.  
  979.     if(_NTT_BeltColNeeded[3] == _NTT_BeltSize || _NTT_BeltColNeeded[2] == _NTT_BeltSize || _NTT_BeltColNeeded[1] == _NTT_BeltSize || _NTT_BeltColNeeded[0] == _NTT_BeltSize)
  980.         NTT_BuyPotionsSlowInt(npc);
  981.     else
  982.         NTT_BuyPotionsFastInt(npc);
  983.  
  984.     return true;
  985. }
  986.  
  987. function NTT_CheckHeal()
  988. {
  989.     var _mercHP;
  990.  
  991.     if(me.hp < parseInt((me.hpmax*NTConfig_SkipHealLife)/100) || me.mp < parseInt((me.mpmax*NTConfig_SkipHealMana)/100))
  992.         return true;
  993.  
  994.     _mercHP = getMercHP();
  995.  
  996.     if(_mercHP > 0 && _mercHP < NTConfig_SkipHealLife)
  997.         return true;
  998.  
  999.     return false;
  1000. }
  1001.  
  1002. function NTT_CheckSpace(itemX, itemY)
  1003. {
  1004.     var i, j, x, y;
  1005.     var _items;
  1006.  
  1007.     var _invspace = new Array(4);
  1008.     _invspace[0] = new Array(10);
  1009.     _invspace[1] = new Array(10);
  1010.     _invspace[2] = new Array(10);
  1011.     _invspace[3] = new Array(10);
  1012.  
  1013.     for(y = 0 ; y < 4 ; y++)
  1014.     {
  1015.         for(x = 0 ; x < 10 ; x++)
  1016.             _invspace[y][x] = 0;
  1017.     }
  1018.  
  1019.     _items = NTC_GetItems();
  1020.  
  1021.     if(!_items)
  1022.         return false;
  1023.  
  1024.     for(i = 0 ; i < _items.length ; i++)
  1025.     {
  1026.         if(_items[i].mode == 0 && _items[i].location == 0)
  1027.         {
  1028.             for(y = 0 ; y < _items[i].sizey ; y++)
  1029.             {
  1030.                 for(x = 0 ; x < _items[i].sizex ; x++)
  1031.                     _invspace[y+_items[i].y][x+_items[i].x] = 1;
  1032.             }
  1033.         }
  1034.     }
  1035.  
  1036.     for(i = 0 ; i < 5-itemY ; i++)
  1037.     {
  1038.         invloop2:
  1039.  
  1040.         for(j = 0 ; j < 11-itemX ; j++)
  1041.         {
  1042.             for(y = 0 ; y < itemY ; y++)
  1043.             {
  1044.                 for(x = 0 ; x < itemX ; x++)
  1045.                 {
  1046.                     if(_invspace[i+y][j+x])
  1047.                         continue invloop2;
  1048.                 }
  1049.             }
  1050.  
  1051.             return true;
  1052.         }
  1053.     }
  1054.  
  1055.     return false;
  1056. }
  1057.  
  1058. function NTT_CleanPotions()
  1059. {
  1060.     var _items = NTC_GetItems();
  1061.  
  1062.     if(!_items)
  1063.         return false;
  1064.  
  1065.     for(var i = 0 ; i < _items.length ; i++)
  1066.     {
  1067.         if(_items[i].mode == 0 && _items[i].location == 0 && (_items[i].itemType == 76 || _items[i].itemType == 77 || _items[i].itemType == 78))
  1068.         {
  1069.             if(NTConfig_Columns[_items[i].y][_items[i].x] > 0)
  1070.             {
  1071.                 _items[i].interact();
  1072.  
  1073.                 NTC_PingDelay(500);
  1074.             }
  1075.         }
  1076.     }
  1077. return true;
  1078. }
  1079.  
  1080. function NTT_ClearInventory()
  1081. {
  1082.  debugPrint("ntt clear inventory");
  1083.     var _retval = true;
  1084.     var _ignorestring = _NTT_IgnoredItems.join();
  1085.     var _items;
  1086.  
  1087.     _items = NTC_GetItems();
  1088.  
  1089.     if(!_items)
  1090.         return false;
  1091.  
  1092.     for(var i = 0 ; i < _items.length ; i++)
  1093.     {
  1094.         if(_items[i].mode == 0 && _items[i].location == 0)
  1095.         {
  1096.             if(NTConfig_Columns[_items[i].y][_items[i].x] > 0)
  1097.             {
  1098.                 if(_ignorestring.indexOf(_items[i].code) != -1 || !_items[i].getFlag(0x10))
  1099.                     continue;
  1100.  
  1101.                 if(njipCheckGoodItem(_items[i], NJIP_CHECK_SIMPLE) == 0)
  1102.                 {
  1103.                     if(NTT_DropItem(_items[i]))
  1104.                         NTC_PingDelay(250);
  1105.                     else
  1106.                         _retval = false;
  1107.                 }
  1108.             }
  1109.         }
  1110.     }
  1111.  
  1112.     return _retval;
  1113. }
  1114.  
  1115. function NTT_DropItem(item)
  1116. {
  1117.  debugPrint("ntt dropItem");
  1118.     if(!item)
  1119.         return false;
  1120.  
  1121.     if(NTC_ItemToCursor(item))
  1122.         return NTC_ClearCursor();
  1123.  
  1124.     return false;
  1125. }
  1126.  
  1127. function NTT_ClearBelt()
  1128. {
  1129.     var i;
  1130.     var _result, _needdrop;
  1131.     var _items;
  1132.  
  1133.     do
  1134.     {
  1135.         _items = NTC_GetItems();
  1136.  
  1137.         if(!_items)
  1138.             return false;
  1139.  
  1140.         _result = true;
  1141.  
  1142.         for(i = 0 ; i < _items.length ; i++)
  1143.         {
  1144.             if(_items[i].mode == 2 && _items[i].x < 4)
  1145.             {
  1146.                 _needdrop = false;
  1147.  
  1148.                 switch(_items[i].itemType)
  1149.                 {
  1150.                     case 76:
  1151.                         if( NTConfig_BeltColType[_items[i].x] != "hp" && NTConfig_BeltColMin[_items[i].x] != 0 )
  1152.                             _needdrop = true;
  1153.                         break;
  1154.  
  1155.                     case 77:
  1156.                         if( NTConfig_BeltColType[_items[i].x] != "mp" && NTConfig_BeltColMin[_items[i].x] != 0 )
  1157.                             _needdrop = true;
  1158.                         break;
  1159.  
  1160.                     case 78:
  1161.                         if( NTConfig_BeltColType[_items[i].x] != "rv" && NTConfig_BeltColMin[_items[i].x] != 0 )
  1162.                             _needdrop = true;
  1163.                         break;
  1164.  
  1165.                     default:
  1166.                         _needdrop = true;
  1167.                         break;
  1168.                 }
  1169.  
  1170.                 if(_needdrop)
  1171.                 {
  1172.                     if(NTT_DropItem(_items[i]))
  1173.                     {
  1174.                         NTC_Delay(200);
  1175.                     }
  1176.  
  1177.                     _result = false;
  1178.                 }
  1179.             }
  1180.         }
  1181.     } while(!_result);
  1182.  
  1183.     return _result;
  1184. }
  1185.  
  1186. // mode : 1 = sell, 2 = buy, 3 = shift buy
  1187. function NTT_ShopItem(item, npc, mode)
  1188. {
  1189.  debugPrint("ntt ShopItem:"+item.name+" NPC:"+npc.name+" mode:"+mode);
  1190.     var _mygold = NTC_MyGold();
  1191.  
  1192.     if(mode > 1)
  1193.     {
  1194.         if(version() == "1.1.1"){
  1195.             if(item.getPrice(npc, 0) > _mygold)
  1196.                 return false;
  1197.         }else{
  1198.             if(item.getItemCost(0) > _mygold)
  1199.                 return false;
  1200.         }
  1201.     }
  1202.     if(mode > 1)
  1203.     {
  1204.         var _havespace = false;
  1205.  
  1206.         if(item.code == "isc" || item.code == "tsc")
  1207.         {
  1208.             var _book = (item.code == "isc") ? NTT_GetTome(0) : NTT_GetTome(1);
  1209.  
  1210.             if(_book && _book.getStat(70) < 20)
  1211.                 _havespace = true;
  1212.         }
  1213.  
  1214.         if(!_havespace)
  1215.         {
  1216.             if(NTT_CheckSpace(item.sizex, item.sizey))
  1217.                 _havespace = true;
  1218.         }
  1219.  
  1220.         if(_havespace)
  1221.         {
  1222.             debugPrintBeltGID();
  1223.  
  1224.             for(var i = 0 ; i < 60 ; i++)
  1225.             {
  1226.                 if(i == 0)
  1227.                 {
  1228.                     //sendCopyData(null, "OOG", 0,"ntt ShopItem:"+item.name+" NPC:"+npc.name+" mode:"+mode+"i: "+i+"loc: "+item.location);
  1229.                     debugPrint("ntt ShopItem:"+item.name+" NPC:"+npc.name+" mode:"+mode+"item toSource: "+item.toSource());
  1230.                     NTC_Delay(600);
  1231.                     item.shop(mode > 2 ? 6 : 2);
  1232.                     debugPrint("ntt ShopItem:returned");
  1233.  
  1234.                 }
  1235.  
  1236.                 debugPrintBeltGID();
  1237.  
  1238.                 NTC_Delay(100);
  1239.  
  1240.                 if(_mygold > NTC_MyGold())
  1241.                 {
  1242.                     debugPrint("ntt ShopItem:post Buying Delay");
  1243.                     NTC_PingDelay(100);
  1244.  
  1245.                     return true;
  1246.                 }
  1247.             }
  1248.         }
  1249.     }
  1250.     else
  1251.     {
  1252.         if(NTC_ItemToCursor(item))
  1253.         {
  1254.             for(var i = 0 ; i < 50 ; i++)
  1255.             {
  1256.                 if((i % 10) == 0)
  1257.                     item.shop(1);
  1258.  
  1259.                 NTC_Delay(100);
  1260.  
  1261.                 if(!me.itemoncursor)
  1262.                 {
  1263.                     NTC_PingDelay(750);
  1264.                     return true;
  1265.                 }
  1266.             }
  1267.         }
  1268.         }
  1269.  
  1270.     return false;
  1271. }
  1272.  
  1273. function NTT_IdItem(scroll, uniditem)
  1274. {
  1275.     var i, _timer;
  1276.  
  1277.     if(arguments.length < 1 || !scroll)
  1278.         return false;
  1279.  
  1280.     if(arguments.length < 2 || !uniditem)
  1281.         return false;
  1282.  
  1283.     if(uniditem.getFlag(0x10))
  1284.         return true;
  1285.  
  1286.     for(i = 0 ; i < 30 ; i++)
  1287.     {
  1288.         if((i % 10) == 0)
  1289.             clickItem(1, scroll);
  1290.  
  1291.         NTC_Delay(100);
  1292.  
  1293.         if(getCursorType() == 6)
  1294.             break;
  1295.     }
  1296.  
  1297.     if(getCursorType() != 6)
  1298.         return false;
  1299.  
  1300.     NTC_PingDelay(250);
  1301.  
  1302.     for(i = 0 ; i < 60 ; i++)
  1303.     {
  1304.         if((i % 20) == 0)
  1305.             clickItem(0, uniditem);
  1306.  
  1307.         NTC_Delay(100);
  1308.  
  1309.         if(uniditem.getFlag(0x10))
  1310.         {
  1311.             NTC_PingDelay(500);
  1312.             return true;
  1313.         }
  1314.     }
  1315.  
  1316.     return false;
  1317. }
  1318.  
  1319. function NTT_CheckUnids()
  1320. {
  1321.     var _unidcount = 0;
  1322.     var _items = NTC_GetItems();
  1323.  
  1324.     if(!_items)
  1325.         return _unidcount;
  1326.  
  1327.     for(var i = 0 ; i < _items.length ; i++)
  1328.     {
  1329.         if(_items[i].mode == 0 && _items[i].location == 0 && !_items[i].getFlag(0x10))
  1330.             _unidcount++;
  1331.     }
  1332.  
  1333.     return _unidcount;
  1334. }
  1335.  
  1336. function NTT_GetUnidItems()
  1337. {
  1338.     var _uniditems = new Array();
  1339.     var _items = NTC_GetItems();
  1340.  
  1341.     if(!_items)
  1342.         return _uniditems;
  1343.  
  1344.     for(var i = 0 ; i < _items.length ; i++)
  1345.     {
  1346.         if(_items[i].mode == 0 && _items[i].location == 0 && !_items[i].getFlag(0x10))
  1347.             _uniditems.push(copyUnit(_items[i]));
  1348.     }
  1349.  
  1350.     return _uniditems;
  1351. }
  1352.  
  1353. function NTT_GambleIt(npc)
  1354. {
  1355.     var _gambleitem, _newitem;
  1356.  
  1357.     if(!npc)
  1358.         return false;
  1359.  
  1360.     if(!getUIFlag(0x08) || !getUIFlag(0x0C))
  1361.         return false;
  1362.  
  1363.     _gambleitem = NTC_GetItems(npc);
  1364.  
  1365.     if(!_gambleitem)
  1366.         return false;
  1367.  
  1368.     for(var i = 0 ; i < _gambleitem.length ; i++)
  1369.     {
  1370.         if(NTC_MyGold() < NTConfig_GambleStopGold)
  1371.             return false;
  1372.  
  1373.         if(NTT_IsItemInGambleArrayInt(_gambleitem[i].code))
  1374.         {
  1375.             if(NTT_CheckSpace(_gambleitem[i].sizex, _gambleitem[i].sizey))
  1376.             {
  1377.                 NTT_GetOldItemsInt();
  1378.  
  1379.                 if(NTT_ShopItem(_gambleitem[i], npc, 2))
  1380.                     _newitem = NTT_GetGambledItemInt();
  1381.                 else
  1382.                     return false;
  1383.  
  1384.                 if(_newitem)
  1385.                 {
  1386.                     while(!_newitem.getFlag(0x10))
  1387.                         NTC_Delay(100);
  1388.  
  1389.                     NTC_PingDelay(250);
  1390.                     var _isEthereal = (_newitem.getFlag(0x400000)) ? "1" : "0";
  1391.                     if(njipCheckGoodItem(_newitem, NJIP_CHECK_SIMPLE) > 0){
  1392.                         writeLog(_newitem, me, _isEthereal, 0);
  1393.                         NTC_SendLogToOOG("Kept [" + NTC_ItemQualityToNameList[_newitem.quality] + "] " + _newitem.name);
  1394.                     }else{
  1395.                         writeLog(_newitem, me, _isEthereal, 1);
  1396.                         NTT_ShopItem(_newitem, npc, 1);
  1397.                     }
  1398.                 }
  1399.             }
  1400.         }
  1401.     }
  1402.  
  1403.     return true;
  1404. }
  1405.  
  1406. // Internal function
  1407. function NTT_IsItemInGambleArrayInt(itemcode)
  1408. {
  1409.     for(var i = 0 ; i < NTConfig_GambleItem.length ; i++)
  1410.     {
  1411.         if(itemcode == NTConfig_GambleItem[i])
  1412.             return true;
  1413.     }
  1414.  
  1415.     return false;
  1416. }
  1417.  
  1418. function NTT_GetPotionAtNPCInt(type, npc)
  1419. {
  1420.     var _items;
  1421.  
  1422.     if(!type)
  1423.         return false;
  1424.  
  1425.     if(type == "hp" || type == "mp")
  1426.     {
  1427.         _items = NTC_GetItems(npc);
  1428.  
  1429.         if(_items)
  1430.         {
  1431.             var n;
  1432.  
  1433.             for(var i = _items.length -1 ; i > 0   ; i--)
  1434.             {
  1435.                 for(n = 5 ; n > 0 ; n--)
  1436.                 {
  1437.                     if(_items[i].code == (type+n))
  1438.                         return _items[i];
  1439.                 }
  1440.             }
  1441.         }
  1442.     }
  1443.     else
  1444.     {
  1445.         if(type == "rv")
  1446.             return false;
  1447.  
  1448.         _items = NTC_GetItems(npc);
  1449.  
  1450.         if(_items)
  1451.         {
  1452.             for(var i = 0 ; i < _items.length ; i++)
  1453.             {
  1454.                 if(_items[i].code == type)
  1455.                     return _items[i];
  1456.             }
  1457.         }
  1458.     }
  1459.  
  1460.     return false;
  1461. }
  1462.  
  1463. function NTT_BuyPotionsFastInt(npc)
  1464. {
  1465.     var i, n;
  1466.     var _insert, _potion;
  1467.     var _typearray = new Array();
  1468.  
  1469.     for(i = 0 ; i < 4 ; i++)
  1470.     {
  1471.         if(_NTT_BeltColNeeded[i] > 0)
  1472.         {
  1473.             if(_typearray.length == 0)
  1474.                 _typearray.push(NTConfig_BeltColType[i]);
  1475.             else
  1476.             {
  1477.                 _insert = true;
  1478.  
  1479.                 for(n = 0 ; n < _typearray.length ; n++)
  1480.                 {
  1481.                     if(_typearray[n] == NTConfig_BeltColType[i])
  1482.                         _insert = false;
  1483.                 }
  1484.  
  1485.                 if(_insert)
  1486.                     _typearray.push(NTConfig_BeltColType[i]);
  1487.             }
  1488.         }
  1489.     }
  1490.  
  1491.     for(i = 0 ; i < _typearray.length ; i++)
  1492.     {
  1493.         if(_typearray[i] == "rv")
  1494.             continue;
  1495.  
  1496.         _potion = NTT_GetPotionAtNPCInt(_typearray[i], npc);
  1497.  
  1498.         if(_potion)
  1499.         {
  1500.             if(NTT_ShopItem(_potion, npc, 3))
  1501.                 continue;
  1502.             else
  1503.                 return false;
  1504.         }
  1505.         else
  1506.             return false;
  1507.     }
  1508.  
  1509.     return true;
  1510. }
  1511.  
  1512. function NTT_BuyPotionsColInt(npc, col)
  1513. {
  1514.     var _numpotions;
  1515.     var _potion;
  1516.  
  1517.     if(col < 0 || col > 3)
  1518.         return false;
  1519.  
  1520.     if(NTConfig_BeltColType[col] == "rv")
  1521.         return false;
  1522.  
  1523.     _numpotions = _NTT_BeltColNeeded[col];
  1524.  
  1525.     if(_numpotions == 0)
  1526.         return false;
  1527.  
  1528.     if(_numpotions > _NTT_BeltSize)
  1529.         _numpotions = _NTT_BeltSize;
  1530.  
  1531.     for(var _buyloop = 0 ; _buyloop < _numpotions ; _buyloop++)
  1532.     {
  1533.         _potion = NTT_GetPotionAtNPCInt(NTConfig_BeltColType[col], npc);
  1534.  
  1535.         if(_potion)
  1536.             NTT_ShopItem(_potion, npc, 2);
  1537.         else
  1538.             return false;
  1539.     }
  1540.  
  1541.     return true;
  1542. }
  1543.  
  1544. function NTT_BuyPotionsSlowInt(npc)
  1545. {
  1546.     var _currentcol;
  1547.  
  1548.     for(_currentcol = 0 ; _currentcol < 4 ; _currentcol++)
  1549.     {
  1550.         if(_NTT_BeltColNeeded[_currentcol] == _NTT_BeltSize)
  1551.         {
  1552.             NTT_BuyPotionsColInt(npc, _currentcol);
  1553.             _NTT_BeltColNeeded[_currentcol] = 0;
  1554.         }
  1555.     }
  1556.  
  1557.     for(_currentcol = 0 ; _currentcol < 4 ; _currentcol++)
  1558.         NTT_BuyPotionsColInt(npc, _currentcol);
  1559.  
  1560.     return true;
  1561. }
  1562.  
  1563. function NTT_GetNeededPotionsColInt(type, column)
  1564. {
  1565.     var _restartloop = true;
  1566.     var _amountneeded = 0;
  1567.     var _items;
  1568.  
  1569.     if(!type || column > 3)
  1570.         return false;
  1571.  
  1572.     if(!_NTT_BeltSize)
  1573.         _NTT_BeltSize = NTC_GetBeltSize();
  1574.  
  1575.     potionloop:
  1576.     do
  1577.     {
  1578.         _amountneeded = _NTT_BeltSize;
  1579.  
  1580.         _items = NTC_GetItems();
  1581.  
  1582.         if(!_items)
  1583.             continue potionloop;
  1584.  
  1585.         for(var i = 0 ; i < _items.length ; i++)
  1586.         {
  1587.             if(_items[i].mode == 2)
  1588.             {
  1589.                 if(NTT_PotInRightColInt(_items[i].x, column, _NTT_BeltSize))
  1590.                 {
  1591.                     var _potcode = _items[i].code;
  1592.  
  1593.                     if(_potcode.indexOf(type) != -1)
  1594.                         _amountneeded--;
  1595.                     else
  1596.                     {
  1597.                         if(_potcode.indexOf("rv") != -1)
  1598.                         {
  1599.                             if(_items[i].x < 4)
  1600.                                 return 0;
  1601.                             else
  1602.                                 _amountneeded--;
  1603.                         }
  1604.                         else
  1605.                         {
  1606.                             clickItem(1, _items[i]);
  1607.  
  1608.                             NTC_PingDelay(500);
  1609.                             continue potionloop;
  1610.                         }
  1611.                     }
  1612.                 }
  1613.             }
  1614.         }
  1615.  
  1616.         _restartloop = false;
  1617.     } while(_restartloop);
  1618.  
  1619.     return _amountneeded;
  1620. }
  1621.  
  1622. function NTT_PotInRightColInt(potx, column, beltsize)
  1623. {
  1624.     for(var i = 0 ; i < beltsize ; i++)
  1625.     {
  1626.         if(potx-i*4 == column)
  1627.             return true;
  1628.     }
  1629.  
  1630.     return false;
  1631. }
  1632.  
  1633. function NTT_GetGambledItemInt()
  1634. {
  1635.     var n;
  1636.     var _items;
  1637.     var _founditem;
  1638.  
  1639.     _items = NTC_GetItems();
  1640.  
  1641.     if(!_items)
  1642.         return false;
  1643.  
  1644.     for(var i = 0 ; i < _items.length ; i++)
  1645.     {
  1646.         if(_items[i].mode == 0 && _items[i].location == 0)
  1647.         {
  1648.             _founditem = true;
  1649.  
  1650.             for(n = 0 ; n < _NTT_OldItems.length ; n++)
  1651.             {
  1652.                 if(_items[i].gid == _NTT_OldItems[n])
  1653.                 {
  1654.                     _founditem = false;
  1655.                     break;
  1656.                 }
  1657.             }
  1658.  
  1659.             if(_founditem)
  1660.                 return _items[i];
  1661.         }
  1662.     }
  1663.  
  1664.     return false;
  1665. }
  1666.  
  1667. function NTT_GetOldItemsInt()
  1668. {
  1669.     var _items;
  1670.  
  1671.     _NTT_OldItems = new Array();
  1672.  
  1673.     _items = NTC_GetItems();
  1674.  
  1675.     if(!_items)
  1676.         return false;
  1677.  
  1678.     for(var i = 0 ; i < _items.length ; i++)
  1679.     {
  1680.         if(_items[i].mode == 0 && _items[i].location == 0)
  1681.             _NTT_OldItems.push(_items[i].gid);
  1682.     }
  1683. return true;
  1684. }
  1685.  
  1686.  
  1687. // cubeing stuff
  1688. function initRecipeList(){
  1689. var count =0;
  1690. var temp =[];
  1691.     for (var r =0; r< NT_RecipieBox.length;r++){
  1692.         var newrep = new Recipie();
  1693.             for(var i = 0; i < NT_RecipieBox[r].length; i++){
  1694.                 if(typeof(NT_RecipieBox[r][i]) == 'string'){
  1695.                     newrep.ingredients.push(NT_RecipieBox[r][i]);
  1696.                     newrep.ingredients[newrep.ingredients.length-1].key=false;
  1697.                     //newrep.ingredients[count].nip= ;
  1698.                     temp=njipParseLine(NT_RecipieBox[r][i])
  1699.  
  1700.                     if (temp.length != 2){
  1701.                         print ("problem parsing "+NT_RecipieBox[r][i])
  1702.                         delay(500)
  1703.                     }else
  1704.                         newrep.list.push(temp[1]);
  1705.                     count++
  1706.                 }else{
  1707.                     newrep.ingredients[newrep.ingredients.length-1].key = NT_RecipieBox[r][i];
  1708.                 }
  1709.                 count=0;
  1710.  
  1711.  
  1712.             }
  1713.             recipieList.push(newrep)
  1714.     }
  1715.  
  1716. }
  1717.  
  1718. function Recipie() {
  1719.  
  1720.  
  1721. this.list = [];
  1722. this.matchlist=[];
  1723. this.ingredients=new Array();
  1724. this.preMakeFunc = false;
  1725.  
  1726.  
  1727.  
  1728. this.foundGids =[];
  1729. }
  1730.  
  1731. Recipie.prototype.doCube = function(){
  1732. //print("do Cube"+this.toSource())
  1733. if(typeof(this.preMakeFunc) == 'function')
  1734.     this.preMakeFunc();
  1735.  openStash();
  1736.  if(!ClearCube()){
  1737.     print("failed to clear cube");
  1738.  return false;
  1739. }
  1740. var cube=false;
  1741. var meItems =me.getItems();
  1742.     for (var j = 0 ; j < meItems.length; j++){
  1743.         if (meItems[j].code =="box"){
  1744.             cube=copyUnit(meItems[j]);
  1745.         }
  1746.     }
  1747. if(!cube)
  1748.     return false;
  1749.     for (var k = 0 ; k < this.matchlist.length; k++){
  1750.         print("Moving "+this.matchlist[k].name+" to Cube")
  1751.         MoveItemToCube(this.matchlist[k],cube)
  1752.  
  1753.     }
  1754.     print("Transmuting")
  1755.     NTT_DoInteract(cube);
  1756. transmute();
  1757. delay(500)
  1758. me.cancel()
  1759. print("Clearing Cube")
  1760.  openStash();
  1761. ClearCube();
  1762. return true;
  1763.  
  1764.  
  1765. }
  1766. function MoveItemToCube(item,cube){
  1767. if(!cube){
  1768.     var meItems =me.getItems();
  1769.     for (var j = 0 ; j > meItems.length; j++){
  1770.         if (meItems[j].code =="box")
  1771.             cube=copyUnit(meItems[j]);
  1772.     }
  1773. }
  1774. var cloc= cube.location;
  1775. var cx=cube.x;
  1776. var cy=cube.y;
  1777. if(!cube)
  1778.     return false;
  1779. if(!item)
  1780.     return false;
  1781.  
  1782. NTC_ItemToCursor(item)
  1783.  
  1784.     for(var i = 0 ; i < 30 ; i++){
  1785.         if((i % 10) == 0){
  1786.             clickItem(0,cx,cy,cloc);
  1787.             NTC_PingDelay(50);
  1788.         }
  1789.         if(!me.itemoncursor)
  1790.         {
  1791.             NTC_PingDelay(200);
  1792.             if(!me.itemoncursor){
  1793.                 NTSI_PickItems()
  1794.                 return true;
  1795.             }
  1796.         }
  1797.     }
  1798.     if(me.itemoncursor){
  1799.         if(me.itemoncursor.code=="box"){ // crap we picked up box
  1800.             if (cloc==0)
  1801.                 MoveItemToInv(me.itemoncursor);
  1802.             else
  1803.                 MoveItemToStash(me.itemoncursor);
  1804.         }
  1805.     }
  1806. return true;
  1807. }
  1808. function CheckRecipieList(){
  1809.  
  1810. var utilityCubeList =[];
  1811. var meItems = me.getItems();
  1812. var tempvar = -1;
  1813. for (var meI = 0 ; meI < meItems.length; meI++){
  1814.     for (var r = 0; r<  recipieList.length; r++){
  1815.  
  1816.     //print(recipieList[r].list.toSource())
  1817.         tempvar=njipCheckGoodItemlist(meItems[meI],false,recipieList[r].list)
  1818.  
  1819.         if ( tempvar > -1 ){ // matchlist[j]?
  1820.             recipieList[r].matchlist[tempvar] =copyUnit( meItems[meI]);
  1821.  
  1822.  
  1823.             tempvar =-1;
  1824.         }
  1825.     } // next r
  1826. } // next meI
  1827.  
  1828. var matches = 0;
  1829.     for (var r = 0; r<  recipieList.length; r++){
  1830.         tempvar = false;
  1831.         matches=0;
  1832.         for (var i=0; i < recipieList[r].ingredients.length; i++){
  1833.  
  1834.             if(recipieList[r].matchlist[i]){
  1835.                 matches ++;
  1836.                 if (recipieList[r].ingredients[i].key)  //key ingredient
  1837.                     tempvar = true;
  1838.             }else{
  1839.                 if (recipieList[r].ingredients[i].key)  //second key missing dont utilize
  1840.                     tempvar = false;
  1841.             }
  1842.  
  1843.             if(tempvar && !recipieList[r].matchlist[i]){
  1844.                 utilityCubeList.push(recipieList[r].ingredients[i])
  1845.             }
  1846.         }// next i
  1847.         if (matches==recipieList[r].ingredients.length)
  1848.             recipieList[r].doCube();
  1849.     } // next r
  1850. var keyFound=false;
  1851.     // recipie has no key ingredients we wanna utility those too
  1852.     for (var r = 0; r<  recipieList.length; r++){
  1853.         keyFound=false;
  1854.         for (var i=0; i < recipieList[r].ingredients.length; i++){
  1855.             if(recipieList[r].ingredients[i].key)
  1856.                 keyFound=true;
  1857.         }
  1858.         if(!keyFound){
  1859.             for (var i=0; i < recipieList[r].ingredients.length; i++){
  1860.                 var templist=njipParseLine(recipieList[r].ingredients [i]) //build stat list for good check
  1861.                 if ( templist[0]==0 && templist[1][0] )
  1862.                     utilityList.push( templist[1]); // equivlaent to list
  1863.             }
  1864.         }
  1865.     }
  1866.  
  1867.     // build utility cube list
  1868.     for (var j = 0; j < utilityCubeList.length; j ++){
  1869.         templist=njipParseLine(utilityCubeList [j]) //build stat list for good check
  1870.         if ( templist[0]==0 && templist[1][0] )
  1871.             utilityList.push( templist[1]); // equivlaent to list
  1872.     }
  1873.  
  1874. }
  1875.  
  1876. function njipCheckGoodItemlist(item_, mode_,list) {
  1877.     var retval = 0;
  1878.  
  1879.     var rv = false;
  1880.     var cv =-1;
  1881.     var matched = -1;
  1882.     if(item_) {
  1883.     var stats = item_.getStat(-1);
  1884.  
  1885.         for(var count_9=0;count_9<list.length;count_9++) { // loop all item entries
  1886.             rv = true;
  1887.             for(var count_a=0;count_a<list[count_9].length;count_a++) { // loop all 'and' clauses
  1888.                 switch(list[count_9][count_a][0]) {
  1889.                     case -1:
  1890.                         cv = item_.itemType;
  1891.                         break;
  1892.                     case -2:
  1893.                         cv = item_.classid;
  1894.                         break;
  1895.                     case -3:
  1896.                         cv = item_.itemclass;
  1897.                         break;
  1898.                     case -4:
  1899.                         cv = item_.quality;
  1900.                         break;
  1901.                     case -5:
  1902.                         if(item_.getFlag(list[count_9][count_a][1]))
  1903.                             cv = list[count_9][count_a][1];
  1904.                         else
  1905.                             cv = 0;
  1906.                         break;
  1907.                     case -6:
  1908.                         cv = item_.lvlreq;
  1909.                         break;
  1910.                     case -7:
  1911.                         cv = item_.ilvl;
  1912.                         break;
  1913.                     case -8:
  1914.                         cv = item_.getItemCost(1);
  1915.                         break;
  1916.                     default:
  1917.                         // using a stat, so if unidentified, 'maybe' pick up this item, unless another matches
  1918.                         if(!item_.getFlag( ITEM_FLAG_UNIDENTIFIED )) {
  1919.                             retval = -1;
  1920.                             matched = count_9;
  1921.                         }
  1922.  
  1923.                         if(typeof list[count_9][count_a][0] == "object") {
  1924.                             var statId = parseInt(list[count_9][count_a][0][0],10);
  1925.                             var subStatId = parseInt(list[count_9][count_a][0][1],10);
  1926.                         } else {
  1927.                             var statId = parseInt(list[count_9][count_a][0],10);
  1928.                             var subStatId = -1;
  1929.                         }
  1930.  
  1931.                         if(subStatId < 0)
  1932.                             cv = item_.getStat(statId);
  1933.                         else
  1934.                         {
  1935.                             for(var n = 0 ; n < stats.length ; n++)
  1936.                             {
  1937.                                 if(stats[n][0] == statId && stats[n][1] == subStatId)
  1938.                                 {
  1939.                                     cv = stats[n][2];
  1940.                                     break;
  1941.                                 }
  1942.                             }
  1943.  
  1944.                             if(n >= stats.length)
  1945.                                 cv = item_.getStat(statId, subStatId);
  1946.                         }
  1947.  
  1948.                         break;
  1949.                 }
  1950.                 if(!njipCheckClause(list[count_9][count_a][1], list[count_9][count_a][2], cv) ) {
  1951.                     rv = false;
  1952.                     break;
  1953.                 }
  1954.  
  1955.             }
  1956.             if(rv==1 && !list[count_9].found) {
  1957.                 matched = count_9;
  1958.                 retval = 1;
  1959.                 break;
  1960.             }
  1961.         }
  1962.     }
  1963.     if( mode_ == NJIP_CHECK_REPORT ) {
  1964.         var obj = new Array();
  1965.         obj.result = retval;
  1966.         obj.lineno = (matched == -1 ? 0 : list[matched].lineno);
  1967.         obj.file = (matched == -1 ? "" : njipFiles[list[matched].file]);
  1968.         retval = obj;
  1969.     }
  1970.     if (retval) {
  1971.         list[count_9].found=true;
  1972.         return count_9;
  1973.         }
  1974.     else
  1975.         return -1;
  1976. }
  1977. function ClearCube(){
  1978. print("clearin cube")
  1979. var meItems =me.getItems();
  1980.     for (var j = 0 ; j < meItems.length; j++){
  1981.         if (meItems[j].location == 3){
  1982.  
  1983.             if(!MoveItemToStash(meItems[j]) && !MoveItemToInv(meItems[j])) {
  1984.                 print("Cant empty cube ClearCube Failed")
  1985.                 return false;
  1986.             }
  1987.         }
  1988.  
  1989.     }
  1990.  
  1991. return true;
  1992. }
  1993. function MoveItemToStash(it){
  1994. var found=true
  1995. var my=me.gametype==1 ? 8 : 4
  1996. var buff=buildBuffer(4);
  1997.     for(var x=0; x<6; x++) { // stash spaces
  1998.         for(var y=0; y<my; y++) {
  1999.             found=true;
  2000.             for(var j=x; j < x + it.sizex; j++) { // item spots
  2001.                 for(var k=y; k < y + it.sizey; k++) {
  2002.                     if(j > 6 || k > my || buff[j][k] ==1)
  2003.                         found=false;
  2004.                 }//next k
  2005.             }//next j
  2006.             if (found){ // move item to x/y
  2007.                 if(NTC_ItemToCursor(it)){
  2008.                     for(var n = 0 ; n < 50 ; n++){
  2009.                         if((n % 10) == 0)
  2010.                             clickItem(0, x, y, 4);
  2011.                         NTC_Delay(100);
  2012.                         if(!me.itemoncursor){
  2013.                             NTSI_PickItems()
  2014.                             return true;
  2015.                         }
  2016.                     }
  2017.                 }
  2018.             }
  2019.         }//next y
  2020.     }//next x
  2021. return false;
  2022. }
  2023. function MoveItemToInv(it){
  2024. var found=true
  2025.  
  2026. var buff=buildBuffer(0);
  2027.     for(var x=0; x<10; x++) { // stash spaces
  2028.         for(var y=0; y<4; y++) {
  2029.             found=true;
  2030.             for(var j=ix; j < x + it.sizex; j++) { // item spots
  2031.                 for(var k=y; k < y + it.sizey; k++) {
  2032.                     if(j >= 10 || 4 >= k || buff[j][k] ==1 )
  2033.                         found=false;
  2034.                 }//next k
  2035.             }//next j
  2036.             if (found){ // move item to x/y
  2037.                 if(NTC_ItemToCursor(it)){
  2038.                     NTC_Delay(500);
  2039.                     for(var n = 0 ; n < 50 ; n++){
  2040.                         if((n % 10) == 0)
  2041.                             clickItem(0, x, y, 0);
  2042.                         NTC_Delay(100);
  2043.                         if(!me.itemoncursor){
  2044.                             NTSI_PickItems()
  2045.                             return true;
  2046.                         }
  2047.                     }
  2048.                 }
  2049.             }
  2050.         }//next y
  2051.     }//next x
  2052. return false;
  2053. }
  2054. function openStash(){
  2055.     NTTM_TownMove("stash");
  2056.  
  2057.    for(var i = 0 ; i < 10 ; i++)
  2058.    {
  2059.     var  _stash = NTC_GetUnit(NTC_UNIT_OBJECT, NTC_UNIT_STASH);
  2060.  
  2061.       if(_stash)
  2062.          break;
  2063.    }
  2064.  
  2065.    if(_stash){
  2066.       NTT_ClearInventory();
  2067.       NTT_DoInteract(_stash);
  2068.     }
  2069. }
  2070. function buildBuffer(loc){
  2071.  
  2072. var mx,my;
  2073. switch(loc) {
  2074.     case 0: //inventory
  2075.         mx=10; my=4; break;
  2076.     case 2: // cube
  2077.         mx=3; my=4; break;
  2078.     case 4: // Stash
  2079.         mx=6; my=me.gametype==1 ? 8 : 4; break;
  2080. }
  2081.  
  2082.  
  2083.  
  2084.     var _stashspace = new KArray2D(mx,my);
  2085.  
  2086.  
  2087.  
  2088.     for(var y = 0 ; y < my ; y++)
  2089.     {
  2090.         for(var x = 0 ; x < 6 ; x++)
  2091.             _stashspace[x][y] = 0;
  2092.     }
  2093.  
  2094.     var _items = NTC_GetItems();
  2095.  
  2096.     if(!_items)
  2097.         return false;
  2098.  
  2099.     for(var i = 0 ; i < _items.length ; i++)
  2100.     {
  2101.         if(_items[i].mode == 0 && _items[i].location == loc)
  2102.         {
  2103.             for(y = 0 ; y < _items[i].sizey ; y++)
  2104.             {
  2105.                 for(x = 0 ; x < _items[i].sizex ; x++)
  2106.                     _stashspace[x+_items[i].x][y+_items[i].y] = 1;
  2107.             }
  2108.         }
  2109.     }
  2110.     return _stashspace
  2111. }
  2112.  
  2113. function KArray2D(NumOfRows,NumOfCols){
  2114. var k=new Array(NumOfRows);  // could be just[]
  2115. for (var i = 0; i < k . length; ++ i)
  2116. k [i] = new Array (NumOfCols); // could be just[] vaulue dosent matter after its array
  2117.  
  2118. return k;
  2119. }
  2120.  
  2121. function NTSB_QuickShop(npc)
  2122. {
  2123.     print("ÿc2NTSB ÿc1:: ÿc3Doing a quick shop.");
  2124.     var _items = NTC_GetItems(npc);
  2125.     if(_items)
  2126.     {
  2127.         var _count;
  2128.         print("ÿc2NTSB ÿc1:: ÿc3Got items!");
  2129.         for(_count = 0;_count < _items.length;_count++)
  2130.         {
  2131.             if(njipCheckGoodItem(_items[_count], NJIP_CHECK_SIMPLE) != 0)
  2132.             {
  2133.                 if(NTT_CheckSpace(_items[_count].sizex,_items[_count].sizey))
  2134.                 {
  2135.                     print("ÿc2NTSB ÿc1::ÿc3 " + _items[_count].name + "ÿc2 -> item was good!");
  2136.                     NTC_Delay(500);
  2137.                     if(!NTT_ShopItem(_items[_count],npc,3))
  2138.                     {
  2139.                         print("ÿc2NTSB ÿc1::ÿc1 Error while shopping!");
  2140.                         return false;
  2141.                     } else {
  2142.                         writeLog(_items[_count], me, 0, 0);
  2143.                     };
  2144.                 } else {
  2145.                     print("ÿc2NTSB ÿc1::ÿc1 Not enough space to buy item :(!");
  2146.                 };
  2147.             };
  2148.         };
  2149.     } else {
  2150.         print("ÿc2NTSB ÿc1::ÿc3 Error getting items...");
  2151.         return false;
  2152.     };
  2153.     print("ÿc2NTSB ÿc1:: ÿc3Done.");
  2154.     return true;
  2155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement