Ir para conteúdo
  • 0

.lua Atualizar Valor De Variavel


Sofft

Pergunta

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.

 

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)
  return true
end

 

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.

Link para o comentário
Compartilhar em outros sites

7 respostass a esta questão

Posts Recomendados

  • 0

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

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

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 por Slicer
Link para o comentário
Compartilhar em outros sites

  • 0

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. :)

Link para o comentário
Compartilhar em outros sites

  • 0

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.

Link para o comentário
Compartilhar em outros sites

  • 0

@off

LOL brun apareceu o.O

 

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 por Slicer
Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.
×
×
  • Criar Novo...