Ir para conteúdo
Entre para seguir isso  
dalvorsn

installOTScript(file, tag, type_[,dir])

Recommended Posts

dalvorsn    46
dalvorsn
Autor: Dalvo

Descrição: A função como o próprio nome diz, instala um script padrão de otserv. Junto com essa função vem mais duas que precisei fazer para que funciona-se da maneira esperada.

listDir(dirname)

divisor.png

function listDir(dirname)
   local file = io.popen("dir "..tostring(dirname))
   if(file)then
       str = file:read("*a")
       file:close()
   end
   return str
end

A função listDir(dirname) retorna uma string contendo todos os arquivos do diretório dirname ou nil caso não seja um diretório.

 

 

isFile(file, dirname)

divisor.png

function isFile(file, dirname)
   local files = listDir(dirname)
   if not(files)then
       return error("Can't open directory")
   elseif not io.open(dirname..""..file) then
       return error("File not found")
   end
   return true
end

A função isFile(file, dirname) verifica se o arquivo file pertence ao diretório dirname. Se pertecer a função retorna true, se não ela dispara um erro no console.

 

 

installOTScript(file, tag, type_ [, dir])

divisor.png

function installOTScript(file, tag, type_,dir)

    if not(dir)then
       dir = ""
   end
   local types = {
       [1] = {dirscript = "data/actions/scripts/", dirtag="data/actions/actions.xml", find = "<actions>"},
       [2] = {dirscript = "data/creaturescripts/scripts/",dirtag = "data/creaturescripts/creaturescripts.xml",find= "<creaturescripts>"},
       [3] = {dirscript = "data/globalevents/scripts/",dirtag = "data/globalevents/globalevents.xml",find= "<globalevents>"},
       [4] = {dirscript = "data/lib/",dirtag ="empty"},
       [5] = {dirscript = "data/movements/scripts/",dirtag = "data/movements/movements.xml",find= "<movements>"},
       [6] = {dirscript = "data/spells/scripts/",dirtag = "data/spells/spells.xml",find = "<spells>"},
       [7] = {dirscript = "data/talkactions/scripts/",dirtag = "data/talkactions/talkactions.xml",find = "<talkactions>"},
       [8] = {dirscript = "data/weapons/scripts/",dirtag = "data/weapons/weapons.xml",find= "<weapons>"},
   }
   if(isFile(file, dir))then
       if(types[type_])then
           str = io.open(dir..""..file):read(-1):close()
           io.open(types[type_].dirscript..file,"w+"):write(str):close()
           if not(types[type_].dirtag == "empty")then
               if(type_ == 2)then
                   name = tag:gmatch("name=\"(.+)\"")
                   register = io.open("data/creaturescripts/scripts/login.lua"):read(-1):close():gsub("function onLogin(cid)","function onLogin(cid) \n    registerCreatureEvent(cid, "..name..")")
                   io.open("data/creaturescripts/scripts/login.lua","w+"):write(register):close()
               end
               str_ = io.open(types[type_].dirtag):read(-1):close():gsub(types[type_].find, types[type_].find .." ".. tag)
               if(str_:find(tag))then
                   return print("This script is already installed")
               end
               xml = io.open(types[type_].dirtag, "w+")
               xml:write(str_):close()
           end
       else
           print("This type of script is not valid")
       end
   end
end[font=Times New Roman]
[/font]

A função acima tem como objetivo facilitar a vida de pessoas mais leigas em scripting ou até mesmo facilitar a instalação de scripts.

file é o nome do arquivo a ser instalado;

tag é a tag do script a ser instalado;

type_* é o número correspondente ao tipo de script de OTserv;

dir é o diretório aonde estão os arquivos a serem instalados.

 

* Os números referentes aos tipos de scripts são:

1 -> Actions

2 -> CreatureScripts

3 -> GlobalEvents

4 -> Lib

5 -> Movements

6 -> Spells

7 -> TalkActions

8 -> Weapons

Obs.: Não foi possível testar a função ainda, pois meu computador está muito lento e mal está dando para abrir servidores, então caso haja algum erro ou bugs, por favor me informem, obrigado.

 

Atenciosamente, Dalvo

Editado por dalvorsn

Compartilhar este post


Link para o post
Oddie    0
Oddie

Bem interessante, parabéns :)

Nada mais pra fazer do que agradecer e mover, com certeza é util para muita gente, obrigado.

Compartilhar este post


Link para o post
Conde2    0
Conde2

Nada mal, nada mal mesmo =)

 

Ótimo uso da sintax sugar e da biblioteca IO e

Compartilhar este post


Link para o post
dalvorsn    46
dalvorsn

#Oddie

Ty

 

#Conde2

Vlw, sempre bom receber elogios de quem intende do assunto ;)

Compartilhar este post


Link para o post
Biozard    0
Biozard

