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
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 3763 miembros registrados.
El último usuario registrado es Carlos Rodriguez.

Nuestros miembros han publicado un total de 85780 mensajes en 12216 argumentos.

[RMXP] Pain Damage v0.2; aumentar el daño causado a medida que se pierde HP

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [RMXP] Pain Damage v0.2; aumentar el daño causado a medida que se pierde HP

Mensaje por silvanash el 2017-01-18, 15:57

Basado en la idea de Wecocio del post de aportar ideas. Las malditas ideas de Wecocio requieren reescribir métodos originales, así que podéis asumir que esto será incompatible con todo.

Pain Damage aumenta el daño causado a medida que el atacante pierde HPs. Se puede configurar para que se aplique a cada actor por separado, a una clase, a un enemigo, a una skill y un arma. No afecta a las skills curativas, aunque se puede modificar para eso. Como me da pereza, dejaré que se encargue Wecocio otro de hacerlo.

Código:
# Pain Damage v0.2
# silvanash

# Increases damage as HP is lost
# Can be used by actors, actor classes, enemies, skills and weapons

module SLV_Config
  
  # IDs of the ACTORS that can benefit from pain damage
  PAIN_ACTORS = {
    1 => {:factor => 3,},
  }
  
  # IDs of the CLASSES that can benefit from pain damage
  PAIN_CLASSES = {
    1 => {:factor => 1,},
  }
  
  # IDs of the ENEMIES that can benefit drom pain damage
  PAIN_ENEMIES = {
    1 => {:factor => 0.2,},
  }
  
  # IDs of the SKILLS that can benefit from pain damage
  PAIN_SKILLS = {
    1 => {:factor => 1,},
  }
  
  # IDs of the WEAPONS that can benefit from pain damage
  PAIN_WEAPONS = {
    1 => {:factor => 0.5,},
  }
  
end

class Game_Battler
  
  alias slv_pain_attack attack_effect unless $@
  
  def attack_effect(attacker)
    slv_pain_attack(attacker)
    # Builds the hash to call the pain damage proc
    hash = {}
    hash[:attacker] = attacker
    hash[:weapon] = attacker.weapon_id if attacker.is_a?(Game_Actor)
    slv_add_pain_damage(hash)
  end
  
  alias slv_pain_skill_effect skill_effect unless $@
  
  def skill_effect(user, skill)
    slv_pain_skill_effect(user, skill)
    slv_add_pain_damage({:attacker => user, :skill => skill.id})
  end
  
  def slv_add_pain_damage(hash)
    # The attack/skill dealt damage
    if self.damage.to_i > 0
      # Get basic damage factor (0)
      f = 0
      # Gets the attacker
      a = hash[:attacker]
      # Modify damage factor if attacker exists
      if !a.nil?
        if a.is_a?(Game_Actor)
          if SLV_Config::PAIN_ACTORS.has_key?(a.id)
            f = [SLV_Config::PAIN_ACTORS[a.id][:factor], f].max
          end
          if SLV_Config::PAIN_CLASSES.has_key?(a.class_id)
            f = [SLV_Config::PAIN_CLASSES[a.class_id][:factor], f].max
          end
        elsif SLV_Config::PAIN_ENEMIES.has_key?(a.id)
          f = [SLV_Config::PAIN_ENEMIES[a.id][:factor], f].max
        end
      end
      # Gets the skill
      a = hash[:skill]
      # Modify damage factor if skill exists
      if !a.nil?
        # Skill can deal pain damage
        if SLV_Config::PAIN_SKILLS.has_key?(a)
          f = [SLV_Config::PAIN_SKILLS[a][:factor], f].max
        end
      end
      # Gets the weapon
      a = hash[:weapon]
      if !a.nil?
        # Weapon can deal pain damage
        f = [SLV_Config::PAIN_WEAPONS[a][:factor], f].max
      end
      # Add pain damage if damage factor is higher than 0
      if f > 0
        a = hash[:attacker]
        bonus = (1 - (a.hp * 1.0 / a.maxhp)) * f
        self.damage += (bonus * self.damage).truncate
      end
    end
  end
  
