Ir para conteúdo
Entre para seguir isso  
Socket

Finder VS 1.0

Recommended Posts

Socket    0
Socket

Olá, após ver um código do Mock, que abria uma janela em HTML em WxLua, eu resolvi me aprofundar nisso e fiz o Finder.

 

Esse mini-programa conta com:

 

  • Criar e procurar players.

 

  • Criar e procurar contas.

Isso em um database MySQL, e totalmente em Lua (WxLua).

 

Bem, o código ficou bem grandinho, 426 linhas.

 

Eu usei componentes do tipo wxFrame, wxDialog, wxNotebook, wxPanel, wxTextCtrl, wxStaticText, wxStaticLine, wxButton, wxListBox. Acho que foi só isso mesmo.

 

[spoiler=Código]

require("wx")
require "luasql.mysql"

local config = {
               databaseName = '',
               userName = '',
               userPassword = ',
               userHost = '',
               port = 3306,
}

function GetAllPlayers()
   env = assert(luasql.mysql())
   con = assert(env:connect(config.databaseName,config.userName,config.userPassword, config.userHost, config.port))
   cur = assert(con:execute("SELECT `id`, `name`, `level` FROM `players` WHERE 1;"))
   row = cur:fetch ({}, "a")
   players = {}
   while row do
       table.insert(players, row.name)
       row = cur:fetch (row, "a")
   end
   con:close()
   env:close()
   return players
end

function LastID() --database
 env = assert(luasql.mysql())
 con = assert(env:connect(config.databaseName, config.userName, config.userPassword, config.userHost, config.port))
 row = assert(con:execute('SELECT * FROM `players` WHERE 1;'))
 con:close()
 env:close()
 return tonumber(row:numrows()+1)
end

function LastAccountID() --database
 env = assert(luasql.mysql())
 con = assert(env:connect(config.databaseName, config.userName, config.userPassword, config.userHost, config.port))
 row = assert(con:execute('SELECT * FROM `accounts` WHERE 1;'))
 con:close()
 env:close()
 return tonumber(row:numrows()+1)
end

local ID_IDCOUNTER = wx.wxID_HIGHEST + 1
function NewID() --Autor: J Winwood
 ID_IDCOUNTER = ID_IDCOUNTER + 1
 return ID_IDCOUNTER
end

local ID_DIALOG1_PANEL1_OK       =  NewID()
local ID_DIALOG1_PANEL2_OK       =  NewID()
local ID_DIALOG2_PANEL1_OK       =  NewID()
local ID_DIALOG2_PANEL2_OK       =  NewID()
local ID_ACCOUNT                 =  NewID()
local ID_PLAYER                  =  NewID()
local ID_EXIT                    =  NewID()
local ID_CLOSE                   =  NewID()

local FRAME = wx.wxFrame(wx.NULL, wx.wxID_OK, "Finder", wx.wxDefaultPosition, wx.wxSize(550, 350))
local FRAME_OBJECTS = {
                       MENU_BAR = wx.wxMenuBar(),

                       FILE_MENU = wx.wxMenu({
                                           {ID_PLAYER,    "&Players\tCtrl+N",    "Create and search a player." },
                                           {ID_ACCOUNT, "&Accounts\tCtrl+S",   "Create and search a account."}
                       }),

                       EXIT_MENU = wx.wxMenu({{ID_EXIT,   "&Exit\tCtrl+E",   "Exit program."        }}),

                       NOTEBOOK = wx.wxNotebook(FRAME, wx.wxID_ANY, wx.wxDefaultPosition, wx.wxSize(550,350)),
}
local FRAME_NOTEBOOK_OBJECTS = {
                               PANEL1 = wx.wxPanel(FRAME_OBJECTS.NOTEBOOK, wx.wxID_ANY),
}

local FRAME_PANEL1_OBJECTS = {
                               LISTBOX = wx.wxListBox(FRAME_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, wx.wxDefaultPosition, wx.wxDefaultSize, GetAllPlayers()),
                               LEVEL = wx.wxTextCtrl(FRAME_NOTEBOOK_OBJECTS.PANEL1,wx.wxID_ANY, ""),
                               LEVEL_TEXT = wx.wxStaticText(FRAME_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, "Level"),
                               ID = wx.wxTextCtrl(FRAME_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, ""),
                               ID_TEXT = wx.wxStaticText(FRAME_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, "Id"),

}

local FRAME_PANEL1_SIZER = wx.wxBoxSizer(wx.wxHORIZONTAL)
   FRAME_PANEL1_SIZER:Add(FRAME_PANEL1_OBJECTS.LEVEL_TEXT, 0, wx.wxEXPAND+wx.wxALL, 5)
   FRAME_PANEL1_SIZER:Add(FRAME_PANEL1_OBJECTS.LEVEL, 0, wx.wxALL, 5)
   FRAME_PANEL1_SIZER:Add(FRAME_PANEL1_OBJECTS.ID_TEXT, 0, wx.wxEXPAND+wx.wxALL, 5)
   FRAME_PANEL1_SIZER:Add(FRAME_PANEL1_OBJECTS.ID, 0, wx.wxALL, 5)
   FRAME_PANEL1_SIZER:Add(FRAME_PANEL1_OBJECTS.LISTBOX, 0, wx.wxEXPAND+wx.wxALL, 5)

