Centro RPG Maker

Centro de Criação => Programação => Tópico iniciado por: Raizen online 22/11/2012 às 13:04

Título: Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Raizen online 22/11/2012 às 13:04
A senha para algo que não faço ideia do que seja: senhade25caracteres
Aula Ativa de Javascript/Ruby/RGSS


[box class=titlebg]
Como funciona o tópico?
[/box]

É bem simples, esse tópico serve para funcionar como um bate-bola, bem mais rápido e simples de perguntar e ser respondido quando a pergunta não é especifico de um script. Pergunte sobre a linguagem Javascript, Ruby, sobre outras linguagens diversas, ou sobre algo do RGSS, caso seja algo da biblioteca(RGSS), indique a engine ou a versão do RGSS que está fazendo a sua pergunta, na dúvida sempre indique a engine que está usando.


[box class=titlebg]
Exemplo de pedido
[/box]

Engine: RMVX Ace
Explicação: Eu não estou conseguindo colocar constantes dentro do módulo, não sei oque estou fazendo de errado.
Código exemplo:
module Rai
constante = 2
end



código para quem quiser usar o template de dúvidas


Engine:
Explicação:
Código exemplo:
[code][/code]
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Nandikki online 28/11/2012 às 14:10
Engine: RMXP
Explicação: Estou usando o chamar script para igualar uma variável a outras duas variáveis subtraidas
Código exemplo:
[$Game_Variables[6] = $Game_Variables[2] - $Game_Variables[4]
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Raizen online 28/11/2012 às 14:16
mas isso ai está certo xD.
tipo:

Chamar Script:
$game_variables[6] = $game_variables[4] - $game_variables[2]
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: dêemi online 15/12/2012 às 15:09
Opa, estou tentando aprender um pouco de RGSS3 acompanhando as aulas do Khas, porem naaula quatro to tendo um problema que é o seguinte, o script tá assim:
class Teste
 
  def intialize
    @x = 10
   
  end
 
  def comparar
   
    if @x == 10
      p "@x é igual a10"
     
    else
      p "erro"
     
    end   
  end
end

teste = Teste.new
teste.comparar


O problema é que, tá printado "erro", mas é pra printar "@x é igual a10"

Como to começando agora, não entendo oque eu fiz de errado, então vim pedir ajuda. Obrigado.
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Danka online 15/12/2012 às 15:16
Poderia falar qual é o erro?

EDIT: O probelma é que você escreveu "initialize" errado, então a variável @x não é 10, escreva o initialize corretamente, que irá funcionar.
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Raizen online 15/12/2012 às 15:22
Você escreveu

def intialize

falta o i xD.

def initialize

Oh wait, Danka editou a mensagem u__u
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: dêemi online 15/12/2012 às 15:27
else
      p "erro"
     
    end   


ta printando "erro", mais era pra printar "erro" apenas se "@x" não fosse igual a 10, mas mesmo sendo igual a 10 ta printando, querai saber se errei em alguma parte do codigo

#edit: é mesmo, obrigado.
nossa velho, eu tentei achar o problema varias veze e nao percebi isso, obrigadao Danka e Raizen
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Danka online 15/12/2012 às 15:30
Você errou no "def intialize" se escreve "def initialize".
Escreva o nome do metódo corretamente que vai funcionar.

Ele editou a mensagem. xD
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: denisbts online 23/01/2013 às 20:18
Gente bom antes de tudo Boa Noite !

Bom galera eu começei a aprender a linguagem Ruby faz um dia e to com um problema em um script irei postalo e queria saber se você poderia mi ajudar to ficando doico com ele  :aiaiai:

Bom aqui o Script:
class Teste
def q
end
end

var = " Variavel Local"
@var = " Variavel de Classe"
$var= " Variavel Global"

  def q
  print @var
  print $var
 
end

teste = Teste.new
teste.q


Bom o que eu quero com esse script é basicamente que ele printe na tela as seguintes fazes:
" Variavel Local
Variavel de Classe
Variavel Global"

que são referentes ao (var, @var, $var citados acima no script).
Espero que vocês possam me ajudar to ficando doido com isso !
Desde já agradeço !
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Danka online 23/01/2013 às 20:53
Ai meus olhos. Ò_Ó -zoa

Ele está todo errado, primeiro, você poderia ter utilizado o "def q" antes, não precisava "abrir ele novamente". E você abriu ele fora da classe "Teste".
Também errou um sinal ($var= "Variável Global", o certo seria $var = "Variável Global")

Faça isso, crie um metódo onde guarda a informação, e o chame de "initialize" ele é automatico, e é ativado assim que o script é chamado.
E no def q, use o "print (nome da variável)"

Vê se funciona.



Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: denisbts online 23/01/2013 às 21:01
Aaa cara valeu pela ajudinha basica rsrsrs.. mas é qui to nisso faz 1 dia só da um descontinho kkkk

Ai eu fiz como você falou e deu certim :D... vlw pela ajudinha meu irmãosinho s2 kkk zua
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: denisbts online 24/01/2013 às 15:50
Galera da uma ajudinha aqui to com uma duvida... o que tem de errado nesse script de pulo basico.


class Game_Player < Game_Character
    alias xaspim_update update
    def update
    xaspim_update
    if Input.trigger?(:X)#: confirma = C, A=X, S=y, Z=d   
      jump_by_input if passable?(@x, @y, @direction)
      end
    end
  def jump_by_input
    case @direction
    when 2  # Baixo
      jump (0,1)
    when 4  # Esquerda
      jump (-1,0)
    when 6  # Direita
      jump (1,0)
    when 8  # Cima
      jump (0,-1)
    end       
   end
  end


eu procurei mas não achei :S.. ele da erro na linha 12
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Raizen online 24/01/2013 às 15:57
Só um erro, não de espaço entre o método e o "(" dos parâmetros.

então jump(1,0) por exemplo.
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: denisbts online 24/01/2013 às 16:04
haha obrigado Raizen, mas me diga uma coisa, por que não pode ter espaço entre o jump e o (,) só uma mini duvida :), mas vlw !
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Raizen online 24/01/2013 às 16:12
é porque são as regras :P... nem zoa é assim.

O Ruby para simplificar ele, fizeram com que espaço e linhas puladas tivessem significância, então quando você pula uma linha em algumas outras linguagens é obrigatório por exemplo colocar o ; para indicar que pulou, no Ruby não, basta pular a linha, espaço é a mesma coisa, o método tem que estar tudo junto, todas as letras e os parâmetros, basta ver, não da para criar um método tipo..

def esse eh um metodo

eles não podem estar separados, e o () tem que estar junto quando se cria o método, def jump(x, y), então quando eu vou chamar o método ele também tem que estar junto :P, jump(1, 2).
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Danka online 24/01/2013 às 18:20
Há, eu esqueci de falar algo, acho que vai ser bem útil para você.
Por exemplo, se você abrir um metódo, que já existia, tudo que tinha antes é apagado, para dar espaço para os novos comandos. Para adcionar comandos para um metódo existente use o "alias". Digite o nome do metódo e o novo nome dele, chame ele normal, adicione os novos comandos e depois chame o "novo" nome dele.

Acho que expliquei direito. ou não. -q
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: DFox online 23/06/2013 às 17:58
Desculpe se isto seria ressucitar tópico, eu não sei ao certo, pois este tópico é aberto para o povo ir tirando as dúvidas, então ressucitei POASKOPAKS.
Engine: RMVX Ace
Explicação: Eu queria saber que código posso usar para aparecer um texto exibindo o valor de uma variável na tela, só que o fundo dele tem de ser transparente.
Código exemplo:
e.e
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Raizen online 23/06/2013 às 23:23
Você pode reviver qualquer tópico que achar que deve reviver :P, não tem problema algum isso no fórum.

Ah cara, tem vários modos de fazer, xD, você pode fazer com window também, ai basta tirar o opacity do fundo dele, mas ai depende MUITO do que pretende fazer, o jeito que está pedindo, talvez seja mais fácil desse modo aqui.

    @var = Sprite.new
    @var.bitmap = Bitmap.new(100, 100)
    @var.bitmap.draw_text(0, 0, 100, 100, $game_variables[n])


Substitua n pelo número da variável.

Mas isso se estiver usando para um script, não sei exatamente aonde usará isso, diga aonde será usado que talvez tenha outro modo mais fácil x]
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: DFox online 24/06/2013 às 10:12
É para aparecer um relógio indicando as 2 Variáveis (Hora e Minuto) Mas como não saco tanto de RGSS3 vim pedir ajuda aqui huahuah

EDIT:
Aí ficaria assim: variável 1:variável 2
Teria como? Para eu por lá em scripts.
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Raizen online 25/06/2013 às 23:16
vc não quer um script pronto para isso xD?
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: DFox online 23/08/2013 às 21:33
Ressucitando novamente esse tópico, mas acho que esse não tem problema e.e'

Engine: RMVXA
Explicação: Estou aprendendo RGSS3, e depois de estudar um pouquinho vi o vídeo do Faalco, fiz a HUD, adaptei ao meu gosto e queria por uma imagem no lugar da barra pronta do VX Ace
Código exemplo (Script da HUD):
############################################################################
#~ HUD By Koelho
#~ Credits: Faalco (by the video-tutorial)
###########################################################################
class Window_HUD < Window_Base
  def initialize
    super(0, 0, 150, 120)
    @actor = $game_party.members[0] #Personagem da Party
    refresh
  end
  def refresh
     self.contents.clear
     draw_actor_name(@actor, 0, 0) #Desenhar Nome
     #draw_actor_face(@actor, 0, 0) #Desenhar Face
     draw_actor_hp(@actor, 0, 30) #Desenhar HP
     draw_actor_mp(@actor, 0, 60) #Desenhar MP
   end
end
class Scene_Map
   alias koelho_main main
   alias koelho_update update
   def main
     @hud = Window_HUD.new
     koelho_main
     @hud.dispose
   end
   def update
     koelho_update
     @hud.update
     @hud.refresh
   end
