×

Langue

Fermer
Atelier 801
  • Forums
  • Dev Tracker
  • Connexion
    • English Français
      Português do Brasil Español
      Türkçe Polski
      Magyar Română
      العربية Skandinavisk
      Nederlands Deutsch
      Bahasa Indonesia Русский
      中文 Filipino
      Lietuvių kalba 日本語
      Suomi עברית
      Italiano Česky
      Hrvatski Slovensky
      Български Latviešu
      Estonian
  • Langue
  • Forums
  • /
  • Transformice
  • /
  • Modules
  • /
  • [Script] Radio Button
[Script] Radio Button
Jp_darkuss
« Citoyen »
1596117120000
    • Jp_darkuss#4806
    • Profil
    • Derniers messages
#1
  2
  • Introdução
  • Inicialização
  • Tree
  • ...

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
radio.init()

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)
radio.new(player)
end

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)
radio.select(player, callback)
end

Vamos ver os métodos e seus funcionamentos!

  • (Method) radio.add(class, name, ids, player [, x, y, selected, decoration, static]) => void
    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
    eventTextAreaCallback= function(_, player, callback)
    radio.select(player, callback)
    end
    do
    radio.init()
    radio.add("main", "a", {0, 1}, nil, 200, 200, true)
    radio.add("main", "b", {2, 3}, nil, 220, 200)
    radio.add("main", "c", {4, 5}, nil, 200, 220)
    radio.add("main", "d", {6, 7}, nil, 220, 220)
    end

    Code Lua

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    --duas classes, elas não se misturam!
    eventTextAreaCallback= function(_, player, callback)
    radio.select(player, callback)
    end
    do
    radio.init()
    radio.add("main", "a", {0, 1}, nil, 200, 200, true)
    radio.add("main", "b", {2, 3}, nil, 220, 200)
    radio.add("after", "c", {4, 5}, nil, 200, 220, true)
    radio.add("after", "d", {6, 7}, nil, 220, 220)
    end

    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!
    eventTextAreaCallback= function(_, player, callback)
    radio.select(player, callback)
    end
    do
    radio.init()
    radio.add("a", "a", {0, 1}, nil, 200, 200)
    radio.add("b", "b", {2, 3}, nil, 220, 200)
    radio.add("c", "c", {4, 5}, nil, 200, 220)
    radio.add("d", "d", {6, 7}, nil, 220, 220)
    end

  • (Method) radio.remove(class, player) => void
    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)
    adm= adm:match(".-#%d+")
    local count= 0
    eventTextAreaCallback= function(_, player, callback)
    radio.select(player, callback)
    end
    eventLoop= function()
    count= count + 500
    if count== 5000 then
    radio.remove("main", adm)
    end
    end
    radio.init()
    radio.add("main", "a", {0, 1}, adm, 200, 200, true)
    radio.add("main", "b", {2, 3}, adm, 220, 200)

  • (Method) radio.isSelected(class, player) => string
    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)
    adm= adm:match(".-#%d+")
    eventTextAreaCallback= function(_, player, callback)
    radio.select(player, callback)
    end
    eventLoop= function()
    ui.updateTextArea(6, "O radio button "..radio.isSelected("main", adm).." está selecionado!", adm)
    end
    do
    radio.init()
    radio.add("main", "A", {0, 1}, adm, 200, 200, true)
    radio.add("main", "B", {2, 3}, adm, 220, 200)
    radio.add("main", "C", {4, 5}, adm, 240, 200)
    ui.addTextArea(6, "O radio button A está selecionado!", adm)
    end

  • 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
      • Gamedroit#3347
      • Profil
      • Derniers messages
      • Tribu
    #2
      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
      • Jp_darkuss#4806
      • Profil
      • Derniers messages
    #3
      0
    Contistente3 a dit :
    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!

    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
      • Gamedroit#3347
      • Profil
      • Derniers messages
      • Tribu
    #4
      0
    Jp_darkuss a dit :
    Contistente3 a dit :
    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!

    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 ;-;

    Na verdade ainda é possível fazer as textareas aceitarem strings como id, vou fazer e te envio aqui na mensagem privada do fórum.
    • Forums
    • /
    • Transformice
    • /
    • Modules
    • /
    • [Script] Radio Button
    © Atelier801 2018

    Equipe Conditions Générales d'Utilisation Politique de Confidentialité Contact

    Version 1.27