Cara, nao entendi ainda o que esse script faz.

Compartilhar este post


Link para o post
dalvorsn    46
dalvorsn
Cara, nao entendi ainda o que esse script faz.

 

A intenção da função é de certa forma facilitar a instalação de scripts, mas principalmente de sistemas.

 

Vou dar um exemplo, você tem lá uma action simples, cujo nome do arquivo é action.lua. Você vai pegar esse arquivo e colocar em uma pasta, ou na pasta principal do otserv, que é aonde está o executável, se colocar na do executável, não precisa usar o parametro dir, já se for em outra tem que colocar o caminho.

Dai você usará o seguinte num script qualquer que você consiga executar:

installOTScript("action.lua", '<action itemid="xxxx" event="script" value="action.lua" />', 1)

Após isso sua action estará instalada.

 

Para poucos arquivos não compensa usar, já para sistemas vale a pena usar, pois é bem mais rápido.

De qualquer formar eu fiz mais para ter domínio da biblioteca IO, e decidi compartilhar.

E usando string.gsub e os.remove é possível fazer também um desinstalador para os arquivos, porém seria necessário fazer um log ou algum arquivo que grave os dados dos scripts instalados para removê-los.

Compartilhar este post


Link para o post
ilusiongod    0
ilusiongod

muito bom.

Compartilhar este post


Link para o post
Conde2    0
Conde2

Depois da uma olhada na os.execute com ela você podia economizar tempo, se eu não me engano você pode mover o arquivo com ela ao invés de rescrever ela.

 

Não é certeza faz tempo que não mexo com lua =p

Compartilhar este post


Link para o post
dalvorsn    46
dalvorsn
Depois da uma olhada na os.execute com ela você podia economizar tempo, se eu não me engano você pode mover o arquivo com ela ao invés de rescrever ela.

 

Não é certeza faz tempo que não mexo com lua =p

da sim, eu só preciso arrumar um jeito de diferenciar os sistemas operacionais e fazer um if pra cada um .-.

porque provavelmente os comandos sao diferentes nas plataformas .-.

mas vo tentar em breve, e se conseguir eu posto aqui

Compartilhar este post


Link para o post
Biozard    0
Biozard
A intenção da função é de certa forma facilitar a instalação de scripts, mas principalmente de sistemas.

 

Vou dar um exemplo, você tem lá uma action simples, cujo nome do arquivo é action.lua. Você vai pegar esse arquivo e colocar em uma pasta, ou na pasta principal do otserv, que é aonde está o executável, se colocar na do executável, não precisa usar o parametro dir, já se for em outra tem que colocar o caminho.

Dai você usará o seguinte num script qualquer que você consiga executar:

installOTScript("action.lua", '<action itemid="xxxx" event="script" value="action.lua" />', 1)

Após isso sua action estará instalada.

 

Para poucos arquivos não compensa usar, já para sistemas vale a pena usar, pois é bem mais rápido.

De qualquer formar eu fiz mais para ter domínio da biblioteca IO, e decidi compartilhar.

E usando string.gsub e os.remove é possível fazer também um desinstalador para os arquivos, porém seria necessário fazer um log ou algum arquivo que grave os dados dos scripts instalados para removê-los.

 

 

Hmm... Sim, em sistema é muito mais facil.

Muito bom hein....Ele escreve a tag tb?

Compartilhar este post


Link para o post
dalvorsn    46
dalvorsn
Hmm... Sim, em sistema é muito mais facil.

Muito bom hein....Ele escreve a tag tb?

sim, e no caso de creature script registra também

Compartilhar este post


Link para o post
godmasterlord    0
godmasterlord

por exemplo, para usa-lo eu teria q colocar o script na pasta e colocar essa função no global.lua pra quando o otserv for rodar instalar ele automaticamente?

Compartilhar este post


Link para o post
dalvorsn    46
dalvorsn
por exemplo, para usa-lo eu teria q colocar o script na pasta e colocar essa função no global.lua pra quando o otserv for rodar instalar ele automaticamente?

Não é algo automatico não, até pode ser feito dessa forma por meio do callback onStart.

Tu tem que escrever o script, como por exemplo em uma talkaction. Lá nesse script voce coloca as funções instalando os arquivos.

A ideia era facilitar a vida de quem nao tem muito conhecimento de otserv e tem dificuldades na instalação, dai ao distribuir um sistema grande, apresentaria um script instalador que faria toda a instalação do mesmo sem muito trabalho.

 

Um rapaz me comprou um script de gema uma vez, usei isso, eu fiz uma talkaction para ele, que instalava e desinstalava o sistema.

Compartilhar este post


Link para o post
Visitante
Este tópico está impedido de receber novos posts.
Entre para seguir isso  
  • Quem Está Navegando   0 membros estão online

    Nenhum usuário registrado visualizando esta página.

×