end

Instrucciones:

Copypastear encima de Main. El script viene con el típico module para configurar al principio.

Dentro de PAIN_ACTORS van las IDs de los ACTORES que pueden aplicar más daño.
Dentro de PAIN_CLASSES van las IDs de las CLASES que pueden aplicar más daño.
Dentro de PAIN_ENEMIES van las IDs de los ENEMIGOS que pueden aplicar más daño.
Dentro de PAIN_SKILLS van las IDs de las SKILLS que pueden aplicar más daño.
Dentro de PAIN_WEAPONS van las IDs de las armas que pueden aplicar más daño.

Dentro de cada hash (los PAIN_etc) se usa la sintaxis de:
Código:
ID => {:factor => v1,},
[ID] es la ID del actor/clase/enemigo/skill/arma.
[:factor] es cuánto daño adicional aplica por % de HP perdido. Para Ledai, que tiene problemas con las matemáticas, :factor => 0.2 añadirá un 0.2% de daño por cada 1% de HP perdido; un personaje que haya perdido todos sus HPs añadirá un 20% de daño (asumiendo que ese personaje pueda atacar).

Un Battler que pueda aplicar Pain Damage de varias fuentes distintas (por ejemplo, que el sistema esté configurado para reconocer a un personaje por su ID de actor, de clase y del arma que lleva) usará el factor más alto que tenga disponible.

Compatible con Lightning Burst y toda su suite. Si vas a usarlos juntos, por Pain Damage debajo de Bloodprice y encima de Ligthning Burst.

Incompatible con casi cualquier otro script que modifique attack_effect y skill_effect, aunque debería ser razonablemente fácil modificar otros scripts para que sean compatibles.

Edito:
Sería mejor construir un sistema de batalla desde cero, diseñado específicamente para permitir estas cosas, que intentar añadir add-ons y hacerlos compatibles. Si quiero añadir algo al sistema de MonsterSimulator, lo hago y punto, no me tengo que preocupar de que sean compatibles con otras cosas porque tengo acceso a todo el sistema. Estos scripts, en cambio, tienen una utilidad mucho más limitada, porque aportan poco a la batalla pero requieren reescribir demasiados métodos, métodos que también podrían ser reescritos por otros scripts. Para alguien que sepa de scripts, editarlos no es difícil, pero para el público general, que no sabe editar scripts y por eso no se hace sus propios add-ons, eso es una molestia en sumo grado.

Re-edito: actualizado a versión 0.2, para que funcione también con skills y armas. Limpiado el código para no sobre-escribir los métodos originales. Sin embargo, me reafirmo en mi anterior comentario sobre la escasa eficacia de este tipo de scripts.


Última edición por silvanash el 2017-01-18, 21:35, editado 3 veces
avatar
silvanash
Aventurero
Aventurero

0/3

Créditos 1627

Gracias : 229

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Pain Damage v0.2; aumentar el daño causado a medida que se pierde HP

Mensaje por PKTrainer el 2017-01-18, 16:14

oye,es interesante,sobre todo para una skill,pero ¿sabrias como hacerlo?
osea hacer una skill pero que haga esto,me explico fatal.
avatar
PKTrainer
Iniciado
Iniciado

0/3

Créditos 0

Gracias : 4

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Pain Damage v0.2; aumentar el daño causado a medida que se pierde HP

Mensaje por Producciones The Golden el 2017-01-18, 18:48

¿Hacer que una skill aplique el Estado?
Creo que si pones un Evento común en Proceso paralelo con la condición de que si estás con tal estado (Debilidad por ejemplo) llame a este mismo script.

Si no funciona, cosa que no sé porque no sé de scripts, soy solo enginer... te dejo el link de una recopilación de scripts de @Wecoc de este estilo:
Tips and Tricks
avatar
Producciones The Golden
Veterano
Veterano

