Ir para conteúdo
  • Cadastre-se

Posts Recomendados

Olá Tibia King. Tudo bem ?

Venho hoje pra trazer um script que encontrei em um outro fórum, ele será útil para implementar em seu servidor.

Vamos deixa de conversa fiada e vamos ao que interessa. ? 

 

Informações.

Esse script e feito pra você que precisa consultar todas as casas para um item específico. O script procura em todos os itens da casa por um item especificado por você e não importa se ele está oculto na mochila ou em outro lugar porque o encontrará.

 

Script.

 

data\talkactions\scripts\query_houses.lua

Citar

 


function onSay(player, words, param)
    if not player:getGroup():getAccess() then
        return true
    end

    if player:getAccountType() < ACCOUNT_TYPE_GOD then
        return false
    end
  
    local searchItemId = tonumber(param)
  
    for _, house in pairs(Game.getHouses()) do
        for _, tile in pairs(house:getTiles()) do
            for _, item in pairs(tile:getItems()) do
                if item ~= nil then
                    local isFound = false
                    if item:isContainer() then
                        local items = item:getItemsById(searchItemId)
                        isFound = #items > 0
                    else
                        isFound = item:getId() == searchItemId
                    end
                  
                    if isFound then
                        local position = item:getPosition()
                        player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Item position is: " .. position.x .. ", " .. position.y .. ", " .. position.z .. ".")
                    end
                end
            end         
        end
    end
  
    return false
end

 

<talkaction words="/queryhouses" separator=" " script="query_houses.lua" />

data\lib\core\container.lua (Coloque isto ao final do arquivo)

Citar

function Container.getItemsById(self, itemId)
    local list = {}
    for index = 0, (self:getSize() - 1) do
        local item = self:getItem(index)
        if item then
            if item:isContainer() then
                local rlist = item:getItemsById(itemId)
                if type(rlist) == 'table' then
                    for _, v in pairs(rlist) do
                        table.insert(list, v)
                    end
                end
            else
                if item:getId() == itemId then
                    table.insert(list, item)
                end
            end
        end
    end
    return list
end

 

Comando:  /queryhouses 3082

Para consultar por um ID de item.

1586174580897.png.b9fb8b5278690e8bdc1d271da74a7dbc.png

 

Créditos.

Erikas Kontenis - OTLAND 95%

@amoxicilina 5% - por trazer pra cá. rs'

 

Link para o post
Compartilhar em outros sites

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

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emojis são permitidos.

×   Seu link foi automaticamente incorporado.   Mostrar como link

×   Seu conteúdo anterior foi restaurado.   Limpar o editor

