[Lua] Autoloot system for OTHIRE

Discussion in 'Mods & Lua Functions' started by LaloHao, Oct 31, 2016.

  1. LaloHao

    LaloHao Member

    Joined:
    Sep 14, 2008
    Messages:
    73
    I just finished this, so its not fully tested, but everything seems to be working so far.

    When you open the corpse it grabs what's in your autoloot list.
    [​IMG]

    Grabbed the code from here https://otland.net/threads/autoloot.91385/ and converted stuff to tables

    Example of command usage
    !autoloot list
    !autoloot clean
    !autoloot add:gold coin
    !autoloot remove:gold coin

    !autoloot with no argument toggles the display of messages when autolooting stuff.

    PHP:
    -- Load Autoloot System
    dofile
    (getDataDir() .. 'lib/autoloot.lua')

    PHP:
    STORAGE_AUTOLOOTMESSAGE 31009
    STORAGE_AUTOLOOT 
    = {75757576757775787579}
    STORAGE_AUTOLOOTLIMIT 5

    function getContents(uid)
       
    local loot= {}, 0

       
    while getContainerSize(uid) do
          
    local v getContainerItem(uidi)
          
    table.insert(lootv)
          
    1
       end

       
    return loot
    end

    function getAutolootList(cid)
       
    local list, vcount = {}, 00
       
    for _k in ipairs(STORAGE_AUTOLOOT) do
          
    getPlayerStorageValue(cidk)
          if 
    0 then
             count 
    count 1
          end
          table
    .insert(list, v)
       
    end
       
    return list, count
    end

    function AutolootLootItem(ciditemmsg)
       
    local Item item
       local count 
    Item.type
       
    if count 1 then
          count 
    1
       end
       doRemoveItem
    (item.uid)
       
    doPlayerAddItem(cidItem.itemidcount)
       
    Item getItemNameById(Item.itemid)
       if 
    msg then
          doPlayerSendTextMessage
    (cidMESSAGE_INFO_DESCRmsg..count.." "..Item)
       
    end
    end

    function isAutolootShowEnabled(cid)
       return 
    getPlayerStorageValue(cid,STORAGE_AUTOLOOTMESSAGE) and 1
    end

    function AutolootToggleShow(cid)
       if 
    getPlayerStorageValue(cidSTORAGE_AUTOLOOTMESSAGE) == -1 then
          setPlayerStorageValue
    (cidSTORAGE_AUTOLOOTMESSAGE1)
          
    doPlayerSendTextMessage(cidMESSAGE_INFO_DESCR"Showing autoloot.")
       else
          
    setPlayerStorageValue(cidSTORAGE_AUTOLOOTMESSAGE, -1)
          
    doPlayerSendTextMessage(cidMESSAGE_INFO_DESCR"Hiding autoloot.")
       
    end
    end

    function AutolootPrint(cidmsg)
       
    doPlayerSendTextMessage(cidMESSAGE_INFO_DESCRmsg)
    end

    function AutolootPrintItems(ciditemsbullet)
       for 
    _v in ipairs(items) do
          if 
    0 then
             AutolootPrint
    (cidbullet..getItemNameById(v))
          
    end
       end
    end

    function AutolootAddItem(ciditemname)
       for 
    _,v in ipairs(STORAGE_AUTOLOOT) do
          if 
    getPlayerStorageValue(cidv) == -1 then
             setPlayerStorageValue
    (cidvitem)
             
    AutolootPrint(cid">>"..name.."<< added to autoloot. Slot:".._)
             break
          
    end
       end
    end

    function AutolootRemoveItem(ciditemname)
       for 
    _,v in ipairs(STORAGE_AUTOLOOT) do
          if 
    getPlayerStorageValue(cidv) == item then
             setPlayerStorageValue
    (cidv, -1)
             
    AutolootPrint(cid">>"..name.."<< removed from autoloot.")
             break
          
    end
       end
    end

    function AutolootClean(cid)
       for 
    _k in ipairs(STORAGE_AUTOLOOT) do
          
    setPlayerStorageValue(cidk, -1)
       
    end
    end

    function AutolootGetItemFromParam(rest)
       
    local item tonumber(rest)
       
    local name getItemIdByName(rest)
       
    local err false
       
    if item then
          
    -- AutolootPrint(cid"Data triggered by Item: ".. item)
       elseif 
    name then
          item 
    name
          
    -- AutolootPrint(cid"Data triggered by Name: ".. name)
       else
          
    err "Not valid item."
       
    end

       
    if isItemContainer(itemthen
          err 
    "This item can not be autolooted."
       
    end

       
    if not isItemMoveable(itemthen
          err 
    "This item can not be autolooted."
       
    end
       
    return itemerr
    end

    PHP:
    <talkaction words="!autoloot" filter="first word" access="0" script="autoloot.lua"/>

    PHP:
    local limit 5

    function onSay(cidwordsparam)
       if 
    param == "" then
          AutolootToggleShow
    (cid)
          return 
    false
       end

       local help 
    "Help"
       
    local expl string.explode(param':')
       
    local actionrest expl[1], expl[2]
       -- 
    doPlayerSendTextMessage(cidMESSAGE_INFO_DESCR"Param: ".. param)
       -- 
    doPlayerSendTextMessage(cidMESSAGE_INFO_DESCR"1: "..expl[1].." 2: ".. expl[2])

       
    local lootListItems getAutolootList(cid)

       
    local bulletItem "----->"
       
    if (action:lower() == "list"then
          AutolootPrint
    (cid"Autoloot list: ("..Items..") Items.")
          
    AutolootPrintItems(cidlootListbulletItem)
          return 
    false
       
    elseif (action:lower() == "clean"then
          AutolootClean
    (cid)
          
    AutolootPrint(cid"Autoloot list cleaned.")
          return 
    false
       
    else
          if 
    not rest then
             AutolootPrint
    (cidhelp)
             return 
    false
          end

          local item
    err AutolootGetItemFromParam(rest)
          if 
    err then
             AutolootPrint
    (ciderr)
             return 
    false
          end

          local name 
    getItemNameById(item)
          if (
    action:lower() == "add"then
             
    if (Items >= limitthen
                AutolootPrint
    (cid"You already have " .. limit .. " autolooting items.")
                return 
    false
             end

             
    if isInArray(lootListitemthen
                AutolootPrint
    (cid"This item is already in your list.")
                return 
    false
             end

             AutolootAddItem
    (ciditemname)
          elseif (
    action:lower() == "remove"then
             
    if (Items 1then
                AutolootPrint
    (cid"You dont have any item added.")
                return 
    false
             end

             
    if not isInArray(lootListitemthen
                AutolootPrint
    (cid">>"..name.."<< is not in the list.")
                return 
    false
             end

             AutolootRemoveItem
    (ciditemname)
          
    end
       end
       
    return false
    end

    PHP:
    function onUse(ciditemfromPositionitemExtoPosition)
       
    local corpse item.uid
       
    if not isContainer(corpsethen
          
    return false
       end
       local lootMessage 
    "Autolooted: "

       
    local lootListItems getAutolootList(cid)

       if 
    Items == 0 then
          
    return false
       end

       local loot 
    getContents(corpse)
       
    local party getPartyMembers(cid)

       if 
    party then
          
    if lastHit then
             
    for _pid in ipairs(getPartyMembers(cid)) do
                if 
    isAutolootShowEnabled(pidthen
                   
    -- Print(loot)
                
    end
             end
          end
       
    else
          
    local itemcount
          
    for v in ipairs(loot) do
             
    item loot[v].itemid
             
    if isInArray(lootListitemthen
                
    if isAutolootShowEnabled(cidthen
                   AutolootLootItem
    (cidloot[v], lootMessage)
                else
                   
    AutolootLootItem(cidloot[v])
                
    end
             end
          end
       end
       
    return false
    end

    I extracted the corpses id's with a script from data/monster/*.xml so it only works on fresh corpses, you are free to add bags/backpacks/chests or the rest of the not so fresh corpses.
    PHP:
        <!-- Autoloot corpses -->
        <
    action itemid="3052" script="autoloot.lua" />
        <
    action itemid="2979" script="autoloot.lua" />
        <
    action itemid="2916" script="autoloot.lua" />
        <
    action itemid="4280" script="autoloot.lua" />
        <
    action itemid="2857" script="autoloot.lua" />
        <
    action itemid="3016" script="autoloot.lua" />
        <
    action itemid="3016" script="autoloot.lua" />
        <
    action itemid="3128" script="autoloot.lua" />
        <
    action itemid="3016" script="autoloot.lua" />
        <
    action itemid="3016" script="autoloot.lua" />
        <
    action itemid="3128" script="autoloot.lua" />
        <
    action itemid="2876" script="autoloot.lua" />
        <
    action itemid="3034" script="autoloot.lua" />
        <
    action itemid="3119" script="autoloot.lua" />
        <
    action itemid="3016" script="autoloot.lua" />
        <
    action itemid="2952" script="autoloot.lua" />
        <
    action itemid="2881" script="autoloot.lua" />
        <
    action itemid="3034" script="autoloot.lua" />
        <
    action itemid="2876" script="autoloot.lua" />
        <
    action itemid="3016" script="autoloot.lua" />
        <
    action itemid="2940" script="autoloot.lua" />
        <
    action itemid="2376" script="autoloot.lua" />
        <
    action itemid="2967" script="autoloot.lua" />
        <
    action itemid="2820" script="autoloot.lua" />
        <
    action itemid="1740" script="autoloot.lua" />
        <
    action itemid="2931" script="autoloot.lua" />
        <
    action itemid="3043" script="autoloot.lua" />
        <
    action itemid="2979" script="autoloot.lua" />
        <
    action itemid="3052" script="autoloot.lua" />
        <
    action itemid="2979" script="autoloot.lua" />
        <
    action itemid="2916" script="autoloot.lua" />
        <
    action itemid="4280" script="autoloot.lua" />
        <
    action itemid="2857" script="autoloot.lua" />
        <
    action itemid="3016" script="autoloot.lua" />
        <
    action itemid="3016" script="autoloot.lua" />
        <
    action itemid="3128" script="autoloot.lua" />
        <
    action itemid="3016" script="autoloot.lua" />
        <
    action itemid="3016" script="autoloot.lua" />
        <
    action itemid="3128" script="autoloot.lua" />
        <
    action itemid="2876" script="autoloot.lua" />
        <
    action itemid="3034" script="autoloot.lua" />
        <
    action itemid="3119" script="autoloot.lua" />
        <
    action itemid="3016" script="autoloot.lua" />
        <
    action itemid="2952" script="autoloot.lua" />
        <
    action itemid="2881" script="autoloot.lua" />
        <
    action itemid="3034" script="autoloot.lua" />
        <
    action itemid="2876" script="autoloot.lua" />
        <
    action itemid="3016" script="autoloot.lua" />
        <
    action itemid="4307" script="autoloot.lua" />
        <
    action itemid="3049" script="autoloot.lua" />
        <
    action itemid="4259" script="autoloot.lua" />
        <
    action itemid="2817" script="autoloot.lua" />
        <
    action itemid="2960" script="autoloot.lua" />
        <
    action itemid="1496" script="autoloot.lua" />
        <
    action itemid="3128" script="autoloot.lua" />
        <
    action itemid="2876" script="autoloot.lua" />
        <
    action itemid="4262" script="autoloot.lua" />
        <
    action itemid="2843" script="autoloot.lua" />
        <
    action itemid="4993" script="autoloot.lua" />
        <
    action itemid="4326" script="autoloot.lua" />
        <
    action itemid="4298" script="autoloot.lua" />
        <
    action itemid="2935" script="autoloot.lua" />
        <
    action itemid="3128" script="autoloot.lua" />
        <
    action itemid="2987" script="autoloot.lua" />
        <
    action itemid="4277" script="autoloot.lua" />
        <
    action itemid="2920" script="autoloot.lua" />
        <
    action itemid="4301" script="autoloot.lua" />
        <
    action itemid="2940" script="autoloot.lua" />
        <
    action itemid="2376" script="autoloot.lua" />
        <
    action itemid="2967" script="autoloot.lua" />
        <
    action itemid="2820" script="autoloot.lua" />
        <
    action itemid="1740" script="autoloot.lua" />
        <
    action itemid="3128" script="autoloot.lua" />
        <
    action itemid="2905" script="autoloot.lua" />
        <
    action itemid="4320" script="autoloot.lua" />
        <
    action itemid="3128" script="autoloot.lua" />
        <
    action itemid="3104" script="autoloot.lua" />
        <
    action itemid="4994" script="autoloot.lua" />
        <
    action itemid="3040" script="autoloot.lua" />
        <
    action itemid="3065" script="autoloot.lua" />
        <
    action itemid="3007" script="autoloot.lua" />
        <
    action itemid="3065" script="autoloot.lua" />
        <
    action itemid="1492" script="autoloot.lua" />
        <
    action itemid="4286" script="autoloot.lua" />
        <
    action itemid="3069" script="autoloot.lua" />
        <
    action itemid="3055" script="autoloot.lua" />
        <
    action itemid="2809" script="autoloot.lua" />
        <
    action itemid="2983" script="autoloot.lua" />
        <
    action itemid="3128" script="autoloot.lua" />
        <
    action itemid="3019" script="autoloot.lua" />
        <
    action itemid="3004" script="autoloot.lua" />
        <
    action itemid="2969" script="autoloot.lua" />
        <
    action itemid="4304" script="autoloot.lua" />
        <
    action itemid="2924" script="autoloot.lua" />
        <
    action itemid="4268" script="autoloot.lua" />
        <
    action itemid="2989" script="autoloot.lua" />
        <
    action itemid="2949" script="autoloot.lua" />
        <
    action itemid="4274" script="autoloot.lua" />
        <
    action itemid="3128" script="autoloot.lua" />
        <
    action itemid="4265" script="autoloot.lua" />
        <
    action itemid="2813" script="autoloot.lua" />
        <
    action itemid="4292" script="autoloot.lua" />
        <
    action itemid="2938" script="autoloot.lua" />
        <
    action itemid="2928" script="autoloot.lua" />
        <
    action itemid="2916" script="autoloot.lua" />
        <
    action itemid="2995" script="autoloot.lua" />
        <
    action itemid="5014" script="autoloot.lua" />
        <
    action itemid="4994" script="autoloot.lua" />
        <
    action itemid="4271" script="autoloot.lua" />
        <
    action itemid="2913" script="autoloot.lua" />
        <
    action itemid="3010" script="autoloot.lua" />
        <
    action itemid="2886" script="autoloot.lua" />
        <
    action itemid="3031" script="autoloot.lua" />
        <
    action itemid="2940" script="autoloot.lua" />
        <
    action itemid="3128" script="autoloot.lua" />
        <
    action itemid="2902" script="autoloot.lua" />
        <
    action itemid="2897" script="autoloot.lua" />
        <
    action itemid="2914" script="autoloot.lua" />
        <
    action itemid="2972" script="autoloot.lua" />
        <
    action itemid="3128" script="autoloot.lua" />
        <
    action itemid="4992" script="autoloot.lua" />
        <
    action itemid="3052" script="autoloot.lua" />
        <
    action itemid="2820" script="autoloot.lua" />
        <
    action itemid="3068" script="autoloot.lua" />
        <
    action itemid="3119" script="autoloot.lua" />
        <
    action itemid="2849" script="autoloot.lua" />
        <
    action itemid="2998" script="autoloot.lua" />
        <
    action itemid="4280" script="autoloot.lua" />
        <
    action itemid="2848" script="autoloot.lua" />
        <
    action itemid="4253" script="autoloot.lua" />
        <
    action itemid="2860" script="autoloot.lua" />
        <
    action itemid="2826" script="autoloot.lua" />
        <
    action itemid="1496" script="autoloot.lua" />
        <
    action itemid="2881" script="autoloot.lua" />
        <
    action itemid="3128" script="autoloot.lua" />
        <
    action itemid="2813" script="autoloot.lua" />
        <
    action itemid="2871" script="autoloot.lua" />
        <
    action itemid="2985" script="autoloot.lua" />
        <
    action itemid="2967" script="autoloot.lua" />
        <
    action itemid="2862" script="autoloot.lua" />
        <
    action itemid="2945" script="autoloot.lua" />
        <
    action itemid="3001" script="autoloot.lua" />
        <
    action itemid="3037" script="autoloot.lua" />
        <
    action itemid="2952" script="autoloot.lua" />
        <
    action itemid="2839" script="autoloot.lua" />
        <
    action itemid="3065" script="autoloot.lua" />
        <
    action itemid="3022" script="autoloot.lua" />
        <
    action itemid="3028" script="autoloot.lua" />
        <
    action itemid="2864" script="autoloot.lua" />
        <
    action itemid="2824" script="autoloot.lua" />
        <
    action itemid="2830" script="autoloot.lua" />
        <
    action itemid="2899" script="autoloot.lua" />
        <
    action itemid="2893" script="autoloot.lua" />
        <
    action itemid="4323" script="autoloot.lua" />
        <
    action itemid="3128" script="autoloot.lua" />
        <
    action itemid="3046" script="autoloot.lua" />
        <
    action itemid="3025" script="autoloot.lua" />
        <
    action itemid="3013" script="autoloot.lua" />
        <
    action itemid="2835" script="autoloot.lua" />
        <
    action itemid="4289" script="autoloot.lua" />
        <
    action itemid="2889" script="autoloot.lua" />
        <
    action itemid="2806" script="autoloot.lua" />
        <
    action itemid="2981" script="autoloot.lua" />
        <
    action itemid="3113" script="autoloot.lua" />
        <
    action itemid="4283" script="autoloot.lua" />
        <
    action itemid="3065" script="autoloot.lua" />
        <
    action itemid="3128" script="autoloot.lua" />
        <
    action itemid="2956" script="autoloot.lua" />
        <
    action itemid="4256" script="autoloot.lua" />
        <
    action itemid="2866" script="autoloot.lua" />
        <
    action itemid="4317" script="autoloot.lua" />
        <
    action itemid="4314" script="autoloot.lua" />
        <
    action itemid="2857" script="autoloot.lua" />
        <
    action itemid="4310" script="autoloot.lua" />
        <
    action itemid="2908" script="autoloot.lua" />
        <
    action itemid="4295" script="autoloot.lua" />
        <
    action itemid="3128" script="autoloot.lua" />
     
    strutZ, login12 and Peonso like this.
  2. SnorkY

    SnorkY Well-Known Member

    Joined:
    Nov 28, 2007
    Messages:
    1,227
    Very nice scripts! I don't see any use for this, though. Looting thing's is a part of the game and in some instances it requires some brain and fast hands.
     
    LaloHao likes this.
  3. LaloHao

    LaloHao Member

    Joined:
    Sep 14, 2008
    Messages:
    73
    Technically anything is part of the game and everything custom is extra (maps different from RL tibia or OTCLIENT for example), but that would be a phisophical matter and i dont know if we can discuss it here

    There are many games that have this feature, and i always wanted to make it when i first hosted servers back in 7.5 and didnt have any knowledge of programming, you can limit it to 1 autoloot item, or sell autoloot slots for cash, idk, still i find it very cool and i wanted to share.

    Cheers
     
    SnorkY likes this.
  4. SnorkY

    SnorkY Well-Known Member

    Joined:
    Nov 28, 2007
    Messages:
    1,227
    Yeah, it is a cool function.
     
  5. login12

    login12 void newbie scripter()

    Joined:
    Feb 26, 2011
    Messages:
    140
    Its so very nice!
    So easy configurable, good job ;)
     
  6. LaloHao

    LaloHao Member

    Joined:
    Sep 14, 2008
    Messages:
    73
    It doesn't find items in bags, but with this function it does
    PHP:
    function getContents2(uid)
       
    local loot= {}, 0

       
    while getContainerSize(uid) do
          
    local v getContainerItem(uidi)
          if 
    isContainer(v.uidthen
             local subcontainer 
    getContents(v.uid)
             for 
    __vv in ipairs(subcontainer) do
                
    table.insert(lootvv)
             
    end
          
    else
             
    table.insert(lootv)
          
    end
          i 
    1
       end

       
    return loot
    end

    Use
    PHP:
       local loot getContents2(corpse)
    Instead of
    PHP:
       local loot getContents(corpse)
    in actions/scripts/autoloot.lua
     

Share This Page