[Script] Radio Button |
Jp_darkuss « Citoyen » 1596117120000
| 2 | ||
Hola, buenos dias, como o tempo passa rápido não. Eis-me aqui de novo com um novo script, dessa vez um radio button! ;-; Na verdade, eu ia por tudo no meu último tópico (o check box e radio button), mas esqueci de pôr no título que era as duas coisas, e fui obrigado a criar um novo. Espero que o countdown do Fórum já tenha acabado ;-; Foi mal Sentinelas, mas esquecer é esquecer né? Kkkk Radio Buttons funcionam de forma parecida, mas tem uma diferença crucial. Primeira coisas é que elas precisam estar atreladas a uma classe, pois quando um é selecionada, as outras da mesma classe são desselecionadas, ou seja, elas servem para "questões de única escolha", podem tanto assumir um Sim ou Não, mas podem ser usadas para assuntos variados! Devido a serem parecidos, os scripts também tem uma mecânica parecida. Devido a isso também, esse script não está previsto a atualizações já que estou baseando no outro para deixar mais completo! Você pode pegar o script nesse site: Radio Button by Jp_darkuss#4806 Versão linha única Code Lua 1 --[[ Radio Button Made by Jp_darkuss#4806 at 30/07, have fun! :) ]] local radio= {} do radio.memory= {} radio.color= function(c) if c then return " color='"..c.."'" else return "" end end radio.add= function(class, name, ids, player, x, y, selected, decoration, static) x, y= x or 0, y or 0 decoration= decoration or {} selected= selected or false static= static or false if player then radio.memory[player][name]= { class= class, ids= ids, selected= selected, color= decoration.color } ui.addTextArea(ids[1], " ", player, x, y, 3, 3, decoration.background, decoration.border, 1, static) if selected then ui.addTextArea(ids[2], "<font size='10'"..radio.color(decoration.color)..">•</font>", player, x - 3, y - 7, 20, 20, 0, 0, 1, static) else ui.addTextArea(ids[2], "<a href='event:class("..class.."), name("..name..")'> </a>", player, x - 3, y - 7, 20, 20, 0, 0, 1, static) end else for _player, _ in next, tfm.get.room.playerList do radio.memory[_player][name]= { class= class, ids= ids, selected= selected, color= decoration.color } ui.addTextArea(ids[1], " ", _player, x, y, 3, 3, decoration.background, decoration.border, 1, static) if selected then ui.addTextArea(ids[2], "<font size='10'"..radio.color(decoration.color)..">•</font>", _player, x - 3, y - 7, 20, 20, 0, 0, 1, static) else ui.addTextArea(ids[2], "<a href='event:class("..class.."), name("..name..")'> </a>", _player, x - 3, y - 7, 20, 20, 0, 0, 1, static) end end end end radio.remove= function(class, player) for pos, _ in next, radio.memory[player] do if radio.memory[player][pos].class== class then ui.removeTextArea(radio.memory[player][pos].ids[1], player) ui.removeTextArea(radio.memory[player][pos].ids[2], player) end end end radio.select= function(player, callback) if callback:match("class") and callback:match("name") then local class= callback:match("class%((.-)%)") local name= callback:match("name%((.-)%)") for pos, _ in next, radio.memory[player] do if radio.memory[player][pos].class== class then if pos== name then ui.updateTextArea(radio.memory[player][pos].ids[2], "<font size='10'"..radio.color(radio.memory[player][pos].color)..">•</font>", player) radio.memory[player][pos].selected= true else ui.updateTextArea(radio.memory[player][pos].ids[2], "<a href='event:class("..class.."), name("..pos..")'> </a>", player) radio.memory[player][pos].selected= false end end end end end radio.isSelected= function(class, player) for pos, _ in next, radio.memory[player] do if radio.memory[player][pos].class== class and radio.memory[player][pos].selected then return pos end end end radio.new= function(player) radio.memory[player]= {} end radio.init= function() for player, _ in next, tfm.get.room.playerList do radio.memory[player]= {} end end end Primeiro chame a função radio.init para inicializar o script, senão haverá erros: Code Lua 1 2 -- ... script Se houver a possibilidade de uma nova pessoa entrar na sala, use também radio.new, chamando no evento newPlayer e passando player como parâmetro: Code Lua 1 2 3 eventNewPlayer= function(player) Por último mas não menos importante, você deve chamar a função radio.select dentro do evento textAreaCallback passar player e callback como parâmetro: Code Lua 1 2 3 eventTextAreaCallback= function(_, player, callback) Vamos ver os métodos e seus funcionamentos! Cria um radio button Parâmetros: - class (string): a classe a qual seu radio button pertence - name (string): o nome de seu radio button (não o repita em nenhum outro ao mesmo tempo! Mesmo em classe diferente) - ids (table): dois ids numéricos que servem para gerar os radio buttons através de textAreas, não os repita em nenhum outro lugar! - player (string): o player que deverá ver o radio button (nil para todos os players) - x (string): a posição do radio button no eixo X (valor padrão: 0) - y (string): a posição do seu radio button no eixo Y (valor padrão: 0) - selected (boolean): se o radio button deve ou não estar selecionado (valor padrão: false) - decoration (table): valores que implicam a aparência do radio button, podendo ter as propriedades background (hexadecimal 0xcode), border (hexadecimal 0xcode) e color (hexadecimal code) (valores padrão: a aparência básica da textArea) - static (boolean): se o radio button deve ou não ficar estático (valor padrão: false) Code Lua 1 2 3 4 5 6 7 8 9 10 11 --classes iguais geram uma co-relação Code Lua 1 2 3 4 5 6 7 8 9 10 11 --duas classes, elas não se misturam! Code Lua 1 2 3 4 5 6 7 8 9 10 11 --agora com classes diferentes e com radio buttons sozinhos, o comportamento é diferente! Remove todos os radio buttons da classe inserida Parâmetros: - class (string): a classe que quer remover da tela - player (string): a qual player se refere Code Lua 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 local _, adm= pcall(nil) Verifica qual radio button de uma determinada classe está selecionada Parâmetros: - class (string): a classe que quer verificar - player (string): a qual player se refere Retorna: uma string, o nome da radio button Code Lua 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 local _, adm= pcall(nil) Como o script não está previsto para atualizações, se encontrarem um bug me notifiquem para eu consertar no arquivo original! Mais uma vez obrigado, e espero que lembre de pôr no mesmo tópico na próxima vez kkkk Deus abençoe, flw! Dernière modification le 1596131940000 |
Gamedroit « Citoyen » 1596183120000
| 1 | ||
Eu acho que o Radio Button é basicamente um checkbox com outro comportamento, gostei de ver que aderiu a dica que dei sobre indexar as funções soltas. Sobre o que eu quero dizer é que em vez de criar dois scripts para a mesma funcionalidade geral (Caixas de marcação) você poderia ter implementado tudo isso em um script que se divide em duas seções. Tome como exemplo ui.addPopup, ele tem o argumento "tipo" que dependendo do ID usado pode variar o comportamento da pop-up. No geral, eu gostei, parabéns! Dernière modification le 1596183180000 |
Jp_darkuss « Citoyen » 1596201480000
| 0 | ||
Contistente3 a dit : Vlw amigo! :) Nesse caso, eu concordo, mas não sei se ficaria legal. Obs: eu ia pôr junto os scripts, não sei se da forma que disse mas ia, só que esqueci de botar no título que era duas coisas aí criei esse kkkkkkkkkkk @edit: eu queria que as textAreas e Popups do Transformice aceitassem strings como id, seria mais fácil para manipular elas ;-; Dernière modification le 1596201720000 |
Gamedroit « Citoyen » 1596238320000
| 0 | ||
Jp_darkuss a dit : Na verdade ainda é possível fazer as textareas aceitarem strings como id, vou fazer e te envio aqui na mensagem privada do fórum. |