Ir para conteúdo
  • Cadastre-se

(Resolvido)Script de chuva de itens.


Ir para solução Resolvido por Dwarfer,

Posts Recomendados

Olá tibiaking, tudo bem? então, eu queria um script de chuva de ITENS, ao falar /chuvadeitens, 2160 aparecia golds em certos LOCAIS de EARTH. agradeceria...

 

Servidor : 860. TFS 0.4

 

 

 

 

 

                                                                                                                                                     tumblr_nwmv2z4VEM1ujiquxo1_100.gif.2db64bb36f0f565e68ff2a90cb98f439.gif.59f4c4cf234d2f6906621cac0553a862.gif

https://github.com/italoxxx1

 

Link para o post
Compartilhar em outros sites
  • Solução

Coloquei para não criar mais de um item em uma mesma posição, exceto se for um item juntável e você queira que a quantidade seja aleatória.

 

Em data/talkactions/scripts crie o arquivo rainitems.lua e cole isto dentro:

 

Spoiler

RAIN_CONFIG = {
    
    broadcast_message = true, -- 'true' para enviar a mensagem da chuva para o servidor, 'false' para não enviar
    
    stackable_items = { -- configuração dos itens juntáveis (caso queira que a quantidade seja diferente de 1, será uma quantidade entre o min e o max)
        [2160] = {min = 2, max = 100}, -- [id do item] = {min = mínima quantidade, max = máxima quantidade}
        [2152] = {min = 2, max = 10}
    },
    
    number_of_items = 5, -- número de itens que aparecem com a chuva
                         -- Caso queira que crie em todas as posições, coloque -1
                         -- Caso o número de itens seja maior que a quantidade de posições, prevalece a quantidade de posições
    
    positions = { -- posições possíveis dos itens aparecerem
        [1] = {x = 1, y = 1, z = 1},
        [2] = {x = 1, y = 1, z = 1},
        [3] = {x = 1, y = 1, z = 1},
        [4] = {x = 1, y = 1, z = 1},
        [5] = {x = 1, y = 1, z = 1},
        [6] = {x = 1, y = 1, z = 1},
        [7] = {x = 1, y = 1, z = 1},
        [8] = {x = 1, y = 1, z = 1}
    }
}

function onSay(cid, words, param, channel)
    if param == "" or not tonumber(param) then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Enter item id.")
        return true
    end
    local item_id = tonumber(param)
    local check = getItemDescriptionsById(item_id)
    if not check then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Item id not found.")
        return true
    end
    local item_name = check.name
    local check_item, counter = RAIN_CONFIG.stackable_items[item_id], 0
    local tab_pos, tab_pos_index, positions_count = {}, {}, #RAIN_CONFIG.positions
    local items_count = (positions_count < RAIN_CONFIG.number_of_items) and positions_count or RAIN_CONFIG.number_of_items
    if not isInArray({positions_count, -1}, items_count) then
        repeat
            local rand = math.random(1, positions_count) 
            if not isInArray(tab_pos_index, rand) then
                table.insert(tab_pos_index, rand)
                table.insert(tab_pos, RAIN_CONFIG.positions[rand])
                counter = counter + 1
            end
        until counter == items_count
    else
        tab_pos = RAIN_CONFIG.positions
    end
    for _, rain_pos in pairs(tab_pos) do
        doSendDistanceShoot({x = rain_pos.x - math.random(4, 6), y = rain_pos.y - 5, z = rain_pos.z}, rain_pos, CONST_ANI_FIRE)
        for i, eff in pairs({CONST_ME_GROUNDSHAKER, CONST_ME_TUTORIALARROW, CONST_ME_TUTORIALSQUARE}) do
            doSendMagicEffect(rain_pos, eff)
        end
        addEvent(function()
            local create_count = check_item and math.random(check_item.min, check_item.max) or 1
            doCreateItem(item_id, create_count, rain_pos)
        end, 100)
    end
    if RAIN_CONFIG.broadcast_message then
        doBroadcastMessage("Rain of " .. item_name .. " right now!\nGet as much as you can!", MESSAGE_EVENT_ADVANCE)
    end
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You caused a rain of " .. item_name .. "!")
    return true
end

 

 

Em talkactions.xml, adicione a tag:

<talkaction words="/rain" access="4" event="script" value="rainitems.lua"/>

Edite o "access" como quiser. 

 

Utilização do comando: /rain [id do item]

 

Ex.: /rain 2160

 

O resultado será algo assim:

 

CzjsJfj.gif

Contato:

 

Link para o post
Compartilhar em outros sites
9 horas atrás, Dwarfer disse:

Coloquei para não criar mais de um item em uma mesma posição, exceto se for um item juntável e você queira que a quantidade seja aleatória.

 

