Ir para conteúdo
  • Cadastre-se

Normal Problema com variável global


Posts Recomendados

Boa noite! Estou com um certo problema de reconhecimento de variável global.

Defini uma varíavel no arquivo 000-constant.lua e estou alterando o valor dessa variável de 0 para 1, por meio de um talkaction.

 

Essa alteração é feita normalmente e consegui verificar que ele faz isso. Porém, eu criei um item que, ao ser utilizado, verifica se essa variável é 1 para dar continuidade no seu funcionamento. Percebi que ele não tá reconhecendo a variável que eu defini em 000-constant.lua. Não estou entendendo o motivo, já que o talkaction reconheceu. Alguém sabe?

Link para o post
Compartilhar em outros sites

Não entendi, posta os códigos... Você está alterando o valor da lib por uma talk?

vodkart_logo.png

[*Ninguém será digno do sucesso se não usar suas derrotas para conquistá-lo.*]

 

DISCORDvodkart#6090

 

Link para o post
Compartilhar em outros sites

Eu só estou fazendo uns testes apenas pra ver como eu implementaria um sistema maior. Ainda não é nada demais. Eu apenas defini uma variável em 000-constant.lua, por exemplo:

 

VARIAVEL_01 = 0

 

Em seguida, criei uma talkaction que, por exemplo, faz isso:

 

function onSay(cid, words, param, channel)
    VARIAVEL_01 = 1
    return true
end

 

E, por último, criei uma action para um item dessa maneira:

 

function onUse(cid, item, fromPosition, itemEx, toPosition)
    if(VARIAVEL_01 == 0) then
        return doPlayerSendTextMessage(cid, MESSAGE_EVENT_ADVANCE, "A variável está inativa.")
    end
    local pos = {x = 213, y = 607, z = 7}
    doTeleportThing(cid, pos, true)
    return true
end

 

Mas está sempre caindo no if. Pelo que percebi, a talkaction não tá mudando de fato o valor da variável, provavelmente criando outra com mesmo nome no escopo da função. Como eu poderia alterar o valor real?

Editado por Snox (veja o histórico de edições)
Link para o post
Compartilhar em outros sites

eu amo quando o pessoal pensa um pouco sobre o próprio problema. Tudo que você comentou aqui está corretíssimo!!!
O que ocorre é o seguinte: os ambientes (talkactions, spells, monster, npc, actions, movements, creaturescripts.. etc.) tem escopos separados e uma lib nada mais é do que um arquivo que o tfs simplesmente cria cópias locais pra cada ambiente. Quando você altera na talkaction o que vc está fazendo é simplesmente alterar a variavel LOCAL do ambiente talkaction, o que não influi em nada na variavel local de mesmo nome do ambiente de actions. Você alterou uma cópia mas a original e as outras cópias estão intactas.

Pra você alterar o valor real você tem uma série de soluções, porém a mais esperta de todas é entender que existem posições da memória próprias pra isso: as chamadas global storage.

Semelhante ao storage de um player, as globais storage ficam definidas pra todos os ambientes. Tudo que você precisa fazer é usar as funções setGlobalStorageValue(posição da memoria, valor)
e getGlobalStorageValue(posição da memória);

o que você pode fazer é o seguinte: define a sua variavel da lib como VARIAVEL_01 = 17543 e usa setGlobalStorageValue(VARIAVEL_01, 1).
na actions você coloca: getGlobalStorageValue(VARIAVEL_01) == 0. Dessa forma você garante que ambos vão sempre estar lendo e escrevendo na posição certa da memória já que o valor é controlado pela lib e ao mesmo tempo você tem variáveis salvas e compartilhadas entre todos os ambientes.

PS: não sei se o nome da função é exatamente setGlobalStorageValue e getGlobalStorageValue, mas é algo parecido com isso.

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

Link para o post
Compartilhar em outros sites

Rapaz, você realmente é bom! kkkkk

 

Agora as coisas fazem mais sentido. Testei aqui da maneira que você falou e deu certo mesmo. E sim, os nomes das funções são esses mesmos.

 

Agora entendo um pouco mais, muito obrigado meeesmo pela ajuda!

Link para o post
Compartilhar em outros sites
20 minutes ago, Snox said:

Rapaz, você realmente é bom! kkkkk

 

Agora as coisas fazem mais sentido. Testei aqui da maneira que você falou e deu certo mesmo. E sim, os nomes das funções são esses mesmos.

 

Agora entendo um pouco mais, muito obrigado meeesmo pela ajuda!

obrigado e de nada ^-^

Todos os meus trabalhos importantes estão na seção "Sobre mim" no meu perfil; Dá uma passada lá!

"Há três caminhos para o fracasso: não ensinar o que se sabe, não praticar o que se ensina, e não perguntar o que se ignora." - São Beda

I7Pm6ih.png

(obg ao @Beeny por fazer essa linda sign <3)

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 Jaurez
      .
    • Por Cat
      Em alguns casos, o tibia 8.60 comum não abre de jeito nenhum no map editor, mesmo desmarcando check file signatures e configurando o path corretamente.
       
      Este é o client 8.60 adaptado para o Remere's Map Editor. Resolvi postar já que ele foi removido do site oficial do RME. (ficou apenas a versão para linux lá)
      Se estiver tendo problemas para abrir a versão 8.60, tente utilizar este.
                                                                                                                     
      Baixar o Tibia Client 8.60 que funciona no Remere’s Map Editor
      Essa versão do Tibia 8.60 client resolve o erro unsupported client version ou Could not locate tibia.dat and/or tibia.spr, please navigate to your tibia 8.60 installation folder.
       
      Downloads
      https://tibiaking.com/applications/core/interface/file/attachment.php?id=47333

      Scan: https://www.virustotal.com/gui/file/333e172ac49ba2028db9eb5889994509e7d2de28ebccfa428c04e86defbe15cc
       
    • Por danilo belato
      Fala Galera To Com um problema aki 
       
      quero exporta umas sprites de um server para colocar em outro 
       
      eu clico na sprites ai aparece tds a forma delas do lado de la >>
       
      ai eu clico nela e ponho a opiçao de export mais quando salvo a sprite ela n abri 
       
      aparece isso quando tento vê-la 
       
      visualização não disponível ( no formatos png e bitmap)
       
      Agora no formato idc fala que o paint n pode ler 
       
      me ajudem ae...
    • Por Vitor Bicaleto
      Galera to com o script do addon doll aqui, quando eu digito apenas "!addon" ele aparece assim: Digite novamente, algo está errado!"
      quando digito por exemplo: "!addon citizen" ele não funciona e não da nenhum erro
       
      mesma coisa acontece com o mount doll.. 
    • Por Ayron5
      Substitui uma stone no serve, deu tudo certo fora  esse  erro ajudem  Valendo  Rep+  Grato  

      Erro: data/actions/scripts/boost.lua:557: table index is nil
       [Warning - Event::loadScript] Cannot load script (data/actions/scripts/boost.lua)

      Script:
×
×
  • Criar Novo...

Informação Importante

Confirmação de Termo