×   Não é possível colar imagens diretamente. Carregar ou inserir imagens do URL.

  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

  • Conteúdo Similar

    • Por amoxicilina
      Olá Kings, venho aqui trazer uma TalkAction pra você comprar premium account, sei que pode ser algo meio inútil por existir a store.
      Então vamos script:
       
       
    • Por Rodrigo Querobim
      Olá gostaria de um script para quando o player usa-se comando !reward ele poderia selecionar qual varinha de treinamento ele queria e apenas 1 por player.

      OBS: Consegui esse script mas não está do jeito que estou tentando fazer, e o script esta dando varinha infinitamente toda vez que usa o comando "!wand".
       
      local dailyWand = TalkAction("!wand")   function dailyWand.onSay(player, words, param)     local storage = 556655001     local getStor, osTime = player:getStorageValue(storage), os.time()     if ((osTime <= getStor) or (getStor == -1)) then         player:addItem(28557, 500)         player:setStorageValue(storage, osTime + (60 * 60 * 24))     else         player:sendCancel("You can only use this command once every 24 hours.")     end       return false end   dailyWand:register()
    • Por najatheus
      Sistema funciona da seguinte forma, ao digitar : !aura on, a aura do player vai ligar, enquanto ela estiver ligada o player vai ficar regenerando a vida dele, ao digitar : !aura off, ela vai desligar e o player vai parar de regenerar a vida dele, vou estar deixando um video aqui em baixo 

       Agora vamos colocar o codigo

      Em data/talkactions/script/, crie um arquivo chamado aura.lua, e coloque isso dentro dele :
       
      local config_aurea = { effect = 4; -- efeito que vai ficar girando no player effect_health = 162; -- efeito qnd curar o player level_use = { -- level que vai ser usado (min/max) min = 1, max = 600, } ; health = 10; -- tanto que vai curar por time configurado pos_aurea = { -- não mexa [1] = {x = 0, y = -1}; [2] = {x = 1, y = -1}; [3] = {x = 1, y = 0}; [4] = {x = 1, y = 1}; [5] = {x = 0, y = 1}; [6] = {x = -1, y = 1}; [7] = {x = -1, y = 0}; [8] = {x = -1, y = -1}; }; storage_pos = 1547637649; -- não mexa e nem repita esse valor em outro script!! storage = 165477963; -- não mexa e nem repita esse valor em outro script!! tempo_aurea = 100; -- tempo da aurea para passar em cada posição } local function calculePosAurea(player_uid) local player = Player(player_uid) if(not(player))then return(nil) end if(player:getStorageValue(config_aurea.storage) <= 0)then return(nil) end if(player:getStorageValue(config_aurea.storage_pos) >= 8)then player:setStorageValue(config_aurea.storage_pos, 0) end player:setStorageValue(config_aurea.storage_pos, player:getStorageValue(config_aurea.storage_pos) + 1) return(player:getStorageValue(config_aurea.storage_pos)) end local function posAurea(player_uid) local player = Player(player_uid) if(not(player))then return(nil) end if(player:getStorageValue(config_aurea.storage) <= 0)then return(nil) end local pos_x = player:getPosition().x local pos_y = player:getPosition().y local pos_z = player:getPosition().z local aa = calculePosAurea(player_uid) local pos = Position(pos_x + config_aurea.pos_aurea[aa].x, pos_y + config_aurea.pos_aurea[aa].y, pos_z) if(not(pos))then return(nil) end return(pos) end local function aurea(player_uid) local player = Player(player_uid) if(not(player))then return(nil) end if(player:getStorageValue(config_aurea.storage) <= 0)then return(nil) end player:addHealth(config_aurea.health) player:getPosition():sendMagicEffect(config_aurea.effect_health) local position = posAurea(player_uid) position:sendMagicEffect(config_aurea.effect) addEvent(aurea, config_aurea.tempo_aurea, player_uid) end function onSay(player, words, param) if(words == "!aura on")then if(player:getLevel() > config_aurea.level_use.max)then return(not(player:sendTextMessage(MESSAGE_STATUS_SMALL, player:getName() .. " seu level(" .. player:getLevel() .. ") precisa ser maior(" .. config_aurea.level_use.max))) end if(player:getLevel() < config_aurea.level_use.min)then return(not(player:sendTextMessage(MESSAGE_STATUS_SMALL, player:getName() .. " seu level(" .. player:getLevel() .. ") precisa ser menor(" .. config_aurea.level_use.max))) end if(player:getStorageValue(config_aurea.storage) >= 1)then return(not(player:sendTextMessage(MESSAGE_STATUS_SMALL, player:getName() .. " Você ja esta com a aurea ligada"))) end player:setStorageValue(config_aurea.storage, 1) player:setStorageValue(config_aurea.storage_pos, 0) aurea(player.uid) elseif(words == "!aura off")then player:setStorageValue(config_aurea.storage, 0) end return(false) end
       
      Agora em data/talkactions/talkactions.xml, abra ele e coloque :

       
      <talkaction words="!aura on;!aura off" script="aura.lua"/>
      Agora em data/creaturescript/script/login.lua, abra ele e embaixo de :
       
      player:sendTextMessage(MESSAGE_STATUS_DEFAULT, loginStr)
      Coloque : 
       
      player:setStorageValue(165477963, 0) player:setStorageValue(1547637649, 0)
       
      Creditos : Sr. Naja

      20210927_210547.mp4  
    • Por CaduGTX
      Olá, eu e um amigo fizemos esse script para limpar as casas automaticamente, era um script pessoal mas resolvi postar.
      O Script foi feito em revscript, se for usar da forma antiga, terá que adaptar.

      Basta adicionar um arquivo lua na sua pasta de talkactions:
       
      local function doCheckHouses() local registros = db.storeQuery( "SELECT `houses`.`owner`, `houses`.`id` FROM `houses`,`players` WHERE `houses`.`owner` != 0 AND `houses`.`owner` = `players`.`id`;") if registros ~= false then local count = 0 repeat count = count + 1 local owner = result.getNumber(registros, "owner") local houseId = result.getNumber(registros, "id") local house = House(houseId) if house and (owner > 0) then print(house:getName()) house:setOwnerGuid(0) end until not result.next(registros) result.free(registros) end print('Houses Cleaned') return true end local limparhouse = TalkAction("/limparhouse") function limparhouse.onSay(player, words, param) if not player:getGroup():getAccess() or player:getAccountType() < ACCOUNT_TYPE_GOD then player:sendCancelMessage("Only admins can use this command.") return true end addEvent(doCheckHouses, 10 * 1000) player:sendCancelMessage("Cleaning houses.") return true end limparhouse:separator(" ") limparhouse:register()  
      Para usar é bem simples, basta usar o comando /limparhouse, e dentro de alguns instantes todas as casas serão limpas.

      Creditos:
      -CaduGTX
      -JameesDavid
       
    • Por Tricoder
      SCREENSHOT
      http://3.1m.yt/Zwo99Sdx.png
      http://4.1m.yt/oG_cwli8u.png
      ______________________________________________ COMANDOS
      !autoloot add, itemId ou name -- Adicionando um item na lista !autoloot remove, itemId or name -- Remover um item da lista !autoloot show -- Mostrar a lista do autoLoot !autoloot clear -- Limpar a lista do autoLoot ______________________________________________ SCRIPT data/global.lua
      -- AutoLoot config AUTO_LOOT_MAX_ITEMS = 5 -- Reserved storage AUTOLOOT_STORAGE_START = 10000 AUTOLOOT_STORAGE_END = AUTOLOOT_STORAGE_START + AUTO_LOOT_MAX_ITEMS -- AutoLoot config end talkactions/talkactions.xml
      <talkaction words="!autoloot" separator=" " script="autoloot.lua"/> talkactions/scripts/autoloot.lua
      function onSay(player, words, param) local split = param:split(",") local action = split[1] if action == "add" then local item = split[2]:gsub("%s+", "", 1) local itemType = ItemType(item) if itemType:getId() == 0 then itemType = ItemType(tonumber(item)) if itemType:getId() == 0 then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "There is no item with that id or name.") return false end end local itemName = tonumber(split[2]) and itemType:getName() or item local size = 0 for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do local storage = player:getStorageValue(i) if size == AUTO_LOOT_MAX_ITEMS then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "The list is full, please remove from the list to make some room.") break end if storage == itemType:getId() then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, itemName .." is already in the list.") break end if storage <= 0 then player:setStorageValue(i, itemType:getId()) player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, itemName .." has been added to the list.") break end size = size + 1 end elseif action == "remove" then local item = split[2]:gsub("%s+", "", 1) local itemType = ItemType(item) if itemType:getId() == 0 then itemType = ItemType(tonumber(item)) if itemType:getId() == 0 then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "There is no item with that id or name.") return false end end local itemName = tonumber(split[2]) and itemType:getName() or item for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do if player:getStorageValue(i) == itemType:getId() then player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, itemName .." has been removed from the list.") player:setStorageValue(i, 0) return false end end player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, itemName .." was not founded in the list.") elseif action == "show" then local text = "-- Auto Loot List --\n" local count = 1 for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do local storage = player:getStorageValue(i) if storage > 0 then text = string.format("%s%d. %s\n", text, count, ItemType(storage):getName()) count = count + 1 end end if text == "" then text = "Empty" end player:showTextDialog(1950, text, false) elseif action == "clear" then for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do player:setStorageValue(i, 0) end player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "The autoloot list has been cleared.") else player:sendTextMessage(MESSAGE_STATUS_CONSOLE_BLUE, "Use the commands: !autoloot {add, remove, show, clear}") end return false end creaturescripts/creaturescripts.xml
      <event type="kill" name="AutoLoot" script="autoloot.lua" /> creaturescripts/scripts/autoloot.lua
      local function scanContainer(cid, position) local player = Player(cid) if not player then return end local corpse = Tile(position):getTopDownItem() if not corpse then return end if corpse:getType():isCorpse() and corpse:getAttribute(ITEM_ATTRIBUTE_CORPSEOWNER) == cid then for i = corpse:getSize() - 1, 0, -1 do local containerItem = corpse:getItem(i) if containerItem then for i = AUTOLOOT_STORAGE_START, AUTOLOOT_STORAGE_END do if player:getStorageValue(i) == containerItem:getId() then containerItem:moveTo(player) end end end end end end function onKill(player, target) if not target:isMonster() then return true end addEvent(scanContainer, 100, player:getId(), target:getPosition()) return true end creaturescripts/scripts/login.lua
      player:registerEvent("AutoLoot") ______________________________________________ CRÉDITOS
      Printer
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo