Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Últimos temas
» Sword Heros Art´s Work
por orochii Hoy a las 15:45

» [Colectivo] ¡El terrible mapa n00b!
por Wecoc Hoy a las 15:14

» Ayuda para desactivar un HUD y activarlo
por alex1633 Hoy a las 14:53

» [XP] Elnard Radar
por Wecoc Hoy a las 11:24

» [VX] [Ayuda] Editar textos del archivo RGSS202E.dll
por Oscar92player Hoy a las 11:06

» Imagen fija en un sitio
por xXIsrael0499Xx Hoy a las 10:04

» Maratón Maker - ¡RESULTADOS! ¡Sí, los hay!
por orochii Hoy a las 03:51

» Ayuda rpg maker MV
por orochii Hoy a las 03:49

» Buenas, gente!
por orochii Hoy a las 03:44

» AYUDA!!!1 POKEMON CON OBJETO
por orochii Hoy a las 03:39

Afiliados
Estadísticas
Tenemos 3762 miembros registrados.
El último usuario registrado es KinGzMC.

Nuestros miembros han publicado un total de 85760 mensajes en 12213 argumentos.

[Pedido]Un script para que las habilidades también puedan ser críticas

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [Pedido]Un script para que las habilidades también puedan ser críticas

Mensaje por Noctámbulo el 2015-01-20, 11:43

Pues eso, he notado que en el juego que estoy desarrollando, a medida que se avanza, los personajes se convierten en más "skilldependientes" hasta el punto de que la destreza se convierte en una estadística inútil, ya que solo afecta la precisión y la probabilidad de crítico de los ataques directos. Me gustaría saber si existe un script para que las skills también se vean beneficiadas de la destreza para hacer golpes críticos.
Gracias de antemano.
avatar
Noctámbulo
Principiante
Principiante

1/3

Créditos 299

Gracias : 27

Volver arriba Ir abajo

RPG Maker XP Re: [Pedido]Un script para que las habilidades también puedan ser críticas

Mensaje por silvanash el 2015-01-20, 11:54

Esto debería servirte:

Código:
class Game_Battler
 
    #--------------------------------------------------------------------------
  # * Apply Skill Effects
  #    user  : the one using skills (battler)
  #    skill : skill
  #--------------------------------------------------------------------------
  def skill_effect(user, skill)
    # Clear critical flag
    self.critical = false
    # If skill scope is for ally with 1 or more HP, and your own HP = 0,
    # or skill scope is for ally with 0, and your own HP = 1 or more
    if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
      ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
      # End Method
      return false
    end
    # Clear effective flag
    effective = false
    # Set effective flag if common ID is effective
    effective |= skill.common_event_id > 0
    # First hit detection
    hit = skill.hit
    if skill.atk_f > 0
      hit *= user.hit / 100
    end
    hit_result = (rand(100) < hit)
    # Set effective flag if skill is uncertain
    effective |= hit < 100
    # If hit occurs
    if hit_result == true
      # Calculate power
      power = skill.power + user.atk * skill.atk_f / 100
      if power > 0
        power -= self.pdef * skill.pdef_f / 200
        power -= self.mdef * skill.mdef_f / 200
        power = [power, 0].max
      end
      # Calculate rate
      rate = 20
      rate += (user.str * skill.str_f / 100)
      rate += (user.dex * skill.dex_f / 100)
      rate += (user.agi * skill.agi_f / 100)
      rate += (user.int * skill.int_f / 100)
      # Calculate basic damage
      self.damage = power * rate / 20
      # Element correction
      self.damage *= elements_correct(skill.element_set)
      self.damage /= 100
      # If damage value is strictly positive
      if self.damage > 0
        if rand(100) < 4 * attacker.dex / self.agi
          self.damage *= 2
          self.critical = true
        end
        # Guard correction
        if self.guarding?
          self.damage /= 2
        end
      end
      # Dispersion
      if skill.variance > 0 and self.damage.abs > 0
        amp = [self.damage.abs * skill.variance / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      # Second hit detection
      eva = 8 * self.agi / user.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
      # Set effective flag if skill is uncertain
      effective |= hit < 100
    end
    # If hit occurs
    if hit_result == true
      # If physical attack has power other than 0
      if skill.power != 0 and skill.atk_f > 0
        # State Removed by Shock
        remove_states_shock
        # Set to effective flag
        effective = true
      end
      # Substract damage from HP
      last_hp = self.hp
      self.hp -= self.damage
      effective |= self.hp != last_hp
      # State change
      @state_changed = false
      effective |= states_plus(skill.plus_state_set)
      effective |= states_minus(skill.minus_state_set)
      # If power is 0
      if skill.power == 0
        # Set damage to an empty string
        self.damage = ""
        # If state is unchanged
        unless @state_changed
          # Set damage to "Miss"
          self.damage = "Miss"
        end
      end
    # If miss occurs
    else
      # Set damage to "Miss"
      self.damage = "Miss"
    end
    # If not in battle
    unless $game_temp.in_battle
      # Set damage to nil
      self.damage = nil
    end
    # End Method
    return effective
  end
 
end


Usa la misma fórmula para el crítico que el ataque normal default. Pegar por encima de Main. Te dará errores con cualquier otro script que modifique la forma de funcionar de las skills.

Edito:

A todo esto, ¿a nadie le parece estúpido que un mago dependa de su Destreza para acertar un hechizo? ¿O que la probabilidad de hacer un crítico dependa de su Destreza? Hace una temporada edité los scripts de batalla para corregir eso, pero fueron modificaciones para una mecánica en particular, y no servirían para un uso más general. En caso necesario, Wecocio se encargará de re-escribir los scripts para que usen otros parámetros.
avatar
silvanash
Aventurero
Aventurero

0/3

Créditos 1627

Gracias : 229

Volver arriba Ir abajo

RPG Maker XP Re: [Pedido]Un script para que las habilidades también puedan ser críticas

Mensaje por Noctámbulo el 2015-01-20, 14:57

@silvanash escribió:Esto debería servirte:

Código:
class Game_Battler
 
    #--------------------------------------------------------------------------
  # * Apply Skill Effects
  #    user  : the one using skills (battler)
  #    skill : skill
  #--------------------------------------------------------------------------
  def skill_effect(user, skill)
    # Clear critical flag
    self.critical = false
    # If skill scope is for ally with 1 or more HP, and your own HP = 0,
    # or skill scope is for ally with 0, and your own HP = 1 or more
    if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
      ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
      # End Method
      return false
    end
    # Clear effective flag
    effective = false
    # Set effective flag if common ID is effective
    effective |= skill.common_event_id > 0
    # First hit detection
    hit = skill.hit
    if skill.atk_f > 0
      hit *= user.hit / 100
    end
    hit_result = (rand(100) < hit)
    # Set effective flag if skill is uncertain
    effective |= hit < 100
    # If hit occurs
    if hit_result == true
      # Calculate power
      power = skill.power + user.atk * skill.atk_f / 100
      if power > 0
        power -= self.pdef * skill.pdef_f / 200
        power -= self.mdef * skill.mdef_f / 200
        power = [power, 0].max
      end
      # Calculate rate
      rate = 20
      rate += (user.str * skill.str_f / 100)
      rate += (user.dex * skill.dex_f / 100)
      rate += (user.agi * skill.agi_f / 100)
      rate += (user.int * skill.int_f / 100)
      # Calculate basic damage
      self.damage = power * rate / 20
      # Element correction
      self.damage *= elements_correct(skill.element_set)
      self.damage /= 100
      # If damage value is strictly positive
      if self.damage > 0
        if rand(100) < 4 * attacker.dex / self.agi
          self.damage *= 2
          self.critical = true
        end
        # Guard correction
        if self.guarding?
          self.damage /= 2
        end
      end
      # Dispersion
      if skill.variance > 0 and self.damage.abs > 0
        amp = [self.damage.abs * skill.variance / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      # Second hit detection
      eva = 8 * self.agi / user.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
      # Set effective flag if skill is uncertain
      effective |= hit < 100
    end
    # If hit occurs
    if hit_result == true
      # If physical attack has power other than 0
      if skill.power != 0 and skill.atk_f > 0
        # State Removed by Shock
        remove_states_shock
        # Set to effective flag
        effective = true
      end
      # Substract damage from HP
      last_hp = self.hp
      self.hp -= self.damage
      effective |= self.hp != last_hp
      # State change
      @state_changed = false
      effective |= states_plus(skill.plus_state_set)
      effective |= states_minus(skill.minus_state_set)
      # If power is 0
      if skill.power == 0
        # Set damage to an empty string
        self.damage = ""
        # If state is unchanged
        unless @state_changed
          # Set damage to "Miss"
          self.damage = "Miss"
        end
      end
    # If miss occurs
    else
      # Set damage to "Miss"
      self.damage = "Miss"
    end
    # If not in battle
    unless $game_temp.in_battle
      # Set damage to nil
      self.damage = nil
    end
    # End Method
    return effective
  end
 
end






Usa la misma fórmula para el crítico que el ataque normal default. Pegar por encima de Main. Te dará errores con cualquier otro script que modifique la forma de funcionar de las skills.

Edito:

A todo esto, ¿a nadie le parece estúpido que un mago dependa de su Destreza para acertar un hechizo? ¿O que la probabilidad de hacer un crítico dependa de su Destreza? Hace una temporada edité los scripts de batalla para corregir eso, pero fueron modificaciones para una mecánica en particular, y no servirían para un uso más general. En caso necesario, Wecocio se encargará de re-escribir los scripts para que usen otros parámetros.





Muchas gracias Silvanash, en cuanto pueda lo probaré.
En cuanto a la Destreza, yo por lo menos siempre lo he asociado a la "puntería" o precisión para atacar en los puntos débiles, de ahí su relación con los golpes críticos (un golpe crítico sería el equivalente a un "tiro en la cabeza" de cualquier shooter, donde la puntería y precisión son determinantes). Dime de que anime es tu avatar.
avatar
Noctámbulo
Principiante
Principiante

1/3

Créditos 299

Gracias : 27

Volver arriba Ir abajo

RPG Maker XP Re: [Pedido]Un script para que las habilidades también puedan ser críticas

Mensaje por silvanash el 2015-01-20, 15:13

El caso es que las fórmulas por default del Maker hacen cosas horribles con los stats de los personajes. El único atributo que influye en el daño es la fuerza, lo que hace que sea estúpido diseñar armas basadas en Destreza, porque sólo deja dos posibilidades: hacen muy poco daño y no sirven, o compensan ese daño con más probabilidad de crítico, lo que las hace demasiado poderosas. Digamos que la probabilidad de crítico (usando el mismo tier de armas) sea de 1% con un arma basada en Fuerza y de un 5% basado en Destreza. El arma basada en Destreza tendrá un daño base menor para compensar el critico adicional, pero ese 5% de crítico no hace que el arma valga la pena. Sobre todo porque un personaje que use un arma basada en Destreza tendrá una Fuerza baja y una Destreza altas (a menos que te dediques a amartillar ballestas en pleno combate; en ese caso admitiré que el personaje está más orientado a Fuerza que a Destreza). Con una Fuerza baja, el daño base inferior de ese arma se traduce en un daño efectivo incluso menor, y te lo juegas todo a cambio de ese crítico cada 20 ataques (la estadística es una perra). Si le aumentas la probabilidad de crítico (digamos que a 15%), ya estás desequilibrando el juego.

Por otra parte, los magos (o arquetipos de magos) suelen tener una Destreza más bien baja, puede que tirando a media, pero están en clara desventaja frente a enemigos con una Agilidad decente, porque tendrán más dificultades para acertarles un hechizo. ¿Por qué debería depender un mago de su Destreza para poder acertar una bola de fuego? ¿Por qué no usar la media de su Destreza y su Inteligencia para comprobar si acierta la bola de fuego? ¿Por qué no usar esa media para determinar si hace crítico o no?
avatar
silvanash
Aventurero
Aventurero

0/3

Créditos 1627

Gracias : 229

Volver arriba Ir abajo

RPG Maker XP Re: [Pedido]Un script para que las habilidades también puedan ser críticas

Mensaje por Noctámbulo el 2015-01-20, 17:30

Parece que me da un error en la línea 52.
avatar
Noctámbulo
Principiante
Principiante

1/3

Créditos 299

Gracias : 27

Volver arriba Ir abajo

RPG Maker XP Re: [Pedido]Un script para que las habilidades también puedan ser críticas

Mensaje por silvanash el 2015-01-20, 17:41

Mea culpa. No me fijé en que attacker estaba definido con scope limitado a otro método, y copié el cálculo del crítico tal cual estaba. Te tira error porque el script intenta leer la agilidad del atacante, y ese atacante no existe (virtualmente).

He hecho un edit para que se llame al script con el atacante:

Código:
class Game_Battler
 
  #--------------------------------------------------------------------------
  # * Apply Skill Effects
  #    user  : the one using skills (battler)
  #    skill : skill
  #--------------------------------------------------------------------------
  def skill_effect(user, skill, target)
    # Clear critical flag
    self.critical = false
    # If skill scope is for ally with 1 or more HP, and your own HP = 0,
    # or skill scope is for ally with 0, and your own HP = 1 or more
    if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
      ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
      # End Method
      return false
    end
    # Clear effective flag
    effective = false
    # Set effective flag if common ID is effective
    effective |= skill.common_event_id > 0
    # First hit detection
    hit = skill.hit
    if skill.atk_f > 0
      hit *= user.hit / 100
    end
    hit_result = (rand(100) < hit)
    # Set effective flag if skill is uncertain
    effective |= hit < 100
    # If hit occurs
    if hit_result == true
      # Calculate power
      power = skill.power + user.atk * skill.atk_f / 100
      if power > 0
        power -= self.pdef * skill.pdef_f / 200
        power -= self.mdef * skill.mdef_f / 200
        power = [power, 0].max
      end
      # Calculate rate
      rate = 20
      rate += (user.str * skill.str_f / 100)
      rate += (user.dex * skill.dex_f / 100)
      rate += (user.agi * skill.agi_f / 100)
      rate += (user.int * skill.int_f / 100)
      # Calculate basic damage
      self.damage = power * rate / 20
      # Element correction
      self.damage *= elements_correct(skill.element_set)
      self.damage /= 100
      # If damage value is strictly positive
      if self.damage > 0
        if rand(100) < 4 * target.dex / self.agi
          self.damage *= 2
          self.critical = true
        end
        # Guard correction
        if self.guarding?
          self.damage /= 2
        end
      end
      # Dispersion
      if skill.variance > 0 and self.damage.abs > 0
        amp = [self.damage.abs * skill.variance / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      # Second hit detection
      eva = 8 * self.agi / user.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva * skill.eva_f / 100
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
      # Set effective flag if skill is uncertain
      effective |= hit < 100
    end
    # If hit occurs
    if hit_result == true
      # If physical attack has power other than 0
      if skill.power != 0 and skill.atk_f > 0
        # State Removed by Shock
        remove_states_shock
        # Set to effective flag
        effective = true
      end
      # Substract damage from HP
      last_hp = self.hp
      self.hp -= self.damage
      effective |= self.hp != last_hp
      # State change
      @state_changed = false
      effective |= states_plus(skill.plus_state_set)
      effective |= states_minus(skill.minus_state_set)
      # If power is 0
      if skill.power == 0
        # Set damage to an empty string
        self.damage = ""
        # If state is unchanged
        unless @state_changed
          # Set damage to "Miss"
          self.damage = "Miss"
        end
      end
    # If miss occurs
    else
      # Set damage to "Miss"
      self.damage = "Miss"
    end
    # If not in battle
    unless $game_temp.in_battle
      # Set damage to nil
      self.damage = nil
    end
    # End Method
    return effective
  end
 
end

class Scene_Battle
  #--------------------------------------------------------------------------
  # * Make Skill Action Results
  #--------------------------------------------------------------------------
  def make_skill_action_result
    # Get skill
    @skill = $data_skills[@active_battler.current_action.skill_id]
    # If not a forcing action
    unless @active_battler.current_action.forcing
      # If unable to use due to SP running out
      unless @active_battler.skill_can_use?(@skill.id)
        # Clear battler being forced into action
        $game_temp.forcing_battler = nil
        # Shift to step 1
        @phase4_step = 1
        return
      end
    end
    # Use up SP
    @active_battler.sp -= @skill.sp_cost
    # Refresh status window
    @status_window.refresh
    # Show skill name on help window
    @help_window.set_text(@skill.name, 1)
    # Set animation ID
    @animation1_id = @skill.animation1_id
    @animation2_id = @skill.animation2_id
    # Set command event ID
    @common_event_id = @skill.common_event_id
    # Set target battlers
    set_target_battlers(@skill.scope)
    # Apply skill effect
    for target in @target_battlers
      target.skill_effect(@active_battler, @skill, target)
    end
  end
end


Pegar encima de Main y eso. He hecho pruebas con los fantasmas y parece funcionar.
avatar
silvanash
Aventurero
Aventurero

0/3

Créditos 1627

Gracias : 229

Volver arriba Ir abajo

RPG Maker XP Re: [Pedido]Un script para que las habilidades también puedan ser críticas

Mensaje por Lance Amano el 2015-01-21, 00:22

@silvanash escribió:El caso es que las fórmulas por default del Maker hacen cosas horribles con los stats de los personajes. El único atributo que influye en el daño es la fuerza, lo que hace que sea estúpido diseñar armas basadas en Destreza, porque sólo deja dos posibilidades: hacen muy poco daño y no sirven, o compensan ese daño con más probabilidad de crítico, lo que las hace demasiado poderosas. Digamos que la probabilidad de crítico (usando el mismo tier de armas) sea de 1% con un arma basada en Fuerza y de un 5% basado en Destreza. El arma basada en Destreza tendrá un daño base menor para compensar el critico adicional, pero ese 5% de crítico no hace que el arma valga la pena. Sobre todo porque un personaje que use un arma basada en Destreza tendrá una Fuerza baja y una Destreza altas (a menos que te dediques a amartillar ballestas en pleno combate; en ese caso admitiré que el personaje está más orientado a Fuerza que a Destreza). Con una Fuerza baja, el daño base inferior de ese arma se traduce en un daño efectivo incluso menor, y te lo juegas todo a cambio de ese crítico cada 20 ataques (la estadística es una perra). Si le aumentas la probabilidad de crítico (digamos que a 15%), ya estás desequilibrando el juego.

Por otra parte, los magos (o arquetipos de magos) suelen tener una Destreza más bien baja, puede que tirando a media, pero están en clara desventaja frente a enemigos con una Agilidad decente, porque tendrán más dificultades para acertarles un hechizo. ¿Por qué debería depender un mago de su Destreza para poder acertar una bola de fuego? ¿Por qué no usar la media de su Destreza y su Inteligencia para comprobar si acierta la bola de fuego? ¿Por qué no usar esa media para determinar si hace crítico o no?


Supongo que pasa lo mismo si creamos armas/abilidades basadas en otros stats como Agilidad, ¿cierto?
avatar
Lance Amano
Soñador
Soñador

0/3

Créditos 218

Gracias : 23

Volver arriba Ir abajo

RPG Maker XP Re: [Pedido]Un script para que las habilidades también puedan ser críticas

Mensaje por silvanash el 2015-01-21, 01:10

Las armas del Maker funcionan así:

Ataque: daño base
Fuerza: factor principal (en realidad, el único factor) que influye en el daño efectivo.
Destreza: influye en la probabilidad de acertar un ataque y de que el daño sea crítico.
Agilidad: influye en la probabilidad de esquivar ataques/daño crítico, y en la probabilidad de escapar.
Inteligencia: no hace nada. NADA. No influye en los parámetros de armas (cosa lógica; nadie usa su fuerza mental para dar espadazos).

Ahora bien, las skills permiten usar los otros stats. Es la única forma de usar la Destreza/Agilidad/Inteligencia en combate, pero todo ello influido por las probabilidades de acierto de Destreza Vs. Agilidad. La Inteligencia sólo influye en el daño, y sólo si la propia skill tiene indicado un Mag_f > 0.

A este paso, me voy a encargar yo mismo de escribir unos nuevos scripts de batalla.
avatar
silvanash
Aventurero
Aventurero

0/3

Créditos 1627

Gracias : 229

Volver arriba Ir abajo

RPG Maker XP Re: [Pedido]Un script para que las habilidades también puedan ser críticas

Mensaje por Lance Amano el 2015-01-21, 11:45

Ya veo. Entonces aún puedo crear una abilidad que, por exemplo, use la agilidad para calcular el daño causado en vez de la fuerza e inteligencia, ¿cierto?
avatar
Lance Amano
Soñador
Soñador

0/3

Créditos 218

Gracias : 23

Volver arriba Ir abajo

RPG Maker XP Re: [Pedido]Un script para que las habilidades también puedan ser críticas

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


Permisos de este foro:
No puedes responder a temas en este foro.