O TEMA DO FÓRUM ESTÁ EM MANUTENÇÃO. FEEDBACKS AQUI: ACESSAR

Ringo Window Show Variable (em breve atualização)

Iniciado por Rhyan, 17/05/2020 às 11:39

17/05/2020 às 11:39 Última edição: 20/05/2020 às 06:03 por Rhyan
Ringo Window Show Variable
Opa, hi, hello, hola, ohayo, povo! indo direto ao assunto, basicamente essa Window mostra uma variável de seu desejo.
Pode ser uma string (texto), integer (número), etc.

Para alterar a variável mostrada, a instrução está no script.

Termos de uso estão no script (e muito bem detalhados).

Enfim, embora eu realmente ache que vocês já saibam, eu irei dar uma breve explicação de como colocar uma string (texto) em uma variável pelo comando "Controle de Variável".


Considerações:

- A caixa suporta apenas 13 caracteres, contando com espaços (maiúsculo).

Spoiler



OBS: PRECISA DAS ASPAS!!!
[close]

Script na Pastebin
Script no GitHub.

OBS: Desculpa por ter colocado o link puro, parece que o comando "[url]" não está funcionando muito bem para os links...


por: Rhyan.
^~^) -Rhyan.

Funciona sim  :XD:
Script no github

[url=https://github.com/Rhyan-crypto/Rhyan-RGSS3-Scripts/blob/master/Ringo%20Window%20Show%20Variable]Script no github[/url]

Parabéns por estar melhorando nos códigos! Eu gostaria de poder manipular a posição da janela, tem um ponto ai para você implementar no código.
Se quiser umas dicas no code, só avisar  :XD:

Citação de: Raizen online 17/05/2020 às 13:48
Funciona sim  :XD:
Script no github

[url=https://github.com/Rhyan-crypto/Rhyan-RGSS3-Scripts/blob/master/Ringo%20Window%20Show%20Variable]Script no github[/url]

Parabéns por estar melhorando nos códigos! Eu gostaria de poder manipular a posição da janela, tem um ponto ai para você implementar no código.
Se quiser umas dicas no code, só avisar  :XD:

Poxa, quando eu testava ficava indo para um site "%20%", mas esse deu certo... :sera:

Que bom que gostou, Raizen! Vou implementar isso. Acho que vou fazer algo como "1, 2, 3 e 4", onde cada um vai ser responsável por um lado :sera:.

Muito obrigado mesmo, Raizen!
^~^) -Rhyan.

17/05/2020 às 15:07 #3 Última edição: 17/05/2020 às 15:08 por Gabriel
Legal, já conseguiu fazer o código bem compacto, mas você repetiu mais uma vez os erros que já haviam sido explanados nos tópicos anteriores.

O update da Window está constantemente chamando o método refresh, que apaga e desenha todo o conteúdo da janela, mesmo quando o valor da variável se mantêm o mesmo. Isso é desnecessário tal como o método main_configs também o é. Por exemplo, dá para substituir cinco linhas do seu código por apenas isso no initialize da Window:
self.opacity = Ringo_Config::Opacidade


Também não vejo muito sentido em incluir o módulo que é usado para configurações da Window na Scene. O ideal seria incluí-lo diretamente na classe da Window, ou nem incluí-lo, já que você o usa para pegar apenas dois parâmetros.


17/05/2020 às 15:32 #4 Última edição: 17/05/2020 às 15:36 por Rhyan
Citação de: Gabriel online 17/05/2020 às 15:07
Legal, já conseguiu fazer o código bem compacto, mas você repetiu mais uma vez os erros que já haviam sido explanados nos tópicos anteriores.

O update da Window está constantemente chamando o método refresh, que apaga e desenha todo o conteúdo da janela, mesmo quando o valor da variável se mantêm o mesmo. Isso é desnecessário tal como o método main_configs também o é. Por exemplo, dá para substituir cinco linhas do seu código por apenas isso no initialize da Window:
self.opacity = Ringo_Config::Opacidade


Também não vejo muito sentido em incluir o módulo que é usado para configurações da Window na Scene. O ideal seria incluí-lo diretamente na classe da Window, ou nem incluí-lo, já que você o usa para pegar apenas dois parâmetros.

Desculpa pela demora para responder, eu estava resolvendo o erro. Eu dei uma olhada no script que o @Jorge_Maker (inclusive, obrigadão, cara!) e vi uma forma de fazer (pelo menos, parece ter resolvido).
Spoiler

class Ringo_Show_Variable < Window_Base
  def initialize(var)
    super(0, 0, 150, 50) #x, y, width, height
    refresh
    @var = var
  end
  
  def update
    super
    refresh if need_refresh?
  end
  
  def need_refresh?
    return true ||
    @last_text != @var
  end
  
  def refresh
    contents.clear
    draw_text_ex(0, 0, $game_variables[@var.to_i]) #<- Desenhando o valor da variável.
    @last_text = @var
  end
end

[close]

Quanto ao método, antes realmente era desnecessário, mas acredito que ele será necessário para uma próxima atualização, então mantirei, mesma coisa para o main_configs, que também será necessário, mas irei transferir para a Window.

Muito obrigado, Gabriel!
^~^) -Rhyan.