end
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: RedSteam online 24/09/2013 às 16:46
Duvida "bésta", Ruby e RGSS são parecidos? tipo eu posso aprender algo útil para o RGSS3 lendo ruby? ou são linguagens totalmente diferentes?
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Kyo Panda online 24/09/2013 às 16:55
O RGSS é uma aplicação feita em Ruby. É como o jQuery para Javascript ou Swing para Java. Se você aprender o Ruby será infinitamente mais fácil aprender o RGSS, pois entenderá por completo o que rola no mesmo.

Fora que ao aprender Ruby, entenderá melhor não só o RGSS, mas o Rails (aplicação Web em Ruby) ou Shoes (aplicação Desktop), e por aí vai. ;)
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Enter online 14/11/2013 às 15:03
Olá, este tópico é sobre RGSS.

Pergunto àqueles que já fizeram ou entendem menus personalizados. Gostaria de saber se há como aumentar a velocidade do movimento do background. A intenção é que 2 imagens Plane.new que fiquem se movimentando no fundo enquanto outros movimentos possam ser feitos no menu. Fiz um script para exemplificar a dúvida:
class Movimento
  def main
    @background = Plane.new
     @background_name = "op1zn0"
     @background2 = Plane.new
     @background2_name = "op1zn0"
    @background.bitmap = RPG::Cache.picture(@background_name)
    @background.blend_type = 0
    @background2.bitmap = RPG::Cache.picture(@background2_name)
    @background2.blend_type = 0
    @background2.opacity = 60
    @x = 2
    update
  end
  def update
#É do Plane.new e faz a imagem repetir na tela
       @background.oy += 30
      @background.ox += 30 
      @background2.oy += 30
      @background2.ox -= 30
      @x += 1
    end
    end


Então como podem ver, neste script as duas imagens se movimentam sim, mas de forma lenta.

Na realidade a intenção é fazer uma Scene que não necessariamente será um menu mas terá uma interatividade semelhante, e está questão do background é que fiquei em duvida no momento.

Obrigado,
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Raizen online 14/11/2013 às 15:25
tentou @background.x +....
e background.y+...?


E sim o Plane, eh a classe que já vem pré-configurado loopings não? se sim então porque não usa-lo rs :), cria uma classe ativa em paralelo para o menu, e o Plane executando por uma variável, como você fez no script, isso deveria deixar o fundo se movimentando enquanto você programa o menu, mas eu iria inserir esses background direto na classe do Menu que vai criar, bem mais fácil de manipular de lá.
Título: Re:  Aula Ativa de Ruby/RGSS
Enviado por: Enter online 14/11/2013 às 17:08
Citação de: Raizen online 14/11/2013 às 15:25
tentou @background.x +....
e background.y+...?
Então, mas utilizando somente o "y" e o "x" eles se referem a coordenadas para deixa-la estática não é? E no caso, quando coloco elas acaba dando erro pois fala que para utilizar elas eu teria que declarar as variaveis como Sprite.new ao invés de Plane.new... Mas o background precisa ser Plane.new pelo fato da necessidade que a imagem se repita ao chegar aos extremos da borda.
Citação de: Raizen online 14/11/2013 às 15:25
E sim o Plane, eh a classe que já vem pré-configurado loopings não? se sim então porque não usa-lo rs :), cria uma classe ativa em paralelo para o menu, e o Plane executando por uma variável, como você fez no script, isso deveria deixar o fundo se movimentando enquanto você programa o menu, mas eu iria inserir esses background direto na classe do Menu que vai criar, bem mais fácil de manipular de lá.
Quanto esta parte, beleza! entendi, muito obrigado.


@Então, tem como aumentar a velocidade dos plane?

O membro Gab! conseguiu, quem estiver curioso:

class Movimento
  def main
    @background = Plane.new
    @background_name = "op1zn0"
    @background2 = Plane.new
    @background2_name = "op1zn0"
   
    @background.bitmap = RPG::Cache.picture(@background_name)
    @background.blend_type = 0
   
    @background2.bitmap = RPG::Cache.picture(@background2_name)
    @background2.blend_type = 0
    @background2.opacity = 60
    @x = 2

    Graphics.transition(20)
    loop do
      Graphics.update
      update
    end
  end
 
  def update
    @background.oy += 30
    @background.ox += 30 
    @background2.oy += 30
    @background2.ox -= 30
    @x += 1
  end
end



link: http://forums.mundorpgmaker.com.br/index.php?topic=116807.0
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: N online 20/11/2013 às 20:55
Engine: RPG Maker VX Ace
Explicação: Como que eu crio tipo assim,  um processo que carrega, os arquivos que estão dentro de uma array, e faço eles aparecerem em um menu ai eles podem ser selecionados, tipo no pokemon na seleção de windowskins, só que ai aprecece, o um numero, de acordo com a ordem em que está na array, e tambem como colocar uma palavra (titulo/tópico) no menu (esse menu não é menu menu é menu tipo menu item, menu status).
Ai eu não sei o processo, que carrega elas na pasta em que está, não sei o processo que faz ela poder ser escolhida durante o jogo, e não sei como criar uma window_selectable.
Código exemplo:
FontIndex = ["Verdana","Adobe Arabic","Segoe UI"] # Fontes que poderam ser selecionadas no menu
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Van online 03/12/2014 às 05:13
Boa noite, amigos.
Preferi postar aqui do que reviver o tópico da aula do Raizen, afinal.

Cheguei no ponto onde ele mostra o seguinte script:


def somar(x, y)
  soma = x + y
  p soma
end
somar(2, 4)
somar(3, 3)


X e Y são variáveis, certo? Eu atribuo os valores 2, 4 e 3, 3 ali no fim.
Sabendo disso, imaginei que num script essas variáveis talvez fossem definidas por um outro método, e tentei simular isso com o seguinte código:


x = 2
y = 3
def somar(x, y)
  soma = x + y
  p soma
end


Bom, deu errado, mas eu não consigo entender o motivo. Mesmo.
Estou estudando Ruby há poucas horas e talvez eu descubra  o motivo disso estar errado em breve, mas fiquei encucado. Não posso setar essas variáveis assim?
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Alucard_2 online 03/12/2014 às 08:50
@Van

Existe uma diferença entre "Declaração" e "Chamada de método".

No caso, em:

def soma(x, y)
  soma = x + y
  p soma
end


Você está Declarando que existe um método soma que exige 2 parâmetros, que, dentro do método, irão se chamar "x" e "y" respectivamente. Logo eu posso colocar qualquer variável como parâmetro, até mesmo "números puros", assim digamos, como você fez com 2 e 4, 3 e 3.

Agora quando você executa:

soma(2, 4)

Você está chamando o método "soma", e enviando "2" como primeiro parâmetro, e "4" como segundo parâmetro, e dentro do método elas irão se chamar "x" e "y" respectivamente, mas fora do método as variáveis "x" e "y" simplesmente não existem, ou seja, o que está no método é independente do que está fora dele (a menos que trate-se de variáveis de classe/globais - i.e. com @ e $ no início).

Ou seja, eu posso livremente fazer:

soma(x, y)
  soma = x + y
  p x # => irá printar o primeiro valor passado como parâmetro
  p soma
end

mostarda = 2
vinagre = 3
soma(mostarda, vinagre) # mostarda, no método, será x, e vinagre será y

p x # => nil, pois não existe variável x.

x = 4
y = 3
soma(x, y) # x, no método, será x, e y será y
soma(y, x) # y, no método, será x, e x será y


Ou ainda:

x = 2
y = 4
p x # => 2
def soma(x, y)
  x = 4 # => x do método será 4, x fora dele continuará 2
  p x # => 4
  soma = x + y
  p soma
end

p x # => 2


Ou seja, a variável é uma coisa, um parâmetro no método é outra.


No seu caso, não funcionou pois você simplesmente declarou as variáveis, declarou o método, mas não chamou ele.
Logo, basta adicionar a chamada dele ao fim:
x = 2
y = 3
def soma(x, y)
  soma = x + y
  p soma
end
soma(x, y)
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Van online 03/12/2014 às 10:14
Rapaz, muito obrigado!
Agora sim faz sentido, eu devia ter imaginado que "def" significaria "definir".
Esse X e Y serão, por padrão, variáveis locais, certo?
O que você chamou de parâmetro (2, 4 no caso) são nada mais que variáveis existentes apenas dentro desse método. Se eu quiser que elas sejam setadas por outro script eu terei que deixar

def soma(x, y)
  soma = x + y
  p soma
end
soma($variavel_a, $variavel_b)


Ou estou falando bobagens?
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Alucard_2 online 03/12/2014 às 10:54
Well, como posso dizer...
A questão do que o $ vai alterar se refere mais a, em palavras simples, "onde a variável existe". I.e.:
class Classe
  def initialize
    $var = 5
    @var = 10
    var = 15
  end
  def algo
    p $var # => 5
    p @var # => 10
    p var # => nil
  end
end
p $var # => 5
p @var # => nil
p var # => nil


Perceba que $var existe em todo lugar, dentro ou fora de classes ou métodos (mesmo que declarada dentro da classe), e alterando ela, essa alteração acontece em todos os $var. Chamamos esse tipo de variável de "global".
Agora @var foi declarada na classe "Classe". Logo ela vai existir apenas dentro dessa classe, e não fora dela. E alterando o valor de @var, essa alteração acontece para todos os @var dentro da classe "Classe". Chamamos esse tipo de variável de "atributo".
E por fim var foi declarada dentro de um método, e portanto só vai existir dentro dele. Alterando o valor de var vai alterar apenas dentro do método, mas não fora. Chamamos esse tipo de variável de "local".

No caso, usando soma($variavel_a, $variavel_b) irá enviar os valores de $variavel_a e $variavel_b para serem usados como x e y em "soma". Porém elas precisam ser já declaradas antes, do contrário você vai enviar "nil" como x e y, e logo dará erro em "soma = x + y" por conta de tentar somar dois "nil"s.

Se você quiser utilizar o resultado da soma, por exemplo, precisaria de um "return soma" no final do método, e assumir a uma variável. E.g:
def soma(x, y)
  soma = x + y
  p soma
  return soma
