Refactor modules, closes #223

* All modules are sandboxed now
* All images,sounds,fonts,translations and styles were moved to "data" folder
* Reorganize image files folders
* Remove unmaintained modules: client_particles, client_shaders
* Implement new automatic way to load styles and fonts
* Add hide/show offline option in VipList
* Add invite/exclude to/from private channel in players menus
* Many other minor changes
This commit is contained in:
Eduardo Bart
2013-01-18 20:39:11 -02:00
parent 20d9176d10
commit 28b5fc1d5a
330 changed files with 1171 additions and 1823 deletions

View File

@@ -1,4 +1,4 @@
local musicFilename = "startup"
local musicFilename = "/sounds/startup"
local musicChannel = g_sounds.getChannel(1)
function setMusic(filename)
@@ -75,7 +75,7 @@ function init()
end
g_window.setTitle(g_app.getName())
g_window.setIcon(resolvepath('clienticon'))
g_window.setIcon('/images/clienticon')
-- poll resize events
g_window.poll()

View File

@@ -10,7 +10,7 @@ Module
@onUnload: terminate()
load-later:
- client_skins
- client_styles
- client_locales
//- client_particles
- client_topmenu

Binary file not shown.

Before

Width:  |  Height:  |  Size: 518 B

Binary file not shown.

View File

