Voici le tout debut avec la fonction de cubage des runes basses ( pompée directement de la fonction de cubage des gemmes

). Je me suis pas encore attaqué au TownManager ( y as 2-3 lignes a rajouter) ni à la partie runes+gems! ( Je finis mes exams et je m'en occupe)!
if(!isIncluded("njip.dbl")) include("njip.dbl");
var _NTT_BeltColNeeded = new Array(4);
_NTT_BeltColNeeded[0] = 0;
_NTT_BeltColNeeded[1] = 0;
_NTT_BeltColNeeded[2] = 0;
_NTT_BeltColNeeded[3] = 0;
var _NTT_BeltSize = false;
var _NTT_OldItems;
var NTCubeGems = true;
var NTCubeRunes = true;
var NTPossibleCubingLowRunes = [
//el, eld, tir, nef, eth, ith, tal, ral, ort
610, 611, 612, 613, 614, 615, 616, 617, 618,
];
/*Mid Runes*/
/*//thul, amn, sol, shael, dol, hel, io, lum, ko, fal, lem
*619, 620, 621, 622, 623, 624, 625, 626, 627, 628, 629,
*/
/*High Runes*/
*//pul, um, mal // On vas pas s'amuser a cuber des Ists!
*630, 631, 632,
*/
var NTPossibleCubingGems = [
//skull, amethyst, sapphire, emerald, ruby, diamond, topaz
597, 557, 567, 572, 577, 582, 562, //chippped
598, 558, 568, 573, 578, 583, 563, //flawed
599, 559, 569, 574, 579, 584, 564, //regular
600, 560, 570, 575, 580, 585, 565, //flawless
];
var NTPossibleCraftingRecipes = [
];
var _NTT_IgnoredItems = new Array(
"aqv", // Arrows quiver
"cqv", // Bolts quiver
"key", // Keys
"tbk", // Tome of Town Portal
"ibk", // Tome of Identify
"tsc", // Scroll of Town Portal
"isc", // Scroll of Identify
"yps", // Antidote potion
"vps", // Stamina potion
"wms", // Thawing potion
"gps", // Rancid Gas Pot
"ops", // Oil Potion
"gpm", // Choking Gas Pot
"opm", // Exploding Pot
"gpl", // Strangling Gas
"opl", // Fulminating Pot
"hp1","hp2","hp3","hp4","hp5", // Healing potions
"mp1","mp2","mp3","mp4","mp5", // Mana potions
"rvs","rvl"); // Rejuvenation potions
// type : 1 = shop, 2 = ressurect, 3 = repair, 4 = potion, 5 = scrolls, 6 = gamble, 7 = ammo, 8 = healing
function NTT_CheckNPC(npc, type)
{
var _npcclassid;
if(typeof(npc) == "number")
_npcclassid = npc;
else
_npcclassid = npc.classid;
if(type == 1)
{
if(_npcclassid == 147 || _npcclassid == 148 || _npcclassid == 154 || _npcclassid == 177 ||
_npcclassid == 178 || _npcclassid == 199 || _npcclassid == 202 || _npcclassid == 252 ||
_npcclassid == 253 || _npcclassid == 254 || _npcclassid == 255 || _npcclassid == 257 ||
_npcclassid == 405 || _npcclassid == 511 || _npcclassid == 512 || _npcclassid == 513)
return true;
else
return false;
}
if(type == 2)
{
if(_npcclassid == 150 || _npcclassid == 198 || _npcclassid == 252 || _npcclassid == 367 || _npcclassid == 515)
return true;
else
return false;
}
if(type == 3)
{
if(_npcclassid == 154 || _npcclassid == 178 || _npcclassid == 253 || _npcclassid == 257 || _npcclassid == 511)
return true;
else
return false;
}
if(type == 4)
{
if(_npcclassid == 148 || _npcclassid == 177 || _npcclassid == 198 || _npcclassid == 202 ||
_npcclassid == 255 || _npcclassid == 405 || _npcclassid == 513)
return true;
else
return false;
}
if(type == 5)
{
if(_npcclassid == 148 || _npcclassid == 177 || _npcclassid == 255 || _npcclassid == 405 || _npcclassid == 513)
return true;
else
return false;
}
if(type == 6)
{
if(_npcclassid == 147 || _npcclassid == 199 || _npcclassid == 254 ||
_npcclassid == 405 || _npcclassid == 512 || _npcclassid == 514)
return true;
else
return false;
}
if(type == 7)
{
if(_npcclassid == 147 || _npcclassid == 154 || _npcclassid == 178 || _npcclassid == 199 || _npcclassid == 252 ||
_npcclassid == 253 || _npcclassid == 257 || _npcclassid == 511 || _npcclassid == 512)
return true;
else
return false;
}
if(type == 8)
{
if(_npcclassid == 148 || _npcclassid == 178 || _npcclassid == 255 || _npcclassid == 513)
return true;
else
return false;
}
return false;
}
// npc : NPC, stash or cube
function NTT_DoInteract(npc)
{
debugPrint("ntt do Interact npc:"+npc.name);
var _uiflag = 0x08;
if(!npc)
return false;
if(npc.classid == 267)
_uiflag = 0x19;
else if(npc.classid == 549)
_uiflag = 0x1A;
if(getUIFlag(_uiflag))
return true;
for(var i = 0 ; i < 36 ; i++)
{
if((i % 2) == 0)
{
if(getUIFlag(0x17))
{
me.cancel(1);
NTC_Delay(250);
}
if(npc.classid == 549)
clickItem(1, npc);
else
npc.interact();
}
if((i % 4) == 0){
me.cancel(1);
}
NTC_Delay(250);
if(getUIFlag(_uiflag))
{
NTC_PingDelay(500);
return true;
}
}
return false;
}
// type : 0 = shop, 1 = gamble
function NTT_DoTrade(npc, type)
{
debugPrint("ntt_DoTrade npc:"+npc.name);
if(!npc)
return false;
if(getUIFlag(0x0C))
return true;
if(arguments.length < 2)
type = 0;
for(var i = 0 ; i < 12 ; i++)
{
if((i % 4) == 0)
{
if(NTT_CheckNPC(npc.classid, 3))
npc.useMenu(0x0D06);
else if(type == 1 && NTT_CheckNPC(npc.classid, 6))
npc.useMenu(0x0D46);
else
npc.useMenu(0x0D44);
}
NTC_Delay(1000);
if(getUIFlag(0x0C))
{
NTC_PingDelay(1000);
return true;
}
}
return false;
}
function NTT_MenuCancel()
{
var i;
for(i = 0 ; i < 4 ; i++)
{
if(getUIFlag(0x0C) || getUIFlag(0x0D) || getUIFlag(0x14) || getUIFlag(0x19) || getUIFlag(0x1A))
{
me.cancel(0);
NTC_Delay(500);
}
else
break;
}
for(i = 0 ; i < 4 ; i++)
{
if(getUIFlag(0x08) || getUIFlag(0x17))
{
me.cancel(1);
NTC_Delay(250);
}
else
break;
}
}
function NTT_GetCorpses()
{
var _corpse;
for(var i = 0 ; i < 2 ; i++)
{
_corpse = NTC_GetUnit(NTC_UNIT_PLAYER);
do
{
if(_corpse.name == me.name && _corpse.hpmax == 0)
{
NTC_DoWeaponSwitch(0);
_corpse.interact();
NTC_PingDelay(1000);
break;
}
} while(_corpse.getNext());
}
for(var i = 0 ; i < 2 ; i++)
{
_corpse = NTC_GetUnit(NTC_UNIT_PLAYER);
do
{
if(_corpse.name == me.name && _corpse.hpmax == 0)
{
// st buged corpse telling oog to stop
sendCopyData(null, "OOG", 0,"Stop Me");
ShowConsole = 0;
print("failed to pick corpse, stopping")
}
} while(_corpse.getNext());
}
}
function NTT_CheckMerc()
{
if(NTConfig_UseMerc)
{
if(NTC_GetMerc())
return false;
else
{
if(NTC_MyGold() < me.mercrevivecost)
return false;
return true;
}
}
return false;
}
function NTT_ReviveMerc(npc)
{
var _mygold;
if(!NTT_CheckMerc())
return true;
if(!npc)
return false;
if(!getUIFlag(0x08))
return false;
_mygold = NTC_MyGold();
if(_mygold < me.mercrevivecost)
return false;
for(var i = 0 ; i < 6 ; i++)
{
if((i % 2) == 0)
npc.useMenu(0x1507);
NTC_Delay(500);
if(_mygold > NTC_MyGold())
return true;
}
return false;
}
function NTT_ResetWeaponMerc()
{
var i, n;
var _merc, _items;
var _result = 0;
_merc = NTC_GetMerc();
if(!_merc)
return false;
_items = NTC_GetItems(_merc);
for(i = 0 ; i < _items.length ; i++)
{
if(_items[i].bodylocation == 4)// && _items[i].getFlag(0x4000000))
{
_result = _items[i].gid;
for(n = 0 ; n < 60 ; n++)
{
if((n % 20) == 0)
clickItem(4, 4);
NTC_Delay(100);
if(me.itemoncursor)
{
NTC_PingDelay(1000);
break;
}
}
if(n >= 60)
break;
for(n = 0 ; n < 100 ; n++)
{
if((n % 20) == 0)
clickItem(4, 4);
NTC_Delay(100);
if(!me.itemoncursor)
{
NTC_PingDelay(500);
break;;
}
}
break;
}
}
if (_result ==0)
return true;
delay(1500);
_items = NTC_GetItems(_merc);
for(i = 0 ; i < _items.length ; i++)
{
if(_items[i].bodylocation == 1 )
{
return true;
}
}
if(me.itemoncursor){
while(me.itemoncursor){
clickItem(4, 4);
NTC_Delay(1000);
}
}else {
var droped = NTSI_findItemGID(_result);
if (droped){
NTSI_PickUpItemInt(droped);
print("crap i droped merc's wepon pausing");
NT_Pause=true;
sendCopyData(null, "OOG", 0,"Stop Me");
NTC_Delay(100);
}
}
NTSI_PickItems();
return false;
}
function NTT_CheckRepair(repairpercent)
{
var _max_dur;
var _percent;
var _items = NTC_GetItems();
if(!_items)
return false;
for(var i = 0 ; i < _items.length ; i++)
{
if(_items[i].mode == 1 && !_items[i].getFlag(0x400000) && !_items[i].getStat(152) && !getBaseStat(0, _items[i].classid, 59))
{
_max_dur = _items[i].getStat(73);
if(_max_dur == 0)
continue;
_percent = Math.floor((_items[i].getStat(72)*100) / (_max_dur*(_items[i].getStat(75)/100 + 1)));
if(_percent <= repairpercent)
return true;
}
}
return false;
}
function NTT_RepairItems(npc)
{
var _mygold;
if(!npc)
return false;
if(!getUIFlag(0x08) || !getUIFlag(0x0C))
return false;
_mygold = NTC_MyGold();
for(var i = 0 ; i < 6 ; i++)
{
if((i % 2) == 0)
me.repair();
NTC_Delay(500);
if(_mygold > NTC_MyGold())
return true;
}
return false;
}
/*
* Verifie la présence de Low Runes par 3 au minimum
*
* @return True if [El] ---> [Ort] >= 3
*/
function NTT_CheckLowRunes()
{
if(NTCubeRunes)
{
var items = me.getItems();
var existing_runes = [];
for(var i = 0; i < items.length; i++)
{
var current_item = item[i];
//verifie l'ensemble des items afin de trouver des trio de runes similaires
for(var j = 0; j < NTPossibleCubingLowRunes.length; j++)
{
if(NTPossibleCubingLowRunes[j] == current_item.classid)
{
if(!existing_runes[current_item.name])
existing_gems[current_item.name] = [];
existing_runes[current_item.name].push(current_item);
if(existing_runes[current_item.name].length > 2)
return true;
}
}
}
}
return false;
}
/**
* Checks whether any transmutable gems exist
*
* @return True if 3 or more of one type of gem exists, false if otherwise
*/
function NTT_CheckGems()
{
if(NTCubeGems)
{
var items = me.getItems();
var existing_gems = [];
for(var i = 0; i < items.length; i++)
{
var current_item = items[i];
//check all items to see if they're a transmutable gem, and track them if so
for(var j = 0; j < NTPossibleCubingGems.length; j++)
{
if(NTPossibleCubingGems[j] == current_item.classid)
{
if(!existing_gems[current_item.name])
existing_gems[current_item.name] = [];
existing_gems[current_item.name].push(current_item);
if(existing_gems[current_item.name].length > 2)
return true;
}
}
}
}
return false;
}
function NTT_CheckInventory()
{
var x, y;
var _items;
var _itemlist = new Array();
var _ignorestring = _NTT_IgnoredItems.join();
if(!NTC_StashGoldFull() && NTC_MyGoldCarry() > NTConfig_MinGoldToStash )
return true;
var _invspace = new Array(4);
_invspace[0] = new Array(10);
_invspace[1] = new Array(10);
_invspace[2] = new Array(10);
_invspace[3] = new Array(10);
for(y = 0 ; y < 4 ; y++)
{
for(x = 0 ; x < 10 ; x++)
_invspace[y][x] = 0;
}
_items = NTC_GetItems();
if(!_items)
return false;
for(var i = 0 ; i < _items.length ; i++)
{
if(_items[i].mode == 0 && _items[i].location == 0)
{
if(NTConfig_Columns[_items[i].y][_items[i].x] > 0)
_itemlist.push(_items[i].code);
for(y = 0 ; y < _items[i].sizey ; y++)
{
for(x = 0 ; x < _items[i].sizex ; x++)
_invspace[y+_items[i].y][x+_items[i].x] = 1;
}
}
}
var _freecols = new Array(10);
for(var x = 0 ; x < 10 ; x++)
_freecols[x] = 0;
for(var x = 0 ; x < 10 ; x++)
{
for(var y = 0 ; y < 4 ; y++)
{
if(_invspace[y][x] == 1)
{
_freecols[x] = 1;
break;
}
}
}
var _numfreecols = 0;
for(var x = 0 ; x < 10 ; x++)
{
if(_freecols[x] == 0)
_numfreecols++;
}
if(NTConfig_FreeSpace > _numfreecols)
{
for(var x = 0 ; x < _itemlist.length ; x++)
{
if(_ignorestring.indexOf(_itemlist[x]) != -1)
_itemlist.splice(x, 1);
}
if(_itemlist.length > 0)
return true;
}
return false;
}
function NTT_CheckStash()
{
var x, y;
var _items;
var _StashHeight = (me.gametype == 0) ? 4 : 8;
var _stashspace = new Array(_StashHeight);
for(y = 0 ; y < _StashHeight ; y++)
_stashspace[y] = new Array(6);
for(y = 0 ; y < _StashHeight ; y++)
{
for(x = 0 ; x < 6 ; x++)
_stashspace[y][x] = 0;
}
_items = NTC_GetItems();
if(!_items)
return false;
for(var i = 0 ; i < _items.length ; i++)
{
if(_items[i].mode == 0 && _items[i].location == 4)
{
for(y = 0 ; y < _items[i].sizey ; y++)
{
for(x = 0 ; x < _items[i].sizex ; x++)
_stashspace[y+_items[i].y][x+_items[i].x] = 1;
}
}
}
for(y = 0 ; y < _StashHeight ; y++)
{
for(x = 0 ; x < 6 ; x++)
{
if(_stashspace[y][x] != 1)
return true;
}
}
return false;
}
/**
* @desc Bon petit copier//coller de la fonction s'appliquant au gems!
*/
function NTT_CubeLowRunes()
{
var items = me.getItems();
var chest = getUnit(2, 267);
var cube;
var existing_runes = [];
for(var i = 0; i < items.length; i++)
{
var current_item = items[i];
//verifie la présence de cube
if(current_item.code == "box")
cube = current_item;
//parcours l'ensemble des objets afin de trouver les runes a cuber
for(var j = 0; j < NTPossibleCubingLowRunes.length; j++)
{
if(NTPossibleCubingLowRunes[j] == current_item.classid)
{
if(!existing_runes[current_item.name])
existing_runes[current_item.name] = [];
existing_runes[current_item.name].push(current_item);
}
}
}
for(var rune in existing_runes)
{
rune_loop:
while(existing_runes[rune].length >= 3)
{
var temp_tri_rune = [];
temp_tri_rune.push(existing_runes[rune].pop());
temp_tri_rune.push(existing_runes[rune].pop());
temp_tri_rune.push(existing_runes[rune].pop());
//place 3 runes similaires dans le cube
for(var i = 0; i < temp_tri_rune.length; i++)
{
delay(400);
clickItem(0, temp_tri_rune[i]);
delay(400);
clickItem(0, cube);
}
//realise le cubage
print(cube.name);
delay(400);
clickItem(1, cube);
var cubed_items = transmuteAndGetItems(cube);
if(cubed_items.length > 1)
print("runes didn't transmute properly");
//place la rune cubée dans l'inventaire
placeItemInLocation(cubed_items[0], 0);
me.cancel(0);
chest.interact();
//place la rune cubée dans le coffre
placeItemInLocation(cubed_items[0], 4);
}
}
}
/**
* @desc Checks existing items for any 3 gems that are transmutable
*/
function NTT_CubeGems()
{
var items = me.getItems();
var chest = getUnit(2, 267);
var cube;
var existing_gems = [];
for(var i = 0; i < items.length; i++)
{
var current_item = items[i];
//verify cube exists and keep a reference to it
if(current_item.code == "box")
cube = current_item;
//check all items to see if they're a transmutable gem, and track them if so
for(var j = 0; j < NTPossibleCubingGems.length; j++)
{
if(NTPossibleCubingGems[j] == current_item.classid)
{
if(!existing_gems[current_item.name])
existing_gems[current_item.name] = [];
existing_gems[current_item.name].push(current_item);
}
}
}
for(var gem in existing_gems)
{
gem_loop:
while(existing_gems[gem].length >= 3)
{
var temp_tri_gem = [];
temp_tri_gem.push(existing_gems[gem].pop());
temp_tri_gem.push(existing_gems[gem].pop());
temp_tri_gem.push(existing_gems[gem].pop());
//put 3 gems in the cube
for(var i = 0; i < temp_tri_gem.length; i++)
{
delay(400);
clickItem(0, temp_tri_gem[i]);
delay(400);
clickItem(0, cube);
}
//transmute them
print(cube.name);
delay(400);
clickItem(1, cube);
var cubed_items = transmuteAndGetItems(cube);
if(cubed_items.length > 1)
print("gems didn't transmute properly");
//temporarily place in inventory
placeItemInLocation(cubed_items[0], 0);
me.cancel(0);
chest.interact();
//finally place in stash
placeItemInLocation(cubed_items[0], 4);
}
}
}
/**
* Transmutes the cube's contents
*
* @param Cube Unit object of the cube
* @return Array of items in the cube
*/
function transmuteAndGetItems(cube)
{
delay(400);
clickItem(1, cube);
var items_in_cube = [];
if(!cube)
return false;
delay(400);
transmute();
delay(400);
var items = me.getItems();
for(var i = 0; i < items.length; i++)
{
if(items[i].location == 3)
items_in_cube.push(items[i]);
}
return items_in_cube;
}
/**
* Places an item in the desired location
*
* @param item Unit object of the item
* @param location_id Desired location, 0 being inventory, 4 being stash
*/
function placeItemInLocation(item, location_id)
{
var current_space;
var inventory_space = [];
inventory_space.push([1, 1, 1, 1]);
inventory_space.push([1, 1, 1, 1]);
inventory_space.push([1, 1, 1, 1]);
inventory_space.push([1, 1, 1, 1]);
inventory_space.push([1, 1, 1, 1]);
inventory_space.push([1, 1, 1, 1]);
inventory_space.push([1, 1, 1, 1]);
inventory_space.push([1, 1, 1, 1]);
inventory_space.push([1, 1, 1, 1]);
inventory_space.push([1, 1, 1, 1]);
var stash_space =[];
stash_space.push([1, 1, 1, 1, 1, 1, 1, 1]);
stash_space.push([1, 1, 1, 1, 1, 1, 1, 1]);
stash_space.push([1, 1, 1, 1, 1, 1, 1, 1]);
stash_space.push([1, 1, 1, 1, 1, 1, 1, 1]);
stash_space.push([1, 1, 1, 1, 1, 1, 1, 1]);
stash_space.push([1, 1, 1, 1, 1, 1, 1, 1]);
switch(location_id)
{
case 0:
current_space = inventory_space;
break;
case 4:
current_space = stash_space;
break;
}
var items = me.getItems();
//set all unavailable spots in current_space to 0
for(var i = 0; i < items.length; i++)
{
if(items[i].location == location_id)
{
var current_item = items[i];
for(var x = current_item.x; x < (current_item.sizex + current_item.x) ; x++)
{
for(var y = current_item.y; y < (current_item.sizey + current_item.y); y++)
{
current_space[x][y] = 0;
}
}
}
}
delay(400);
clickItem(0, item);
delay(400);
var end_loop = false;
var safe_to_place = true;
//search for a valid place to store the item
for(var space_x = 0; space_x < current_space.length; space_x++)
{
var column = current_space[space_x];
for(var space_y = 0; space_y < column.length; space_y++)
{
//check whether the item will fit at location (space_x, space_y)
for(var item_x = space_x; item_x < (item.sizex + space_x); item_x++)
{
for(var item_y = space_y; item_y < (item.sizey + space_y); item_y++)
{
if(current_space[item_x][item_y] == 0)
{
safe_to_place = false;
}
}
}
if(safe_to_place)
{
delay(400);
clickItem(0, space_x, space_y, location_id);
delay(400);
column[space_y] = 0;
end_loop = true;
}
safe_to_place = true;
if(end_loop)
break;
}
if(end_loop)
break;
}
}
function NTT_ManageStash(invitem)
{
var i, x, y;
var _items;
var _stashall;
var StashHeight = (me.gametype == 0) ? 4 : 8;
var _ignorestring = _NTT_IgnoredItems.join();
var _ignoreitem;
if(!getUIFlag(0x19))
return false;
if(arguments.length < 1)
_stashall = true;
else
_stashall = false;
if(!NTC_StashGoldFull() && NTC_MyGoldCarry() > NTConfig_MinGoldToStash)
{
var _mygold = NTC_MyGoldCarry();
gold(_mygold, 3);
for(i = 0 ; i < 2 ; i++)
{
NTC_Delay(500);
if(_mygold > NTC_MyGoldCarry())
break;
}
}
var _stashspace = new Array(StashHeight);
for(y = 0 ; y < StashHeight ; y++)
_stashspace[y] = new Array(6);
for(y = 0 ; y < StashHeight ; y++)
{
for(x = 0 ; x < 6 ; x++)
_stashspace[y][x] = 0;
}
_items = NTC_GetItems();
if(!_items)
return false;
for(i = 0 ; i < _items.length ; i++)
{
if(_items[i].mode == 0 && _items[i].location == 4)
{
for(y = 0 ; y < _items[i].sizey ; y++)
{
for(x = 0 ; x < _items[i].sizex ; x++)
_stashspace[y+_items[i].y][x+_items[i].x] = 1;
}
}
}
for(var i = 0 ; i < _items.length ; i++)
{
if(_items[i].mode == 0 && _items[i].location == 0 && (_stashall || (_items[i].x == invitem.x && _items[i].y == invitem.y)))
{
if(_stashall)
{
_ignoreitem = (NTConfig_Columns[_items[i].y][_items[i].x] == 0);
if(!_ignoreitem)
{
if( _ignorestring.indexOf(_items[i].code) != -1 || (!_items[i].getFlag(0x10) && njipCheckGoodItem(_items[i], NJIP_CHECK_SIMPLE) < 0 ))
_ignoreitem = true;
}
}
else
_ignoreitem = false;
if(!_ignoreitem)
{
var _itemdone = false;
for(y = 0 ; y < StashHeight ; y++)
{
if(_itemdone)
break;
for(x = 0 ; x < 6 ; x++)
{
if(_itemdone)
break;
if(_stashspace[y][x] == 0)
{
if((x+_items[i].sizex-1) < 6 && (y+_items[i].sizey-1) < StashHeight)
{
var _havespace = true;
for(var m = 0 ; m < _items[i].sizey ; m++)
{
for(var n = 0 ; n < _items[i].sizex ; n++)
{
if(_stashspace[y+m][x+n] == 1)
{
_havespace = false;
m = 4;
break;
}
}
}
if(_havespace)
{
if(NTC_ItemToCursor(_items[i]))
{
NTC_PingDelay(500);
for(n = 0 ; n < 50 ; n++)
{
if((n % 10) == 0)
clickItem(0, x, y, 4);
NTC_Delay(100);
if(!me.itemoncursor)
break;
}
if(n < 50)
{
for(m = 0 ; m < _items[i].sizey ; m++)
{
for(n = 0 ; n < _items[i].sizex ; n++)
_stashspace[y+m][x+n] = 1;
}
}
NTC_PingDelay(500);
}
_itemdone = true;
}
}
}
}
}
}
if(!_stashall)
return true;
}
}
return true;
}
// type : id = 0, tp = 1
function NTT_GetScroll(type)
{
var _items;
var _scrollcode;
if(arguments.length < 1)
type = 0;
_items = NTC_GetItems();
if(!_items)
return false;
if(type)
_scrollcode = "tsc";
else
_scrollcode = "isc";
for(var i = 0 ; i < _items.length ; i++)
{
if(_items[i].mode == 0 && _items[i].location == 0 && _items[i].code == _scrollcode)
return _items[i];
}
return false;
}
// type : id = 0, tp = 1
function NTT_GetTome(type)
{
var _items;
var _tomecode;
if(arguments.length < 1)
type = 0;
_items = NTC_GetItems();
if(!_items)
return false;
if(type)
_tomecode = "tbk";
else
_tomecode = "ibk";
for(var i = 0 ; i < _items.length ; i++)
{
if(_items[i].mode == 0 && _items[i].location == 0 && _items[i].code == _tomecode)
return _items[i];
}
return false;
}
// type : id = 0, tp = 1
function NTT_FillTome(npc, type)
{
var _tome;
if(arguments.length < 1)
return false;
if(arguments.length < 2)
type = 0;
_tome = NTT_GetTome(type);
if(_tome)
{
var _items;
var _scrollcode;
if(_tome.getStat(70) >= 20)
return true;
//_items = who.getItems();
_items = NTC_GetItems(npc);
if(!_items)
return false;
if(type)
_scrollcode = "tsc";
else
_scrollcode = "isc";
for(var i = 0 ; i < _items.length ; i++)
{
if(_items[i].code == _scrollcode)
return NTT_ShopItem(_items[i], npc, 3);
}
}
return false;
}
// type : id = 0, tp = 1
function NTT_BuyScrolls(npc, type, amount)
{
var _items;
var _scrollcode;
var _counter = 0;
if(arguments.length < 1)
return false;
if(arguments.length < 2)
type = 0;
if(arguments.length < 3)
amount = 1;
if(amount == 0)
return false;
_items = NTC_GetItems(npc);
if(!_items)
return false;
if(type)
_scrollcode = "tsc";
else
_scrollcode = "isc";
for(var i = 0 ; i < _items.length ; i++)
{
if(_items[i].code == _scrollcode)
{
for(var n = 0 ; n < amount ; n++)
{
if(NTT_ShopItem(_items[i], npc, 2))
_counter++;
}
break;
}
}
return (_counter > 0);
}
function NTT_GetKey()
{
var _items;
_items = NTC_GetItems();
if(!_items)
return false;
for(var i = 0 ; i < _items.length ; i++)
{
if(_items[i].mode == 0 && _items[i].location == 0 && _items[i].code == "key")
return _items[i];
}
return false;
}
function NTT_FillKey(npc)
{
var _key;
var _items;
if(arguments.length < 1)
return false;
_key = NTT_GetKey();
if(_key)
{
if(_key.getStat(70) >= 12)
return true;
_items = NTC_GetItems(npc);
if(!_items)
return false;
for(var i = 0 ; i < _items.length ; i++)
{
if(_items[i].code == "key")
return NTT_ShopItem(_items[i], npc, 3);
}
}
else
{
_items = NTC_GetItems(npc);
if(!_items)
return false;
for(var i = 0 ; i < _items.length ; i++)
{
if(_items[i].code == "key")
{
NTT_ShopItem(_items[i], npc, 2);
return NTT_ShopItem(_items[i], npc, 3);
}
}
}
return false;
}
function NTT_CheckBelt()
{
var _needpotions = false;
for(var i = 0 ; i < 4 ; i++)
{
_NTT_BeltColNeeded[i] = NTT_GetNeededPotionsColInt(NTConfig_BeltColType[i], i);
if(4-_NTT_BeltColNeeded[i] < NTConfig_BeltColMin[i] && NTConfig_BeltColType[i] != "rv")
_needpotions = true;
}
return _needpotions;
}
function NTT_FillBelt(npc)
{
if(!npc)
return false;
if(!getUIFlag(0x08) || !getUIFlag(0x0C))
return false;
if(!_NTT_BeltSize)
_NTT_BeltSize = NTC_GetBeltSize();
if(_NTT_BeltColNeeded[3] == _NTT_BeltSize || _NTT_BeltColNeeded[2] == _NTT_BeltSize || _NTT_BeltColNeeded[1] == _NTT_BeltSize || _NTT_BeltColNeeded[0] == _NTT_BeltSize)
NTT_BuyPotionsSlowInt(npc);
else
NTT_BuyPotionsFastInt(npc);
return true;
}
function NTT_CheckHeal()
{
var _mercHP;
if(me.hp < parseInt((me.hpmax*NTConfig_SkipHealLife)/100) || me.mp < parseInt((me.mpmax*NTConfig_SkipHealMana)/100))
return true;
_mercHP = getMercHP();
if(_mercHP > 0 && _mercHP < NTConfig_SkipHealLife)
return true;
return false;
}
function NTT_CheckSpace(itemX, itemY)
{
var i, j, x, y;
var _items;
var _invspace = new Array(4);
_invspace[0] = new Array(10);
_invspace[1] = new Array(10);
_invspace[2] = new Array(10);
_invspace[3] = new Array(10);
for(y = 0 ; y < 4 ; y++)
{
for(x = 0 ; x < 10 ; x++)
_invspace[y][x] = 0;
}
_items = NTC_GetItems();
if(!_items)
return false;
for(i = 0 ; i < _items.length ; i++)
{
if(_items[i].mode == 0 && _items[i].location == 0)
{
for(y = 0 ; y < _items[i].sizey ; y++)
{
for(x = 0 ; x < _items[i].sizex ; x++)
_invspace[y+_items[i].y][x+_items[i].x] = 1;
}
}
}
for(i = 0 ; i < 5-itemY ; i++)
{
invloop2:
for(j = 0 ; j < 11-itemX ; j++)
{
for(y = 0 ; y < itemY ; y++)
{
for(x = 0 ; x < itemX ; x++)
{
if(_invspace[i+y][j+x])
continue invloop2;
}
}
return true;
}
}
return false;
}
function NTT_CleanPotions()
{
var _items = NTC_GetItems();
if(!_items)
return false;
for(var i = 0 ; i < _items.length ; i++)
{
if(_items[i].mode == 0 && _items[i].location == 0 && (_items[i].itemType == 76 || _items[i].itemType == 77 || _items[i].itemType == 78))
{
if(NTConfig_Columns[_items[i].y][_items[i].x] > 0)
{
_items[i].interact();
NTC_PingDelay(500);
}
}
}
return true;
}
function NTT_ClearInventory()
{
debugPrint("ntt clear inventory");
var _retval = true;
var _ignorestring = _NTT_IgnoredItems.join();
var _items;
_items = NTC_GetItems();
if(!_items)
return false;
for(var i = 0 ; i < _items.length ; i++)
{
if(_items[i].mode == 0 && _items[i].location == 0)
{
if(NTConfig_Columns[_items[i].y][_items[i].x] > 0)
{
if(_ignorestring.indexOf(_items[i].code) != -1 || !_items[i].getFlag(0x10))
continue;
if(njipCheckGoodItem(_items[i], NJIP_CHECK_SIMPLE) == 0)
{
if(NTT_DropItem(_items[i]))
NTC_PingDelay(250);
else
_retval = false;
}
}
}
}
return _retval;
}
function NTT_DropItem(item)
{
debugPrint("ntt dropItem");
if(!item)
return false;
if(NTC_ItemToCursor(item))
return NTC_ClearCursor();
return false;
}
function NTT_ClearBelt()
{
var i;
var _result, _needdrop;
var _items;
do
{
_items = NTC_GetItems();
if(!_items)
return false;
_result = true;
for(i = 0 ; i < _items.length ; i++)
{
if(_items[i].mode == 2 && _items[i].x < 4)
{
_needdrop = false;
switch(_items[i].itemType)
{
case 76:
if( NTConfig_BeltColType[_items[i].x] != "hp" && NTConfig_BeltColMin[_items[i].x] != 0 )
_needdrop = true;
break;
case 77:
if( NTConfig_BeltColType[_items[i].x] != "mp" && NTConfig_BeltColMin[_items[i].x] != 0 )
_needdrop = true;
break;
case 78:
if( NTConfig_BeltColType[_items[i].x] != "rv" && NTConfig_BeltColMin[_items[i].x] != 0 )
_needdrop = true;
break;
default:
_needdrop = true;
break;
}
if(_needdrop)
{
if(NTT_DropItem(_items[i]))
{
NTC_Delay(200);
}
_result = false;
}
}
}
} while(!_result);
return _result;
}
// mode : 1 = sell, 2 = buy, 3 = shift buy
function NTT_ShopItem(item, npc, mode)
{
debugPrint("ntt ShopItem:"+item.name+" NPC:"+npc.name+" mode:"+mode);
var _mygold = NTC_MyGold();
if(mode > 1)
{
if(version() == "1.1.1"){
if(item.getPrice(npc, 0) > _mygold)
return false;
}else{
if(item.getItemCost(0) > _mygold)
return false;
}
}
if(mode > 1)
{
var _havespace = false;
if(item.code == "isc" || item.code == "tsc")
{
var _book = (item.code == "isc") ? NTT_GetTome(0) : NTT_GetTome(1);
if(_book && _book.getStat(70) < 20)
_havespace = true;
}
if(!_havespace)
{
if(NTT_CheckSpace(item.sizex, item.sizey))
_havespace = true;
}
if(_havespace)
{
debugPrintBeltGID();
for(var i = 0 ; i < 60 ; i++)
{
if(i == 0)
{
//sendCopyData(null, "OOG", 0,"ntt ShopItem:"+item.name+" NPC:"+npc.name+" mode:"+mode+"i: "+i+"loc: "+item.location);
debugPrint("ntt ShopItem:"+item.name+" NPC:"+npc.name+" mode:"+mode+"item toSource: "+item.toSource());
NTC_Delay(600);
item.shop(mode > 2 ? 6 : 2);
debugPrint("ntt ShopItem:returned");
}
debugPrintBeltGID();
NTC_Delay(100);
if(_mygold > NTC_MyGold())
{
debugPrint("ntt ShopItem:post Buying Delay");
NTC_PingDelay(100);
return true;
}
}
}
}
else
{
if(NTC_ItemToCursor(item))
{
for(var i = 0 ; i < 50 ; i++)
{
if((i % 10) == 0)
item.shop(1);
NTC_Delay(100);
if(!me.itemoncursor)
{
NTC_PingDelay(750);
return true;
}
}
}
}
return false;
}
function NTT_IdItem(scroll, uniditem)
{
var i, _timer;
if(arguments.length < 1 || !scroll)
return false;
if(arguments.length < 2 || !uniditem)
return false;
if(uniditem.getFlag(0x10))
return true;
for(i = 0 ; i < 30 ; i++)
{
if((i % 10) == 0)
clickItem(1, scroll);
NTC_Delay(100);
if(getCursorType() == 6)
break;
}
if(getCursorType() != 6)
return false;
NTC_PingDelay(250);
for(i = 0 ; i < 60 ; i++)
{
if((i % 20) == 0)
clickItem(0, uniditem);
NTC_Delay(100);
if(uniditem.getFlag(0x10))
{
NTC_PingDelay(500);
return true;
}
}
return false;
}
function NTT_CheckUnids()
{
var _unidcount = 0;
var _items = NTC_GetItems();
if(!_items)
return _unidcount;
for(var i = 0 ; i < _items.length ; i++)
{
if(_items[i].mode == 0 && _items[i].location == 0 && !_items[i].getFlag(0x10))
_unidcount++;
}
return _unidcount;
}
function NTT_GetUnidItems()
{
var _uniditems = new Array();
var _items = NTC_GetItems();
if(!_items)
return _uniditems;
for(var i = 0 ; i < _items.length ; i++)
{
if(_items[i].mode == 0 && _items[i].location == 0 && !_items[i].getFlag(0x10))
_uniditems.push(copyUnit(_items[i]));
}
return _uniditems;
}
function NTT_GambleIt(npc)
{
var _gambleitem, _newitem;
if(!npc)
return false;
if(!getUIFlag(0x08) || !getUIFlag(0x0C))
return false;
_gambleitem = NTC_GetItems(npc);
if(!_gambleitem)
return false;
for(var i = 0 ; i < _gambleitem.length ; i++)
{
if(NTC_MyGold() < NTConfig_GambleStopGold)
return false;
if(NTT_IsItemInGambleArrayInt(_gambleitem[i].code))
{
if(NTT_CheckSpace(_gambleitem[i].sizex, _gambleitem[i].sizey))
{
NTT_GetOldItemsInt();
if(NTT_ShopItem(_gambleitem[i], npc, 2))
_newitem = NTT_GetGambledItemInt();
else
return false;
if(_newitem)
{
while(!_newitem.getFlag(0x10))
NTC_Delay(100);
NTC_PingDelay(100);
var _isEthereal = (_newitem.getFlag(0x400000)) ? "1" : "0";
if(njipCheckGoodItem(_newitem, NJIP_CHECK_SIMPLE) > 0){
writeLog(_newitem, me, _isEthereal, 0);
NTC_SendLogToOOG("Kept [" + NTC_ItemQualityToNameList[_newitem.quality] + "] " + _newitem.name);
}else{
writeLog(_newitem, me, _isEthereal, 1);
NTT_ShopItem(_newitem, npc, 1);
}
}
}
}
}
return true;
}
// Internal function
function NTT_IsItemInGambleArrayInt(itemcode)
{
for(var i = 0 ; i < NTConfig_GambleItem.length ; i++)
{
if(itemcode == NTConfig_GambleItem[i])
return true;
}
return false;
}
function NTT_GetPotionAtNPCInt(type, npc)
{
var _items;
if(!type)
return false;
if(type == "hp" || type == "mp")
{
_items = NTC_GetItems(npc);
if(_items)
{
var n;
for(var i = _items.length -1 ; i > 0 ; i--)
{
for(n = 5 ; n > 0 ; n--)
{
if(_items[i].code == (type+n))
return _items[i];
}
}
}
}
else
{
if(type == "rv")
return false;
_items = NTC_GetItems(npc);
if(_items)
{
for(var i = 0 ; i < _items.length ; i++)
{
if(_items[i].code == type)
return _items[i];
}
}
}
return false;
}
function NTT_BuyPotionsFastInt(npc)
{
var i, n;
var _insert, _potion;
var _typearray = new Array();
for(i = 0 ; i < 4 ; i++)
{
if(_NTT_BeltColNeeded[i] > 0)
{
if(_typearray.length == 0)
_typearray.push(NTConfig_BeltColType[i]);
else
{
_insert = true;
for(n = 0 ; n < _typearray.length ; n++)
{
if(_typearray[n] == NTConfig_BeltColType[i])
_insert = false;
}
if(_insert)
_typearray.push(NTConfig_BeltColType[i]);
}
}
}
for(i = 0 ; i < _typearray.length ; i++)
{
if(_typearray[i] == "rv")
continue;
_potion = NTT_GetPotionAtNPCInt(_typearray[i], npc);
if(_potion)
{
if(NTT_ShopItem(_potion, npc, 3))
continue;
else
return false;
}
else
return false;
}
return true;
}
function NTT_BuyPotionsColInt(npc, col)
{
var _numpotions;
var _potion;
if(col < 0 || col > 3)
return false;
if(NTConfig_BeltColType[col] == "rv")
return false;
_numpotions = _NTT_BeltColNeeded[col];
if(_numpotions == 0)
return false;
if(_numpotions > _NTT_BeltSize)
_numpotions = _NTT_BeltSize;
for(var _buyloop = 0 ; _buyloop < _numpotions ; _buyloop++)
{
_potion = NTT_GetPotionAtNPCInt(NTConfig_BeltColType[col], npc);
if(_potion)
NTT_ShopItem(_potion, npc, 2);
else
return false;
}
return true;
}
function NTT_BuyPotionsSlowInt(npc)
{
var _currentcol;
for(_currentcol = 0 ; _currentcol < 4 ; _currentcol++)
{
if(_NTT_BeltColNeeded[_currentcol] == _NTT_BeltSize)
{
NTT_BuyPotionsColInt(npc, _currentcol);
_NTT_BeltColNeeded[_currentcol] = 0;
}
}
for(_currentcol = 0 ; _currentcol < 4 ; _currentcol++)
NTT_BuyPotionsColInt(npc, _currentcol);
return true;
}
function NTT_GetNeededPotionsColInt(type, column)
{
var _restartloop = true;
var _amountneeded = 0;
var _items;
if(!type || column > 3)
return false;
if(!_NTT_BeltSize)
_NTT_BeltSize = NTC_GetBeltSize();
potionloop:
do
{
_amountneeded = _NTT_BeltSize;
_items = NTC_GetItems();
if(!_items)
continue potionloop;
for(var i = 0 ; i < _items.length ; i++)
{
if(_items[i].mode == 2)
{
if(NTT_PotInRightColInt(_items[i].x, column, _NTT_BeltSize))
{
var _potcode = _items[i].code;
if(_potcode.indexOf(type) != -1)
_amountneeded--;
else
{
if(_potcode.indexOf("rv") != -1)
{
if(_items[i].x < 4)
return 0;
else
_amountneeded--;
}
else
{
clickItem(1, _items[i]);
NTC_PingDelay(500);
continue potionloop;
}
}
}
}
}
_restartloop = false;
} while(_restartloop);
return _amountneeded;
}
function NTT_PotInRightColInt(potx, column, beltsize)
{
for(var i = 0 ; i < beltsize ; i++)
{
if(potx-i*4 == column)
return true;
}
return false;
}
function NTT_GetGambledItemInt()
{
var n;
var _items;
var _founditem;
_items = NTC_GetItems();
if(!_items)
return false;
for(var i = 0 ; i < _items.length ; i++)
{
if(_items[i].mode == 0 && _items[i].location == 0)
{
_founditem = true;
for(n = 0 ; n < _NTT_OldItems.length ; n++)
{
if(_items[i].gid == _NTT_OldItems[n])
{
_founditem = false;
break;
}
}
if(_founditem)
return _items[i];
}
}
return false;
}
function NTT_GetOldItemsInt()
{
var _items;
_NTT_OldItems = new Array();
_items = NTC_GetItems();
if(!_items)
return false;
for(var i = 0 ; i < _items.length ; i++)
{
if(_items[i].mode == 0 && _items[i].location == 0)
_NTT_OldItems.push(_items[i].gid);
}
return true;
}