end
var = soma(3, 2)
p var # => 5
val1 = 10
val2 = 4
var = soma(val1, val2)
p var # => 14
p val1 # => 10
p val2 # => 4
$val1 = 1
$val2 = 2
$var = soma($val1, $val2)
p $var # => 3
p $val1 # => 1
p $val2 # => 2


Tente testar cada um dos {code}{/code} que deixei nesta e na outra mensagem e ver as diferentes "reações" que o script possui. Se você quiser, no caso, utilizar os valores de x e y globalmente, pode fazer algo como:
def soma(x, y)
  soma = x + y
  $x = x
  $y = y
  p soma
end

p $x # => nil
p $y # => nil

soma(3, 2)

p $x # => 3
p $y # => 2


Sugestão de leitura: https://www.youtube.com/watch?v=Gah8FnYSypk&list=TLO-4ET0PK3ck&index=5
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Lincoln online 09/01/2015 às 11:15
Como o Raizen não quer que eu encha o saco dele no Facebook, vou postar aqui.

Queria saber porquê a HUD não aparece na tela.

class Lincoln < Scene_Base
  include LINCOLN_HUD
  alias lincoln_update update
  alias lincoln_update dispose
  def initialize
    @hud_hp = Bitmap.new(HUD_WIDTH - 10, HP_Y - HUD_Y)
    @hud_mp = Bitmap.new(HUD_WIDTH - 10, HUD_Y - MP_Y)
    @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HP_Y - HUD_Y,"{$game_party_members[1].hp}")
    @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HUD_Y - MP_Y,"{$game_party_members[1].mp}")
    @hud_hp = Viewport.new(HP_X, HP_Y, HUD_WIDTH - 10, HP_Y - HUD_Y)
    @hud_mp = Viewport.new(MP_X, MP_Y, HUD_WIDTH - 10, MP_Y - HUD_Y)
    @hud_hp = Sprite.new(@hud_hp)
    @hud_hp.z = 999
    @hud_mp.z = 999
  end
  def lincoln_update
    @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HP_Y - HUD_Y,"{$game_party_members[1].hp}")
    @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HUD_Y - MP_Y,"{$game_party_members[1].mp}")
    super
  end
end
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Alucard_2 online 09/01/2015 às 11:53
Well, comecemos então.

Primeiro:

  alias lincoln_update update
  #[...]
  def lincoln_update
    @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HP_Y - HUD_Y,"{$game_party_members[1].hp}")
    @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HUD_Y - MP_Y,"{$game_party_members[1].mp}")
    super
  end


Aqui você copiou o método "update" para "lincoln_update", e depois reescreveu o lincoln_update, ou seja...é como se não tivesse feito nada, o "update" continua intacto. A ideia é fazer:

  alias lincoln_update update
  #[...]
  def update # reescrever o "update", não o "lincoln_update"
    @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HP_Y - HUD_Y,"{$game_party_members[1].hp}")
    @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HUD_Y - MP_Y,"{$game_party_members[1].mp}")
    lincoln_update # chamar o lincoln_update, que seria o "update" original
  end


Outro detalhe é que para uma Sprite ser exibida (e atualizada), precisa chamar o método "update" delas. Portanto o def update fica:


  def update # reescrever o "update", não o "lincoln_update"
    @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HP_Y - HUD_Y,"{$game_party_members[1].hp}")
    @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HUD_Y - MP_Y,"{$game_party_members[1].mp}")
    @hud_hp.update
    lincoln_update # chamar o lincoln_update, que seria o "update" original
  end


Agora, se pensarmos bem, você está criando a classe Lincoln, certo? No sentido de que não existia uma outra classe de mesmo nome antes, logo, não faz sentido dar um alias, já que não está substituindo algo que já havia sido criado numa classe Lincoln, só está sobrescrevendo algo da classe-Pai (Scene_Base) dela, certo? Então, em vez de criar aliases, pode só chamar "super" no final do método. O "super" vai chamar o mesmo método na classe-Pai. Assim:

class Lincoln < Scene_Base
  include LINCOLN_HUD
  def initialize
    @hud_hp = Bitmap.new(HUD_WIDTH - 10, HP_Y - HUD_Y)
    @hud_mp = Bitmap.new(HUD_WIDTH - 10, HUD_Y - MP_Y)
    @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HP_Y - HUD_Y,"{$game_party_members[1].hp}")
    @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HUD_Y - MP_Y,"{$game_party_members[1].mp}")
    @hud_hp = Viewport.new(HP_X, HP_Y, HUD_WIDTH - 10, HP_Y - HUD_Y)
    @hud_mp = Viewport.new(MP_X, MP_Y, HUD_WIDTH - 10, MP_Y - HUD_Y)
    @hud_hp = Sprite.new(@hud_hp)
    @hud_hp.z = 999
    @hud_mp.z = 999
    super # chama o initialize da Scene_Base
  end
  def update
    @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HP_Y - HUD_Y,"{$game_party_members[1].hp}")
    @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HUD_Y - MP_Y,"{$game_party_members[1].mp}")
    @hud_hp.update
    super # chama o update da Scene_Base
  end

  def dispose
    super # chama o dispose da Scene_Base
  end
end


Creio que agora deva funcionar.




Complemento 1: Lembre-se de sempre limpar o bitmap, para que ele não fique com o conteúdo da última atualização (no caso, em um frame o HP do herói era 18, um frame depois ele ficou com 6, e em seguida 9. Assim, a sua janela escreveria o 18, e, com ele ainda ali, escreveria um 6 e um 9 em cima). Ou seja, seu método update deve ser:

  def update
    @hud_hp.bitmap.clear
    @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HP_Y - HUD_Y,"{$game_party_members[1].hp}")
    @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HUD_Y - MP_Y,"{$game_party_members[1].mp}")
    @hud_hp.update
    super # chama o update da Scene_Base
  end


Complemento 2: evite escrever textos a cada frame. Faça alguma comparação, como...

  def update
    if @ultimo_hp != $game_party.members[1].hp # mudou o HP?
      @hud_hp.bitmap.clear
      @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HP_Y - HUD_Y,"{$game_party_members[1].hp}")
      @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HUD_Y - MP_Y,"{$game_party_members[1].mp}")
    end
    @ultimo_hp = $game_party.members[1].hp # Atualiza o último valor do HP
    @hud_hp.update
    super # chama o update da Scene_Base
  end


Complemento 3: É $game_party.members, não $game_party_members ;) No caso, $game_party é a variável da classe Game_Party, e nessa variável existe um grupo chamado "members".

Perguntinha: você chamou SceneManager.call(Lincoln) para testar a sua Scene?




Off: eu me pergunto se o Van viu (hah, "vanviu") meu post :v Ah, deve ter sido ele quem deu ouro.
Título: Re:  Aula Ativa de Ruby/RGSS
Enviado por: Lincoln online 09/01/2015 às 13:03
@Alucard_2

Pior que não deu certo não, a hud continua sem aparecer. Eu já tentei chamar usando Lincoln.new, e usando SceneManager.call(Lincoln), nenhum dos dois funciona.

module LINCOLN_HUD
  # Posição X da Hud
  HUD_X = 200
  # Posição Y da Hud
  HUD_Y = 50
  # Largura da Hud
  HUD_WIDTH = 110
  # Altura da Hud
  HUD_HEIGHT = 110
  # Posição do X do HP
  HP_X = 210
  # Posição do Y do HP
  HP_Y = 60
  # Posição X do MP
  MP_X = 110
  # Posição Y do MP
  MP_Y = 100


end

#==============================================================================
# ** Lincoln
#------------------------------------------------------------------------------
#  Esta classe gerencia a criação, atualização e disposição da Hud.
#==============================================================================
class Lincoln < Scene_Base
  include LINCOLN_HUD
  def initialize
    @hud_hp = Bitmap.new(HUD_WIDTH - 10, HP_Y - HUD_Y)
    @hud_mp = Bitmap.new(HUD_WIDTH - 10, HUD_Y - MP_Y)
    @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HP_Y - HUD_Y,"#{$game_party.members[1].hp}")
    @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HUD_Y - MP_Y,"#{$game_party.members[1].mp}")
    @hud_hp = Viewport.new(HP_X, HP_Y, HUD_WIDTH - 10, HP_Y - HUD_Y)
    @hud_mp = Viewport.new(MP_X, MP_Y, HUD_WIDTH - 10, MP_Y - HUD_Y)
    @hud_hp = Sprite.new(@hud_hp)
    @hud_mp = Sprite.new(@hud_mp)
    @hud_hp.z = 999
    @hud_mp.z = 999
    super # chama o initialize da Scene_Base
  end
  def update
    @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HP_Y - HUD_Y,"#{$game_party_members[1].hp}")
    @hud_hp.draw_text(HP_X, HP_Y, HUD_WIDTH - 10, HUD_Y - MP_Y,"#{$game_party.members[1].mp}")
    @hud_hp.update
    super # chama o update da Scene_Base
  end

  def dispose
    super # chama o dispose da Scene_Base
  end
end

Lincoln.new


Te enviei o script por completo.

E o script agora está dando erro, $game_party.members[1].hp não é correto, vou ver se encontro a variável correta xD

Citação de: Alucard_2 online 09/01/2015 às 11:53
Off: eu me pergunto se o Van viu (hah, "vanviu") meu post :v Ah, deve ter sido ele quem deu ouro.

Fui eu. :V
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Alucard_2 online 09/01/2015 às 13:22
well, essa classe nao pode ser chamada logo depois de ser criada, pois os dados ainda nao foram criados ($game_party, por exemplo), chame o SceneManager.call por um evento no mapa.
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: mrMiojo online 01/05/2015 às 18:56
Pergunta...Pra que serve o: seiquela.each { |sql| seiquela} ?
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Geraldo de Rívia online 01/05/2015 às 20:03
Do jeito como descreveu, acho que serve bem demais pra dar bug. Poréeeeeeem, por exemplo:
números = [ 2, 4, 6]
a = números.each { |n| 5 * n}

