Jump to content
  • Announcements

    • Majesty

      Seja bem vindo a seção Downloads!   04/25/2019

      Seja bem vindo a seção Downloads! 
      Aqui, você pode encontrar diversos downloads sobre OTServ. Se tiver dúvidas e/ou problemas sobre algum conteúdo, primeiro, você deve utilizar a ferramenta de busca e explorar o fórum. Se você não encontrou o que precisa, considere criar um tópico na seção de Suporte:
      https://forums.otserv.com.br/index.php?/forums/forum/402-suporte-dúvidas-bugs-erros/ Considere também ler o grande guia do usuário com dúvidas, que possui várias recomendações e dicas de como tirar dúvidas.

      Obrigado e boa sorte!
Sign in to follow this  
dalvorsn

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

Recommended Posts

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

Edited by dalvorsn

Share this post


Link to post
Oddie

Bem interessante, parabéns :)

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

Share this post


Link to post
Conde2

Nada mal, nada mal mesmo =)

 

Ótimo uso da sintax sugar e da biblioteca IO e

Share this post


Link to post
dalvorsn

#Oddie

Ty

 

#Conde2

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

Share this post


Link to post
Biozard

Cara, nao entendi ainda o que esse script faz.

Share this post


Link to post
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.

Share this post


Link to post
ilusiongod

muito bom.

Share this post


Link to post
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

Share this post


Link to post
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

Share this post


Link to post
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?

Share this post


Link to post
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

Share this post


Link to post
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?

Share this post


Link to post
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.

Share this post


Link to post
Guest
This topic is now closed to further replies.
Sign in to follow this  
  • Recently Browsing   0 members

    No registered users viewing this page.

×