Ir para conteúdo
Entre para seguir isso  
Socket

Instalador de Scripts

Recommended Posts

Socket    0
Socket

Bem, certo dia, meu pai esqueceu de pagar a conta da internet e eu ficaria a tarde toda sem internet, o que pra mim foi um desespero quase entrei em depressão. Então pra passar o tempo resolvi fazer um instalador de scripts.

Quando eu terminei, recebi a mensagem que meu pai tinha pagado a internet e que já tinha voltado. Então lá fui eu entrar no msn e falar com o povo, eu disse o que tinha feito e tals, daí disseram que o mock já tinha feito :fuu:

Então abandonei o script lá e ele tava la mofando.

Bem², outro dia eu tava no msn e o Notorious disse que iria fazer um emulador de otserv, só para testar scripts sem precisar ligar o servidor, mas isso é "script pra outra hora", quando fui falar sobre isso com o Dartier, ele confundiu com OtEmule, para burros leigos que aindam nao entenderem seriam um Emule porém para scripts e otserver. Ele tá em desenvolvimento e também é script pra outra hora.

Foi quando eu me lembrei do meu instalador de scripts que tava mofando no meu pc, e resolvi fazer um instalador de scripts com interface, haha, fico meio :viado: essa frase mas tá tudo bem.

Bom o script do Mock você precisar criar o arquivo .luai, o que pra muita gente pode ser um fardo. sem contar com akela interface horrivel que chega doer os meus olhos.

O meu script tem um, não sei como falar, text ctrl, que é um lugar onde você coloca um texto, no caso, o script. Você também pode procurar um script no seu computador, e também tem uma lista do lado esquerdo que mostra todos os arquivos .lua localizados na pasta scripts. Quando você clica pra instalar ele vai pedir o nome que vai salvar, a tag, e o tipo que, tem uma lista com todos os tipos que o script instala.

OBS: No campo nome você pode escrever tanto *, tanto *.lua, sendo * o nome do arquivo, que vai ficar *.lua no final.

 

Depois de tantas explicações vamos a uma rápida introdução ao script.

Eu usei as bibliotecas externas "ex" e "wx". E nesse script não será preciso o SciTE instalado em seu computador, desde que o sistema operacional seja windows. Vou explicar como funciona para os desconfiados. Eu achei a dll da biblioteca wx, e o executável que o scite executa quando você manda interpretar um arquivo *.wlua. Que no caso é wlua.exe. Na pasta dos scripts tem um arquivo .bat, que simplesmente executa o script principal com o executável wlua.exe, pode até abrir para ver.

 

Não adianta apenas colar o script em alguma pasta porque ele necessita de vários arquivos externos para funcionar. Vou mostrar aqui apenas o script "principal". E colocarei o link para download de todos os arquivos no final.

 