Em data/talkactions/scripts crie o arquivo rainitems.lua e cole isto dentro:

 

  Ocultar conteúdo


RAIN_CONFIG = {
    
    broadcast_message = true, -- 'true' para enviar a mensagem da chuva para o servidor, 'false' para não enviar
    
    stackable_items = { -- configuração dos itens juntáveis (caso queira que a quantidade seja diferente de 1, será uma quantidade entre o min e o max)
        [2160] = {min = 2, max = 100}, -- [id do item] = {min = mínima quantidade, max = máxima quantidade}
        [2152] = {min = 2, max = 10}
    },
    
    number_of_items = 5, -- número de itens que aparecem com a chuva
                         -- Caso queira que crie em todas as posições, coloque -1
                         -- Caso o número de itens seja maior que a quantidade de posições, prevalece a quantidade de posições
    
    positions = { -- posições possíveis dos itens aparecerem
        [1] = {x = 1, y = 1, z = 1},
        [2] = {x = 1, y = 1, z = 1},
        [3] = {x = 1, y = 1, z = 1},
        [4] = {x = 1, y = 1, z = 1},
        [5] = {x = 1, y = 1, z = 1},
        [6] = {x = 1, y = 1, z = 1},
        [7] = {x = 1, y = 1, z = 1},
        [8] = {x = 1, y = 1, z = 1}
    }
}

function onSay(cid, words, param, channel)
    if param == "" or not tonumber(param) then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Enter item id.")
        return true
    end
    local item_id = tonumber(param)
    local check = getItemDescriptionsById(item_id)
    if not check then
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, "Item id not found.")
        return true
    end
    local item_name = check.name
    local check_item, counter = RAIN_CONFIG.stackable_items[item_id], 0
    local tab_pos, tab_pos_index, positions_count = {}, {}, #RAIN_CONFIG.positions
    local items_count = (positions_count < RAIN_CONFIG.number_of_items) and positions_count or RAIN_CONFIG.number_of_items
    if not isInArray({positions_count, -1}, items_count) then
        repeat
            local rand = math.random(1, positions_count) 
            if not isInArray(tab_pos_index, rand) then
                table.insert(tab_pos_index, rand)
                table.insert(tab_pos, RAIN_CONFIG.positions[rand])
                counter = counter + 1
            end
        until counter == items_count
    else
        tab_pos = RAIN_CONFIG.positions
    end
    for _, rain_pos in pairs(tab_pos) do
        doSendDistanceShoot({x = rain_pos.x - math.random(4, 6), y = rain_pos.y - 5, z = rain_pos.z}, rain_pos, CONST_ANI_FIRE)
        for i, eff in pairs({CONST_ME_GROUNDSHAKER, CONST_ME_TUTORIALARROW, CONST_ME_TUTORIALSQUARE}) do
            doSendMagicEffect(rain_pos, eff)
        end
        addEvent(function()
            local create_count = check_item and math.random(check_item.min, check_item.max) or 1
            doCreateItem(item_id, create_count, rain_pos)
        end, 100)
    end
    if RAIN_CONFIG.broadcast_message then
        doBroadcastMessage("Rain of " .. item_name .. " right now!\nGet as much as you can!", MESSAGE_EVENT_ADVANCE)
    end
    doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_ORANGE, "You caused a rain of " .. item_name .. "!")
    return true
end

 

 

Em talkactions.xml, adicione a tag:


<talkaction words="/rain" access="4" event="script" value="rainitems.lua"/>

Edite o "access" como quiser. 

 

Utilização do comando: /rain [id do item]

 

Ex.: /rain 2160

 

O resultado será algo assim:

 

CzjsJfj.gif

 

Deu esse erro aqui mano...image.thumb.png.1ee503a01ddf3c2f3f8f8f0bc2edb9ec.png

 

 

 

 

 

                                                                                                                                                     tumblr_nwmv2z4VEM1ujiquxo1_100.gif.2db64bb36f0f565e68ff2a90cb98f439.gif.59f4c4cf234d2f6906621cac0553a862.gif

https://github.com/italoxxx1

 

Link para o post
Compartilhar em outros sites

@ITALOx

Vê se você não digitou algo a mais aí sem querer.

Copiei o conteúdo que postei para checar se era algo ao copiar daqui do fórum e, pelo menos aqui, mudou automaticamente a linha:

 [2152] = {min = 2, max = 10}

para

 [2152] = {min = 2, max = 1?0}

colocando aquela "?" no meio. Deve ser algo relacionado à formatação do fórum, não sei.

Dá uma olhada se não apareceu algo assim aí também ou você colocou algo por engano.

Contato:

 

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.

×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo