Can't get this one to work.
--EDITED TO ADD CREDITS--
Credits:
--EDITED TO ADD CREDITS--
Credits:
local CONFIG =
{
spearsLocation = 'red backpack',
maxSpears = 22, -- Max. amount
minSpears = 3, -- Amount to ignore monsters and start to pickup.
Hand = 'lhand', -- 'rhand' for RIGHT HAND.
moveStuff = true, -- Move random stuff on floor that are over spears.
AroundOnly = false, -- Pickup spears only when they are around you.
weaponNoSpears = true, -- Use weapon when no spears?
Weapon = 'spike sword', -- Weapon name/id.
WeaponLocation = 'red backpack', -- Weapon location.
}
--[[ DON'T EDIT BELOW THIS LINE --]]
--[[ DON'T EDIT BELOW THIS LINE --]]
--[[ DON'T EDIT BELOW THIS LINE --]]
local SPEAR_ID = 2389
local SPEAR_WEIGH = 20
if PICKUP_PAUSE == nil then
PICKUP_PAUSE = false
end
if equipspears == nil then
function equipspears(sCount)
local WEAPON_ID = itemid(CONFIG.Weapon)
for i = 0, 3 do
local hand = getslotitem(CONFIG.Hand)
if hand.id > 0 and hand.id ~= WEAPON_ID and hand.id ~= SPEAR_ID then
moveitems(hand.id, 'ground', CONFIG.Hand)
wait(400)
hand = getslotitem(CONFIG.Hand)
end
if hand.id == WEAPON_ID or hand.id == 0 or (hand.id == SPEAR_ID and hand.count < 100) then
if sCount == nil or sCount == -1 then
sCount = itemcount(SPEAR_ID, CONFIG.spearsLocation)
end
if sCount > 0 then
if hand.id == WEAPON_ID then
moveitems(hand.id, CONFIG.WeaponLocation, CONFIG.Hand)
wait(400)
hand = getslotitem(CONFIG.Hand)
end
if hand.id == 0 or hand.id == SPEAR_ID then
moveitems(SPEAR_ID, CONFIG.Hand, CONFIG.spearsLocation, 100)
wait(400)
hand = getslotitem(CONFIG.Hand)
if hand.id == SPEAR_ID then
break
end
end
else
if hand.id == 0 or hand.id ~= WEAPON_ID then
moveitems(WEAPON_ID, CONFIG.Hand, CONFIG.WeaponLocation)
wait(400)
hand = getslotitem(CONFIG.Hand)
if hand.id == WEAPON_ID then
break
end
end
end
end
end
end
end
if grabspears == nil then
function grabspears(px, py, pz, itemGroundCount, currentSpearsCount)
while getVariable('iswalking') do
stopattack()
wait(500)
end
if currentSpearsCount < CONFIG.maxSpears then
cap = getVariable('cap')
local maxSpears = math.floor(cap / SPEAR_WEIGH)
if maxSpears > 0 then
local maxPickup = CONFIG.maxSpears - currentSpearsCount
local count = 0
if maxSpears > maxPickup then
maxSpears = maxPickup
end
if maxSpears >= itemGroundCount then
count = 100
else
count = maxSpears
end
local WEAPON_ID = itemid(CONFIG.Weapon)
hand = getslotitem(CONFIG.Hand)
if hand.id > 0 and hand.id ~= SPEAR_ID and hand.id ~= WEAPON_ID then
moveitems(hand.id, 'ground', CONFIG.Hand)
wait(400)
hand = getslotitem(CONFIG.Hand)
if hand.id == 0 then
moveitems(SPEAR_ID, CONFIG.Hand, ground(px, py, pz), count)
wait(400)
end
elseif hand.id == 0 or hand.id == SPEAR_ID then
moveitems(SPEAR_ID, CONFIG.Hand, ground(px, py, pz), count)
wait(400)
elseif hand.id == WEAPON_ID then
moveitems(SPEAR_ID, CONFIG.spearsLocation, ground(px, py, pz), count)
wait(400)
stackitems('spear')
end
end
end
end
end
if spearscount == nil then
function spearscount()
local hand = getslotitem(CONFIG.Hand)
local spearsCount = itemcount(SPEAR_ID, CONFIG.spearsLocation)
if hand.id == SPEAR_ID then
if spearsCount > 0 then
equipspears(spearsCount)
end
spearsCount = spearsCount + hand.count
else
if spearsCount >= CONFIG.minSpears then
equipspears(spearsCount)
else
if CONFIG.weaponNoSpears then
local WEAPON_ID = itemid(CONFIG.Weapon)
local hand = getslotitem(CONFIG.Hand)
if hand.id > 0 then
if hand.id ~= SPEAR_ID and hand.id ~= WEAPON_ID then
moveitems(hand.id, 'ground', CONFIG.Hand)
wait(400)
hand = getslotitem(CONFIG.Hand)
if hand.id == 0 then
moveitems(WEAPON_ID, CONFIG.Hand, CONFIG.WeaponLocation)
wait(400)
end
elseif hand.id == SPEAR_ID then
moveitems(hand.id, CONFIG.spearsLocation, CONFIG.Hand)
wait(400)
hand = getslotitem(CONFIG.Hand)
if hand.id == 0 then
moveitems(WEAPON_ID, CONFIG.Hand, CONFIG.WeaponLocation)
wait(400)
end
end
else
moveitems(WEAPON_ID, CONFIG.Hand, CONFIG.WeaponLocation)
wait(400)
end
end
end
end
return spearsCount
end
end
if pickupspears == nil then
function pickupspears(around, currentSpearsCount)
local px = posX()
local py = posY()
local pz = posZ()
local pickupedSpears = false
local breakFlag = false
local mustUpdateMap = false
if CONFIG.moveStuff == false then
for x = -7, 7 do
for y = -5, 5 do
local tileX = px + x
local tileY = py + y
if not around or (around and math.abs(tileX - px) <= 1 and math.abs(tileY - py) <= 1) then
local item = topitem(tileX, tileY, pz, false, false)
if item.id == SPEAR_ID then
if lootbodies() > 0 or getVariable('islooting') then
breakFlag = true
break
end
pausewalking(999999)
PICKUP_PAUSE = true
if not around then
if ((istargeting() or hastarget()) and getVariable('chasemode') == 1) or getVariable('iswalking') then
stopattack()
stopattack()
wait(400)
end
else
if ((istargeting() or hastarget()) and getVariable('chasemode') == 1) or getVariable('iswalking') then
breakFlag = true
break
end
end
local IsCloseToSpears = islocationxyz(tileX, tileY, pz, 1)
if not IsCloseToSpears then
if reachlocation(tileX, tileY, pz, false, 'pause') then
while getVariable('iswalking') do
wait(500)
end
wait(1000)
IsCloseToSpears = islocationxyz(tileX, tileY, pz, 1)
else
break
end
end
if IsCloseToSpears then
grabspears(tileX, tileY, pz, item.count, currentSpearsCount)
pickupedSpears = true
local spearsCount = spearscount()
local monstersAround = maround()
if (spearsCount >= CONFIG.minSpears and monstersAround > 0) or spearsCount >= CONFIG.maxSpears then
breakFlag = true
break
end
mustUpdateMap = true
end
end
end
end
if breakFlag then
break
end
end
else
local tileTopItem = nil
local tilesScreen = gettiles(false, true, true)
for j = 1, #tilesScreen do
local TILE = tilesScreen[j]
if math.abs(TILE.posx - px) <= 7 and math.abs(TILE.posy - py) <= 5 and TILE.posz == pz then
if not around or (around and math.abs(TILE.posx - px) <= 1 and math.abs(TILE.posy - py) <= 1) then
for k = 1, #TILE.items do
local ITEM = TILE.items[k]
if ITEM.id == SPEAR_ID then
if lootbodies() > 0 or getVariable('islooting') then
breakFlag = true
break
end
pausewalking(999999)
PICKUP_PAUSE = true
if not around then
if ((istargeting() or hastarget()) and getVariable('chasemode') == 1) or getVariable('iswalking') then
stopattack()
stopattack()
wait(400)
end
else
if (istrapped() or (istargeting() or hastarget()) and getVariable('chasemode') == 1) or getVariable('iswalking') then
breakFlag = true
break
end
end
local IsCloseToSpears = islocationxyz(TILE.posx, TILE.posy, pz, 1)
if not IsCloseToSpears then
if reachlocation(TILE.posx, TILE.posy, pz, false, 'pause') then
while getVariable('iswalking') do
wait(500)
end
wait(1000)
IsCloseToSpears = islocationxyz(TILE.posx, TILE.posy, pz, 1)
else
break
end
end
if IsCloseToSpears then
if tileTopItem == nil then
tileTopItem = TILE.topitem
if tileTopItem.id == 99 then
tileTopItem = topitem(TILE.posx, TILE.posy, pz, false, false)
end
else
tileTopItem = topitem(TILE.posx, TILE.posy, pz, false, mustUpdateMap)
end
local flagBreak = false
for i = 0, 5 do
islooting = getVariable('islooting')
flagBreak = (islooting or lootbodies() > 0)
if tileTopItem.id ~= SPEAR_ID and flagBreak == false then
local destTile = getmovetile(TILE.posx, TILE.posy, pz, true, 2, false, true)
if destTile.posx > 0 then
moveitems(0, ground(destTile.posx, destTile.posy, pz), ground(TILE.posx, TILE.posy, pz))
wait(600, 700)
else
moveitems(0, ground(posX(), posY(), pz), ground(TILE.posx, TILE.posy, pz))
wait(600, 700)
end
tileTopItem = topitem(TILE.posx, TILE.posy, pz, false, true)
else
break
end
end
if tileTopItem.id == SPEAR_ID and flagBreak == false then
grabspears(TILE.posx, TILE.posy, pz, ITEM.count, currentSpearsCount)
pickupedSpears = true
local spearsCount = spearscount()
local monstersAround = maround()
if (spearsCount >= CONFIG.minSpears and monstersAround > 0) or spearsCount >= CONFIG.maxSpears then
breakFlag = true
break
end
mustUpdateMap = true
end
else
break
end
end
end
end
end
if breakFlag then
break
end
end
end
return pickupedSpears
end
end
if updateSettings == nil then
function updateSettings()
if PICKUP_PAUSE then
pausewalking(0)
end
end
end
local spearsCount = spearscount()
if cap >= SPEAR_WEIGH and islooting == false and lootbodies() == 0 and spearsCount < CONFIG.maxSpears then
local justAround = CONFIG.AroundOnly
local trapped = istrapped()
if trapped or (spearsCount > CONFIG.minSpears and hastarget()) then
justAround = true
end
--if trapped then
-- justAround = true
--end
if justAround or spearsCount < CONFIG.minSpears or (hastarget() == false and spearsCount < CONFIG.maxSpears) then
cap = getVariable('cap')
if cap > SPEAR_WEIGH then
if not pickupspears(justAround, spearsCount) then
local runTime = runningtime()
if LAST_GC == nil then
LAST_GC = runTime
end
if (LAST_GC + 10) < runTime then
cleanup()
LAST_GC = runningtime()
end
updateSettings()
else
return
end
end
updateSettings()
end
updateSettings()
elseif spearsCount >= CONFIG.maxSpears then
updateSettings()
else
updateSettings()
end