FRAME_NOTEBOOK_OBJECTS.PANEL1:SetSizer(FRAME_PANEL1_SIZER)
FRAME_PANEL1_SIZER:SetSizeHints(FRAME_NOTEBOOK_OBJECTS.PANEL1)

FRAME_OBJECTS.MENU_BAR:Append(FRAME_OBJECTS.FILE_MENU, "&File")
FRAME_OBJECTS.MENU_BAR:Append(FRAME_OBJECTS.EXIT_MENU, "&Exit")
FRAME:SetMenuBar(FRAME_OBJECTS.MENU_BAR)
FRAME:CreateStatusBar(1)
FRAME:SetStatusText('Welcome to finder.')

function getSelected(event)
 env = assert(luasql.mysql())
 con = assert(env:connect(config.databaseName, config.userName, config.userPassword, config.userHost, config.port))
 row = con:execute("SELECT `id`, `level` FROM `players` WHERE `name` = '".. event:GetString() .."';")
 t = {}
 row:fetch(t, "a")
 FRAME_PANEL1_OBJECTS.ID:SetValue(t.id)
 FRAME_PANEL1_OBJECTS.LEVEL:SetValue(t.level)
 con:close()
 env:close()
end

FRAME:Connect(wx.wxID_ANY, wx.wxEVT_COMMAND_LISTBOX_SELECTED, getSelected)

local DIALOG1 = wx.wxDialog(FRAME, wx.wxID_ANY, 'Player', wx.wxDefaultPosition, wx.wxSize(400,450))
local DIALOG1_OBJECTS = {
                       NOTEBOOK = wx.wxNotebook(DIALOG1, wx.wxID_ANY, wx.wxDefaultPosition, wx.wxSize(400,500))
}
local DIALOG1_NOTEBOOK_OBJECTS = {
                                   PANEL1 = wx.wxPanel(DIALOG1_OBJECTS.NOTEBOOK, wx.wxID_ANY),
                                   PANEL2 = wx.wxPanel(DIALOG1_OBJECTS.NOTEBOOK, wx.wxID_ANY),
}
local DIALOG1_PANEL1_OBJECTS = {
                               STATIC_LINE = wx.wxStaticLine(DIALOG1_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY),
                               BUTTON_CLOSE = wx.wxButton(DIALOG1_NOTEBOOK_OBJECTS.PANEL1, ID_CLOSE, "Close"),
                               BUTTON_OK = wx.wxButton(DIALOG1_NOTEBOOK_OBJECTS.PANEL1, ID_DIALOG1_PANEL1_OK, "Ok"),
                               NAME = wx.wxTextCtrl(DIALOG1_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, ""),
                               NAME_TEXT = wx.wxStaticText(DIALOG1_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, "Name"),
                               LEVEL = wx.wxTextCtrl(DIALOG1_NOTEBOOK_OBJECTS.PANEL1,wx.wxID_ANY, ""),
                               LEVEL_TEXT = wx.wxStaticText(DIALOG1_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, "Level"),
                               ACCOUNT_ID = wx.wxTextCtrl(DIALOG1_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, ""),
                               ACCOUNT_ID_TEXT = wx.wxStaticText(DIALOG1_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, "Account id"),
                               VOCATION = wx.wxTextCtrl(DIALOG1_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, ""),
                               VOCATION_TEXT = wx.wxStaticText(DIALOG1_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, "Vocation"),
                               SEX = wx.wxTextCtrl(DIALOG1_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, ""),
                               SEX_TEXT = wx.wxStaticText(DIALOG1_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, "Sex"),
                               MAGLEVEL = wx.wxTextCtrl(DIALOG1_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, ''),
                               MAGLEVEL_TEXT = wx.wxStaticText(DIALOG1_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, "Magic Level"),
                               GROUP_ID = wx.wxTextCtrl(DIALOG1_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, ""),
                               GROUP_ID_TEXT = wx.wxStaticText(DIALOG1_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, "Group id"),
}
local DIALOG1_PANEL2_OBJECTS = {
                               STATIC_LINE = wx.wxStaticLine(DIALOG1_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY),
                               BUTTON_CLOSE = wx.wxButton(DIALOG1_NOTEBOOK_OBJECTS.PANEL2, ID_CLOSE, "Close"),
                               BUTTON_OK = wx.wxButton(DIALOG1_NOTEBOOK_OBJECTS.PANEL2,    ID_DIALOG1_PANEL2_OK, "Ok"),
                               NAME = wx.wxTextCtrl(DIALOG1_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, ""),
                               NAME_TEXT = wx.wxStaticText(DIALOG1_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, "Name"),
                               LEVEL = wx.wxTextCtrl(DIALOG1_NOTEBOOK_OBJECTS.PANEL2,wx.wxID_ANY, ""),
                               LEVEL_TEXT = wx.wxStaticText(DIALOG1_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, "Level"),
                               ID = wx.wxTextCtrl(DIALOG1_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, ""),
                               ID_TEXT = wx.wxStaticText(DIALOG1_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, "Id"),
                               ACCOUNT_ID = wx.wxTextCtrl(DIALOG1_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, ""),
                               ACCOUNT_ID_TEXT = wx.wxStaticText(DIALOG1_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, "Account id"),
                               VOCATION = wx.wxTextCtrl(DIALOG1_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, ""),
                               VOCATION_TEXT = wx.wxStaticText(DIALOG1_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, "Vocation"),
                               SEX = wx.wxTextCtrl(DIALOG1_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, ""),
                               SEX_TEXT = wx.wxStaticText(DIALOG1_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, "Sex"),
                               MAGLEVEL = wx.wxTextCtrl(DIALOG1_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, ''),
                               MAGLEVEL_TEXT = wx.wxStaticText(DIALOG1_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, "Magic Level"),
                               GROUP_ID = wx.wxTextCtrl(DIALOG1_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, ""),
                               GROUP_ID_TEXT = wx.wxStaticText(DIALOG1_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, "Group id"),
}