@@ -1,15 +1,13 @@
Background = { }
-- private variables
local background
-- public functions
function Background.init()
background = g_ui.displayUI('background.otui')
function init()
background = g_ui.displayUI('background')
background:lower()
local clientVersionLabel = background:getChildById('clientVersionLabel')
clientVersionLabel:setText('OTClient ' .. g_app.getVersion() .. '\n' ..
clientVersionLabel:setText(g_app.getName() .. ' ' .. g_app.getVersion() .. '\n' ..
'Rev ' .. g_app.getBuildRevision() .. ' ('.. g_app.getBuildCommit() .. ')\n' ..
'Built on ' .. g_app.getBuildDate())
@@ -17,13 +15,13 @@ function Background.init()
g_effects.fadeIn(clientVersionLabel, 1500)
end
connect(g_game, { onGameStart = Background.hide })
connect(g_game, { onGameEnd = Background.show })
connect(g_game, { onGameStart = hide })
connect(g_game, { onGameEnd = show })
end
function Background.terminate()
disconnect(g_game, { onGameStart = Background.hide })
disconnect(g_game, { onGameEnd = Background.show })
function terminate()
disconnect(g_game, { onGameStart = hide })
disconnect(g_game, { onGameEnd = show })
g_effects.cancelFade(background:getChildById('clientVersionLabel'))
background:destroy()
@@ -32,14 +30,14 @@ function Background.terminate()
Background = nil
end
function Background.hide()
function hide()
background:hide()
end
function Background.show()
function show()
background:show()
end
function Background.hideVersionLabel()
function hideVersionLabel()
background:getChildById('clientVersionLabel'):hide()
end

View File

@@ -3,13 +3,8 @@ Module
description: Handles the background of the login screen
author: edubart
website: www.otclient.info
dependencies:
- client_topmenu
@onLoad: |
dofile 'background'
Background.init()
@onUnload: |
Background.terminate()
sandboxed: true
scripts: [ background ]
dependencies: [ client_topmenu ]
@onLoad: init()
@onUnload: terminate()

View File

@@ -1,6 +1,6 @@
Panel
id: background
image-source: /client_background/background.png
image-source: /images/background
image-smooth: true
image-fixed-ratio: true
anchors.top: topMenu.bottom

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 MiB

View File

@@ -92,7 +92,7 @@ end
local function onLoginWait(message, time)
CharacterList.destroyLoadBox()
waitingWindow = g_ui.displayUI('waitinglist.otui')
waitingWindow = g_ui.displayUI('waitinglist')
local label = waitingWindow:getChildById('infoLabel')
label:setText(message)
@@ -170,7 +170,7 @@ function CharacterList.terminate()
end
function CharacterList.create(characters, account, otui)
if not otui then otui = 'characterlist.otui' end
if not otui then otui = 'characterlist' end
if charactersWindow then
charactersWindow:destroy()

View File

@@ -60,9 +60,9 @@ end
-- public functions
function EnterGame.init()
enterGame = g_ui.displayUI('entergame.otui')
enterGameButton = TopMenu.addLeftButton('enterGameButton', tr('Login') .. ' (Ctrl + G)', 'login.png', EnterGame.openWindow)
motdButton = TopMenu.addLeftButton('motdButton', tr('Message of the day'), 'motd.png', EnterGame.displayMotd)
enterGame = g_ui.displayUI('entergame')
enterGameButton = modules.client_topmenu.addLeftButton('enterGameButton', tr('Login') .. ' (Ctrl + G)', '/images/topbuttons/login', EnterGame.openWindow)
motdButton = modules.client_topmenu.addLeftButton('motdButton', tr('Message of the day'), '/images/topbuttons/motd', EnterGame.displayMotd)
motdButton:hide()
g_keyboard.bindKeyDown('Ctrl+G', EnterGame.openWindow)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 962 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 331 B

View File

@@ -1,58 +0,0 @@
Extended = {}
-- private variables
local callbacks = {}
-- hooked functions
local function onExtendedOpcode(protocol, opcode, buffer)
local callback = callbacks[opcode]
if callback then
callback(protocol, opcode, buffer)
end
end
-- public functions
function Extended.init()
connect(ProtocolGame, { onExtendedOpcode = onExtendedOpcode } )
end
function Extended.terminate()
disconnect(ProtocolGame, { onExtendedOpcode = onExtendedOpcode } )
callbacks = nil
Extended = nil
end
function Extended.register(opcode, callback)
if not callback or type(callback) ~= 'function' then
error('Invalid callback.')
return false
end
if opcode < 0 or opcode > 255 then
error('Invalid opcode. Range: 0-255')
return false
end
if callbacks[opcode] then
error('Opcode is already taken.')
return false
end
callbacks[opcode] = callback
return true
end
function Extended.unregister(opcode)
if opcode < 0 or opcode > 255 then
error('Invalid opcode. Range: 0-255')
return false
end
if not callbacks[opcode] then
error('Opcode is not registered.')
return false
end
callbacks[opcode] = nil
return true
end

View File

@@ -1,12 +0,0 @@
Module
name: client_extended
description: Manage client extended messages callbacks
author: baxnie
website: www.otclient.info
@onLoad: |
dofile 'extended'
Extended.init()
@onUnload: |
Extended.terminate()

View File

@@ -1,88 +1,86 @@
Locales = { }
dofile 'neededtranslations.lua'
dofile 'neededtranslations'
-- private variables
local defaultLocaleName = 'en'
local installedLocales
local currentLocale
local localeComboBox
-- private functions
local function sendLocale(localeName)
LocaleExtendedId = 1
function sendLocale(localeName)
local protocolGame = g_game.getProtocolGame()
if protocolGame then
protocolGame:sendExtendedOpcode(ExtendedLocales, localeName)
protocolGame:sendExtendedOpcode(LocaleExtendedId, localeName)
return true
end
return false
end
local function onLocaleComboBoxOptionChange(self, optionText, optionData)
if Locales.setLocale(optionData) then
g_settings.set('locale', optionData)
sendLocale(currentLocale.name)
function createWindow()
localesWindow = g_ui.displayUI('locales')
local localesPanel = localesWindow:getChildById('localesPanel')
for name,locale in pairs(installedLocales) do
local widget = g_ui.createWidget('LocalesButton', localesPanel)
widget:setImageSource('/images/flags/' .. name .. '')
widget:setText(locale.languageName)
widget.onClick = function() selectFirstLocale(name) end
end
addEvent(function() addEvent(function() localesWindow:raise() localesWindow:focus() end) end)
end
function selectFirstLocale(name)
if localesWindow then
localesWindow:destroy()
localesWindow = nil
end
if setLocale(name) then
g_modules.reloadModules()
end
end
-- hooked functions
local function onGameStart()
function onGameStart()
sendLocale(currentLocale.name)
end
local function onExtendedLocales(protocol, opcode, buffer)
function onExtendedLocales(protocol, opcode, buffer)
local locale = installedLocales[buffer]
if locale then
localeComboBox:setCurrentOption(locale.languageName)
if locale and setLocale(locale.name) then
g_modules.reloadModules()
end
end
-- public functions
function Locales.init()
function init()
installedLocales = {}
Locales.installLocales('locales')
installLocales('/locales')
local userLocaleName = g_settings.get('locale', 'false')
if userLocaleName ~= 'false' and Locales.setLocale(userLocaleName) then
if userLocaleName ~= 'false' and setLocale(userLocaleName) then
pdebug('Using configured locale: ' .. userLocaleName)
else
pdebug('Using default locale: ' .. defaultLocaleName)
Locales.setLocale(defaultLocaleName)
g_settings.set('locale', defaultLocaleName)
setLocale(defaultLocaleName)
connect(g_app, {onRun = createWindow})
end
addEvent( function()
localeComboBox = g_ui.createWidget('ComboBoxRounded', rootWidget:recursiveGetChildById('rightButtonsPanel'))
localeComboBox:setFixedSize(true)
for key,value in pairs(installedLocales) do
localeComboBox:addOption(value.languageName, value.name)
end
localeComboBox:setCurrentOption(currentLocale.languageName)
localeComboBox.onOptionChange = onLocaleComboBoxOptionChange
end, false)
Extended.register(ExtendedLocales, onExtendedLocales)
ProtocolGame.registerExtendedOpcode(LocaleExtendedId, onExtendedLocales)
connect(g_game, { onGameStart = onGameStart })
end
function Locales.terminate()
function terminate()
installedLocales = nil
currentLocale = nil
if localeComboBox then
localeComboBox:destroy()
localeComboBox = nil
end
Extended.unregister(ExtendedLocales)
ProtocolGame.unregisterExtendedOpcode(LocaleExtendedId)
disconnect(g_game, { onGameStart = onGameStart })
end
function generateNewTranslationTable(localename)
local locale = installedLocales[localename]
for _i,k in pairs(Locales.neededTranslations) do
for _i,k in pairs(neededTranslations) do
local trans = locale.translation[k]
k = k:gsub('\n','\\n')
k = k:gsub('\t','\\t')
@@ -100,15 +98,16 @@ function generateNewTranslationTable(localename)
end
end
function Locales.installLocale(locale)
function installLocale(locale)
if not locale or not locale.name then
error('Unable to install locale.')
end
if locale.name ~= defaultLocaleName then
for _i,k in pairs(Locales.neededTranslations) do
for _i,k in pairs(neededTranslations) do
if locale.translation[k] == nil then
pwarning('Translation for locale \'' .. locale.name .. '\' not found: \"' .. k.. '\"')
local ktext = string.gsub(k, "\n", "\\n")
pwarning('Translation for locale \'' .. locale.name .. '\' not found: \"' .. ktext .. '\"')
end
end
end
@@ -120,35 +119,35 @@ function Locales.installLocale(locale)
end
else
installedLocales[locale.name] = locale
if localeComboBox then
localeComboBox.onOptionChange = nil
localeComboBox:addOption(locale.languageName, locale.name)
localeComboBox.onOptionChange = onLocaleComboBoxOptionChange
end
end
end
function Locales.installLocales(directory)
function installLocales(directory)
dofiles(directory)
end
function Locales.setLocale(name)
function setLocale(name)
local locale = installedLocales[name]
if not locale then
pwarning("Locale " .. name .. ' does not exist.')
return false
end
currentLocale = locale
if Locales.onLocaleChanged then Locales.onLocaleChanged(name) end
g_settings.set('locale', name)
if onLocaleChanged then onLocaleChanged(name) end
return true
end
function Locales.getComboBox()
return localeComboBox
function getInstalledLocales()
return installedLocales
end
function getCurrentLocale()
return currentLocale
end
-- global function used to translate texts
function tr(text, ...)
function _G.tr(text, ...)
if currentLocale then
if tonumber(text) then
-- todo: use locale information to calculate this. also detect floating numbers
@@ -164,8 +163,10 @@ function tr(text, ...)
elseif tostring(text) then
local translation = currentLocale.translation[text]
if not translation then
if currentLocale.name ~= defaultLocaleName then
pwarning('Unable to translate: \"' .. text .. '\"')
if translation == nil then
if currentLocale.name ~= defaultLocaleName then
pwarning('Unable to translate: \"' .. text .. '\"')
end
end
translation = text
end

View File

@@ -1,16 +1,10 @@
Module
name: client_locales
description: Translates texts to selected language
author: baxnie
author: baxnie, edubart
website: www.otclient.info
dependencies:
- client_extended
- client_topmenu
@onLoad: |
dofile 'locales'
Locales.init()
@onUnload: |
Locales.terminate()
sandboxed: true
scripts: [ locales ]
dependencies: [ client_topmenu ]
@onLoad: init()
@onUnload: terminate()

View File

@@ -0,0 +1,37 @@
LocalesMainLabel < Label
font: sans-bold-16px
LocalesButton < UIWidget
size: 96 96
image-size: 96 96
image-smooth: true
text-offset: 0 96
font: verdana-11px-antialised
UIWindow
id: localesWindow
background-color: #000000
opacity: 0.90
clipping: true
anchors.fill: parent
LocalesMainLabel
!text: tr('Select your language')
text-auto-resize: true
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
margin-top: -100
Panel
id: localesPanel
!width: 96*3 + 32*3
margin-left: 16
margin-top: 50
anchors.horizontalCenter: parent.horizontalCenter
anchors.top: prev.bottom
anchors.bottom: parent.bottom
layout:
type: grid
cell-size: 96 128
cell-spacing: 32
flow: true

View File

@@ -1,10 +0,0 @@
locale = {
name = "en",
charset = "cp1252",
languageName = "English",
-- translations are not needed because everything is already in english
translation = {}
}
Locales.installLocale(locale)

View File

@@ -1,326 +0,0 @@
-- special thanks for Shaday, who made these translations
locale = {
name = "es",
charset = "cp1252",
languageName = "Espa<EFBFBD>ol",
translation = {
["1a) Offensive Name"] = false,
["1b) Invalid Name Format"] = false,
["1c) Unsuitable Name"] = false,
["1d) Name Inciting Rule Violation"] = false,
["2a) Offensive Statement"] = false,
["2b) Spamming"] = false,
["2c) Illegal Advertising"] = false,
["2d) Off-Topic Public Statement"] = false,
["2e) Non-English Public Statement"] = false,
["2f) Inciting Rule Violation"] = false,
["3a) Bug Abuse"] = false,
["3b) Game Weakness Abuse"] = false,
["3c) Using Unofficial Software to Play"] = false,
["3d) Hacking"] = false,
["3e) Multi-Clienting"] = false,
["3f) Account Trading or Sharing"] = false,
["4a) Threatening Gamemaster"] = false,
["4b) Pretending to Have Influence on Rule Enforcement"] = false,
["4c) False Report to Gamemaster"] = false,
["Accept"] = false,
["Account name"] = "Nombre de la cuenta",
["Account Status:\nFree Account"] = "Estado de la cuenta:\nGratis",
["Account Status:\nPremium Account (%s) days left"] = "Estado de la cuenta:\nCuenta premium (%s) d<>as restantes",
["Action:"] = false,
["Add"] = "A<EFBFBD>adir",
["Add new VIP"] = "A<EFBFBD>adir nuevo VIP",
["Addon 1"] = "Addon 1",
["Addon 2"] = "Addon 2",
["Addon 3"] = "Addon 3",
["Add to VIP list"] = "A<EFBFBD>adir a lista VIP",
["Adjust volume"] = "Ajustar vol<6F>men",
["Alas! Brave adventurer, you have met a sad fate.\nBut do not despair, for the gods will bring you back\ninto this world in exchange for a small sacrifice\n\nSimply click on Ok to resume your journeys!"] = false,
["All modules and scripts were reloaded."] = "Todos los m<>dulos y scripts han sido reiniciados",
["Allow auto chase override"] = false,
["Amount:"] = "Cantidad:",
["Amount"] = false,
["Anonymous"] = false,
["Are you sure you want to logout?"] = false,
["Attack"] = "Atacar",
["Author"] = "Autor",
["Autoload"] = "Cargar autom<6F>ticamente",
["Autoload priority"] = "Prioridad de carga",
["Auto login"] = "Entrar autom<6F>ticamente",
["Auto login selected character on next charlist load"] = "Entrar autom<6F>ticamente con un personage cuando se vuelva a abrir la lista de personajes",
["Axe Fighting"] = "Combate con Hacha",
["Balance:"] = false,
["Banishment"] = false,
["Banishment + Final Warning"] = false,
["Battle"] = "Batalla",
["Browse"] = false,
["Bug report sent."] = false,
["Button Assign"] = "Seleccionar Bot<6F>n",
["Buy"] = "Comprar",
["Buy Now"] = false,
["Buy Offers"] = false,
["Buy with backpack"] = "Comprar con mochila",
["Cancel"] = "Cancelar",
["Cannot login while already in game."] = false,
["Cap"] = false,
["Capacity"] = "Capacidad",
["Center"] = false,
["Channels"] = "Canales",
["Character List"] = "Lista de personajes",
["Classic control"] = "Control cl<63>sico",
["Clear current message window"] = false,
["Clear object"] = "Limpiar objeto",
["Client needs update."] = false,
["Close"] = "Cerrar",
["Close this channel"] = "Cerrar este canal",
["Club Fighting"] = "Combate con Maza",
["Combat Controls"] = "Controles de combate",
["Comment:"] = false,
["Connecting to game server..."] = "Conectando al servidor de juego...",
["Connecting to login server..."] = "Conectando al servidor de autentificaci<63>n...",
["Copy message"] = false,
["Copy name"] = false,
["Copy Name"] = "Copiar Nombre",
["Create New Offer"] = false,
["Create Offer"] = false,
["Current hotkeys:"] = "Atajos actuales",
["Current hotkey to add: %s"] = "Atajo actual para a<>adir: %s",
["Current Offers"] = false,
["Default"] = "Principal",
["Description"] = "Descripci<EFBFBD>n",
["Destructive Behaviour"] = false,
["Detail"] = "Detalle",
["Details"] = false,
["Disable Shared Experience"] = "Desactivar experiencia compartida",
["Distance Fighting"] = "Combate a Distancia",
["Edit hotkey text:"] = "Editar texto del atajo",
["Edit List"] = false,
["Edit Text"] = "Editar Texto",
["Enable music"] = false,
["Enable Shared Experience"] = "Activar experiencia compartida",
["Enable vertical synchronization"] = "Activar sincronizaci<63>n vertical",
["Enter Game"] = "Entrar al juego",
["Enter one name per line."] = false,
["Error"] = "Error",
["Error"] = "Error",
["Excessive Unjustified Player Killing"] = false,
["Exclude from private chat"] = "Excluir del canal privado",
["Exit"] = false,
["Experience"] = "Experiencia",
["Filter list to match your level"] = false,
["Filter list to match your vocation"] = false,
["Fishing"] = "Pesca",
["Fist Fighting"] = "Combate con Pu<50>os",
["Follow"] = "Seguir",
["Fullscreen"] = "Pantalla Completa",
["Game framerate limit: %s"] = false,
["General"] = "General",
["Graphics"] = "Gr<EFBFBD>ficos",
["Graphics Engine:"] = false,
["Head"] = "Cabeza",
["Health Info"] = false,
["Health Information"] = false,
["Hide monsters"] = "Esconder monstruos",
["Hide non-skull players"] = "Esconder jugadores sin calavera",
["Hide Npcs"] = "Esconder NPCs",
["Hide party members"] = "Esconder miembros del grupo",
["Hide players"] = "Esconder jugadores",
["Hit Points"] = "Puntos de Vida",
["Hold right mouse button to navigate\nScroll mouse middle button to zoom"] = false,
["Hotkeys"] = "Atajos",
["If you shut down the program, your character might stay in the game.\nClick on 'Logout' to ensure that you character leaves the game properly.\nClick on 'Exit' if you want to exit the program without logging out your character."] = false,
["Ignore capacity"] = "Ignorar capacidad",
["Ignore equipped"] = "Ignorar equipado",
["Interface framerate limit: %s"] = false,
["Inventory"] = "Inventario",
["Invite to Party"] = "Invitar al grupo",
["Invite to private chat"] = "Invitar al canal privado",
["IP Address Banishment"] = false,
["Item Offers"] = false,
["It is empty.\n"] = false,
["Join %s's Party"] = false,
["Leave Party"] = "Salir del grupo",
["Level"] = "Nivel",
["Limits FPS to 60"] = "Limita los FPS a 60",
["List of items that you're able to buy"] = "Lista de objetos que usted puede comprar",
["List of items that you're able to sell"] = "Lista de objetos que usted puede vender",
["Load"] = "Cargar",
["Location"] = false,
["Logging out..."] = false,
["Login"] = "Entrar",
["Login Error"] = "Error de Autentificaci<63>n",
["Login Error"] = "Error de Autentificaci<63>n",
["Logout"] = false,
["Look"] = "Ver",
["Magic Level"] = "Nivel M<>gico",
["Make sure that your client uses\nthe correct game protocol version"] = "Compruebe que tu cliente use\nuse el mismo protocolo que el servidor de juego",
["Mana"] = "Mana",
["Manage hotkeys:"] = "Configurar atajos:",
["Market"] = false,
["Market Offers"] = false,
["Message of the day"] = "Mensaje del d<>a",
["Message to "] = false,
["Message to %s"] = "Mandar mensaje a %s",
["Minimap"] = "Minimapa",
["Module Manager"] = "Administrador de M<>dulos",
["Module name"] = "Nombre del m<>dulo",
["Move Stackable Item"] = "Mover objeto contable",
["Move up"] = "Mover arriba",
["My Offers"] = false,
["Name:"] = "Nombre:",
["Name"] = false,
["Name Report"] = false,
["Name Report + Banishment"] = false,
["Name Report + Banishment + Final Warning"] = false,
["No"] = false,
["No item selected."] = false,
["No Mount"] = false,
["No Outfit"] = false,
["No statement has been selected."] = false,
["Notation"] = false,
["NPC Trade"] = "Comercia con NPC",
["Offer History"] = false,
["Offers"] = false,
["Offer Type:"] = false,
["Ok"] = "Ok",
["Okay"] = false,
["on %s.\n"] = false,
["Open"] = "Abrir",
["Open a private message channel:"] = "Abrir un canal privado:",
["Open charlist automatically when starting otclient"] = "Abrir lista de personajes",
["Open in new window"] = "Abrir en una nueva ventana",
["Open new channel"] = "Abrir novo canal",
["Options"] = "Opciones",
["Particles Manager"] = false,
["Pass Leadership to %s"] = "Pasar el liderazgo a %s",
["Password"] = "Contrase<EFBFBD>a",
["Pause"] = false,
["Piece Price:"] = false,
["Please enter a character name:"] = "Por favor, introduce el nombre de un personaje:",
["Please, press the key you wish to add onto your hotkeys manager"] = "Por favor, presione la tecla que desee para\na<EFBFBD>adir a tu administrador de atajos",
["Please Select"] = false,
["Please use this dialog to only report bugs. Do not report rule violations here!"] = false,
["Please wait"] = "Por favor, espere",
["Port"] = "Puerto",
["Preview"] = false,
["Price:"] = "Precio",
["Primary"] = "Primario",
["Protocol"] = false,
["Quantity:"] = "Cantidad:",
["Quest Log"] = false,
["Randomize"] = false,
["Randomize characters outfit"] = false,
["Reason:"] = false,
["Refresh"] = "Actualizar",
["Reject"] = false,
["Reload"] = false,
["Reload All"] = "Recargar Todos",
["Remember account and password when starts otclient"] = "Recordar cuenta y contrase<73>a cuando inicie otclient",
["Remember password"] = "Recordar contrase<73>a",
["Remove"] = "Quitar",
["Remove %s"] = "Quitar %s",
["Report Bug"] = false,
["Revoke %s's Invitation"] = false,
["Rotate"] = "Girar",
["Rule Violation"] = false,
["Search:"] = "Buscar:",
["Search"] = false,
["Secondary"] = "Secundario",
["Select object"] = "Seleccionar objeto",
["Select Outfit"] = "Selecionar Traje",
["Sell"] = "Vender",
["Sell Now"] = false,
["Sell Offers"] = false,
["Send"] = false,
["Send automatically"] = "Enviar autom<6F>ticamente",
["Server"] = "Servidor",
["Server Log"] = "Registro del servidor",
["Set Outfit"] = "Escoger Traje",
["Shielding"] = "Defensa",
["Show all items"] = "Mostrar todos los objetos",
["Show Depot Only"] = false,
["Show event messages in console"] = "Mostrar los mensajes de eventos en la consola",
["Show frame rate"] = "Mostrar FPS",
["Show info messages in console"] = "Mostrar los mensajes informativos en la consola",
["Show left panel"] = false,
["Show levels in console"] = "Mostrar los niveles en la consola",
["Show private messages in console"] = "Mostrar los mensajes privados en la consola",
["Show private messages on screen"] = false,
["Show status messages in console"] = "Mostrar los mensajes de estado en la consola",
["Show Text"] = false,
["Show timestamps in console"] = "Mostrar la hora en la consola",
["Show your depot items only"] = false,
["Skills"] = "Habilidades",
["Soul"] = false,
["Soul Points"] = "Puntos del Alma",
["Stamina"] = "Vigor",
["Start"] = false,
["Statement:"] = false,
["Statement Report"] = false,
["Statistics"] = false,
["Stop Attack"] = "Detener el Ataque",
["Stop Follow"] = "Detener el Seguimiento",
["%s: (use object)"] = "%s: (usar objeto)",
["%s: (use object on target)"] = "%s: (usar objeto en objetivo)",
["%s: (use object on yourself)"] = "%s: (usar objeto en ti mismo)",
["%s: (use object with crosshair)"] = "%s: (usar objeto con mirilla)",
["Sword Fighting"] = "Combate con Espada",
["Terminal"] = "Terminal",
["There is no way."] = "No hay ruta.",
["Total Price:"] = false,
["Trade"] = "Comercial",
["Trade with ..."] = "Comercial con ...",
["Trying to reconnect in %s seconds."] = false,
["Unable to load dat file, please place a valid dat in '%s'"] = false,
["Unable to load spr file, please place a valid spr in '%s'"] = false,
["Unable to logout."] = "No es posible salir.",
["Unload"] = "Descarga",
["Use"] = "Usar",
["Use on target"] = "Usar en objetivo",
["Use on yourself"] = "Usar en ti mismo",
["Use with ..."] = "Usar en ...",
["Version"] = "Versi<EFBFBD>n",
["VIP list"] = "Lista VIP",
["VIP List"] = "Lista VIP",
["Voc."] = false,
["Waiting List"] = false,
["Website"] = "Sitio Web",
["Weight:"] = "Peso",
["With crosshair"] = "Con mirilla",
["Yes"] = false,
["You are bleeding"] = false,
["You are burning"] = "Est<EFBFBD>s quemando",
["You are cursed"] = "Est<EFBFBD>s maldito",
["You are dazzled"] = "Est<EFBFBD>s deslumbrado",
["You are dead."] = "Has muerto.",
["You are dead"] = false,
["You are drowing"] = "Te est<73>s ahogando",
["You are drunk"] = false,
["You are electrified"] = "Est<EFBFBD>s electrocutado",
["You are freezing"] = "Est<EFBFBD>s congelado",
["You are hasted"] = "Vas con prisa",
["You are hungry"] = false,
["You are paralysed"] = "Est<EFBFBD>s paralizado",
["You are poisoned"] = "Est<EFBFBD>s envenenado",
["You are protected by a magic shield"] = "Est<EFBFBD>s protegido por un escudo m<>gico",
["You are strengthened"] = "Est<EFBFBD>s reforzado",
["You are within a protection zone"] = "Est<EFBFBD>s en una zona de protecci<63>n",
["You can enter new text."] = false,
["You have %s percent"] = "Tienes %s por ciento",
["You have %s percent to go"] = "Te falta %s por ciento para avanzar",
["You may not logout during a fight"] = "No puedes salir mientras est<73>s en un combate",
["You may not logout or enter a protection zone"] = "No puedes salir o entrar en una zona de protecci<63>n",
["You must enter a comment."] = false,
["You must enter an account name and password."] = false,
["You must enter a valid server address and port."] = false,
["You must select a character to login!"] = "Debes seleccionar un personaje para entrar!",
["Your Capacity:"] = false,
["You read the following, written by \n%s\n"] = false,
["You read the following, written on %s.\n"] = false,
["Your Money:"] = false,
}
}
Locales.installLocale(locale)

View File

@@ -1,329 +0,0 @@
-- by Don Daniello
-- 09 June 2012
-- http://DonDaniello.com
-- http://otland.net/members/Don+Daniello
locale = {
name = "pl",
charset = "cp1250",
languageName = "Polski",
translation = {
["1a) Offensive Name"] = false,
["1b) Invalid Name Format"] = false,
["1c) Unsuitable Name"] = false,
["1d) Name Inciting Rule Violation"] = false,
["2a) Offensive Statement"] = false,
["2b) Spamming"] = false,
["2c) Illegal Advertising"] = false,
["2d) Off-Topic Public Statement"] = false,
["2e) Non-English Public Statement"] = false,
["2f) Inciting Rule Violation"] = false,
["3a) Bug Abuse"] = false,
["3b) Game Weakness Abuse"] = false,
["3c) Using Unofficial Software to Play"] = false,
["3d) Hacking"] = false,
["3e) Multi-Clienting"] = false,
["3f) Account Trading or Sharing"] = false,
["4a) Threatening Gamemaster"] = false,
["4b) Pretending to Have Influence on Rule Enforcement"] = false,
["4c) False Report to Gamemaster"] = false,
["Accept"] = false,
["Account name"] = "Nombre de la cuenta",
["Account Status:\nFree Account"] = "Estado de la cuenta:\nGratis",
["Account Status:\nPremium Account (%s) days left"] = "Estado de la cuenta:\nCuenta premium (%s) días restantes",
["Action:"] = false,
["Add"] = "Añadir",
["Add new VIP"] = "Añadir nuevo VIP",
["Addon 1"] = "Addon 1",
["Addon 2"] = "Addon 2",
["Addon 3"] = "Addon 3",
["Add to VIP list"] = "Añadir a lista VIP",
["Adjust volume"] = "Ajustar volúmen",
["Alas! Brave adventurer, you have met a sad fate.\nBut do not despair, for the gods will bring you back\ninto this world in exchange for a small sacrifice\n\nSimply click on Ok to resume your journeys!"] = false,
["All modules and scripts were reloaded."] = "Todos los módulos y scripts han sido reiniciados",
["Allow auto chase override"] = false,
["Amount:"] = "Cantidad:",
["Amount"] = false,
["Anonymous"] = false,
["Are you sure you want to logout?"] = false,
["Attack"] = "Atacar",
["Author"] = "Autor",
["Autoload"] = "Cargar automáticamente",
["Autoload priority"] = "Prioridad de carga",
["Auto login"] = "Entrar automáticamente",
["Auto login selected character on next charlist load"] = "Entrar automáticamente con un personage cuando se vuelva a abrir la lista de personajes",
["Axe Fighting"] = "Combate con Hacha",
["Balance:"] = false,
["Banishment"] = false,
["Banishment + Final Warning"] = false,
["Battle"] = "Batalla",
["Browse"] = false,
["Bug report sent."] = false,
["Button Assign"] = "Seleccionar Botón",
["Buy"] = "Comprar",
["Buy Now"] = false,
["Buy Offers"] = false,
["Buy with backpack"] = "Comprar con mochila",
["Cancel"] = "Cancelar",
["Cannot login while already in game."] = false,
["Cap"] = false,
["Capacity"] = "Capacidad",
["Center"] = false,
["Channels"] = "Canales",
["Character List"] = "Lista de personajes",
["Classic control"] = "Control clásico",
["Clear current message window"] = false,
["Clear object"] = "Limpiar objeto",
["Client needs update."] = false,
["Close"] = "Cerrar",
["Close this channel"] = "Cerrar este canal",
["Club Fighting"] = "Combate con Maza",
["Combat Controls"] = "Controles de combate",
["Comment:"] = false,
["Connecting to game server..."] = "Conectando al servidor de juego...",
["Connecting to login server..."] = "Conectando al servidor de autentificación...",
["Copy message"] = false,
["Copy name"] = false,
["Copy Name"] = "Copiar Nombre",
["Create New Offer"] = false,
["Create Offer"] = false,
["Current hotkeys:"] = "Atajos actuales",
["Current hotkey to add: %s"] = "Atajo actual para añadir: %s",
["Current Offers"] = false,
["Default"] = "Principal",
["Description"] = "Descripción",
["Destructive Behaviour"] = false,
["Detail"] = "Detalle",
["Details"] = false,
["Disable Shared Experience"] = "Desactivar experiencia compartida",
["Distance Fighting"] = "Combate a Distancia",
["Edit hotkey text:"] = "Editar texto del atajo",
["Edit List"] = false,
["Edit Text"] = "Editar Texto",
["Enable music"] = false,
["Enable Shared Experience"] = "Activar experiencia compartida",
["Enable vertical synchronization"] = "Activar sincronización vertical",
["Enter Game"] = "Entrar al juego",
["Enter one name per line."] = false,
["Error"] = "Error",
["Error"] = "Error",
["Excessive Unjustified Player Killing"] = false,
["Exclude from private chat"] = "Excluir del canal privado",
["Exit"] = false,
["Experience"] = "Experiencia",
["Filter list to match your level"] = false,
["Filter list to match your vocation"] = false,
["Fishing"] = "Pesca",
["Fist Fighting"] = "Combate con Puños",
["Follow"] = "Seguir",
["Fullscreen"] = "Pantalla Completa",
["Game framerate limit: %s"] = false,
["General"] = "General",
["Graphics"] = "Gráficos",
["Graphics Engine:"] = false,
["Head"] = "Cabeza",
["Health Info"] = false,
["Health Information"] = false,
["Hide monsters"] = "Esconder monstruos",
["Hide non-skull players"] = "Esconder jugadores sin calavera",
["Hide Npcs"] = "Esconder NPCs",
["Hide party members"] = "Esconder miembros del grupo",
["Hide players"] = "Esconder jugadores",
["Hit Points"] = "Puntos de Vida",
["Hold right mouse button to navigate\nScroll mouse middle button to zoom"] = false,
["Hotkeys"] = "Atajos",
["If you shut down the program, your character might stay in the game.\nClick on 'Logout' to ensure that you character leaves the game properly.\nClick on 'Exit' if you want to exit the program without logging out your character."] = false,
["Ignore capacity"] = "Ignorar capacidad",
["Ignore equipped"] = "Ignorar equipado",
["Interface framerate limit: %s"] = false,
["Inventory"] = "Inventario",
["Invite to Party"] = "Invitar al grupo",
["Invite to private chat"] = "Invitar al canal privado",
["IP Address Banishment"] = false,
["Item Offers"] = false,
["It is empty.\n"] = false,
["Join %s's Party"] = false,
["Leave Party"] = "Salir del grupo",
["Level"] = "Nivel",
["Limits FPS to 60"] = "Limita los FPS a 60",
["List of items that you're able to buy"] = "Lista de objetos que usted puede comprar",
["List of items that you're able to sell"] = "Lista de objetos que usted puede vender",
["Load"] = "Cargar",
["Location"] = false,
["Logging out..."] = false,
["Login"] = "Entrar",
["Login Error"] = "Error de Autentificación",
["Login Error"] = "Error de Autentificación",
["Logout"] = false,
["Look"] = "Ver",
["Magic Level"] = "Nivel Mágico",
["Make sure that your client uses\nthe correct game protocol version"] = "Compruebe que tu cliente use\nuse el mismo protocolo que el servidor de juego",
["Mana"] = "Mana",
["Manage hotkeys:"] = "Configurar atajos:",
["Market"] = false,
["Market Offers"] = false,
["Message of the day"] = "Mensaje del día",
["Message to "] = false,
["Message to %s"] = "Mandar mensaje a %s",
["Minimap"] = "Minimapa",
["Module Manager"] = "Administrador de Módulos",
["Module name"] = "Nombre del módulo",
["Move Stackable Item"] = "Mover objeto contable",
["Move up"] = "Mover arriba",
["My Offers"] = false,
["Name:"] = "Nombre:",
["Name"] = false,
["Name Report"] = false,
["Name Report + Banishment"] = false,
["Name Report + Banishment + Final Warning"] = false,
["No"] = false,
["No item selected."] = false,
["No Mount"] = false,
["No Outfit"] = false,
["No statement has been selected."] = false,
["Notation"] = false,
["NPC Trade"] = "Comercia con NPC",
["Offer History"] = false,
["Offers"] = false,
["Offer Type:"] = false,
["Ok"] = "Ok",
["Okay"] = false,
["on %s.\n"] = false,
["Open"] = "Abrir",
["Open a private message channel:"] = "Abrir un canal privado:",
["Open charlist automatically when starting otclient"] = "Abrir lista de personajes",
["Open in new window"] = "Abrir en una nueva ventana",
["Open new channel"] = "Abrir novo canal",
["Options"] = "Opciones",
["Particles Manager"] = false,
["Pass Leadership to %s"] = "Pasar el liderazgo a %s",
["Password"] = "Contraseña",
["Pause"] = false,
["Piece Price:"] = false,
["Please enter a character name:"] = "Por favor, introduce el nombre de un personaje:",
["Please, press the key you wish to add onto your hotkeys manager"] = "Por favor, presione la tecla que desee para\nañadir a tu administrador de atajos",
["Please Select"] = false,
["Please use this dialog to only report bugs. Do not report rule violations here!"] = false,
["Please wait"] = "Por favor, espere",
["Port"] = "Puerto",
["Preview"] = false,
["Price:"] = "Precio",
["Primary"] = "Primario",
["Protocol"] = false,
["Quantity:"] = "Cantidad:",
["Quest Log"] = false,
["Randomize"] = false,
["Randomize characters outfit"] = false,
["Reason:"] = false,
["Refresh"] = "Actualizar",
["Reject"] = false,
["Reload"] = false,
["Reload All"] = "Recargar Todos",
["Remember account and password when starts otclient"] = "Recordar cuenta y contraseña cuando inicie otclient",
["Remember password"] = "Recordar contraseña",
["Remove"] = "Quitar",
["Remove %s"] = "Quitar %s",
["Report Bug"] = false,
["Revoke %s's Invitation"] = false,
["Rotate"] = "Girar",
["Rule Violation"] = false,
["Search:"] = "Buscar:",
["Search"] = false,
["Secondary"] = "Secundario",
["Select object"] = "Seleccionar objeto",
["Select Outfit"] = "Selecionar Traje",
["Sell"] = "Vender",
["Sell Now"] = false,
["Sell Offers"] = false,
["Send"] = false,
["Send automatically"] = "Enviar automáticamente",
["Server"] = "Servidor",
["Server Log"] = "Registro del servidor",
["Set Outfit"] = "Escoger Traje",
["Shielding"] = "Defensa",
["Show all items"] = "Mostrar todos los objetos",
["Show Depot Only"] = false,
["Show event messages in console"] = "Mostrar los mensajes de eventos en la consola",
["Show frame rate"] = "Mostrar FPS",
["Show info messages in console"] = "Mostrar los mensajes informativos en la consola",
["Show left panel"] = false,
["Show levels in console"] = "Mostrar los niveles en la consola",
["Show private messages in console"] = "Mostrar los mensajes privados en la consola",
["Show private messages on screen"] = false,
["Show status messages in console"] = "Mostrar los mensajes de estado en la consola",
["Show Text"] = false,
["Show timestamps in console"] = "Mostrar la hora en la consola",
["Show your depot items only"] = false,
["Skills"] = "Habilidades",
["Soul"] = false,
["Soul Points"] = "Puntos del Alma",
["Stamina"] = "Vigor",
["Start"] = false,
["Statement:"] = false,
["Statement Report"] = false,
["Statistics"] = false,
["Stop Attack"] = "Detener el Ataque",
["Stop Follow"] = "Detener el Seguimiento",
["%s: (use object)"] = "%s: (usar objeto)",
["%s: (use object on target)"] = "%s: (usar objeto en objetivo)",
["%s: (use object on yourself)"] = "%s: (usar objeto en ti mismo)",
["%s: (use object with crosshair)"] = "%s: (usar objeto con mirilla)",
["Sword Fighting"] = "Combate con Espada",
["Terminal"] = "Terminal",
["There is no way."] = "No hay ruta.",
["Total Price:"] = false,
["Trade"] = "Comercial",
["Trade with ..."] = "Comercial con ...",
["Trying to reconnect in %s seconds."] = false,
["Unable to load dat file, please place a valid dat in '%s'"] = false,
["Unable to load spr file, please place a valid spr in '%s'"] = false,
["Unable to logout."] = "No es posible salir.",
["Unload"] = "Descarga",
["Use"] = "Usar",
["Use on target"] = "Usar en objetivo",
["Use on yourself"] = "Usar en ti mismo",
["Use with ..."] = "Usar en ...",
["Version"] = "Versión",
["VIP list"] = "Lista VIP",
["VIP List"] = "Lista VIP",
["Voc."] = false,
["Waiting List"] = false,
["Website"] = "Sitio Web",
["Weight:"] = "Peso",
["With crosshair"] = "Con mirilla",
["Yes"] = false,
["You are bleeding"] = false,
["You are burning"] = "Estás quemando",
["You are cursed"] = "Estás maldito",
["You are dazzled"] = "Estás deslumbrado",
["You are dead."] = "Has muerto.",
["You are dead"] = false,
["You are drowing"] = "Te estás ahogando",
["You are drunk"] = false,
["You are electrified"] = "Estás electrocutado",
["You are freezing"] = "Estás congelado",
["You are hasted"] = "Vas con prisa",
["You are hungry"] = false,
["You are paralysed"] = "Estás paralizado",
["You are poisoned"] = "Estás envenenado",
["You are protected by a magic shield"] = "Estás protegido por un escudo mágico",
["You are strengthened"] = "Estás reforzado",
["You are within a protection zone"] = "Estás en una zona de protección",
["You can enter new text."] = false,
["You have %s percent"] = "Tienes %s por ciento",
["You have %s percent to go"] = "Te falta %s por ciento para avanzar",
["You may not logout during a fight"] = "No puedes salir mientras estás en un combate",
["You may not logout or enter a protection zone"] = "No puedes salir o entrar en una zona de protección",
["You must enter a comment."] = false,
["You must enter an account name and password."] = false,
["You must enter a valid server address and port."] = false,
["You must select a character to login!"] = "Debes seleccionar un personaje para entrar!",
["Your Capacity:"] = false,
["You read the following, written by \n%s\n"] = false,
["You read the following, written on %s.\n"] = false,
["Your Money:"] = false,
}
}
Locales.installLocale(locale)

View File

@@ -1,349 +0,0 @@
locale = {
name = "pt",
charset = "cp1252",
languageName = "Portugu<EFBFBD>s",
-- As tradu<64><75>es devem vir sempre em ordem alfab<61>tica.
translation = {
["1a) Offensive Name"] = "1a) Nome ofensivo",
["1b) Invalid Name Format"] = "1b) Nome com formato inv<6E>lido",
["1c) Unsuitable Name"] = "1c) Nome n<>o adequado",
["1d) Name Inciting Rule Violation"] = "1d) Nome estimulando viola<6C><61>o de regra",
["2a) Offensive Statement"] = "2a) Afirma<6D><61>o ofensiva",
["2b) Spamming"] = "2b) Spamming",
["2c) Illegal Advertising"] = "2c) An<41>ncio ilegal",
["2d) Off-Topic Public Statement"] = "2d) Afirma<6D><61>o p<>blica fora de contexto",
["2e) Non-English Public Statement"] = "2e) Afirma<6D><61>o p<>blica em lingua n<>o inglesa",
["2f) Inciting Rule Violation"] = "2f) Estimulando viola<6C><61>o de regra",
["3a) Bug Abuse"] = "3a) Abuso de falhas",
["3b) Game Weakness Abuse"] = "3b) Abuso de falhas no jogo",
["3c) Using Unofficial Software to Play"] = "3c) Uso de programas ilegais para jogar",
["3d) Hacking"] = "3d) Hacking",
["3e) Multi-Clienting"] = "3e) Uso de mais de um cliente para jogar",
["3f) Account Trading or Sharing"] = "3f) Troca de contas ou compartilhamento",
["4a) Threatening Gamemaster"] = "4a) Amea<65>ar Gamemaster",
["4b) Pretending to Have Influence on Rule Enforcement"] = "4b) Fingir ter influencia sobre a execu<63><75>o de regras",
["4c) False Report to Gamemaster"] = "4c) Relat<61>rio falso para Gamemaster",
["Abilities"] = "Abilidades",
["Accept"] = "Aceitar",
["Account name"] = "Nome da conta",
["Account Status:\nFree Account"] = "Estado da conta:\nGr<EFBFBD>tis",
["Account Status:\nPremium Account (%s) days left"] = "Estado da conta:\nConta premium (%s) dias faltando",
["Action:"] = "A<EFBFBD><EFBFBD>o:",
["Add"] = "Adicionar",
["Add new VIP"] = "Adicionar nova VIP",
["Addon 1"] = "Addon 1",
["Addon 2"] = "Addon 2",
["Addon 3"] = "Addon 3",
["Add to VIP list"] = "Adicionar a lista VIP",
["Adjust volume"] = "Ajustar volume",
["Alas! Brave adventurer, you have met a sad fate.\nBut do not despair, for the gods will bring you back\ninto this world in exchange for a small sacrifice\n\nSimply click on Ok to resume your journeys!"] = false,
["All"] = "Todos",
["All modules and scripts were reloaded."] = "Todos m<>dulos e scripts foram recarregados.",
["Allow auto chase override"] = "Permitir sobrescrever o modo de persegui<75><69>o",
["Also known as dash in tibia community, recommended\nfor playing characters with high speed"] = "Tamb<EFBFBD>m conhecido como dash na comunidade tibiana, recomendado\npara jogar com personagem que possuam velocidade alta",
["Amount:"] = "Quantidade:",
["Amount"] = "Quantidade",
["Anonymous"] = "An<EFBFBD>nimo",
["Are you sure you want to logout?"] = "Voc<EFBFBD> tem certeza que quer sair?",
["Attack"] = "Atacar",
["Author"] = "Autor",
["Autoload"] = "Carregar automaticamente",
["Autoload priority"] = "Prioridade de carregamento",
["Auto login"] = "Entrar automaticamente",
["Auto login selected character on next charlist load"] = "Entrar automaticamente com o personagem quando reabrir a lista de personagens",
["Axe Fighting"] = "Combate com Machado",
["Balance:"] = "Saldo:",
["Banishment"] = "Banimento",
["Banishment + Final Warning"] = "Banimento + Aviso final",
["Battle"] = "Batalha",
["Browse"] = "Navegar",
["Bug report sent."] = "Reporte de bug enviado.",
["Button Assign"] = "Selecionar bot<6F>o",
["Buy"] = "Comprar",
["Buy Now"] = "Comparar agora",
["Buy Offers"] = "Ofertas de compra",
["Buy with backpack"] = "Comprar com mochila",
["Cancel"] = "Cancelar",
["Cannot login while already in game."] = "N<EFBFBD>o <20> possivel logar enquanto j<> estiver jogando.",
["Cap"] = "Cap",
["Capacity"] = "Capacidade",
["Center"] = "Centro",
["Channels"] = "Canais",
["Character List"] = "Lista de personagens",
["Classic control"] = "Controle cl<63>ssico",
["Clear current message window"] = "Apagar mensagens",
["Clear object"] = "Limpar objeto",
["Client needs update."] = "O client do jogo precisa ser atualizado",
["Close"] = "Fechar",
["Close this channel"] = "Fechar esse canal",
["Club Fighting"] = "Combate com Porrete",
["Combat Controls"] = "Controles de combate",
["Comment:"] = "Coment<EFBFBD>rio:",
["Connecting to game server..."] = "Conectando no servidor do jogo...",
["Connecting to login server..."] = "Conectando no servidor de autentica<63><61>o...",
["Console"] = "Console",
["Copy message"] = "Copiar mensagem",
["Copy name"] = "Copiar nome",
["Copy Name"] = "Copiar Nome",
["Create"] = "Criar",
["Create New Offer"] = "Criar nova oferta",
["Create Offer"] = "Criar oferta",
["Current hotkeys:"] = "Atalhos atuais",
["Current hotkey to add: %s"] = "Atalho atual para adicionar: %s",
["Current Offers"] = "Ofertas atuais",
["Default"] = "Padr<EFBFBD>o",
["Description"] = "Descri<EFBFBD><EFBFBD>o",
["Destructive Behaviour"] = "Comportamento destrutivo",
["Detail"] = "Detalhe",
["Details"] = "Detalhes",
["Disable Shared Experience"] = "Desativar experi<72>ncia compartilhada",
["Display connection speed to the server (milliseconds)"] = "Exibir a velocidade de conex<65>o com o servidor (milisegundos)",
["Distance Fighting"] = "Combate a Dist<73>ncia",
["Edit hotkey text:"] = "Editar texto do atalho",
["Edit List"] = "Editar lista",
["Edit Text"] = "Editar Texto",
["Enable music"] = "Ativar musica",
["Enable smart walking"] = "Ativar andar inteligente",
["Enable Shared Experience"] = "Ativar experi<72>ncia compartilhada",
["Enable vertical synchronization"] = "Ativar sincroniza<7A><61>o vertical",
["Enable walk booster"] = "Ativar andar intensificado",
["Enter Game"] = "Entrar no jogo",
["Enter one name per line."] = "Entre somente um nome por linha.",
["Error"] = "Erro",
["Error"] = "Erro",
["Excessive Unjustified Player Killing"] = "Assassinato em excesso, sem justificativa, de jogadores",
["Exclude from private chat"] = "Excluir do canal privado",
["Exit"] = "Sair",
["Experience"] = "Experi<EFBFBD>ncia",
["Filter list to match your level"] = "Filtrar a lista para o seu level",
["Filter list to match your vocation"] = "Filtrar a lista para a sua voca<63><61>o",
["Find:"] = "Procurar",
["Fishing"] = "Pesca",
["Fist Fighting"] = "Porrada",
["Follow"] = "Seguir",
["Force Exit"] = "For<EFBFBD>ar Saida",
["Fullscreen"] = "Tela cheia",
["Game"] = "Jogo",
["Game framerate limit: %s"] = "Limite da taxa de quadros do jogo: %s",
["General"] = "Geral",
["Graphics"] = "Gr<EFBFBD>ficos",
["Graphics Engine:"] = "Motor Gr<47>fico:",
["Head"] = "Cabe<EFBFBD>a",
["Health Info"] = "Barra de Vida",
["Health Information"] = "Informa<EFBFBD><EFBFBD>o de vida",
["Hide monsters"] = "Esconder montros",
["Hide non-skull players"] = "Esconder jogadores sem caveira",
["Hide Npcs"] = "Esconder NPCs",
["Hide party members"] = "Esconder membros do grupo",
["Hide players"] = "Esconder jogadores",
["Hit Points"] = "Pontos de Vida",
["Hold right mouse button to navigate\nScroll mouse middle button to zoom"] = "Segure o bot<6F>o direito do mouse para navegar\nRole o bot<6F>o central do mouse para mudar o zoom",
["Hotkeys"] = "Atalhos",
["If you shut down the program, your character might stay in the game.\nClick on 'Logout' to ensure that you character leaves the game properly.\nClick on 'Exit' if you want to exit the program without logging out your character."] = "Se voc<6F> desligar o programa o seu personagem pode continuar no jogo.\nClique em 'Sair' para assegurar que seu personagem saia do jogo adequadamente.\nClique em 'For<6F>ar Saida' para fechar o programa sem desconectar seu personagem.",
["Ignore capacity"] = "Ignorar capacidade",
["Ignore equipped"] = "Ignorar equipado",
["Interface framerate limit: %s"] = "Limite da taxa de quadros da interface: %s",
["Inventory"] = "Invent<EFBFBD>rio",
["Invite to Party"] = "Convidar para o grupo",
["Invite to private chat"] = "Convidar para o canal privado",
["IP Address Banishment"] = "Banimento de endere<72>o IP",
["Item Offers"] = "Ofertas de items",
["It is empty.\n"] = "Est<EFBFBD> vazio\n",
["Join %s's Party"] = "Entrar na party do %s",
["Leave Party"] = "Sair do grupo",
["Level"] = "N<EFBFBD>vel",
["Limits FPS to 60"] = "Limita o FPS para 60",
["List of items that you're able to buy"] = "Lista de itens que voc<6F> pode comprar",
["List of items that you're able to sell"] = "Lista de itens que voc<6F> pode vender",
["Load"] = "Carregar",
["Location"] = "Local",
["Logging out..."] = "Saindo...",
["Login"] = "Entrar",
["Login Error"] = "Erro de Autentica<63><61>o",
["Login Error"] = "Erro de Autentica<63><61>o",
["Logout"] = "Sair",
["Look"] = "Olhar",
["Magic Level"] = "N<EFBFBD>vel M<>gico",
["Make sure that your client uses\nthe correct game protocol version"] = "Tenha certeza que o seu cliente use\no mesmo protocolo do servidor do jogo",
["Mana"] = "Mana",
["Manage hotkeys:"] = "Configurar atalhos:",
["Market"] = "Mercado",
["Market Offers"] = "Ofertas do mercado",
["Message of the day"] = "Mensagem do dia",
["Message to "] = "Mensagem para ",
["Message to %s"] = "Mandar mensagem para %s",
["Minimap"] = "Minimapa",
["Module Manager"] = "Gerenciador de M<>dulos",
["Module name"] = "Nome do m<>dulo",
["Move Stackable Item"] = "Mover item cont<6E>vel",
["Move up"] = "Mover para cima",
["Moves"] = "Movimentos",
["My Offers"] = "Minhas ofertas",
["Name:"] = "Nome:",
["Name"] = "Nome",
["Name Report"] = "Reportar Nome",
["Name Report + Banishment"] = "Reportar Nome + Banimento",
["Name Report + Banishment + Final Warning"] = "Reportar Nome + Banimento + Aviso Final",
["No"] = "N<EFBFBD>o",
["No item selected."] = "Nenhum item selecionado",
["No Mount"] = "Sem montaria",
["No Outfit"] = "Sem roupa",
["No statement has been selected."] = "Nenhuma afirma<6D><61>o foi selecionada.",
["Notation"] = "Nota<EFBFBD><EFBFBD>o",
["NPC Trade"] = "Troca com NPC",
["Offer History"] = "Hist<EFBFBD>rico de ofertas",
["Offers"] = "Ofertas",
["Offer Type:"] = "Tipo de oferta:",
["Offline Training"] = "Treino Offline",
["Ok"] = "Ok",
["Okay"] = "Okay",
["on %s.\n"] = "em %s.\n",
["Open"] = "Abrir",
["Open a private message channel:"] = "Abrir um canal privado:",
["Open charlist automatically when starting otclient"] = "Abrir lista de personagens",
["Open in new window"] = "Abrir em nova janela",
["Open new channel"] = "Abrir novo canal",
["Options"] = "Op<EFBFBD><EFBFBD>es",
["Overview"] = "Vis<EFBFBD>o geral",
["Particles Manager"] = "Gerenciador de part<72>culas",
["Pass Leadership to %s"] = "Passar lideran<61>a para %s",
["Password"] = "Senha",
["Pause"] = "Pausar",
["Piece Price:"] = "Pre<EFBFBD>o por pe<70>a:",
["Please enter a character name:"] = "Por favor, entre com o nome do personagem:",
["Please, press the key you wish to add onto your hotkeys manager"] = "Por favor, pressione a tecla que voc<6F> deseja\nadicionar no gerenciador de atalhos",
["Please Select"] = "Por favor, selecione algo",
["Please use this dialog to only report bugs. Do not report rule violations here!"] = "Por favor, use este campo apenas para reportar defeitos. N<>o reporte viola<6C><61>o de regras aqui!",
["Please wait"] = "Por favor, espere",
["Port"] = "Porta",
["Preview"] = "Prever",
["Price:"] = "Pre<EFBFBD>o",
["Primary"] = "Prim<EFBFBD>rio",
["Protocol"] = "Protocolo",
["Quantity:"] = "Quantidade:",
["Quest Log"] = "Registro de Quest",
["Randomize"] = "Embaralhar",
["Randomize characters outfit"] = "Gerar roupa aleat<61>ria",
["Reason:"] = "Motivo:",
["Refresh"] = "Atualizar",
["Refresh Offers"] = "Atualizar Ofertas",
["Regeneration Time"] = "Tempo de Regenera<72><61>o",
["Reject"] = "Rejeitar",
["Reload"] = "Recarregar",
["Reload All"] = "Recarregar Todos",
["Remember account and password when starts otclient"] = "Lembrar conta e senha quando o cliente iniciar",
["Remember password"] = "Lembrar senha",
["Remove"] = "Remover",
["Remove %s"] = "Remover %s",
["Report Bug"] = "Reportar defeito",
["Reserved for more functionality later."] = "Reservado para futura maior funcionalidade.",
["Reset Market"] = "Resetar Mercado",
["Revoke %s's Invitation"] = "N<EFBFBD>o aceitar o convite do %s",
["Rotate"] = "Girar",
["Rule Violation"] = "Viola<EFBFBD><EFBFBD>o de regra",
["Search:"] = "Procurar:",
["Search"] = "Procurar",
["Search all items"] = "Procurar todos os items",
["Secondary"] = "Secund<EFBFBD>rio",
["Select object"] = "Selecionar objeto",
["Select Outfit"] = "Selecionar Roupa",
["Sell"] = "Vender",
["Sell Now"] = "Vender agora",
["Sell Offers"] = "Ofertas de venda",
["Send"] = "Enviar",
["Send automatically"] = "Enviar automaticamente",
["Server"] = "Servidor",
["Server Log"] = "Registro do servidor",
["Set Outfit"] = "Escolher Roupa",
["Shielding"] = "Defesa",
["Show all items"] = "Exibir todos os itens",
["Show connection ping"] = "Mostrar lat<61>ncia de conex<65>o",
["Show Depot Only"] = "Mostrar somente o dep<65>sito",
["Show event messages in console"] = "Exibir mensagens de eventos no console",
["Show frame rate"] = "Exibir FPS",
["Show info messages in console"] = "Exibir mensagens informativas no console",
["Show left panel"] = "Mostrar barra lateral esquerda",
["Show levels in console"] = "Exibir n<>veis no console",
["Show private messages in console"] = "Exibir mensagens privadas no console",
["Show private messages on screen"] = "Exibir mensagens na tela",
["Show status messages in console"] = "Exibir mensagens de estado no console",
["Show Text"] = "Mostrar texto",
["Show timestamps in console"] = "Exibir o hor<6F>rio no console",
["Show your depot items only"] = "Mostrar os itens somentedo dep<65>sito",
["Skills"] = "Habilidades",
["Soul"] = "Alma",
["Soul Points"] = "Pontos de Alma",
["Speed"] = "Velocidade",
["Stamina"] = "Vigor",
["Start"] = "Come<EFBFBD>ar",
["Statement:"] = "Afirma<EFBFBD><EFBFBD>o:",
["Statement Report"] = "Afirmar Relato",
["Statistics"] = "Estat<EFBFBD>sticas",
["Stop Attack"] = "Parar de Atacar",
["Stop Follow"] = "Parar de Seguir",
["%s: (use object)"] = "%s: (usar objeto)",
["%s: (use object on target)"] = "%s: (usar objeto no alvo)",
["%s: (use object on yourself)"] = "%s: (usar objeto em si)",
["%s: (use object with crosshair)"] = "%s: (usar objeto com mira)",
["Sword Fighting"] = "Combate com Espada",
["Terminal"] = "Terminal",
["There is no way."] = "N<EFBFBD>o h<> rota",
["Total Price:"] = "Pre<EFBFBD>o total:",
["Trade"] = "Trocar",
["Trade with ..."] = "Trocar com ...",
["Trying to reconnect in %s seconds."] = "Tentando reconectar em %s segundos.",
["Type"] = "Tipo",
["Unable to load dat file, please place a valid dat in '%s'"] = "N<EFBFBD>o foi poss<73>vel carregar o arquivo dat, por favor coloque um arquivo v<>lido em %s",
["Unable to load spr file, please place a valid spr in '%s'"] = "N<EFBFBD>o foi poss<73>vel carregar o arquivo spr, por favor coloque um arquivo v<>lido em %s",
["Unable to logout."] = "N<EFBFBD>o <20> possivel sair",
["Unload"] = "Descarregar",
["Use"] = "Usar",
["Use on target"] = "Usar no alvo",
["Use on yourself"] = "Usar em si",
["Use with ..."] = "Usar com ...",
["Version"] = "Vers<EFBFBD>o",
["VIP list"] = "Lista VIP",
["VIP List"] = "Lista VIP",
["Voc."] = "Voc.",
["Waiting List"] = "Lista de espera",
["Website"] = "Website",
["Weight:"] = "Peso",
["Will detect when to use diagonal step based on the\nkeys you are pressing"] = "Detectar quando usar o passo diagonal\nbaseado nas teclas pressionadas",
["With crosshair"] = "Com mira",
["World"] = "Mundo",
["Yes"] = "Sim",
["You are bleeding"] = "Voc<EFBFBD> est<73> sangrando",
["You are burning"] = "Voc<EFBFBD> est<73> queimando",
["You are cursed"] = "Voc<EFBFBD> est<73> amaldi<64>oado",
["You are dazzled"] = "Voc<EFBFBD> est<73> deslumbrado",
["You are dead."] = "Voc<EFBFBD> est<73> morto.",
["You are dead"] = "Voc<EFBFBD> est<73> morto",
["You are drowing"] = "Voc<EFBFBD> est<73> se afogando",
["You are drunk"] = "Voc<EFBFBD> est<73> b<>bado",
["You are electrified"] = "Voc<EFBFBD> est<73> eletrificado",
["You are freezing"] = "Voc<EFBFBD> est<73> congelando",
["You are hasted"] = "Voc<EFBFBD> est<73> com pressa",
["You are hungry"] = "Voc<EFBFBD> est<73> faminto",
["You are paralysed"] = "Voc<EFBFBD> est<73> paralizado",
["You are poisoned"] = "Voc<EFBFBD> est<73> envenenado",
["You are protected by a magic shield"] = "Voc<EFBFBD> est<73> protegido com um escudo m<>gico",
["You are strengthened"] = "Voc<EFBFBD> est<73> refor<6F>ado",
["You are within a protection zone"] = "Voc<EFBFBD> est<73> dentro de uma zona de prote<74><65>o",
["You can enter new text."] = "Voc<EFBFBD> pode entrar com um novo texto.",
["You have %s percent"] = "Voc<EFBFBD> tem %s porcento",
["You have %s percent to go"] = "Voc<EFBFBD> tem %s porcento para avan<61>ar",
["You may not logout during a fight"] = "Voc<EFBFBD> n<>o pode sair durante um combate",
["You may not logout or enter a protection zone"] = "Voc<EFBFBD> n<>o pode sair ou entrar em uma zona de prote<74><65>o",
["You must enter a comment."] = "Voc<EFBFBD> precisa entrar com um coment<6E>rio",
["You must enter an account name and password."] = "Voc<EFBFBD> precisa entrar com uma conta e senha.",
["You must enter a valid server address and port."] = "Voc<EFBFBD> precisa colocar um endere<72>o e uma porta do servidor v<>lidos.",
["You must select a character to login!"] = "Voc<EFBFBD> deve selecionar um personagem para entrar!",
["Your Capacity:"] = "Sua capacidade:",
["You read the following, written by \n%s\n"] = "Voc<EFBFBD> l<> o seguinte, escrito por \n%s\n",
["You read the following, written on %s.\n"] = "Voc<EFBFBD> l<> o seguinte, escrito em %s\n",
["Your Money:"] = "Seu dinheiro:",
}
}
Locales.installLocale(locale)

View File

@@ -1,326 +0,0 @@
-- thanks cometangel, who made these translations
locale = {
name = "sv",
charset = "cp1252",
languageName = "Svenska",
translation = {
["1a) Offensive Name"] = "1a) Offensivt Namn",
["1b) Invalid Name Format"] = "1b) Ogiltigt Namnformat",
["1c) Unsuitable Name"] = "1c) Opassande Namn",
["1d) Name Inciting Rule Violation"] = "1d) Namn anstiftar regelbrott.",
["2a) Offensive Statement"] = "2a) Offensivt Uttryck",
["2b) Spamming"] = "2b) Spammning",
["2c) Illegal Advertising"] = "2c) Olaglig Reklamf<6D>ring",
["2d) Off-Topic Public Statement"] = "2d) Icke-<2D>mnef<65>rh<72>llande publiskt uttryck",
["2e) Non-English Public Statement"] = "2e) Icke-Engelskt publiskt uttryck",
["2f) Inciting Rule Violation"] = "2f) Antyder regelbrytande",
["3a) Bug Abuse"] = "3a) Missbrukande av bugg",
["3b) Game Weakness Abuse"] = "3b) Spelsvaghetsmissbruk",
["3c) Using Unofficial Software to Play"] = "3c) Anv<6E>nder Icke-officiel mjukvara f<>r att spela",
["3d) Hacking"] = "3d) Hackar",
["3e) Multi-Clienting"] = "3e) Multi-klient",
["3f) Account Trading or Sharing"] = "3f) Kontohandel",
["4a) Threatening Gamemaster"] = "4a) Hotar gamemaster",
["4b) Pretending to Have Influence on Rule Enforcement"] = "4b) L<>tsas ha inflytande p<> Regelsystem",
["4c) False Report to Gamemaster"] = "4c) Falsk rapport till gamemaster",
["Accept"] = "Acceptera",
["Account name"] = "Konto namn",
["Account Status:\nFree Account"] = "Kontostatus:\nGratis",
["Account Status:\nPremium Account (%s) days left"] = "Kontostatus:\nPremium Konto",
["Action:"] = "Handling:",
["Add"] = "L<EFBFBD>gg till",
["Add new VIP"] = "Ny VIP",
["Addon 1"] = "Till<EFBFBD>gg 1",
["Addon 2"] = "Till<EFBFBD>gg 2",
["Addon 3"] = "Till<EFBFBD>gg 3",
["Add to VIP list"] = "L<EFBFBD>gg till p<> VIP Listan",
["Adjust volume"] = "Justera Volym",
["Alas! Brave adventurer, you have met a sad fate.\nBut do not despair, for the gods will bring you back\ninto this world in exchange for a small sacrifice\n\nSimply click on Ok to resume your journeys!"] = false,
["All modules and scripts were reloaded."] = "Alla moduler och skript laddades om",
["Allow auto chase override"] = "Till<EFBFBD>t Jaktstyrning",
["Amount:"] = "Antal:",
["Amount"] = "Antal",
["Anonymous"] = "Anonym",
["Are you sure you want to logout?"] = "<EFBFBD>r du s<>ker att du vill logga ut?",
["Attack"] = "Attackera",
["Author"] = "<EFBFBD>vers<EFBFBD>ttare",
["Autoload"] = "Automatisk Laddning",
["Autoload priority"] = "Laddningsprioritet",
["Auto login"] = "Autoinloggning",
["Auto login selected character on next charlist load"] = "Logga in N<>st laddad karakt<6B>r automatisk n<>sta g<>ng karakt<6B>rlistan laddar",
["Axe Fighting"] = "Yx Stridande",
["Balance:"] = "Balans:",
["Banishment"] = "Bannlysning",
["Banishment + Final Warning"] = "Bannlysning + Sista varning",
["Battle"] = "Strid",
["Browse"] = "Bl<EFBFBD>ddra",
["Bug report sent."] = "Buggrapport Skickad.",
["Button Assign"] = "Assignera Knapp",
["Buy"] = "K<EFBFBD>p",
["Buy Now"] = "K<EFBFBD>p Nu",
["Buy Offers"] = "K<EFBFBD>p Offerter",
["Buy with backpack"] = "K<EFBFBD>p med ryggs<67>ck",
["Cancel"] = "Avbryt",
["Cannot login while already in game."] = "Kan ej logga in medan du redan <20>r i spelet.",
["Cap"] = "Kap",
["Capacity"] = "Kapacitet",
["Center"] = "Centrera",
["Channels"] = "Kanaler",
["Character List"] = "Karakt<EFBFBD>r lista",
["Classic control"] = "Klassisk kontroll",
["Clear current message window"] = "Rensa nuvarande meddelanderuta",
["Clear object"] = "Rensa objekt",
["Client needs update."] = "Klienten beh<65>ver uppdateras.",
["Close"] = "St<EFBFBD>ng",
["Close this channel"] = "St<EFBFBD>ng Denna Kanal",
["Club Fighting"] = "Klubb Stridande",
["Combat Controls"] = "Krigs Kontroller",
["Comment:"] = "Kommentar:",
["Connecting to game server..."] = "Kopplar upp till spelserver...",
["Connecting to login server..."] = "Kopplar upp till autentiseringserver...",
["Copy message"] = "Kopiera meddelande",
["Copy name"] = "Kopiera namn",
["Copy Name"] = "Kopiera Namn",
["Create New Offer"] = "Skapa ny offert.",
["Create Offer"] = "Skapa Offert",
["Current hotkeys:"] = "Aktuella snabbtangenter",
["Current hotkey to add: %s"] = "Ny Snabbtangent: %s",
["Current Offers"] = "Nuvarande Offerter",
["Default"] = "Standard",
["Description"] = "Beskrivning",
["Destructive Behaviour"] = "Destruktivt beteende",
["Detail"] = "Detalj",
["Details"] = "Detaljer",
["Disable Shared Experience"] = "Avaktivera delad erfarenhet",
["Distance Fighting"] = "Distans Stridande",
["Edit hotkey text:"] = "<EFBFBD>ndra Snabbtangent:",
["Edit List"] = "<EFBFBD>ndra Lista",
["Edit Text"] = "<EFBFBD>ndra text",
["Enable music"] = "Aktivera musik",
["Enable Shared Experience"] = "Aktivera delad erfarenhet",
["Enable vertical synchronization"] = "Aktivera vertikal synkronisering",
["Enter Game"] = "G<EFBFBD> in i Spelet",
["Enter one name per line."] = "Skriv ett namn per linje.",
["Error"] = "Fel",
["Error"] = "Fel",
["Excessive Unjustified Player Killing"] = "<EFBFBD>verdrivet ober<65>ttigat d<>dande av spelare",
["Exclude from private chat"] = "Exkludera fr<66>n privat chat",
["Exit"] = "Avsluta",
["Experience"] = "Erfarenhet",
["Filter list to match your level"] = "Filtrera efter niv<69>",
["Filter list to match your vocation"] = "Filtrera efter kallelse",
["Fishing"] = "Fiske",
["Fist Fighting"] = "Hand Stridande",
["Follow"] = "F<EFBFBD>lj",
["Fullscreen"] = "Helsk<EFBFBD>rm",
["Game framerate limit: %s"] = "Spelets FPS gr<67>ns: %s",
["General"] = "Allm<EFBFBD>nt",
["Graphics"] = "Grafik",
["Graphics Engine:"] = "Grafikmotor:",
["Head"] = "Huvud",
["Health Info"] = "Livsinfo",
["Health Information"] = "Livsinformation",
["Hide monsters"] = "G<EFBFBD>m Monster",
["Hide non-skull players"] = "G<EFBFBD>m icke-skullad spelare",
["Hide Npcs"] = "G<EFBFBD>m NPCs",
["Hide party members"] = "G<EFBFBD>m gruppmedlemmar",
["Hide players"] = "G<EFBFBD>m spelare",
["Hit Points"] = "Livspo<EFBFBD>ng",
["Hold right mouse button to navigate\nScroll mouse middle button to zoom"] = "H<EFBFBD>ll in H<>ger musknapp f<>r att navigera\nScrolla mitten musknapp f<>r att zooma",
["Hotkeys"] = "Snabbtangenter",
["If you shut down the program, your character might stay in the game.\nClick on 'Logout' to ensure that you character leaves the game properly.\nClick on 'Exit' if you want to exit the program without logging out your character."] = "Om du st<73>nger av programmet kan din karakt<6B>r stanna i spelet.\nKlicka p<> 'Logga ut' f<>r att s<>kerst<73>lla att din karakt<6B>r l<>mnar spelet korrekt.\nKlicka p<> 'Avsluta' om du vill avsluta programmet utan att logga ut din karakt<6B>r.",
["Ignore capacity"] = "Ignorera kapacitet",
["Ignore equipped"] = "Ignorera utrustning",
["Interface framerate limit: %s"] = "Gr<EFBFBD>nssnitt FPS gr<67>ns: %s",
["Inventory"] = "Utrustning",
["Invite to Party"] = "Bjud till grupp",
["Invite to private chat"] = "Bjud in i privat chat",
["IP Address Banishment"] = "Bannlysning av IP",
["Item Offers"] = "Objekt offert",
["It is empty.\n"] = "Den <20>r tom.\n",
["Join %s's Party"] = "G<EFBFBD> med i %s's Grupp",
["Leave Party"] = "L<EFBFBD>mna Grupp",
["Level"] = "Niv<EFBFBD>",
["Limits FPS to 60"] = "Stoppa FPS vid 60",
["List of items that you're able to buy"] = "Lista av saker du kan k<>pa",
["List of items that you're able to sell"] = "Lista av saker du kan s<>lja",
["Load"] = "Ladda",
["Location"] = "plats",
["Logging out..."] = "Loggar ut...",
["Login"] = "Logga in",
["Login Error"] = "Autentifikations fel",
["Login Error"] = "Autentifikations fel",
["Logout"] = "Logga ut",
["Look"] = "Kolla",
["Magic Level"] = "Magisk Niv<69>",
["Make sure that your client uses\nthe correct game protocol version"] = "Var s<>ker p<> att din client\n andv<64>nder r<>tt protokol version",
["Mana"] = "Mana",
["Manage hotkeys:"] = "<EFBFBD>ndra snabbtangenten:",
["Market"] = "Marknad",
["Market Offers"] = "Marknadsofferter",
["Message of the day"] = "Dagens meddelande",
["Message to "] = "Meddelande till ",
["Message to %s"] = "Meddelande till %s",
["Minimap"] = "Minikarta",
["Module Manager"] = "Modul Manager",
["Module name"] = "Modul namn",
["Move Stackable Item"] = "Flytta stapelbart f<>rem<65>l",
["Move up"] = "Flytta upp",
["My Offers"] = "Mina offerter",
["Name:"] = "Namn:",
["Name"] = "Namn",
["Name Report"] = "Namn Rapport",
["Name Report + Banishment"] = "Namn rapport + Bannlysning",
["Name Report + Banishment + Final Warning"] = "Namn rapport + Bannlysning + Sista varning",
["No"] = "Nej",
["No item selected."] = "Ingen sak vald.",
["No Mount"] = "Ingen Mount",
["No Outfit"] = "Ingen Utstyrsel",
["No statement has been selected."] = "Inget p<>st<73>ende <20>r valt.",
["Notation"] = "Notering",
["NPC Trade"] = "Handel NPC",
["Offer History"] = "Offert Historia",
["Offers"] = "Offerter",
["Offer Type:"] = "Offert typ:",
["Ok"] = "Ok",
["Okay"] = "okej",
["on %s.\n"] = "p<EFBFBD> %s.\n",
["Open"] = "<EFBFBD>ppna",
["Open a private message channel:"] = "<EFBFBD>ppna en privat meddelandekanal:",
["Open charlist automatically when starting otclient"] = "<EFBFBD>ppna karakt<6B>rlistan automatisk vid start",
["Open in new window"] = "<EFBFBD>ppna i nytt f<>nster",
["Open new channel"] = "<EFBFBD>ppna ny kanal",
["Options"] = "Inst<EFBFBD>llningar",
["Particles Manager"] = "Partikel manager",
["Pass Leadership to %s"] = "Ge ledarskap till %s",
["Password"] = "L<EFBFBD>senord",
["Pause"] = "Pause",
["Piece Price:"] = "Per Styck:",
["Please enter a character name:"] = "Skriv in ett karakt<6B>rsnamn:",
["Please, press the key you wish to add onto your hotkeys manager"] = "Tryck p<> knappen som du\nvill l<>gga till som snabbtangent",
["Please Select"] = "V<EFBFBD>lj",
["Please use this dialog to only report bugs. Do not report rule violations here!"] = "Anv<EFBFBD>nd den h<>r dialogrutan endast f<>r att rapportera buggar. Rapportera inte regelbrott h<>r!",
["Please wait"] = "Var God V<>nta",
["Port"] = "Port",
["Preview"] = "F<EFBFBD>rhandsvisning",
["Price:"] = "Pris",
["Primary"] = "Prim<EFBFBD>r",
["Protocol"] = "Protokoll",
["Quantity:"] = "Antal:",
["Quest Log"] = "Uppdragslog",
["Randomize"] = "Slumpa",
["Randomize characters outfit"] = "Slumpa karakt<6B>rs utstyrsel",
["Reason:"] = "Anledning:",
["Refresh"] = "Uppdatera",
["Reject"] = "Avvisa",
["Reload"] = "Ladda om",
["Reload All"] = "Ladda om allt",
["Remember account and password when starts otclient"] = "Kom ih<69>g konto och l<>sen n<>r OTClient startar",
["Remember password"] = "Kom ih<69>g l<>senord",
["Remove"] = "Ta bort",
["Remove %s"] = "Ta bort %s",
["Report Bug"] = "Rapportera Bugg",
["Revoke %s's Invitation"] = "Annulera %s's Inbjudan",
["Rotate"] = "Rotera",
["Rule Violation"] = "Regel Brott",
["Search:"] = "S<EFBFBD>k:",
["Search"] = "S<EFBFBD>k",
["Secondary"] = "Sekund<EFBFBD>r",
["Select object"] = "V<EFBFBD>lj Objekt",
["Select Outfit"] = "V<EFBFBD>lj Utstyrsel",
["Sell"] = "S<EFBFBD>lj",
["Sell Now"] = "S<EFBFBD>lj Nu",
["Sell Offers"] = "S<EFBFBD>lj Offerter",
["Send"] = "Skicka",
["Send automatically"] = "Skicka automatiskt",
["Server"] = "Server",
["Server Log"] = "Server Log",
["Set Outfit"] = "Best<EFBFBD>m Utstyrsel",
["Shielding"] = "Sk<EFBFBD>ld",
["Show all items"] = "Visa alla saker",
["Show Depot Only"] = "Visa bara f<>rr<72>d",
["Show event messages in console"] = "Visa event meddelanden i konsol",
["Show frame rate"] = "Visa FPS",
["Show info messages in console"] = "Visa info meddelanden i konsol",
["Show left panel"] = "Visa v<>nster panel",
["Show levels in console"] = "Visa niv<69>er i konsol",
["Show private messages in console"] = "Visa privata meddelanden i konsol",
["Show private messages on screen"] = "Visa privata meddelanden p<> sk<73>rmen",
["Show status messages in console"] = "Visa statusmeddelanden i konsol",
["Show Text"] = "Visa Text",
["Show timestamps in console"] = "Visa tidst<73>mpel i konsol",
["Show your depot items only"] = "Visa mitt f<>rr<72>d endast",
["Skills"] = "F<EFBFBD>rm<EFBFBD>gor",
["Soul"] = "Sj<EFBFBD>l",
["Soul Points"] = "Sj<EFBFBD>lpo<EFBFBD>ng",
["Stamina"] = "Uth<EFBFBD>llighet",
["Start"] = "Starta",
["Statement:"] = "P<EFBFBD>st<EFBFBD>ende:",
["Statement Report"] = "P<EFBFBD>st<EFBFBD>enderapport",
["Statistics"] = "Statistik",
["Stop Attack"] = "Sluta Attackera",
["Stop Follow"] = "Sluta F<>lja",
["%s: (use object)"] = "%s: (Anv<6E>nd objekt)",
["%s: (use object on target)"] = "%s: (Anv<6E>nd objekt p<> m<>l)",
["%s: (use object on yourself)"] = "%s: (Anv<6E>nd objekt p<> mig)",
["%s: (use object with crosshair)"] = "%s: (Anv<6E>nd objekt med sikte)",
["Sword Fighting"] = "Sv<EFBFBD>rd Stridning",
["Terminal"] = "Terminal",
["There is no way."] = "Det finns ingen v<>g.",
["Total Price:"] = "Totalt Pris:",
["Trade"] = "Handel",
["Trade with ..."] = "Handla med ...",
["Trying to reconnect in %s seconds."] = "F<EFBFBD>rs<EFBFBD>ker koppla upp igen om %s sekunder.",
["Unable to load dat file, please place a valid dat in '%s'"] = "kan ej ladda dat filen, l<>gg en giltig dat fil i '%s'",
["Unable to load spr file, please place a valid spr in '%s'"] = "kan ej ladda spr filen, l<>gg en giltig spr fil i '%s'",
["Unable to logout."] = "Kan ej logga ut.",
["Unload"] = "Avladda",
["Use"] = "Anv<EFBFBD>nd",
["Use on target"] = "Anv<EFBFBD>nd p<> m<>l",
["Use on yourself"] = "Anv<EFBFBD>nd p<> mig",
["Use with ..."] = "Anv<EFBFBD>nd med ...",
["Version"] = "Version",
["VIP list"] = "VIP Lista",
["VIP List"] = "VIP Lista",
["Voc."] = "Kallelse",
["Waiting List"] = "K<EFBFBD>lista",
["Website"] = "Websida",
["Weight:"] = "Vikt:",
["With crosshair"] = "Med sikte",
["Yes"] = "Ja",
["You are bleeding"] = "Du Bl<42>der",
["You are burning"] = "Du brinner",
["You are cursed"] = "Du <20>r f<>rd<72>md",
["You are dazzled"] = "Du <20>r chockad",
["You are dead."] = "Du <20>r d<>d.",
["You are dead"] = "Du <20>r d<>d",
["You are drowing"] = "Du drunknar",
["You are drunk"] = "Du <20>r full.",
["You are electrified"] = "Du <20>r elektrifierad",
["You are freezing"] = "Du Fryser",
["You are hasted"] = "Du <20>r i hast",
["You are hungry"] = "Du <20>r hungrig",
["You are paralysed"] = "Du <20>r paralyserad",
["You are poisoned"] = "Du <20>r f<>rgiftad",
["You are protected by a magic shield"] = "Du <20>r skyddad av en magisk sk<73>ld",
["You are strengthened"] = "Du <20>r f<>rst<73>rkt",
["You are within a protection zone"] = "Du <20>r inom en skyddszon",
["You can enter new text."] = "Du kan skriva i ny text.",
["You have %s percent"] = "Du har %s procent",
["You have %s percent to go"] = "Du har %s procent kvar",
["You may not logout during a fight"] = "Du kan ej logga ut i strid",
["You may not logout or enter a protection zone"] = "Du kan ej logga ut eller g<> in i en skyddszon",
["You must enter a comment."] = "Du m<>ste skriva en kommentar",
["You must enter an account name and password."] = "Du m<>ste fylla i ett kontonamn och l<>snord.",
["You must enter a valid server address and port."] = "Du m<>ste fylla i en giltig server adress och port",
["You must select a character to login!"] = "Du m<>ste v<>lja en karakt<6B>r f<>r att logga in!",
["Your Capacity:"] = "Din Kapacitet:",
["You read the following, written by \n%s\n"] = "Du l<>ser f<>ljande, Skrivet av \n%s\n",
["You read the following, written on %s.\n"] = "Du l<>ser f<>ljande, Skrivet den %s.\n",
["Your Money:"] = "Dina Pengar:",
}
}
Locales.installLocale(locale)

View File

@@ -1,5 +1,5 @@
-- generated by ./tools/gen_needed_translations.sh
Locales.neededTranslations = {
modules.client_locales.neededTranslations = {
"1a) Offensive Name",
"1b) Invalid Name Format",
"1c) Unsuitable Name",

View File

@@ -1,60 +1,61 @@
ModuleManager = {}
local moduleManagerWindow
local moduleManagerButton
local moduleList
function ModuleManager.init()
moduleManagerWindow = g_ui.displayUI('modulemanager.otui')
function init()
moduleManagerWindow = g_ui.displayUI('modulemanager')
moduleManagerWindow:hide()
moduleList = moduleManagerWindow:getChildById('moduleList')
connect(moduleList, { onChildFocusChange = function(self, focusedChild)
if focusedChild == nil then return end
ModuleManager.updateModuleInfo(focusedChild:getText())
updateModuleInfo(focusedChild:getText())
end })
g_keyboard.bindKeyPress('Up', function() moduleList:focusPreviousChild(KeyboardFocusReason) end, moduleManagerWindow)
g_keyboard.bindKeyPress('Down', function() moduleList:focusNextChild(KeyboardFocusReason) end, moduleManagerWindow)
moduleManagerButton = TopMenu.addLeftButton('moduleManagerButton', tr('Module Manager'), 'modulemanager.png', ModuleManager.toggle)
moduleManagerButton = modules.client_topmenu.addLeftButton('moduleManagerButton', tr('Module Manager'), '/images/topbuttons/modulemanager', toggle)
-- refresh modules only after all modules are loaded
addEvent(ModuleManager.listModules)
addEvent(listModules)
end
function ModuleManager.terminate()
function hideButton()
moduleManagerButton:hide()
end
function terminate()
moduleManagerWindow:destroy()
moduleManagerWindow = nil
moduleManagerButton:destroy()
moduleManagerButton = nil
moduleList = nil
ModuleManager = nil
end
function ModuleManager.hide()
function hide()
moduleManagerWindow:hide()
end
function ModuleManager.show()
function show()
moduleManagerWindow:show()
moduleManagerWindow:raise()
moduleManagerWindow:focus()
end
function ModuleManager.toggle()
function toggle()
if moduleManagerWindow:isVisible() then
ModuleManager.hide()
hide()
else
ModuleManager.show()
show()
end
end
function ModuleManager.refreshModules()
function refreshModules()
g_modules.discoverModules()
ModuleManager.listModules()
listModules()
end
function ModuleManager.listModules()
function listModules()
if not moduleManagerWindow then return end
moduleList:destroyChildren()
@@ -69,7 +70,7 @@ function ModuleManager.listModules()
moduleList:focusChild(moduleList:getFirstChild(), ActiveFocusReason)
end
function ModuleManager.refreshLoadedModules()
function refreshLoadedModules()
if not moduleManagerWindow then return end
for i,child in ipairs(moduleList:getChildren()) do
@@ -78,7 +79,7 @@ function ModuleManager.refreshLoadedModules()
end
end
function ModuleManager.updateModuleInfo(moduleName)
function updateModuleInfo(moduleName)
if not moduleManagerWindow then return end
local name = ''
@@ -118,36 +119,36 @@ function ModuleManager.updateModuleInfo(moduleName)
unloadButton:setEnabled(canUnload)
end
function ModuleManager.reloadCurrentModule()
function reloadCurrentModule()
local focusedChild = moduleList:getFocusedChild()
if focusedChild then
local module = g_modules.getModule(focusedChild:getText())
if module then
module:reload()
if ModuleManager == nil then return end
ModuleManager.updateModuleInfo(module:getName())
ModuleManager.refreshLoadedModules()
ModuleManager.show()
if modules.client_modulemanager == nil then return end
updateModuleInfo(module:getName())
refreshLoadedModules()
show()
end
end
end
function ModuleManager.unloadCurrentModule()
function unloadCurrentModule()
local focusedChild = moduleList:getFocusedChild()
if focusedChild then
local module = g_modules.getModule(focusedChild:getText())
if module then
module:unload()
if ModuleManager == nil then return end
ModuleManager.updateModuleInfo(module:getName())
ModuleManager.refreshLoadedModules()
updateModuleInfo(module:getName())
refreshLoadedModules()
end
end
end
function ModuleManager.reloadAllModules()
function reloadAllModules()
g_modules.reloadModules()
ModuleManager.refreshLoadedModules()
ModuleManager.show()
refreshLoadedModules()
show()
end

View File

@@ -3,13 +3,8 @@ Module
description: Manage other modules
author: edubart
website: www.otclient.info
dependencies:
- client_topmenu
@onLoad: |
dofile 'modulemanager'
ModuleManager.init()
@onUnload: |
ModuleManager.terminate()
sandboxed: true
scripts: [ modulemanager ]
dependencies: [ client_topmenu ]
@onLoad: init()
@onUnload: terminate()

View File

@@ -35,7 +35,7 @@ MainWindow
size: 450 450
!text: tr('Module Manager')
@onEscape: ModuleManager.hide()
@onEscape: modules.client_modulemanager.hide()
TextList
id: moduleList
@@ -63,7 +63,7 @@ MainWindow
margin-top: 8
!text: tr('Refresh')
text-auto-resize: true
@onClick: ModuleManager.refreshModules()
@onClick: modules.client_modulemanager.refreshModules()
Button
id: reloadAllModulesButton
@@ -72,7 +72,7 @@ MainWindow
margin-top: 8
!text: tr('Reload All')
text-auto-resize: true
@onClick: ModuleManager.reloadAllModules()
@onClick: modules.client_modulemanager.reloadAllModules()
Panel
id: moduleInfo
@@ -131,7 +131,7 @@ MainWindow
!text: tr('Load')
enabled: false
width: 90
@onClick: ModuleManager.reloadCurrentModule()
@onClick: modules.client_modulemanager.reloadCurrentModule()
Button
id: moduleUnloadButton
@@ -142,7 +142,7 @@ MainWindow
!text: tr('Unload')
enabled: false
width: 90
@onClick: ModuleManager.unloadCurrentModule()
@onClick: modules.client_modulemanager.unloadCurrentModule()
Button
id: closeButton
@@ -150,5 +150,5 @@ MainWindow
anchors.right: parent.right
!text: tr('Close')
width: 90
@onClick: ModuleManager.hide()
@onClick: modules.client_modulemanager.hide()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 952 B

View File

@@ -1,9 +1,9 @@
FrameRateScrollbar < HorizontalScrollBar
step: 1
@onValueChange: Options.setOption(self:getId(), self:getValue())
@onValueChange: modules.client_options.setOption(self:getId(), self:getValue())
@onSetup: |
UIScrollBar.onSetup(self)
local value = Options.getOption(self:getId())
local value = modules.client_options.getOption(self:getId())
if value == 0 then value = self:getMaximum() end
self:setValue(value)
@@ -54,7 +54,7 @@ Panel
anchors.top: prev.bottom
margin-top: 16
@onSetup: |
local value = Options.getOption('backgroundFrameRate')
local value = modules.client_options.getOption('backgroundFrameRate')
local text = value
if value <= 0 or value >= 201 then
text = 'max'
@@ -78,7 +78,7 @@ Panel
anchors.top: prev.bottom
margin-top: 6
@onSetup: |
local value = Options.getOption('foregroundFrameRate')
local value = modules.client_options.getOption('foregroundFrameRate')
local text = value
if value <= 0 or value >= 61 then
text = 'max'
@@ -102,7 +102,7 @@ Panel
anchors.top: prev.bottom
margin-top: 6
@onSetup: |
local value = Options.getOption('ambientLight')
local value = modules.client_options.getOption('ambientLight')
self:setText(tr('Ambient light: %s%%', value))
FrameRateScrollbar

View File

@@ -1,5 +1,3 @@
Options = {}
local defaultOptions = {
vsync = false,
showFps = true,
@@ -52,9 +50,9 @@ local function setupGraphicsEngines()
enginesRadioGroup.onSelectionChange = function(self, selected)
if selected == ogl1 then
Options.setOption('painterEngine', 1)
setOption('painterEngine', 1)
elseif selected == ogl2 then
Options.setOption('painterEngine', 2)
setOption('painterEngine', 2)
end
end
@@ -79,49 +77,49 @@ function displayWarning(widget, warning)
end
end
function Options.init()
function init()
-- load options
for k,v in pairs(defaultOptions) do
g_settings.setDefault(k, v)
if type(v) == 'boolean' then
Options.setOption(k, g_settings.getBoolean(k))
setOption(k, g_settings.getBoolean(k))
elseif type(v) == 'number' then
Options.setOption(k, g_settings.getNumber(k))
setOption(k, g_settings.getNumber(k))
end
end
g_keyboard.bindKeyDown('Ctrl+D', function() Options.toggle() end)
g_keyboard.bindKeyDown('Ctrl+F', function() Options.toggleOption('fullscreen') end)
g_keyboard.bindKeyDown('Ctrl+Shift+D', function() Options.toggleOption('walkBooster') end)
g_keyboard.bindKeyDown('Ctrl+D', function() toggle() end)
g_keyboard.bindKeyDown('Ctrl+F', function() toggleOption('fullscreen') end)
g_keyboard.bindKeyDown('Ctrl+Shift+D', function() toggleOption('walkBooster') end)
optionsWindow = g_ui.displayUI('options.otui')
optionsWindow = g_ui.displayUI('options')
optionsWindow:hide()
optionsButton = TopMenu.addLeftButton('optionsButton', tr('Options') .. ' (Ctrl+D)', 'options.png', Options.toggle)
optionsButton = modules.client_topmenu.addLeftButton('optionsButton', tr('Options') .. ' (Ctrl+D)', '/images/topbuttons/options', toggle)
optionsTabBar = optionsWindow:getChildById('optionsTabBar')
optionsTabBar:setContentWidget(optionsWindow:getChildById('optionsTabContent'))
gamePanel = g_ui.loadUI('game.otui')
gamePanel = g_ui.loadUI('game')
optionsTabBar:addTab(tr('Game'), gamePanel)
consolePanel = g_ui.loadUI('console.otui')
consolePanel = g_ui.loadUI('console')
optionsTabBar:addTab(tr('Console'), consolePanel)
graphicsPanel = g_ui.loadUI('graphics.otui')
graphicsPanel = g_ui.loadUI('graphics')
optionsTabBar:addTab(tr('Graphics'), graphicsPanel)
if g_game.isOfficialTibia() then
local optionWalkBooster = gamePanel:getChildById('walkBooster')
optionWalkBooster.onCheckChange = function(widget)
displayWarning(widget, "This feature could be detectable by official Tibia servers. Would like to continue?")
Options.setOption(widget:getId(), widget:isChecked())
setOption(widget:getId(), widget:isChecked())
end
end
setupGraphicsEngines()
end
function Options.terminate()
function terminate()
g_keyboard.unbindKeyDown('Ctrl+D')
g_keyboard.unbindKeyDown('Ctrl+F')
g_keyboard.unbindKeyDown('Ctrl+Shift+D')
@@ -133,37 +131,36 @@ function Options.terminate()
gamePanel = nil
consolePanel = nil
graphicsPanel = nil
Options = nil
end
function Options.toggle()
function toggle()
if optionsWindow:isVisible() then
Options.hide()
hide()
else
Options.show()
show()
end
end
function Options.show()
function show()
optionsWindow:show()
optionsWindow:raise()
optionsWindow:focus()
end
function Options.hide()
function hide()
optionsWindow:hide()
end
function Options.toggleOption(key)
function toggleOption(key)
local optionWidget = optionsWindow:recursiveGetChildById(key)
if optionWidget then
optionWidget:setChecked(not Options.getOption(key))
optionWidget:setChecked(not getOption(key))
else
Options.setOption(key, not Options.getOption(key))
setOption(key, not getOption(key))
end
end
function Options.setOption(key, value)
function setOption(key, value)
if options[key] == value then return end
if key == 'vsync' then
g_window.setVerticalSync(value)
@@ -229,7 +226,7 @@ function Options.setOption(key, value)
options[key] = value
end
function Options.getOption(key)
function getOption(key)
return options[key]
end

View File

@@ -3,13 +3,8 @@ Module
description: Create the options window
author: edubart, BeniS
website: www.otclient.info
dependencies:
- client_topmenu
@onLoad: |
dofile 'options'
Options.init()
@onUnload: |
Options.terminate()
sandboxed: true
dependencies: [ client_topmenu ]
scripts: [ options ]
@onLoad: init()
@onUnload: terminate()

View File

@@ -1,6 +1,6 @@
OptionCheckBox < CheckBox
@onCheckChange: Options.setOption(self:getId(), self:isChecked())
@onSetup: self:setChecked(Options.getOption(self:getId()))
@onCheckChange: modules.client_options.setOption(self:getId(), self:isChecked())
@onSetup: self:setChecked(modules.client_options.getOption(self:getId()))
height: 16
$first:
@@ -19,8 +19,8 @@ MainWindow
!text: tr('Options')
size: 350 310
@onEnter: Options.hide()
@onEscape: Options.hide()
@onEnter: modules.client_options.hide()
@onEscape: modules.client_options.hide()
TabBarRounded
id: optionsTabBar
@@ -41,4 +41,4 @@ MainWindow
width: 64
anchors.right: parent.right
anchors.bottom: parent.bottom
@onClick: Options.hide()
@onClick: modules.client_options.hide()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 660 B

View File

@@ -1,95 +0,0 @@
Particles = { }
-- private variables
local particlesWindow
local particlesButton
-- private functions
local function onExtendedParticles(protocol, opcode, buffer)
end
-- public functions
function Particles.init()
particlesWindow = g_ui.displayUI('particles.otui')
particlesButton = TopMenu.addLeftButton('particlesButton', tr('Particles Manager'), 'particles.png', Particles.toggle)
local particlesList = particlesWindow:getChildById('particlesList')
g_keyboard.bindKeyPress('Up', function() particlesList:focusPreviousChild(KeyboardFocusReason) end, particlesWindow)
g_keyboard.bindKeyPress('Down', function() particlesList:focusNextChild(KeyboardFocusReason) end, particlesWindow)
Extended.register(ExtendedParticles, onExtendedParticles)
end
function Particles.terminate()
particlesWindow:destroy()
particlesWindow = nil
particlesButton:destroy()
particlesButton = nil
Extended.unregister(ExtendedParticles)
end
function Particles.show()
Particles.refreshList()
particlesWindow:show()
particlesWindow:raise()
particlesWindow:focus()
end
function Particles.hide()
particlesWindow:hide()
end
function Particles.toggle()
if particlesWindow:isVisible() then
Particles.hide()
else
Particles.show()
end
end
function Particles.refreshInfo()
local particlesList = particlesWindow:getChildById('particlesList')
local widget = particlesList:getFocusedChild()
local name = particlesWindow:getChildById('name')
name:setText(widget.effect:getName())
local location = particlesWindow:getChildById('location')
location:setText(widget.effect:getFile())
local description = particlesWindow:getChildById('description')
description:setText(widget.effect:getDescription())
end
function Particles.refreshList()
local particlesList = particlesWindow:getChildById('particlesList')
particlesList.onChildFocusChange = nil
particlesList:destroyChildren()
local firstChild = nil
local effects = g_particles.getEffectsTypes()
for name,effect in pairs(effects) do
local label = g_ui.createWidget('ParticlesListLabel', particlesList)
label:setText(name)
label.effect = effect
if not firstChild then
firstChild = label
end
end
particlesList.onChildFocusChange = Particles.refreshInfo
if firstChild then
firstChild:focus()
end
end
function Particles.start()
local particlesList = particlesWindow:getChildById('particlesList')
local focusedEffect = particlesList:getFocusedChild()
local preview = particlesWindow:getChildById('preview')
preview:addEffect(focusedEffect:getText())
end

View File

@@ -1,17 +0,0 @@
Module
name: client_particles
description: Manages particles systems
author: baxnie
website: www.otclient.info
dependencies:
- client_extended
- client_locales
- client_topmenu
@onLoad: |
dofile 'particles'
Particles.init()
@onUnload: |
Particles.terminate()

View File

@@ -1,130 +0,0 @@
ParticlesListLabel < Label
font: verdana-11px-monochrome
background-color: alpha
text-offset: 2 0
focusable: true
$focus:
background-color: #ffffff22
color: #ffffff
MainWindow
id: particlesWindow
!text: tr('Particles Manager')
size: 450 450
visible: false
@onEscape: Particles.hide()
TextList
id: particlesList
anchors.top: parent.top
anchors.left: parent.left
anchors.bottom: separator.top
width: 128
padding: 1
focusable: false
margin-bottom: 10
vertical-scrollbar: particlesListScrollBar
VerticalScrollBar
id: particlesListScrollBar
anchors.top: particlesList.top
anchors.bottom: particlesList.bottom
anchors.left: particlesList.right
step: 14
pixels-scroll: true
Label
!text: tr('Name')
anchors.top: parent.top
anchors.left: prev.right
margin-left: 10
FlatLabel
id: name
anchors.top: prev.bottom
anchors.left: prev.left
anchors.right: parent.right
margin-top: 3
Label
!text: tr('Location')
anchors.top: prev.bottom
anchors.left: prev.left
margin-top: 10
FlatLabel
id: location
anchors.top: prev.bottom
anchors.left: prev.left
anchors.right: parent.right
margin-top: 3
Label
!text: tr('Description')
anchors.top: prev.bottom
anchors.left: prev.left
margin-top: 10
FlatLabel
id: description
anchors.top: prev.bottom
anchors.left: prev.left
anchors.right: parent.right
margin-top: 3
Label
!text: tr('Preview')
anchors.top: prev.bottom
anchors.left: prev.left
margin-top: 10
ParticlesFlatPanel
id: preview
margin-top: 3
margin-bottom: 10
anchors.top: prev.bottom
anchors.bottom: next.top
anchors.left: prev.left
anchors.right: parent.right
reference: 10 10
Button
id: startButton
!text: tr('Start')
width: 64
anchors.bottom: separator.top
anchors.left: location.left
margin-bottom: 10
Button
id: pauseButton
!text: tr('Pause')
width: 64
anchors.bottom: prev.bottom
anchors.left: prev.right
margin-left: 5
Button
id: reloadButton
!text: tr('Reload')
width: 64
anchors.bottom: separator.top
anchors.right: parent.right
margin-bottom: 10
HorizontalSeparator
id: separator
anchors.left: parent.left
anchors.right: parent.right
anchors.bottom: next.top
margin-bottom: 10
Button
id: closeButton
!text: tr('Close')
width: 64
anchors.right: parent.right
anchors.bottom: parent.bottom
@onClick: Particles.hide()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 571 B

View File

@@ -1,144 +0,0 @@
Skins = { }
-- private variables
local defaultSkinName = 'Default'
local installedSkins
local currentSkin
local skinComboBox
-- private functions
local function onSkinComboBoxOptionChange(self, optionText, optionData)
if Skins.setSkin(optionText) then
g_settings.set('skin', optionText)
g_textures.clearTexturesCache()
g_modules.reloadModules()
end
end
local function getSkinPath(name)
return getfsrcpath() .. '/skins/' .. string.lower(name)
end
-- public functions
function Skins.init()
installedSkins = {}
Skins.installSkins('skins')
if installedSkins[defaultSkinName] then
g_resources.addSearchPath(getSkinPath(defaultSkinName), true)
end
local userSkinName = g_settings.get('skin', 'false')
if userSkinName ~= 'false' and Skins.setSkin(userSkinName) then
pdebug('Using configured skin: ' .. userSkinName)
else
pdebug('Using default skin: ' .. defaultSkinName)
Skins.setSkin(defaultSkinName)
g_settings.set('skin', defaultSkinName)
end
addEvent( function()
skinComboBox = g_ui.createWidget('ComboBoxRounded', rootWidget:recursiveGetChildById('rightButtonsPanel'))
skinComboBox:setFixedSize(true)
for key,value in pairs(installedSkins) do
skinComboBox:addOption(value.name)
end
skinComboBox:setCurrentOption(currentSkin.name)
skinComboBox.onOptionChange = onSkinComboBoxOptionChange
end, false)
end
function Skins.terminate()
g_resources.removeSearchPath(getSkinPath(defaultSkinName))
if currentSkin then
g_resources.removeSearchPath(getSkinPath(currentSkin.name))
end
installedSkins = nil
currentSkin = nil
skinComboBox = nil
end
function Skins.installSkin(skin)
if not skin or not skin.name or not skin.styles then
error('Unable to install skin.')
return false
end
if installedSkins[skin.name] then
pwarning(skin.name .. ' has been replaced.')
end
installedSkins[skin.name] = skin
return true
end
function Skins.installSkins(directory)
dofiles(directory)
end
function Skins.setSkin(name)
local skin = installedSkins[name]
if not skin then
pwarning("Skin " .. name .. ' does not exist.')
return false
end
g_fonts.clearFonts()
g_ui.clearStyles()
if currentSkin and currentSkin.name ~= defaultSkinName then
g_resources.removeSearchPath(getSkinPath(currentSkin.name))
end
if skin.name ~= defaultSkinName then
g_resources.addSearchPath(getSkinPath(skin.name), true)
Skins.loadSkin(skin)
end
local defaultSkin = installedSkins[defaultSkinName]
if not defaultSkin then
error("Default skin is not installed.")
return false
end
Skins.loadSkin(defaultSkin)
currentSkin = skin
return true
end
function Skins.loadSkin(skin)
local lowerName = string.lower(skin.name)
if skin.fonts then
for i=1,#skin.fonts do
g_fonts.importFont('skins/' .. lowerName .. '/fonts/' .. skin.fonts[i])
end
end
if skin.defaultFont then
g_fonts.setDefaultFont(skin.defaultFont)
end
if skin.styles then
for i=1,#skin.styles do
g_ui.importStyle('skins/' .. lowerName .. '/styles/' .. skin.styles[i])
end
end
if skin.particles then
for i=1,#skin.particles do
g_particles.importParticle('skins/' .. lowerName .. '/particles/' .. skin.particles[i])
end
end
end
function Skins.hideComboBox()
if not skinComboBox then
addEvent(Skins.hideComboBox)
else
skinComboBox:hide()
skinComboBox:setWidth(0)
end
end

View File

@@ -1,12 +0,0 @@
Module
name: client_skins
description: Changes modules styles
author: baxnie
website: www.otclient.info
@onLoad: |
dofile 'skins'
Skins.init()
@onUnload: |
Skins.terminate()

View File

@@ -1,42 +0,0 @@
local skin = {
name = 'Default',
-- first font is default
fonts = {
'verdana-11px-antialised',
'verdana-11px-monochrome',
'verdana-11px-rounded',
'terminus-14px-bold'
},
defaultFont = 'verdana-11px-antialised',
styles = {
'buttons.otui',
'creaturebuttons.otui',
'labels.otui',
'panels.otui',
'separators.otui',
'textedits.otui',
'checkboxes.otui',
'progressbars.otui',
'tabbars.otui',
'windows.otui',
'listboxes.otui',
'popupmenus.otui',
'comboboxes.otui',
'spinboxes.otui',
'messageboxes.otui',
'scrollbars.otui',
'splitters.otui',
'miniwindow.otui',
'items.otui',
'creatures.otui',
'tables.otui'
},
particles = {
'shiny.otps'
}
}
Skins.installSkin(skin)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 266 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 238 B

View File

@@ -1,8 +0,0 @@
Font
name: terminus-14px-bold
texture: terminus-14px-bold.png
height: 16
y-offset: 2
glyph-size: 16 16
fixed-glyph-width: 8
space-width: 8

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.8 KiB

View File

@@ -1,6 +0,0 @@
Font
name: verdana-11px-antialised
texture: verdana-11px-antialised_cp1252.png
height: 14
glyph-size: 16 16
space-width: 4

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.8 KiB

View File

@@ -1,6 +0,0 @@
Font
name: verdana-11px-monochrome
texture: verdana-11px-monochrome_cp1252.png
height: 14
glyph-size: 16 16
space-width: 3

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

View File

@@ -1,8 +0,0 @@
Font
name: verdana-11px-rounded
texture: verdana-11px-rounded_cp1252.png
height: 16
glyph-size: 16 16
y-offset: -2
spacing: -1 -3
space-width: 4

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 833 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 859 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 409 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 281 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 548 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 457 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 139 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 152 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 381 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 262 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 241 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 315 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 400 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 661 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 673 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 696 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 415 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 197 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

View File

@@ -1,52 +0,0 @@
Particle
name: shiny_star
min-position-radius: 0
max-position-radius: 8
min-position-angle: 0
max-position-angle: 360
velocity: 4
min-velocity-angle: 0
max-velocity-angle: 360
particle-size: 4 4
texture: shiny_star.png
composition-mode: addition
Effect
name: Shiny3
description: 3 Shiny stars derping aroud
System
position: 0 0
Emitter
position: 0 0
delay: 0
duration: 0
burstRate: 0
burstCount: 3
particle-type: shiny_star
AttractionAffector
position: 0 0
acceleration: 2
Effect
name: Shiny5
description: 5 Shiny stars derping aroud
System
position: 0 0
Emitter
position: 0 0
delay: 0
duration: 0
burstRate: 0
burstCount: 5
particle-type: shiny_star
AttractionAffector
position: 0 0
acceleration: 2

View File

@@ -1,61 +0,0 @@
Button < UIButton
font: verdana-11px-antialised
color: #f0ad4dff
size: 106 22
text-offset: 0 0
image-source: /images/button_rounded.png
image-color: white
image-clip: 0 0 20 20
image-border: 2
padding: 5 10 5 10
$hover !disabled:
image-clip: 0 20 20 20
$pressed:
image-clip: 0 40 20 20
text-offset: 1 1
$disabled:
color: #f0ad4d88
TabButton < UIButton
size: 20 20
image-source: /images/tabbutton_rounded.png
image-color: white
image-clip: 0 0 20 20
image-border: 2
icon-color: white
color: #aaaaaa
$hover !on:
image-clip: 0 20 20 20
color: white
$disabled:
image-color: #ffffff66
icon-color: #888888
$on:
image-clip: 0 40 20 20
color: #80c7f8
BrowseButton < Button
size: 20 29
icon-clip: 0 0 12 21
$hover !disabled:
icon-clip: 0 21 12 21
$pressed:
icon-clip: 0 22 12 21
$disabled:
image-color: #ffffff55
icon-color: #ffffff55
NextButton < BrowseButton
icon-source: /images/arrow_right.png
PreviousButton < BrowseButton
icon-source: /images/arrow_left.png

View File

@@ -1,66 +0,0 @@
CheckBox < UICheckBox
size: 16 16
text-align: left
text: aa
text-offset: 16 0
color: #aaaaaa
image-color: #ffffffff
image-rect: 0 0 12 12
image-offset: 0 2
image-source: /images/checkbox.png
$hover !disabled:
color: #cccccc
$!checked:
image-clip: 0 0 12 12
$hover !checked:
image-clip: 0 12 12 12
$checked:
image-clip: 0 24 12 12
$hover checked:
image-clip: 0 36 12 12
$disabled:
image-color: #ffffff88
color: #aaaaaa88
ColorBox < UICheckBox
size: 16 16
image-color: #ffffffff
image-source: /images/colorbox.png
$checked:
image-clip: 16 0 16 16
$!checked:
image-clip: 0 0 16 16
ButtonBox < UICheckBox
font: verdana-11px-antialised
color: #ffffffff
size: 106 22
text-offset: 0 0
text-align: center
image-source: /images/tabbutton_rounded.png
image-color: white
image-clip: 0 0 20 20
image-border: 2
$hover !disabled:
image-clip: 0 20 20 20
$checked:
image-clip: 0 40 20 20
color: #80c7f8
$disabled:
color: #666666ff
image-color: #ffffff88
ButtonBoxRounded < ButtonBox
image-source: /images/tabbutton_rounded.png
image-border: 2

View File

@@ -1,62 +0,0 @@
ComboBoxPopupMenuButton < UIButton
height: 20
font: verdana-11px-antialised
text-align: left
text-offset: 4 0
color: #aaaaaa
background-color: alpha
$hover !disabled:
color: #ffffff
background-color: #ffffff44
$disabled:
color: #555555
ComboBoxPopupMenu < UIPopupMenu
image-source: /images/combobox_square.png
image-clip: 0 60 89 20
image-border-left: 1
image-border-right: 1
ComboBox < UIComboBox
font: verdana-11px-antialised
color: #aaaaaa
size: 89 20
text-offset: 3 0
text-align: left
image-source: /images/combobox_square.png
image-border: 1
image-border-right: 17
image-clip: 0 0 89 20
$hover !disabled:
image-clip: 0 20 89 20
$on:
image-clip: 0 40 89 20
ComboBoxRoundedPopupMenuButton < UIButton
height: 20
font: verdana-11px-antialised
text-align: left
text-offset: 4 0
color: #aaaaaa
background-color: alpha
$hover !disabled:
color: #ffffff
background-color: #ffffff44
$disabled:
color: #555555
ComboBoxRoundedPopupMenu < UIPopupMenu
image-source: /images/combobox_rounded.png
image-clip: 0 60 89 20
image-border-left: 1
image-border-right: 1
ComboBoxRounded < ComboBox
image-source: /images/combobox_rounded.png
image-border: 2

View File

@@ -1,48 +0,0 @@
CreatureButton < UICreatureButton
height: 20
margin-bottom: 5
UICreature
id: creature
size: 20 20
anchors.left: parent.left
anchors.top: parent.top
phantom: true
UIWidget
id: spacer
width: 5
anchors.left: creature.right
anchors.top: creature.top
phantom: true
UIWidget
id: skull
height: 11
anchors.left: spacer.right
anchors.top: spacer.top
phantom: true
UIWidget
id: emblem
height: 11
anchors.left: skull.right
anchors.top: creature.top
phantom: true
Label
id: label
anchors.left: emblem.right
anchors.top: creature.top
color: #888888
margin-left: 2
phantom: true
ProgressBar
id: lifeBar
height: 5
anchors.left: spacer.right
anchors.right: parent.right
anchors.top: label.bottom
margin-top: 2
phantom: true

View File

@@ -1,5 +0,0 @@
Creature < UICreature
size: 80 80
padding: 1
image-source: /images/panel_flat.png
image-border: 1

View File

@@ -1,6 +0,0 @@
Item < UIItem
size: 34 34
padding: 1
image-source: /images/item.png
font: verdana-11px-rounded
border-color: white

View File

@@ -1,65 +0,0 @@
Label < UILabel
font: verdana-11px-antialised
color: #bbbbbb
$disabled:
color: #bbbbbb88
FlatLabel < UILabel
font: verdana-11px-antialised
color: #aaaaaa
size: 86 20
text-offset: 3 3
image-source: /images/panel_flat.png
image-border: 1
$disabled:
color: #aaaaaa88
MenuLabel < Label
GameLabel < UILabel
font: verdana-11px-antialised
color: #bbbbbb
FrameCounterLabel < Label
font: verdana-11px-rounded
@onSetup: |
self.updateEvent = cycleEvent(function()
local text = 'FPS: ' .. g_app.getBackgroundPaneFps()
self:setText(text)
end, 1000)
@onDestroy: self.updateEvent:cancel()
PingLabel < Label
font: verdana-11px-rounded
@onSetup: |
self.updateEvent = cycleEvent(function()
if g_game.isOnline() and Options.getOption('showPing') then
local ping = -1
if g_game.getFeature(GameClientPing) then
ping = g_game.getPing()
else
ping = g_game.getLocalPlayer():getWalkPing()
end
local text = 'Ping: '
if ping < 0 then
text = text .. "??"
self:setColor('yellow')
else
text = text .. ping .. ' ms'
if ping >= 500 then
self:setColor('red')
elseif ping >= 250 then
self:setColor('yellow')
else
self:setColor('green')
end
end
self:setText(text)
self:show()
else
self:hide()
end
end, 1000)
@onDestroy: self.updateEvent:cancel()

View File

@@ -1,11 +0,0 @@
TextList < UIScrollArea
layout: verticalBox
border-width: 1
border-color: #1d222b
background-color: #222833
HorizontalList < UIScrollArea
layout: horizontalBox
border-width: 1
border-color: #1d222b
background-color: #222833

Some files were not shown because too many files have changed in this diff Show More