local storage, ret = 100000
function onUse(cid, item, fromPosition, itemEx, toPosition)
ret = getCreatureStorage(cid, storage)
print(ret)
if doCreatureSetStorage(cid, storage, ret + 1) then
ret = getCreatureStorage(cid, storage)
end
print(ret)
return true
end
.lua Atualizar Valor De Variavel
Por Sofft, 17 de ago. de 2012 em Scripts
info
Grupo: Artesão
Registrado: 03/12/11
Posts: 137
Reputação: +5
Char no Tibia: Surionz

Desse jeito você fez a mesma coisa que eu, setou outro valor na variável.
Ai toda vez antes de um print vou ter que usar isso:
if doCreatureSetStorage(cid, storage, ret + 1) then ret = getCreatureStorage(cid, storage) end
sendo assim é melhor utilizar só:
ret = getCreatureStorage(cid, storage)
pois se o valor da variável alterar imprime o novo valor, se a variável mantiver, o valor continua o mesmo.
info
Grupo: Príncipe
Registrado: 19/08/10
Posts: 4k
Reputação: +1.1k
Gênero: Masculino

function onUse(cid, item, fromPosition, itemEx, toPosition) local function setSto(cid, sto, value) if isCreature(cid) then setPlayerStorageValue(cid, sto, value) return getPlayerStorageValue(cid, sto) else return 0 end end local sto = 999999999 local get_sto = getPlayerStorageValue(cid, sto) doPlayerSendTextMessage(cid, 22, get_sto) get_sto = setSto(cid, sto, get_sto + 1) doPlayerSendTextMessage(cid, 22, get_sto) return true end
assim talvez? n testei mas...
Editado Agosto 17 por Slicer
Ou dá para fazer com co-rotinas, o que é meio inviável, mas bem prático
local sto = 100000
function onUse(cid, item, fromPosition, itemEx, toPosition)
local thread = coroutine.create(function(cid, storage)
print(getCreatureStorage(cid, storage))
end)
local get_sto = getCreatureStorage(cid, storage)
print(get_sto)
doCreatureSetStorage(cid, storage, get_sto + 1)
coroutine.resume(thread, cid, storage)
return true
end
Não havia pensado no método desenvolvido pelo Slicer e é funcional. ![]()
Tem que ser mais claro ao explicar suas dúvidas amigo... Teste assim:
function onUse(cid, item, fromPosition, itemEx, toPosition) local sto = 999999999 local get_sto = getPlayerStorageValue(cid, sto) doPlayerSendTextMessage(cid, 22, get_sto) setPlayerStorageValue(cid,sto,get_sto + 1) doPlayerSendTextMessage(cid, 22, get_sto + 1) return true end
Nesse primeiro, o storage do player é x, a variável get_sto também vale x e envia a mensagem com o nº x para o player.
Depois disso, muda a storage do player para x + 1, get_sto continua valendo x e envia uma 2ª mensagem com o nº x + 1 para o player.
ou assim:
function onUse(cid, item, fromPosition, itemEx, toPosition) local sto = 999999999 local get_sto = getPlayerStorageValue(cid, sto) doPlayerSendTextMessage(cid, 22, get_sto) setPlayerStorageValue(cid, sto, get_sto + 1) get_sto = get_sto + 1 doPlayerSendTextMessage(cid, 22, get_sto) return true end
Nesse segundo, a diferença é que após mudar a storage do player, o get_sto também é alterado.
info
Grupo: Príncipe
Registrado: 19/08/10
Posts: 4k
Reputação: +1.1k
Gênero: Masculino

@off
LOL brun apareceu ![]()
alias tem mais um jeito pra isso...
local sto = 999999999 local get_sto = getPlayerStorageValue(cid, sto) doPlayerSendTextMessage(cid, 27, get_sto) get_sto = setPlayerStorageValue(cid, sto, get_sto + 1) and get_sto+1 or get_sto doPlayerSendTextMessage(cid, 27, get_sto)
Editado Agosto 17 por Slicer
info
Grupo: Artesão
Registrado: 03/12/11
Posts: 137
Reputação: +5
Char no Tibia: Surionz

obrigado, duvida sanada, obrigado pela ajuda de todos.
Só que o método do @brun123, na verdade não vai atualizar a variável, então isso só vai funcionar se set+1 == get_sto+1





info
Grupo: Artesão
Registrado: 03/12/11
Posts: 137
Reputação: +5
Char no Tibia: Surionz
Já procurei em diversos manuais de .lua, mas não encontrei nada a respeito, como aqui no Xtibia tem alguns caras muito bons em .lua, estou pedindo ajuda.
Problema: quero atualizar um valor de uma variável durante a execução do script, vou dar um exemplo bem simples aqui.
O resultado desse script é que imprime na tela:"1,1", ou "2,2", e o que eu queria era que imprimisse "1,2" ou "2,3", por exemplo.
sei resolver isso de 2 maneiras, mas nenhuma é do jeito que eu queria.
1 - ao invés de usar "get_sto", usar "getPlayerStorageValue(cid, sto)" direto no script.
2 - colocar outro "local get_sto = getPlayerStorageValue(cid, sto)" antes do segundo print.
Eu quero atualizar a variável "get_sto" sem setar outro valor para ela, e não quero usar "getPlayerStorageValue(cid, sto)", parece bobeira mas esse script de exemplo é um script bobo, estou fazendo NPC's muito complexos.
Por favor postem TODAS as possibilidades, por favor.