Ir para conteúdo
Entre para seguir isso  
Socket

Finder Vs 2.0

Recommended Posts

Socket    0
Socket

Bom, essa é a segunda versão do meu mini-programa feito em lua.

 

Ele foi feito com elementos wxFrame, wxDialog, wxLuaHtmlWindow, wxNotebook, wxPanel, wxComboBox, wxTextCtrl, wxStaticText, wxStaticLine, wxButton.

 

Em sua atual versão ele conta com:

 

  • Criar e procurar players.
  • Criar e procurar accounts
  • Criar e procurar guilds.
  • Ver o rank.

Agora você não precisa configurar as configurações do database, basta colocar o arquivo .wlua e o .dll na pasta de seu ot. Ele só funciona se você estiver usando database mysql.

 

O script principal (.wlua) ficou EXCESSIVAMENTE grande, com 714 linhas. E o .luac que na verdade é uma lib de funções, ficou com 89 linhas.

 

Não usem o script que vou colocar no post, pois vai estar TOTALMENTE bugado, pois o próprio site buga. Vou colocar o link do downlaod do arquivo .rar no 4shared (8kb)

 

[spoiler=Script]

-----------------------------------------------------------------------------
-- Name:        Finder.wlua
-- Author:      Cézar, Otserv Networks' Socket
-- Created:     15/05/2010
-----------------------------------------------------------------------------

function GetExePath() -- Function by J Winwood
   local function findLast(filePath) -- find index of last / or \ in string
       local lastOffset = nil
       local offset = nil
       repeat
           offset = string.find(filePath, "\\") or string.find(filePath, "/")

           if offset then
               lastOffset = (lastOffset or 0) + offset
               filePath = string.sub(filePath, offset + 1)
           end
       until not offset

       return lastOffset
   end


   local filePath = debug.getinfo(1, "S").source

   if string.byte(filePath) == string.byte('@') then
       local offset = findLast(filePath)
       if offset ~= nil then
           -- remove the @ at the front up to just before the path separator
           filePath = string.sub(filePath, 2, offset - 1)
       else
           filePath = "."
       end
   else
       filePath = wx.wxGetCwd()
   end

   return filePath
end

dofile(GetExePath()..'\\libFinder.luac')
require "luasql.mysql"
require("wx")


local config = {
               databaseName = getConfigValue(GetExePath(),"sqlDatabase"),
               userName = getConfigValue(GetExePath(),"sqlUser"),
               userPassword = getConfigValue(GetExePath(),"sqlPass"),
               userHost = getConfigValue(GetExePath(),"sqlHost"),
               port = tonumber(getConfigValue(GetExePath(),"sqlPort")),
}

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 doRight(s1,s2)
   return #s1 == 4 and '['..s1..']  '..s2 or #s1 == 3 and '['..s1..']   '..s2 or #s1 == 2 and '['..s1..']    '..s2 or #s1 == 1 and '['..s1..']     '..s2
end

function GetRank(type)
   env = assert(luasql.mysql())
   con = assert(env:connect(config.databaseName ,config.userName, config.userPassword, config.userHost, config.port))
   cur = assert(con:execute("SELECT * FROM `players` WHERE 1 ORDER BY `".. type .."` DESC LIMIT 15"))
   row = cur:fetch ({}, "a")
   p = 1
   str = "[".. type:capitalizeall() .."] - Name"
   while row do
       str = str..'<br>'..doRight(row[type],'- '.. row.name)
       row = cur:fetch (row, "a")
       p = p+1
   end
   con:close()
   env:close()
   return str
end

function GetSkillRank(type)
local tskill = {
               club = 1,
               sword = 2,
               axe = 3,
               distance = 4,
               shield = 5,
               fishing = 6,
}
   env = assert(luasql.mysql())
   con = assert(env:connect(config.databaseName ,config.userName, config.userPassword, config.userHost, config.port))
   cur = assert(con:execute("SELECT `value`,`player_id` FROM `player_skills` WHERE `skillid` = ".. (tskill[type:lower()]) .." ORDER BY `value` DESC LIMIT 15"))
   row = cur:fetch ({}, "a")
   p = 1
   str = "[".. type:capitalizeall() .."] - Name"
   while row do
       cur2 = assert(con:execute("SELECT `name` FROM `players` WHERE `id` = ".. row.player_id ..";"))
       sql = {}
       cur2:fetch(sql, "a")
       str = str..'<br>'..doRight(row.value,'- '.. sql.name)
       row = cur:fetch (row, "a")
       p = p+1
   end
   con:close()
   env:close()
   return str
end

function getPlayerGUIDByName(name)
   env = assert(luasql.mysql())
   con = assert(env:connect(config.databaseName, config.userName, config.userPassword, config.userHost, config.port))
   row = assert(con:execute("SELECT `id` FROM `players` WHERE `name` = '".. name .."';"))
   b = {}
   row:fetch(b, "a")
   con:close()
   env:close()
   return b.id
end

function getPlayerNameByGUID(id)
   env = assert(luasql.mysql())
   con = assert(env:connect(config.databaseName, config.userName, config.userPassword, config.userHost, config.port))
   row = assert(con:execute("SELECT `name` FROM `players` WHERE `id` = ".. id ..";"))
   b = {}
   row:fetch(b, "a")
   con:close()
   env:close()
   return b.name
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

function LastGuildID() --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 `guilds` 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_DIALOG3_PANEL1_OK       =  NewID()
local ID_DIALOG3_PANEL2_OK       =  NewID()
local ID_ACCOUNT                 =  NewID()
local ID_PLAYER                  =  NewID()
local ID_EXIT                    =  NewID()
local ID_CLOSE                   =  NewID()
local ID_GUILD                   =  NewID()
local ID_RANK                    =  NewID()

local FRAME = wx.wxFrame(wx.NULL, wx.wxID_OK, "Finder", wx.wxDefaultPosition, wx.wxSize(550, 350), wx.wxDEFAULT_FRAME_STYLE)
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."},
                                           {ID_GUILD, "&Guilds\tCtrl+G",     "Create and search a guild."},
                                           {ID_RANK, "&Rank\tCtrl+R", "See the highscores from your server."}
                       }),

                       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 = {
                               COMBOBOX = wx.wxComboBox(FRAME_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, "Select player", wx.wxDefaultPosition, wx.wxDefaultSize, _F3(GetAllPlayers()), wx.wxTE_PROCESS_ENTER),
                               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.COMBOBOX, 0, 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(_F7(CODE))

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_COMBOBOX_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"),
                               GUILD_NICK = wx.wxTextCtrl(DIALOG1_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, ""),
                               GUILD_NICK_TEXT = wx.wxStaticText(DIALOG1_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, "Guild nick"),
                               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.GUILD_NICK_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG1_SEARCH_SIZER:Add(DIALOG1_PANEL2_OBJECTS.GUILD_NICK, 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.")

local DIALOG3 = wx.wxDialog(FRAME, wx.wxID_ANY, 'Bans', wx.wxDefaultPosition, wx.wxSize(400,250))
local DIALOG3_OBJECTS = {
                       NOTEBOOK = wx.wxNotebook(DIALOG3, wx.wxID_ANY, wx.wxDefaultPosition, wx.wxSize(400,250))
}

local DIALOG3_NOTEBOOK_OBJECTS = {
                               PANEL1 = wx.wxPanel(DIALOG3_OBJECTS.NOTEBOOK, wx.wxID_ANY),
                               PANEL2 = wx.wxPanel(DIALOG3_OBJECTS.NOTEBOOK, wx.wxID_ANY),
}

local DIALOG3_PANEL1_OBJECTS = {
                               STATIC_LINE = wx.wxStaticLine(DIALOG3_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY),
                               BUTTON_CLOSE = wx.wxButton(DIALOG3_NOTEBOOK_OBJECTS.PANEL1, ID_CLOSE, "Close"),
                               BUTTON_OK = wx.wxButton(DIALOG3_NOTEBOOK_OBJECTS.PANEL1,    ID_DIALOG3_PANEL1_OK, "Ok"),
                               GUILD_NAME = wx.wxTextCtrl(DIALOG3_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, ""),
                               GUILD_NAME_TEXT = wx.wxStaticText(DIALOG3_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, "Guild name"),
                               OWNER_NAME = wx.wxTextCtrl(DIALOG3_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, ""),
                               OWNER_NAME_TEXT = wx.wxStaticText(DIALOG3_NOTEBOOK_OBJECTS.PANEL1, wx.wxID_ANY, "Owner name"),
}

local DIALOG3_PANEL2_OBJECTS = {
                               STATIC_LINE = wx.wxStaticLine(DIALOG3_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY),
                               BUTTON_CLOSE = wx.wxButton(DIALOG3_NOTEBOOK_OBJECTS.PANEL2, ID_CLOSE, "Close"),
                               BUTTON_OK = wx.wxButton(DIALOG3_NOTEBOOK_OBJECTS.PANEL2,    ID_DIALOG3_PANEL2_OK, "Ok"),
                               GUILD_NAME = wx.wxTextCtrl(DIALOG3_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, ""),
                               GUILD_NAME_TEXT = wx.wxStaticText(DIALOG3_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, "Guild name"),
                               OWNER_NAME = wx.wxTextCtrl(DIALOG3_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, ""),
                               OWNER_NAME_TEXT = wx.wxStaticText(DIALOG3_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, "Owner name"),
                               ID = wx.wxTextCtrl(DIALOG3_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, ""),
                               ID_TEXT = wx.wxStaticText(DIALOG3_NOTEBOOK_OBJECTS.PANEL2, wx.wxID_ANY, "Guild id")
}

local DIALOG3_NEW_SIZER = wx.wxBoxSizer(wx.wxVERTICAL)
   DIALOG3_NEW_SIZER:Add(DIALOG3_PANEL1_OBJECTS.GUILD_NAME_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG3_NEW_SIZER:Add(DIALOG3_PANEL1_OBJECTS.GUILD_NAME, 0, wx.wxALIGN_CENTER, 0)
   DIALOG3_NEW_SIZER:Add(DIALOG3_PANEL1_OBJECTS.OWNER_NAME_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG3_NEW_SIZER:Add(DIALOG3_PANEL1_OBJECTS.OWNER_NAME, 0, wx.wxALIGN_CENTER, 0)
   DIALOG3_NEW_SIZER:Add(DIALOG3_PANEL1_OBJECTS.STATIC_LINE, 0, wx.wxEXPAND + wx.wxLEFT + wx.wxRIGHT+50, 10)
   DIALOG3_NEW_SIZER:Add(DIALOG3_PANEL1_OBJECTS.BUTTON_OK, 0, wx.wxALL + wx.wxALIGN_LEFT, 10)
   DIALOG3_NEW_SIZER:Add(DIALOG3_PANEL1_OBJECTS.BUTTON_CLOSE, 0, wx.wxALL + wx.wxALIGN_LEFT, 10)

   DIALOG3_NOTEBOOK_OBJECTS.PANEL1:SetSizer(DIALOG3_NEW_SIZER)
   DIALOG3_NEW_SIZER:SetSizeHints(DIALOG3_NOTEBOOK_OBJECTS.PANEL1)

local DIALOG3_SEARCH_SIZER = wx.wxBoxSizer(wx.wxVERTICAL)
local DIALOG3_SIZER = wx.wxBoxSizer(wx.wxVERTICAL)
   DIALOG3_SIZER:Add(DIALOG3_PANEL2_OBJECTS.GUILD_NAME_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG3_SIZER:Add(DIALOG3_PANEL2_OBJECTS.GUILD_NAME, 0, wx.wxALIGN_CENTER, 0)
   DIALOG3_SIZER:Add(DIALOG3_PANEL2_OBJECTS.OWNER_NAME_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG3_SIZER:Add(DIALOG3_PANEL2_OBJECTS.OWNER_NAME, 0, wx.wxALIGN_CENTER, 0)
   DIALOG3_SIZER:Add(DIALOG3_PANEL2_OBJECTS.ID_TEXT, 0, wx.wxALIGN_CENTER, 0)
   DIALOG3_SIZER:Add(DIALOG3_PANEL2_OBJECTS.ID, 0, wx.wxALIGN_CENTER, 0)
   DIALOG3_SIZER:Add(DIALOG3_PANEL2_OBJECTS.STATIC_LINE, 0, wx.wxEXPAND + wx.wxLEFT + wx.wxRIGHT+50, 10)
   DIALOG3_SIZER:Add(DIALOG3_PANEL2_OBJECTS.BUTTON_OK, 0, wx.wxALL + wx.wxALIGN_LEFT, 10)
   DIALOG3_SIZER:Add(DIALOG3_PANEL2_OBJECTS.BUTTON_CLOSE, 0, wx.wxALL + wx.wxALIGN_LEFT, 10)

   DIALOG3_NOTEBOOK_OBJECTS.PANEL2:SetSizer(DIALOG3_SIZER)
   DIALOG3_SIZER:SetSizeHints(DIALOG3_NOTEBOOK_OBJECTS.PANEL2)


   DIALOG3_OBJECTS.NOTEBOOK:AddPage(DIALOG3_NOTEBOOK_OBJECTS.PANEL1, "New guild.")
   DIALOG3_OBJECTS.NOTEBOOK:AddPage(DIALOG3_NOTEBOOK_OBJECTS.PANEL2, "Search guild.")

function returnRank(type)
local t = {
           ["Magic level"] = GetRank("maglevel"),
           ["Level"] = GetRank("level"),
           ["Club"] = GetSkillRank("club"),
           ["Axe"] = GetSkillRank("axe"),
           ["Sword"] = GetSkillRank("sword"),
           ["Distance"] = GetSkillRank("distance"),
           ["Shielding"] = GetSkillRank("shield"),
           ["Fishing"] = GetSkillRank("fishing"),
}
   return t[type]
end

local DIALOG4 = wx.wxDialog(FRAME, wx.wxID_ANY, "Rank", wx.wxDefaultPosition, wx.wxSize(400,300))
local DIALOG4_OBJECTS = {
                       COMBOBOX = wx.wxComboBox(DIALOG4, wx.wxID_ANY, "Select a rank type.", wx.wxDefaultPosition, wx.wxDefaultSize, {"Level","Magic level", "Club", "Axe", "Sword", "Distance", "Shielding", "Fishing"}, wx.wxTE_PROCESS_ENTER),
                       HTML = wx.wxLuaHtmlWindow(DIALOG4, wx.wxID_ANY,wx.wxDefaultPosition, wx.wxSize(400, 300))
}

local DIALOG4_SIZER = wx.wxBoxSizer(wx.wxVERTICAL)
DIALOG4_SIZER:Add(DIALOG4_OBJECTS.COMBOBOX, 0, wx.wxEXPAND+wx.wxALL, 5)
DIALOG4_SIZER:Add(DIALOG4_OBJECTS.HTML, 0, wx.wxALIGN_CENTER, 0)

DIALOG4:SetSizer(DIALOG4_SIZER)
DIALOG4_SIZER:SetSizeHints(DIALOG4)

function getSelect(event)
 rank = event:GetString()
 DIALOG4_OBJECTS.HTML:SetPage(returnRank(rank))
end

DIALOG4:Connect(wx.wxID_ANY, wx.wxEVT_COMMAND_COMBOBOX_SELECTED, getSelect)


   function setRankId(name)
       env = assert(luasql.mysql())
       con = assert(env:connect(config.databaseName, config.userName, config.userPassword, config.userHost, config.port))
       row = assert(con:execute("UPDATE `players` SET `rank_id` = '1' WHERE `name` = '".. name .."' LIMIT 1;"))
       con:close()
       env:close()
   end

   DIALOG3:Connect(ID_DIALOG3_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 `guilds` (`id`,`name`,`ownerid`) VALUES (".. LastGuildID() ..", '".. DIALOG3_PANEL1_OBJECTS.GUILD_NAME:GetValue() .."', ".. getPlayerGUIDByName(DIALOG3_PANEL1_OBJECTS.OWNER_NAME:GetValue()) ..");"))
           setRankId(DIALOG3_PANEL1_OBJECTS.OWNER_NAME:GetValue())
           con:close()
           env:close()
           wx.wxMessageBox("A guild with name '".. DIALOG3_PANEL1_OBJECTS.GUILD_NAME:GetValue() .."' and owner name '".. DIALOG3_PANEL1_OBJECTS.OWNER_NAME:GetValue() .."' added on your database.")
       end
   )

   DIALOG3:Connect(ID_DIALOG3_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 `guilds` WHERE `name` = '".. DIALOG3_PANEL2_OBJECTS.GUILD_NAME:GetValue() .."';"))
           if row:numrows() == 0 then
               wx.wxMessageBox("A guild with name '".. DIALOG3_PANEL2_OBJECTS.GUILD_NAME:GetValue() .."' doesn't exists.")
               return false
           end
           t = {}
           row:fetch(t, "a")
           DIALOG3_PANEL2_OBJECTS.OWNER_NAME:SetValue(getPlayerNameByGUID(t.ownerid))
           DIALOG3_PANEL2_OBJECTS.ID:SetValue(t.id)
       end
   )

   FRAME:Connect(ID_GUILD, wx.wxEVT_COMMAND_MENU_SELECTED,
       function()
           DIALOG3:Show(true)
       end
   )

   FRAME:Connect(ID_RANK, wx.wxEVT_COMMAND_MENU_SELECTED,
       function()
           DIALOG4:Show()
       end
   )

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

   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() .."' doesn't exists.")
               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 ()
           wx.wxMessageBox(_F7(EXITCODE))
           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() .."' doesn't exists.")
               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.GUILD_NICK:SetValue(t.guildnick)
               DIALOG1_PANEL2_OBJECTS.GROUP_ID:SetValue(GROUPS_ID[tonumber(t.group_id)])

           end
       connection:close()
       environment:close()
       end
   )
   function Main()
     FRAME:Show(true)
     wx.wxGetApp():MainLoop()
   end
   return _FF and Main() or not _FF and wx.wxMessageBox(_F7(WXCODE))

 

 

Download do arquivo (.rar): http://www.4shared.com/file/dP5qa-8B/finder.html

 

Para utilizar o código, você precisa do SciTE instalado em seu computador, link do LuaForge: http://luaforge.net/frs/?group_id=377

 

Gostou do wlua? Quer aprender? http://wxlua.sourceforge.net/

 

Agora, SS:

[spoiler=SS]finder1.png

finder2.pngfinder3.pngfinder4.pngfinder5.pngfinder6.pngfinder7.pngfinder8.png

 

Editado por Socket

Compartilhar este post


Link para o post
Compartilhar em outros sites
Notorious    1
Notorious

Só faltou compilar o dll, senão nao tem porque usar o formato .dll, só pra ficar mais bonitinho, e compilar o código lua pra .luac também. Abrindo com o bloco de notas da pra ver o codigo dos dois ...

Caso seja Open Source de proposito ignore

 

EDIT: Alias, nao tem nem porque usar dll, dll seria pra multiplos arquivos acessarem a mesma lib (dynamic library), porque voce simplesmente não deixa esses dados no código lua compilado?

Editado por Notorious

Compartilhar este post


Link para o post
Compartilhar em outros sites
Socket    0
Socket
Só faltou compilar o dll, senão nao tem porque usar o formato .dll, só pra ficar mais bonitinho, e compilar o código lua pra .luac também. Abrindo com o bloco de notas da pra ver o codigo dos dois ...

Caso seja Open Source de proposito ignore

 

EDIT: Alias, nao tem nem porque usar dll, dll seria pra multiplos arquivos acessarem a mesma lib (dynamic library), porque voce simplesmente não deixa esses dados no código lua compilado?

 

Certo, já passei para .luac, obrigado pela sugestão.

 

Continuem mandando sugestões hein.

Compartilhar este post


Link para o post
Compartilhar em outros sites
pejuge2    1
pejuge2

Mt massa, cada vez melhor em socketoso.

Compartilhar este post


Link para o post
Compartilhar em outros sites
CrazyDevil    0
CrazyDevil

socket. me ajuda ai no wanted dead or alive. postei lá e ngm me respondeu.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Mock    32
Mock

Socket, gostei, porem ainda acho tenso usar WX, apesar de ser melhor WX fica dificil d+ de organizar a interface

Compartilhar este post


Link para o post
Compartilhar em outros sites
vincity    0
vincity

Gostei cara.

Trabalha muito bem.

Organizado os codigos simples.

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.

×