Signup Now
Page 1 of 3 123 LastLast
Results 1 to 10 of 30
  1. #1
    Free User Borges's Avatar
    Join Date
    Feb 2014
    Location
    Brazil
    Posts
    1,469
    Reputation
    205
    Rep Power
    25

    Obsidian Knife User

    Obsidian Knife User

    Description
    Using obsidian knife on dead bodies. Optionaly you can setup:

    • range - it will consider bodies only in this range
    • waitfresh - if true it will also consider fresh bodies


    It will use browse field if body is covered by any unmoveable item, if its covered by moveable item it will just push it away. It will also add looted items to the MMH list (you need to add items to the loot list also (Looting > LootList)).

    Configuration
    Just paste the code to:

    • Cavebot > Scripter (it will works only if cavebot is enabled)
    • Scripter > Persistant

    Credits: @Garkstal
    Code

    init start        -- local SCRIPT_VERSION = '1.0.1'

    local Range = 6 -- Range from which bot will consider bodies
    local waitFreshBodies = false -- Wait till body wont be fresh?


    -- Do not edit anything below
    local fresh = {6017, 5969, 5973, 5981, 5982, 5983, 5984, 5999, 6030, 4239, 6040, 6041, 10355, 10359, 10363, 10367, 8182} -- ID's of fresh dead bodies
    local old = {4173, 4011, 4025, 4047, 4052, 4057, 4062, 4112, 4212, 4321, 4324, 4327, 10352, 10356, 10360, 10364, 8181} -- ID's of not fresh dead bodies

    local lootItems = {5878, 5876, 5877, 5948, 5925, 5893, 954, 2977} -- items which will be added to the MMH list

    local function bodiesInfo(range, _fresh)
    local infos = {}
    for a=0, range do
    local i, j = -a, -a
    while j <= a do
    i = -a
    while i <= a do
    local px, py = $posx+i, $posy+j
    if (math.abs(j) == a or math.abs(i) == a) and tilehasinfo(px, py, $posz) then
    local tile = gettile(px, py, $posz)
    for k=0, tile.itemcount do
    if (_fresh and table.find(fresh, tile.item[k].id)) or (table.find(old, tile.item[k].id)) then
    table.insert(infos, {px, py})
    break
    end
    end
    end
    if math.abs(j) ~= a then
    i = i+2*a
    else
    i = i + 1
    end
    end
    j = j + 1
    end
    end

    return infos
    end


    function _skin(range, waitfresh)
    local waitfresh = waitfresh or false

    local info = bodiesInfo(range, waitfresh)

    if skin and itemcount('obsidian knife') == 0 and clientitemhotkey('obsidian knife','crosshair') == 'not found' then
    info = {}
    return ''
    end

    if #info ~= 0 then
    -- Counting items (actual amount)
    local Amount = {}
    for _, Items in ipairs(lootItems) do
    Amount[Items] = itemcount(Items)
    end

    pausewalking(60000)
    for a=1, #info do
    local px, py = info[a][1], info[a][2]
    if tilehasinfo(px, py, $posz) and tilereachable(px, py, $posz) then

    local function distFrom(x,y)
    return math.abs($posx - x) > math.abs($posy - y) and math.abs($posx - x) or math.abs($posy - y)
    end

    if distFrom(px, py) > 1 then
    reachlocation(px, py, $posz)
    end

    local tile = gettile(px, py, $posz)
    if not table.find(old, topitem(px, py, $posz).id) and not table.find(fresh, topitem(px, py, $posz).id) then
    if itemproperty(topitem(px, py, $posz).id, ITEM_NOTMOVEABLE) then
    while windowcount("Browse Field") == 0 do
    browsefield(px, py, $posz)
    wait(500)
    end
    for i=1, getcontainer("Browse Field").itemcount do
    local itemId = getcontainer("Browse Field").item[i].id
    if (table.find(old, itemId)) or (table.find(fresh, itemId) and waitfresh) then
    while table.find(fresh, itemId) and waitfresh do
    wait(200)
    itemId = getcontainer("Browse Field").item[i].id
    end

    while not table.find(old, topitem(px, py, $posz).id) and itemcount(itemId, "Browse Field") > 0 do
    moveitems(itemId, ground(px, py, $posz), "Browse Field", 1)
    wait(500)
    end

    local function bodiesInWindow(win)
    local counter = 0
    for i=1, getcontainer(win).itemcount do
    if (table.find(old, getcontainer(win).item[i].id)) or (waitfresh and table.find(fresh, getcontainer(win).item[i].id)) then
    counter = counter + 1
    break
    end
    end
    return counter
    end
    if bodiesInWindow("Browse Field") <= 1 then
    closewindows("Browse Field")
    end
    break
    end
    end
    else
    local function push(startx, starty)
    local x,y,z = 0, 0, $posz
    for i=-1, 1 do
    for j=-1, 1 do
    if tilewalkable(startx+i, starty+j, $posz) and (i ~= 0 or j ~= 0) and x == 0 then
    x,y = startx+i, starty+j
    break
    end
    end
    end

    return x,y,z
    end

    while not table.find(fresh, topitem(px, py, $posz).id) and not table.find(old, topitem(px, py, $posz).id) do
    moveitems(topitem(px, py, $posz).id, ground(push(px, py)), ground(px, py, $posz), 1)
    wait(400, 500)
    end
    end
    end

    while table.find(fresh, topitem(px, py, $posz).id and waitfresh) do
    wait(200)
    end

    while table.find(old, topitem(px, py, $posz).id) do
    if $posx == px and $posy == py then
    local dirs = {
    {$posx-1, $posy},
    {$posx+1, $posy},
    {$posx, $posy-1},
    {$posx, $posy+1}
    }

    for _, v in ipairs(dirs) do
    if not itemproperty(topitem(v[1], v[2], $posz).id, ITEM_FLOORCHANGE) and tilewalkable(v[1], v[2], $posz) then
    moveto(v[1], v[2], $posz)
    wait(200)
    break
    end
    end
    end
    useitemon("obsidian knife", 0, ground(px, py, $posz))
    wait(500)
    end
    end
    end
    -- Checking if count has changed
    for Item, Count in pairs(Amount) do
    local Current = itemcount(Item)

    if Current > Count then
    Amount[Item] = Current

    increaseamountlooted(Item, Current - Count)
    end
    end

    pausewalking(1000)
    end
    end
    init end


    auto(100)
    --Example of use
    if maround(7) == 0 then
    _skin(Range, waitFreshBodies)
    end
    Last edited by Borges; 12-22-2015 at 01:47 PM.
    Helped you? REP+

  2. #2
    Free User Garkstal's Avatar
    Join Date
    Dec 2013
    Location
    www.garkstalscripts.com
    Posts
    795
    Reputation
    124
    Rep Power
    23
    Now its cool
    http://i.imgur.com/lkWkIMg.png
    ........................Script Name......................
    Profession
    Asura Palace ED + EK
    Characters for sale! | Like Our Facebook! | Sell Tibia Gold

  3. #3
    Free User Dani Scripts's Avatar
    Join Date
    Dec 2013
    Location
    Mexico
    Posts
    558
    Reputation
    56
    Rep Power
    22
    Thanks

  4. #4
    Free User
    Join Date
    Oct 2014
    Posts
    49
    Reputation
    10
    Rep Power
    0
    Good job bro

  5. #5
    Free User
    Join Date
    Feb 2015
    Posts
    6
    Reputation
    10
    Rep Power
    0
    Does it skin corpse of Lord of the Element?

  6. #6
    Free User
    Join Date
    Jun 2015
    Posts
    5
    Reputation
    10
    Rep Power
    0
    I cant get it to work on dragons

  7. #7
    Free User Borges's Avatar
    Join Date
    Feb 2014
    Location
    Brazil
    Posts
    1,469
    Reputation
    205
    Rep Power
    25
    Quote Originally Posted by blastoise View Post
    Does it skin corpse of Lord of the Element?
    yes
    Quote Originally Posted by HerpaDerp View Post
    I cant get it to work on dragons
    it's working, you need obsidian knife on hotkey.
    Helped you? REP+

  8. #8
    Free User
    Join Date
    Feb 2015
    Posts
    6
    Reputation
    10
    Rep Power
    0
    Quote Originally Posted by borges View Post
    yes

    it's working, you need obsidian knife on hotkey.
    I tried. even with Lord of the element's corpse id(8181 and 8182) it doesnt skin.

  9. #9
    Free User Borges's Avatar
    Join Date
    Feb 2014
    Location
    Brazil
    Posts
    1,469
    Reputation
    205
    Rep Power
    25
    Quote Originally Posted by blastoise View Post
    I tried. even with Lord of the element's corpse id(8181 and 8182) it doesnt skin.
    script updated, can you test again?
    Helped you? REP+

  10. #10
    Free User
    Join Date
    Jun 2015
    Posts
    5
    Reputation
    10
    Rep Power
    0
    I have obsidian knife on hotkey f12 (with crosshair) and obsidian knife in main backpack (which is opened), I copypasta your code into Scripter -> Persistent scripts and click apply and enabled(yes). It still doesn't skin, am I missing something?

    edit: I am using the updated script and I have tried with waitFreshBodies as both true and false and it still doesn't work. I really appreciate your effort and I am very thankful for your help =)
    Last edited by HerpaDerp; 07-10-2015 at 05:48 AM.

 

 

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •