Postado Dezembro 28, 2014 10 anos 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!!
Postado Dezembro 28, 2014 10 anos 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 Dezembro 28, 2014 10 anos por Suicide (veja o histórico de edições) The corrupt fear us. The honest support us. The heroic join us.
Postado Dezembro 28, 2014 10 anos 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 Dezembro 28, 2014 10 anos 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 Dezembro 28, 2014 10 anos por Suicide (veja o histórico de edições) The corrupt fear us. The honest support us. The heroic join us.
Postado Dezembro 28, 2014 10 anos 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 (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.