Ir para conteúdo

Pesquisar na Comunidade

Mostrando resultados para as tags ''OTClient''.



Mais opções de pesquisa

  • Pesquisar por Tags

    Digite tags separadas por vírgulas
  • Pesquisar por Autor

Tipo de Conteúdo


Fóruns

  • A Cidade OTBR
    • OTServ Brasil
    • Atendimento
    • Taverna
  • Projetos Open Source
    • Canary
    • OTServBR-Global
    • Mehah OTClient
    • MyAAC
  • OpenTibia
    • Notícias e Discussões
    • Suporte - Dúvidas, Bugs, Erros
    • Downloads
    • Tutoriais
    • Show-Off
  • Outros
    • Design

Encontrado 120 registros

  1. OTClient Otc bot

    Fiz o download da versão do OTC 0.6.3, e gostaria de saber como coloca aquele bot no client, porque baxei o cliente de varios ots que ja vem com o bot, gostaria de saber como coloco ele!
  2. OTClient Tres Duvidas

    -Como retirar todos os botões na area de cima e só deixa o de opção -Como por o botao exit na parte de por a conta e a senha? -Como por o titulo centralizado?
  3. Bem tenho Opcodes Instalado mais não manjo muito das funç~~ dele, ver se um membro aqui do forum pd ajudar ai vai o script. Script inventory.lua InventorySlotStyles = { [inventorySlotHead] = "HeadSlot", [inventorySlotNeck] = "NeckSlot", [inventorySlotBack] = "BackSlot", [inventorySlotBody] = "BodySlot", [inventorySlotRight] = "RightSlot", [inventorySlotLeft] = "LeftSlot", [inventorySlotLeg] = "LegSlot", [inventorySlotFeet] = "FeetSlot", [inventorySlotFinger] = "FingerSlot", [inventorySlotAmmo] = "AmmoSlot" } Backgrounds = { [0] = { path = '/images/inventory/Anbu_INV.png', id = 'background_anbu'}, [1] = { path = '/images/inventory/Uchiha_INV.png', id = 'background_uchiha'}, [2] = { path = '/images/inventory/Hyuuga_INV.png', id = 'background_hyuuga'}, [3] = { path = '/images/inventory/Aburame_INV.png', id = 'background_aburame'}, [4] = { path = '/images/inventory/Nara_INV.png', id = 'background_nara'}, [5] = { path = '/images/inventory/Inuzuka_INV.png', id = 'background_inuzuka'}, [6] = { path = '/images/inventory/Akimichi_INV.png', id = 'background_akimichi'}, [7] = { path = '/images/inventory/Maito_INV.png', id = 'background_maito'}, [8] = { path = '/images/inventory/Uchiha_INV.png', id = 'background_uchiha'}, } inventoryWindow = nil inventoryPanel = nil inventoryButton = nil function init() connect(LocalPlayer, { onInventoryChange = onInventoryChange }) connect(g_game, { onGameStart = refresh }) g_keyboard.bindKeyDown('Ctrl+I', toggle) inventoryButton = modules.client_topmenu.addRightGameToggleButton('inventoryButton', tr('Inventory') .. ' (Ctrl+I)', '/images/topbuttons/inventory', toggle) inventoryButton:setOn(true) inventoryWindow = g_ui.loadUI('inventory', modules.game_interface.getRightPanel()) inventoryWindow:disableResize() inventoryPanel = inventoryWindow:getChildById('contentsPanel') local itemWidget = inventoryPanel:getChildById('slot9') itemWidget:setVisible(false) local itemWidget = inventoryPanel:getChildById('slot10') itemWidget:setVisible(false) refresh() inventoryWindow:setup() inventoryWindow:close() inventoryButton:setOn(false) end ProtocolGame.registerExtendedOpcode(26, function (protocol, opcode, buffer) local bg = Backgrounds[tonumber(vocation)] or Backgrounds[0] vocation = bg print(vocation) end ) function terminate() disconnect(LocalPlayer, { onInventoryChange = onInventoryChange }) disconnect(g_game, { onGameStart = refresh }) g_keyboard.unbindKeyDown('Ctrl+I') inventoryWindow:destroy() inventoryButton:destroy() end function refresh() local player = g_game.getLocalPlayer() for i=InventorySlotFirst,InventorySlotLast do if g_game.isOnline() then onInventoryChange(player, i, player:getInventoryItem(i)) else onInventoryChange(player, i, nil) end end end function toggle() refresh() if inventoryButton:isOn() then inventoryWindow:close() inventoryButton:setOn(false) else inventoryWindow:open() inventoryButton:setOn(true) end end function onMiniWindowClose() inventoryButton:setOn(false) end -- hooked events function onInventoryChange(player, slot, item, oldItem) local player = g_game.getLocalPlayer() if(player) then local vocation = player:getVocation() if(vocation ~= 0) then inventoryWindow:setImageSource(Backgrounds[vocation].path) end end if slot >= InventorySlotPurse then return end local itemWidget = inventoryPanel:getChildById('slot' .. slot) if item then itemWidget:setStyle('Item') itemWidget:setItem(item) else itemWidget:setStyle(InventorySlotStyles[slot]) itemWidget:setItem(nil) end end inventory.Otui InventoryItem < Item JutsusSlot < InventoryItem id: slot10 image-source: /images/game/slots/menubox &position: {x=65535, y=6, z=0} SkillPercentPanel < ProgressBar id: percent background-color: green height: 8 border-width: 2 Skill < Label font: verdana-11px-monochrome text-offset: 42 3 focusable: true height: 36 image-size: 32 32 image-offset: 2 2 Miniature < Label font: verdana-11px-monochrome text-offset: 42 3 focusable: true height: 20 image-size: 18 18 image-offset: 2 2 SkillUp < Button size: 12 12 icon-clip: 0 32 16 16 font: terminus-14px-bold color: #61de21 text: + text-offset: 1 0 border-width: 2 enabled: false visible: true $pressed: icon-clip: 0 0 16 16 $hover !pressed: icon-clip: 0 16 16 16 MiniWindow id: skillWindow !text: tr('Ninja Info') size: 380 550 icon: /images/topbuttons/skills @onClose: modules.game_skills.onMiniWindowClose() &save: true MiniWindowContents padding-left: 5 padding-right: 5 Panel id: portraitPanel size: 64 64 border-width: 2 image-source: /images/game/portraits/akamaru anchors.top: parent.top anchors.left: parent.left margin: 25 5 15 5 Label id: name font: terminus-14px-bold anchors.top: parent.top anchors.left: parent.left margin-left: 5 text-auto-resize: true Label id: clan anchors.top: portraitPanel.top anchors.left: portraitPanel.right margin-left: 25 text-auto-resize: true Miniature id: clanMiniature image-source: /images/game/skills/maito anchors.top: clan.top anchors.right: clan.left margin-right: 5 margin-top: -2 Label id: rank anchors.top: clan.top anchors.left: clan.left margin-top: 25 text-auto-resize: true Miniature id: rankMiniature image-source: /images/game/skills/chunnin anchors.top: rank.top anchors.right: rank.left margin-right: 5 margin-top: -2 Label id: village anchors.top: rank.top anchors.left: rank.left margin-top: 25 Miniature id: villageMiniature image-source: /images/game/skills/konoha anchors.top: village.top anchors.right: village.left margin-right: 5 margin-top: -2 Label id: levelLabel !text: tr("Level: ") font: verdana-11px-antialised anchors.left: portraitPanel.left anchors.top: portraitPanel.bottom margin-top: 10 Label id: level anchors.left: levelLabel.right anchors.top: levelLabel.top margin-left: 5 text-auto-resize: true Label id: experienceLabel !text: tr("Exp.: ") font: verdana-11px-antialised anchors.left: levelLabel.left anchors.top: levelLabel.bottom margin-top: 5 Label id: experience anchors.left: experienceLabel.right anchors.top: experienceLabel.top margin-left: 5 text-auto-resize: true Label id: atkSpeedLabel !text: tr("Atk. Speed: ") anchors.left: experienceLabel.left anchors.top: experienceLabel.bottom margin-top: 5 Label id: atkSpeed anchors.left: atkSpeedLabel.right anchors.top: atkSpeedLabel.top margin-left: 5 text-auto-resize: true Label id: movSpeedLabel !text: tr("Mov. Speed: ") anchors.left: atkSpeedLabel.left anchors.top: atkSpeed.bottom margin-top: 5 Label id: movSpeed anchors.left: movSpeedLabel.right anchors.top: movSpeedLabel.top margin-left: 5 text-auto-resize: true Label id: bountyLabel !text: tr("Bounty: ") anchors.left: movSpeedLabel.left anchors.top: movSpeedLabel.bottom margin-top: 5 Label id: bounty !text: "0" anchors.left: bountyLabel.right anchors.top: bountyLabel.top margin-left: 5 text-auto-resize: true Label id: reputationLabel !text: tr("Reputation: ") anchors.left: bountyLabel.left anchors.top: bountyLabel.bottom margin-top: 5 Label id: reputation !text: "0" anchors.left: reputationLabel.right anchors.top: reputationLabel.top margin-left: 5 text-auto-resize: true Label id: jutsusLabel !text: tr("Character Menu") color: #82949c font: terminus-14px-bold anchors.horizontalCenter: parent.horizontalCenter anchors.top: parent.top margin-top: 5 margin-left: 100 JutsusSlot anchors.top: jutsusLabel.bottom anchors.horizontalCenter: jutsusLabel.horizontalCenter margin-top: 10 Label id: missions !text: tr("Missions") color: #82949c font: terminus-14px-bold anchors.horizontalCenter: jutsusLabel.horizontalCenter anchors.top: jutsusLabel.bottom margin-top: 50 Label id: rankdLabel !text: tr("D-Rank") color: #9de24f anchors.right: missions.left anchors.top: missions.bottom margin-top: 15 Label id: rankd !text: tr("0") anchors.horizontalCenter: rankdLabel.horizontalCenter anchors.top: rankdLabel.bottom margin-top: 5 text-auto-resize: true Label id: rankcLabel !text: tr("C-Rank") color: #ffff00 anchors.left: missions.right anchors.top: rankdLabel.top Label id: rankc !text: tr("0") anchors.horizontalCenter: rankcLabel.horizontalCenter anchors.top: rankcLabel.bottom margin-top: 5 text-auto-resize: true Label id: rankbLabel !text: tr("B-Rank") color: #088da5 anchors.right: missions.left anchors.top: rankdLabel.bottom margin-top: 30 Label id: rankb !text: tr("0") anchors.horizontalCenter: rankbLabel.horizontalCenter anchors.top: rankbLabel.bottom margin-top: 5 text-auto-resize: true Label id: rankaLabel !text: tr("A-Rank") color: #f7b82b anchors.left: missions.right anchors.top: rankbLabel.top Label id: ranka !text: tr("0") anchors.horizontalCenter: rankaLabel.horizontalCenter anchors.top: rankaLabel.bottom margin-top: 5 text-auto-resize: true Label id: ranksLabel !text: tr("S-Rank") color: #ff0000 anchors.horizontalCenter: missions.horizontalCenter anchors.top: rankaLabel.bottom margin-top: 30 Label id: ranks !text: tr("0") anchors.horizontalCenter: ranksLabel.horizontalCenter anchors.top: ranksLabel.bottom margin-top: 5 text-auto-resize: true Skill id: taijutsuImage image-source: /images/game/skills/taijutsu anchors.top: reputation.bottom anchors.horizontalCenter: parent.horizontalCenter margin-top: 5 Label id: taijutsuLabel !text: tr("Taijutsu") anchors.top: taijutsuImage.bottom anchors.horizontalCenter: taijutsuImage.horizontalCenter margin-top: 5 height: 17 SkillPercentPanel width: 70 anchors.top: parent.bottom anchors.horizontalCenter: parent.horizontalCenter Label id: taijutsuValue !text: tr("0") anchors.horizontalCenter: taijutsuLabel.horizontalCenter anchors.top: taijutsuLabel.bottom margin-top: 10 text-auto-resize: true Skill id: ninjutsuImage image-source: /images/game/skills/ninjutsu anchors.top: reputation.bottom anchors.left: parent.left margin-top: 50 margin-left: 50 Label id: ninjutsuLabel !text: tr("Ninjutsu") anchors.top: ninjutsuImage.bottom anchors.horizontalCenter: ninjutsuImage.horizontalCenter margin-top: 5 height: 17 SkillPercentPanel width: 70 anchors.top: parent.bottom anchors.horizontalCenter: parent.horizontalCenter Label id: ninjutsuValue !text: tr("0") anchors.horizontalCenter: ninjutsuLabel.horizontalCenter anchors.top: ninjutsuLabel.bottom margin-top: 10 text-auto-resize: true Skill id: genjutsuImage image-source: /images/game/skills/genjutsu anchors.top: reputation.bottom anchors.right: parent.right margin-top: 50 margin-right: 50 Label id: genjutsuLabel !text: tr("Genjutsu") anchors.top: genjutsuImage.bottom anchors.horizontalCenter: genjutsuImage.horizontalCenter margin-top: 5 height: 17 SkillPercentPanel width: 70 anchors.top: parent.bottom anchors.horizontalCenter: parent.horizontalCenter Label id: genjutsuValue !text: tr("0") anchors.horizontalCenter: genjutsuLabel.horizontalCenter anchors.top: genjutsuLabel.bottom margin-top: 10 text-auto-resize: true Skill id: meleeWeaponsImage image-source: /images/game/skills/meleeweapons anchors.top: ninjutsuValue.bottom anchors.left: ninjutsuValue.left margin-top: 10 margin-left: 40 Label id: meleeWeaponsLabel !text: tr("Melee Weapons") anchors.top: meleeWeaponsImage.bottom anchors.horizontalCenter: meleeWeaponsImage.horizontalCenter margin-top: 5 height: 17 SkillPercentPanel width: 70 anchors.top: parent.bottom anchors.horizontalCenter: parent.horizontalCenter Label id: meleeWeaponsValue !text: tr("0") anchors.horizontalCenter: meleeWeaponsLabel.horizontalCenter anchors.top: meleeWeaponsLabel.bottom margin-top: 10 text-auto-resize: true Skill id: distanceWeaponsImage image-source: /images/game/skills/distanceweapons anchors.top: genjutsuValue.bottom anchors.right: genjutsuValue.right margin-top: 10 margin-right: 40 Label id: distanceWeaponsLabel !text: tr("Distance Weapons") anchors.top: distanceWeaponsImage.bottom anchors.horizontalCenter: distanceWeaponsImage.horizontalCenter margin-top: 5 height: 17 SkillPercentPanel width: 70 anchors.top: parent.bottom anchors.horizontalCenter: parent.horizontalCenter Label id: distanceWeaponsValue !text: tr("0") anchors.horizontalCenter: distanceWeaponsLabel.horizontalCenter anchors.top: distanceWeaponsLabel.bottom margin-top: 10 text-auto-resize: true Skill id: chakraLevelImage image-source: /images/game/skills/chakralevel anchors.top: distanceWeaponsLabel.bottom anchors.horizontalCenter: taijutsuValue.horizontalCenter margin-top: 35 Label id: chakraLevelLabel !text: tr("Chakra Control") anchors.top: chakraLevelImage.bottom anchors.horizontalCenter: chakraLevelImage.horizontalCenter margin-top: 5 height: 15 Label id: chakraLevelValue !text: tr("0") anchors.horizontalCenter: chakraLevelLabel.horizontalCenter anchors.top: chakraLevelLabel.bottom margin-top: 5 text-auto-resize: true SkillUp id: chakraLevelButton anchors.horizontalCenter: chakraLevelValue.horizontalCenter anchors.top: chakraLevelValue.bottom margin-top: 5 @onClick: onButtonClick(self:getId()) Skill id: resistanceImage image-source: /images/game/skills/resistance anchors.top: distanceWeaponsLabel.bottom anchors.horizontalCenter: ninjutsuValue.horizontalCenter margin-top: 15 margin-right: 30 Label id: resistanceLabel !text: tr("Resistance") anchors.top: resistanceImage.bottom anchors.horizontalCenter: resistanceImage.horizontalCenter margin-top: 5 height: 15 Label id: resistanceValue !text: tr("0") anchors.horizontalCenter: resistanceLabel.horizontalCenter anchors.top: resistanceLabel.bottom margin-top: 5 text-auto-resize: true SkillUp id: resistanceButton anchors.horizontalCenter: resistanceValue.horizontalCenter anchors.top: resistanceValue.bottom margin-top: 5 @onClick: onButtonClick(self:getId()) Skill id: agilityImage image-source: /images/game/skills/agility anchors.top: distanceWeaponsLabel.bottom anchors.horizontalCenter: genjutsuValue.horizontalCenter margin-top: 15 margin-left: 30 Label id: agilityLabel !text: tr("Agility") anchors.top: agilityImage.bottom anchors.horizontalCenter: agilityImage.horizontalCenter margin-top: 5 height: 15 Label id: agilityValue !text: tr("0") anchors.horizontalCenter: agilityLabel.horizontalCenter anchors.top: agilityLabel.bottom margin-top: 5 text-auto-resize: true SkillUp id: agilityButton anchors.horizontalCenter: agilityValue.horizontalCenter anchors.top: agilityValue.bottom margin-top: 5 @onClick: onButtonClick(self:getId()) Os script postado assima são usadados no client"OTclient". Ta ai os script queria sabe como faço pra ele interagir com server na verdade o script que tnho que usar no serve pra ele funfa.. :face2
  4. Compilando o OTClient no Mac OS X

    Fala galera! Tem uns bons anos que eu não aparecia por aqui, outro dia eu perguntei como compilar o OTC no OS X, não obtive resposta. Descobri hoje que é possível compilar usando o XQuartz para lidar com a parte gráfica e vou mostrar pra vocês como fazer. A compilação deve ser feita dentro do OS X, no meu caso estou usando o Mountain Lion, 10.8.4 mas acredito que vá funcionar em qualquer OS usando arquitetura intel acima do 10.6 (por conta do Xcode e do QuartZ). Vou assumir que você tenha intimidade com o Terminal e com o Homebrew, qualquer dúvida é só perguntar e assim que puder eu coloco aqui dentro mesmo a explicação. Vamos então a lista de pré-requisitos antes de começarmos, vocês vão ver que é muito simples! Será necessário: Mac OSX 10.6 ou superior; XCode; Command Line Tools for Xcode (dentro do Xcode: Xcode>Preferences>Downloads); XQuartz; Homebrew (instalado via terminal); É importante que você instale todos os itens desta lista, nesta ordem. Feito isso precisamos instalar as bibliotecas necessárias para a compilação, usaremos o homebrew que facilita em muito nossa vida, lembrando que é só aplicar os seguintes comandos no terminal: brew install git brew install cmake brew install lua brew install boost brew install glew brew install physfs brew install libogg brew install libvorbis Confira se todos os pacotes foram instalados! Erros são mostrados em vermelho facilitando sua localização. Buscando o Código fonte no gitHUB e compilando Os seguintes comandos (também inseridos no terminal) irão buscar o código fonte e compilar dentro da própria pasta do código o binário, lembrando que ele irá criar a pasta otclient dentro do /user. git clone git[b]:[/b][i]//github.com/edubart/otclient.git[/i] cd otclient mkdir build cd build cmake .. make [b]-[/b]j4 E acreditem ou não, terminou! Qualquer dúvida se sintam a vontade pra perguntar! Fonte: https://github.com/edubart/otclient/wiki/Compiling-on-Mac-OS-X
  5. OTClient MODS e Modules, o que são e como criar

    O que são? Modules são scripts que fazem alterações no cliente, se você compilou seu otclient com proteção contra bot, essas modificações se restringirão quase completamente a GUI, o que difere os MODs dos Modules é que os Modules são os scripts essenciais do otclient e os MODs são adições criadas por usuários, portanto se você quer modificar algo que já existe, procure na pasta modules, se você quer criar algo novo, crie na pasta MODs. Como eu crio um novo MOD? Primeiro crie uma pasta dentro da pasta mods, por exemplo, meu_mod, o modulo se consiste não apenas de scripts Lua mas também de 2 arquivos: meu_mod.otmod e meu_mod.otui, sendo que o arquivo .otmod é essencial para qualquer modulo enquanto o .otui serve apenas para mods que contenham uma GUI dentro do otclient. Observe este exemplo de arquivo .otmod: Module name: otclient_meumod description: Olha mãe, um mod author: Eventide website: http://otserv.com.br autoload: true autoload-priority: 1000 sandbox: true @onLoad: | dofile 'meu_mod' meu_mod.init() @onUnload: | meu_mod.terminate() Note que há um certo numero de espaços entre certas partes do código, este numero de espaços é essencial e não deve ser mudado, o script é extremamente sensível, recomendo que você copie e cole sempre ao invés de digitar tudo, o mesmo vale para o arquivo .otui, agora vou explicar parte por parte, exceto as que são óbvias: autoload: true autoload-priority: 1000 sandbox: true Padrão, não mude. @onLoad: | dofile 'meu_mod' meu_mod.init() @onUnload: | meu_mod.terminate() Muito bem, se você está olhando este tutorial provavelmente sabe o que o dofile faz, certo? Não? dofile executa um determinado script, portando esse 'meu_mod' deve ser o nome do script principal do seu modulo, que deve ser, mas pode não ser, o nome do seu modulo, claro que o script tem que ter a extensão .lua, mas não é necessário especificar isso no dofile. meu_mod.init() e meu_mod.terminate() são duas funções padrão, que ficarão dentro de uma tabela, a tabela do seu modulo, voltarei nisso depois de explicar sobre o arquivo otui. Agora um exemplo de arquivo .otui: MainWindow !text: tr('Meu MOD') size: 160 450 @onEnter: meu_mod.destroy() @onEscape: meu_mod.destroy() Label id: meuModLabel !text: tr('Oi, eu sou um mod') width: 130 height: 200 anchors.top: prev.top anchors.left: prev.left margin-top: 5 margin-left: 120 Button id: meuModButton !text: tr('Bem-vindo') width: 100 height: 15 anchors.right: parent.right anchors.bottom: parent.bottom margin-right: -6 margin-bottom: -5 @onClick: meu_mod.welcome() Percebe a semelhança com um código CSS? Pois é, essa é uma linguagem baseada no CSS desenvolvida especialmente para o otclient, o nome dessa linguagem é OTML, agora explicando parte por parte. MainWindow é a janela que será usada para a interface, neste caso, MainWindow é o padrão para a janela do cliente. !text é o nome da janela, sempre use a função tr() para colocar a string. size é o tamanho da janela, a sintaxe é: largura, altura. @onEnter é a função que é chamada quando se aperta a tecla enter. @onEscape é a função que é chamada quando se aperta a tecla esc. Label é usado na maioria das vezes para mostrar um texto. id deve ser um nome único e sem espaços que represente este texto. !text é o texto que será mostrado na label, novamente a string deve ser colocada dentro da função tr(). width é a largura da label. margin-right que funciona igual o CSS, quanto maior o valor, mais ele se posicionará contra a direita, quanto menor, a favor. margin-bottom é igual ao margin-right, mas em vez de contra/favor a direita ele funciona para baixo. @onClick deve ser configurado com a função que é chamada quando se clica no butão. O script .lua Agora chegamos a parte final deste tutorial, como fazer o seu script, a parte principal do mod. Primeiro crie o arquivo, que aqui será chamado de meu_mod.lua, observe como ficou o arquivo a partir do que já foi feito até agora: meu_mod = {} modWindow = nil function meu_mod.init() connect(g_game, {onGameStart = meu_mod.run}) end function meu_mod.terminate() disconnect(g_game, {onGameStart = meu_mod.run}) end function meu_mod.run() modWindow = g_ui.displayUI('meu_mod.otui') end function meu_mod.welcome() g_game.talk("Este é o meu modulo!") end function meu_mod.destroy() modWindow:hide() end Como eu acredito que já deixei bem claro o que faz maioria das funções, darei enfase a função init e terminate, a função init serve para alinhar os eventos do cliente com o seu script, e a terminate desfaz, isso é feito a partir das funções connect e disconnect, cuja sintaxe é: connect(g_game, {eventoPadrão= meuEvento}) disconnect(g_game, {eventoPadrão= meuEvento}) Esse tutorial foi feito com o otclient 6.2.1
  6. Vi vários servidores que usam o OTC e na hora de baixar o client vem a pasta inteira, queria saber se não tem como fazer um instalador e na hora de usar o client aparecer só o executável do client, tem jeito?
  7. OTClient Atualizar o OTC

    Estou com a versão 6.2 do OTC, como faço pra atualizar pro 6.3 sem perder todas as modificações que eu ja fiz?
  8. OTClient Diferenças OTClient 6.2 e 6.3

    Quais são as diferenças do OTC 6.3 pro 6.2 além do 6.3 suportar mais versões?
  9. OTClient OTClient - O que é?

    O que é o OTClient? O OTClient é uma alternativa open-source para o cliente do Tibia oficial. Sabemos que OTServ em si não é algo ilegal, mas o uso e modificação do cliente oficial do Tibia é algo fora da lei. Para isso, tal cliente foi desenvolvido. O OTC foi criado de forma modular, ou seja, cada parte e função do sistema é dividida em módulos diferentes, permitindo que tudo seja modificado sem muita dificuldade. Podemos também fugir da interface padrão do Tibia, desenvolvendo um cliente completamente personalizado para seu servidor. O cliente é desenvolvido em C++2011, um padrão de C++ que é influenciado e "scriptado" em LUA. Ele é um cliente muito flexível em quesito de usabilidade e desenvolvimento. Há um esquema de scripting em LUA para toda a interface, complementada por alguns arquivos de configuração com uma sintaxe similar a CSS para o design. Além de ser aberto à modificações facilmente, ele já vem por padrão com funcionalidades que não possuíamos antes como sistema de som, motores de particulas, sistemas de addons (para o client), texturas animadas, interface personalizável, multi-linguagem, transparência, um terminal lua no cliente e muitas outras coisas.
  10. OTClient Centralizar uma window.

    Preciso centralizar uma janela na horizontal, tenho uma enorme dificuldade com esse modo de layout do cliente, alguém tem alguma ideia? obrigado.
  11. Ola estou com um serio probleminha chato no meu OTCliente. Estalei um mod de spellbar, mais não reconhece somente as spells da vocação do jogador, mais sim todas spells de todas vocações. Imagem abaixo: [ATTACH]5474[/ATTACH] A mod que peguei foi esta aqui, [Draky's Codes] - Tibia Spell Bar SpellBar.LUA [spoiler=Clica Aqui] local spelllist = { ['Death Strike'] = {id = 87, words = 'exori mort', exhaustion = 2000, premium = true, type = 'Instant', icon = 'deathstrike', mana = 20, level = 16, soul = 0, group = {[1] = 2000}, vocations = {1, 5}}, ['Flame Strike'] = {id = 89, words = 'exori flam', exhaustion = 2000, premium = true, type = 'Instant', icon = 'flamestrike', mana = 20, level = 14, soul = 0, group = {[1] = 2000}, vocations = {1, 2, 5, 6}}, ['Strong Flame Strike'] = {id = 150, words = 'exori gran flam', exhaustion = 8000, premium = true, type = 'Instant', icon = 'strongflamestrike', mana = 60, level = 70, soul = 0, group = {[1] = 2000, [4] = 8000}, vocations = {1, 5}}, ['Ultimate Flame Strike'] = {id = 154, words = 'exori max flam', exhaustion = 30000, premium = true, type = 'Instant', icon = 'ultimateflamestrike', mana = 100, level = 90, soul = 0, group = {[1] = 4000}, vocations = {1, 5}}, ['Energy Strike'] = {id = 88, words = 'exori vis', exhaustion = 2000, premium = true, type = 'Instant', icon = 'energystrike', mana = 20, level = 12, soul = 0, group = {[1] = 2000}, vocations = {1, 2, 5, 6}}, ['Strong Energy Strike'] = {id = 151, words = 'exori gran vis', exhaustion = 8000, premium = true, type = 'Instant', icon = 'strongenergystrike', mana = 60, level = 80, soul = 0, group = {[1] = 2000, [4] = 8000}, vocations = {1, 5}}, ['Ultimate Energy Strike'] = {id = 155, words = 'exori max vis', exhaustion = 30000, premium = true, type = 'Instant', icon = 'ultimateenergystrike', mana = 100, level = 100,soul = 0, group = {[1] = 4000}, vocations = {1, 5}}, ['Whirlwind Throw'] = {id = 107, words = 'exori hur', exhaustion = 6000, premium = true, type = 'Instant', icon = 'whirlwindthrow', mana = 40, level = 28, soul = 0, group = {[1] = 2000}, vocations = {4, 8}}, ['Fire Wave'] = {id = 19, words = 'exevo flam hur', exhaustion = 4000, premium = false, type = 'Instant', icon = 'firewave', mana = 25, level = 18, soul = 0, group = {[1] = 2000}, vocations = {1, 5}}, ['Ethereal Spear'] = {id = 111, words = 'exori con', exhaustion = 2000, premium = true, type = 'Instant', icon = 'etherealspear', mana = 25, level = 23, soul = 0, group = {[1] = 2000}, vocations = {3, 7}}, ['Strong Ethereal Spear'] = {id = 57, words = 'exori gran con', exhaustion = 8000, premium = true, type = 'Instant', icon = 'strongetherealspear', mana = 55, level = 90, soul = 0, group = {[1] = 2000}, vocations = {3, 7}}, ['Energy Beam'] = {id = 22, words = 'exevo vis lux', exhaustion = 4000, premium = false, type = 'Instant', icon = 'energybeam', mana = 40, level = 23, soul = 0, group = {[1] = 2000}, vocations = {1, 5}}, ['Great Energy Beam'] = {id = 23, words = 'exevo gran vis lux', exhaustion = 6000, premium = false, type = 'Instant', icon = 'greatenergybeam', mana = 110, level = 29, soul = 0, group = {[1] = 2000}, vocations = {1, 5}}, ['Groundshaker'] = {id = 106, words = 'exori mas', exhaustion = 8000, premium = true, type = 'Instant', icon = 'groundshaker', mana = 160, level = 33, soul = 0, group = {[1] = 2000}, vocations = {4, 8}}, ['Berserk'] = {id = 80, words = 'exori', exhaustion = 4000, premium = true, type = 'Instant', icon = 'berserk', mana = 115, level = 35, soul = 0, group = {[1] = 2000}, vocations = {4, 8}}, ['Annihilation'] = {id = 62, words = 'exori gran ico', exhaustion = 30000, premium = true, type = 'Instant', icon = 'annihilation', mana = 300, level = 110,soul = 0, group = {[1] = 4000}, vocations = {4, 8}}, ['Brutal Strike'] = {id = 61, words = 'exori ico', exhaustion = 6000, premium = true, type = 'Instant', icon = 'brutalstrike', mana = 30, level = 16, soul = 0, group = {[1] = 2000}, vocations = {4, 8}}, ['Front Sweep'] = {id = 59, words = 'exori min', exhaustion = 6000, premium = true, type = 'Instant', icon = 'frontsweep', mana = 200, level = 70, soul = 0, group = {[1] = 2000}, vocations = {4, 8}}, ['Inflict Wound'] = {id = 141, words = 'utori kor', exhaustion = 30000, premium = true, type = 'Instant', icon = 'inflictwound', mana = 30, level = 40, soul = 0, group = {[1] = 2000}, vocations = {4, 8}}, ['Ignite'] = {id = 138, words = 'utori flam', exhaustion = 30000, premium = true, type = 'Instant', icon = 'ignite', mana = 30, level = 26, soul = 0, group = {[1] = 2000}, vocations = {1, 5}}, ['Lightning'] = {id = 149, words = 'exori amp vis', exhaustion = 8000, premium = true, type = 'Instant', icon = 'lightning', mana = 60, level = 55, soul = 0, group = {[1] = 2000, [4] = 8000}, vocations = {1, 5}}, ['Curse'] = {id = 139, words = 'utori mort', exhaustion = 50000, premium = true, type = 'Instant', icon = 'curse', mana = 30, level = 75, soul = 0, group = {[1] = 2000}, vocations = {1, 5}}, ['Electrify'] = {id = 140, words = 'utori vis', exhaustion = 30000, premium = true, type = 'Instant', icon = 'electrify', mana = 30, level = 34, soul = 0, group = {[1] = 2000}, vocations = {1, 5}}, ['Energy Wave'] = {id = 13, words = 'exevo vis hur', exhaustion = 8000, premium = false, type = 'Instant', icon = 'energywave', mana = 170, level = 38, soul = 0, group = {[1] = 2000}, vocations = {1, 5}}, ['Rage of the Skies'] = {id = 119, words = 'exevo gran mas vis', exhaustion = 40000, premium = true, type = 'Instant', icon = 'rageoftheskies', mana = 600, level = 55, soul = 0, group = {[1] = 4000}, vocations = {1, 5}}, ['Fierce Berserk'] = {id = 105, words = 'exori gran', exhaustion = 6000, premium = true, type = 'Instant', icon = 'fierceberserk', mana = 340, level = 90, soul = 0, group = {[1] = 2000}, vocations = {4, 8}}, ['Hells Core'] = {id = 24, words = 'exevo gran mas flam', exhaustion = 40000, premium = true, type = 'Instant', icon = 'hellscore', mana = 1100, level = 60, soul = 0, group = {[1] = 4000}, vocations = {1, 5}}, ['Holy Flash'] = {id = 143, words = 'utori san', exhaustion = 40000, premium = true, type = 'Instant', icon = 'holyflash', mana = 30, level = 70, soul = 0, group = {[1] = 2000}, vocations = {3, 7}}, ['Divine Missile'] = {id = 122, words = 'exori san', exhaustion = 2000, premium = true, type = 'Instant', icon = 'divinemissile', mana = 20, level = 40, soul = 0, group = {[1] = 2000}, vocations = {3, 7}}, ['Divine Caldera'] = {id = 124, words = 'exevo mas san', exhaustion = 4000, premium = true, type = 'Instant', icon = 'divinecaldera', mana = 160, level = 50, soul = 0, group = {[1] = 2000}, vocations = {3, 7}}, ['Physical Strike'] = {id = 148, words = 'exori moe ico', exhaustion = 2000, premium = true, type = 'Instant', icon = 'physicalstrike', mana = 20, level = 16, soul = 0, group = {[1] = 2000}, vocations = {2, 6}}, ['Eternal Winter'] = {id = 118, words = 'exevo gran mas frigo', exhaustion = 40000, premium = true, type = 'Instant', icon = 'eternalwinter', mana = 1050, level = 60, soul = 0, group = {[1] = 4000}, vocations = {2, 6}}, ['Ice Strike'] = {id = 112, words = 'exori frigo', exhaustion = 2000, premium = true, type = 'Instant', icon = 'icestrike', mana = 20, level = 15, soul = 0, group = {[1] = 2000}, vocations = {1, 5, 2, 6}}, ['Strong Ice Strike'] = {id = 152, words = 'exori gran frigo', exhaustion = 8000, premium = true, type = 'Instant', icon = 'strongicestrike', mana = 60, level = 80, soul = 0, group = {[1] = 2000, [4] = 8000}, vocations = {2, 6}}, ['Ultimate Ice Strike'] = {id = 156, words = 'exori max frigo', exhaustion = 30000, premium = true, type = 'Instant', icon = 'ultimateicestrike', mana = 100, level = 100,soul = 0, group = {[1] = 4000}, vocations = {2, 6}}, ['Ice Wave'] = {id = 121, words = 'exevo frigo hur', exhaustion = 4000, premium = false, type = 'Instant', icon = 'icewave', mana = 25, level = 18, soul = 0, group = {[1] = 2000}, vocations = {2, 6}}, ['Strong Ice Wave'] = {id = 43, words = 'exevo gran frigo hur', exhaustion = 8000, premium = true, type = 'Instant', icon = 'strongicewave', mana = 170, level = 40, soul = 0, group = {[1] = 2000}, vocations = {2, 6}}, ['Envenom'] = {id = 142, words = 'utori pox', exhaustion = 40000, premium = true, type = 'Instant', icon = 'envenom', mana = 30, level = 50, soul = 0, group = {[1] = 2000}, vocations = {2, 6}}, ['Terra Strike'] = {id = 113, words = 'exori tera', exhaustion = 2000, premium = true, type = 'Instant', icon = 'terrastrike', mana = 20, level = 13, soul = 0, group = {[1] = 2000}, vocations = {1, 5, 2, 6}}, ['Strong Terra Strike'] = {id = 153, words = 'exori gran tera', exhaustion = 8000, premium = true, type = 'Instant', icon = 'strongterrastrike', mana = 60, level = 70, soul = 0, group = {[1] = 2000, [4] = 8000}, vocations = {2, 6}}, ['Ultimate Terra Strike'] = {id = 157, words = 'exori max tera', exhaustion = 30000, premium = true, type = 'Instant', icon = 'ultimateterrastrike', mana = 100, level = 90, soul = 0, group = {[1] = 4000}, vocations = {2, 6}}, ['Terra Wave'] = {id = 120, words = 'exevo tera hur', exhaustion = 4000, premium = false, type = 'Instant', icon = 'terrawave', mana = 210, level = 38, soul = 0, group = {[1] = 2000}, vocations = {2, 6}}, ['Wrath of Nature'] = {id = 56, words = 'exevo gran mas tera', exhaustion = 40000, premium = true, type = 'Instant', icon = 'wrathofnature', mana = 700, level = 55, soul = 0, group = {[1] = 4000}, vocations = {2, 6}}, ['Light Healing'] = {id = 1, words = 'exura', exhaustion = 1000, premium = false, type = 'Instant', icon = 'lighthealing', mana = 20, level = 9, soul = 0, group = {[2] = 1000}, vocations = {1, 2, 3, 5, 6, 7}}, ['Wound Cleansing'] = {id = 123, words = 'exura ico', exhaustion = 1000, premium = false, type = 'Instant', icon = 'woundcleansing', mana = 40, level = 10, soul = 0, group = {[2] = 1000}, vocations = {4, 8}}, ['Intense Wound Cleansing'] = {id = 158, words = 'exura gran ico', exhaustion = 600000,premium = true, type = 'Instant', icon = 'intensewoundcleansing', mana = 200, level = 80, soul = 0, group = {[2] = 1000}, vocations = {4, 8}}, ['Cure Bleeding'] = {id = 144, words = 'exana kor', exhaustion = 6000, premium = true, type = 'Instant', icon = 'curebleeding', mana = 30, level = 30, soul = 0, group = {[2] = 1000}, vocations = {4, 8}}, ['Cure Electrification'] = {id = 146, words = 'exana vis', exhaustion = 6000, premium = true, type = 'Instant', icon = 'curseelectrification', mana = 30, level = 22, soul = 0, group = {[2] = 1000}, vocations = {2, 6}}, ['Cure Poison'] = {id = 29, words = 'exana pox', exhaustion = 6000, premium = false, type = 'Instant', icon = 'curepoison', mana = 30, level = 10, soul = 0, group = {[2] = 1000}, vocations = {1, 2, 3, 4, 5, 6, 7, 8}}, ['Cure Burning'] = {id = 145, words = 'exana flam', exhaustion = 6000, premium = true, type = 'Instant', icon = 'cureburning', mana = 30, level = 30, soul = 0, group = {[2] = 1000}, vocations = {2, 6}}, ['Cure Curse'] = {id = 147, words = 'exana mort', exhaustion = 6000, premium = true, type = 'Instant', icon = 'curecurse', mana = 40, level = 80, soul = 0, group = {[2] = 1000}, vocations = {3, 7}}, ['Recovery'] = {id = 159, words = 'utura', exhaustion = 60000, premium = true, type = 'Instant', icon = 'recovery', mana = 75, level = 50, soul = 0, group = {[2] = 1000}, vocations = {4, 8, 3, 7}}, ['Intense Recovery'] = {id = 160, words = 'utura gran', exhaustion = 60000, premium = true, type = 'Instant', icon = 'intenserecovery', mana = 165, level = 100,soul = 0, group = {[2] = 1000}, vocations = {4, 8, 3, 7}}, ['Salvation'] = {id = 36, words = 'exura gran san', exhaustion = 1000, premium = true, type = 'Instant', icon = 'salvation', mana = 210, level = 60, soul = 0, group = {[2] = 1000}, vocations = {3, 7}}, ['Intense Healing'] = {id = 2, words = 'exura gran', exhaustion = 1000, premium = false, type = 'Instant', icon = 'intensehealing', mana = 70, level = 20, soul = 0, group = {[2] = 1000}, vocations = {1, 2, 3, 5, 6, 7}}, ['Heal Friend'] = {id = 84, words = 'exura sio', exhaustion = 1000, premium = true, type = 'Instant', icon = 'healfriend', mana = 140, level = 18, soul = 0, group = {[2] = 1000}, vocations = {2, 6}}, ['Ultimate Healing'] = {id = 3, words = 'exura vita', exhaustion = 1000, premium = false, type = 'Instant', icon = 'ultimatehealing', mana = 160, level = 30, soul = 0, group = {[2] = 1000}, vocations = {1, 2, 5, 6}}, ['Mass Healing'] = {id = 82, words = 'exura gran mas res', exhaustion = 2000, premium = true, type = 'Instant', icon = 'masshealing', mana = 150, level = 36, soul = 0, group = {[2] = 1000}, vocations = {2, 6}}, ['Divine Healing'] = {id = 125, words = 'exura san', exhaustion = 1000, premium = false, type = 'Instant', icon = 'divinehealing', mana = 160, level = 35, soul = 0, group = {[2] = 1000}, vocations = {3, 7}}, ['Light'] = {id = 10, words = 'utevo lux', exhaustion = 2000, premium = false, type = 'Instant', icon = 'light', mana = 20, level = 8, soul = 0, group = {[3] = 2000}, vocations = {1, 2, 3, 4, 5, 6, 7, 8}}, ['Magic Rope'] = {id = 76, words = 'exani tera', exhaustion = 2000, premium = true, type = 'Instant', icon = 'magicrope', mana = 20, level = 9, soul = 0, group = {[3] = 2000}, vocations = {1, 2, 3, 4, 5, 6, 7, 8}}, ['Levitate'] = {id = 81, words = 'exani hur', exhaustion = 2000, premium = true, type = 'Instant', icon = 'levitate', mana = 50, level = 12, soul = 0, group = {[3] = 2000}, vocations = {1, 2, 3, 4, 5, 6, 7, 8}}, ['Great Light'] = {id = 11, words = 'utevo gran lux', exhaustion = 2000, premium = false, type = 'Instant', icon = 'greatlight', mana = 60, level = 13, soul = 0, group = {[3] = 2000}, vocations = {1, 2, 3, 4, 5, 6, 7, 8}}, ['Magic Shield'] = {id = 44, words = 'utamo vita', exhaustion = 2000, premium = false, type = 'Instant', icon = 'magicshield', mana = 50, level = 14, soul = 0, group = {[3] = 2000}, vocations = {1, 2, 5, 6}}, ['Haste'] = {id = 6, words = 'utani hur', exhaustion = 2000, premium = true, type = 'Instant', icon = 'haste', mana = 60, level = 14, soul = 0, group = {[3] = 2000}, vocations = {1, 2, 3, 4, 5, 6, 7, 8}}, ['Charge'] = {id = 131, words = 'utani tempo hur', exhaustion = 2000, premium = true, type = 'Instant', icon = 'charge', mana = 100, level = 25, soul = 0, group = {[3] = 2000}, vocations = {4, 8}}, ['Swift Foot'] = {id = 134, words = 'utamo tempo san', exhaustion = 2000, premium = true, type = 'Instant', icon = 'swiftfoot', mana = 400, level = 55, soul = 0, group = {[1] = 10000, [3] = 2000}, vocations = {3, 7}}, ['Challenge'] = {id = 93, words = 'exeta res', exhaustion = 2000, premium = true, type = 'Instant', icon = 'challenge', mana = 30, level = 20, soul = 0, group = {[3] = 2000}, vocations = {8}}, ['Strong Haste'] = {id = 39, words = 'utani gran hur', exhaustion = 2000, premium = true, type = 'Instant', icon = 'stronghaste', mana = 100, level = 20, soul = 0, group = {[3] = 2000}, vocations = {1, 2, 5, 6}}, ['Ultimate Light'] = {id = 75, words = 'utevo vis lux', exhaustion = 2000, premium = true, type = 'Instant', icon = 'ultimatelight', mana = 140, level = 26, soul = 0, group = {[3] = 2000}, vocations = {1, 2, 5, 6}}, ['Cancel Invisibility'] = {id = 90, words = 'exana ina', exhaustion = 2000, premium = true, type = 'Instant', icon = 'cancelinvisibility', mana = 200, level = 26, soul = 0, group = {[3] = 2000}, vocations = {3, 7}}, ['Invisibility'] = {id = 45, words = 'utana vid', exhaustion = 2000, premium = false, type = 'Instant', icon = 'invisible', mana = 440, level = 35, soul = 0, group = {[3] = 2000}, vocations = {1, 2, 5, 6}}, ['Sharpshooter'] = {id = 135, words = 'utito tempo san', exhaustion = 2000, premium = true, type = 'Instant', icon = 'sharpshooter', mana = 450, level = 60, soul = 0, group = {[2] = 10000, [3] = 10000}, vocations = {3, 7}}, ['Protector'] = {id = 132, words = 'utamo tempo', exhaustion = 2000, premium = true, type = 'Instant', icon = 'protector', mana = 200, level = 55, soul = 0, group = {[1] = 10000, [3] = 2000}, vocations = {4, 8}}, ['Blood Rage'] = {id = 133, words = 'utito tempo', exhaustion = 2000, premium = true, type = 'Instant', icon = 'bloodrage', mana = 290, level = 60, soul = 0, group = {[3] = 2000}, vocations = {4, 8}}, ['Train Party'] = {id = 126, words = 'utito mas sio', exhaustion = 2000, premium = true, type = 'Instant', icon = 'trainparty', mana = 'Var.', level = 32, soul = 0, group = {[3] = 2000}, vocations = {8}}, ['Protect Party'] = {id = 127, words = 'utamo mas sio', exhaustion = 2000, premium = true, type = 'Instant', icon = 'protectparty', mana = 'Var.', level = 32, soul = 0, group = {[3] = 2000}, vocations = {7}}, ['Heal Party'] = {id = 128, words = 'utura mas sio', exhaustion = 2000, premium = true, type = 'Instant', icon = 'healparty', mana = 'Var.', level = 32, soul = 0, group = {[3] = 2000}, vocations = {6}}, ['Enchant Party'] = {id = 129, words = 'utori mas sio', exhaustion = 2000, premium = true, type = 'Instant', icon = 'enchantparty', mana = 'Var.', level = 32, soul = 0, group = {[3] = 2000}, vocations = {5}}, } local spells = {} local lado = 'vertical' local sbw -- window widget local sbb -- button ./\ widget local spellBarWindow -- UIWindow local exhsaustionTotal = 1100 local hideLevel = false -- os que nao tem level, vai mostrar? true = nao, false = sim function init() sbb = modules.client_topmenu.addRightGameToggleButton('sbb', 'Spell Bar' , 'SpellBar.png', toggle) sbw = g_ui.displayUI('SpellBar') sbw:move(10,50) g_mouse.bindPress(sbw, function() createMenu() end, MouseRightButton) sbw:hide() connect(g_game, 'onTalk', mensagemEnviada) connect(g_game, { onGameEnd = function() sbw:hide() sbb:setOn(false) end }) connect(LocalPlayer, { onLevelChange = onLevelChange }) for inst,values in pairs(spelllist) do if values.type == 'Instant' then -- depois vou fazer mais tipos.. if g_game.getProtocolVersion() >= 950 then -- Vocation is only send in newer clients if table.find(values.vocations, g_game.getLocalPlayer():getVocation()) then local inside = {instantName = inst, words = values.words, lvl = values.level, mana = values.mana, prem = values.premium, groups = values.group,icon = values.icon, vocations = values.vocations,exhaustion = values.exhaustion} table.insert(spells,inside) end else local inside = {instantName = inst, words = values.words, lvl = values.level, mana = values.mana, prem = values.premium, groups = values.group,icon = values.icon, vocations = values.vocations,exhaustion = values.exhaustion} table.insert(spells,inside) end end end table.sort(spells, function(a, return (a.lvl < b.lvl) end) end function onLevelChange(localPlayer, value, percent) getSpells(spells) end function mensagemEnviada(name, level, mode, text, channelId, pos) if not g_game.isOnline() then return end if g_game.getLocalPlayer():getName() ~= name then return end for i = 1,#spells do if spells[i].words:lower() == text:lower() then startDownDelay(i) break end end end function terminate() sbw:destroy() sbb:destroy() disconnect(g_game, { onGameEnd = function() sbw:hide() sbb:setOn(false) end }) disconnect(g_game, 'onTalk', mensagemEnviada) disconnect(LocalPlayer, { onLevelChange = onLevelChange }) end function toggle() if sbb:isOn() then sbw:hide() sbb:setOn(false) else sbw:show() getSpells(spells) sbb:setOn(true) level = g_game.getLocalPlayer():getLevel() end end function createMenu() local menu = g_ui.createWidget('PopupMenu') if lado == 'horizontal' then menu:addOption('Set Vertical', function() lado = 'vertical' getSpells(spells) end) else menu:addOption('Set Horizontal',function() lado = 'horizontal' getSpells(spells) end) end if hideLevel == false then menu:addOption('No Level Hide',function() hideLevel = true getSpells(spells) end) else menu:addOption('No Level Show',function() hideLevel = false getSpells(spells) end) end menu:display() end function destruirSpells() for i = 1,100 do if sbw:recursiveGetChildById('spell'..i) == nil then break end sbw:recursiveGetChildById('spell'..i):destroy() sbw:recursiveGetChildById('progress'..i):destroy() end end function getSpells(tabela) destruirSpells() spellBarWindow = sbw:recursiveGetChildById('mainWindow') local player = g_game.getLocalPlayer() local valor = #tabela local width = 38 local height = 38 if not player then return end for i = 1,#tabela do if (tabela[i].lvl > player:getLevel()) and hideLevel == true then valor = i - 1 break end if i == #tabela then valor = i end icon = g_ui.createWidget('SpellButton',spellBarWindow) progress = g_ui.createWidget('SpellProgressSpell',spellBarWindow) --icon: icon:setId('spell'..i) local spicon = Spells.getClientId(tabela[i].instantName) icon:setImageSource('/images/game/spells/defaultspells') icon:setImageClip((((spicon -1)%12)*32) .. ' ' .. ((math.ceil(spicon/12)-1)*32) .. ' 32 32') icon:setVisible(true) icon.words = tabela[i].words icon.instantName = tabela[i].instantName icon.lvl = tabela[i].lvl icon.mana = tabela[i].mana icon.exhaustion = tabela[i].exhaustion icon.exhaustionNeeded = 0 icon:setTooltip(tabela[i].words) if lado == 'horizontal' then icon:setMarginTop(3) height = 38 width = (i) * 32 + 2*(i) icon:setMarginLeft((i) * 32 + 2*(i) - 32) else icon:setMarginLeft(3) icon:setMarginTop((i) * 32 + 2*(i) - 32) width = 38 height = (i) * 32 + 2*(i) end --progress: progress:setId('progress'..i) progress:setVisible(true) progress:setPercent(100) progress:setMarginLeft(icon:getMarginLeft()) progress:setMarginTop(icon:getMarginTop()) if player:getLevel() < icon.lvl then progress:setText('L'..icon.lvl) progress:setColor('red') progress:setPercent(0) end if progress:getPercent() == 100 then progress:setText('OK') elseif icon.lvl < player:getLevel() then progress:setText(progress:getPercent()) end progress:setPhantom(true) icon.onClick = function() useSpell(i) end end sbw:setHeight(height) sbw:setWidth(width) spellBarWindow:setSize(sbw:getSize()) end function useSpell(i) local spell = sbw:recursiveGetChildById('spell'..i) if not spell then return end local progress = sbw:recursiveGetChildById('progress'..i) local player = g_game.getLocalPlayer() if not player then return end if progress:getPercent() < 100 then return modules.game_textmessage.displayFailureMessage('Wait your delay!') end g_game.talk(spell.words) end function startDownDelay(i) -- aqui vai ficar on onTalk, pra descer só realmente quando a spell sair local spell = sbw:recursiveGetChildById('spell'..i) if not spell then return end local progress = sbw:recursiveGetChildById('progress'..i) progress:setPercent(0) progress:setText('0%') progress:setColor('red') spell.exhaustionNeeded = 0 scheduleEvent(function() spellTimeleft(i) end,100) end function spellTimeleft(i) local spell = sbw:recursiveGetChildById('spell'..i) if not spell then return end local progress = sbw:recursiveGetChildById('progress'..i) spell.exhaustionNeeded = spell.exhaustionNeeded + 100 if spell.exhaustionNeeded < spell.exhaustion then progress:setPercent(math.ceil(((spell.exhaustionNeeded) * 100)/spell.exhaustion)) progress:setText(progress:getPercent()) progress:setColor('red') else progress:setPercent(100) progress:setText('OK') progress:setColor('green') spell.exhaustionNeeded = 0 return true end scheduleEvent(function() spellTimeleft(i) end,100) end SpellBar.OTUI [spoiler=Clica Aqui] SpellButton < UIButton width: 32 height: 32 focusable: false image-color: white image-size: 32 32 anchors.left: parent.left anchors.top: parent.top $!hover: image-border: 3 $hover: image-border: 2 image-color: #ffffff99 $pressed: image-color: #999999 $disabled: image-color: #ffffff66 SpellProgressSpell < UIProgressRect background: #585858AA percent: 100 focusable: false font: verdana-11px-rounded color: green anchors.left: parent.left anchors.top: parent.top size: 32 32 UIWindow focusable: false Panel id: mainWindow size: 70 70 focusable: false opacity: 0.95 image-source: /images/ui/window anchors.fill: parent Gostaria de saber como faço para reconhecer apenas as spells de acordo com a vocação do jogador, podem me ajudar?
  12. OTClient Regras de Codificação do OTC

    Regras de Codificação do OTC Antes de implementar qualquer coisa, impregne em sua mente as oito seguintes regras. Todas elas tem algum motivo por trás e farão com que você seja muito mais bem-visto na comunidade de modding de OTC. 1. Evite pointers a todo custo! Use apenas quando for estritamente necessário, no caso de strings de C (char*). Evite até para buffers de inteiros. 2. Se você precisa de um buffer, use std::vector. 3. Nunca use ponteiros para objetos. Se você acha que é necessário, provavelmente é possível utilizar std::shared_ptr ou passar o objeto por referência. 4. Nunca use a palavra-chave delete. Quando digo nunca, é realmente NUNCA. Se você acha que precisa usar, é porque não leu as regras acima. 5. Passe objetos pequenos como Position, Rect e std::string por referência. 6. Inclua apenas a declaração de outros objetos nos arquivos de header, nunca definições. Você consegue achar o padrão declarations.h no código-fonte. 7. Se você acha que alguma coisa pode dar errada em seu código, use asserts ou lance uma exceção para verificação. 8. C++0x possui uma grande variedade de utilidades novas. Você pode e é encorajado a usá-las! Identação 1. Quatro espaços são usados para identação 2. Espaços, não tabs! Declarando variáveis 1. Variáveis / funções começam com letra minúscula e cada palavra consecutiva começa com letra maiúscula. 2. Evite nomes curtos e abreviações sempre que possível. Use nomes legíveis. int a; // Errado int whorisize; // Errado int hsize; // Errado int windowHSize; // Errado int windowHorizontalSize; // Certo 3. Variáveis com um só caracter como nome são aceitáveis apenas para contadores, quando o propósito da variável é óbvio. 4. Classes sempre começam com letra maiúscula. 5. Atributos, ou variáveis de classe, sempre começam com "m_" seguido de letra minúscula. class ClasseTeste { int mVariavel; // Errado int m_Variable; // Errado int m_variable; // Certo }; 6. Atributos de uma struct não seguem esta regra. Evite utilizar structs, apenas quando estritamente necessário. 7. Variáveis globais começam com "g_". 8. Use os tipos de int já implementados. uint32_t var; // Errado uint32 var; // Certo unsigned long var; // Errado ulong var; // Certo Uso de Singletons // no topo do game.cpp Game g_game; // no fim do game.h class Game { ... }; extern Game g_game; Loops e iterações 1. Use a palavra-chave auto em qualquer iteração. std::map<int, std::string>::iterator it = myMap.begin(); // Errado auto it = myMap.begin(); // Certo for(std::map<int, std::string>::iterator it = myMap.Begin(); it != myMap.end(); it++) // Errado for (auto it = myMap.begin(); it != myMap.end(); ++it) // Certo for (auto pair : myMap) // Certo 2. Use o for each do C++0x quando possível. for(auto it = files.begin(); it != files.end(); ++it) { } // Errado for (const std::string& file : files) { } // Certo Arquivos fonte 1. Se você precisa de algum header STL use global.h, evite o excesso de includes. 2. Todos os arquivos fonte devem ter o aviso de copyright e licensa no topo. 3. Inclua apenas headers necessários 4. Sempre que possível, declare a classe inteira ao invés do header. // Errado #include "foo.h" class Dummy { Foo *m_foo; }; // Certo class Foo; class Dummy { Foo *m_foo; }; Classes 1. Quando utilizar a palavra-chave new. coloque parênteses apenas quando necessário. new ClasseTeste(); // Errado new ClasseTeste; // Certo 2. Evite construtores vazios nos arquivos fonte. 3. Declare construtores apenas quando necessário 4. Métodos get devem sempre conter a palavra-chave const Documentação 1. Comente tudo o que você achar relevante 2. Documente funções nos headers utilizando /// para habilitar a saída usando doxygen. Algoritmos 1. Use classes de alto nível como Rect, Point e std::string sempre que possível. 2. Faça algorítmos legíveis e organizados 3. Sempre comente! Ponteiros e memória 1. Evite utilizar, como já dito antes, a palavra-chave delete. Também evite gerenciar memória por conta própria. Use sempre ponteiros inteligentes. 2. Prefira passar variáveis de objeto complexas por referência e usando a palavra-chave const Créditos pelo texto: edubart Créditos pela tradução: Linker
  13. OTClient Lista de Funções OTC

    Então galera, eu não vi algo parecido aqui na parte de OTC, então vim mostrar pra vocês, a lista de funções fica na pasta onde está o OTC - src/framework/luafunctions.cpp Vou disponibilizar os da minha lista de funções, que acho que é a padrão pois não editei: [spoiler] // conversion globals g_lua.bindGlobalFunction("torect", [](const std::string& v) { return stdext::from_string<Rect>(v); }); g_lua.bindGlobalFunction("topoint", [](const std::string& v) { return stdext::from_string<Point>(v); }); g_lua.bindGlobalFunction("tocolor", [](const std::string& v) { return stdext::from_string<Color>(v); }); g_lua.bindGlobalFunction("tosize", [](const std::string& v) { return stdext::from_string<Size>(v); }); g_lua.bindGlobalFunction("recttostring", [](const Rect& v) { return stdext::to_string(v); }); g_lua.bindGlobalFunction("pointtostring", [](const Point& v) { return stdext::to_string(v); }); g_lua.bindGlobalFunction("colortostring", [](const Color& v) { return stdext::to_string(v); }); g_lua.bindGlobalFunction("sizetostring", [](const Size& v) { return stdext::to_string(v); }); g_lua.bindGlobalFunction("iptostring", [](int v) { return stdext::ip_to_string(v); }); g_lua.bindGlobalFunction("stringtoip", [](const std::string& v) { return stdext::string_to_ip(v); }); g_lua.bindGlobalFunction("listSubnetAddresses", [](uint32 a, uint8 { return stdext::listSubnetAddresses(a, ; }); g_lua.bindGlobalFunction("ucwords", [](std::string s) { return stdext::ucwords(s); }); // Platform g_lua.registerSingletonClass("g_platform"); g_lua.bindSingletonFunction("g_platform", "spawnProcess", &Platform::spawnProcess, &g_platform); g_lua.bindSingletonFunction("g_platform", "getProcessId", &Platform::getProcessId, &g_platform); g_lua.bindSingletonFunction("g_platform", "isProcessRunning", &Platform::isProcessRunning, &g_platform); g_lua.bindSingletonFunction("g_platform", "copyFile", &Platform::copyFile, &g_platform); g_lua.bindSingletonFunction("g_platform", "fileExists", &Platform::fileExists, &g_platform); g_lua.bindSingletonFunction("g_platform", "removeFile", &Platform::removeFile, &g_platform); g_lua.bindSingletonFunction("g_platform", "killProcess", &Platform::killProcess, &g_platform); g_lua.bindSingletonFunction("g_platform", "getTempPath", &Platform::getTempPath, &g_platform); g_lua.bindSingletonFunction("g_platform", "openUrl", &Platform::openUrl, &g_platform); g_lua.bindSingletonFunction("g_platform", "getCPUName", &Platform::getCPUName, &g_platform); g_lua.bindSingletonFunction("g_platform", "getTotalSystemMemory", &Platform::getTotalSystemMemory, &g_platform); g_lua.bindSingletonFunction("g_platform", "getOSName", &Platform::getOSName, &g_platform); g_lua.bindSingletonFunction("g_platform", "getFileModificationTime", &Platform::getFileModificationTime, &g_platform); // Application g_lua.registerSingletonClass("g_app"); g_lua.bindSingletonFunction("g_app", "setName", &Application::setName, static_cast<Application*>(&g_app)); g_lua.bindSingletonFunction("g_app", "setCompactName", &Application::setCompactName, static_cast<Application*>(&g_app)); g_lua.bindSingletonFunction("g_app", "setVersion", &Application::setVersion, static_cast<Application*>(&g_app)); g_lua.bindSingletonFunction("g_app", "isRunning", &Application::isRunning, static_cast<Application*>(&g_app)); g_lua.bindSingletonFunction("g_app", "isStopping", &Application::isStopping, static_cast<Application*>(&g_app)); g_lua.bindSingletonFunction("g_app", "getName", &Application::getName, static_cast<Application*>(&g_app)); g_lua.bindSingletonFunction("g_app", "getCompactName", &Application::getCompactName, static_cast<Application*>(&g_app)); g_lua.bindSingletonFunction("g_app", "getVersion", &Application::getVersion, static_cast<Application*>(&g_app)); g_lua.bindSingletonFunction("g_app", "getBuildCompiler", &Application::getBuildCompiler, static_cast<Application*>(&g_app)); g_lua.bindSingletonFunction("g_app", "getBuildDate", &Application::getBuildDate, static_cast<Application*>(&g_app)); g_lua.bindSingletonFunction("g_app", "getBuildRevision", &Application::getBuildRevision, static_cast<Application*>(&g_app)); g_lua.bindSingletonFunction("g_app", "getBuildCommit", &Application::getBuildCommit, static_cast<Application*>(&g_app)); g_lua.bindSingletonFunction("g_app", "getBuildType", &Application::getBuildType, static_cast<Application*>(&g_app)); g_lua.bindSingletonFunction("g_app", "getBuildArch", &Application::getBuildArch, static_cast<Application*>(&g_app)); g_lua.bindSingletonFunction("g_app", "getOs", &Application::getOs, static_cast<Application*>(&g_app)); g_lua.bindSingletonFunction("g_app", "getStartupOptions", &Application::getStartupOptions, static_cast<Application*>(&g_app)); g_lua.bindSingletonFunction("g_app", "exit", &Application::exit, static_cast<Application*>(&g_app)); // Crypt g_lua.registerSingletonClass("g_crypt"); g_lua.bindSingletonFunction("g_crypt", "genUUID", &Crypt::genUUID, &g_crypt); g_lua.bindSingletonFunction("g_crypt", "setMachineUUID", &Crypt::setMachineUUID, &g_crypt); g_lua.bindSingletonFunction("g_crypt", "getMachineUUID", &Crypt::getMachineUUID, &g_crypt); g_lua.bindSingletonFunction("g_crypt", "encrypt", &Crypt::encrypt, &g_crypt); g_lua.bindSingletonFunction("g_crypt", "decrypt", &Crypt::decrypt, &g_crypt); g_lua.bindSingletonFunction("g_crypt", "sha1Encode", &Crypt::sha1Encode, &g_crypt); g_lua.bindSingletonFunction("g_crypt", "md5Encode", &Crypt::md5Encode, &g_crypt); g_lua.bindSingletonFunction("g_crypt", "rsaGenerateKey", &Crypt::rsaGenerateKey, &g_crypt); g_lua.bindSingletonFunction("g_crypt", "rsaSetPublicKey", &Crypt::rsaSetPublicKey, &g_crypt); g_lua.bindSingletonFunction("g_crypt", "rsaSetPrivateKey", &Crypt::rsaSetPrivateKey, &g_crypt); g_lua.bindSingletonFunction("g_crypt", "rsaCheckKey", &Crypt::rsaCheckKey, &g_crypt); g_lua.bindSingletonFunction("g_crypt", "rsaGetSize", &Crypt::rsaGetSize, &g_crypt); // Clock g_lua.registerSingletonClass("g_clock"); g_lua.bindSingletonFunction("g_clock", "micros", &Clock::micros, &g_clock); g_lua.bindSingletonFunction("g_clock", "millis", &Clock::millis, &g_clock); g_lua.bindSingletonFunction("g_clock", "seconds", &Clock::seconds, &g_clock); // ConfigManager g_lua.registerSingletonClass("g_configs"); g_lua.bindSingletonFunction("g_configs", "load", &ConfigManager::load, &g_configs); g_lua.bindSingletonFunction("g_configs", "save", &ConfigManager::save, &g_configs); g_lua.bindSingletonFunction("g_configs", "set", &ConfigManager::set, &g_configs); g_lua.bindSingletonFunction("g_configs", "setList", &ConfigManager::setList, &g_configs); g_lua.bindSingletonFunction("g_configs", "get", &ConfigManager::get, &g_configs); g_lua.bindSingletonFunction("g_configs", "getList", &ConfigManager::getList, &g_configs); g_lua.bindSingletonFunction("g_configs", "exists", &ConfigManager::exists, &g_configs); g_lua.bindSingletonFunction("g_configs", "remove", &ConfigManager::remove, &g_configs); g_lua.bindSingletonFunction("g_configs", "setNode", &ConfigManager::setNode, &g_configs); g_lua.bindSingletonFunction("g_configs", "mergeNode", &ConfigManager::mergeNode, &g_configs); g_lua.bindSingletonFunction("g_configs", "getNode", &ConfigManager::getNode, &g_configs); // Logger g_lua.registerSingletonClass("g_logger"); g_lua.bindSingletonFunction("g_logger", "log", &Logger::log, &g_logger); g_lua.bindSingletonFunction("g_logger", "fireOldMessages", &Logger::fireOldMessages, &g_logger); g_lua.bindSingletonFunction("g_logger", "setLogFile", &Logger::setLogFile, &g_logger); g_lua.bindSingletonFunction("g_logger", "setOnLog", &Logger::setOnLog, &g_logger); g_lua.bindSingletonFunction("g_logger", "debug", &Logger::debug, &g_logger); g_lua.bindSingletonFunction("g_logger", "info", &Logger::info, &g_logger); g_lua.bindSingletonFunction("g_logger", "warning", &Logger::warning, &g_logger); g_lua.bindSingletonFunction("g_logger", "error", &Logger::error, &g_logger); g_lua.bindSingletonFunction("g_logger", "fatal", &Logger::fatal, &g_logger); // ModuleManager g_lua.registerSingletonClass("g_modules"); g_lua.bindSingletonFunction("g_modules", "discoverModules", &ModuleManager::discoverModules, &g_modules); g_lua.bindSingletonFunction("g_modules", "autoLoadModules", &ModuleManager::autoLoadModules, &g_modules); g_lua.bindSingletonFunction("g_modules", "discoverModule", &ModuleManager::discoverModule, &g_modules); g_lua.bindSingletonFunction("g_modules", "ensureModuleLoaded", &ModuleManager::ensureModuleLoaded, &g_modules); g_lua.bindSingletonFunction("g_modules", "unloadModules", &ModuleManager::unloadModules, &g_modules); g_lua.bindSingletonFunction("g_modules", "reloadModules", &ModuleManager::reloadModules, &g_modules); g_lua.bindSingletonFunction("g_modules", "getModule", &ModuleManager::getModule, &g_modules); g_lua.bindSingletonFunction("g_modules", "getModules", &ModuleManager::getModules, &g_modules); // EventDispatcher g_lua.registerSingletonClass("g_dispatcher"); g_lua.bindSingletonFunction("g_dispatcher", "addEvent", &EventDispatcher::addEvent, &g_dispatcher); g_lua.bindSingletonFunction("g_dispatcher", "scheduleEvent", &EventDispatcher::scheduleEvent, &g_dispatcher); g_lua.bindSingletonFunction("g_dispatcher", "cycleEvent", &EventDispatcher::cycleEvent, &g_dispatcher); // ResourceManager g_lua.registerSingletonClass("g_resources"); g_lua.bindSingletonFunction("g_resources", "addSearchPath", &ResourceManager::addSearchPath, &g_resources); g_lua.bindSingletonFunction("g_resources", "setupUserWriteDir", &ResourceManager::setupUserWriteDir, &g_resources); g_lua.bindSingletonFunction("g_resources", "setWriteDir", &ResourceManager::setWriteDir, &g_resources); g_lua.bindSingletonFunction("g_resources", "searchAndAddPackages", &ResourceManager::searchAndAddPackages, &g_resources); g_lua.bindSingletonFunction("g_resources", "removeSearchPath", &ResourceManager::removeSearchPath, &g_resources); g_lua.bindSingletonFunction("g_resources", "fileExists", &ResourceManager::fileExists, &g_resources); g_lua.bindSingletonFunction("g_resources", "directoryExists", &ResourceManager::directoryExists, &g_resources); g_lua.bindSingletonFunction("g_resources", "getRealDir", &ResourceManager::getRealDir, &g_resources); g_lua.bindSingletonFunction("g_resources", "getWorkDir", &ResourceManager::getWorkDir, &g_resources); g_lua.bindSingletonFunction("g_resources", "getSearchPaths", &ResourceManager::getSearchPaths, &g_resources); g_lua.bindSingletonFunction("g_resources", "listDirectoryFiles", &ResourceManager::listDirectoryFiles, &g_resources); g_lua.bindSingletonFunction("g_resources", "readFileContents", &ResourceManager::readFileContents, &g_resources); g_lua.bindSingletonFunction("g_resources", "guessFilePath", &ResourceManager::guessFilePath, &g_resources); g_lua.bindSingletonFunction("g_resources", "isFileType", &ResourceManager::isFileType, &g_resources); g_lua.bindSingletonFunction("g_resources", "getFileTime", &ResourceManager::getFileTime, &g_resources); // Module g_lua.registerClass<Module>(); g_lua.bindClassMemberFunction<Module>("load", &Module::load); g_lua.bindClassMemberFunction<Module>("unload", &Module::unload); g_lua.bindClassMemberFunction<Module>("reload", &Module::reload); g_lua.bindClassMemberFunction<Module>("canReload", &Module::canReload); g_lua.bindClassMemberFunction<Module>("canUnload", &Module::canUnload); g_lua.bindClassMemberFunction<Module>("isLoaded", &Module::isLoaded); g_lua.bindClassMemberFunction<Module>("isReloadble", &Module::isReloadable); g_lua.bindClassMemberFunction<Module>("isSandboxed", &Module::isSandboxed); g_lua.bindClassMemberFunction<Module>("getDescription", &Module::getDescription); g_lua.bindClassMemberFunction<Module>("getName", &Module::getName); g_lua.bindClassMemberFunction<Module>("getAuthor", &Module::getAuthor); g_lua.bindClassMemberFunction<Module>("getWebsite", &Module::getWebsite); g_lua.bindClassMemberFunction<Module>("getVersion", &Module::getVersion); g_lua.bindClassMemberFunction<Module>("getSandbox", &Module::getSandbox); g_lua.bindClassMemberFunction<Module>("isAutoLoad", &Module::isAutoLoad); g_lua.bindClassMemberFunction<Module>("getAutoLoadPriority", &Module::getAutoLoadPriority); // Event g_lua.registerClass<Event>(); g_lua.bindClassMemberFunction<Event>("cancel", &Event::cancel); g_lua.bindClassMemberFunction<Event>("execute", &Event::execute); g_lua.bindClassMemberFunction<Event>("isCanceled", &Event::isCanceled); g_lua.bindClassMemberFunction<Event>("isExecuted", &Event::isExecuted); // ScheduledEvent g_lua.registerClass<ScheduledEvent, Event>(); g_lua.bindClassMemberFunction<ScheduledEvent>("nextCycle", &ScheduledEvent::nextCycle); g_lua.bindClassMemberFunction<ScheduledEvent>("ticks", &ScheduledEvent::ticks); g_lua.bindClassMemberFunction<ScheduledEvent>("remainingTicks", &ScheduledEvent::remainingTicks); g_lua.bindClassMemberFunction<ScheduledEvent>("delay", &ScheduledEvent::delay); g_lua.bindClassMemberFunction<ScheduledEvent>("cyclesExecuted", &ScheduledEvent::cyclesExecuted); g_lua.bindClassMemberFunction<ScheduledEvent>("maxCycles", &ScheduledEvent::maxCycles); #ifdef FW_GRAPHICS // GraphicalApplication g_lua.bindSingletonFunction("g_app", "setForegroundPaneMaxFps", &GraphicalApplication::setForegroundPaneMaxFps, &g_app); g_lua.bindSingletonFunction("g_app", "setBackgroundPaneMaxFps", &GraphicalApplication::setBackgroundPaneMaxFps, &g_app); g_lua.bindSingletonFunction("g_app", "isOnInputEvent", &GraphicalApplication::isOnInputEvent, &g_app); g_lua.bindSingletonFunction("g_app", "getForegroundPaneFps", &GraphicalApplication::getForegroundPaneFps, &g_app); g_lua.bindSingletonFunction("g_app", "getBackgroundPaneFps", &GraphicalApplication::getBackgroundPaneFps, &g_app); g_lua.bindSingletonFunction("g_app", "getForegroundPaneMaxFps", &GraphicalApplication::getForegroundPaneMaxFps, &g_app); g_lua.bindSingletonFunction("g_app", "getBackgroundPaneMaxFps", &GraphicalApplication::getBackgroundPaneMaxFps, &g_app); // PlatformWindow g_lua.registerSingletonClass("g_window"); g_lua.bindSingletonFunction("g_window", "move", &PlatformWindow::move, &g_window); g_lua.bindSingletonFunction("g_window", "resize", &PlatformWindow::resize, &g_window); g_lua.bindSingletonFunction("g_window", "show", &PlatformWindow::show, &g_window); g_lua.bindSingletonFunction("g_window", "hide", &PlatformWindow::hide, &g_window); g_lua.bindSingletonFunction("g_window", "poll", &PlatformWindow::poll, &g_window); g_lua.bindSingletonFunction("g_window", "maximize", &PlatformWindow::maximize, &g_window); g_lua.bindSingletonFunction("g_window", "restoreMouseCursor", &PlatformWindow::restoreMouseCursor, &g_window); g_lua.bindSingletonFunction("g_window", "showMouse", &PlatformWindow::showMouse, &g_window); g_lua.bindSingletonFunction("g_window", "hideMouse", &PlatformWindow::hideMouse, &g_window); g_lua.bindSingletonFunction("g_window", "setTitle", &PlatformWindow::setTitle, &g_window); g_lua.bindSingletonFunction("g_window", "setMouseCursor", &PlatformWindow::setMouseCursor, &g_window); g_lua.bindSingletonFunction("g_window", "setMinimumSize", &PlatformWindow::setMinimumSize, &g_window); g_lua.bindSingletonFunction("g_window", "setFullscreen", &PlatformWindow::setFullscreen, &g_window); g_lua.bindSingletonFunction("g_window", "setVerticalSync", &PlatformWindow::setVerticalSync, &g_window); g_lua.bindSingletonFunction("g_window", "setIcon", &PlatformWindow::setIcon, &g_window); g_lua.bindSingletonFunction("g_window", "setClipboardText", &PlatformWindow::setClipboardText, &g_window); g_lua.bindSingletonFunction("g_window", "getDisplaySize", &PlatformWindow::getDisplaySize, &g_window); g_lua.bindSingletonFunction("g_window", "getClipboardText", &PlatformWindow::getClipboardText, &g_window); g_lua.bindSingletonFunction("g_window", "getPlatformType", &PlatformWindow::getPlatformType, &g_window); g_lua.bindSingletonFunction("g_window", "getDisplayWidth", &PlatformWindow::getDisplayWidth, &g_window); g_lua.bindSingletonFunction("g_window", "getDisplayHeight", &PlatformWindow::getDisplayHeight, &g_window); g_lua.bindSingletonFunction("g_window", "getUnmaximizedSize", &PlatformWindow::getUnmaximizedSize, &g_window); g_lua.bindSingletonFunction("g_window", "getSize", &PlatformWindow::getSize, &g_window); g_lua.bindSingletonFunction("g_window", "getWidth", &PlatformWindow::getWidth, &g_window); g_lua.bindSingletonFunction("g_window", "getHeight", &PlatformWindow::getHeight, &g_window); g_lua.bindSingletonFunction("g_window", "getUnmaximizedPos", &PlatformWindow::getUnmaximizedPos, &g_window); g_lua.bindSingletonFunction("g_window", "getPosition", &PlatformWindow::getPosition, &g_window); g_lua.bindSingletonFunction("g_window", "getX", &PlatformWindow::getX, &g_window); g_lua.bindSingletonFunction("g_window", "getY", &PlatformWindow::getY, &g_window); g_lua.bindSingletonFunction("g_window", "getMousePosition", &PlatformWindow::getMousePosition, &g_window); g_lua.bindSingletonFunction("g_window", "getKeyboardModifiers", &PlatformWindow::getKeyboardModifiers, &g_window); g_lua.bindSingletonFunction("g_window", "isKeyPressed", &PlatformWindow::isKeyPressed, &g_window); g_lua.bindSingletonFunction("g_window", "isMouseButtonPressed", &PlatformWindow::isMouseButtonPressed, &g_window); g_lua.bindSingletonFunction("g_window", "isVisible", &PlatformWindow::isVisible, &g_window); g_lua.bindSingletonFunction("g_window", "isFullscreen", &PlatformWindow::isFullscreen, &g_window); g_lua.bindSingletonFunction("g_window", "isMaximized", &PlatformWindow::isMaximized, &g_window); g_lua.bindSingletonFunction("g_window", "hasFocus", &PlatformWindow::hasFocus, &g_window); // Input g_lua.registerSingletonClass("g_mouse"); g_lua.bindSingletonFunction("g_mouse", "loadCursors", &Mouse::loadCursors, &g_mouse); g_lua.bindSingletonFunction("g_mouse", "addCursor", &Mouse::addCursor, &g_mouse); g_lua.bindSingletonFunction("g_mouse", "pushCursor", &Mouse::pushCursor, &g_mouse); g_lua.bindSingletonFunction("g_mouse", "popCursor", &Mouse::popCursor, &g_mouse); g_lua.bindSingletonFunction("g_mouse", "isCursorChanged", &Mouse::isCursorChanged, &g_mouse); g_lua.bindSingletonFunction("g_mouse", "isPressed", &Mouse::isPressed, &g_mouse); // Graphics g_lua.registerSingletonClass("g_graphics"); g_lua.bindSingletonFunction("g_graphics", "isPainterEngineAvailable", &Graphics::isPainterEngineAvailable, &g_graphics); g_lua.bindSingletonFunction("g_graphics", "selectPainterEngine", &Graphics::selectPainterEngine, &g_graphics); g_lua.bindSingletonFunction("g_graphics", "canCacheBackbuffer", &Graphics::canCacheBackbuffer, &g_graphics); g_lua.bindSingletonFunction("g_graphics", "canUseShaders", &Graphics::canUseShaders, &g_graphics); g_lua.bindSingletonFunction("g_graphics", "shouldUseShaders", &Graphics::shouldUseShaders, &g_graphics); g_lua.bindSingletonFunction("g_graphics", "setShouldUseShaders", &Graphics::setShouldUseShaders, &g_graphics); g_lua.bindSingletonFunction("g_graphics", "getPainterEngine", &Graphics::getPainterEngine, &g_graphics); g_lua.bindSingletonFunction("g_graphics", "getViewportSize", &Graphics::getViewportSize, &g_graphics); g_lua.bindSingletonFunction("g_graphics", "getVendor", &Graphics::getVendor, &g_graphics); g_lua.bindSingletonFunction("g_graphics", "getRenderer", &Graphics::getRenderer, &g_graphics); g_lua.bindSingletonFunction("g_graphics", "getVersion", &Graphics::getVersion, &g_graphics); // Textures g_lua.registerSingletonClass("g_textures"); g_lua.bindSingletonFunction("g_textures", "preload", &TextureManager::preload, &g_textures); g_lua.bindSingletonFunction("g_textures", "clearCache", &TextureManager::clearCache, &g_textures); g_lua.bindSingletonFunction("g_textures", "liveReload", &TextureManager::liveReload, &g_textures); // UI g_lua.registerSingletonClass("g_ui"); g_lua.bindSingletonFunction("g_ui", "clearStyles", &UIManager::clearStyles, &g_ui); g_lua.bindSingletonFunction("g_ui", "importStyle", &UIManager::importStyle, &g_ui); g_lua.bindSingletonFunction("g_ui", "getStyle", &UIManager::getStyle, &g_ui); g_lua.bindSingletonFunction("g_ui", "getStyleClass", &UIManager::getStyleClass, &g_ui); g_lua.bindSingletonFunction("g_ui", "loadUI", &UIManager::loadUI, &g_ui); g_lua.bindSingletonFunction("g_ui", "displayUI", &UIManager::displayUI, &g_ui); g_lua.bindSingletonFunction("g_ui", "createWidget", &UIManager::createWidget, &g_ui); g_lua.bindSingletonFunction("g_ui", "createWidgetFromOTML", &UIManager::createWidgetFromOTML, &g_ui); g_lua.bindSingletonFunction("g_ui", "getRootWidget", &UIManager::getRootWidget, &g_ui); g_lua.bindSingletonFunction("g_ui", "getDraggingWidget", &UIManager::getDraggingWidget, &g_ui); g_lua.bindSingletonFunction("g_ui", "getPressedWidget", &UIManager::getPressedWidget, &g_ui); g_lua.bindSingletonFunction("g_ui", "setDebugBoxesDrawing", &UIManager::setDebugBoxesDrawing, &g_ui); g_lua.bindSingletonFunction("g_ui", "isDrawingDebugBoxes", &UIManager::isDrawingDebugBoxes, &g_ui); g_lua.bindSingletonFunction("g_ui", "isMouseGrabbed", &UIManager::isMouseGrabbed, &g_ui); g_lua.bindSingletonFunction("g_ui", "isKeyboardGrabbed", &UIManager::isKeyboardGrabbed, &g_ui); // FontManager g_lua.registerSingletonClass("g_fonts"); g_lua.bindSingletonFunction("g_fonts", "clearFonts", &FontManager::clearFonts, &g_fonts); g_lua.bindSingletonFunction("g_fonts", "importFont", &FontManager::importFont, &g_fonts); g_lua.bindSingletonFunction("g_fonts", "fontExists", &FontManager::fontExists, &g_fonts); g_lua.bindSingletonFunction("g_fonts", "setDefaultFont", &FontManager::setDefaultFont, &g_fonts); // ParticleManager g_lua.registerSingletonClass("g_particles"); g_lua.bindSingletonFunction("g_particles", "importParticle", &ParticleManager::importParticle, &g_particles); g_lua.bindSingletonFunction("g_particles", "getEffectsTypes", &ParticleManager::getEffectsTypes, &g_particles); // UIWidget g_lua.registerClass<UIWidget>(); g_lua.bindClassStaticFunction<UIWidget>("create", []{ return UIWidgetPtr(new UIWidget); }); g_lua.bindClassMemberFunction<UIWidget>("addChild", &UIWidget::addChild); g_lua.bindClassMemberFunction<UIWidget>("insertChild", &UIWidget::insertChild); g_lua.bindClassMemberFunction<UIWidget>("removeChild", &UIWidget::removeChild); g_lua.bindClassMemberFunction<UIWidget>("focusChild", &UIWidget::focusChild); g_lua.bindClassMemberFunction<UIWidget>("focusNextChild", &UIWidget::focusNextChild); g_lua.bindClassMemberFunction<UIWidget>("focusPreviousChild", &UIWidget::focusPreviousChild); g_lua.bindClassMemberFunction<UIWidget>("lowerChild", &UIWidget::lowerChild); g_lua.bindClassMemberFunction<UIWidget>("raiseChild", &UIWidget::raiseChild); g_lua.bindClassMemberFunction<UIWidget>("moveChildToIndex", &UIWidget::moveChildToIndex); g_lua.bindClassMemberFunction<UIWidget>("lockChild", &UIWidget::lockChild); g_lua.bindClassMemberFunction<UIWidget>("unlockChild", &UIWidget::unlockChild); g_lua.bindClassMemberFunction<UIWidget>("mergeStyle", &UIWidget::mergeStyle); g_lua.bindClassMemberFunction<UIWidget>("applyStyle", &UIWidget::applyStyle); g_lua.bindClassMemberFunction<UIWidget>("addAnchor", &UIWidget::addAnchor); g_lua.bindClassMemberFunction<UIWidget>("removeAnchor", &UIWidget::removeAnchor); g_lua.bindClassMemberFunction<UIWidget>("fill", &UIWidget::fill); g_lua.bindClassMemberFunction<UIWidget>("centerIn", &UIWidget::centerIn); g_lua.bindClassMemberFunction<UIWidget>("breakAnchors", &UIWidget::breakAnchors); g_lua.bindClassMemberFunction<UIWidget>("updateParentLayout", &UIWidget::updateParentLayout); g_lua.bindClassMemberFunction<UIWidget>("updateLayout", &UIWidget::updateLayout); g_lua.bindClassMemberFunction<UIWidget>("lock", &UIWidget::lock); g_lua.bindClassMemberFunction<UIWidget>("unlock", &UIWidget::unlock); g_lua.bindClassMemberFunction<UIWidget>("focus", &UIWidget::focus); g_lua.bindClassMemberFunction<UIWidget>("lower", &UIWidget::lower); g_lua.bindClassMemberFunction<UIWidget>("raise", &UIWidget::raise); g_lua.bindClassMemberFunction<UIWidget>("grabMouse", &UIWidget::grabMouse); g_lua.bindClassMemberFunction<UIWidget>("ungrabMouse", &UIWidget::ungrabMouse); g_lua.bindClassMemberFunction<UIWidget>("grabKeyboard", &UIWidget::grabKeyboard); g_lua.bindClassMemberFunction<UIWidget>("ungrabKeyboard", &UIWidget::ungrabKeyboard); g_lua.bindClassMemberFunction<UIWidget>("bindRectToParent", &UIWidget::bindRectToParent); g_lua.bindClassMemberFunction<UIWidget>("destroy", &UIWidget::destroy); g_lua.bindClassMemberFunction<UIWidget>("destroyChildren", &UIWidget::destroyChildren); g_lua.bindClassMemberFunction<UIWidget>("setId", &UIWidget::setId); g_lua.bindClassMemberFunction<UIWidget>("setParent", &UIWidget::setParent); g_lua.bindClassMemberFunction<UIWidget>("setLayout", &UIWidget::setLayout); g_lua.bindClassMemberFunction<UIWidget>("setRect", &UIWidget::setRect); g_lua.bindClassMemberFunction<UIWidget>("setStyle", &UIWidget::setStyle); g_lua.bindClassMemberFunction<UIWidget>("setStyleFromNode", &UIWidget::setStyleFromNode); g_lua.bindClassMemberFunction<UIWidget>("setEnabled", &UIWidget::setEnabled); g_lua.bindClassMemberFunction<UIWidget>("setVisible", &UIWidget::setVisible); g_lua.bindClassMemberFunction<UIWidget>("setOn", &UIWidget::setOn); g_lua.bindClassMemberFunction<UIWidget>("setChecked", &UIWidget::setChecked); g_lua.bindClassMemberFunction<UIWidget>("setFocusable", &UIWidget::setFocusable); g_lua.bindClassMemberFunction<UIWidget>("setPhantom", &UIWidget::setPhantom); g_lua.bindClassMemberFunction<UIWidget>("setDraggable", &UIWidget::setDraggable); g_lua.bindClassMemberFunction<UIWidget>("setFixedSize", &UIWidget::setFixedSize); g_lua.bindClassMemberFunction<UIWidget>("setClipping", &UIWidget::setClipping); g_lua.bindClassMemberFunction<UIWidget>("setLastFocusReason", &UIWidget::setLastFocusReason); g_lua.bindClassMemberFunction<UIWidget>("setAutoFocusPolicy", &UIWidget::setAutoFocusPolicy); g_lua.bindClassMemberFunction<UIWidget>("setAutoRepeatDelay", &UIWidget::setAutoRepeatDelay); g_lua.bindClassMemberFunction<UIWidget>("setVirtualOffset", &UIWidget::setVirtualOffset); g_lua.bindClassMemberFunction<UIWidget>("isVisible", &UIWidget::isVisible); g_lua.bindClassMemberFunction<UIWidget>("isChildLocked", &UIWidget::isChildLocked); g_lua.bindClassMemberFunction<UIWidget>("hasChild", &UIWidget::hasChild); g_lua.bindClassMemberFunction<UIWidget>("getChildIndex", &UIWidget::getChildIndex); g_lua.bindClassMemberFunction<UIWidget>("getMarginRect", &UIWidget::getMarginRect); g_lua.bindClassMemberFunction<UIWidget>("getPaddingRect", &UIWidget::getPaddingRect); g_lua.bindClassMemberFunction<UIWidget>("getChildrenRect", &UIWidget::getChildrenRect); g_lua.bindClassMemberFunction<UIWidget>("getAnchoredLayout", &UIWidget::getAnchoredLayout); g_lua.bindClassMemberFunction<UIWidget>("getRootParent", &UIWidget::getRootParent); g_lua.bindClassMemberFunction<UIWidget>("getChildAfter", &UIWidget::getChildAfter); g_lua.bindClassMemberFunction<UIWidget>("getChildBefore", &UIWidget::getChildBefore); g_lua.bindClassMemberFunction<UIWidget>("getChildById", &UIWidget::getChildById); g_lua.bindClassMemberFunction<UIWidget>("getChildByPos", &UIWidget::getChildByPos); g_lua.bindClassMemberFunction<UIWidget>("getChildByIndex", &UIWidget::getChildByIndex); g_lua.bindClassMemberFunction<UIWidget>("recursiveGetChildById", &UIWidget::recursiveGetChildById); g_lua.bindClassMemberFunction<UIWidget>("recursiveGetChildByPos", &UIWidget::recursiveGetChildByPos); g_lua.bindClassMemberFunction<UIWidget>("recursiveGetChildren", &UIWidget::recursiveGetChildren); g_lua.bindClassMemberFunction<UIWidget>("recursiveGetChildrenByPos", &UIWidget::recursiveGetChildrenByPos); g_lua.bindClassMemberFunction<UIWidget>("recursiveGetChildrenByMarginPos", &UIWidget::recursiveGetChildrenByMarginPos); g_lua.bindClassMemberFunction<UIWidget>("backwardsGetWidgetById", &UIWidget::backwardsGetWidgetById); g_lua.bindClassMemberFunction<UIWidget>("resize", &UIWidget::resize); g_lua.bindClassMemberFunction<UIWidget>("move", &UIWidget::move); g_lua.bindClassMemberFunction<UIWidget>("rotate", &UIWidget::rotate); g_lua.bindClassMemberFunction<UIWidget>("hide", &UIWidget::hide); g_lua.bindClassMemberFunction<UIWidget>("show", &UIWidget::show); g_lua.bindClassMemberFunction<UIWidget>("disable", &UIWidget::disable); g_lua.bindClassMemberFunction<UIWidget>("enable", &UIWidget::enable); g_lua.bindClassMemberFunction<UIWidget>("isActive", &UIWidget::isActive); g_lua.bindClassMemberFunction<UIWidget>("isEnabled", &UIWidget::isEnabled); g_lua.bindClassMemberFunction<UIWidget>("isDisabled", &UIWidget::isDisabled); g_lua.bindClassMemberFunction<UIWidget>("isFocused", &UIWidget::isFocused); g_lua.bindClassMemberFunction<UIWidget>("isHovered", &UIWidget::isHovered); g_lua.bindClassMemberFunction<UIWidget>("isPressed", &UIWidget::isPressed); g_lua.bindClassMemberFunction<UIWidget>("isFirst", &UIWidget::isFirst); g_lua.bindClassMemberFunction<UIWidget>("isMiddle", &UIWidget::isMiddle); g_lua.bindClassMemberFunction<UIWidget>("isLast", &UIWidget::isLast); g_lua.bindClassMemberFunction<UIWidget>("isAlternate", &UIWidget::isAlternate); g_lua.bindClassMemberFunction<UIWidget>("isChecked", &UIWidget::isChecked); g_lua.bindClassMemberFunction<UIWidget>("isOn", &UIWidget::isOn); g_lua.bindClassMemberFunction<UIWidget>("isDragging", &UIWidget::isDragging); g_lua.bindClassMemberFunction<UIWidget>("isHidden", &UIWidget::isHidden); g_lua.bindClassMemberFunction<UIWidget>("isExplicitlyEnabled", &UIWidget::isExplicitlyEnabled); g_lua.bindClassMemberFunction<UIWidget>("isExplicitlyVisible", &UIWidget::isExplicitlyVisible); g_lua.bindClassMemberFunction<UIWidget>("isFocusable", &UIWidget::isFocusable); g_lua.bindClassMemberFunction<UIWidget>("isPhantom", &UIWidget::isPhantom); g_lua.bindClassMemberFunction<UIWidget>("isDraggable", &UIWidget::isDraggable); g_lua.bindClassMemberFunction<UIWidget>("isFixedSize", &UIWidget::isFixedSize); g_lua.bindClassMemberFunction<UIWidget>("isClipping", &UIWidget::isClipping); g_lua.bindClassMemberFunction<UIWidget>("isDestroyed", &UIWidget::isDestroyed); g_lua.bindClassMemberFunction<UIWidget>("hasChildren", &UIWidget::hasChildren); g_lua.bindClassMemberFunction<UIWidget>("containsMarginPoint", &UIWidget::containsMarginPoint); g_lua.bindClassMemberFunction<UIWidget>("containsPaddingPoint", &UIWidget::containsPaddingPoint); g_lua.bindClassMemberFunction<UIWidget>("containsPoint", &UIWidget::containsPoint); g_lua.bindClassMemberFunction<UIWidget>("getId", &UIWidget::getId); g_lua.bindClassMemberFunction<UIWidget>("getParent", &UIWidget::getParent); g_lua.bindClassMemberFunction<UIWidget>("getFocusedChild", &UIWidget::getFocusedChild); g_lua.bindClassMemberFunction<UIWidget>("getChildren", &UIWidget::getChildren); g_lua.bindClassMemberFunction<UIWidget>("getFirstChild", &UIWidget::getFirstChild); g_lua.bindClassMemberFunction<UIWidget>("getLastChild", &UIWidget::getLastChild); g_lua.bindClassMemberFunction<UIWidget>("getLayout", &UIWidget::getLayout); g_lua.bindClassMemberFunction<UIWidget>("getStyle", &UIWidget::getStyle); g_lua.bindClassMemberFunction<UIWidget>("getChildCount", &UIWidget::getChildCount); g_lua.bindClassMemberFunction<UIWidget>("getLastFocusReason", &UIWidget::getLastFocusReason); g_lua.bindClassMemberFunction<UIWidget>("getAutoFocusPolicy", &UIWidget::getAutoFocusPolicy); g_lua.bindClassMemberFunction<UIWidget>("getAutoRepeatDelay", &UIWidget::getAutoRepeatDelay); g_lua.bindClassMemberFunction<UIWidget>("getVirtualOffset", &UIWidget::getVirtualOffset); g_lua.bindClassMemberFunction<UIWidget>("getStyleName", &UIWidget::getStyleName); g_lua.bindClassMemberFunction<UIWidget>("getLastClickPosition", &UIWidget::getLastClickPosition); g_lua.bindClassMemberFunction<UIWidget>("setX", &UIWidget::setX); g_lua.bindClassMemberFunction<UIWidget>("setY", &UIWidget::setY); g_lua.bindClassMemberFunction<UIWidget>("setWidth", &UIWidget::setWidth); g_lua.bindClassMemberFunction<UIWidget>("setHeight", &UIWidget::setHeight); g_lua.bindClassMemberFunction<UIWidget>("setSize", &UIWidget::setSize); g_lua.bindClassMemberFunction<UIWidget>("setPosition", &UIWidget::setPosition); g_lua.bindClassMemberFunction<UIWidget>("setColor", &UIWidget::setColor); g_lua.bindClassMemberFunction<UIWidget>("setBackgroundColor", &UIWidget::setBackgroundColor); g_lua.bindClassMemberFunction<UIWidget>("setBackgroundOffsetX", &UIWidget::setBackgroundOffsetX); g_lua.bindClassMemberFunction<UIWidget>("setBackgroundOffsetY", &UIWidget::setBackgroundOffsetY); g_lua.bindClassMemberFunction<UIWidget>("setBackgroundOffset", &UIWidget::setBackgroundOffset); g_lua.bindClassMemberFunction<UIWidget>("setBackgroundWidth", &UIWidget::setBackgroundWidth); g_lua.bindClassMemberFunction<UIWidget>("setBackgroundHeight", &UIWidget::setBackgroundHeight); g_lua.bindClassMemberFunction<UIWidget>("setBackgroundSize", &UIWidget::setBackgroundSize); g_lua.bindClassMemberFunction<UIWidget>("setBackgroundRect", &UIWidget::setBackgroundRect); g_lua.bindClassMemberFunction<UIWidget>("setIcon", &UIWidget::setIcon); g_lua.bindClassMemberFunction<UIWidget>("setIconColor", &UIWidget::setIconColor); g_lua.bindClassMemberFunction<UIWidget>("setIconOffsetX", &UIWidget::setIconOffsetX); g_lua.bindClassMemberFunction<UIWidget>("setIconOffsetY", &UIWidget::setIconOffsetY); g_lua.bindClassMemberFunction<UIWidget>("setIconOffset", &UIWidget::setIconOffset); g_lua.bindClassMemberFunction<UIWidget>("setIconWidth", &UIWidget::setIconWidth); g_lua.bindClassMemberFunction<UIWidget>("setIconHeight", &UIWidget::setIconHeight); g_lua.bindClassMemberFunction<UIWidget>("setIconSize", &UIWidget::setIconSize); g_lua.bindClassMemberFunction<UIWidget>("setIconRect", &UIWidget::setIconRect); g_lua.bindClassMemberFunction<UIWidget>("setIconClip", &UIWidget::setIconClip); g_lua.bindClassMemberFunction<UIWidget>("setIconAlign", &UIWidget::setIconAlign); g_lua.bindClassMemberFunction<UIWidget>("setBorderWidth", &UIWidget::setBorderWidth); g_lua.bindClassMemberFunction<UIWidget>("setBorderWidthTop", &UIWidget::setBorderWidthTop); g_lua.bindClassMemberFunction<UIWidget>("setBorderWidthRight", &UIWidget::setBorderWidthRight); g_lua.bindClassMemberFunction<UIWidget>("setBorderWidthBottom", &UIWidget::setBorderWidthBottom); g_lua.bindClassMemberFunction<UIWidget>("setBorderWidthLeft", &UIWidget::setBorderWidthLeft); g_lua.bindClassMemberFunction<UIWidget>("setBorderColor", &UIWidget::setBorderColor); g_lua.bindClassMemberFunction<UIWidget>("setBorderColorTop", &UIWidget::setBorderColorTop); g_lua.bindClassMemberFunction<UIWidget>("setBorderColorRight", &UIWidget::setBorderColorRight); g_lua.bindClassMemberFunction<UIWidget>("setBorderColorBottom", &UIWidget::setBorderColorBottom); g_lua.bindClassMemberFunction<UIWidget>("setBorderColorLeft", &UIWidget::setBorderColorLeft); g_lua.bindClassMemberFunction<UIWidget>("setMargin", &UIWidget::setMargin); g_lua.bindClassMemberFunction<UIWidget>("setMarginHorizontal", &UIWidget::setMarginHorizontal); g_lua.bindClassMemberFunction<UIWidget>("setMarginVertical", &UIWidget::setMarginVertical); g_lua.bindClassMemberFunction<UIWidget>("setMarginTop", &UIWidget::setMarginTop); g_lua.bindClassMemberFunction<UIWidget>("setMarginRight", &UIWidget::setMarginRight); g_lua.bindClassMemberFunction<UIWidget>("setMarginBottom", &UIWidget::setMarginBottom); g_lua.bindClassMemberFunction<UIWidget>("setMarginLeft", &UIWidget::setMarginLeft); g_lua.bindClassMemberFunction<UIWidget>("setPadding", &UIWidget::setPadding); g_lua.bindClassMemberFunction<UIWidget>("setPaddingHorizontal", &UIWidget::setPaddingHorizontal); g_lua.bindClassMemberFunction<UIWidget>("setPaddingVertical", &UIWidget::setPaddingVertical); g_lua.bindClassMemberFunction<UIWidget>("setPaddingTop", &UIWidget::setPaddingTop); g_lua.bindClassMemberFunction<UIWidget>("setPaddingRight", &UIWidget::setPaddingRight); g_lua.bindClassMemberFunction<UIWidget>("setPaddingBottom", &UIWidget::setPaddingBottom); g_lua.bindClassMemberFunction<UIWidget>("setPaddingLeft", &UIWidget::setPaddingLeft); g_lua.bindClassMemberFunction<UIWidget>("setOpacity", &UIWidget::setOpacity); g_lua.bindClassMemberFunction<UIWidget>("setRotation", &UIWidget::setRotation); g_lua.bindClassMemberFunction<UIWidget>("getX", &UIWidget::getX); g_lua.bindClassMemberFunction<UIWidget>("getY", &UIWidget::getY); g_lua.bindClassMemberFunction<UIWidget>("getPosition", &UIWidget::getPosition); g_lua.bindClassMemberFunction<UIWidget>("getWidth", &UIWidget::getWidth); g_lua.bindClassMemberFunction<UIWidget>("getHeight", &UIWidget::getHeight); g_lua.bindClassMemberFunction<UIWidget>("getSize", &UIWidget::getSize); g_lua.bindClassMemberFunction<UIWidget>("getRect", &UIWidget::getRect); g_lua.bindClassMemberFunction<UIWidget>("getColor", &UIWidget::getColor); g_lua.bindClassMemberFunction<UIWidget>("getBackgroundColor", &UIWidget::getBackgroundColor); g_lua.bindClassMemberFunction<UIWidget>("getBackgroundOffsetX", &UIWidget::getBackgroundOffsetX); g_lua.bindClassMemberFunction<UIWidget>("getBackgroundOffsetY", &UIWidget::getBackgroundOffsetY); g_lua.bindClassMemberFunction<UIWidget>("getBackgroundOffset", &UIWidget::getBackgroundOffset); g_lua.bindClassMemberFunction<UIWidget>("getBackgroundWidth", &UIWidget::getBackgroundWidth); g_lua.bindClassMemberFunction<UIWidget>("getBackgroundHeight", &UIWidget::getBackgroundHeight); g_lua.bindClassMemberFunction<UIWidget>("getBackgroundSize", &UIWidget::getBackgroundSize); g_lua.bindClassMemberFunction<UIWidget>("getBackgroundRect", &UIWidget::getBackgroundRect); g_lua.bindClassMemberFunction<UIWidget>("getIconColor", &UIWidget::getIconColor); g_lua.bindClassMemberFunction<UIWidget>("getIconOffsetX", &UIWidget::getIconOffsetX); g_lua.bindClassMemberFunction<UIWidget>("getIconOffsetY", &UIWidget::getIconOffsetY); g_lua.bindClassMemberFunction<UIWidget>("getIconOffset", &UIWidget::getIconOffset); g_lua.bindClassMemberFunction<UIWidget>("getIconWidth", &UIWidget::getIconWidth); g_lua.bindClassMemberFunction<UIWidget>("getIconHeight", &UIWidget::getIconHeight); g_lua.bindClassMemberFunction<UIWidget>("getIconSize", &UIWidget::getIconSize); g_lua.bindClassMemberFunction<UIWidget>("getIconRect", &UIWidget::getIconRect); g_lua.bindClassMemberFunction<UIWidget>("getIconClip", &UIWidget::getIconClip); g_lua.bindClassMemberFunction<UIWidget>("getIconAlign", &UIWidget::getIconAlign); g_lua.bindClassMemberFunction<UIWidget>("getBorderTopColor", &UIWidget::getBorderTopColor); g_lua.bindClassMemberFunction<UIWidget>("getBorderRightColor", &UIWidget::getBorderRightColor); g_lua.bindClassMemberFunction<UIWidget>("getBorderBottomColor", &UIWidget::getBorderBottomColor); g_lua.bindClassMemberFunction<UIWidget>("getBorderLeftColor", &UIWidget::getBorderLeftColor); g_lua.bindClassMemberFunction<UIWidget>("getBorderTopWidth", &UIWidget::getBorderTopWidth); g_lua.bindClassMemberFunction<UIWidget>("getBorderRightWidth", &UIWidget::getBorderRightWidth); g_lua.bindClassMemberFunction<UIWidget>("getBorderBottomWidth", &UIWidget::getBorderBottomWidth); g_lua.bindClassMemberFunction<UIWidget>("getBorderLeftWidth", &UIWidget::getBorderLeftWidth); g_lua.bindClassMemberFunction<UIWidget>("getMarginTop", &UIWidget::getMarginTop); g_lua.bindClassMemberFunction<UIWidget>("getMarginRight", &UIWidget::getMarginRight); g_lua.bindClassMemberFunction<UIWidget>("getMarginBottom", &UIWidget::getMarginBottom); g_lua.bindClassMemberFunction<UIWidget>("getMarginLeft", &UIWidget::getMarginLeft); g_lua.bindClassMemberFunction<UIWidget>("getPaddingTop", &UIWidget::getPaddingTop); g_lua.bindClassMemberFunction<UIWidget>("getPaddingRight", &UIWidget::getPaddingRight); g_lua.bindClassMemberFunction<UIWidget>("getPaddingBottom", &UIWidget::getPaddingBottom); g_lua.bindClassMemberFunction<UIWidget>("getPaddingLeft", &UIWidget::getPaddingLeft); g_lua.bindClassMemberFunction<UIWidget>("getOpacity", &UIWidget::getOpacity); g_lua.bindClassMemberFunction<UIWidget>("getRotation", &UIWidget::getRotation); g_lua.bindClassMemberFunction<UIWidget>("setImageSource", &UIWidget::setImageSource); g_lua.bindClassMemberFunction<UIWidget>("setImageClip", &UIWidget::setImageClip); g_lua.bindClassMemberFunction<UIWidget>("setImageOffsetX", &UIWidget::setImageOffsetX); g_lua.bindClassMemberFunction<UIWidget>("setImageOffsetY", &UIWidget::setImageOffsetY); g_lua.bindClassMemberFunction<UIWidget>("setImageOffset", &UIWidget::setImageOffset); g_lua.bindClassMemberFunction<UIWidget>("setImageWidth", &UIWidget::setImageWidth); g_lua.bindClassMemberFunction<UIWidget>("setImageHeight", &UIWidget::setImageHeight); g_lua.bindClassMemberFunction<UIWidget>("setImageSize", &UIWidget::setImageSize); g_lua.bindClassMemberFunction<UIWidget>("setImageRect", &UIWidget::setImageRect); g_lua.bindClassMemberFunction<UIWidget>("setImageColor", &UIWidget::setImageColor); g_lua.bindClassMemberFunction<UIWidget>("setImageFixedRatio", &UIWidget::setImageFixedRatio); g_lua.bindClassMemberFunction<UIWidget>("setImageRepeated", &UIWidget::setImageRepeated); g_lua.bindClassMemberFunction<UIWidget>("setImageSmooth", &UIWidget::setImageSmooth); g_lua.bindClassMemberFunction<UIWidget>("setImageBorderTop", &UIWidget::setImageBorderTop); g_lua.bindClassMemberFunction<UIWidget>("setImageBorderRight", &UIWidget::setImageBorderRight); g_lua.bindClassMemberFunction<UIWidget>("setImageBorderBottom", &UIWidget::setImageBorderBottom); g_lua.bindClassMemberFunction<UIWidget>("setImageBorderLeft", &UIWidget::setImageBorderLeft); g_lua.bindClassMemberFunction<UIWidget>("setImageBorder", &UIWidget::setImageBorder); g_lua.bindClassMemberFunction<UIWidget>("getImageClip", &UIWidget::getImageClip); g_lua.bindClassMemberFunction<UIWidget>("getImageOffsetX", &UIWidget::getImageOffsetX); g_lua.bindClassMemberFunction<UIWidget>("getImageOffsetY", &UIWidget::getImageOffsetY); g_lua.bindClassMemberFunction<UIWidget>("getImageOffset", &UIWidget::getImageOffset); g_lua.bindClassMemberFunction<UIWidget>("getImageWidth", &UIWidget::getImageWidth); g_lua.bindClassMemberFunction<UIWidget>("getImageHeight", &UIWidget::getImageHeight); g_lua.bindClassMemberFunction<UIWidget>("getImageSize", &UIWidget::getImageSize); g_lua.bindClassMemberFunction<UIWidget>("getImageRect", &UIWidget::getImageRect); g_lua.bindClassMemberFunction<UIWidget>("getImageColor", &UIWidget::getImageColor); g_lua.bindClassMemberFunction<UIWidget>("isImageFixedRatio", &UIWidget::isImageFixedRatio); g_lua.bindClassMemberFunction<UIWidget>("isImageSmooth", &UIWidget::isImageSmooth); g_lua.bindClassMemberFunction<UIWidget>("getImageBorderTop", &UIWidget::getImageBorderTop); g_lua.bindClassMemberFunction<UIWidget>("getImageBorderRight", &UIWidget::getImageBorderRight); g_lua.bindClassMemberFunction<UIWidget>("getImageBorderBottom", &UIWidget::getImageBorderBottom); g_lua.bindClassMemberFunction<UIWidget>("getImageBorderLeft", &UIWidget::getImageBorderLeft); g_lua.bindClassMemberFunction<UIWidget>("getImageTextureWidth", &UIWidget::getImageTextureWidth); g_lua.bindClassMemberFunction<UIWidget>("getImageTextureHeight", &UIWidget::getImageTextureHeight); g_lua.bindClassMemberFunction<UIWidget>("resizeToText", &UIWidget::resizeToText); g_lua.bindClassMemberFunction<UIWidget>("clearText", &UIWidget::clearText); g_lua.bindClassMemberFunction<UIWidget>("setText", &UIWidget::setText); g_lua.bindClassMemberFunction<UIWidget>("setTextAlign", &UIWidget::setTextAlign); g_lua.bindClassMemberFunction<UIWidget>("setTextOffset", &UIWidget::setTextOffset); g_lua.bindClassMemberFunction<UIWidget>("setTextWrap", &UIWidget::setTextWrap); g_lua.bindClassMemberFunction<UIWidget>("setTextAutoResize", &UIWidget::setTextAutoResize); g_lua.bindClassMemberFunction<UIWidget>("setTextVerticalAutoResize", &UIWidget::setTextVerticalAutoResize); g_lua.bindClassMemberFunction<UIWidget>("setTextHorizontalAutoResize", &UIWidget::setTextHorizontalAutoResize); g_lua.bindClassMemberFunction<UIWidget>("setFont", &UIWidget::setFont); g_lua.bindClassMemberFunction<UIWidget>("getText", &UIWidget::getText); g_lua.bindClassMemberFunction<UIWidget>("getDrawText", &UIWidget::getDrawText); g_lua.bindClassMemberFunction<UIWidget>("getTextAlign", &UIWidget::getTextAlign); g_lua.bindClassMemberFunction<UIWidget>("getTextOffset", &UIWidget::getTextOffset); g_lua.bindClassMemberFunction<UIWidget>("getTextWrap", &UIWidget::getTextWrap); g_lua.bindClassMemberFunction<UIWidget>("getFont", &UIWidget::getFont); g_lua.bindClassMemberFunction<UIWidget>("getTextSize", &UIWidget::getTextSize); // UILayout g_lua.registerClass<UILayout>(); g_lua.bindClassMemberFunction<UILayout>("update", &UILayout::update); g_lua.bindClassMemberFunction<UILayout>("updateLater", &UILayout::updateLater); g_lua.bindClassMemberFunction<UILayout>("applyStyle", &UILayout::applyStyle); g_lua.bindClassMemberFunction<UILayout>("addWidget", &UILayout::addWidget); g_lua.bindClassMemberFunction<UILayout>("removeWidget", &UILayout::removeWidget); g_lua.bindClassMemberFunction<UILayout>("disableUpdates", &UILayout::disableUpdates); g_lua.bindClassMemberFunction<UILayout>("enableUpdates", &UILayout::enableUpdates); g_lua.bindClassMemberFunction<UILayout>("setParent", &UILayout::setParent); g_lua.bindClassMemberFunction<UILayout>("getParentWidget", &UILayout::getParentWidget); g_lua.bindClassMemberFunction<UILayout>("isUpdateDisabled", &UILayout::isUpdateDisabled); g_lua.bindClassMemberFunction<UILayout>("isUpdating", &UILayout::isUpdating); g_lua.bindClassMemberFunction<UILayout>("isUIAnchorLayout", &UILayout::isUIAnchorLayout); g_lua.bindClassMemberFunction<UILayout>("isUIBoxLayout", &UILayout::isUIBoxLayout); g_lua.bindClassMemberFunction<UILayout>("isUIHorizontalLayout", &UILayout::isUIHorizontalLayout); g_lua.bindClassMemberFunction<UILayout>("isUIVerticalLayout", &UILayout::isUIVerticalLayout); g_lua.bindClassMemberFunction<UILayout>("isUIGridLayout", &UILayout::isUIGridLayout); // UIBoxLayout g_lua.registerClass<UIBoxLayout, UILayout>(); g_lua.bindClassMemberFunction<UIBoxLayout>("setSpacing", &UIBoxLayout::setSpacing); g_lua.bindClassMemberFunction<UIBoxLayout>("setFitChildren", &UIBoxLayout::setFitChildren); // UIVerticalLayout g_lua.registerClass<UIVerticalLayout, UIBoxLayout>(); g_lua.bindClassStaticFunction<UIVerticalLayout>("create", [](UIWidgetPtr parent){ return UIVerticalLayoutPtr(new UIVerticalLayout(parent)); } ); g_lua.bindClassMemberFunction<UIVerticalLayout>("setAlignBottom", &UIVerticalLayout::setAlignBottom); g_lua.bindClassMemberFunction<UIVerticalLayout>("isAlignBottom", &UIVerticalLayout::isAlignBottom); // UIHorizontalLayout g_lua.registerClass<UIHorizontalLayout, UIBoxLayout>(); g_lua.bindClassStaticFunction<UIHorizontalLayout>("create", [](UIWidgetPtr parent){ return UIHorizontalLayoutPtr(new UIHorizontalLayout(parent)); } ); g_lua.bindClassMemberFunction<UIHorizontalLayout>("setAlignRight", &UIHorizontalLayout::setAlignRight); // UIGridLayout g_lua.registerClass<UIGridLayout, UILayout>(); g_lua.bindClassStaticFunction<UIGridLayout>("create", [](UIWidgetPtr parent){ return UIGridLayoutPtr(new UIGridLayout(parent)); }); g_lua.bindClassMemberFunction<UIGridLayout>("setCellSize", &UIGridLayout::setCellSize); g_lua.bindClassMemberFunction<UIGridLayout>("setCellWidth", &UIGridLayout::setCellWidth); g_lua.bindClassMemberFunction<UIGridLayout>("setCellHeight", &UIGridLayout::setCellHeight); g_lua.bindClassMemberFunction<UIGridLayout>("setCellSpacing", &UIGridLayout::setCellSpacing); g_lua.bindClassMemberFunction<UIGridLayout>("setFlow", &UIGridLayout::setFlow); g_lua.bindClassMemberFunction<UIGridLayout>("setNumColumns", &UIGridLayout::setNumColumns); g_lua.bindClassMemberFunction<UIGridLayout>("setNumLines", &UIGridLayout::setNumLines); g_lua.bindClassMemberFunction<UIGridLayout>("getNumColumns", &UIGridLayout::getNumColumns); g_lua.bindClassMemberFunction<UIGridLayout>("getNumLines", &UIGridLayout::getNumLines); g_lua.bindClassMemberFunction<UIGridLayout>("getCellSize", &UIGridLayout::getCellSize); g_lua.bindClassMemberFunction<UIGridLayout>("getCellSpacing", &UIGridLayout::getCellSpacing); g_lua.bindClassMemberFunction<UIGridLayout>("isUIGridLayout", &UIGridLayout::isUIGridLayout); // UIAnchorLayout g_lua.registerClass<UIAnchorLayout, UILayout>(); g_lua.bindClassStaticFunction<UIAnchorLayout>("create", [](UIWidgetPtr parent){ return UIAnchorLayoutPtr(new UIAnchorLayout(parent)); } ); g_lua.bindClassMemberFunction<UIAnchorLayout>("removeAnchors", &UIAnchorLayout::removeAnchors); g_lua.bindClassMemberFunction<UIAnchorLayout>("centerIn", &UIAnchorLayout::centerIn); g_lua.bindClassMemberFunction<UIAnchorLayout>("fill", &UIAnchorLayout::fill); // UITextEdit g_lua.registerClass<UITextEdit, UIWidget>(); g_lua.bindClassStaticFunction<UITextEdit>("create", []{ return UITextEditPtr(new UITextEdit); } ); g_lua.bindClassMemberFunction<UITextEdit>("setCursorPos", &UITextEdit::setCursorPos); g_lua.bindClassMemberFunction<UITextEdit>("setSelection", &UITextEdit::setSelection); g_lua.bindClassMemberFunction<UITextEdit>("setCursorVisible", &UITextEdit::setCursorVisible); g_lua.bindClassMemberFunction<UITextEdit>("setChangeCursorImage", &UITextEdit::setChangeCursorImage); g_lua.bindClassMemberFunction<UITextEdit>("setTextHidden", &UITextEdit::setTextHidden); g_lua.bindClassMemberFunction<UITextEdit>("setValidCharacters", &UITextEdit::setValidCharacters); g_lua.bindClassMemberFunction<UITextEdit>("setShiftNavigation", &UITextEdit::setShiftNavigation); g_lua.bindClassMemberFunction<UITextEdit>("setMultiline", &UITextEdit::setMultiline); g_lua.bindClassMemberFunction<UITextEdit>("setEditable", &UITextEdit::setEditable); g_lua.bindClassMemberFunction<UITextEdit>("setSelectable", &UITextEdit::setSelectable); g_lua.bindClassMemberFunction<UITextEdit>("setSelectionColor", &UITextEdit::setSelectionColor); g_lua.bindClassMemberFunction<UITextEdit>("setSelectionBackgroundColor", &UITextEdit::setSelectionBackgroundColor); g_lua.bindClassMemberFunction<UITextEdit>("setMaxLength", &UITextEdit::setMaxLength); g_lua.bindClassMemberFunction<UITextEdit>("setTextVirtualOffset", &UITextEdit::setTextVirtualOffset); g_lua.bindClassMemberFunction<UITextEdit>("getTextVirtualOffset", &UITextEdit::getTextVirtualOffset); g_lua.bindClassMemberFunction<UITextEdit>("getTextVirtualSize", &UITextEdit::getTextVirtualSize); g_lua.bindClassMemberFunction<UITextEdit>("getTextTotalSize", &UITextEdit::getTextTotalSize); g_lua.bindClassMemberFunction<UITextEdit>("moveCursorHorizontally", &UITextEdit::moveCursorHorizontally); g_lua.bindClassMemberFunction<UITextEdit>("moveCursorVertically", &UITextEdit::moveCursorVertically); g_lua.bindClassMemberFunction<UITextEdit>("appendText", &UITextEdit::appendText); g_lua.bindClassMemberFunction<UITextEdit>("wrapText", &UITextEdit::wrapText); g_lua.bindClassMemberFunction<UITextEdit>("removeCharacter", &UITextEdit::removeCharacter); g_lua.bindClassMemberFunction<UITextEdit>("blinkCursor", &UITextEdit::blinkCursor); g_lua.bindClassMemberFunction<UITextEdit>("del", &UITextEdit::del); g_lua.bindClassMemberFunction<UITextEdit>("paste", &UITextEdit::paste); g_lua.bindClassMemberFunction<UITextEdit>("copy", &UITextEdit::copy); g_lua.bindClassMemberFunction<UITextEdit>("cut", &UITextEdit::cut); g_lua.bindClassMemberFunction<UITextEdit>("selectAll", &UITextEdit::selectAll); g_lua.bindClassMemberFunction<UITextEdit>("clearSelection", &UITextEdit::clearSelection); g_lua.bindClassMemberFunction<UITextEdit>("getDisplayedText", &UITextEdit::getDisplayedText); g_lua.bindClassMemberFunction<UITextEdit>("getSelection", &UITextEdit::getSelection); g_lua.bindClassMemberFunction<UITextEdit>("getTextPos", &UITextEdit::getTextPos); g_lua.bindClassMemberFunction<UITextEdit>("getCursorPos", &UITextEdit::getCursorPos); g_lua.bindClassMemberFunction<UITextEdit>("getMaxLength", &UITextEdit::getMaxLength); g_lua.bindClassMemberFunction<UITextEdit>("getSelectionStart", &UITextEdit::getSelectionStart); g_lua.bindClassMemberFunction<UITextEdit>("getSelectionEnd", &UITextEdit::getSelectionEnd); g_lua.bindClassMemberFunction<UITextEdit>("getSelectionColor", &UITextEdit::getSelectionColor); g_lua.bindClassMemberFunction<UITextEdit>("getSelectionBackgroundColor", &UITextEdit::getSelectionBackgroundColor); g_lua.bindClassMemberFunction<UITextEdit>("hasSelection", &UITextEdit::hasSelection); g_lua.bindClassMemberFunction<UITextEdit>("isEditable", &UITextEdit::isEditable); g_lua.bindClassMemberFunction<UITextEdit>("isSelectable", &UITextEdit::isSelectable); g_lua.bindClassMemberFunction<UITextEdit>("isCursorVisible", &UITextEdit::isCursorVisible); g_lua.bindClassMemberFunction<UITextEdit>("isChangingCursorImage", &UITextEdit::isChangingCursorImage); g_lua.bindClassMemberFunction<UITextEdit>("isTextHidden", &UITextEdit::isTextHidden); g_lua.bindClassMemberFunction<UITextEdit>("isShiftNavigation", &UITextEdit::isShiftNavigation); g_lua.bindClassMemberFunction<UITextEdit>("isMultiline", &UITextEdit::isMultiline); g_lua.registerClass<ShaderProgram>(); g_lua.registerClass<PainterShaderProgram>(); g_lua.bindClassMemberFunction<PainterShaderProgram>("addMultiTexture", &PainterShaderProgram::addMultiTexture); // ParticleEffect g_lua.registerClass<ParticleEffectType>(); g_lua.bindClassStaticFunction<ParticleEffectType>("create", []{ return ParticleEffectTypePtr(new ParticleEffectType); }); g_lua.bindClassMemberFunction<ParticleEffectType>("getName", &ParticleEffectType::getName); g_lua.bindClassMemberFunction<ParticleEffectType>("getDescription", &ParticleEffectType::getDescription); // UIParticles g_lua.registerClass<UIParticles, UIWidget>(); g_lua.bindClassStaticFunction<UIParticles>("create", []{ return UIParticlesPtr(new UIParticles); } ); g_lua.bindClassMemberFunction<UIParticles>("addEffect", &UIParticles::addEffect); #endif #ifdef FW_NET // Server g_lua.registerClass<Server>(); g_lua.bindClassStaticFunction<Server>("create", &Server::create); g_lua.bindClassMemberFunction<Server>("close", &Server::close); g_lua.bindClassMemberFunction<Server>("isOpen", &Server::isOpen); g_lua.bindClassMemberFunction<Server>("acceptNext", &Server::acceptNext); // Connection g_lua.registerClass<Connection>(); g_lua.bindClassMemberFunction<Connection>("getIp", &Connection::getIp); // Protocol g_lua.registerClass<Protocol>(); g_lua.bindClassStaticFunction<Protocol>("create", []{ return ProtocolPtr(new Protocol); }); g_lua.bindClassMemberFunction<Protocol>("connect", &Protocol::connect); g_lua.bindClassMemberFunction<Protocol>("disconnect", &Protocol::disconnect); g_lua.bindClassMemberFunction<Protocol>("isConnected", &Protocol::isConnected); g_lua.bindClassMemberFunction<Protocol>("isConnecting", &Protocol::isConnecting); g_lua.bindClassMemberFunction<Protocol>("getConnection", &Protocol::getConnection); g_lua.bindClassMemberFunction<Protocol>("setConnection", &Protocol::setConnection); g_lua.bindClassMemberFunction<Protocol>("send", &Protocol::send); g_lua.bindClassMemberFunction<Protocol>("recv", &Protocol::recv); g_lua.bindClassMemberFunction<Protocol>("setXteaKey", &Protocol::setXteaKey); g_lua.bindClassMemberFunction<Protocol>("getXteaKey", &Protocol::getXteaKey); g_lua.bindClassMemberFunction<Protocol>("generateXteaKey", &Protocol::generateXteaKey); g_lua.bindClassMemberFunction<Protocol>("enableXteaEncryption", &Protocol::enableXteaEncryption); g_lua.bindClassMemberFunction<Protocol>("enableChecksum", &Protocol::enableChecksum); // ProtocolHttp g_lua.registerClass<ProtocolHttp>(); g_lua.bindClassStaticFunction<ProtocolHttp>("create", []{ return ProtocolHttpPtr(new ProtocolHttp); }); g_lua.bindClassMemberFunction<ProtocolHttp>("connect", &ProtocolHttp::connect); g_lua.bindClassMemberFunction<ProtocolHttp>("disconnect", &ProtocolHttp::disconnect); g_lua.bindClassMemberFunction<ProtocolHttp>("send", &ProtocolHttp::send); g_lua.bindClassMemberFunction<ProtocolHttp>("recv", &ProtocolHttp::recv); // InputMessage g_lua.registerClass<InputMessage>(); g_lua.bindClassStaticFunction<InputMessage>("create", []{ return InputMessagePtr(new InputMessage); }); g_lua.bindClassMemberFunction<InputMessage>("setBuffer", &InputMessage::setBuffer); g_lua.bindClassMemberFunction<InputMessage>("skipBytes", &InputMessage::skipBytes); g_lua.bindClassMemberFunction<InputMessage>("getU8", &InputMessage::getU8); g_lua.bindClassMemberFunction<InputMessage>("getU16", &InputMessage::getU16); g_lua.bindClassMemberFunction<InputMessage>("getU32", &InputMessage::getU32); g_lua.bindClassMemberFunction<InputMessage>("getU64", &InputMessage::getU64); g_lua.bindClassMemberFunction<InputMessage>("getString", &InputMessage::getString); g_lua.bindClassMemberFunction<InputMessage>("peekU8", &InputMessage::peekU8); g_lua.bindClassMemberFunction<InputMessage>("peekU16", &InputMessage::peekU16); g_lua.bindClassMemberFunction<InputMessage>("peekU32", &InputMessage::peekU32); g_lua.bindClassMemberFunction<InputMessage>("peekU64", &InputMessage::peekU64); g_lua.bindClassMemberFunction<InputMessage>("decryptRsa", &InputMessage::decryptRsa); g_lua.bindClassMemberFunction<InputMessage>("getReadSize", &InputMessage::getReadSize); g_lua.bindClassMemberFunction<InputMessage>("getUnreadSize", &InputMessage::getUnreadSize); g_lua.bindClassMemberFunction<InputMessage>("getMessageSize", &InputMessage::getMessageSize); g_lua.bindClassMemberFunction<InputMessage>("eof", &InputMessage::eof); // OutputMessage g_lua.registerClass<OutputMessage>(); g_lua.bindClassStaticFunction<OutputMessage>("create", []{ return OutputMessagePtr(new OutputMessage); }); g_lua.bindClassMemberFunction<OutputMessage>("getBuffer", &OutputMessage::getBuffer); g_lua.bindClassMemberFunction<OutputMessage>("reset", &OutputMessage::reset); g_lua.bindClassMemberFunction<OutputMessage>("addU8", &OutputMessage::addU8); g_lua.bindClassMemberFunction<OutputMessage>("addU16", &OutputMessage::addU16); g_lua.bindClassMemberFunction<OutputMessage>("addU32", &OutputMessage::addU32); g_lua.bindClassMemberFunction<OutputMessage>("addU64", &OutputMessage::addU64); g_lua.bindClassMemberFunction<OutputMessage>("addString", &OutputMessage::addString); g_lua.bindClassMemberFunction<OutputMessage>("addPaddingBytes", &OutputMessage::addPaddingBytes); g_lua.bindClassMemberFunction<OutputMessage>("encryptRsa", &OutputMessage::encryptRsa); g_lua.bindClassMemberFunction<OutputMessage>("getMessageSize", &OutputMessage::getMessageSize); g_lua.bindClassMemberFunction<OutputMessage>("setMessageSize", &OutputMessage::setMessageSize); g_lua.bindClassMemberFunction<OutputMessage>("getWritePos", &OutputMessage::getWritePos); g_lua.bindClassMemberFunction<OutputMessage>("setWritePos", &OutputMessage::setWritePos); #endif #ifdef FW_SOUND // SoundManager g_lua.registerSingletonClass("g_sounds"); g_lua.bindSingletonFunction("g_sounds", "preload", &SoundManager::preload, &g_sounds); g_lua.bindSingletonFunction("g_sounds", "play", &SoundManager::play, &g_sounds); g_lua.bindSingletonFunction("g_sounds", "getChannel", &SoundManager::getChannel, &g_sounds); g_lua.bindSingletonFunction("g_sounds", "stopAll", &SoundManager::stopAll, &g_sounds); g_lua.bindSingletonFunction("g_sounds", "enableAudio", &SoundManager::enableAudio, &g_sounds); g_lua.bindSingletonFunction("g_sounds", "disableAudio", &SoundManager::disableAudio, &g_sounds); g_lua.bindSingletonFunction("g_sounds", "setAudioEnabled", &SoundManager::setAudioEnabled, &g_sounds); g_lua.bindSingletonFunction("g_sounds", "isAudioEnabled", &SoundManager::isAudioEnabled, &g_sounds); g_lua.registerClass<SoundSource>(); g_lua.registerClass<CombinedSoundSource, SoundSource>(); g_lua.registerClass<StreamSoundSource, SoundSource>(); g_lua.registerClass<SoundChannel>(); g_lua.bindClassMemberFunction<SoundChannel>("play", &SoundChannel::play); g_lua.bindClassMemberFunction<SoundChannel>("stop", &SoundChannel::stop); g_lua.bindClassMemberFunction<SoundChannel>("enqueue", &SoundChannel::enqueue); g_lua.bindClassMemberFunction<SoundChannel>("enable", &SoundChannel::enable); g_lua.bindClassMemberFunction<SoundChannel>("disable", &SoundChannel::disable); g_lua.bindClassMemberFunction<SoundChannel>("setGain", &SoundChannel::setGain); g_lua.bindClassMemberFunction<SoundChannel>("getGain", &SoundChannel::getGain); g_lua.bindClassMemberFunction<SoundChannel>("setEnabled", &SoundChannel::setEnabled); g_lua.bindClassMemberFunction<SoundChannel>("isEnabled", &SoundChannel::isEnabled); g_lua.bindClassMemberFunction<SoundChannel>("getId", &SoundChannel::getId); #endif #ifdef FW_SQL // Database g_lua.registerClass<Database>(); g_lua.bindClassMemberFunction<Database>("getDatabaseEngine", &Database::getDatabaseEngine); g_lua.bindClassMemberFunction<Database>("isConnected", &Database::isConnected); g_lua.bindClassMemberFunction<Database>("getStringComparer", &Database::getStringComparer); g_lua.bindClassMemberFunction<Database>("getUpdateLimiter", &Database::getUpdateLimiter); g_lua.bindClassMemberFunction<Database>("getLastInsertedRowID", &Database::getLastInsertedRowID); g_lua.bindClassMemberFunction<Database>("escapeString", &Database::escapeString); //g_lua.bindClassMemberFunction<Database>("escapeBlob", &Database::escapeBlob); // need to write a cast for this type to work (if needed) // DBQuery /* (not sure if this class will work as a luafunction) g_lua.registerClass<DBQuery>(); g_lua.bindClassStaticFunction<DBQuery>("create", []{ return DBQuery(); }); g_lua.bindClassMemberFunction<DBQuery>("append", &DBQuery::append); g_lua.bindClassMemberFunction<DBQuery>("set", &DBQuery::set); */ // DBResult g_lua.registerClass<DBResult>(); g_lua.bindClassMemberFunction<DBResult>("getDataInt", &DBResult::getDataInt); g_lua.bindClassMemberFunction<DBResult>("getDataLong", &DBResult::getDataLong); g_lua.bindClassMemberFunction<DBResult>("getDataString", &DBResult::getDataString); //g_lua.bindClassMemberFunction<DBResult>("getDataStream", &DBResult::getDataStream); // need to write a cast for this type to work (if needed) g_lua.bindClassMemberFunction<DBResult>("getRowCount", &DBResult::getRowCount); g_lua.bindClassMemberFunction<DBResult>("free", &DBResult::free); g_lua.bindClassMemberFunction<DBResult>("next", &DBResult::next); // MySQL g_lua.registerClass<DatabaseMySQL, Database>(); g_lua.bindClassStaticFunction<DatabaseMySQL>("create", []{ return DatabaseMySQLPtr(new DatabaseMySQL); }); g_lua.bindClassMemberFunction<DatabaseMySQL>("connect", &DatabaseMySQL::connect); g_lua.bindClassMemberFunction<DatabaseMySQL>("beginTransaction", &DatabaseMySQL::beginTransaction); g_lua.bindClassMemberFunction<DatabaseMySQL>("rollback", &DatabaseMySQL::rollback); g_lua.bindClassMemberFunction<DatabaseMySQL>("commit", &DatabaseMySQL::commit); g_lua.bindClassMemberFunction<DatabaseMySQL>("executeQuery", &DatabaseMySQL::executeQuery); g_lua.bindClassMemberFunction<DatabaseMySQL>("storeQuery", &DatabaseMySQL::storeQuery); // MySQLResult g_lua.registerClass<MySQLResult>(); g_lua.bindClassMemberFunction<MySQLResult>("getDataInt", &MySQLResult::getDataInt); g_lua.bindClassMemberFunction<MySQLResult>("getDataLong", &MySQLResult::getDataLong); g_lua.bindClassMemberFunction<MySQLResult>("getDataString", &MySQLResult::getDataString); //g_lua.bindClassMemberFunction<MySQLResult>("getDataStream", &MySQLResult::getDataStream); // need to write a cast for this type to work (if needed) g_lua.bindClassMemberFunction<MySQLResult>("getRowCount", &MySQLResult::getRowCount); g_lua.bindClassMemberFunction<MySQLResult>("free", &MySQLResult::free); g_lua.bindClassMemberFunction<MySQLResult>("next", &MySQLResult::next);
  14. Queria saber como faço para colocar aquela barra de spells, igual a do servers de pokemon, Gostaria muito de colocar em meu OT 9.60, alguem pode me ajudar? Ja baixei o spellbar e ja coloquei na pasta Mods, mais nao funciona, tenho que fazer algo a mais? Colocar alguma script no meu server algo parecido, sei la..
  15. OTClient Duvida Backgroud fixed

    Mudei a imagem do fundo do cliente, porém ela não parece completamente, corta uns pedaços o que eu faço? @Edited. Resolvido: Em modules\client_background abra background.OTUI. e mude: image-fixed-ratio: true para image-fixed-ratio: false
  16. OTClient Error

    Gente as minhas windows quando eu arrasto pela tela, o conteudo dela começa se mexer também, começa a ficar tudo misturado, troca tudo de lugar, alguém sabe como resolver isso? Acho que é algo no anchors e tal, que não manjo direito :S, normal fica tudo na linha certinho, mas eu arrasto a janela e fica assim :S [ATTACH]5455[/ATTACH]
  17. OTClient Como editar inventario

    Eu gostaria de editar o meu inventario igual ao dessa imagem, alguém poderia falar em que lugares tenho que editar, onde tenho que colocar a foto de fundo... porque a localização dos slots já achei.. Vlw :33 [ATTACH]5450[/ATTACH]
  18. OTClient [MOD]CandyBot

    O CandyBot é um mod do otclient que funciona como um bot comum, ele não foi feito por mim eu apenas estou trazendo ele pra vocês, ele foi feito pelo BeniS. Instalação Você deve ir a página do github do candybot e clicar no botão ZIP, você estará baixando o mod compactado, descompacte e transfira a pasta do CandyBot para a pasta mods do seu otclient. Screenshots Autores BeniS (Ben Dol) - [email protected] Alexandre do Amaral Severino - [email protected]
  19. OTClient Duas dúvidas

    Como faço pra alterar essa descrição que aparece no canto inferior direito do client: [ATTACH=CONFIG]5390[/ATTACH] ? E também queria saber como faço pra alterar o nome da janela do client... ? Obrigado desde já.
  20. OTClient Algumas dúvidas do OTClient

    Como faço pra: - Tirar música do client - Na janelinha de enter game tirar a opção de protocolo e deixar sempre 8.54, tirar a opção de alterar a porta e deixar sempre 7171 e tirar a opção de digitar o ip e deixar um fixo - Tirar os botões Terminal, Module Manager e Spell List que ficam no topo do client - Mudar nome do Default pra MSGs e nome do Server Log pra Logs Alguém pode me ajudar? Obrigado.
×