O método each faz com que cada valor da array números seja executado na expressão entre as chaves.
Ou seja, todos os valores contidos em números ocupará o lugar de n e será multiplicado por 5, sendo assim:
a = [10, 20, 30]
Eu acho que é isso, não tenho absoluta certeza.
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Brandt online 01/05/2015 às 20:54
Tá mais ou menos certo, king, isso aí é o .collect quem faz, o .each executa um bloco de código pra cada elemento de uma coleção e o .collect transforma eles de acordo com o retorno do bloco:
a = [2, 3, 4]
a.each {|i| print i} #=> 234
p a.collect {|i| i * 5} #=> [10, 15, 20]
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: mrMiojo online 06/05/2015 às 10:27
Então o collect tem a mesma função de:
for i in a
p i  * 5
end #=> ?
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Brandt online 06/05/2015 às 11:25
Não. O .collect retorna uma nova array com os valores retornados pelo bloco para cada elemento antigo, serve para pegar os ids de todos os personagens numa array de personagens, tente chamar um script call assim, por exemplo:
p $game_party.members.collect {|actor| actor.id}
Seria o equivalente a isso:
a = []
for actor in $game_party.members
  a.push(actor.id)
end
p a


O que você fez aí é o .each, na verdade o que o for faz é chamar o .each internamente mesmo.
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: mrMiojo online 16/05/2015 às 18:27
Pergunta: Quero que quando o herói fique parado por certo tempo aconteça certa coisa... Mas não sei como fazer-lo esperar...? Já tentei o

@wait = 0
@wait += 1 if @wait <= Tempo
@wait   = 0 if @wait == Tempo

como faço?
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Raizen online 17/05/2015 às 17:26
Um dos jeitos para se fazer isso, é basicamente o que você está fazendo mesmo, mas você não pode deixar o @wait = 0 acima do @wait += 1, é meio redundante você ficar zerando a variável antes de somar ela x).


E depende de onde está colocando esse código, se tiver como mostrar o trecho do código com um pouco mais do que você colocou x).
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: mrMiojo online 17/05/2015 às 20:05
Vlw, mas já consegui: Zerei o @wait logo no initialize, então não precisa mais de zera-lo toda hora xD...
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Watanukiz online 02/06/2015 às 07:18
Gente, alguém pode me explicar para o que serve o comando "attr_acessor" e por quê ele não funciona no meu IR de maneira nenhuma? Todos os tutoriais que vi citam que é esse o comando que deve ser usado para se atribuir caracteristicas as classes, mas acho que talvez ele tenha sido retirado/substituído nas versões mais recentes do Ruby (?)

É uma questão idiota, de quem não entende nada de programação, mas se alguém pudesse me explicar ficaria agradecido.
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Raizen online 02/06/2015 às 09:26
deveria funcionar x).

mande um trecho de como está fazendo essa parte do código ai a gente vê o que pode estar faltando...

E outra, você tá usando isso em que programa xD? RPG Maker...? já que você disse IR e eu mesmo desconheço o que seja ^^
Título: Re: Aula Ativa de Ruby/RGSS
Enviado por: Alucard_2 online 02/06/2015 às 12:19
@Watanukiz
Fica difícil saber o que está errado se não sabemos nem como usou =T Poderia postar seu código?
E aliás, o que seria IR?
Título: Aula Ativa de Ruby/RGSS
Enviado por: MendigoDoMato online 18/08/2016 às 18:55
Isso aqui ta funcionando ? posso fazer perguntas por aqui ainda ?
Título: Aula Ativa de Ruby/RGSS
Enviado por: Raizen online 01/09/2016 às 11:59
Sim, desculpe a demora, se ainda tiver perguntas sobre isso só mandar, também generalizei mais o tópico para quem quiser perguntar de outras linguagens de programação
Título: Aula Ativa de Ruby/RGSS e outras linguagens de programação
Enviado por: Baby..Face online 05/08/2017 às 12:38
Engine: RMVX Ace
Explicação: Gostaria de saber se existe a possibilidade de redimensionar janelas (Window_Selectable, Window_Base, etc ), a um tamanho perfeito ao conteúdo que ela vai conter de forma "automática", ou seja, quando instanciar a janela atribuir valores arbitrários e após adicionar o conteúdo à janela, alterá-la de forma a se ajustar ao conteúdo inserido.
Por exemplo primeiro é necessário instanciar.

Até o momento minha solução "gambiarrosa" funciona para quantidade de linhas que a janela conterá.
Eu crio uma janela dummy, uma janela qualquer só para que eu possar acessar o método fitting_height, em seguida utilizo o
esse método passando o valor 2, para que ele calcule a altura ideal da janela para duas linhas (minha Window_Selectable, conterá duas opções). Não consigo fazer nada semelhante para a largura da janela.

Então.. Gostaria de saber se tem uma solução mais elegante, e que funcione também pra largura da janela.
Só mais um acréscimo, já vi que existem diversos scripts de caixa de mensagem, principalmente os que alteram a caixa de texto padrão para uma no estilo "balãozinho" que isso é bem evidente, o tamanho dela se ajusta ao conteúdo que contém, basicamente essa é minha dúvida, se tem como fazer isso de forma simples individual para as janelas de meu interesse.

Código exemplo1: Scene para teste
#Criei uma scene para teste, em que:

class Planting_Scene < Scene_Base
  def start
    super
    #`Para adicionar um fundo à scene:
    @background = Sprite.new #Cria-se um novo sprite
    @background.bitmap = SceneManager.background_bitmap #Extrai o fundo da Scene
   
    dummy_window = Window_Base.new(0,0,0,0)
    vertical_content_height = dummy_window.fitting_height(2)
    @planting_selectable = Planting_Selectable.new( 0 , 0,
        320, vertical_content_height )
   
  end
end


Window Selectable:


class Planting_Selectable < Window_Selectable
  def initialize( x, y , width , height )
    self.create_commands_list()
    super
    self.fitting_height( 2 )
    self.update()
    self.draw_commands()
    #Ativa a janela para que seja utilizada
    self.activate()
    #Faz o cursor aparecer na primeira opção da janela
    self.select( 0 )
  end
 
  #O método update das janelas é chamado em todas as scenes
  def update
    super
    #Se o botão de decisão for pressionado e a janela estiver ativa
    if Input.trigger?(:C) && self.active
      Sound.play_ok
      chosen_option = @list[ self.index() ]
      run_option( chosen_option)
    end
  end
 
  def create_commands_list()
    @list = []
    commands = ["Plantar", "Sair"]
      for i in 0...commands.size
        @list.push( commands[i] )
      end
  end
 
  def draw_commands()
    for i in 0...@list.size
      #Cria um retângulo com o tamanho e posição correto para desenhar o texto
      #   do comando
      rect = self.item_rect(i)
      #Desenha no rect o comando de @list[i]
      self.draw_text( rect , @list[i] )
    end
  end #draw_commands()
 
  def item_max
    #Se a lista não foi instanciada, retorna 0
    if @list.nil?
      return 0
    else
    #Senão, retorna o tamanho da lista
      return @list.size
    end
  end #item_max
 
  def run_option( chosen_option )
    case chosen_option
    when "Plantar"
      msgbox("Opção escolhida foi Plantar")
    when "Sair"
      SceneManager.return
    end
  end
 
end #class


Segue em anexo imagem com o resultado.

Pois bem essas são minhas dúvidas. Esses código foram baseado nas aulas de Ruby do Alisson de Window_Selectable, portanto muito obrigado Alisson! Já aprendi algumas coisas  :XD:

[Anexo excluído pelo administrador]
Título: Aula Ativa de Ruby/RGSS e outras linguagens de programação
Enviado por: Sotelie online 07/08/2017 às 14:11
Fico feliz que as aulas deram frutos.
Fiz um pequeno teste aqui que talvez possa te dar uma luz:

class Test_Window < Window_Base
 
  def initialize(x = 0, y = 0)
    # Estarei realizando o super padrão com 1/1 de dimensões para a janela.
    # Isso é apenas para garantir que não haverão erros, embora você possa sim
    # criar uma janela com 0/0 de dimensões.
    super(x, y, 1, 1)
    draw_stuff
  end
 
  # Estarei usando esse método para desenhar as coisas.
  # Note que o que fiz aqui serve apenas como demonstração, você pode querer
  # caprichar mais para deixar o código mais limpo criando a lista de
  # itens a serem desenhados externamente.
  def draw_stuff
    # Aqui estarei criando uma hash que será responsável por obter as dimensões
    # finais dos itens a serem desenhados.
    # Estas dimensões irão se expandir até caberem os itens a serem desenhados.
    dimensions = {:width => 0, :height => 0}
   
    # Nesta parte estarei chamando o método de exemplo "process_text_dimensions"
    # para que ele calcule as dimensões necessárias do texto a ser desenhado.
    # Recomendo que veja os exemplos abaixo e tente fazer com ícones, faces
    # e outras coisas.
    # Vale notar que ele modifica a variável local "dimensions" se for necessário.
    process_text_dimensions("Hey There!", 0, 0, dimensions)
    process_text_dimensions("Just some text.", 100, line_height, dimensions)
    process_text_dimensions("Another text in here.", 20, line_height * 2, dimensions)
   
    # Após ter calculado as dimensões necessárias, é hora de criar um bitmap
    # com as mesmas dimensões calculadas. Esse bitmap será usado como
    # o conteúdo final da janela.
    # Vou chamar o método "recreate_contents" que criei apenas para isso.
    recreate_contents(Bitmap.new(dimensions[:width], dimensions[:height]))
   
    # Após ter criado o bitmap de conteúdo da janela, podemos enfim desenhar
    # as coisas nela.
    # Eu recomendo usar as mesmas coordenadas/dimensões que usamos para
    # calcular o espaço necessário durante a criação das dimensões.
    draw_text_ex(0, 0, "Hey There!")
    draw_text_ex(100, line_height, "Just some text.")
    draw_text_ex(20, line_height * 2, "Another text in here.")
  end
 
  # Este método será encarregado de calcular as dimensões necessárias para
  # se desenhar um texto na janela.
  # Ele modifica a hash "dimensions" que usamos caso for necessário.
  def process_text_dimensions(text, x, y, out_dimensions)
    # Aqui obtemos o retângulo que determina as dimensões verdadeiras do
    # texto na janela.
    rect = contents.text_size(text)
   
    # Nesta parte nós calculamos as dimensões totais para se desenhar o texto nela.
    # Note que eu adicionei 2 na largura pois o Ace possui um erro ao calcular
    # a largura do texto em alguns casos. Isso não acontecia no XP nem no VX.
    calculated_width = x + rect.width + 2
    calculated_height = y + rect.height
   
    # Agora nós iremos checar se as dimensões atuais que passamos são menores
    # que as dimensões necessárias.
    # Caso elas sejam, ele irá alterar as dimensões que passamos.
    # Do contrário, ele não faz nenhuma alteração.
    # Precisamos fazer isso para a largura E altura, então nada de elsif.
    if out_dimensions[:width] < calculated_width
      out_dimensions[:width] = calculated_width
    end
    if out_dimensions[:height] < calculated_height
      out_dimensions[:height] = calculated_height
    end
  end
 
  # E por fim, este é o método que irá recriar o bitmap do conteúdo da janela.
  def recreate_contents(source_bitmap)
    # Como nós criamos o bitmap assim que o passamos como argumento,
    # não precisamos dar dispose nele.
    self.contents = source_bitmap
   
    # A largura da janela é a largura do conteúdo dela, somado com o padding
    # multiplicado por 2 (visto que temos padding na esquerda e na direita).
    self.width = contents.width + padding * 2
   
    # A mesma coisa do padding da largura se aplica ao padding da altura.
    self.height = contents.height + padding * 2
   
    # Se você não souber, o padding indica o quão longe da borda da janela
    # o conteúdo fica. Por padrão, é 12.
  end
 