local DIALOG1_NEW_SIZER = wx.wxBoxSizer(wx.wxVERTICAL)
   DIALOG1_NEW_SIZER:Add(DIALOG1_PANEL1_OBJECTS.NAME_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_NEW_SIZER:Add(DIALOG1_PANEL1_OBJECTS.NAME, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_NEW_SIZER:Add(DIALOG1_PANEL1_OBJECTS.LEVEL_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_NEW_SIZER:Add(DIALOG1_PANEL1_OBJECTS.LEVEL, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_NEW_SIZER:Add(DIALOG1_PANEL1_OBJECTS.ACCOUNT_ID_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_NEW_SIZER:Add(DIALOG1_PANEL1_OBJECTS.ACCOUNT_ID, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_NEW_SIZER:Add(DIALOG1_PANEL1_OBJECTS.VOCATION_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_NEW_SIZER:Add(DIALOG1_PANEL1_OBJECTS.VOCATION, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_NEW_SIZER:Add(DIALOG1_PANEL1_OBJECTS.SEX_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_NEW_SIZER:Add(DIALOG1_PANEL1_OBJECTS.SEX, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_NEW_SIZER:Add(DIALOG1_PANEL1_OBJECTS.MAGLEVEL_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_NEW_SIZER:Add(DIALOG1_PANEL1_OBJECTS.MAGLEVEL, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_NEW_SIZER:Add(DIALOG1_PANEL1_OBJECTS.GROUP_ID_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_NEW_SIZER:Add(DIALOG1_PANEL1_OBJECTS.GROUP_ID, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_NEW_SIZER:Add(DIALOG1_PANEL1_OBJECTS.STATIC_LINE, 0, wx.wxEXPAND + wx.wxLEFT + wx.wxRIGHT+50, 10)
   DIALOG1_NEW_SIZER:Add(DIALOG1_PANEL1_OBJECTS.BUTTON_OK, 0, wx.wxALL + wx.wxALIGN_LEFT, 10)
   DIALOG1_NEW_SIZER:Add(DIALOG1_PANEL1_OBJECTS.BUTTON_CLOSE, 0, wx.wxALL + wx.wxALIGN_LEFT, 10)

   DIALOG1_NOTEBOOK_OBJECTS.PANEL1:SetSizer(DIALOG1_NEW_SIZER)
   DIALOG1_NEW_SIZER:SetSizeHints(DIALOG1_NOTEBOOK_OBJECTS.PANEL1)

local DIALOG1_SEARCH_SIZER = wx.wxBoxSizer(wx.wxVERTICAL)
   DIALOG1_SEARCH_SIZER:Add(DIALOG1_PANEL2_OBJECTS.NAME_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_SEARCH_SIZER:Add(DIALOG1_PANEL2_OBJECTS.NAME, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_SEARCH_SIZER:Add(DIALOG1_PANEL2_OBJECTS.LEVEL_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_SEARCH_SIZER:Add(DIALOG1_PANEL2_OBJECTS.LEVEL, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_SEARCH_SIZER:Add(DIALOG1_PANEL2_OBJECTS.ID_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_SEARCH_SIZER:Add(DIALOG1_PANEL2_OBJECTS.ID, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_SEARCH_SIZER:Add(DIALOG1_PANEL2_OBJECTS.ACCOUNT_ID_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_SEARCH_SIZER:Add(DIALOG1_PANEL2_OBJECTS.ACCOUNT_ID, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_SEARCH_SIZER:Add(DIALOG1_PANEL2_OBJECTS.VOCATION_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_SEARCH_SIZER:Add(DIALOG1_PANEL2_OBJECTS.VOCATION, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_SEARCH_SIZER:Add(DIALOG1_PANEL2_OBJECTS.SEX_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_SEARCH_SIZER:Add(DIALOG1_PANEL2_OBJECTS.SEX, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_SEARCH_SIZER:Add(DIALOG1_PANEL2_OBJECTS.MAGLEVEL_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_SEARCH_SIZER:Add(DIALOG1_PANEL2_OBJECTS.MAGLEVEL, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_SEARCH_SIZER:Add(DIALOG1_PANEL2_OBJECTS.GROUP_ID_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_SEARCH_SIZER:Add(DIALOG1_PANEL2_OBJECTS.GROUP_ID, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_SEARCH_SIZER:Add(DIALOG1_PANEL2_OBJECTS.STATIC_LINE, 0, wx.wxEXPAND + wx.wxLEFT + wx.wxRIGHT+50, 10)
   DIALOG1_SEARCH_SIZER:Add(DIALOG1_PANEL2_OBJECTS.BUTTON_OK, 0, wx.wxALL + wx.wxALIGN_LEFT, 10)
   DIALOG1_SEARCH_SIZER:Add(DIALOG1_PANEL2_OBJECTS.BUTTON_CLOSE, 0, wx.wxALL + wx.wxALIGN_LEFT, 10)

   DIALOG1_NOTEBOOK_OBJECTS.PANEL2:SetSizer(DIALOG1_SEARCH_SIZER)
   DIALOG1_SEARCH_SIZER:SetSizeHints(DIALOG1_NOTEBOOK_OBJECTS.PANEL2)

   DIALOG1_OBJECTS.NOTEBOOK:AddPage(DIALOG1_NOTEBOOK_OBJECTS.PANEL1, "New player.")
   DIALOG1_OBJECTS.NOTEBOOK:AddPage(DIALOG1_NOTEBOOK_OBJECTS.PANEL2, "Search a player.")

local DIALOG2 = wx.wxDialog(FRAME, wx.wxID_ANY, 'Accounts', wx.wxDefaultPosition, wx.wxSize(400,300))
local DIALOG2_OBJECTS = {
                       NOTEBOOK = wx.wxNotebook(DIALOG2, wx.wxID_ANY, wx.wxDefaultPosition, wx.wxSize(400,500))
}

local DIALOG2_NOTEBOOK_OBJECTS = {
                               PANEL1 = wx.wxPanel(DIALOG2_OBJECTS.NOTEBOOK, wx.wxID_ANY),
                               PANEL2 = wx.wxPanel(DIALOG2_OBJECTS.NOTEBOOK, wx.wxID_ANY),
}

local DIALOG2_PANEL1_OBJECTS = {
                               STATIC_LINE = wx.wxStaticLine(DIALOG2_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY),
                               BUTTON_CLOSE = wx.wxButton(DIALOG2_NOTEBOOK_OBJECTS.PANEL1, ID_CLOSE, "Close"),
                               BUTTON_OK = wx.wxButton(DIALOG2_NOTEBOOK_OBJECTS.PANEL1,    ID_DIALOG2_PANEL1_OK, "Ok"),
                               NAME = wx.wxTextCtrl(DIALOG2_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, ""),
                               NAME_TEXT = wx.wxStaticText(DIALOG2_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, "Account name"),
                               PASSWORD = wx.wxTextCtrl(DIALOG2_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, ""),
                               PASSWORD_TEXT = wx.wxStaticText(DIALOG2_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, "Password"),
                               PREMIUM_DAYS = wx.wxTextCtrl(DIALOG2_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, ""),
                               PREMIUM_DAYS_TEXT = wx.wxStaticText(DIALOG2_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, "Premium days"),
}

local DIALOG2_PANEL2_OBJECTS = {
                               STATIC_LINE = wx.wxStaticLine(DIALOG2_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY),
                               BUTTON_CLOSE = wx.wxButton(DIALOG2_NOTEBOOK_OBJECTS.PANEL2, ID_CLOSE, "Close"),
                               BUTTON_OK = wx.wxButton(DIALOG2_NOTEBOOK_OBJECTS.PANEL2,    ID_DIALOG2_PANEL2_OK, "Ok"),
                               NAME = wx.wxTextCtrl(DIALOG2_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, ""),
                               NAME_TEXT = wx.wxStaticText(DIALOG2_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, "Account name"),
                               PASSWORD = wx.wxTextCtrl(DIALOG2_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, ""),
                               PASSWORD_TEXT = wx.wxStaticText(DIALOG2_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, "Password"),
                               PREMIUM_DAYS = wx.wxTextCtrl(DIALOG2_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, ""),
                               PREMIUM_DAYS_TEXT = wx.wxStaticText(DIALOG2_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, "Premium days"),
                               ID = wx.wxTextCtrl(DIALOG2_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, ""),
                               ID_TEXT = wx.wxStaticText(DIALOG2_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, "Account id")
}

local DIALOG2_NEW_SIZER = wx.wxBoxSizer(wx.wxVERTICAL)
   DIALOG2_NEW_SIZER:Add(DIALOG2_PANEL1_OBJECTS.NAME_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG2_NEW_SIZER:Add(DIALOG2_PANEL1_OBJECTS.NAME, 0, wx.wxALIGN_CENTER, 0)
   DIALOG2_NEW_SIZER:Add(DIALOG2_PANEL1_OBJECTS.PASSWORD_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG2_NEW_SIZER:Add(DIALOG2_PANEL1_OBJECTS.PASSWORD, 0, wx.wxALIGN_CENTER, 0)
   DIALOG2_NEW_SIZER:Add(DIALOG2_PANEL1_OBJECTS.PREMIUM_DAYS_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG2_NEW_SIZER:Add(DIALOG2_PANEL1_OBJECTS.PREMIUM_DAYS, 0, wx.wxALIGN_CENTER, 0)
   DIALOG2_NEW_SIZER:Add(DIALOG2_PANEL1_OBJECTS.STATIC_LINE, 0, wx.wxEXPAND + wx.wxLEFT + wx.wxRIGHT+50, 10)
   DIALOG2_NEW_SIZER:Add(DIALOG2_PANEL1_OBJECTS.BUTTON_OK, 0, wx.wxALL + wx.wxALIGN_LEFT, 10)
   DIALOG2_NEW_SIZER:Add(DIALOG2_PANEL1_OBJECTS.BUTTON_CLOSE, 0, wx.wxALL + wx.wxALIGN_LEFT, 10)

   DIALOG2_NOTEBOOK_OBJECTS.PANEL1:SetSizer(DIALOG2_NEW_SIZER)
   DIALOG2_NEW_SIZER:SetSizeHints(DIALOG2_NOTEBOOK_OBJECTS.PANEL1)

local DIALOG2_SEARCH_SIZER = wx.wxBoxSizer(wx.wxVERTICAL)
local DIALOG2_SIZER = wx.wxBoxSizer(wx.wxVERTICAL)
   DIALOG2_SIZER:Add(DIALOG2_PANEL2_OBJECTS.ID_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG2_SIZER:Add(DIALOG2_PANEL2_OBJECTS.ID, 0, wx.wxALIGN_CENTER, 0)
   DIALOG2_SIZER:Add(DIALOG2_PANEL2_OBJECTS.NAME_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG2_SIZER:Add(DIALOG2_PANEL2_OBJECTS.NAME, 0, wx.wxALIGN_CENTER, 0)
   DIALOG2_SIZER:Add(DIALOG2_PANEL2_OBJECTS.PASSWORD_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG2_SIZER:Add(DIALOG2_PANEL2_OBJECTS.PASSWORD, 0, wx.wxALIGN_CENTER, 0)
   DIALOG2_SIZER:Add(DIALOG2_PANEL2_OBJECTS.PREMIUM_DAYS_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG2_SIZER:Add(DIALOG2_PANEL2_OBJECTS.PREMIUM_DAYS, 0, wx.wxALIGN_CENTER, 0)
   DIALOG2_SIZER:Add(DIALOG2_PANEL2_OBJECTS.STATIC_LINE, 0, wx.wxEXPAND + wx.wxLEFT + wx.wxRIGHT+50, 10)
   DIALOG2_SIZER:Add(DIALOG2_PANEL2_OBJECTS.BUTTON_OK, 0, wx.wxALL + wx.wxALIGN_LEFT, 10)
   DIALOG2_SIZER:Add(DIALOG2_PANEL2_OBJECTS.BUTTON_CLOSE, 0, wx.wxALL + wx.wxALIGN_LEFT, 10)

   DIALOG2_NOTEBOOK_OBJECTS.PANEL2:SetSizer(DIALOG2_SIZER)
   DIALOG2_SIZER:SetSizeHints(DIALOG2_NOTEBOOK_OBJECTS.PANEL2)


   DIALOG2_OBJECTS.NOTEBOOK:AddPage(DIALOG2_NOTEBOOK_OBJECTS.PANEL1, "New account.")
   DIALOG2_OBJECTS.NOTEBOOK:AddPage(DIALOG2_NOTEBOOK_OBJECTS.PANEL2, "Search account.")

   DIALOG2:Connect(ID_DIALOG2_PANEL1_OK, wx.wxEVT_COMMAND_BUTTON_CLICKED,
       function ()
           env = assert(luasql.mysql())
           con = assert(env:connect(config.databaseName, config.userName, config.userPassword, config.userHost, config.port))
           row = assert(con:execute("INSERT INTO `accounts` (`id`, `name`, `password`, `premdays`) VALUES (".. LastAccountID() ..", '".. DIALOG2_PANEL1_OBJECTS.NAME:GetValue() .."', '".. DIALOG2_PANEL1_OBJECTS.PASSWORD:GetValue() .."', ".. DIALOG2_PANEL1_OBJECTS.PREMIUM_DAYS:GetValue() ..");"))
           con:close()
           env:close()
           wx.wxMessageBox('A account with account name '.. DIALOG2_PANEL1_OBJECTS.NAME:GetValue() ..' and password '.. DIALOG2_PANEL1_OBJECTS.PASSWORD:GetValue() ..' added on your database.')
       end
   )

   DIALOG2:Connect(ID_DIALOG2_PANEL2_OK, wx.wxEVT_COMMAND_BUTTON_CLICKED,
       function ()
           env = assert(luasql.mysql())
           con = assert(env:connect(config.databaseName, config.userName, config.userPassword, config.userHost, config.port))
           row = assert(con:execute("SELECT * FROM `accounts` WHERE `id` = ".. DIALOG2_PANEL2_OBJECTS.ID:GetValue() ..";"))
           if row:numrows() == 0 then
               wx.wxMessageBox('A account with id '.. DIALOG2_PANEL2_OBJECTS.ID:GetValue() ..' not found.')
               DIALOG2_PANEL2_OBJECTS.ID:SetValue('')
               DIALOG2_PANEL2_OBJECTS.NAME:SetValue('')
               DIALOG2_PANEL2_OBJECTS.PASSWORD:SetValue('')
               DIALOG2_PANEL2_OBJECTS.PREMIUM_DAYS:SetValue('')
           else
               Q = {}
               row:fetch(Q, "a")
               DIALOG2_PANEL2_OBJECTS.ID:SetValue(Q.id)
               DIALOG2_PANEL2_OBJECTS.NAME:SetValue(Q.name)
               DIALOG2_PANEL2_OBJECTS.PASSWORD:SetValue(Q.password)
               DIALOG2_PANEL2_OBJECTS.PREMIUM_DAYS:SetValue(Q.premdays)
           end
           con:close()
           env:close()
       end
   )



   DIALOG1:Connect(ID_CLOSE, wx.wxEVT_COMMAND_BUTTON_CLICKED,
       function ()
           DIALOG1:Close(true)
       end
   )

   DIALOG2:Connect(ID_CLOSE, wx.wxEVT_COMMAND_BUTTON_CLICKED,
       function ()
           DIALOG2:Close(true)
       end
   )


   FRAME:Connect(ID_PLAYER, wx.wxEVT_COMMAND_MENU_SELECTED,
       function ()
           DIALOG1:SetAutoLayout(true)
           DIALOG1:Show()
       end
   )

   FRAME:Connect(ID_ACCOUNT, wx.wxEVT_COMMAND_MENU_SELECTED,
       function ()
           DIALOG2:SetAutoLayout(true)
           DIALOG2:Show(true)
       end
   )


   FRAME:Connect(ID_EXIT, wx.wxEVT_COMMAND_MENU_SELECTED,
       function ()
           FRAME:Close(true)
       end
   )

   DIALOG1:Connect(ID_DIALOG1_PANEL1_OK, wx.wxEVT_COMMAND_BUTTON_CLICKED,
       function ()
           env = assert(luasql.mysql())
           con = assert(env:connect(config.databaseName, config.userName, config.userPassword, config.userHost, config.port))
           row = assert(con:execute("INSERT INTO `players` (`name`,`level`,`id`,`account_id`,`vocation`,`sex`,`maglevel`, `group_id`) VALUES ('".. DIALOG1_PANEL1_OBJECTS.NAME:GetValue() .."', ".. DIALOG1_PANEL1_OBJECTS.LEVEL:GetValue() ..", ".. LastID()+1 ..", ".. DIALOG1_PANEL1_OBJECTS.ACCOUNT_ID:GetValue() ..",".. DIALOG1_PANEL1_OBJECTS.VOCATION:GetValue() ..", ".. DIALOG1_PANEL1_OBJECTS.SEX:GetValue() ..",".. DIALOG1_PANEL1_OBJECTS.MAGLEVEL:GetValue() ..", ".. DIALOG1_PANEL1_OBJECTS.GROUP_ID:GetValue() ..");"), "Player named ".. DIALOG1_PANEL1_OBJECTS.NAME:GetValue() .." already exists.")
           con:close()
           env:close()
           wx.wxMessageBox('Player '.. DIALOG1_PANEL1_OBJECTS.NAME:GetValue() ..' added on your database.')
       end
   )

   DIALOG1:Connect(ID_DIALOG1_PANEL2_OK, wx.wxEVT_COMMAND_BUTTON_CLICKED,
       function ()
       local GROUPS_ID = {
                           "Player",
                           "Tutor",
                           "Senior Tutor",
                           "Gamemaster",
                           "Comunnity Manager",
                           "God",
       }
       local SEX = {
                           [0] = "Female",
                           [1] = "Male",
                           [2] = "Undefined",
       }
       local VOC = {
                       [0] = "No vocation",
                       [1] = "Sorcerer",
                       [2] = "Druid",
                       [3] = "Paladin",
                       [4] = "Knight",
                       [5] = "Master sorcerer",
                       [6] = "Elder druid",
                       [7] = "Royal paladin",
                       [8] = "Elite knight",
       }
           environment = assert(luasql.mysql())
           connection = assert(environment:connect(config.databaseName, config.userName, config.userPassword, config.userHost, config.port))
           row = assert(connection:execute("SELECT * FROM `players` WHERE `name` = '".. DIALOG1_PANEL2_OBJECTS.NAME:GetValue() .."';"))
           if row:numrows() == 0 then
               wx.wxMessageBox('Player '.. DIALOG1_PANEL2_OBJECTS.NAME:GetValue() ..' not found.')
               DIALOG1_PANEL2_OBJECTS.NAME:SetValue('')
               DIALOG1_PANEL2_OBJECTS.LEVEL:SetValue('')
               DIALOG1_PANEL2_OBJECTS.ID:SetValue('')
               DIALOG1_PANEL2_OBJECTS.ACCOUNT_ID:SetValue('')
               DIALOG1_PANEL2_OBJECTS.VOCATION:SetValue('')
               DIALOG1_PANEL2_OBJECTS.SEX:SetValue('')
               DIALOG1_PANEL2_OBJECTS.MAGLEVEL:SetValue('')
               DIALOG1_PANEL2_OBJECTS.GROUP_ID:SetValue('')
           else
               local t = {}
               row:fetch(t, "a")
               DIALOG1_PANEL2_OBJECTS.NAME:SetValue(t.name)
               DIALOG1_PANEL2_OBJECTS.LEVEL:SetValue(t.level)
               DIALOG1_PANEL2_OBJECTS.ID:SetValue(t.id)
               DIALOG1_PANEL2_OBJECTS.ACCOUNT_ID:SetValue(t.account_id)
               DIALOG1_PANEL2_OBJECTS.VOCATION:SetValue(VOC[tonumber(t.vocation)])
               DIALOG1_PANEL2_OBJECTS.SEX:SetValue(SEX[tonumber(t.sex)])
               DIALOG1_PANEL2_OBJECTS.MAGLEVEL:SetValue(t.maglevel)
               DIALOG1_PANEL2_OBJECTS.GROUP_ID:SetValue(GROUPS_ID[tonumber(t.group_id)])

           end
       connection:close()
       environment:close()
       end
   )

   FRAME:Show(true)
   wx.wxGetApp():MainLoop()

 

 

Configure a tabela config com os dados do seu database MySql:

 

local config = {
               databaseName = '',
               userName = '',
               userPassword = '',
               userHost = '',
               port = 3306,
}

Nome do database, nome de usuário, senha, host e porta respectivamente.

 

Para o código funcionar é necessário um debugger com as source do WxLua, ou seja, o SciTE.

Download SciTE: http://luaforge.net/frs/?group_id=377

 

Se gostou do WxLua, acesse o site: http://wxlua.sourceforge.net/

 

Obs: Se quiser usar o "programa" direto, basta salvar o arquivo em extensão .wlua.

 

Coloquei o script só para vocês verem e terem uma idéia, por favor não usem o script neste post, porque esse site buga tudo a formatação ai vai enche de gente reclamando de erro. Vou colocar o download no final.

O arquivo está em .lua, pois o site não aceita .wlua, só renomeia e coloca .wxlua se quiser.

 

Agora, SS:

[spoiler=SS]finderp1.png

finderp2.png

finderp3.png

finderp4.png

finderp5.png

 

Editado por Mickfern

Compartilhar este post


Link para o post
Compartilhar em outros sites
gpedro    47
gpedro

Muito Lokz,

---

mais muitas pessoas vão ter problema por causa disso:

O arquivo está em .lua, pois o site não aceita .wlua, só renomeia e coloca .wxlua se quiser.

---

Sugestão para próxima versão:

  • Deixe o botão de OK e Close na mesma linha.
  • Botão para ordenar por ordem alfabética.
  • Coloca em alguma parte seus créditos para ser reconhecido.
  • Puxar informações da config.lua para configuração da conexão ( software > banco de dados ).
  • ...

Editado por gpedro

Compartilhar este post


Link para o post
Compartilhar em outros sites
Socket    0
Socket
Muito Lokz,

---

mais muitas pessoas vão ter problema por causa disso:

 

---

Sugestão para próxima versão:

  • Deixe o botão de OK e Close na mesma linha.
  • Botão para ordenar por ordem alfabética.
  • Coloca em alguma parte seus créditos para ser reconhecido.
  • Puxar informações da config.lua para configuração da conexão ( software > banco de dados ).
  • ...

 

Resposta para as sugestões:

 

  • Não sei fazer isso, só se colocar o wxBoxSizer em wxHORIZONTAL, só que o resto usa o wxBoxSizer em wxVERTICAL, ai depois vejo isso.

 

  • WTF? Vo ver isso, vlw pela sugestão, só não vejo pra que fazer isso.
  • Vo coloca na próx VS, só que como lua é linguagem interpretada, onde tiver por exemplo "Author: Socket from Otserver Networks", é so o cara clicar Editar script, coloca "Author: Fulano from tallugar".
  • Bom, isso até dá se o cara configurar o diretório do ot neh, mas esse código só vai virar script (talk, action), se alguem editar as source do ot, ou os fdp criadores do WxLua, criarem a .dll, mas mesmo assim vai ter que mudar as source.

Att. Socket

Compartilhar este post


Link para o post
Compartilhar em outros sites
Mock    32
Mock

oia relamente ficou legal :o

Compartilhar este post


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

 

Que bom que gostou, já estou trabalhando na V2, nela não será necessário configurar nada (tem que configurar o config.lua neah), apenas colocar o arquivo .wlua e um .dll na pasta do ot.

 

E um sistema fulero pra tentar manter os créditos, mas qualquer um com o mínimo de conhecimento em Lua consegue mudar, mas eu acho que quem tem esse "conhecimento" não vai tentar roubar esses créditos neh.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Mickfern    32
Mickfern

Olá achei seu programinha bem legal, mas queria perguntar uma coisa sobre isto :

O arquivo está em .lua, pois o site não aceita .wlua, só renomeia e coloca .wxlua se quiser.

É preciso renomear ou não ?

Compartilhar este post


Link para o post
Compartilhar em outros sites
Socket    0
Socket
Olá achei seu programinha bem legal, mas queria perguntar uma coisa sobre isto :

O arquivo está em .lua, pois o site não aceita .wlua, só renomeia e coloca .wxlua se quiser.

É preciso renomear ou não ?

 

Bem, não é necessário, mais qnd nao está em .lua ele abre algum debugger, em .wlua ele abre como se fosse um executavel, mas lembre-se que precisa ter o SciTE instalado, tem o link no tópico.

Editado por Socket

Compartilhar este post


Link para o post
Compartilhar em outros sites
Dean    1
Dean

Se você não renomear precisará executar o interpretador antes, mas se renomear ficará como um executável.

Edit:

Foi mal, o Socket postou quando eu tava postando.

@Topic

Bem legal, ta evoluindo em, quero ver a 2.0 :D

Compartilhar este post


Link para o post
Compartilhar em outros sites
Socket    0
Socket
Se você não renomear precisará executar o interpretador antes, mas se renomear ficará como um executável.

Edit:

Foi mal, o Socket postou quando eu tava postando.

@Topic

Bem legal, ta evoluindo em, quero ver a 2.0 :D

 

To terminando a 2.0, dêem sugestões sobre o que adcionar.

 

Sobre a pergunta do Mickfern, não da nada.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Notorious    1
Notorious
E um sistema fulero pra tentar manter os créditos, mas qualquer um com o mínimo de conhecimento em Lua consegue mudar, mas eu acho que quem tem esse "conhecimento" não vai tentar roubar esses créditos neh.

Usa Tools > Compile ou CTRL+F7 no Scite, ele "compila" em .luac, na verdade ele criptografa e vira tipo um executavel, quem não tem conhecimento em lua concerteza nao vai conseguir mudar nada, qualquer linha que muda já corrompe todo o arquivo ...

 

Foi um bom uso pra wxLua, as libs de wx, tanto pra lua quanto pra C++ etc são bem práticas mesmo, ainda trabalhando com sql fica ótimo, parabéns :}

Editado por Notorious

Compartilhar este post


Link para o post
Compartilhar em outros sites
Socket    0
Socket
Usa Tools > Compile ou CTRL+F7 no Scite, ele "compila" em .luac, na verdade ele criptografa e vira tipo um executavel, quem não tem conhecimento em lua concerteza nao vai conseguir mudar nada, qualquer linha que muda já corrompe todo o arquivo ...

 

Foi um bom uso pra wxLua, as libs de wx, tanto pra lua quanto pra C++ etc são bem práticas mesmo, ainda trabalhando com sql fica ótimo, parabéns :}

 

Obrigado, quanto ao compile, aqui não dá, tá tipo "desativado", vou ver aqui que que eu faço.

 

EDIT: Só mudei pra .lua, já deu vlw ai.

 

Só tem uma coisa, em .luac fica terrivelmente horroroso a skin kk'

Editado por Socket

Compartilhar este post


Link para o post
Compartilhar em outros sites
Kaotar    5
Kaotar
Vo coloca na próx VS, só que como lua é linguagem interpretada, onde tiver por exemplo "Author: Socket from Otserver Networks", é so o cara clicar Editar script, coloca "Author: Fulano from tallugar".

 

Cara é so compilar e fazer um interpretador proprio para o seu script. O mock já fez o interpretador então é so modificar um pouco para não aparecer o console, simples.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Notorious    1
Notorious
Obrigado, quanto ao compile, aqui não dá, tá tipo "desativado", vou ver aqui que que eu faço.

 

EDIT: Só mudei pra .lua, já deu vlw ai.

 

Só tem uma coisa, em .luac fica terrivelmente horroroso a skin kk'

Que skin? O compile não muda nada no codigo, apenas impede a edição ...

Compartilhar este post


Link para o post
Compartilhar em outros sites
Dean    1
Dean

Acho que ele está falando da janelinha preta que aparece.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Socket    0
Socket
Acho que ele está falando da janelinha preta que aparece.

 

A janelinha, qnd tá em .wlua não aparece, mas, quando coloca em .luac aparece e fica uma skin horrivel, pareceno win2000, e eu que to acostumano com win7 é tenso, é só isso mesmo.

 

To terminando a v2, coloquei pra editar/procura guild, adcionei guildnick ao player, e agora to terminando rank.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Conde2    0
Conde2

Hey Socket queria saber onde você achou a base do wxLua xD

Ou você mesmo que fez o script do 0 ?

Acho pouco provável mais se foi ficou ótimo cara parabéns.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Dean    1
Dean

@Conde

É só ver no manual.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Socket    0
Socket
Hey Socket queria saber onde você achou a base do wxLua xD

Ou você mesmo que fez o script do 0 ?

Acho pouco provável mais se foi ficou ótimo cara parabéns.

 

Cara, wxlua é mto simples, tudo que eu sei ou eu pego aula, ou vejo scripts saca, eu vejo alguma coisa e ja se fazer, vai na pasta do scite -> examples -> wxlua. Lá tem muitas coisas, bem rox, da pra aprender bem fast.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Conde2    0
Conde2

@Dean

Cara me desculpe mais aprender vendo o manual de referencias é igual a não aprender.

Aquilo é só uma base bem simples pra se recordar nada alem disso.

 

@Socket

Sim eu sei que existe na pasta exemples XD

Eu vo da uma procurada eu sei só o básico acho que vo aprender um pouco mais de wxLua mesmo não sendo grande coisa a interface =X

Compartilhar este post


Link para o post
Compartilhar em outros sites
Socket    0
Socket
@Dean

Cara me desculpe mais aprender vendo o manual de referencias é igual a não aprender.

Aquilo é só uma base bem simples pra se recordar nada alem disso.

 

@Socket

Sim eu sei que existe na pasta exemples XD

Eu vo da uma procurada eu sei só o básico acho que vo aprender um pouco mais de wxLua mesmo não sendo grande coisa a interface =X

 

Eu já postei a V2.0, se quiser olha lá.

 

Sim, não é grande coisa em interface mas como lua é "desprovida de capacidade visual", ajuda e muito. Além dos botãozin ser buitin :laugh:. Só quando compila q fica aquele visual de primeira versão do windows.

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.

×