'PACI 2,317 Posted December 27, 2013 Olá. Nestes dias andei a trabalhar muito com a edição de ficheiros por quest, então decidi criar uma função que reduz bastante o trabalho. A função é: write_or_read(path, file, act, text, line) Que serve para escrever, sobrescrever e ler um ficheiro, ou uma linha específica. Notas: Diretório do ficheiro; Nome do ficheiro; Ação; Texto; Linha. As ações: Como disse, a função pode ler ou escrever num ficheiro e para isso em act coloca-se o que se quer fazer. - Para ler pode usar-se: ler, read, l (L minusculo) ou r. A Ação influencia o conteúdo que se colocará em text, se querem ler o conteúdo de um ficheiro, obviamente não vão colocar texto nenhum lá. Por isto, a função de ler divide-se noutras 3 funções: -> Ler a primeira línha; (line, linha, ou l) -> Ler o ficheiro inteiro; (all, tudo) -> Ler uma línha específica*. (sline, linhas, ou ls) *Para ler uma linha específica, no último argumento da função coloca-se a linha que querem que leia. - Para escrever pode usar-se 2 tipos: 1. sobrescrever, rewrite, s ou re. 2. escrever, write, e, a+ É bastante simples saber o que faz cada um deles. O 1. irá apagar o conteúdo do ficheiro (se tiver algum) e irá escrever aquilo que quisermos. O 2. apenas adiciona. Nota: Não é necessário colocar o último argumento, line, para escrever. Outros: Para reduzir ainda o trabalho, se o diretório ou o ficheiro não existirem, estes serão criados sozinhos. As tabulações no texto fazem-se de forma natural, através do botão que está em cima do caps lock. Mas para mudar de linha, é necessário escrever: __enter__. Finalmente aqui está a função, que deverão colocá-la no questlib.lua: function write_or_read(path, file, act, text, line) local type_ if os.execute('cd '..path) ~= 0 then os.execute('mkdir '..path) elseif os.execute('[ -f '..path.."/"..file..' ] && echo "s" || echo "n"') == 'n' then os.execute('cd '..path..' && touch '..file) end if act == 'ler' or act == 'read' or act == 'l' or act == 'r' then type_ = 'r' elseif act == 'sobrescrever' or act == 'rewrite' or act == 's' or act == 're' then type_ = 'w' elseif act == 'escrever' or act == 'write' or act == 'e' or act == 'a+' then type_ = 'a+' end local f = io.open(path..'/'..file, type_) if type_ == 'r' then if text == 'all' or text == 'tudo' then return f:read('*all') elseif text == 'line' or text == 'linha' or text == 'l' then return f:read('*l') elseif text == 'sline' or text == 'linhas' or text == 'ls' then local ltable = {} for i in f:lines() do table.insert(ltable, i) end f:close() return ltable[line] end elseif type_ == 'a+' or type_ == 'w' then if string.find(text, '__enter__') ~= 0 then f:write(string.gsub(text, '__enter__', 'n', string.find(text,'__enter__'))..'n') else f:write(text..'n') end f:close() endendInteligentes saberão para que serve. Se quiserem exemplos avisem. 4 Dr.Morais, morfo2, DarkWolf and 1 other reacted to this Share this post Link to post Share on other sites
DarkWolf 102 Posted December 27, 2013 Bom, +1 dá ai um exemplo de uma quest que use essa função, faz uma missão ou uma qualquer parecida... Share this post Link to post Share on other sites
'PACI 2,317 Posted December 27, 2013 Já te explicámos na shoutbox.. lol quest teste begin state start begin when login begin write_or_read("/usr/home/game/login/", "logs", "escrever", pc.name.." fez login.") end when logout begin write_or_read("/usr/home/game/logout/", "logs", "escrever", pc.name.." fez logout.") end endend 1 magnatar reacted to this Share this post Link to post Share on other sites