Ir para conteúdo

Featured Replies

Postado
  • Este é um post popular.

Fiz esse sistema a algum tempo e resolvi compartilhar.

 

Geral

 

o Sistema automaticamente irá recolher o loot dos monstros e adicionar ao player que deu mais dano, caso o loot esteja em sua loot list.

 

Código

 

Creaturescript/scripts, crie um novo arquivo chamado autoloot.lua e adicione o código.

 

function onDeath(player, corpse, killer, mostDamageKiller, unjustified, mostDamageUnjustified)
     addEvent(getCorpseLootList, 100, killer, player:getPosition())
     return true
end

 

Crie um novo script chamado autoloot.lua dentro da pasta data, e adicione o código.
 
   Loot = {}
 
    LOOTSTORAGE = 45713
 
    function Loot:create()
        return setmetatable({}, {__index = self})
    end
 
    function Loot:add(id)
        return table.insert(self, id)
    end
 
    function Loot:remove(id)
        local newtb = {}
        for k, v in pairs(self) do
            if (v + 0) ~= (id + 0) then
                table.insert(newtb, v)
            end
        end
        self = setmetatable(newtb, {__index = self})
        return self
    end
 
    function Loot:getString()
        local str = ""
        for k, v in pairs(self) do
            str = str.. v.. ";"
        end
        return str
    end
 
    function Loot:getTable()
        local tb = {}
        for k, v in pairs(self) do
            table.insert(tb, v)
        end
        return tb
    end
 
    function Loot:saveToPlayer(player)
        return doPlayerAddStorageValue(player, LOOTSTORAGE, self:getString())
    end
 
    function getPlayerLootList(player)
        local lootList = getPlayerStorageValue(player, LOOTSTORAGE)
        lootList = lootList:split(";")
        local tableList = {}
        for k, v in pairs(lootList) do
            table.insert(tableList, v)
        end
        return setmetatable(tableList, {__index = Loot})
    end
 
    function getCorpseLootList(player, pos)
        local loot = {}
        local text = ""
        local corpse = Tile(pos):getTopVisibleThing()
        local plits = getPlayerLootList(player):getTable()
 
        for i = 0, corpse:getSize() do
            table.insert(loot, getContainerItem(corpse.uid, i))
        end
 
        for k, v in pairs(plits) do
            for x, y in pairs(loot) do
                if (v + 1) == (y.itemid + 1) then
                    doPlayerAddItem(player, y.itemid, Item(y.uid):getCount())
                    doRemoveItem(y.uid, Item(y.uid):getCount())
                end
            end
        end
        return loot
    end
 
Crie um novo arquivo dentro de talkactions/script chamado autoloot.lua, e adicione o código.

 
   function onSay(cid, words, param)
 
        local var = param:split(",")
        local loots = Loot:create()
        loots = getPlayerLootList(cid)
        if words == "/autoloot" then 
            if var[1] == "add" then
                if getItemIdByName(var[2]) then
                    for k, v in pairs(loots) do
                        if (getItemIdByName(var[2]) + 0 ) == (v + 0) then
                            return cid:sendCancelMessage("Alread added in the loot list.")
                        end
                    end
                    loots:add(getItemIdByName(var[2]))
                    loots:saveToPlayer(cid)
                    return cid:sendCancelMessage("Item ".. var[2].. ", added to loot list.")
                else
                    return cid:sendCancelMessage("This item dont exist.")
                end
            elseif var[1] == "remove" then
                if getItemIdByName(var[2]) then
                    for k, v in pairs(loots) do
                        if (getItemIdByName(var[2]) + 0 ) == (v + 0) then
                            loots = loots:remove(getItemIdByName(var[2]))
                            loots:saveToPlayer(cid)
                            return cid:sendCancelMessage("Item ".. var[2].. ", removed from loot list.")
                        end
                    end
                    return cid:sendCancelMessage("Item are not in loot list.")
                else
                    return cid:sendCancelMessage("Item name dont exist.")
                end
            elseif var[1] == "list" then
                local text = "-- My Loot List --\n\n"
                for k, v in pairs(loots) do
                    text = text.. k..": "..getItemName(v).."\n"
                end
                cid:popupFYI(text)
            end
        end
        return true
    end
 
Dentro dos monstros aonde o script irá funcionar, adicione o código.
 
<script>
<event name="AutoLoot"/>
</script>
 
As TAG XML são essas.
 
Creaturescript.xml
<event script="autoLoot.lua" name="AutoLoot" type="death"/>
 
Talkactions.xml
<talkaction words="/autoloot" separator=" " script="autoloot.lua" />
 
OBS: No meu servidor eu fiz um novo sistema de storages, As funções são "doPlayerAddStorageValue e getPlayerStorageValue", você só precisa mudar o nome da função pois o corpo dela é o mesmo, então mude isso.
 
Caso tenha esquecido de algo ou algum problema com o código me avise.

Editado por SuggestName (veja o histórico de edições)

O mesmo BananaFight, mais com um novo Nick.

 

 
Abra sua mente, sangue suga não vive sem um hospedeiro, Não faça script para os outros, ensine-os a fazer.
Postado

Já um tutorial desse simplificado no tibiaking :( mas valeu a intenção

Amigo, não sei se já existe um tutorial deste mais é sempre bom outro...

É sempre bom ver conteúdo da TFS 1.0 pelo fórum, as pessoas hoje em dia só se mantém na antiga...

Bruno Carvalho / Ex-Administrador TibiaKing

[email protected]

 

Em 26/12/2016 em 03:47, Spraypaint disse:

A força da alienação vem dessa fragilidade dos indivíduos, quando apenas conseguem identificar o que os separa e não o que os une.

-miltinho

 

wMwSJFE.png?1

 

  • 4 weeks later...

Participe da conversa

Você pode postar agora e se cadastrar mais tarde. Se você tem uma conta, faça o login para postar com sua conta.

Visitante
Responder

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.7k

Informação Importante

Confirmação de Termo