Autor Tópico: Dúvidas de funcionamento interno  (Lida 117 vezes)

0 Membros e 1 Visitante estão vendo este tópico.

Linkei

  • Offline
  • *
  • Mensagens: 233
  • Sexo: Masculino
  • Curtindo a vida
  • Especialidade: Scripts
  • Maker: RPG Maker XP

    • Contato
    • MSN Messenger - moraeslago@uol.com.br
    • Ver Perfil
    • Empire Of Linkei(Em construção)
    • Email
Dúvidas de funcionamento interno
« : 19 de Fevereiro de 2010, 19:43 »
Olá pessoal!
Bem, hoje(e por um tempo) vou fazer algumas perguntas de funcionamento do RPG Maker, e de RGSS...
Bem, eu sempre tento descobrir sozinho antes de perguntar, mas algumas coisas eu não conssigo descobrir...Principalmen te as que dizem respeito à síntaxe Ruby.

Bem, hoje eu vou trazer a minha primeira...
Mudar Max_HpResolvido!
Muito Obrigado á todos que ajudaram!

Dito no Game_Battler1, Linha 124 ou Linha 143:
Código: [Selecionar]
  def maxhp=(maxhp)
    @maxhp_plus += maxhp - self.maxhp
    @maxhp_plus = [[@maxhp_plus, -9999].max, 9999].min
    @hp = [@hp, self.maxhp].min
  end
Oquê eu acho é que esse é comando ativado quando usamos:
actor.maxhp = 500 ou actor.maxhp += 5

Mas eu não conssigo entender como funciona para actor.maxhp += 500.
Fico em dúvida até mesmo se é esse o comando, Pois trocando a variavel, ficaria assim na segunda linha:
@maxhp_plus += += 5 - self.maxhp
Então eu queria que me explicassem como ocorre isto...

O motivo da dúvida é porquê o Mog_Tp_System não funciona com distribuição de pontos, mesmo que você use o comando certo, então eu vou tentar criar um desses melhor, e isto pode me ajudar a otimizar o script.
Bem, seu eu apenas copiasse algumas linhas editando algumas coisinhas que eu sei iria funcionar, mas eu gosto de saber como o sistema funciona e oquê estou fazendo  :SRM 57:

Espero que entendam  :SRM 8:
item_effectResolvido
Continuo com meu script de terceiro atributo, embora muito devagar...
Esta é minha meta para me considerar um Scripter Apto a se chamar de Scripter

Mas por enquanto preciso de ajuda...
Dito no Game_Battler 3, dentro do método item_effect
Linha 261 ou Linha 274:
Código: [Selecionar]
      last_hp = self.hp
      last_sp = self.sp
      self.hp += recover_hp
      self.sp += recover_sp
      effective |= self.hp != last_hp
      effective |= self.sp != last_sp

Ao que eu entendo essa é a parte que define se o item irá desaparecer do inventario se tiver efeito, e retornar o sonzinho de erro se não tiver efeito.
Problema: porque não funciona comigo? O.o
Código: [Selecionar]
  alias lk_item_effect item_effect
  def item_effect(item)
    if Lk::Fp_Items[item.id] != nil
      recover_fp = ((maxfp * Lk::Fp_Items[item.id][0]) / 100) + Lk::Fp_Items[item.id][1]
    else
      recover_fp = 0
    end
    last_fp = self.fp
    self.fp += recover_fp
    effective = true if last_fp != self.fp
    if Lk::Fp_Items[item.id] != nil and Lk::Fp_Items[item.id][2] != nil
      @maxfp_plus = Lk::Fp_Items[item.id][2]
      effective = true
    end
    lk_item_effect(item)
  end
Digamos que o carinha esteja com todos seus stats no crítico, daquele de 1 ponto mesmo, e eu clicar pra ele usar o item...
Ele não é usado, não é curado, e retorna o sonzinho de erro...
Ja verifiquei bastante, mas não entendi porquê?

Aproveitando para perguntar pra que serve o |=
« Última modificação: 18 de Abril de 2010, 19:45 por Linkei »
Registrado
Que coisa...super inativo....sem vontade de programar nem nada...
A unica coisa que eu tenho vontade é de terminar os scripts que deichei pela metade quando fiquei inativo O.O

