🤔 Para Refletir :
"Não descarte uma ideia aparentemente ruim, pode ser apenas o efeito do spoiler."
- Frank

comandos ocultos RGSS

Riven

Cidadão
Membro
Membro
Juntou-se
13 de Fevereiro de 2017
Postagens
133
Bravecoins
4
o pessoal. Alguem sabe como descobre ou o que significa os seguintes comandos:

kind
  exemplo:    if battler.current_action.kind == 0 and battler.current_action.basic == 0

basic,

e

rescue

vlw
 
Pela construção do código exemplo ali, parece ser uma ação em combate.
Você pode tentar criar uma batalha e editar esses valores pra ver se muda algo, pode ser uma forma de descobrir;
 
Sobre if battler.current_action.kind == 0 and battler.current_action.basic == 0 vamos por partes:

  if é um condicional. Recomendo procurar um tutorial de programação com ruby para entender.

  current_action.kind retorna o tipo da ação, ou seja, a ação atual (current action) do combatente (battler). No caso "0" deve se referir a "defender".

  current_action.basic nunca mexi com está propriedade mas acho que seja a ação basica (basic) do combatente (battler).

  Essa linha que você apresentou verifica se o combatente está defendendo e faz parte do metodo "defending?"

rescue é o "catch" do ruby, ele basicamente trata uma exceção.  Leia isso para compreender melhor.

Alguma alma que mexa com rgss confirme para mim.
 
Não existem comandos ocultos no RGSS, tudo é documentado, você só precisa procurar.

As propriedades 'kind' e 'basic', por exemplo, provavelmente são da classe Game_Action, que você acha inteirinha documentada no próprio editor de scripts, ou da classe RPG::Action (ou semelhante), que apesar de escondida no editor tem uma documentação completa no arquivo de ajuda do RM (pressione F1 em qualquer seção do programa que ele aparece).



O rescue não é nem do RGSS (é do próprio Ruby), muito menos oculto. Trata-se de um comando de salvaguarda contra erros, semelhante ao try...catch em algumas linguagens como citado pelo [member=1330]HermesPasser[/member] acima.

Funciona assim:
Código:
begin
# CÓDIGO EXPLOSIVO
rescue
# Não morri
end

Dessa forma, se o "código explosivo" lançar algum erro a execução não vai ser interrompida. Em Ruby, para lançar erros usa-se o comando raise:
Código:
raise RuntimeError.new("Vixe, deu ruim")

Um exemplo:
Código:
begin
  raise '<Mensagem de erro aqui>'
rescue
  puts 'Ufa, tô vivo'
end

^ esse código printa "Ufa, tô vivo" no console.

Note que o rescue não vai evitar erros de sintaxe. Por exemplo, se você escrever:
Código:
begin
  1 + 2 = 7
rescue
end

Você ainda vai receber uma mensagem de erro.
 
[member=78]Brandt[/member] só dando um adendo, é possível capturar erros de sintaxe, mas quem seria louco de faze-lo?
Creio que para tal teria que explicitamente capturar o SyntaxError.
 
HermesPasser comentou:
[member=78]Brandt[/member] só dando um adendo, é possível capturar erros de sintaxe, mas quem seria louco de faze-lo?
Creio que para tal teria que explicitamente capturar o SyntaxError.

Não, não é possível capturar erros de sintaxe, mesmo explicitamente.

Erros de sintaxe acontecem em tempo de compilação (mesmo que Ruby não seja compilado, ele tem uma etapa de análise léxica), já o rescue é um recurso de tempo de execução. A mesma lógica se aplica a outras linguagens, com o try...catch.

A única situação onde o rescue captura erros de sintaxe é em volta de chamadas ao método "eval" (já tive problema com isso várias vezes, aliás), mas isso é só porque a própria análise léxica acontece em tempo de execução.

Aproveitando o adendo pra mostrar também que é possível capturar exceções específicas colocando nomes de classe em cláusulas rescue:
Código:
begin
  raise RuntimeError.new
rescue SyntaxError
  print 1 # Nunca vai entrar aqui, a menos que tenha um eval lá em cima
rescue ArgumentError
  print 2
rescue ZeroDivisionError
  print 3
rescue
  print 'Default'
end

^ No código acima, por exemplo, a saída seria 'Default', porque a exceção lançada não é de nenhuma das classes especificadas.

Edit: Vi só agora o link que o [member=1330]HermesPasser[/member] postou, é bem completo, dá uma olhada lá pra uma explicação mais a fundo do comando de resgate do Ruby.
 
Voltar
Topo Inferior