end


Creio que se tiver entendido o conceito, você pode melhorar esse código, haha'
Título: Aula Ativa de Ruby/RGSS e outras linguagens de programação
Enviado por: Baby..Face online 10/08/2017 às 20:50
Valeuzão por responder Alisson, no momento não posso olhar com calma a sua solução mas assim que puder estudarei seu código e comento.
Mais uma vez, valeus!
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Raizen online 18/06/2019 às 22:49
Só avisando que atualizei o tópico para incluir Javascript, antes estava voltado ao Ruby apenas, então caso tenham dúvidas rápidas de JS podem usar esse tópico também para resolverem.  :ok:
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: MayLeone online 27/07/2019 às 13:38
Eu sei que não é uma linguagem muita utilizada nesse fórum, mas se tiverem dúvidas sobre C# podem postar aqui também que ficarei feliz em poder ajudar.  :=p:
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Crewyvern online 10/11/2019 às 12:50
Não sei se o tópico ainda é ativo ou se é aqui o lugar certo pra perguntar, mas estou com uma dúvida, comecei a estudar rgss3 ontem, e testando algumas coisas cheguei numa parte que não entendi o porque disso acontecer...

Spoiler
class Teste2
  def initialize
    @var3 = 399
    $var2 = 394
    @var4 = 773
    @var5 = 464
    @var = palavra
  end
  def er
    if @var3 == 399
      p @var3
    end
  end
  def era
    if not $var2 == 393
      p @var4
    end
  end
  def ueo
    if @var3 == 390 or @var5 == 464
      p @var2
    end
  end
  def qdj
    p @var
  end
 
end
classe = Teste2.new
classe.er
classe.era
classe.ueo
classe.qdj
[close]

Até aqui  "if @var3 == 390 or @var5 == 464" funcionava, porém como eu coloquei um "or" coloquei @var3 errado e o @var5 correto, na minha cabeça se um deles estivesse correto printaria na janela de depuração o "p @var2", porém deu nil, porque isso?
E a outra dúvida é, eu coloquei @var = palavra, mas depois disso deu erro e agora vem a pergunta, não pode colocar letras em variáveis?
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Gabriel online 10/11/2019 às 13:27
O problema com o retorno nil de @var2 acontece porque você não definiu @var2. Veja com atenção o seu código e encontrará o erro. Você definiu $var2, que é uma variável global, diferente da variável de instância @var2.

Para guardar textos em uma variável como string você precisa utilizar aspas.
Código (Exemplo:) Selecionar

@var = "palavra"
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Crewyvern online 10/11/2019 às 15:45
Citação de: Gabriel N. online 10/11/2019 às 13:27
O problema com o retorno nil de @var2 acontece porque você não definiu @var2. Veja com atenção o seu código e encontrará o erro. Você definiu $var2, que é uma variável global, diferente da variável de instância @var2.

Para guardar textos em uma variável como string você precisa utilizar aspas.
Código (Exemplo:) Selecionar

@var = "palavra"


Obrigado moço, nossa não tinha visto, agora funcionou certinho, preciso prestar mais atenção.
Provavelmente vou perguntar mais coisas logo, bem difícil aprender algo sem poder tirar dúvidas :T.T:
Título: Attr
Enviado por: Crewyvern online 11/11/2019 às 13:02
Eu cheguei na parte de attr, estou vendo as aulas do Khas, porém eu não entendi muito bem pra que serve attr, eu fiz uns testes pra entender melhor como funciona, primeiro eu fiz classes e defini um "initialize" na primeira, e coloquei as variáveis no attr, até onde entendi eu posso acessar o initialize da primeira classe desde tenham as heranças e attr.

Também sei que só posso acessar attr (accesor/reader) o writer deu erro na hora de mandar printar, porque disse que não tem um método definido.

Depois eu retirei o attr e testei, então deu um erro aqui ( class Teste02 < Teste01/   def g/ if lox == "or" ), entendi que mesmo com heranças eu não posso acessar o initialize da primeira classe sem attr.

Porém na classe Teste03 eu chamei um attr (obj = Teste03.new/ n = obj.ked/ p obj.ked), mas pra que? não entendi pra que serviu, só pra chamar?

Pelo menos na minha cabeça eu entendi algumas coisas, se caso falei besteira e não entendi nada me ajudem plis. :T.T:
Espero que dê pra entender :T.T:

Spoiler
class Teste01 #com attr
   attr_reader :eke
   attr_reader :ekp
   attr_reader :ked
   attr_accessor :kad
   attr_accessor :lox
  def initialize
    @eke = 38345
    @ekp = 372
    @ked = 182.32
    @kad = "temd"
    @lox = "or"
  end
  def y
    if @eke == 38345
      p " aaa"
    end
  end
end

var = Teste01.new
var.y

class Teste02 < Teste01 #com herança
  def g
    if lox == "or"
      p @eke
      p @kad
    end
  end
  def m
    if lox == "or"
      p lox
    end
  end
  def y
    if ekp == 372
      p "nao"
      super
    end
  end
end

var = Teste02.new
var.g
var.m
var.y

class Teste03 < Teste02 #com herança/attr
  def x
    if @ked == 182.32
      p "000"
    end
  end
end

obj = Teste03.new
n = obj.ked
p obj.ked

var = Teste03.new
var.x
[close]
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Gabriel online 11/11/2019 às 13:17
Não entendi bem qual é a sua dúvida, mas, de toda forma, recomendo que estude as aulas de Ruby feitas pelo Alisson. Provavelmente você não vai encontrar em nenhum outro lugar um material mais completo que esse a respeito do assunto, quando voltado para o RPG Maker.