[spoiler=Script]

    module("Installer", package.seeall)
   package.cpath = "?.dll"
   package.path = "?.lua"
   require "lib.install"
   require "wx"
   require "ex"

   local ID_INSTALL = 1
   local ID_CLOSE   = 2
   local ID_OPEN    = 3

   for i, v in pairs(install) do _G["__"..i] = v end

   local dir = {}
   for i in os.dir("scripts") do
       if i.name:find("%.lua") then table.insert(dir, i.name) end
   end

   local frame = wx.wxFrame(wx.NULL, wx.wxID_ANY, "Installer", wx.wxDefaultPosition, wx.wxSize(550,350))
   local panel = wx.wxPanel(frame, wx.wxID_ANY)
   local listBox = wx.wxListBox(panel, wx.wxID_ANY, wx.wxDefaultPosition, wx.wxSize(100,100), dir)
   local script = wx.wxTextCtrl(panel, wx.wxID_ANY, "", wx.wxDefaultPosition, wx.wxDefaultSize, wx.wxTE_MULTILINE)
   local installButton = wx.wxButton(panel, ID_INSTALL, "Install")
   local closeButton = wx.wxButton(panel, ID_CLOSE, "Close")
   local filePicker = wx.wxFilePickerCtrl(panel, ID_OPEN, wx.wxGetCwd(), "Open a script", "Lua files (*.lua)|*.lua|",
                                        wx.wxDefaultPosition, wx.wxDefaultSize,
                                        wx.wxFLP_CHANGE_DIR)

   local mainSizer = wx.wxBoxSizer(wx.wxVERTICAL)
   local listSizer = wx.wxBoxSizer(wx.wxHORIZONTAL)
   listSizer:Add(listBox, 0, wx.wxALL+wx.wxEXPAND, 5)
   listSizer:Add(script, 5, wx.wxALL+wx.wxEXPAND, 5)

   local buttonSizer = wx.wxBoxSizer(wx.wxHORIZONTAL)
   buttonSizer:Add(installButton, 0, wx.wxALL, 5)
   buttonSizer:Add(closeButton, 0, wx.wxALL, 5)
   buttonSizer:Add(filePicker, 0, wx.wxALL, 5)

   mainSizer:Add(listSizer, 5, wx.wxALL+wx.wxEXPAND, 5)
   mainSizer:Add(buttonSizer, 0, wx.wxALIGN_CENTER, 5)
   panel:SetSizer(mainSizer)
   mainSizer:SetSizeHints(panel)

   function loadScript(event)
       local handle = io.open(event:GetString())
       script:SetValue(handle:read('*a'))
       handle:close()
   end

   function close(event)
       os.exit()
       panel:Close()
   end

   function install(event)
       local ID_FINISH = 10
       local ID_EXIT   = 11
       local dialog = wx.wxDialog(wx.NULL, wx.wxID_ANY, "Install", wx.wxDefaultPosition, wx.wxSize(550,350))
       local nameLabel = wx.wxStaticText(dialog, wx.wxID_ANY, "Name:")
       local tagLabel = wx.wxStaticText(dialog, wx.wxID_ANY, "Tag:   ")
       local typeLabel = wx.wxStaticText(dialog, wx.wxID_ANY, "Type: ")
       local name = wx.wxTextCtrl(dialog, wx.wxID_ANY, "")
       local tag = wx.wxTextCtrl(dialog, wx.wxID_ANY, "")
       local types = {"action", "creatures", "global", "lib", "movement", "raid", "spell", "talkaction"}
       local type = wx.wxComboBox(dialog, wx.wxID_ANY, "Select type", wx.wxDefaultPosition, wx.wxSize(100,-1), types)
       local mainSizer = wx.wxBoxSizer(wx.wxVERTICAL)
       local firstSizer = wx.wxBoxSizer(wx.wxHORIZONTAL)
       firstSizer:Add(nameLabel, 0, wx.wxALL+wx.wxEXPAND, 5)
       firstSizer:Add(name, 5, wx.wxALL+wx.wxEXPAND, 5)

       local secondSizer = wx.wxBoxSizer(wx.wxHORIZONTAL)
       secondSizer:Add(tagLabel, 0, wx.wxALL+wx.wxEXPAND, 5)
       secondSizer:Add(tag, 5, wx.wxALL+wx.wxEXPAND, 5)

       local thirdSizer = wx.wxBoxSizer(wx.wxHORIZONTAL)
       thirdSizer:Add(typeLabel, 0, wx.wxALL+wx.wxEXPAND, 5)
       thirdSizer:Add(type, 5, wx.wxALL+wx.wxEXPAND, 5)

       local buttonSizer = wx.wxBoxSizer(wx.wxHORIZONTAL)
       local finishButton = wx.wxButton(dialog, ID_FINISH, "Install")
       local exitButton = wx.wxButton(dialog, ID_EXIT, "Close")
       buttonSizer:Add(finishButton, 0, wx.wxALIGN_CENTER_VERTICAL, 5)
       buttonSizer:Add(exitButton, 0, wx.wxALIGN_CENTER_VERTICAL, 5)

       mainSizer:Add(firstSizer, 0, wx.wxALL+wx.wxEXPAND, 5)
       mainSizer:Add(secondSizer, 0, wx.wxALL+wx.wxEXPAND, 5)
       mainSizer:Add(thirdSizer, 0, wx.wxALL+wx.wxEXPAND, 5)
       mainSizer:Add(buttonSizer, 0, wx.wxALL+wx.wxEXPAND, 5)

       function closeDialog(event)
           dialog:Close()
       end

       function installScript(event)
           if script:GetValue() == '' then return wx.wxMessageBox("Open a script to install.") end
           local Sname = name:GetValue()
           local Stag = tag:GetValue()
           local Stype = types[type:GetSelection()+1]
           if Sname == '' or Stag == '' or Stype == '' then return wx.wxMessageBox("Fill all ctrls to install.") end
           _ = install
           local inst = _.installScript(Sname, script:GetValue(), Stype, Stag)
           closeDialog()
           return inst and wx.wxMessageBox("Script sucessfully installed.") or wx.wxMessageBox("An error ocurred.")
       end

       dialog:Connect(ID_EXIT, wx.wxEVT_COMMAND_BUTTON_CLICKED, closeDialog)
       dialog:Connect(ID_FINISH, wx.wxEVT_COMMAND_BUTTON_CLICKED, installScript)

       dialog:SetSizer(mainSizer)
       mainSizer:SetSizeHints(dialog)
       dialog:Show()
   end

   function openScript(event)
       local handle = io.open(event:GetPath())
       local result = handle:read('*a')
       handle:close()
       script:SetValue(result)
   end

   panel:Connect(wx.wxID_ANY, wx.wxEVT_COMMAND_LISTBOX_SELECTED, loadScript)
   panel:Connect(ID_CLOSE, wx.wxEVT_COMMAND_BUTTON_CLICKED, close)
   panel:Connect(ID_INSTALL, wx.wxEVT_COMMAND_BUTTON_CLICKED, install)
   panel:Connect(ID_OPEN, wx.wxEVT_COMMAND_FILEPICKER_CHANGED, openScript)

   function confirm()
       local ID_CONFIRM = 20
       local dialog = wx.wxDialog(wx.NULL, wx.wxID_ANY, "Confirm data dir", wx.wxDefaultPosition)
       local dirPicker = wx.wxDirPickerCtrl(dialog, wx.wxID_ANY, __getDataDir(), wx.wxDirSelectorPromptStr,
                                        wx.wxDefaultPosition, wx.wxDefaultSize,
                                        wx.wxDIRP_DEFAULT_STYLE)
       local confirmButton = wx.wxButton(dialog, ID_CONFIRM, "Confirm")
       local mainSizer = wx.wxBoxSizer(wx.wxVERTICAL)
       mainSizer:Add(dirPicker, 0, wx.wxALL+wx.wxEXPAND, 5)
       mainSizer:Add(confirmButton, 0, wx.wxALL+wx.wxEXPAND, 5)

       dialog:Connect(ID_CONFIRM, wx.wxEVT_COMMAND_BUTTON_CLICKED,
           function()
               local handle = io.open("datadir.txt", "w")
               handle:write(dirPicker:GetPath())
               handle:close()
               dialog:Close()
           end
       )

       dialog:SetSizer(mainSizer)
       mainSizer:SetSizeHints(dialog)
       dialog:Show()
   end

   frame:Show()
   confirm()
   wx.wxGetApp():MainLoop()

 

 

