Ir para conteúdo

Tabletostring E Loadtablestring


Vinc

Posts Recomendados

bom essa duas funções são bem simples de entder o que elas fazem .

tabletostring comverte tabelas em strings iguais a elas(mas desordenadas pela função pairs)

loadtablestring transforma uma string de table em uma table comun

 

antes que venham pergunta ou criticar leiam as respostas abaixo

 

random noob:lord, ja n existe a função table.concat?pra que essa?

lordbug99: a funçao concat n ser pra isso,ela apenas pegas os elemtos de uma tabela e os junta numa string separados pelo sep que vc escolher ela excui os index, deixa sem as chaves(pois n fas parte da função dela),e se um dos elementos dessa tabela for uma tabela ela retorna um erro,já minha função tranforma em uma replica da tabela(com index,aceita tabelas dentro de tabelas).

 

random noob2:mas n é so usar tosting?

lordbug99:n se vc fiser isso ele vai so comverter a alocação da tabela em string(algo tipo 3xx2547)

 

 

aki vão as funções(nessesario copiar tudo),assim já ia esqucendo de fala tem mais duas funçoes de bonus(istable e isstring)

obs:obrigatoriamente tem que copiar as funções istring e istable(elas saõ usadas na tabletostring)

para adiconalas basta ir a pasta lib e em qualque um dos arquivos, apos o final adicionalas(de preferencia adicioneas no arquivo 050-functions para ficar organizado)

function tabletostring(tab)
st = "{"
k = 0
 for x,y in pairs(tab) do
 if istable(x) then
 st = st.."["..tabletostring(x).."] = "
 k =1
  elseif isstring(x) then
 st = st.."['"..x.."'] = "
 k =1
  else
 st = st.."["..x.."] = "
 k =1
  end
  if istable(y) then
 st = st..""..tabletostring(y)..","
 k =1
  elseif isstring(y) then
 st = st.."'"..y .."',"
 k =1
  else
 st = st..""..y..","
 k =1
  end
 end
 if k == 1 then
  st = st:sub(1,-2)
 end
 st = st.."}"
 return st
 end

function istable(t)
 if type(t) == "table" then
   return true
 else
   return false
 end
end

function isstring(t)
 if type(t) == "string" then
   return true
 else
   return false
 end
end

function loadstringtable(str)
if isstring(str) then
t = loadstring('return'..str)
tab = t()
return tab
end
return false						  
end
table.tostring = tabletostring
string.loadtable = loadstringtable

 

exexemplo de uso(bem simples)

function onSay(cid,words,param)
  if words:lower() == "savepos" then
 pos = getCreaturePos(cid)
 storagepos = tabletostring(pos)
 setPlayerStorageValue(cid,5754,storagepos)
 elseif words:lower() == "returnpos" then
   stroagepos = getPlayerStorageValue(cid,5754)
   pos = {}
  if isstring(storagepos) then
    pos = loadstringtable(storagepos)
	 if  pos then
	  doTeleportThing(cid, pos)
	 end
 end
  end
return true
end

 

 

obs: lembre-se quer tab.x == tab["x"] (então todos vão ficar da forma ['x'])

Editado por lordbug99
Link para o comentário
Compartilhar em outros sites

so pra diminui mesmo,é mais rapido pra digitar.

sauhsasuahsauh

 

obs1:usei essas funções numa outra biblioteca que to fasendo,vai fica muito foda,e bem organizada(se fosse pra posta ela sem a organização ja teria postado a muito tempo)

obs2:a outra lib que citei acima tbm usara essa funções( na verdade fiz elas exatamente para isso).

Link para o comentário
Compartilhar em outros sites

não intendi muito bem o que essas funções fazem poderia me explicar de alguma outra forma ?

 

Edite - fui testa a sua função e deu esse erro

 

Tag usada

 

 <talkaction  words="savepos;returnpos" event="script" value="savepos.lua"/> 

[1:43:48.302] [Error - TalkAction Interface]
[1:43:48.304] data/talkactions/scripts/savepos.lua:onSay
[1:43:48.306] Description:
[1:43:48.308] data/talkactions/scripts/savepos.lua:3: attempt to call global 'ge
tCreaturepos' (a nil value)
[1:43:48.312] stack traceback:
[1:43:48.313]   data/talkactions/scripts/savepos.lua:3: in function <data/talkac
tions/scripts/savepos.lua:1>

[1:43:50.730] [Error - TalkAction Interface]
[1:43:50.733] data/talkactions/scripts/savepos.lua:onSay
[1:43:50.736] Description:
[1:43:50.737] data/talkactions/scripts/savepos.lua:7: attempt to call global 'ge
tCreatureStorageValue' (a nil value)
[1:43:50.741] stack traceback:
[1:43:50.742]   data/talkactions/scripts/savepos.lua:7: in function <data/talkac
tions/scripts/savepos.lua:1> 

 

Editado por eduardobean
Link para o comentário
Compartilhar em outros sites

na verdade o erro foi meu,eu coloquei uma letra minuscula no getCreaturePos o 'p' ta va minusculo), e o getCreaturestorageValue é que tava fasendo ums negocio pra pokemon pruncara,dae no pokemon tem essa função(que na verdade é a mesma coisa que com player).

editado la

 

obs: ele uso o script do exemplo.

Editado por lordbug99
Link para o comentário
Compartilhar em outros sites

Sim,so mudar pra qualquer numero ou nil(sem aspas mesmo).

 

 

A pos pode ser muda quando quiser,sem nessecidade de remover a antiga posição,ele é feito para sobre por uma nova position emcima da antiga.

Link para o comentário
Compartilhar em outros sites

tava testando aqui e a sua func não funciona com meta tabelas.

 

 

n = {i=3}
a = setmetatable({}, n)

print(tabletostring(a))

 

>> {}

 

 

n = {i=3}
a = setmetatable({}, n)

print(tabletostring(getmetatable(a)))

 

>> {['i'] = 3}

 

falo.

Link para o comentário
Compartilhar em outros sites

n tinha lenbrado de metatables,mais vo ve o que da pra fase

 

 

e a segundo eu deixei uma observação no fim tab.x é igual a tab['x'],(em meta table eu n sei,mas em tables normais é assim)

exemplo se vc usa pos['x'] vai retorna x da tabela,eu ate queria diferencia um do outro so pra fica bunitinho mais n achei nenhuma diferença entre os dois.

Link para o comentário
Compartilhar em outros sites

Sim, não são nativas da linguagem Lua, mas existem nas bibliotecas de praticamente qualquer servidor atual.

 

Observação: Notei que você adora me contrariar em tudo rsrs.

Editado por Oneshot
Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...