Aulas de Ruby #13 - Attr (https://youtu.be/j0DjIzkMScE)
Aulas de Ruby (https://centrorpg.com/index.php?topic=16769.msg127696#msg127696)
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Raizen online 11/11/2019 às 13:59
Com certeza na aula acima do tio Ali deve explicar muito bem o que é, mas vou aproveitar o tempinho que tenho aqui para mandar um adicional também  :XD:.

No Ruby as variáveis tem visibilidades igual boa parte se não todas as linguagens orientadas a objetos. Os atributos no ruby que são definidos pelo attr nada mais são do que adicionar um tipo de visibilidade para as variáveis de instância. As variáveis de instância no Ruby são semelhantes as variáveis privadas de outras linguagens, elas são visíveis apenas dentro da classe aonde foi declarada, existe um tipo de variável nas linguagens que são as variáveis públicas. Elas não tem declaração especifica no Ruby, essas variáveis públicas são as que podem ser acessadas fora da classe, no Ruby o que é feito é transformar aquela variável de instância (precedidas por @) em atributo.

as diferenças de writer, accessor e reader são as permissões que vou dar em relação aos acessos externos a classe, então se eu dou um acesso de reader a variável de instância, ela pode ser lida fora da classe, porém ela não pode ser modificada. Se for writer então ela pode ser modificada, mas não pode ser lida e se for accessor, você tem acesso completo a variável fora da própria classe.

Porque é esse nome attr? Bom como dito é porque veio de "attribute", ele significa que eu pego a variável de instância e transformo em um atributo da classe, ou sejá, quando você faz essa declaração:

class Test
attr_accessor :teste

  def init
    @teste = 2
  end
end


Então inicializo a minha classe.

test = Test.new

test.teste retorna 2,
e também posso modificar, já que dei a permissão para tal.
test.teste += 2
test.teste vai retornar 4

Mais alguma dúvida :)? Ah veja o video do Alisson antes, se ainda houver dúvidas só mandar aqui!
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Sotelie online 11/11/2019 às 14:58
Adicionando ao que os amigos acima disseram, isso é o que a virtual machine do ruby faz por trás dos panos quando você usa attr_*, caso estiver curioso:
(https://i.imgur.com/2sglfhm.png)

Em ruby isso é chamado de atributo, mas em programação geral, o termo correto para isso é Propriedade (https://en.wikipedia.org/wiki/Property_(programming)) (ou Property em inglês). Apenas tenha em mente que elas são uma forma de você escolher que variáveis podem ser públicas e quais devem ser privadas. Muitas das vezes quando criamos classes, temos aquela variável que não deve ser alterada de fora de maneira alguma, do contrário pode gerar erros no programa. Você que decide se quer deixar algo público ou não, se julgar necessário o/
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Crewyvern online 11/11/2019 às 16:01
Eu entendi em partes o que vocês falaram moço Raizen e Syureri, consegui compreender melhor sobre attr e as permissões, achava que accessor e reader funcionavam no geral e writer não funcionava, mas não sabia para que servia accessor e reader só usava sem entender o que eram, porém agr entendi que reader e writer dão permissões diferentes e accessor as duas permissões, isso já me ajudou a entender bem melhor. Mas ainda é bem confuso pra mim entender em algumas partes, como o moço Gabriel disse ali em cima para estudar as aulas do moço Alisson, vou começar a ver essas aulas também, quem sabe daqui uma semana ou mais eu consiga entender melhor sobre attr, me esforcei pra entender tudo o que vocês falaram, mas ainda não está tudo claro, vou estudar mais e se surgir mais dúvidas eu pergunto aqui se não for incomodo. :XD:

Obrigado ein, ajudou demais!
Título: Aulas do sotelie
Enviado por: Crewyvern online 14/11/2019 às 23:52
Então, eu estou assistindo as aulas do moço Alisson, estou na parte de janelas selecionáveis, eu anotei o script todo certinho pra testar e tentar criar algo sozinho, mas sem saber o porque desse erro eu não vou conseguir avançar ;-;, alguém pode me dizer porque não funcionou? eu criei um evento e chamei o script, só aparece a tela com as opções, mas não da pra selecionar as opções...

Spoiler
class Test_Scene < Scene_Base
  def start
    super
    @background = Sprite.new
    @background.bitmap = SceneManager.background_bitmap
    @my_select = My_Select.new(0,0,300,200)
  end
end

class My_Select < Window_Selectable
  def initialize(x,y,width,height)
    make_command_list
    super
    draw_commands
    activate
    select(0)
  end
  def make_command_list
    @list = []
    commands = ["selecionar1", "selecionar2", "selecionar3"]
    for i in 0...commands.size
      @list.push(commands[i])
    end
  end
  def draw_commands
    for i in 0...@list.size
      rect = item_rect(i)
      self.draw_text(rect, @list[i])
    end
  end
  def update
    if Input.trigger?(:C) && self.active
      Sound.play_ok
      p @list[index]
    end
  end
 
  def item_max
    return @list.nil? ? 0 : @list.size
  end
 
end
[close]

O que tem de errado?
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Sotelie online 15/11/2019 às 00:00
Você esqueceu o super no método update da janela. Nesse caso recomendo chamar ele antes do resto do código:

(https://i.imgur.com/jsedOUU.png)

O que o super faz é chamar o método original da classe "mãe" (aqui seria o update da classe Window_Selectable), nesse caso ele irá atualizar a janela, como a animação do cursor e processar a seleção quando você pressiona uma tecla.

Você pode usar o super antes ou depois, mas recomendo checar se uma tecla for pressionada após atualizar a janela (o/
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Crewyvern online 15/11/2019 às 00:20
Citação de: Syureri online 15/11/2019 às 00:00
Você esqueceu o super no método update da janela. Nesse caso recomendo chamar ele antes do resto do código:

(https://i.imgur.com/jsedOUU.png)

O que o super faz é chamar o método original da classe "mãe" (aqui seria o update da classe Window_Selectable), nesse caso ele irá atualizar a janela, como a animação do cursor e processar a seleção quando você pressiona uma tecla.

Você pode usar o super antes ou depois, mas recomendo checar se uma tecla for pressionada após atualizar a janela (o/

Obrigado moço, agora funcionou certinho, preciso prestar mais atenção daqui pra frente principalmente no super e return :._.:, suas aulas são ótimas e estão me ajudando bastante a evoluir, obrigado mais uma vez! :*-*:
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Sotelie online 15/11/2019 às 00:29
Tranquilo, sempre que tiver dúvidas só postar aí (o/
Programar é assim mesmo, tudo na tentativa e erro. Enquanto estiver vendo as aulas, é uma boa ideia sempre tentar fazer o contrário do que faço pra ir descobrindo os erros que dão e como você mesmo gosta de fazer as coisas haha' (tipo o que acontece se chamar um método com o número errado de parâmetros, e se eu fizer um método dentro de um método?) Boa sorte no aprendizado!
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Crewyvern online 15/11/2019 às 11:48
Citação de: Syureri online 15/11/2019 às 00:29
Tranquilo, sempre que tiver dúvidas só postar aí (o/
Programar é assim mesmo, tudo na tentativa e erro. Enquanto estiver vendo as aulas, é uma boa ideia sempre tentar fazer o contrário do que faço pra ir descobrindo os erros que dão e como você mesmo gosta de fazer as coisas haha' (tipo o que acontece se chamar um método com o número errado de parâmetros, e se eu fizer um método dentro de um método?) Boa sorte no aprendizado!

Verdade, como diz o ditado, é com os erros que se aprende, ou quase isso kkk.
Eu já tentei fazer uma classe com condições, case,arrays e hash nas condições kkk porém não deu muito certo não, foi uma bagunça, mas é bem legal sair testando tudo, e mais uma vez obrigado! :*-*:
Título: Return
Enviado por: Crewyvern online 20/11/2019 às 14:16
Eu estou com umas dúvidas sobre o return, eu já entendi pra ele serve e como usar, porém eu não sei ao certo o que da pra retornar com ele, esses dias eu estou revisando tudo que tenho aprendido, e hoje foi o return, fiz esses testes até agora...

Spoiler
def nome()
  return("eliza")
    p "8654"
end
p nome


def numero()
  return[82,292,020]
end
p numero

class Numeros
  def x()
    if x == ("uww", "wsywg")
      p "6262"
    return["uww", "wsywg"]
    end
  end
end

classe = Numeros.new
classe.x
[close]

Por exemplo nesse ultimo, eu posso retornar nomes e números nas arrays, creio que seja arrays né ;-;, porém eu fiz uma bagunça pra saber se tem como identificar se o def x é igual o que foi retornado, já fiz de muitas outras maneiras e nenhuma deu certo, tem como colocar uma condição pra verificar o que foi retornado é igual?
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Yorae Rasante online 20/11/2019 às 14:46
Helcurt, eu tava escrevendo aqui um textão pra te explicar como o return funciona em linguagens em geral, aí reli o seu texto e vi "eu já entendi pra ele serve e como usar"

Eu não entendi direito sua dúvida.

Olhando no seu código... admito que faz tempo que não mecho no ruby, mas no código você não declarou o x dentro do def x(), e ele nao é um parâmetro que você entrou nem a própria função sendo chamada recursivamente, então ele é basicamente nada, um valor fantasma indefinido. nunca que aquele if vai ser verdadeiro, e o return está antes do end do if, então o return nunca vai acontecer.
Além disso, ele está sendo comparado com dois valores dentro de um parênteses, mas não são parâmetros de uma função e nem um array, arrays usam colchetes.

ou seja, você não está podendo ver se o def x é igual ao retornado porque nada está sendo retornado


...eu acho. como disse antes faz literalmente anos que não mexo em ruby e esse código parece que é apenas uma parte, então posso estar falando asneira
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Crewyvern online 20/11/2019 às 21:28
Citação de: Yorae Rasante online 20/11/2019 às 14:46
Helcurt, eu tava escrevendo aqui um textão pra te explicar como o return funciona em linguagens em geral, aí reli o seu texto e vi "eu já entendi pra ele serve e como usar"

Eu não entendi direito sua dúvida.

Olhando no seu código... admito que faz tempo que não mecho no ruby, mas no código você não declarou o x dentro do def x(), e ele nao é um parâmetro que você entrou nem a própria função sendo chamada recursivamente, então ele é basicamente nada, um valor fantasma indefinido. nunca que aquele if vai ser verdadeiro, e o return está antes do end do if, então o return nunca vai acontecer.
Além disso, ele está sendo comparado com dois valores dentro de um parênteses, mas não são parâmetros de uma função e nem um array, arrays usam colchetes.

ou seja, você não está podendo ver se o def x é igual ao retornado porque nada está sendo retornado


...eu acho. como disse antes faz literalmente anos que não mexo em ruby e esse código parece que é apenas uma parte, então posso estar falando asneira

Opa moço, obrigado, acho que agora entendi melhor, achei que dava pra fazer assim, mas deve ser por isso que estava dando erro, e na real o código era só aquilo mesmo, não tinha outra parte, só estava fazendo uns testes pra entender melhor o return ai surgiu essa dúvida, vou fazer de um jeito melhor agora, obrigado :XD:
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Yorae Rasante online 20/11/2019 às 21:41
ah, o return parece complicado até você entender só.

quando chega no return, a função termina. não importa em que ponto dela você esteja, ela termina. pode ser dentro de um if, pode ser dentro de um loop, pode ser só na função mesmo, se chega nele ela acaba.

o nome "return" é que antigamente ele era usado só pra retornar um valor, seja de uma variável ou de um cálculo. tipo um "return 1+2" ia retornar 3. se x = 5 e "return x" iria retornar 5. se x = 7 e "return x+3" iria retornar 10.
Só que nem sempre você precisa de um valor de retorno, e para esses casos só precisa de um "return" pra fechar a função. em algumas linguagens tem que declarar a função como algo diferente, lembro que aprendi com uma linguagem que tinha que declarar a função retornaria algo do tipo void (vazio em português), em outras você tem que retornar um valor mas é só ignorar ele mesmo onde a função foi chamada mesmo.

Em resumo, return retorna um valor e fecha a função na hora. mas não precisa retornar um valor se só quiser fechar a função.
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Crewyvern online 21/11/2019 às 22:52
Citação de: Yorae Rasante online 20/11/2019 às 21:41
ah, o return parece complicado até você entender só.

quando chega no return, a função termina. não importa em que ponto dela você esteja, ela termina. pode ser dentro de um if, pode ser dentro de um loop, pode ser só na função mesmo, se chega nele ela acaba.

o nome "return" é que antigamente ele era usado só pra retornar um valor, seja de uma variável ou de um cálculo. tipo um "return 1+2" ia retornar 3. se x = 5 e "return x" iria retornar 5. se x = 7 e "return x+3" iria retornar 10.
Só que nem sempre você precisa de um valor de retorno, e para esses casos só precisa de um "return" pra fechar a função. em algumas linguagens tem que declarar a função como algo diferente, lembro que aprendi com uma linguagem que tinha que declarar a função retornaria algo do tipo void (vazio em português), em outras você tem que retornar um valor mas é só ignorar ele mesmo onde a função foi chamada mesmo.

Em resumo, return retorna um valor e fecha a função na hora. mas não precisa retornar um valor se só quiser fechar a função.

Opa, obrigado moço, agr entendi com mais clareza, pelo jeito eu não tinha entendido o return completamente, mas creio que com o tempo eu vou entendendo, obrigado msm :XD:
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: NumPaD online 27/01/2020 às 19:08
Ahoy, possível pergunta besta a baixo, por motivos de eu estar enferrujado afu em programação, e eu estar sempre pulando os estudos básicos e indo para coisas mais avançadas. A resposta deve ser algo bem simples.

Engine: RPG Maker MV
Contexto: Estou usando o Chrono Engine do Mog, em modo ABS. Quando se usa o escudo, tu defende qualquer ataque fisico, mas eu não quero isso. Eu quero que rode um teste de chance, tipo o Escudo de Madeira tem 40% de chance de defender esse ataque. Assim como em RPG de Mesa, que tu faz primeiro um teste para ver se tu defende o golpe ou não. Atualmente estou gerando um número aleatório de 1 a 10, e se for maior que 5, é defendido o ataque.
Dúvida: Como fazer uma função de porcentagem em Javascript, tendo a var _chance_ como o valor da chance de acerto, e caso tu passe esse teste de chance, a função retorna true.
Imagino algo assim:
let chance = busca_chance_na_nota_do_item
algo_randomico() // retornou 78
return true if randomico > chance
Código atual:

/**
* Returns a random integer between min (inclusive) and max (inclusive).
* The value is no lower than min (or the next integer greater than min
* if min isn't an integer) and no greater than max (or the next integer
* lower than max if max isn't an integer).
* Using Math.round() will give you a non-uniform distribution!
*/
function getRandomInt(min, max) {
    min = Math.ceil(min);
    max = Math.floor(max);
    return Math.floor(Math.random() * (max - min + 1)) + min;
}

//==============================
// * executeTouch Damage // FUTURE_NUMPAD: Aqui é executado a checkagem do escudo e aplicado o dano.
//==============================
Game_Chrono.prototype.executeTouchDamage = function(user,target) {
if (target.battler()._ras.collisionD > 0) {return};
if (this.isGuardingDirectionTouch(user,target)) {
this.executeGuardTouch(user,target);
let a = getRandomInt(1, 10);
console.log("Valor aleatório é: " + a);
if (a > 5) return; // Se a for maior que 5, é defendido e o dano é anulado!
};
// Abaixo segue o código que aplica o dano


Paz e tédio a todos.
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Sotelie online 27/01/2020 às 22:42
Se eu entendi direito, tu quer obter a porcentagem entre um valor mínimo e máximo baseado em um valor aleatório, certo?

Faz tempo que não mexo em javascript, mas vou usar o exemplo do InverseLerp (https://docs.unity3d.com/ScriptReference/Mathf.InverseLerp.html) em Unity:


// C#
// https://github.com/Unity-Technologies/UnityCsReference/blob/master/Runtime/Export/Math/Mathf.cs#L367
public static float InverseLerp(float a, float b, float value)
{
    if (a != b)
        return Clamp01((value - a) / (b - a));
    else
        return 0.0f;
}

Se o valor mínimo a for 0, e o valor máximo b for 100, e o valor value for 50, o método retorna 0.5 (50%). Clamp01 é um método que mantém um valor entre 0 e 1 para que ele não extrapole.
Na maioria das linguagens que conheço, chamar uma função random sem argumentos retorna um número entre 0 e 1 (0 e 100%). Eu sugiro trabalhar com esses valores quando se está querendo porcentagem ao invés de números inteiros como 1 e 10.
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Corvo online 28/01/2020 às 08:43
O método do Syureri resolve lindamente. Já havia escrito, mas me esqueci de postar ontem. Então cá está, é basicamente a mesma coisa em Python, só pra exemplificar a lógica:

# Importando o método que gera os valores aleatórios.
from random import randint

def attack_chance(x: int, y: int, z: int) -> int:
    """ Verifica a chance de acerto de um golpe

    :param x: Valor necessário para sucesso.
    :param y: Valor mínimo possível.
    :param z: Valor máximo possível.
    """
   
    if (x < y) or (x > z):
        raise ValueError("Invalid value.")
    elif (y > z) or (y == z):
        raise ValueError("Invalid limits.")
    else:
        return True if x * 0.01 >= randint(y, z) * 0.01 else False


Os argumentos são: x, o valor que o jogador precisa tira. Y e z, respectivamente, o mínimo e o máximo possível na jogada. Fazemos uma verificação pra ver se o valor necessário está dentro dos limites especificados e se esteslimites são válidos, então calculamos. Randint é o método que busca um valor aleatório dentro destes limites. As multiplicações transformam o número em um float menor que 1, como Syureri recomendou.

Por fim, a conta é mais ou menos essa:

(Valor necessário [em float <1]) é maior ou igual ao (valor aleatório [em float < 1])?
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Kyo Panda online 28/01/2020 às 09:05
No MV seria:

getRandomInt(1, 100) < _chance_
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: NumPaD online 28/01/2020 às 15:20
Valeu galera, todas soluções me servem. Vou fazer algo aqui.
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Crewyvern online 23/02/2020 às 15:31
Alguém poderia me explicar como essa condição funciona?

(https://i.ibb.co/BCLj7hH/d1.png)

Eu estou aprendendo javascript, e estava praticando o que eu aprendi até o momento. Após tentar bastante, consegui fazer uma condição funcionar, mas não entendi muito bem como ela sabia o valor da variável, sendo que eu não coloquei na condição " se a variável n4 for igual a 25 ", foi só colocar o número que funcionou. No javascript funciona sem precisar declarar a variável na condição?

A primeira vez que tentei fiz assim, mas não funcionou. Não está certo assim também?

(https://i.ibb.co/k9wD0kr/d2.png)
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Raizen online 23/02/2020 às 15:36
Dá uma zoiada aqui: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Operators/Operadores_de_compara%C3%A7%C3%A3o

um = não é operador de comparação, ele está fazendo o n4 ser igual a 25 e não comparando com 25.
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Crewyvern online 23/02/2020 às 15:53
Citação de: Raizen online 23/02/2020 às 15:36
Dá uma zoiada aqui: https://developer.mozilla.org/pt-BR/docs/Web/JavaScript/Reference/Operators/Operadores_de_compara%C3%A7%C3%A3o

um = não é operador de comparação, ele está fazendo o n4 ser igual a 25 e não comparando com 25.

Obrigadoo moço Raizen, agora está funcionando e também consegui entender melhor. Ajudou bastante, nunca que ia saber que precisaria de 3 de igualdade, fora as outras informações que vão ajudar muito também, obrigado mais uma vez.
:*-*:
Título: duvida sobre game looping
Enviado por: Crewyvern online 10/06/2020 às 23:36
Então, eu tenho aprendido muito em java, e resolvi tentar recriar um novo projeto teste, com o intuito de ver o meu progresso, chegando na parte de criar um game looping pro jogo rodar a 60 fps, mesmo sabendo o funcionamento em partes, ainda é muito confuso.

No meu projeto, uso esse aqui:
(https://i.ibb.co/ZYfbSw9/Capturar.png)

No stackoverflow, vi esse aqui:
(https://i.ibb.co/ZXh5YrH/Capturar1.png)

É bem parecido com o que eu uso, mas não entendi 100%, na stack eles colocaram um try/catch, até onde eu sei, é usado se caso houver algum problema no código.

Qual a diferença entre esses dois? Um é melhor do que o outro, ou funcionam da mesma forma, independente da maneira que foi escrito?

Também queria saber se usar um try/catch faz diferença, pelo que entendi, quando ocorre algum erro na hora que estou programando, ele avisa no console, mas isso faz alguma diferença quando o jogo/aplicação está finalizado digamos assim, ou só é usado no desenvolvimento?

Não sei se aqui pode postar coisas sobre java, mas se puder e alguém tirar essa duvida, ficaria agradecido, claro se não for incomodo da minha parte. :XD:
Título: Help Discord js?
Enviado por: Crewyvern online 25/12/2020 às 17:24
Boa tarde pessoas! Não sei se pode postar coisas sobre desenvolvimento de bots aqui, mas como é em javascript, imagino que não tenha problema.

Então, queria saber se alguém pode me ajudar com esse código, em parte ele já está funcionando do jeito que quero, que é enviar perguntas para que a pessoa responda, assim ele coleta as respostas e envia para outro canal.

O código é esse:

Spoiler
const Discord = require("discord.js");

exports.run = async (client, message, args) => {

const questions = ['Escolha um título!', 'Escolha uma descrição!', 'Escolha uma segunda descrição!','Obrigado! Sua sugestão será avaliada.'];

const question = await message.channel.send(questions[0]);

const filter = msg => msg.author.id === message.author.id;

const collector = message.channel.createMessageCollector(filter, { time: 150 * 1330 });

const answers = [];

collector.on('collect', msg => {
  answers.push(msg.content);
  questions.shift();
  if (questions.length <= 0) return collector.stop('done');
  question.edit(questions[0]).catch(error => {
    console.error(error);
    collector.stop();
  });
 
    var channel = message.guild.channels.cache.find(ch => ch.id === "773593081605914684");
   
    channel.send(`Autor: ${message.author}\nDescrição: ${msg.content = answers[0]}\nDescrição2: ${msg.content = answers[1]}\nDescrição3: ${msg.content = answers[2]}`)
});

}
[close]

(https://i.ibb.co/55G6Z0C/d2.png)

(https://i.ibb.co/v3d5QJB/d1.png)

E como dá pra ver nas imagens, ele envia cada uma das respostas e as que ainda não foram respondidas ficam indefinidas. Pois bem, o que eu queria fazer é, esperar a pessoa responder todas as perguntas e depois enviar, alguém aí pode me ajudar se possível?
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Brandt online 25/12/2020 às 22:33
Só mover o trecho que envia as repostas pra dentro da condição de terem acabado as questões:

const Discord = require("discord.js");

exports.run = async (_, message) => {
    const questions = [
        'Escolha um título!',
        'Escolha uma descrição!',
        'Escolha uma segunda descrição!',
        'Obrigado! Sua sugestão será avaliada.'
    ];

    const question = await message.channel.send(questions[0]);

    const filter = msg => msg.author.id === message.author.id;

    const collector = message.channel.createMessageCollector(filter, { time: 150 * 1330 });

    const answers = [];

    collector.on('collect', msg => {
        answers.push(msg.content);
        questions.shift();
       
        if (questions.length <= 0) {
            var channel = message.guild.channels.cache.find(ch => ch.id === "773593081605914684");
            channel.send(`Autor: ${message.author}\nDescrição: ${msg.content = answers[0]}\nDescrição2: ${msg.content = answers[1]}\nDescrição3: ${msg.content = answers[2]}`)

            return collector.stop('done');
        }

        question.edit(questions[0]).catch(error => {
            console.error(error);
            collector.stop();
        });
    });
}


Dá pra dar uma melhorada na organização e lógica também, por exemplo usar um índice pra passar para a próxima questão ao invés de dar shift no array e separar as coisas em funções:

const Discord = require("discord.js");

const questions = [
    'Escolha um título!',
    'Escolha uma descrição!',
    'Escolha uma segunda descrição!',
    'Obrigado! Sua sugestão será avaliada.'
];

exports.run = async (_, message) => {
    const questionIndex = 0;
    const question = await message.channel.send(questions[0]);

    const collector = message.channel.createMessageCollector(
        msg => msg.author.id === message.author.id,
        {
            time: 150 * 1330
        }
    );

    const answers = [];

    function sendAnswers() {
        var channel = message.guild.channels.cache.find(
            ch => ch.id === "773593081605914684"
        );

        channel.send(
            `Autor: ${message.author}\n` +
            `Descrição: ${msg.content = answers[0]}\n` +
            `Descrição2: ${msg.content = answers[1]}\n` +
            `Descrição3: ${msg.content = answers[2]}`
        );
    }

    async function editQuestion() {
        try {
            question.edit(questions[questionIndex]);
        } catch (error) {
            console.error(error);
            collector.stop();
        }
    }

    collector.on('collect', msg => {
        answers.push(msg.content);
        questionIndex++;
       
        if (questionIndex == questions.length) {
            sendAnswers();
            return collector.stop('done');
        } else {
            editQuestion();
        }
    });
}
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Crewyvern online 26/12/2020 às 11:59
Citação de: Brandt online 25/12/2020 às 22:33
Só mover o trecho que envia as repostas pra dentro da condição de terem acabado as questões:

const Discord = require("discord.js");

exports.run = async (_, message) => {
    const questions = [
        'Escolha um título!',
        'Escolha uma descrição!',
        'Escolha uma segunda descrição!',
        'Obrigado! Sua sugestão será avaliada.'
    ];

    const question = await message.channel.send(questions[0]);

    const filter = msg => msg.author.id === message.author.id;

    const collector = message.channel.createMessageCollector(filter, { time: 150 * 1330 });

    const answers = [];

    collector.on('collect', msg => {
        answers.push(msg.content);
        questions.shift();
       
        if (questions.length <= 0) {
            var channel = message.guild.channels.cache.find(ch => ch.id === "773593081605914684");
            channel.send(`Autor: ${message.author}\nDescrição: ${msg.content = answers[0]}\nDescrição2: ${msg.content = answers[1]}\nDescrição3: ${msg.content = answers[2]}`)

            return collector.stop('done');
        }

        question.edit(questions[0]).catch(error => {
            console.error(error);
            collector.stop();
        });
    });
}


Dá pra dar uma melhorada na organização e lógica também, por exemplo usar um índice pra passar para a próxima questão ao invés de dar shift no array e separar as coisas em funções:

const Discord = require("discord.js");

const questions = [
    'Escolha um título!',
    'Escolha uma descrição!',
    'Escolha uma segunda descrição!',
    'Obrigado! Sua sugestão será avaliada.'
];

exports.run = async (_, message) => {
    const questionIndex = 0;
    const question = await message.channel.send(questions[0]);

    const collector = message.channel.createMessageCollector(
        msg => msg.author.id === message.author.id,
        {
            time: 150 * 1330
        }
    );

    const answers = [];

    function sendAnswers() {
        var channel = message.guild.channels.cache.find(
            ch => ch.id === "773593081605914684"
        );

        channel.send(
            `Autor: ${message.author}\n` +
            `Descrição: ${msg.content = answers[0]}\n` +
            `Descrição2: ${msg.content = answers[1]}\n` +
            `Descrição3: ${msg.content = answers[2]}`
        );
    }

    async function editQuestion() {
        try {
            question.edit(questions[questionIndex]);
        } catch (error) {
            console.error(error);
            collector.stop();
        }
    }

    collector.on('collect', msg => {
        answers.push(msg.content);
        questionIndex++;
       
        if (questionIndex == questions.length) {
            sendAnswers();
            return collector.stop('done');
        } else {
            editQuestion();
        }
    });
}


Olá Brandt, muito obrigado, funcionou que é uma beleza, estava a dias tentando fazer isso, e como discord js ainda é bem confuso as vezes, fico empacado fácil.

CitarDá pra dar uma melhorada na organização e lógica também, por exemplo usar um índice pra passar para a próxima questão ao invés de dar shift no array e separar as coisas em funções:

Ainda é algo novo pra mim, mas vou estudar o seu código e tentar usar nos outros comandos do bot. Ah sim, o segundo código deu um erro:

(https://i.ibb.co/TTPRxrv/Capturar.png)

Porém eu vou tentar descobrir o porque do erro, acho que vai ser bom pro meu aprendizado, essa semana tenho visto muitos erros e depois de um tempo consigo entender, e pelo que entendi é algum valor que não pode ser alterado, ou que já foi declarado, espero que seja algo referente a isso, esses erros as vezes me confundem demais.
Título: Ajuda?
Enviado por: Crewyvern online 14/01/2021 às 16:56
Alguém sabe me dizer o que tem de errado nesse comando do bot?

const Discord = require("discord.js");
exports.run = async (_, message) => {
//=======================================================
    const embed = new Discord.MessageEmbed()
      .setColor('RANDOM')
      .setTitle('__COMANDOS DISPONÍVEIS__')
      .setDescription('\n\n**__DIVERSÃO__**\n- =angry\n- =attack\n- =clap\n- =dance\n- =embarassed\n- =gic\n- =hug\n- =hungry\n- =happy\n- =kiss\n- =meme\n- =poke\n- =pout\n- =sad\n- =scared |**em breve**\n- =wink\n**- Para todos os Membros Cadastrados!**\n\n**__JOGOS__**\n- =atnl **em breve**\n\n**__OUTROS__**\n- =imgeneration\n- =image\n- =color\n- =sg\n**- Alguns necessitam de Cargos!**\n\n **__RESTRITOS__**\n- =atr\n- =clear\n **- Apenas para ADMs ou MODs!**\n\n**Para saber como funcionam os comandos consulte, =ex.** ');
    await message.channel.send(embed);
//=======================================================
    const pollTopic = await message.channel.send(message.content.slice(1));
//=======================================================
    await pollTopic.react('UM EMOJI');
//=======================================================
    const filter = (reaction,user) => reaction.emoji.name && user.id === reaction;
//=======================================================
    (collected => {
const reaction = collected.first();
    if(reaction.emoji.name === 'UM EMOJI'){
      message.channel.send('agag')
    };
//=======================================================
  });
//=======================================================
};


Ao reagir o emoji era para enviar essa mensagem no canal, porém nada acontece, tirando o fato de não mostrar nenhum erro no console. Até o momento estou achando que poderia ser essa parte (const filter = (reaction,user) => reaction.emoji.name && user.id === reaction;), porém já escrevi de tudo após(===), mas nada funciona e nem ao menos mostra um erro.

(https://i.ibb.co/H7T2tGQ/Capturar.png)

Só fica nisso aí.
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Corvo online 14/01/2021 às 17:06
De Js não entendo, mas você viu se o bot tem permissão para ver reações? Nas configurações da API você define com o que ele pode ou não interagir. E ele está mandando outras mensagens normalmente?
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Crewyvern online 14/01/2021 às 17:22
Citação de: Corvo online 14/01/2021 às 17:06
De Js não entendo, mas você viu se o bot tem permissão para ver reações? Nas configurações da API você define com o que ele pode ou não interagir. E ele está mandando outras mensagens normalmente?

Ele tem permissão de Administrador. Os outros comandos estão normais, além desse, tenho outros comandos com reações e funcionam bem, mas esse em específico não quer dá sinal de vida nessa parte de jeito nenhum. Já testei algo semelhante com condições e está funcionando, só esse que não.
:T.T:
Mas mesmo assim obrigado Corvo.
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Corvo online 14/01/2021 às 17:27
E este "UM EMOJI"? Os nomes das reações não precisam estar codificados (https://discordjs.guide/popular-topics/reactions.html#custom-emojis)?
Título: Re:Aula Ativa de Javascript/Ruby/RGSS e outras linguagens de programação
Enviado por: Crewyvern online 14/01/2021 às 17:49
Citação de: Corvo online 14/01/2021 às 17:27
E este "UM EMOJI"? Os nomes das reações não precisam estar codificados (https://discordjs.guide/popular-topics/reactions.html#custom-emojis)?

No código tem um emoji que copiei, porém aqui estava dando erro "A mensagem foi deixada em branco.", então escrevi isso no lugar. Eu vi alguns exemplos nesse guia do discord.js, usei um deles que era semelhante ao que eu estou usando, tentei até mudar algumas coisas já que estava funcionando, mas foi pior, surgiram vários erros.