Code:
function MWL_FindItem(range)
{
var _orgx, _orgy, _lootableCorpses, _lootableCorpse, _lootableCorpseCount, _dist, _mindist, _minIndex, _recursion, _pickItems;
var i, j;
if(me.classid != NTC_CHAR_CLASS_BARBARIAN || NTC_GetSkillLevel(MWS_FIND_ITEM) < 1 || NTC_GetSkillLevel(MWS_TELEPORT) < 1 || !MWL_AreaCheckLooting(me.areaid))
return false;
if(arguments.length < 1 || !range)
range = 25;
_corpse = NTC_FindUnit(NTC_UNIT_MONSTER);
_orgx = me.x;
_orgy = me.y;
_lootableCorpses = new Array();
_recursion = false;
_pickItems = false;
if(_MWL_LootingSlot == -1)
MWL_SetLootingSlot();
if(_corpse)
{
do
{
if(_MWL_LootedMonsters.indexOf(_corpse.gid) == -1 && GetDistance(_orgx, _orgy, _corpse.x, _corpse.y) <= range && MWL_CheckLootStatus(_corpse) && MWL_IsLootableMonster(_corpse.classid))
{
_lootableCorpse = new Lootable(_corpse.x, _corpse.y, _corpse.gid);
if(_lootableCorpse)
_lootableCorpses.push(_lootableCorpse);
}
} while(_corpse.GetNext());
_lootableCorpseCount = _lootableCorpses.length;
if(_lootableCorpseCount > 0 && _MWL_LootingSlot > -1)
NTC_SwapWeapons(_MWL_LootingSlot);
while(_lootableCorpses.length > 0)
{
_mindist = 1E3;
_minIndex = -1;
for(j = 0; j < _lootableCorpses.length; j++)
{
_dist = GetDistance(me.x, me.y, _lootableCorpses[j].x, _lootableCorpses[j].y);
if(_dist < _mindist)
{
_mindist = _dist;
_minIndex = j;
}
}
if(_minIndex > -1)
{
_lootableCorpse = NTC_FindUnit(NTC_UNIT_MONSTER, _lootableCorpses[_minIndex].gid);
if(_lootableCorpse && MWL_CheckLootStatus(_lootableCorpse))
{
if(GetDistance(me, _lootableCorpse) >= 8 || !CheckCollision(me, _lootableCorpse, 1))
{
if(!NTM_MoveTo(me.areaid, _lootableCorpse.x, _lootableCorpse.y, 1, false, 0, false))
continue;
}
if(MWConfig_ShowOverheadStatus)
MWC_PrintOverheadStatus("Looting " + _lootableCorpse.name + " (" + (_lootableCorpseCount - _lootableCorpses.length + 1) + "/" + _lootableCorpseCount + ")");
for(j = 1; j <= 10; j++)
{
if(_lootableCorpse.IsAttackable() || !MWL_CheckLootStatus(_lootableCorpse))
break;
NTC_CastSkill(MWS_FIND_ITEM, NTC_HAND_RIGHT, _lootableCorpse);
[COLOR="Red"][B]NTC_Delay(500);[/B][/COLOR]
if(j % 5 == 0) // Reposition
{
if(!NTM_MoveTo(me.areaid, _lootableCorpse.x, _lootableCorpse.y, 1, false, 0, false))
j = 20;
}
}
if(j > 10)
{
MWI_ErrorLog(_lootableCorpse, 4);
if(MWT_CheckManaPotions(0.1))
{
if(_MWL_LootingSlot > -1)
NTC_SwapWeapons(_MWL_LootingSlot);
continue;
}
}
else
{
if(MWConfig_PickLootedItemsInstantly)
NTSI_PickItems();
else
_pickItems = true;
NTC_SendMsgToScript("MWBotGame.ntj", "SET_LOOTED_1");
}
if(MWA_CheckForCloseMonsters(5))
{
_recursion = true;
NTA_ClearPosition(10, false, 0, false, false);
break;
}
_MWL_LootedMonsters.push(_lootableCorpse.gid);
}
else
break;
_lootableCorpses.splice(_minIndex, 1);
}
else
break;
}
if(MWConfig_ShowOverheadStatus && _lootableCorpseCount > 0)
MWC_PrintOverheadStatus("Corpses looted: " + _lootableCorpseCount);
if(_recursion)
return MWL_FindItem(range);
if(_pickItems)
NTSI_PickItems();
if(GetDistance(me.x, me.y, _orgx, _orgy) > 5)
return NTM_MoveTo(me.areaid, _orgx, _orgy);
else
return true;
}
return false;
}