Sempre ao inciar o arquivo ele vai pedir o diretório da pasta data de seu otserver. Você precisa muda-lo apenas uma vez e clicar em Confirm, que ele salvará o diretório no arquivo datadir.txt. Você também pode mudar o arquivo datadir.txt se preferir e sempre que abrir o programa clicar em confirm.

 

Link para download: http://www.4shared.com/file/ZdATn9Io/Installer.html

 

O arquivo ficou com aproximadamente 400kb por causa da dll da biblioteca wx que tem apoximadamente 2.4mb.

 

[spoiler=SS]installerx.png

 

Editado por Mickfern

Compartilhar este post


Link para o post
Compartilhar em outros sites
Mock    32
Mock

oia :o

gostei cara :P

gostei so ate chega na parte q vc critica meu super webdesign supremo

Compartilhar este post


Link para o post
Compartilhar em outros sites
Socket    0
Socket
oia :o

gostei cara :P

gostei so ate chega na parte q vc critica meu super webdesign supremo

 

kkk, você que fez aquele site? na v2 eu coloco para aceitar arquivos *.luai e sem precisar colocar a tag e tal.

 

Na v2 também terá como salvar os arquivos pelo próprio instalador, lembrando que caso alguem precisa testar um arquivo rapidamente basta escrever la o script e clicar Instalar.

 

To uploadando umas imagens para colocar no tópico.

 

Quanto a eu criticar o design do site, tá certo eu também não perderia tempo fazeno uma super hiper mega interface so pra aquilo.

Editado por Socket

Compartilhar este post


Link para o post
Compartilhar em outros sites
Mickfern    32
Mickfern

Caralho muito loko '-'

Eu sou burro leigo, e tenho uma dúvidinha :

Eu vi ali que ele instala lib, mas ele aceita qualquer script ou só algumas coisas ?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Socket    0
Socket
Caralho muito loko '-'

Eu sou burro leigo, e tenho uma dúvidinha :

Eu vi ali que ele instala lib, mas ele aceita qualquer script ou só algumas coisas ?

 

A lib é uma lib normal, como uma lib de um sistema, e a tag no caso é o que vai no data.lua, ou seja, aquele dofile

 

Já estou trabalhando na V2, agora ele aceita arquivos .luai, edita/salva/cria novos scripts, como um editor de textos.

 

Att. Socket

Compartilhar este post


Link para o post
Compartilhar em outros sites
Dartier    0
Dartier

ficou foda mano, agora que tal tu fazer a minha idéia eu que confundo e tu confunde mais ainda HAOISHDIAHSEIAHSE

faz uma database com scripts pros nego envia pra database e geral baixar xd

Compartilhar este post


Link para o post
Compartilhar em outros sites
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.

×