vamos ao tutorial:
primeiro declaramos a tabela addItem e já que é uma action, deixamos a linha function onUse também:
local AddItem = {
[2650] = {chance = 100, id = 2547, time = 3600*24*5, storage = 8123},
}
function onUse(cid, item, frompos, item2, topos)
end
Primeira coisa: você usou um for pra achar o id do item usado na tabela, não precisa usar repetições para isso, basta fazer assim:
local AddItem = {
[2650] = {chance = 100, id = 2547, time = 3600*24*5, storage = 8123},
}
function onUse(cid, item, frompos, item2, topos)
local info = AddItem[item.itemid]
end
Pronto, já temos informações de chance/id/delay/storage, pois dessa forma já encontra na hora tal index na tabela.
Agora verificaremos se o player pode usar novamente o item desde a última vez que executou, usando o método de os.time() em storage:
No seu script inicial, não sei se você percebeu, mas essa checagem você fez usando um storage, e depois o player ao receber o item ganha outra storage, portanto o player ia poder usar indefinidamente o item
local AddItem = {
[2650] = {chance = 100, id = 2547, time = 3600*24*5, storage = 8123},
}
function onUse(cid, item, frompos, item2, topos)
local info = AddItem[item.itemid]
if getPlayerStorageValue(cid, info.storage) - os.time() > 0 then
return doPlayerSendCancel(cid, "You have to wait "..(getPlayerStorageValue(cid, info.storage) - os.time()).." seconds to use this item again.")
end
end
Agora, entenda a lógica: se o player passar pela checagem da última vez que ele usou, já adicionamos logo em seguida o storage nele para ter certeza de que ele só usará uma vez, e já tornando tudo mais rápido, o resto do script na parte de adicionar o item. Uma outra coisa que achei curioso, foi o fato de você fazer o random da seguinte maneira: "if math.random(1, 100) == x.chance then", não sei se você percebeu, mas dessa forma, independente do valor que você configurar na tabela AddItem, a chance é de 1%...
Eu particularmente gosto do método "if math.random(X) == math.random(X) then", dessa forma vocÇe obtem esse resultado:
math.random(1) == math.random(1) -> 100% chance de ocorrer math.random(5) == math.random(5) -> 20% chance de ocorrer math.random(10) == math.random(10) -> 10% chance de ocorrer math.random(100) == math.random(100) -> 1% chance de ocorrer math.random(1000) == math.random(1000) -> 0.1% chance de ocorrer
Claro que nesse método você não consegue ter tanta precisão, por exemplo colocar 35% de chance de ocorrer, só se desenvolver uma funçãozinha mais avançada, aqui o script:
local AddItem = {
[2650] = {chance = 100, id = 2547, time = 3600*24*5, storage = 8123},
}
function onUse(cid, item, frompos, item2, topos)
local info = AddItem[item.itemid]
if getPlayerStorageValue(cid, info.storage) - os.time() > 0 then
return doPlayerSendCancel(cid, "You have to wait "..(getPlayerStorageValue(cid, info.storage) - os.time()).." seconds to use this item again.")
end
setPlayerStorageValue(cid, info.storage, os.time() + info.time)
if math.random(info.chance) == math.random(info.chance) then
doPlayerAddItem(cid, info.id, 1)
end
return true
end



info
Grupo: Visconde
Registrado: 22/09/10
Posts: 474
Reputação: +47
Opa, gostaria de saber o porque esse script que eu e um amigo fizemos junta o tempo de todos os player, tipo, a cada vez que ele da use ele soma o novo tempo de espera com o de cada player que deu use, acho que deu de intender.
Vou Explicar como era para funcionar, Era para o player da use uma vez, ai a chance de 1 a 100 dele ganhar o item, e só depois de 5 dias ele pudesse dar use de novo, mesmo ganhando ou não o item, E sim, eu percebi que do jeito que ta o player pode dar use até ganhar o item, e só depois adiciona o storage, por isso quero ajuda de vocês para me corrigir e me explicar no que eu errei para aprender '-'
Script
local AddItem = { [2650] = {chance = 100, id = 2547, time = 3600*24*5, storage = 8123}, } function onUse(cid, item) for i,x in pairs(AddItem) do if item.itemid == i then if getPlayerStorageValue(cid, 8125) - os.time() > 0 then return doPlayerSendCancel(cid, "You need wait [ " .. getPlayerStorageValue(cid, x.storage) - os.time() .. " ] seconds.") else if math.random(1, 100) == x.chance then doPlayerAddItem(cid, 2547, 1) setPlayerStorageValue(cid, x.storage, os.time() + x.time) return true end end end end return true endEditado Setembro 17 por eduardobean