Registrarse

[RPG - Scripting] ¿Se puede desactivar el sistema de desobediencia en Essentials?

Estado
Cerrado para nuevas respuestas.

Kurotao

Cocinando Queques.
Buenos días tardes o noches dependiendo de cuando lean esto.

Pues bien, tengo una duda ¿Se puede desactivar el sistema de desobediencia en el essentials?

Si se puede ¿Como logro desactivarlo?

Muchas gracias por tomarse su tiempo, esperare pacientemente una respuesta.

Que tengan buen dia.
 

Diego Mertens

Dartrix Joven
Tal vez si cambias esto:
Código:
  def pbObedienceCheck?(choice)   # Returns true if Pokémon obeys, false if won't
    return true if choice[0]!=1
    return true if !@battle.internalbattle
    return true if !@battle.pbOwnedByPlayer?(@index)
    disobedient = false
    # Pokémon may be disobedient; calculate if it is
    badgelevel = 10*(@battle.pbPlayer.numbadges+1)
    badgelevel = PBExperience::MAXLEVEL if @battle.pbPlayer.numbadges>=8
    move = choice[2]
    if   [MENTION=35709]pokemo[/MENTION]n.isForeign?(@battle.pbPlayer) && @level>badgelevel
      a = ((@level+badgelevel)*@battle.pbRandom(256)/256).floor
      disobedient |= (a>=badgelevel)
    end
    if self.respond_to?("pbHyperModeObedience")
      disobedient |= !self.pbHyperModeObedience(move)
    end
    return true if !disobedient
Por esto:
Código:
  def pbObedienceCheck?(choice)   # Returns true if Pokémon obeys, false if won't
    return true if choice[0]!=1
    return true if !@battle.internalbattle
    return true if !@battle.pbOwnedByPlayer?(@index)
    disobedient = false
    # Pokémon may be disobedient; calculate if it is
    badgelevel = 10*(@battle.pbPlayer.numbadges+1)
    badgelevel = PBExperience::MAXLEVEL if @battle.pbPlayer.numbadges>=8
    move = choice[2]
    if   [MENTION=35709]pokemo[/MENTION]n.isForeign?(@battle.pbPlayer) && @level>badgelevel
      a = ((@level+badgelevel)*@battle.pbRandom(256)/256).floor
      disobedient |= (a>=badgelevel)
    end
    if self.respond_to?("pbHyperModeObedience")
      disobedient |= !self.pbHyperModeObedience(move)
    end
    return true if disobedient && !disobedient
No lo he probado, pero quizás funcione, siempre devuelve true, por lo que...
EDIT: ¡Sí funciona!
 

Fran Agustín

Si el sol besa tus ojos, ni cuenta te das.
Miembro insignia
Tal vez si cambias esto:
Código:
  def pbObedienceCheck?(choice)   # Returns true if Pokémon obeys, false if won't
    return true if choice[0]!=1
    return true if !@battle.internalbattle
    return true if !@battle.pbOwnedByPlayer?(@index)
    disobedient = false
    # Pokémon may be disobedient; calculate if it is
    badgelevel = 10*(@battle.pbPlayer.numbadges+1)
    badgelevel = PBExperience::MAXLEVEL if @battle.pbPlayer.numbadges>=8
    move = choice[2]
    if   [MENTION=35709]pokemo[/MENTION]n.isForeign?(@battle.pbPlayer) && @level>badgelevel
      a = ((@level+badgelevel)*@battle.pbRandom(256)/256).floor
      disobedient |= (a>=badgelevel)
    end
    if self.respond_to?("pbHyperModeObedience")
      disobedient |= !self.pbHyperModeObedience(move)
    end
    return true if !disobedient
Por esto:
Código:
  def pbObedienceCheck?(choice)   # Returns true if Pokémon obeys, false if won't
    return true if choice[0]!=1
    return true if !@battle.internalbattle
    return true if !@battle.pbOwnedByPlayer?(@index)
    disobedient = false
    # Pokémon may be disobedient; calculate if it is
    badgelevel = 10*(@battle.pbPlayer.numbadges+1)
    badgelevel = PBExperience::MAXLEVEL if @battle.pbPlayer.numbadges>=8
    move = choice[2]
    if   [MENTION=35709]pokemo[/MENTION]n.isForeign?(@battle.pbPlayer) && @level>badgelevel
      a = ((@level+badgelevel)*@battle.pbRandom(256)/256).floor
      disobedient |= (a>=badgelevel)
    end
    if self.respond_to?("pbHyperModeObedience")
      disobedient |= !self.pbHyperModeObedience(move)
    end
    return true if disobedient && !disobedient
No lo he probado, pero quizás funcione, siempre devuelve true, por lo que...
EDIT: ¡Sí funciona!
Tengo una enorme duda, ¿eso realmente funciona?
Nunca he usado Ruby y a lo mejor es que no entiendo la lógica de la última línea (que parece ser lo único que has cambiado).

disobedient tiene un valor que puede ser verdadero o falso.
!disobedient es la negación del valor anterior por lo que siempre tendrá el valor contrario.

Entonces pienso, ¿qué pasa con esta condición? Porque hasta donde sé el operador lógico and (&&) devuelve true si y sólo si ambos operandos lo son.
Código:
if desobedient && !desobedient
  1. desobedient = true => !desobedient = false => desobedient && !desobedient = true && false = false
  2. desobedient = false => !desobedient = true => desobedient && !desobedient = false && true = false

Si no me equivoco, eso devolverá siempre false y no true.

Ahora, si lo que quieres es que devuelva siempre true, ¿por qué no directamente te olvidas de la condición?
Código:
return true

Si igual quieres poner la condición, ¿no sería mejor usar un or (||)?
Código:
return true if desobedient || !desobedient
En este caso, siempre que uno de los dos fuera true, devolvería true sin importar el valor del otro y como sabemos que uno es el contrario al otro y son booleanos, siempre habrá uno que será true.
 

Diego Mertens

Dartrix Joven
Tengo una enorme duda, ¿eso realmente funciona?
Nunca he usado Ruby y a lo mejor es que no entiendo la lógica de la última línea (que parece ser lo único que has cambiado).

disobedient tiene un valor que puede ser verdadero o falso.
!disobedient es la negación del valor anterior por lo que siempre tendrá el valor contrario.

Entonces pienso, ¿qué pasa con esta condición? Porque hasta donde sé el operador lógico and (&&) devuelve true si y sólo si ambos operandos lo son.
Código:
if desobedient && !desobedient
  1. desobedient = true => !desobedient = false => desobedient && !desobedient = true && false = false
  2. desobedient = false => !desobedient = true => desobedient && !desobedient = false && true = false

Si no me equivoco, eso devolverá siempre false y no true.

Ahora, si lo que quieres es que devuelva siempre true, ¿por qué no directamente te olvidas de la condición?
Código:
return true

Si igual quieres poner la condición, ¿no sería mejor usar un or (||)?
Código:
return true if desobedient || !desobedient
En este caso, siempre que uno de los dos fuera true, devolvería true sin importar el valor del otro y como sabemos que uno es el contrario al otro y son booleanos, siempre habrá uno que será true.
No lo había pensado así, pero está en lo correcto, lo peor es que es algo de lógica... Pero sí, funciona, lo he probado con un Pokémon intercambiado y de nivel 100 sin tener ninguna medalla, y no me ha desobedecido, sólo me lo explico al haber cambiado un parámetro arriba antes del condicional, pero si en eso de borrar el condicional tiene razón.
 
Estado
Cerrado para nuevas respuestas.
Arriba