17/05/2020 às 16:55 #5 Última edição: 17/05/2020 às 16:59 por Brandt
Opa, mais um, maneiro \o

Algumas considerações:

  • Nos seus termos de uso, você pede para incluir um link para https://centrorpg.com/index.php?action=profile;area=forumprofile. Esse link redireciona o usuário para a página de edição de seu próprio perfil, e não para o seu (Rhyan) perfil em particular. Se você quer que ele vá para o seu perfil aqui no fórum, use https://centrorpg.com/index.php?action=profile;u=9990 (o u=9990 indica que é pra mostrar as informações do usuário ID 9990, no caso, sua pessoa).
    Ainda na mesma seção, também desencorajo que você inclua seu primeiro nome real, especialmente se o email que você usa tem seu sobrenome (sim, membros da staff vêem seu email). Pode não parecer, mas a internet é um lugar perigoso. Ah, e por favor, decida-se com um pseudônimo só xd

  • Do ponto de vista de arquitetura da solução: não vejo vantagem em fixar uma variável nas configurações do script (por quê não ter uma variável que guarda uma lista de variáveis pra serem mostradas? Ficaria bem mais flexível! Fica o desafio). Também não entendi porque não dá pra reposicionar a janela, mas vi que já abordaram isso.

Agora o código em si.

Primeiro, isto:

include Ringo_Config


O include em Ruby serve um propósito específico, e simplificar o nome de constantes não é um deles (apesar de alguns tutoriais e aulas implicarem que sim :feelsbatman:). O include, assim como o extend, têm um propósito muito mais alinhado com a herança (como conceito de programação orientada a objetos), tanto é que usá-lo altera a propriedade ancestors de uma classe. Então como regra de polegar: Não inclua um módulo A na classe B a menos que você possa de alguma forma dizer que "B é um A" ou "B faz A". No seu caso, é evidente que a classe Scene_Map não deveria incluir o módulo de configuração.

  def main_configs
    @ringo_show_variable.opacity = Opacidade
  end


Como o Gabriel comentou, esse método não é necessário. Outro problema com ele é que o nome não explica direito o que ele faz e parece mais uma propriedade que qualquer outra coisa. Talvez setup_variable_window fosse mais apropriado. Mas o ponto principal é que na verdade você não precisa de um método separado pra isso, faça-o direto no create_code_window (aliás, podia melhorar o nome dessa função também). Se muito, mantenha o método (renomeando, no mínimo) e chame-o no create. Não acho que seja necessário, independente do que você pretenda fazer no futuro, porque o papel do create já é criar a janela e configurar ela.

  def need_refresh?
    return true ||
    @last_text != @var
  end


Nooooo, this won't work.

Leia a expressão dentro do método: "Verdadeiro ou @last_text é diferente de @var". Mas oras, Verdadeiro ou qualquer coisa é sempre verdadeiro! Isso é uma identidade na álgebra booleana, que trata dos valores Verdadeiro e Falso e das operações E (&&) e OU (||):



Tabelinha de identidades da álgebra booleana pra usar de referência, basta trocar o "+" por "||" e a multiplicação por "&&", bom como 0 por false e 1 por true. O barramento em cima de uma variável indica "Não".

Outro problema com isso é que você está tratando "@var" como se fosse o texto desenhado, quando na verdade é o ID da variável. Da forma como está, isso vai atualizar a todo frame. Se tirar o "true ||", não vai atualizar nunca, porque você nunca verifica se o valor da variável mudou, e sim se a variável mudou (percebe a diferença?)

Acho que é isso que consigo contribuir aqui, boa sorte com os scripts \o
~ Masked

Brandt (coloquei em spoiler para não ficar muito grande)
Spoiler

Citação de: Brandt online 17/05/2020 às 16:55
Opa, mais um, maneiro \o