0/3

Créditos 637

Gracias : 60

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Pain Damage v0.2; aumentar el daño causado a medida que se pierde HP

Mensaje por silvanash el 2017-01-18, 21:38

Actualizado para que funcione también por skills y armas. No lo he hecho para armaduras ni estado, pero cualquiera con algo de experiencia haciendo scripts debería poder añadirlos si quiere.
avatar
silvanash
Aventurero
Aventurero

0/3

Créditos 1627

Gracias : 229

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Pain Damage v0.2; aumentar el daño causado a medida que se pierde HP

Mensaje por angeln0ble el 2017-09-24, 20:54

No se si esto cuenta como necropost, si lo es por favor avisarme. ¿No sabes como se podría modificar para que en vez de que el daño se calcule a base de tu salud, se calcule a base del daño recibido?, me explico, si recibes 500 de daño al próximo ataque que hagas se le sumen 30% de esos 500 de daño
avatar
angeln0ble
Iniciado
Iniciado

0/3

Créditos 2

Gracias : 2

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Pain Damage v0.2; aumentar el daño causado a medida que se pierde HP

Mensaje por Wecoc el 2017-09-26, 15:07

Si es para dudas o para aportar, el necropost puede pasarse por alto. Lo que pides no se puede hacer con ese script, necesitas otro distinto. He hecho una prueba, quizá sirva... Entiendo que quieres que eso ocurra solo si el personaje atacado tiene cierto estado, así que lo configuré de ese modo.

Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# E5. Pain Bonus
#------------------------------------------------------------------------------
# Estado que hace que cuando te atacan luego tu ataque sea más fuerte.
# En concreto se añade 30% del daño que te hayan causado.
# Nota: Solo funciona con golpes físicos.
#==============================================================================

class Game_Battler
  
  PAIN_BONUS_ID = 17 # ID del estado Pain Bonus
  
  attr_accessor :pain_bonus_damage
  
  alias pain_bonus_ini initialize unless $@
  def initialize(*args)
    pain_bonus_ini(*args)
    @pain_bonus_damage = 0
  end
  
  def attack_effect(attacker)
    self.critical = false
    hit_result = (rand(100) < attacker.hit)
    if hit_result == true
      atk = [attacker.atk - self.pdef / 2, 0].max
      self.damage = atk * (20 + attacker.str) / 20
      self.damage *= elements_correct(attacker.element_set)
      self.damage /= 100
      if self.damage > 0
        #---------------------------------------------------------------------
        # Efecto en el ataque
        #---------------------------------------------------------------------
        if attacker.pain_bonus_damage > 0
          pain_bonus = attacker.pain_bonus_damage * 30 / 100
          self.damage += pain_bonus
        end
        attacker.pain_bonus_damage = 0
        #---------------------------------------------------------------------
        if rand(100) < 4 * attacker.dex / self.agi
          self.damage *= 2
          self.critical = true
        end
        if self.guarding?
          self.damage /= 2
        end
      end
      if self.damage.abs > 0
        amp = [self.damage.abs * 15 / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      eva = 8 * self.agi / attacker.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
    end
    if hit_result == true
      remove_states_shock
      self.hp -= self.damage
      @state_changed = false
      states_plus(attacker.plus_state_set)
      states_minus(attacker.minus_state_set)
    else
      self.damage = "Miss"
      self.critical = false
    end
    return true
  end
  
  alias pain_bonus_attack_effect attack_effect unless $@
  def attack_effect(attacker)
    effective = pain_bonus_attack_effect(attacker)
    if self.state?(PAIN_BONUS_ID)
      if effective && self.damage.to_i > 0
        @pain_bonus_damage = self.damage
      end
    end
    return effective
  end
end

A ver si te sirve.
avatar
Wecoc
Administrador
Administrador



Créditos 9370

Gracias : 517

Volver arriba Ir abajo

RPG Maker XP Re: [RMXP] Pain Damage v0.2; aumentar el daño causado a medida que se pierde HP

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.