Ir para conteúdo

Featured Replies

Postado

bom dia!

 

estou tendo dificuldades para criar uma tabela que esteja durante toda a execução do ot

por exemplo

 

crio uma tabela players_id = {}

e conforme cada player puxa uma alavanca, o script faz um table.insert(players_id,cid)

e essa tabela cheia de creatureIDs deve estar disponivel a qualquer script de qualquer tipo (actions, cevents, movements etc)

a tabela deve ser reseta apenas quando o servidor é fechado, a nao ser que algum script faça isso, declarando que ela é {} novamente

 

não tenho certeza exata quanto ao meu problema, mas imagino que esteja em saber o local que devo declará-la

 

por exemplo, criei um .lua de configuração (assim como o config.lua, chamarei de marcelo.lua)

no inicio do marcelo.lua declarei players_id = {}

mas noto que sempre que inserto um valor, ele nao é fixado na tabela, pois atraves de outro script verifico que a tabela sempre contém 0 elementos, nao importa quantos players eu coloco

 

imagino que por ser declarada fora de uma função, ela sempre será nula fora do escopo de uma função que a modifique

porém não sei como devo proceder, então

 

 

sei que minha explicação foi confusa, se algum ponto falhei, tentarei tornar mais claro

 

desde já agradeço!!

Resolvido por xWhiteWolf

Ir para solução
  • Respostas 13
  • Visualizações 714
  • Created
  • Última resposta

Top Posters In This Topic

Most Popular Posts

  • qnd falar !entrar seta um storage no player e coloca um onLogin pra se o storage for diferente de 0 setar pra 0 no caso deles falarem !entrar e sairem do server. Feito isso vc cria um método (função)

  • oque é suicide falou tá correto mas oque ele não sabia é que as tabelas não são "passáveis" entre os scripts. Eu enfrentei esse problema ao tentar fazer esse script aqui: http://www.tibiaking.com/foru

  • não.. tonumber() retorna apenas valores numéricos. Se vc usa numa string vai retornar nil. tonumber("Vote 5371 para deputado federal") vai retornar 5371 pois é o único número.

Postado

Dá pra simplificar.
Veja se entende o exemplo, básico:


cids.lua (data/lib):

players_id = {}




alavanca.lua (data/actions/scripts):

function onUse(cid)
    if #players_id > 0 then -- se a tabela tiver ao menos um elemento..
        for i = 1, #players_id do -- do primeiro elemento da tabela, ao último..
            if cid ~= players_id[i] then return false end -- se cid não estiver incluso na tabela, retorne false..
        end

        doTeleportThing(cid, getTownTemplePosition(getPlayerTown(cid))) -- se o escopo acima for false, teleporte o cid para o templo de sua town..
    else
        table.insert(players_id, cid) -- se a tabela não possuir pelo menos um elemento, então o cid é inserido na mesma..
    end
    
    return true
end

E sim, a tabela é setada à zero elementos quando é feito o shutdown.
PS: explicação sem muitos detalhes aprofundados, nos comentários, só pra você entender.

Editado por Suicide (veja o histórico de edições)

The corrupt fear us.

The honest support us.

The heroic join us.

Postado
  • Autor

certo, até essa parte tudo bem.

 

entretanto,

3 players puxam a alavanca, por exemplo

se em uma talkaction, eu quiser que todas as cids sejam enviadas em textos

eu não consigo. nenhum valor aparece. esse é meu problema

Postado
  Em 28/12/2014 em 16:53, Marcelo Druida disse:
3 players puxam a alavanca, por exemplo se em uma talkaction, eu quiser que todas as cids sejam enviadas em textos eu não consigo. nenhum valor aparece. esse é meu problema

 

Ficou um pouco confuso, mas vou fazer como entendi você.

Tente o seguinte.

Adicione o player guid (player ID) à tabela e faça dos valores uma string (pegando os nomes dos players pelos guids), pra ser enviada como uma lista de nomes na talkaction.

Ex:

table.insert(players_id, getPlayerGUID(cid))

 

function onSay(cid)
    if #players_id > 0 then
        list = ''
        for i = 1, #players_id do
            name = players_id[i]
            list = list.. getPlayerNameByGUID(name) ..''
            if i ~= #players_id then
                list = list ..', '
            else
                list = list ..'.'
            end
        end
        
        doPlayerSendTextMessage(cid, MESSAGE_STATUS_CONSOLE_BLUE, 'Name of the players in the table: '.. list)
    else
        doPlayerSendCancel(cid, 'There are no elements in the table.')
    end
    
    return true
end

Editado por Suicide (veja o histórico de edições)

The corrupt fear us.

The honest support us.

The heroic join us.

Postado

oque é suicide falou tá correto mas oque ele não sabia é que as tabelas não são "passáveis" entre os scripts. Eu enfrentei esse problema ao tentar fazer esse script aqui: http://www.tibiaking.com/forum/topic/41021-voodoo/

Note que ele ficaria muito mais limpo se eu pudesse montar uma tabela e ir adicionando quem é o voodoo de quem nessa tabela porém como a tabela é feita em spells e eu teria que usar em creaturescripts isso não é possível, ela aparece como se estivesse vazia porque seria como se fosse criada uma outra instância da tabela para creaturescripts (mesmo em mods). Eu tentei de tudo e felizmente eu descobri que algumas versões de TFS suportam string (texto) no storage, daí foi só salvar o nome do voodoo no storage do player e pegar pelo creaturescript. Deve ter uma solução alternativa pro seu problema (sempre tem) mas se vc for teimoso igual o Mock era, ele fez uma função que salva uma tabela num documento de texto e outra pra ler essa tabela. Aviso que isso vai ficar pesado no seu server mas é uma "solução". As funções de salvar table e dar load estão na New Lib. São as funções 30 e 31 mas vc vai precisar da função 29 pra rodar. http://www.tibiaking.com/forum/topic/46015-new-library-v-12.

Isso dai faz mais sentido qnd vc estuda classes e objetos mas oque vc tem que ter em mente é que algumas coisas são interpretadas diferentemente de acordo com o script que vai ler (isso vale até pras libs). Não dá pra vc criar uma tabela na lib, editar ela num script e achar que vai usar a versão editada em outro script.

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)

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

Quem Está Navegando 0

  • Nenhum usuário registrado visualizando esta página.

Estatísticas dos Fóruns

  • Tópicos 96.9k
  • Posts 519.6k

Informação Importante

Confirmação de Termo