Algumas considerações:

  • Nos seus termos de uso, você pede para incluir um link para https://centrorpg.com/index.php?action=profile;area=forumprofile. Esse link redireciona o usuário para a página de edição de seu próprio perfil, e não para o seu (Rhyan) perfil em particular. Se você quer que ele vá para o seu perfil aqui no fórum, use https://centrorpg.com/index.php?action=profile;u=9990 (o u=9990 indica que é pra mostrar as informações do usuário ID 9990, no caso, sua pessoa).
    Ainda na mesma seção, também desencorajo que você inclua seu primeiro nome real, especialmente se o email que você usa tem seu sobrenome (sim, membros da staff vêem seu email). Pode não parecer, mas a internet é um lugar perigoso. Ah, e por favor, decida-se com um pseudônimo só xd

  • Do ponto de vista de arquitetura da solução: não vejo vantagem em fixar uma variável nas configurações do script (por quê não ter uma variável que guarda uma lista de variáveis pra serem mostradas? Ficaria bem mais flexível! Fica o desafio). Também não entendi porque não dá pra reposicionar a janela, mas vi que já abordaram isso.

Agora o código em si.

Primeiro, isto:

include Ringo_Config


O include em Ruby serve um propósito específico, e simplificar o nome de constantes não é um deles (apesar de alguns tutoriais e aulas implicarem que sim :feelsbatman:). O include, assim como o extend, têm um propósito muito mais alinhado com a herança (como conceito de programação orientada a objetos), tanto é que usá-lo altera a propriedade ancestors de uma classe. Então como regra de polegar: Não inclua um módulo A na classe B a menos que você possa de alguma forma dizer que "B é um A" ou "B faz A". No seu caso, é evidente que a classe Scene_Map não deveria incluir o módulo de configuração.

  def main_configs
    @ringo_show_variable.opacity = Opacidade
  end


Como o Gabriel comentou, esse método não é necessário. Outro problema com ele é que o nome não explica direito o que ele faz e parece mais uma propriedade que qualquer outra coisa. Talvez setup_variable_window fosse mais apropriado. Mas o ponto principal é que na verdade você não precisa de um método separado pra isso, faça-o direto no create_code_window (aliás, podia melhorar o nome dessa função também). Se muito, mantenha o método (renomeando, no mínimo) e chame-o no create. Não acho que seja necessário, independente do que você pretenda fazer no futuro, porque o papel do create já é criar a janela e configurar ela.

  def need_refresh?
    return true ||
    @last_text != @var
  end


Nooooo, this won't work.

Leia a expressão dentro do método: "Verdadeiro ou @last_text é diferente de @var". Mas oras, Verdadeiro ou qualquer coisa é sempre verdadeiro! Isso é uma identidade na álgebra booleana, que trata dos valores Verdadeiro e Falso e das operações E (&&) e OU (||):



Tabelinha de identidades da álgebra booleana pra usar de referência, basta trocar o "+" por "||" e a multiplicação por "&&", bom como 0 por false e 1 por true. O barramento em cima de uma variável indica "Não".

Outro problema com isso é que você está tratando "@var" como se fosse o texto desenhado, quando na verdade é o ID da variável. Da forma como está, isso vai atualizar a todo frame. Se tirar o "true ||", não vai atualizar nunca, porque você nunca verifica se o valor da variável mudou, e sim se a variável mudou (percebe a diferença?)

Acho que é isso que consigo contribuir aqui, boa sorte com os scripts \o
[close]
Opa Brandt! Desculpa pela demora para responder. Eu sinceramente pensava que redirecionava ao meu perfil... :sera:

Basicamente, não. Muito obrigado, mas eu troco de pseudônimo por um motivo pessoal, com todo o respeito. Quanto ao meu nome, é um nome comum e eu abreviei meu sobrenome, então não estou muito preocupado, e o email que usei é do meu irmão, logo, obviamente os nomes serão diferentes.

Enfim, muito obrigado por responder! Desculpa qualquer coisa. :ok:
^~^) -Rhyan.

Entendo seus pontos e discordo cordialmente (i.e., basicamente, não). Mas o ponto principal da minha resposta não era nem a sua segurança online nem a troca de nicknames.

Se puder ler a resposta novamente a partir de "Do ponto de vista de arquitetura da solução", você provavelmente consegue tirar algo útil para melhorar esse e futuros scripts.
~ Masked

Citação de: Brandt online 19/05/2020 às 07:58
Entendo seus pontos e discordo cordialmente (i.e., basicamente, não). Mas o ponto principal da minha resposta não era nem a sua segurança online nem a troca de nicknames.

Se puder ler a resposta novamente a partir de "Do ponto de vista de arquitetura da solução", você provavelmente consegue tirar algo útil para melhorar esse e futuros scripts.

Eu apenas respondi as primeiras respostas do seu tópico, respostas que me chamaram atenção por serem consideradas por mim pessoais. Brandt, mesmo que eu não tenha respondido todo seu tópico, não quer dizer que eu não o absorvi, só isso. Novamente, obrigado, não me leve a mal sério. E eu li sua resposta.
^~^) -Rhyan.