Vou ver oquê fasso, por hora, estou concertando os links dos scripts que já fiz...Espero que tenham gostado =)

Hiperbanka

  • Offline
  • *
  • Mensagens: 15
  • Sexo: Masculino
  • method x1=x0 - f(x0)/f'(x0)
  • Especialidade: Mapeamento
  • Maker: RPG Maker XP

    • Contato
    • Ver Perfil
Re: Dúvidas de funcionamento interno
« Resposta #1 : 19 de Fevereiro de 2010, 22:05 »
A função maxhp= é, sim, ativada quando você declara:
actor.maxhp = 500.

Declarar:
actor.maxhp += 5
É o mesmo que escrever:
actor.maxhp = actor.maxhp +5

Para escrever o primeiro, basta que haja uma função "maxhp=". Para escrever o segundo, é preciso que exista a função "maxhp" e  função "maxhp=".


Agora, você leu a linha errado:
maxhp_plus += maxhp - self.maxhp
@maxhp_plus += += 5 - self.maxhp

maxhp não vale "+=5". maxhp vale o valor que o script retorna quando se lê a função "maxhp".

« Última modificação: 19 de Fevereiro de 2010, 22:06 por Hiperbanka »
Registrado

O problema das conclusões é que elas sempre vêm depois.

Atoa

  • Online
  • *
  • Mensagens: 2294
  • Sexo: Masculino
  • Especialidade: Multifunção
  • Maker: RPG Maker XP

    • Contato
    • Ver Perfil
Re: Dúvidas de funcionamento interno
« Resposta #2 : 19 de Fevereiro de 2010, 22:12 »
Quando adiciona o sinal de igual ao definir um método como no exemplo abaixo

def metodo=(valor)

Isto significa que você pode fazer operações com ele.

Basicamente da forma que o Hiperbanka explicou.

Uma coisa que você também é bom você entender.

def metodo é diferente de def metodo(valor) que por sua vez é diferente def metodo=(valor)
« Última modificação: 19 de Fevereiro de 2010, 22:20 por Atoa »
Registrado


Sobre a "ditadura":
A democracia nos acostumou muito mal. Achamos que podemos fazer o que quiser, já que a lei não costuma ser muito levada a sério. Daí, quando chega alguém que presa o cumprimento das regras já é taxado de 'ditador'. Um cara ditador é um cara que impõe regras para você, contra ou não à sua vontade. Mas, todos nós, quando entramos na SRM, entramos de acordo com as regras... que devem ser seguidas. Isso não é ditadura, isso é ordem...

Linkei

  • Offline
  • *
  • Mensagens: 233
  • Sexo: Masculino
  • Curtindo a vida
  • Especialidade: Scripts
  • Maker: RPG Maker XP

    • Contato
    • MSN Messenger - moraeslago@uol.com.br
    • Ver Perfil
    • Empire Of Linkei(Em construção)
    • Email
Re: Dúvidas de funcionamento interno
« Resposta #3 : 15 de Março de 2010, 21:14 »
Pessoal, to com mais uma dúvida  :SRM 27:
item_effectContinuo com meu script de terceiro atributo, embora muito devagar...
Esta é minha meta para me considerar um Scripter Apto a se chamar de Scripter

Mas por enquanto preciso de ajuda...
Dito no Game_Battler 3, dentro do método item_effect
Linha 261 ou Linha 274:
Código: [Selecionar]
      last_hp = self.hp
      last_sp = self.sp
      self.hp += recover_hp
      self.sp += recover_sp
      effective |= self.hp != last_hp
      effective |= self.sp != last_sp

Ao que eu entendo essa é a parte que define se o item irá desaparecer do inventario se tiver efeito, e retornar o sonzinho de erro se não tiver efeito.
Problema: porque não funciona comigo? O.o
Código: [Selecionar]
  alias lk_item_effect item_effect
  def item_effect(item)
    if Lk::Fp_Items[item.id] != nil
      recover_fp = ((maxfp * Lk::Fp_Items[item.id][0]) / 100) + Lk::Fp_Items[item.id][1]
    else
      recover_fp = 0
    end
    last_fp = self.fp
    self.fp += recover_fp
    effective = true if last_fp != self.fp
    if Lk::Fp_Items[item.id] != nil and Lk::Fp_Items[item.id][2] != nil
      @maxfp_plus = Lk::Fp_Items[item.id][2]
      effective = true
    end
    lk_item_effect(item)
  end
Digamos que o carinha esteja com todos seus stats no crítico, daquele de 1 ponto mesmo, e eu clicar pra ele usar o item...
Ele não é usado, não é curado, e retorna o sonzinho de erro...
Ja verifiquei bastante, mas não entendi porquê?

Aproveitando para perguntar pra que serve o |=
Registrado
Que coisa...super inativo....sem vontade de programar nem nada...
A unica coisa que eu tenho vontade é de terminar os scripts que deichei pela metade quando fiquei inativo O.O

Vou ver oquê fasso, por hora, estou concertando os links dos scripts que já fiz...Espero que tenham gostado =)

Atoa

  • Online
  • *
  • Mensagens: 2294
  • Sexo: Masculino
  • Especialidade: Multifunção
  • Maker: RPG Maker XP

    • Contato
    • Ver Perfil
Re: Dúvidas de funcionamento interno
« Resposta #4 : 15 de Março de 2010, 22:54 »
"effective" não é um método, é uma variável local.

se você reparar pode ver que o método "def item_effect(item)" retorna o valor da variavel local "effective"
Código: [Selecionar]
  def item_effect(item)
    [...]
    return effective
  end

então, ao "aliasiar" o método def item_effect(item), você deve atribui-lo a uma variavel local, já que ele retornou um valor que você precisa.

por exemplo:
Código: [Selecionar]
  alias aliasied_item_effect item_effect
  def item_effect(item)
    [...]
    effective_result = aliasied_item_effect(item)
    [...]
    return effective_result
  end

pro seu código funcionar poderia ser usado algo assim (so pra constar: a operação var1 |= var2 significa que a var 1 será igual a var 2 apenas se a var1 for falsa, se ela for verdadeira não haverá mudança)


Código: [Selecionar]
  alias lk_item_effect item_effect
  def item_effect(item)
    effective = lk_item_effect(item)
    if Lk::Fp_Items[item.id] != nil
      recover_fp = ((maxfp * Lk::Fp_Items[item.id][0]) / 100) + Lk::Fp_Items[item.id][1]
    else
      recover_fp = 0
    end
    last_fp = self.fp
    self.fp += recover_fp
    effective |= last_fp != self.fp
    if Lk::Fp_Items[item.id] != nil and Lk::Fp_Items[item.id][2] != nil
      @maxfp_plus = Lk::Fp_Items[item.id][2]
      effective = true
    end
    return effective
  end
Registrado


Sobre a "ditadura":
A democracia nos acostumou muito mal. Achamos que podemos fazer o que quiser, já que a lei não costuma ser muito levada a sério. Daí, quando chega alguém que presa o cumprimento das regras já é taxado de 'ditador'. Um cara ditador é um cara que impõe regras para você, contra ou não à sua vontade. Mas, todos nós, quando entramos na SRM, entramos de acordo com as regras... que devem ser seguidas. Isso não é ditadura, isso é ordem...

Linkei

  • Offline
  • *
  • Mensagens: 233
  • Sexo: Masculino
  • Curtindo a vida
  • Especialidade: Scripts
  • Maker: RPG Maker XP

    • Contato
    • MSN Messenger - moraeslago@uol.com.br
    • Ver Perfil
    • Empire Of Linkei(Em construção)
    • Email
Re: Dúvidas de funcionamento interno
« Resposta #5 : 18 de Abril de 2010, 19:44 »
Atoa, depois que você fala, parece que tudo toma um sentido  :SRM 17:

Obrigado mais uma vez pela ajuda ^^
Registrado
Que coisa...super inativo....sem vontade de programar nem nada...
A unica coisa que eu tenho vontade é de terminar os scripts que deichei pela metade quando fiquei inativo O.O

Vou ver oquê fasso, por hora, estou concertando os links dos scripts que já fiz...Espero que tenham gostado =)