¡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 3859 miembros registrados.
El último usuario registrado es Abigail Is Kawaii.

Nuestros miembros han publicado un total de 83033 mensajes en 11789 argumentos.
Navega con Google Chrome
[DESCARGA]

[XP] Colección de Tips & Tricks de Wecoc

 :: RPG Maker :: Scripts

Página 1 de 2. 1, 2  Siguiente

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] Colección de Tips & Tricks de Wecoc

Mensaje por Wecoc el 2017-01-07, 04:58

He decidido crear una colección de pequeños scripts de añadidos para batalla para que tengáis más opciones a la hora de hacer vuestras batallas.

Ya subí algunos Tips & Tricks de éste estilo que alteraban propiedades básicamente de armas, estados, items o skills, y por ello necesitaban de mi script Data File Save (podéis verlos en el mismo topic). Pero aquí os traigo algunos que no necesitan "extras".

Los siguientes códigos son muy cortos, sencillos y compatibles con todo. Están pensados para que los editéis, para jugar con las fórmulas y especialmente las ID. No requiere muchos conocimientos de script editarlos y he puesto comentarios para que veáis dónde cambiar cada cosa exactamente; si queréis algún cambio un poco más editado y no os sale podéis pedirme ayuda.

Podéis usarlos en vuestros proyectos sin necesidad de darme créditos, y también podéis usarlos de ejemplo para hacer otras cosas totalmente distintas.

1. EnFire
Estado que atribuye un elemento (Fuego) al actor. Los estados ya permiten el control de elementos, pero se fijan en la resistencia a ellos. Con éste script en cambio se pueden controlar los elementos fuertes y flojos del actor, tal como por defecto vienen definidos en su clase y luego alterados por objetos o el arma.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 1. EnFire
#------------------------------------------------------------------------------
# Estado que atribuye un elemento al actor (En el ejemplo: Fuego)
#==============================================================================

class Game_Actor < Game_Battler
  unless $@
    alias enfire_setup        setup
    alias enfire_add_state    add_state
    alias enfire_remove_state remove_state
    alias enfire_element_set  element_set
  end
  
  def setup(actor_id)
    enfire_setup(actor_id)
    @element_set = []
  end
  
  def element_set
    actor_element_set = @element_set
    basic_element_set = enfire_element_set
    return (actor_element_set + basic_element_set).uniq.sort
  end
  
  def add_state(state_id, force = false)
    enfire_add_state(state_id, force)
    if self.weapon_id > 0
      #------------------------------------------------------------------------
      # Añadir los efectos del estado sobre los elementos del actor
      #------------------------------------------------------------------------
      if state_id == 11
        @element_set.push(1) # Fuego
      end
      #------------------------------------------------------------------------
      @element_set.uniq!
    end
  end
  
  def remove_state(state_id, force = false)
    enfire_remove_state(state_id, force)
    if self.weapon_id > 0
      #------------------------------------------------------------------------
      # Quitar los efectos del estado sobre los elementos del actor
      #------------------------------------------------------------------------
      if state_id == 11
        @element_set.delete(1) # Fuego
      end
      #------------------------------------------------------------------------
    end
  end
end

2. Runic Blade
Cuando un enemigo ataca con una habilidad a álguien con un estado concreto, el SP del actor aumentará el coste de SP de esa habilidad.
Le he hecho una variación llamada Annie's Desintegrate, están ambas en el script de modo separado.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 2. Runic Blade
#------------------------------------------------------------------------------
# Runic Blade: Cuando un enemigo ataca con una habilidad a álguien con un estado
# alterado concreto, el MP del actor aumentará el sp_cost de esa habilidad
#------------------------------------------------------------------------------
# Annie's Desintegrate: Cuando una habilidad mata al enemigo, el usuario
# recupera la MP que cuesta esa habilidad
#==============================================================================

#==============================================================================
# * Runic Blade
#==============================================================================

class Game_Battler
  alias runic_blade_skill skill_effect unless $@
  def skill_effect(user, skill)
    effective = runic_blade_skill(user, skill)
    if effective && self.damage.to_i > 0
      #------------------------------------------------------------------------
      # Definir los cambios perpetuados por la habilidad
      #------------------------------------------------------------------------
      if self.state?(11)
        sp_cost = skill.sp_cost
        self.sp += sp_cost
      end
      #------------------------------------------------------------------------
    end
    return effective
  end
end

#==============================================================================
# * Annie's Desintegrate
#==============================================================================

class Game_Battler
  alias annie_desint_skill skill_effect unless $@
  def skill_effect(user, skill)
    effective = annie_desint_skill(user, skill)
    if effective && self.dead?
      #------------------------------------------------------------------------
      # Definir los cambios perpetuados por la habilidad
      #------------------------------------------------------------------------
      if self.state?(12)
        sp_cost = skill.sp_cost
        user.sp += sp_cost
      end
      #------------------------------------------------------------------------
    end
    return effective
  end
end

3. Spirit Shackles
Estado que actúa como el Veneno pero con SP en vez de HP

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 3. Spirit Shackles
#------------------------------------------------------------------------------
# Estado que disminuye MP cada turno
#==============================================================================

class Scene_Battle
  alias update_spirit_shackles update_phase4_step1 unless $@
  def update_phase4_step1
    update_spirit_shackles
    if @phase4_step == 2
      for battler in $game_party.actors + $game_troop.enemies
        next if battler.dead?
        next if @active_battler != battler
        #----------------------------------------------------------------------
        # Definir los cambios perpetuados por la el estado
        #----------------------------------------------------------------------
        if battler.state?(11)
          sp_damage = battler.maxsp / 10
          if sp_damage.abs > 0
            amp = [sp_damage.abs * 15 / 100, 1].max
            sp_damage += rand(amp+1) + rand(amp+1) - amp
          end
          battler.sp -= sp_damage
        end
        #----------------------------------------------------------------------
      end
    end
  end
end

4. Phoenix Ring
Anillo que si lo llevas puesto evita que mueras (solo una vez), dándote de HP un 20% de la HP máxima.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 4. Phoenix Ring
#------------------------------------------------------------------------------
# Anillo que si lo llevas puesto evita que mueras (solo una vez)
# Atención: Requiere dos protectores; anillo activo y anillo inactivo
#==============================================================================

class Game_Actor < Game_Battler
  alias phoenix_ring_state add_state unless $@
  def add_state(state_id, force = false)
    if force == false && state_id == 1
      #------------------------------------------------------------------------
      # Tras morirse el anillo hace su efecto
      #------------------------------------------------------------------------
      if @armor4_id == 33 # ID del anillo activo (normal)
        self.hp = self.maxhp * 20 / 100
        @armor4_id = 34   # ID del anillo inactivo (usado)
        return
      end
      #------------------------------------------------------------------------
    end
    phoenix_ring_state(state_id, force)
  end
end

5. Healing Link
Estado que hace que cuando un aliado cura a otro en batalla, el que tiene el estado también se cura (la mitad)
Le he hecho una variación llamada Joint Penalty, están ambas en el script de modo totalmente separado.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 5. Healing Link
#------------------------------------------------------------------------------
# Healing Link: Estado que hace que cuando un aliado cura a otro en batalla,
# el que tiene el estado también se cura (la mitad)
#------------------------------------------------------------------------------
# Joint Penalty: Estado Alterado. Si dos o más miembros del grupo tienen ese
# estado y se ataca a uno de ellos, el daño les afectará a todos
#==============================================================================

#==============================================================================
# * Healing Link
#==============================================================================

class Scene_Battle
  #----------------------------------------------------------------------------
  # * Habilidad
  #----------------------------------------------------------------------------
  alias healing_link_skill_result make_skill_action_result unless $@
  def make_skill_action_result
    healing_link_skill_result
    if !@target_battlers[0].nil? && @skill.power < 0
      if @target_battlers[0].class == @active_battler.class
        case @target_battlers[0]
        when Game_Actor
          members = $game_party.actors.clone
        when Game_Enemy
          members = $game_troop.enemies.clone
        end
        members -= @target_battlers
        for target in members
          #--------------------------------------------------------------------
          # Apliar skill con la mitad del poder a los que tienen el estado
          #--------------------------------------------------------------------
          if target.state?(11)
            @target_battlers << target
            skill = @skill.clone
            skill.power /= 2
            target.skill_effect(@active_battler, skill)
          end
          #--------------------------------------------------------------------
        end
        @status_window.refresh
      end
    end
  end
end

#==============================================================================
# * Joint Penalty
#==============================================================================

class Scene_Battle
  #----------------------------------------------------------------------------
  # * Atacar
  #----------------------------------------------------------------------------
  alias joint_penalty_attack_result make_basic_action_result unless $@
  def make_basic_action_result
    joint_penalty_attack_result
    if @active_battler.current_action.basic == 0
      if !@target_battlers[0].nil?
        if @target_battlers[0].state?(12) # ID del Estado
          case @target_battlers[0]
          when Game_Actor
            members = $game_party.actors.clone
          when Game_Enemy
            members = $game_troop.enemies.clone
          end
          members -= @target_battlers
          for target in members
            #------------------------------------------------------------------
            # Apliar ataque a los que tienen el estado
            #------------------------------------------------------------------
            if target.state?(12)
              @target_battlers << target
              target.attack_effect(@active_battler)
            end
            #------------------------------------------------------------------
          end
        end
        @status_window.refresh
      end
    end
  end
  #----------------------------------------------------------------------------
  # * Habilidad
  #----------------------------------------------------------------------------
  alias joint_penalty_skill_result make_skill_action_result unless $@
  def make_skill_action_result
    joint_penalty_skill_result
    if !@target_battlers[0].nil? && @skill.power > 0
      if @target_battlers[0].state?(12) # ID del Estado
        case @target_battlers[0]
        when Game_Actor
          members = $game_party.actors.clone
        when Game_Enemy
          members = $game_troop.enemies.clone
        end
        members -= @target_battlers
        for target in members
          #--------------------------------------------------------------------
          # Apliar skill a los que tienen el estado
          #--------------------------------------------------------------------
          if target.state?(12)
            @target_battlers << target
            target.skill_effect(@active_battler, @skill)
          end
          #--------------------------------------------------------------------
        end
        @status_window.refresh
      end
    end
  end
end

6. Magic Guard
Estado que hace que al golpearte te resten SP en vez de HP. En principio es la misma fórmula, es decir el mismo valor para HP y SP, pero puedes cambiarla a tu antojo.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 6. Magic Guard
#------------------------------------------------------------------------------
# Estado que hace que al golpearte te resten SP en vez de HP
#==============================================================================

class Game_Battler
  alias magic_guard_effect attack_effect unless $@
  def attack_effect(attacker)
    if self.state?(17) # Definir aquí el estado que activa el Magic Guard
      return attack_effect_sp_mod(attacker)
    end
    return magic_guard_effect(attacker)
  end
  
  def attack_effect_sp_mod(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
        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
      sp_damage = self.damage
      hp_damage = 0
      if self.sp > sp_damage
        sp_damage = self.sp
        hp_damage = self.damage - sp_damage
      end
      self.sp -= sp_damage
      self.hp -= hp_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
end

7. Death Mark
Habilidad que marca al enemigo con el "sello de la muerte". Le aplica un estado que tras terminarse le aplica de golpe el mismo daño que le hayas hecho durante los turnos que lo ha tenido. Hay varias alternativas que se pueden aplicar rápidamente, mirad los comentarios del script.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 7. Death Mark
#------------------------------------------------------------------------------
# Estado que afecta al target. Cuando éste estado termina al cabo de unos
# turnos, el daño que le ha hecho el actor causante vuelve a afectarle
#==============================================================================

class Game_Battler
 
  DEATH_MARK_ID = 17 # ID del estado Death Mark
 
  unless $@
    alias death_mark_ini          initialize
    alias death_mark_skill        skill_effect
    alias death_mark_add_state    add_state
    alias death_mark_remove_state remove_state
  end
 
  attr_accessor :death_mark_attacker
  attr_accessor :death_mark_damage
 
  def initialize
    death_mark_ini
    @death_mark_attacker = nil
    @death_mark_damage = 0
  end
 
  def skill_effect(user, skill)
    if skill.id == 1 # ID de la skill que atribuye el estado Death Mark
      return false if @death_mark_attacker != nil
    end
    effective = death_mark_skill(user, skill)
    if effective == true
      @death_mark_attacker = user
      add_state(DEATH_MARK_ID)
    end
    return effective
  end
 
  def add_state(state_id, force = false)
    return if state_id == DEATH_MARK_ID && @death_mark_attacker == nil
    death_mark_add_state(state_id, force)
    if state_id == 1 # ID estado Muerte
      if self.is_a?(Game_Actor)
        members = $game_troop.enemies
      elsif
        members = $game_party.actors
      end
      for target in members
        if target.death_mark_attacker == self
          #--------------------------------------------------------------------
          # Cuando el enemigo muere y el estado aún no terminó, éste
          # es abortado sin causarle daño al afectado
          target.safe_death_remove_state(DEATH_MARK_ID)
          # Como alternativa se puede usar: target.remove_state(DEATH_MARK_ID)
          # Eso hará que reciva el daño que se había acumulado hasta el momento
          #--------------------------------------------------------------------
        end
      end
    end
  end
 
  def remove_state(state_id, force = false)
    death_mark_remove_state(state_id, force)
    if state_id == DEATH_MARK_ID
      self.damage = @death_mark_damage
      #------------------------------------------------------------------------
      # Éste código resta la vida de todo el daño acumulado, de golpe
      self.hp -= @death_mark_damage
      # Como alternativa se puede usar: self.hp -= self.maxhp
      # Eso haría que fuera cual fuera el daño el afectado muriera
      #------------------------------------------------------------------------
      if self.damage > 0
        self.damage_pop = true
      end
      @death_mark_attacker = nil
      @death_mark_damage = 0
    end
  end
 
  def safe_death_remove_state(state_id)
    death_mark_remove_state(state_id, false)
    if state_id == DEATH_MARK_ID
      @death_mark_attacker = nil
      @death_mark_damage = 0
    end
  end
end

class Game_Battler
  unless $@
    alias death_mark_effect_attack attack_effect
    alias death_mark_effect_skill  skill_effect
  end
 
  def attack_effect(attacker)
    effective = death_mark_effect_attack(attacker)
    if @death_mark_attacker == attacker
      if self.damage.to_i > 0
        # Definir la proporción de daño físico que se usará en el Death Mark
        @death_mark_damage += self.damage
      end
    end
  end
 
  def skill_effect(user, skill)
    effective = death_mark_effect_skill(user, skill)
    if @death_mark_attacker == user
      if self.damage.to_i > 0
        # Definir la proporción de daño mágico que se usará en el Death Mark
        @death_mark_damage += self.damage
      end
    end
  end
end

8. Cool Breeze
Estado que hace que al terminar batalla se cure un 25% de la HP y SP totales a cada actor vivo

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 8. Cool Breeze
#------------------------------------------------------------------------------
# Estado que hace que al terminar batalla se cure un cierto % de vida y magia
#==============================================================================

class Scene_Battle
  alias cool_breeze_battle_win start_phase5 unless $@
  def start_phase5
    cool_breeze_battle_win
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      next if actor.dead?
      #------------------------------------------------------------------------
      # Sumar 25% de HP y SP si se tiene un estado
      #------------------------------------------------------------------------
      if actor.state?(14)
        actor.hp += actor.maxhp * 25 / 100
        actor.sp += actor.maxsp * 25 / 100
      end
      #------------------------------------------------------------------------
    end
  end
end

9. Thornmail
Auto-Estado de armadura que hace que cuando te atacan también se hagan daño ellos mismos.
Ese daño es el 20% del que causas al atacar a ese enemigo, pero la fórmula se puede modificar tanto como se quiera.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 9. Thornmail
#------------------------------------------------------------------------------
# Estado que hace que cuando te atacan también se hagan daño ellos mismos
# Nota: Está pensado para ser un Auto-State de armadura u otro protector
#==============================================================================

class Scene_Battle
  alias thornmail_attack make_basic_action_result unless $@
  def make_basic_action_result
    thornmail_attack
    if @active_battler.current_action.basic == 0
      for target in @target_battlers
        next if target.dead?
        if target.state?(11) # ID Estado Thornmail
          attacker = target
          critical = false
          hit_result = (rand(100) < attacker.hit)
          if hit_result == true
            # Cálculo de daño (se usa el que hay por defecto, se puede editar)
            atk = [attacker.atk - @active_battler.pdef / 2, 0].max
            damage = atk * (20 + attacker.str) / 20
            # Porcentaje de daño respecto a daño de ataque normal
            damage = damage * 20 / 100
            # Cálculo de variación de daño
            if damage > 0
              if rand(100) < 4 * attacker.dex / @active_battler.agi
                damage *= 2
                critical = true
              end
              amp = [damage.abs * 15 / 100, 1].max
              damage += rand(amp+1) + rand(amp+1) - amp
            end
            # Ratio de acierto
            eva = 8 * @active_battler.agi / attacker.dex + @active_battler.eva
            hit = damage < 0 ? 100 : 100 - eva
            hit = @active_battler.cant_evade? ? 100 : hit
            hit_result = (rand(100) < hit)
          end
          # Aplicar daño al atacante
          if hit_result == true
            @active_battler.damage = damage
            @active_battler.critical = critical
            @active_battler.hp -= damage
            @target_battlers << @active_battler
          else
            @active_battler.damage = "Miss"
            @active_battler.critical = false
          end
        end
      end
    end
  end
end

10. Sacrificial Bolt
Habilidad que mata a uno de los aliados al azar para convertir su HP en daño causado al enemigo.
Puedes definir que solo algunos actores o tipos de enemigo puedan ser sacrificados.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 10. Sacrificial Bolt
#------------------------------------------------------------------------------
# Si hay más de un actor, uno puede usar esta habilidad, que lo que hace es
# matar a uno de sus aliados (al azar) y usar el HP que tenía el aliado como
# daño físico contra el enemigo
# Nota: Está pensado como habilidad para un Boss, que sacrifica sus esbirros
# Nota: Al definir la habilidad, su Poder Efectivo debe valer 0
#==============================================================================

class Game_Battler
  
  # ID de la skill Sacrificial Bolt
  SACRIFICIAL_BOLT = 60
  
  # IDs de los actores que pueden ser sacrificados (deja vacío para Todos)
  SACRIFICIAL_ACTOR_IDS = []
  
  # IDs de los enemigos que pueden ser sacrificados (deja vacío para Todos)
  SACRIFICIAL_ENEMY_IDS = []
    
  alias skill_bolt_can_use? skill_can_use? unless $@
  def skill_can_use?(skill_id)
    if skill_id == SACRIFICIAL_BOLT
      return false if !sacrifice_bolt_can_use?
    end
    return skill_bolt_can_use?(skill_id)
  end
  
  def sacrifice_bolt_can_use?
    if self.is_a?(Game_Actor)
      members = $game_party.actors.clone
    else
      members = $game_troop.enemies.clone
    end
    members.delete(self)
    members.delete_if {|target| target.dead?}
    if self.is_a?(Game_Actor) && SACRIFICIAL_ACTOR_IDS.size > 0
      members.delete_if {|target| !SACRIFICIAL_ACTOR_IDS.include?(target.id)}
    end
    if self.is_a?(Game_Enemy) && SACRIFICIAL_ENEMY_IDS.size > 0
      members.delete_if {|target| !SACRIFICIAL_ENEMY_IDS.include?(target.id)}
    end
    return (members.size != 0)
  end
end

class Scene_Battle
  alias sacrifice_bolt_skill make_skill_action_result unless $@
  def make_skill_action_result
    sacrifice_bolt_skill
    return if !@active_battler.sacrifice_bolt_can_use?
    if @skill.id == Game_Battler::SACRIFICIAL_BOLT
      case @active_battler
      when Game_Actor
        members = $game_party.actors.clone
      when Game_Enemy
        members = $game_troop.enemies.clone
      end
      members.delete(@active_battler)
      members.delete_if {|target| target.dead?}
      actor_ids = Game_Battler::SACRIFICIAL_ACTOR_IDS
      enemy_ids = Game_Battler::SACRIFICIAL_ENEMY_IDS
      if @active_battler.is_a?(Game_Actor) && actor_ids.size > 0
        members.delete_if {|target| !actor_ids.include?(target.id)}
      end
      if @active_battler.is_a?(Game_Enemy) && enemy_ids.size > 0
        members.delete_if {|target| !enemy_ids.include?(target.id)}
      end
      #------------------------------------------------------------------------
      # Obtención del HP y transformación a damage
      #------------------------------------------------------------------------
      target_ally = members[rand(members.size)]
      hp = target_ally.hp
      target_ally.hp -= hp
      @target_battlers << target_ally
      target = @target_battlers[0]
      target.damage = hp
      target.hp -= hp
      #------------------------------------------------------------------------
    end
  end
end

¡Ésto es solo el principio! ¡Ojalá os sean de utilidad!


Última edición por Wecoc el 2017-04-26, 01:17, editado 5 veces (Razón : Arreglado bug en Magic Guard)
avatar
Wecoc
Administrador
Administrador



Créditos 8945

Gracias : 434

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por Producciones The Golden el 2017-01-07, 15:07

Creo que tomaré tu "Spirit Shackles" para mi proyecto "Who´s the hunter?", es muy interesante ese "miniscript" (XD yo inventando términos XD) solo que por ahora no sé como usarlo... tomando en cuenta que el SP en mi juego representa la Energía lo usaré cuando el jugador tenga sueño o algo así... ya le buscaré una utilidad! X3 saludos y que grandes aportes! además de que se nota que tienes experiencia suficiente para machacar esta clase de scripts y hacer varias ediciones jajaja.
avatar
Producciones The Golden
Principiante
Principiante

0/3

Créditos 552

Gracias : 47

http://gamerprotown.jimdo.com/

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por Wecoc el 2017-01-07, 23:49

Producciones The Golden: De hecho como curiosidad, el mini-script Spirit Shackles está inspirado en un movimiento de Guild Wars donde la SP también es llamada Energía y funciona como la SP normal del maker. Gracias por mostrar interés.

11. Second Chance
Si matan al actor éste revive con HP 1, pero si vuelven a atacarlo y su HP aún vale 1, muere. En otras palabras, el estado le da una última oportunidad para curarse al que lo posee, pero si no es capaz de aprovecharla muere igualmente.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 11. Second Chance
#------------------------------------------------------------------------------
# Si matan al actor éste revive con HP 1, pero si su HP aún vale
# 1 y vuelven a atacarlo, muere.
# Nota: El estado Muerte suele quitar todos los demás estados, pero el estado
# Second Chance no debe quitarlo
#==============================================================================

class Game_Battler
  
  SECOND_CHANCE_ID = 11 # ID del estado Second Chance
  
  alias second_chance_hp hp= unless $@
  def hp=(hp)
    if hp <= 0 && self.state?(SECOND_CHANCE_ID)
      if self.hp == 1
        remove_state(SECOND_CHANCE_ID)
      end
    end
    second_chance_hp(hp)
  end
end

class Scene_Battle
  alias second_chance_phase4 update_phase4_step6 unless $@
  def update_phase4_step6
    second_chance_phase4
    if @phase4_step == 1
      for target in $game_party.actors + $game_troop.enemies
        if target.dead?
          if target.state?(Game_Battler::SECOND_CHANCE_ID)
            target.remove_state(1) # ID Estado Muerte
            target.hp = 1
          end
        end
      end
    end
  end
end

12. Death Scar
Estado que almacena todo el daño que le hacen al battler, y cuando éste estado termina luego recibe un 20% de ese daño, de golpe.
Eso supone dos diferencias frente al Death Mark, ya posteado previamente: 1. No quita todo el daño sino un porcentaje, 2. No importa quien le causó el efecto. En Death Mark el único daño que se guarda es el que causa el que le causó el efecto, pero en éste caso se guarda cualquier daño. Combinando ambos scripts con las propiedades que os interesen podéis crear vuestro propio efecto de maldición de la muerte.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 12. Death Scar
#------------------------------------------------------------------------------
# Estado que almacena todo el daño que le hacen al battler, y cuando éste
# estado termina luego recibe un % de ese daño, de golpe
#==============================================================================

class Game_Battler
  
  DEATH_SCAR_ID = 17 # ID del estado Death Scar
  
  unless $@
    alias death_scar_ini          initialize
    alias death_scar_attack       attack_effect
    alias death_scar_skill        skill_effect
    alias death_scar_remove_state remove_state
  end
  
  attr_accessor :death_scar_damage
  
  def initialize
    death_scar_ini
    @death_scar_damage = 0
  end
  
  def attack_effect(attacker)
    effective = death_scar_attack(attacker)
    if self.state?(DEATH_SCAR_ID)
      if self.damage.to_i > 0
        @death_scar_damage += self.damage
      end
    end
    return effective
  end
  
  def skill_effect(user, skill)
    effective = death_scar_skill(user, skill)
    if self.state?(DEATH_SCAR_ID)
      if self.damage.to_i > 0
        @death_scar_damage += self.damage
      end
    end
    return effective
  end
  
  def remove_state(state_id, force = false)
    death_scar_remove_state(state_id, force)
    return if self.dead?
    if state_id == DEATH_SCAR_ID
      #------------------------------------------------------------------------
      # Calcular Damage a partir del daño almacenado durante el estado
      #------------------------------------------------------------------------
      damage = @death_scar_damage * 20 / 100
      self.damage = damage
      self.hp -= damage
      #------------------------------------------------------------------------
      if self.damage > 0
        self.damage_pop = true
      end
      @death_scar_damage = 0
    end
  end
  
  def safe_scar_remove_state(state_id)
    death_scar_remove_state(state_id, false)
    if state_id == DEATH_SCAR_ID
      @death_scar_damage = 0
    end
  end
end

13. Giant Slayer
Clase con fórmula customizada de daño de ataque físico. Si el enemigo tiene más HP que el actor, el daño físico hacia el enemigo es 50% mayor.
Hice una variación llamada Templar's Faith, ámbas se encuentran en el script de modo separado.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 13. Giant Slayer
#------------------------------------------------------------------------------
# Giant Slayer: Clase que hace que si el enemigo tiene más HP que el que ataca,
# el daño físico del ataque es 50% mayor
#------------------------------------------------------------------------------
# Templar's Faith: Skill que hace que si el enemigo tiene más HP que el que
# ataca, el daño de su ataque es superior dependiendo de la diferencia de HP
#==============================================================================

#==============================================================================
# * Giant Slayer
#==============================================================================

class Game_Battler
  alias giant_slayer_attack attack_effect unless $@
  def attack_effect(attacker)
    if self.hp > attacker.hp
      giant_slayer_effect = true
    end
    effective = giant_slayer_attack(attacker)
    if effective and self.damage.to_i > 0 and giant_slayer_effect == true
      #------------------------------------------------------------------------
      # Aplicar el efecto Giant Slayer dependiendo de la clase del atacante
      #------------------------------------------------------------------------
      if attacker.is_a?(Game_Actor) && attacker.class_id == 3 # ID de la clase
        extra_damage = self.damage * 50 / 100
        self.damage += extra_damage
        self.hp -= extra_damage
      end
      #------------------------------------------------------------------------
    end
    return effective
  end
end

#==============================================================================
# * Templar's Faith
#==============================================================================

class Game_Battler
  alias templar_faith_skill skill_effect unless $@
  def skill_effect(user, skill)
    if self.hp > user.hp
      templar_faith_effect = true
      hp_dif = self.hp - user.hp
    end
    effective = templar_faith_skill(user, skill)
    if effective and self.damage.to_i > 0 and templar_faith_effect == true
      #------------------------------------------------------------------------
      # Aplicar la fórmula a partir de la diferencia de HP
      #------------------------------------------------------------------------
      if skill.id == 40 # ID de la Skill
        extra_damage = hp_dif * 25 / 100
        self.damage += extra_damage
        self.hp -= extra_damage
      end
      #------------------------------------------------------------------------
    end
    return effective
  end
end

14. Black Blood
Estado que hace que al que lo posee algunas habilidades de curación le dañen en vez de curarle.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 14. Black Blood
#------------------------------------------------------------------------------
# Estado que hace que algunas habilidades de curación dañen en vez de curar
# Nota: El estado Muerte suele quitar todos los demás estados, pero el estado
# Black Blood no debe quitarlo
#==============================================================================

class Game_Battler
 
  # ID del estado Black Blood
  BLACK_BLOOD_ID = 17
 
  # ID de las habilidades afectadas por Black Blood
  BLACK_BLOOD_SKILLS = [1, 2, 3]
 
  # ID de los items afectados por Black Blood
  BLACK_BLOOD_ITEMS = []
 
  alias black_blood_skill skill_effect unless $@
  def skill_effect(user, skill)
    default_power = {}
    for s in BLACK_BLOOD_SKILLS
      default_power[s] = $data_skills[s].power
    end
    if self.state?(BLACK_BLOOD_ID)
      for s in BLACK_BLOOD_SKILLS
        $data_skills[s].power = -default_power[s]
      end
    end
    effective = black_blood_skill(user, skill)
    for s in BLACK_BLOOD_SKILLS
      $data_skills[s].power = default_power[s]
    end
    #--------------------------------------------------------------------------
    # Aplicar aquí efectos causados por la habilidad
    #--------------------------------------------------------------------------
    remove_state(BLACK_BLOOD_ID) if self.dead?
    #--------------------------------------------------------------------------
    return effective
  end
 
  alias black_blood_item item_effect unless $@
  def item_effect(item)
    default_hp = {}
    for i in BLACK_BLOOD_ITEMS
      default_hp[i] = [$data_items[i].recover_hp, $data_items[i].recover_hp_rate]
    end
    if self.state?(BLACK_BLOOD_ID)
      for i in BLACK_BLOOD_ITEMS
        $data_items[i].recover_hp = -default_hp[i][0]
        $data_items[i].recover_hp_rate = -default_hp[i][1]
      end
    end
    effective = black_blood_item(item)
    for i in BLACK_BLOOD_ITEMS
      $data_items[i].recover_hp = default_hp[i][0]
      $data_items[i].recover_hp_rate = default_hp[i][1]
    end
    #--------------------------------------------------------------------------
    # Aplicar aquí efectos causados por la habilidad
    #--------------------------------------------------------------------------
    remove_state(BLACK_BLOOD_ID) if self.dead?
    #--------------------------------------------------------------------------
    return effective
  end
end

15. Healing Fate
Estado que afecta al enemigo. Si a éste se le causa de daño mayor que el 20% de su HP máximo, el atacante y todos sus aliados se curan el mismo valor.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 15. Healing Fate
#------------------------------------------------------------------------------
# Estado que afecta al enemigo. Si a éste se le causa de daño un 20% o más de
# su HP máximo, el atacante y todos sus aliados se curan el mismo valor
#==============================================================================

class Game_Battler
  unless $@
    alias healing_fate_ini    initialize
    alias healing_fate_attack attack_effect
    alias healing_fate_skill  skill_effect
  end
  
  attr_accessor :healing_fate_cure
  
  def initialize
    healing_fate_ini
    @healing_fate_cure = 0
  end
  
  def attack_effect(attacker)
    effective = healing_fate_attack(attacker)
    if effective == true && self.damage.to_i > 0
      #------------------------------------------------------------------------
      # Aquí se define la fórmula de HP a partir de la cual tiene efecto
      #------------------------------------------------------------------------
      if self.state?(12) # ID del estado Healing Fate
        if self.damage > (self.maxhp * 20 / 100)
          healing_fate_effect(attacker)
        end
      end
      #------------------------------------------------------------------------
    end
    return effective
  end
  
  def healing_fate_effect(attacker)
    case attacker
    when Game_Actor
      members = $game_party.actors
    when Game_Enemy
      members = $game_troop.enemies
    end
    for target in members
      next if target.dead?
      if defined?(BLACK_BLOOD_ID) != nil && target.state?(BLACK_BLOOD_ID)
        target.healing_fate_cure -= self.damage
      else
        target.healing_fate_cure += self.damage
      end
    end
  end
end

class Scene_Battle
  alias healing_fate_phase4 update_phase4_step6 unless $@
  def update_phase4_step6
    healing_fate_phase4
    for target in $game_party.actors + $game_troop.enemies
      if target.healing_fate_cure != 0 and !target.dead?
        #----------------------------------------------------------------------
        # Aquí se define la fórmula curación dependiendo del daño causado
        #----------------------------------------------------------------------
        cure = target.healing_fate_cure
        amp = [cure.abs * 15 / 100, 1].max
        cure += rand(amp+1) + rand(amp+1) - amp
        target.damage = -cure
        target.hp += cure
        #----------------------------------------------------------------------
        target.damage_pop = true
      end
      target.healing_fate_cure = 0
    end
  end
end

16. Mana Burn
Skill que a parte de causar daño físico también resta magia al enemigo, dependiendo del SP del que la usa.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 16. Mana Burn
#------------------------------------------------------------------------------
# Skill que a parte de causar daño físico también resta magia dependiendo del
# SP del que la usa
#==============================================================================

class Game_Battler
  alias mana_burn_skill skill_effect unless $@
  def skill_effect(user, skill)
    effective = mana_burn_skill(user, skill)
    if effective
      #------------------------------------------------------------------------
      # Definir el efecto de la habilidad
      #------------------------------------------------------------------------
      if skill.id == 40 # ID de la Skill
        self.sp -= user.sp * 15 / 100
      end
      #------------------------------------------------------------------------
    end
    return effective
  end
end

17. Bide
Estado que hace que el que la usa no pueda moverse durante varios turnos. Cuando termina ese estado todo el daño que ha recibido lo devuelve repartido a los enemigos, pero multiplicado por 2.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 17. Bide
#------------------------------------------------------------------------------
# Estado que hace que el que la usa no pueda moverse durante varios turnos.
# Cuando termina ese estado todo el daño que ha recibido lo devuelve
# repartido a los enemigos, pero multiplicado por 2.
# Nota: Lo de no poder moverse es una opción default de los estados
#==============================================================================

class Game_Battler
  
  BIDE_ID = 17 # ID del estado Bide
  
  unless $@
    alias bide_initialize initialize
    alias bide_attack attack_effect
    alias bide_skill skill_effect
    alias bide_remove_state remove_state
  end
  
  attr_accessor :bide_damage
  
  def initialize
    bide_initialize
    @bide_damage = 0
  end
  
  def attack_effect(attacker)
    effective = bide_attack(attacker)
    if effective && self.damage.to_i > 0
      if self.state?(BIDE_ID)
        @bide_damage += self.damage
      end
    end
    return effective
  end
  
  def skill_effect(user, skill)
    effective = bide_skill(user, skill)
    if effective && self.damage.to_i > 0
      if self.state?(BIDE_ID)
        @bide_damage += self.damage
      end
    end
    return effective
  end
  
  def remove_state(state_id, force = false)
    bide_remove_state(state_id, force)
    if state_id == BIDE_ID
      if self.is_a?(Game_Actor)
        members = $game_troop.enemies
      else
        members = $game_party.actors
      end
      members.delete_if {|target| target.dead?}
      for target in members
        #----------------------------------------------------------------------
        # Fórmula de daño a los enemigos tras terminar el estado
        #----------------------------------------------------------------------
        bide_final_damage = (@bide_damage * 2) / members.size
        target.damage = bide_final_damage
        target.hp -= bide_final_damage
        #----------------------------------------------------------------------
        target.damage_pop = true
      end
      @bide_damage = 0
    end
  end
  
  def safe_bide_remove_state
    bide_remove_state(state_id, force)
    @bide_damage = 0
  end
end

18. No Cure
Estado que desactiva ciertas skills. En el ejemplo sería con las de curación, pero se puede poner la ID de cualquiera en la lista.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 18. Disable Skills ("No Cure")
#------------------------------------------------------------------------------
# Estado que impide usar habilidades de curación
#==============================================================================

class Game_Battler
  alias disable_ids_skill_use? skill_can_use? unless $@
  def skill_can_use?(skill_id)
    if self.state?(11) # ID del estado
      #------------------------------------------------------------------------
      # Definir aquí las skills de curación que quedan inhabilitadas
      #------------------------------------------------------------------------
      disabled_skills = [1, 2, 3]
      #------------------------------------------------------------------------
      return false if disabled_skills.include?(skill_id)
    end
    return disable_ids_skill_use?(skill_id)
  end
end

19. Destiny Bond
Estado que hace que si matan al que te lo aplicó, tú también mueras.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 19. Destiny Bond
#------------------------------------------------------------------------------
# Estado que hace que si matan al que te lo aplicó, tú también mueras
#==============================================================================

class Game_Battler
  
  attr_reader :destiny_bond_attacker
  
  unless $@
    alias destiny_bond_ini initialize
    alias destiny_bond_remove_state remove_state
    alias destiny_bond_skill skill_effect
  end
  
  DESTINY_BOND_ID = 17 # ID del estado Destiny Bond
  
  def initialize
    destiny_bond_ini
    @destiny_bond_attacker = nil
  end
  
  def remove_state(state_id, force = false)
    destiny_bond_remove_state(state_id, force)
    if state_id == DESTINY_BOND_ID
      @destiny_bond_attacker = nil
    end
  end
  
  def skill_effect(user, skill)
    if skill.id == 50 # ID de la skill Destiny Bond
      if self.dead? or self.state?(DESTINY_BOND_ID)
        return false
      end
      add_state(DESTINY_BOND_ID)
      @destiny_bond_attacker = user
      return true
    end
    return destiny_bond_skill(user, skill)
  end
end

class Scene_Battle
  alias destiny_bond_update update unless $@
  def update
    destiny_bond_update
    for target in $game_party.actors + $game_troop.enemies
      if target.state?(Game_Battler::DESTINY_BOND_ID)
        next if target.destiny_bond_attacker == nil
        if target.destiny_bond_attacker.dead?
          target.damage = target.hp
          target.hp -= target.hp
          target.damage_pop = true
        end
      end
    end
  end
end

20. Siphoning Strike
Estado que hace que el siguiente ataque normal haga más daño.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 20. Siphoning Strike
#------------------------------------------------------------------------------
# Estado que hace que el siguiente ataque normal haga más daño
#==============================================================================

class Game_Battler
  alias siphoning_attack attack_effect unless $@
  def attack_effect(attacker)
    effective = siphoning_attack(attacker)
    #------------------------------------------------------------------------
    # Definir el efecto del estado
    #------------------------------------------------------------------------
    if self.state?(16)
      if effective && self.damage.to_i > 0
        extra_damage = self.damage / 2
        self.damage += extra_damage
        self.hp -= extra_damage
      end
      remove_state(16)
    end
    #------------------------------------------------------------------------
    return effective
  end
end

Ésto ya empieza a tener pinta de colección de scripts xD
A ver si pronto puedo subir más.


Última edición por Wecoc el 2017-05-07, 10:10, editado 5 veces
avatar
Wecoc
Administrador
Administrador



Créditos 8945

Gracias : 434

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por Ledai el 2017-01-08, 12:50

Qué paso llevas...

En serio, esta colección pasará a la historia. Son aportes tan prácticos y útiles que prácticamente en cualquier proyecto serían aplicables, hasta yo estoy pensando en usar alguno para el extra de coliseo...

Me gustó el Second Chance; aunque yo lo conocía de otros juegos como "Ultimo estertor" Pero sí que es bastante práctico.

En serio, gracias por aportar tanto para el XP!!
avatar
Ledai
Aventurero
Aventurero

0/3

Créditos 2466

Gracias : 162

http://ahurallg.blogspot.com.es/

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por Hk Diamond el 2017-01-08, 18:16

wao, justamente estube pensando en como aplicar ciertos estados que acabo de encontrar justo aca, increible.
avatar
Hk Diamond
Iniciado
Iniciado

0/3

Créditos 9

Gracias : 2

http://hkdiamond.deviantart.com/

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por Wecoc el 2017-01-08, 21:48

Sigo con lo mío ;D

21. Flare Gun
Arma que quema a los enemigos. Eso no les hace demasiado daño pero si vuelves a aplicarlo sobre un enemigo ya quemado, le hace mucho más daño.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 21. Flare Gun
#------------------------------------------------------------------------------
# Arma que quema a los enemigos. Eso no les hace demasiado daño pero si vuelves
# a aplicarlo sobre un enemigo ya quemado, le hace mucho más daño.
#==============================================================================

class Game_Battler
  alias flare_gun_attack attack_effect unless $@
  def attack_effect(attacker)
    effective = flare_gun_attack(attacker)
    #------------------------------------------------------------------------
    # Definir el efecto del arma de fuego
    #------------------------------------------------------------------------
    if attacker.is_a?(Game_Actor) and attacker.weapon_id == 5 # ID del Arma
      if effective && self.damage.to_i > 0
        if self.state?(7) # ID del estado
          element = element_rate(1) # ID del elemento Fuego
          damage_extra = self.damage * (200 - element) / 100
          self.damage += damage_extra
          self.hp -= damage_extra
        else
          add_state(7) # ID del estado
        end
      end
    end
    #------------------------------------------------------------------------
    return effective
  end
end

22. Auto Life
Estado que hace que cuando te matan revivas (perdiendo el estado).
Hice hace tiempo otra versión distinta de ese efecto, podéis consultarlo aquí: Auto-Revivir

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 22. Auto Life
#------------------------------------------------------------------------------
# Estado que hace que cuando te matan revivas (perdiendo el estado)
# Nota: El estado Muerte suele quitar todos los demás estados, pero el estado
# Auto Life no debe quitarlo
#==============================================================================

class Scene_Battle
  alias auto_life_phase4 update_phase4_step6 unless $@
  def update_phase4_step6
    auto_life_phase4
    if @phase4_step == 1
      for target in $game_party.actors + $game_troop.enemies
        if target.dead?
          #--------------------------------------------------------------------
          # Definir el efecto del estado
          #--------------------------------------------------------------------
          if target.state?(11)
            target.remove_state(1)  # ID Estado Muerte
            target.remove_state(11)
            target.hp = target.maxhp / 3
            @status_window.refresh
          end
          #--------------------------------------------------------------------
        end
      end
    end
  end
end

23. Death Allies
Variable que se define a actores y que hace que si matan a otro actor, el primero obtenga un estado Furia.
Hice hace tiempo otra versión distinta de ese efecto, podéis consultarlo aquí: Dead-Furious

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 23. Death Allies
#------------------------------------------------------------------------------
# Variable que se define a actores y que hace que si matan a otro actor,
# el primero obtenga un estado Furia
#------------------------------------------------------------------------------
# Conviene definir a cada actor qué actores le activan el efecto, con:
#   $game_actors[ID de Actor].death_allies = [ID Actor 1, ID Actor 2 ...]
#
# También se puede activar y desactivar el efecto por actor, usando:
#   $game_actors[ID de Actor].death_allies_auto_state = true / false
#==============================================================================

class Game_Actor
  
  attr_accessor :death_allies_auto_state
  attr_accessor :death_allies
  
  unless $@
    alias death_allies_setup setup
    alias death_allies_hp hp=
  end
  
  def setup(actor_id)
    death_allies_setup(actor_id)
    @death_allies_auto_state = true # Activar el estado Death Allies
    @death_allies = [] # ID de los Actores que si se mueren le activan el estado
  end
  
  def hp=(hp)
    death_allies_hp(hp)
    if self.dead?
      for actor in $game_party.actors
        next if actor.dead?
        next if actor.death_allies_auto_state == false
        if actor.death_allies.include?(self.id)
          actor.add_state(13, true) # ID del Estado Furia
        end
      end
    end
  end
end

24. Leech Seed
Skill que causa un estado alterado que hace que cada turno el que hizo la skill robe vida al enemigo al que le hizo el estado. Esa vida robada depende del %HP del enemigo, cuanto mayor más vida se roba.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 24. Leech Seed
#------------------------------------------------------------------------------
# Skill que causa un estado alterado que hace que cada turno el que hizo la
# skill robe vida al enemigo con el estado. Esa vida robada depende del %HP
# del enemigo, cuanto mayor más vida se roba.
#==============================================================================

class Game_Battler
  unless $@
    alias leech_seed_ini initialize
    alias leech_seed_skill skill_effect
  end
  
  attr_accessor :leech_seed_attacker
  
  def initialize
    leech_seed_ini
    @leech_seed_attacker = nil
  end
  
  def skill_effect(user, skill)
    #--------------------------------------------------------------------------
    # Definir aquí el efecto de la Skill
    #--------------------------------------------------------------------------
    if skill.id == 30
      remove_state(11)
      add_state(11)
      @leech_seed_attacker = user
      return true
    end
    #--------------------------------------------------------------------------
    return leech_seed_skill(user, skill)
  end
end

class Scene_Battle
  alias update_remove_leach update
  def update
    update_remove_leach
    for target in $game_party.actors + $game_troop.enemies
      next if target.dead?
      #------------------------------------------------------------------------
      # Al morirse el causante del estado, es retirado automáticamente
      #------------------------------------------------------------------------
      if target.state?(11)
        next if target.leech_seed_attacker == nil
        attacker = target.leech_seed_attacker
        if attacker.dead?
          target.remove_state(11)
          target.leech_seed_attacker = nil
        end
      end
      #------------------------------------------------------------------------
    end
  end
  
  alias update_leech_seed update_phase4_step6 unless $@
  def update_phase4_step6
    update_leech_seed
    for target in $game_party.actors + $game_troop.enemies
      next if target.dead?
      #------------------------------------------------------------------------
      # Definir aquí el efecto del Estado
      #------------------------------------------------------------------------
      if target.state?(11)
        next if target.leech_seed_attacker == nil
        attacker = target.leech_seed_attacker
        damage = [[target.hp / 4, 10].max, 200].min
        amp = [damage.abs * 15 / 100, 1].max
        damage += rand(amp+1) + rand(amp+1) - amp
        target.damage = damage
        target.hp -= damage
        target.damage_pop = true
        if defined?(Game_Battler::BLACK_BLOOD_ID) != nil
          if target.state?(Game_Battler::BLACK_BLOOD_ID)
            damage = -damage
          end
        end
        attacker.damage = -damage
        attacker.hp += damage
        attacker.damage_pop = true
        @status_window.refresh
      end
      #------------------------------------------------------------------------
    end
  end
end

25. Organic Fragment
Habilidad que a parte de golpear "marca" al enemigo. Hay que atacarlo tres veces seguidas con la habilidad, si no desaparece el efecto. Una vez llegada la tercera, causa una gran cantidad de daño. Puede servir como ejemplo más genérico para cualquier habilidad con usos totalmente distintos si el atacado tiene cierto estado alterado.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 25. Organic Fragment
#------------------------------------------------------------------------------
# Habilidad que a parte de golpear "marca" al enemigo.
# Hay que atacarlo tres veces seguidas con la habilidad, si no desaparece el
# efecto. Una vez llegada la tercera, causa una gran cantidad de daño.
#------------------------------------------------------------------------------
# Nota: Hay que definir dos Estados alterados distintos
# Ataque 1 - Añade Estado 1 ('Organic Fragment')
# Ataque 2 - Añade Estado 2 ('Organic Complete')
# Ataque 3 - Causa mucho daño
#==============================================================================

class Game_Battler
  alias organic_des_skill skill_effect unless $@
  def skill_effect(user, skill)
    effective = organic_des_skill(user, skill)
    if skill.id == 17 # ID de la Skill
      # Si no tiene ni el Estado 1 ni el Estado 2
      if !self.state?(11) and !self.state?(12)
        self.damage = "" if self.damage == "Miss"
        # Añadir Estado 1
        add_state(11)
        return true
      end
      # Si tiene el Estado 1
      if self.state?(11)
        self.damage = "" if self.damage == "Miss"
        # Quitar Estado 1 y añadir Estado 2
        remove_state(11)
        add_state(12)
        return true
      end
      # Si tiene el Estado 2
      if self.state?(12) && self.damage.to_i > 0
        # Quitar Estado 2 y hacer mucho daño (Definir aquí la fórmula de daño)
        remove_state(12)
        damage_extra = self.damage * 5
        self.damage += damage_extra
        self.hp -= damage_extra
        return true
      end
    end
    return effective
  end
end

26. Skill Turns
Típica skill que la ejecutas pero hasta el paso de varios turnos no se aplica.
Funcionamiento: La skill que aplica un Estado al usuario. Éste al terminar tras unos turnos "fuerza" al usuario a hacer una Skill muy poderosa que no forma parte de su lista de skills. Está inspirado en una habilidad (Tsunami) que tenía un boss de Final Fantasy llamado Cagnazzo.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 26. Skill Turns
#------------------------------------------------------------------------------
# Skill que tarda unos turnos en cargarse.
#------------------------------------------------------------------------------
# Requiere dos Skills:
#------------------------------------------------------------------------------
# Skill 1 - Skill principal (Afectar a usuario)
#   Hay que definirle que añada el Estado alterado desde la Base de Datos
#------------------------------------------------------------------------------
# Skill 2 - Skill puente (Afectar a todo el grupo enemigo)
#   Solo hace de puente para causar el daño a los enemigos tras terminar el
#   estado. No consume SP y no forma parte de las skills del battler.
#------------------------------------------------------------------------------
# Recomendación: Poner en el Estado restricción Paralizado y remover por turnos
# Nota: Para que sea cancelada con ciertas skills solo hay que hacer
# que esas quiten el Estado alterado
#==============================================================================

class Game_Battler
  unless $@
    alias skill_turns_initialize   initialize
    alias skill_turns_skill_use?   skill_can_use?
    alias skill_turns_remove_state remove_states_auto
  end
  
  attr_accessor :skill_turn_active
  
  def initialize
    skill_turns_initialize
    @skill_turn_active = false
  end
  
  def skill_can_use?(skill_id)
    if skill_id == 21 && self.state?(13) # ID de la Skill 1 & ID del Estado
      return false
    end
    return skill_turns_skill_use?(skill_id)
  end
  
  def remove_states_auto
    @skill_turn_active = false
    skill_turn = self.state?(13) # ID del Estado
    skill_turns_remove_state
    if skill_turn && !self.state?(13) # ID del Estado
      @skill_turn_active = true
    end
    return true
  end
end

class Scene_Battle
  alias skill_turns_update_phase4 update_phase4_step1 unless $@
  def update_phase4_step1
    skill_turns_update_phase4
    if @phase4_step == 2 && @active_battler.skill_turn_active == true
      @active_battler.current_action.kind = 1
      @active_battler.current_action.forcing = true
      @active_battler.current_action.skill_id = 22 # ID de la Skill 2
      @active_battler.skill_turn_active = false
    end
  end
end

27. Plague
Skill que transfiere ciertos Estados al enemigo (solo usable si se tiene algún estado alterado negativo)

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 27. Plague
#------------------------------------------------------------------------------
# Skill que transfiere ciertos Estados al enemigo (solo usable si se tiene
# algún estado alterado negativo)
#==============================================================================

class Game_Battler
  
  PLAGUE_STATES = [2, 3, 4] # IDs de los estados transferibles
  
  attr_reader :states_turn
  
  unless $@
    alias plague_touch_use? skill_can_use?
    alias plague_skill      skill_effect
  end
  
  def skill_can_use?(skill_id)
    if skill_id == 17 # ID de la Skill
      result = false
      for state in PLAGUE_STATES
        if @states.include?(state)
          result = true
        end
      end
      return false if result == false
    end
    return plague_touch_use?(skill_id)
  end
  
  def skill_effect(user, skill)
    if skill.id == 17 # ID de la Skill
      result = false
      for state in PLAGUE_STATES
        if user.states.include?(state)
          result = true
        end
      end
      hit_result = (rand(100) < skill.hit)
      if result == false or hit_result == false
        self.damage = "Miss"
        self.damage_pop = true
        return true
      end
      for state in user.states
        next if user.state?(state)
        if PLAGUE_STATES.include?(state)
          self.add_state(state)
          self.states_turn[state] = user.states_turn[state]
          #--------------------------------------------------------------------
          # Activa la siguiente línea si quieres que al transferir el estado
          # éste se quite del que usó la skill
          #--------------------------------------------------------------------
          #user.remove_state(state)
          #--------------------------------------------------------------------
        end
      end
      return true
    end
    return plague_skill(user, skill)
  end
end

28. Topsy-Turvy
Skill que afecta al enemigo cambiando sus estados alterados positivos por su símil negativo

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 28. Topsy-Turvy
#------------------------------------------------------------------------------
# Skill que invierte algunos estados alterados del enemigo
# Ejemplo: pasar los estados con efecto positivo a su símil con efecto negativo
#------------------------------------------------------------------------------
# Nota: El mismo script puede servir para aliados o uno mismo, solo hay que
# definirlo en la skill como siempre
#==============================================================================

class Game_Battler
  
  #----------------------------------------------------------------------------
  # * Cambios de Estado. ID Estado previo => ID Estado nuevo
  # { Nota: Puedes hacerlo retroactivo, A => B y a la vez B => A }
  #----------------------------------------------------------------------------
  TOPSY_TURVY = {2 => 3, 3 => 2, 4 => 5}
  #----------------------------------------------------------------------------
  
  alias topsy_turvy_skill skill_effect unless $@
  def skill_effect(user, skill)
    if skill.id == 17 # ID de la Skill
      current_states = @states.clone
      current_turns = @states_turn.clone
      result = false
      for state in TOPSY_TURVY.keys
        if current_states.include?(state)
          result = true
        end
      end
      hit_result = (rand(100) < skill.hit)
      if result == false or hit_result == false
        self.damage = "Miss"
        self.damage_pop = true
        return true
      end
      for state in TOPSY_TURVY.keys
        if current_states.include?(state)
          new_state = TOPSY_TURVY[state]
          add_state(new_state)
          @states_turn[new_state] = current_turns[state]
          remove_state(state)
        end
      end
      return true
    end
    return topsy_turvy_skill(user, skill)
  end
end

29. Skill Effects
Estados que afectan al Poder de ciertas skills. Éste es muy general y se puede usar para muchas cosas.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 29. Skill Effects
#------------------------------------------------------------------------------
# Strongness: Estado hace que al aplicar ciertas skills tengan 15% más poder
# Weakness: Estado hace que al aplicar ciertas skills tengan 15% menos poder
# Vulnerable: Estado hace que ciertas skills le hagan 15% más efecto
# Invulnerable: Estado hace que ciertas skills le hagan 15% menos efecto
#------------------------------------------------------------------------------
# Nota: Los cambios se dan tanto en la cantidad de daño como de curación
#==============================================================================

module Skill_Effects

  # Definir los estados que atribuyen efectos en el daño de ciertas skills
  # ID Estado => [ID Skills]
  
  STRONGNESS   = {1 => [1, 2], 2 => [3, 4]}
  WEAKNESS     = {}
  VULNERABLE   = {}
  INVULNERABLE = {}

end

class Game_Battler
  include Skill_Effects
  
  alias wecoc_power_skill_effects skill_effect unless $@
  def skill_effect(user, skill)
    skill = skill.clone
    current_power = skill.power
    # Strongness
    for state in STRONGNESS.keys
      if user.state?(state)
        if STRONGNESS[state].include?(skill.id)
          skill.power += current_power * 15 / 100
        end
      end
    end
    # Weakness
    for state in WEAKNESS.keys
      if user.state?(state)
        if WEAKNESS[state].include?(skill.id)
          skill.power -= current_power * 15 / 100
        end
      end
    end
    # Vulnerable
    for state in VULNERABLE.keys
      if self.state?(state)
        if VULNERABLE[state].include?(skill.id)
          skill.power += current_power * 15 / 100
        end
      end
    end
    # Invulnerable
    for state in INVULNERABLE.keys
      if self.state?(state)
        if INVULNERABLE[state].include?(skill.id)
          skill.power -= current_power * 15 / 100
        end
      end
    end
    return wecoc_power_skill_effects(user, skill)
  end
end

30. Gamble Strike
Habilidad normal pero que si la ejecutas y fallas, pierdes agilidad.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 30. Gamble Strike
#------------------------------------------------------------------------------
# Habilidad normal pero que si la ejecutas y fallas, pierdes agilidad.
#==============================================================================

class Game_Battler
  alias gamble_strike_skill skill_effect unless $@
  def skill_effect(user, skill)
    effective = gamble_strike_skill(user, skill)
    #--------------------------------------------------------------------------
    # Aplicar cambios al fallar la Skill
    #--------------------------------------------------------------------------
    if skill.id == 30
      if self.damage == "Miss"
        user.agi -= 10
      end
    end
    #--------------------------------------------------------------------------
    return effective
  end
end

Pronto pondré más.


Última edición por Wecoc el 2017-04-26, 03:19, editado 3 veces (Razón : Arreglado bug en "Auto Life")
avatar
Wecoc
Administrador
Administrador



Créditos 8945

Gracias : 434

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por Wecoc el 2017-01-09, 01:54

Qué locura de topic xD Espero que con ésto se reviva un poco la fe al RPG maker XP, que uno de sus inconvenientes estrella es que por defecto tiene menos opciones de batalla que el VX Ace.

31. Plague Touch
Estado que hace que cuando te atacan, ciertos estados negativos puedan ser transferidos al enemigo.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 31. Plague Touch
#------------------------------------------------------------------------------
# Estado que hace que cuando te atacan, ciertos estados negativos puedan ser
# transferidos al enemigo
#------------------------------------------------------------------------------
# Nota: Si entre las skills defines algunas que afectan al aliado será éste
# el que quedará afectado
#==============================================================================

class Game_Battler
  
  PLAGUE_TOUCH = [2, 3, 4] # IDs de los estados transferibles
  SKILL_TOUCH  = [] # IDs de las skills que permiten transferencia
  
  attr_reader :states_turn
  
  unless $@
    alias plague_touch_attack attack_effect
    alias plague_touch_skill skill_effect
  end
  
  def attack_effect(attacker)
    effective = plague_touch_attack(attacker)
    result = false
    for state in PLAGUE_TOUCH
      if @states.include?(state)
        transference = 50 # Eficacia de transferencia, sobre 100
        hit_effect = (rand(100) < transference)
        if hit_effect == true
          attacker.add_state(state)
          attacker.states_turn[state] = self.states_turn[state]
          #--------------------------------------------------------------------
          # Activa la siguiente línea si quieres que al transferir el estado
          # éste se quite del atacado
          #--------------------------------------------------------------------
          #remove_state(state)
          #--------------------------------------------------------------------
          effective = true
        end
      end
    end
    return effective
  end
  
  def skill_effect(user, skill)
    effective = plague_touch_skill(user, skill)
    result = false
    if SKILL_TOUCH.include?(skill.id)
      for state in PLAGUE_TOUCH
        if @states.include?(state)
          transference = 50 # Eficacia de transferencia, sobre 100
          hit_effect = (rand(100) < transference)
          if hit_effect == true
            user.add_state(state)
            user.states_turn[state] = self.states_turn[state]
            #------------------------------------------------------------------
            # Activa la siguiente línea si quieres que al transferir el estado
            # éste se quite del atacado
            #------------------------------------------------------------------
            #remove_state(state)
            #------------------------------------------------------------------
            effective = true
          end
        end
      end
    end
    return effective
  end
end

32. Doom
Ya he puesto un par de estados de maldición de la muerte pero éste es el más clásico y básico, cuando termina mueres.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 32. Doom
#------------------------------------------------------------------------------
# Estado con contador que al llegar a 0 mata al que lo tenía.
#------------------------------------------------------------------------------
# Nota: Para que una skill retire el estado sin causar Muerte hay que usar:
#   $game_party.actors[ID Actor].doom_safe_remove_state(ID Estado)
#   $game_troop.enemies[ID Enemy].doom_safe_remove_state(ID Estado)
#------------------------------------------------------------------------------
# Nota: Recomiendo usar también el Skill Effects para que quien tenga el
# estado Doom reciba más daño de magias oscuras
#==============================================================================

class Game_Battler
  alias doom_safe_remove_state remove_state unless $@
  def remove_state(state_id, force = false)
    doom_safe_remove_state(state_id, force)
    #--------------------------------------------------------------------------
    # Efecto del estado al retirarlo
    #--------------------------------------------------------------------------
    if state_id == 17 # ID de Estado Doom
      add_state(1)    # ID de Estado Muerte
    end
    #--------------------------------------------------------------------
  end
end

33. Void Shift
Provoca un intercambio de HP entre el que usa ésta skill y el aliado seleccionado.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 33. Void Shift
#------------------------------------------------------------------------------
# Skill que afecta tanto al que la hace como a un aliado.
# Lo que hace es cambiarles el HP entre ellos, pero si la diferencia es alta
# el HP mayor queda reducido y el menor aumenta.
#==============================================================================

class Game_Battler
  alias void_shift_skill skill_effect unless $@
  def skill_effect(user, skill)
    #--------------------------------------------------------------------------
    # Efecto de la skill al ser aplicada
    #--------------------------------------------------------------------------
    if skill.id == 81 # ID de la Skill
      hp1 = self.hp
      hp2 = user.hp
      # Aplicar reducción de la diferencia si ésta es demasiado alta
      # (puedes quitar esta parte si no te interesa)
      if (hp1 - hp2).abs > 250
        hp_average = (hp1 + hp2) / 2
        hp_dest = rand(10) - rand(10)
        if hp1 > hp2
          hp1 = hp_average + 100 - hp_dest
          hp2 = hp_average - 100 + hp_dest
        else
          hp1 = hp_average - 100 + hp_dest
          hp2 = hp_average + 100 - hp_dest
        end
      end
      # Cambiar el HP entre los afectados
      self.hp = hp2
      user.hp = hp1
      self.damage = (hp1 - hp2)
      user.damage = (hp2 - hp1)
      self.damage_pop = true
      user.damage_pop = true
      return true
    end
    #--------------------------------------------------------------------------
    return void_shift_skill(user, skill)
  end
end

class Scene_Battle
  alias void_shift_skill_result make_skill_action_result unless $@
  def make_skill_action_result
    void_shift_skill_result
    @status_window.refresh if @skill.id == 81 # ID de la Skill
  end
end

34. Slip Cure
Estado similar a Veneno (en batalla) pero que cura cada turno, en vez de dañar.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 34. Slip Cure
#------------------------------------------------------------------------------
# Estado similar a Veneno (en batalla) pero que cura en vez de dañar.
# Nota: En las propiedades hay que definirlo como si fuera Veneno
#==============================================================================

class Game_Battler
  def slip_damage_effect
    #--------------------------------------------------------------------------
    self.damage = self.maxhp / 10 # Fórmula de daño por defecto
    #--------------------------------------------------------------------------
    if self.state?(3) # Estado Slip Cure
      if defined?(BLACK_BLOOD_ID) != nil && self.state?(BLACK_BLOOD_ID)
        self.damage = self.maxhp / 10  # Fórmula de daño (Black Blood)
      else
        self.damage = -self.maxhp / 10 # Fórmula de curación
      end
    end
    #--------------------------------------------------------------------------
    # Añade aquí todos los estados que tengan más prioridad que el Slip Cure
    #--------------------------------------------------------------------------
    if self.state?(2) # Estado Veneno
      self.damage = self.maxhp / 10 # Fórmula de daño
    end
    #--------------------------------------------------------------------------
    if self.damage.abs > 0
      amp = [self.damage.abs * 15 / 100, 1].max
      self.damage += rand(amp+1) + rand(amp+1) - amp
    end
    self.hp -= self.damage
    #--------------------------------------------------------------------------
    return true
  end
end

35. Share Life
Habilidad que iguala el HP de todo el grupo vivo a la media de éste + 15%

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 35. Share Life
#------------------------------------------------------------------------------
# Habilidad que iguala el HP de todo el grupo vivo a la media de éste + 15%
# Nota: La Skill debe aplicarse sobre Usuario, no sobre todo el grupo
#==============================================================================

class Game_Battler
  alias share_life_skill skill_effect unless $@
  def skill_effect(user, skill)
    #--------------------------------------------------------------------------
    # Efecto de la skill al ser aplicada
    #--------------------------------------------------------------------------
    if skill.id == 81 # ID de la Skill
      if user.is_a?(Game_Actor)
        members = $game_party.actors.clone
      else
        members = $game_troop.enemies.clone
      end
      members.delete_if {|target| target.dead?}
      hp_average = 0
      for target in members
        hp_average += target.hp
      end
      hp_average /= members.size
      hp_average += hp_average * 15 / 100
      for target in members
        target.hp = hp_average
      end
      return true
    end
    #--------------------------------------------------------------------------
    return share_life_skill(user, skill)
  end
end

class Scene_Battle
  alias share_life_skill_result make_skill_action_result unless $@
  def make_skill_action_result
    share_life_skill_result
    @status_window.refresh if @skill.id == 81 # ID de la Skill
  end
end

36. Poach
Habilidad que si al usarla matas al enemigo éste siempre dropeará su item a final de batalla.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 36. Poach
#------------------------------------------------------------------------------
# Habilidad de ataque que si al usarla matas al enemigo éste siempre dropeará
# su item a final de batalla
# Nota: En éste script se reescribe el método :start_phase5
# Marqué con ## la línea que fue cambiada, por si tenéis que adaptarlo
#==============================================================================

class Game_Battler
  # IDs de los enemigos con los que Poach es efectivo
  ALWAYS_DROP_IDS = [1, 2, 3, 4]
  
  alias poach_skill skill_effect unless $@
  def skill_effect(user, skill)
    effective = poach_skill(user, skill)
    #--------------------------------------------------------------------------
    # Efecto de la skill al ser aplicada
    #--------------------------------------------------------------------------
    if self.is_a?(Game_Enemy) and skill.id == 41
      if effective == true and self.damage.to_i > 0 and self.dead?
        if ALWAYS_DROP_IDS.include?(self.id)
          self.always_drop = true
        end
      end
    end
    #--------------------------------------------------------------------------
    return effective
  end
end

class Game_Enemy < Game_Battler
  attr_accessor :always_drop
  alias poach_initialize initialize unless $@
  def initialize(troop_id, member_index)
    poach_initialize(troop_id, member_index)
    @always_drop = false
  end
end

class Scene_Battle
  def start_phase5
    @phase = 5
    $game_system.me_play($game_system.battle_end_me)
    $game_system.bgm_play($game_temp.map_bgm)
    exp = 0
    gold = 0
    treasures = []
    for enemy in $game_troop.enemies
      unless enemy.hidden
        exp += enemy.exp
        gold += enemy.gold
        if rand(100) < enemy.treasure_prob or enemy.always_drop == true ##
          if enemy.item_id > 0
            treasures.push($data_items[enemy.item_id])
          end
          if enemy.weapon_id > 0
            treasures.push($data_weapons[enemy.weapon_id])
          end
          if enemy.armor_id > 0
            treasures.push($data_armors[enemy.armor_id])
          end
        end
      end
    end
    treasures = treasures[0..5]
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      if actor.cant_get_exp? == false
        last_level = actor.level
        actor.exp += exp
        if actor.level > last_level
          @status_window.level_up(i)
        end
      end
    end
    $game_party.gain_gold(gold)
    for item in treasures
      case item
      when RPG::Item
        $game_party.gain_item(item.id, 1)
      when RPG::Weapon
        $game_party.gain_weapon(item.id, 1)
      when RPG::Armor
        $game_party.gain_armor(item.id, 1)
      end
    end
    @result_window = Window_BattleResult.new(exp, gold, treasures)
    @phase5_wait_count = 100
  end
end

37. Critical Protect
Estado que hace que cuando tienes HP inferior al 25%, te sube la Defensa un 10%

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 37. Critical Protect
#------------------------------------------------------------------------------
# Estado que hace que cuando tienes HP inferior al 25%, te sube la Def un 10%
#==============================================================================

class Game_Battler
  alias critical_protect_pdef pdef unless $@
  def pdef
    n = critical_protect_pdef.to_f
    #--------------------------------------------------------------------------
    # Aplicar aquí el efecto del estado
    #--------------------------------------------------------------------------
    if self.state?(14)
      if self.hp <= (self.maxhp * 25 / 100)
        extra_pdef = n * 10 / 100
        n += extra_pdef
      end
    end
    #--------------------------------------------------------------------------
    return Integer(n)
  end
end

38. Cyclone
Estado que no pueden tener más de un miembro del grupo a la vez, si se aplica a otro el primero lo pierde

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 38. Cyclone
#------------------------------------------------------------------------------
# Estado que no pueden tener más de un miembro del grupo a la vez, si se aplica
# a otro el primero lo pierde
#==============================================================================

class Game_Battler
  alias cyclone_add_state add_state unless $@
  def add_state(state_id, force=false)
    if state_id == 16 # ID del Estado
      if self.is_a?(Game_Actor)
        members = $game_party.actors
      else
        members = $game_troop.enemies
      end
      members.each {|target| target.remove_state(16)} # ID del Estado
    end
    cyclone_add_state(state_id, force)
  end
end

39. Auto Potion
Estado que hace que cuando atacan al actor y tiene poca vida use una poción del inventario (la más pequeña que haya de la lista de posibles) para curarse.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 39. Auto Potion
#------------------------------------------------------------------------------
# Estado que hace que cuando atacan al actor y tiene poca vida use una poción
# del inventario (la más pequeña que haya de la lista de posibles) para curarse
#==============================================================================

class Game_Battler
  # ID de las pociones ordenadas de más prioridad a menos
  AUTO_POTIONS = [1, 2, 3]
end

class Game_Actor < Game_Battler
  unless $@
    alias auto_potion_can_use? skill_can_use?
    alias auto_potion_attack attack_effect
    alias auto_potion_skill  skill_effect
    alias auto_potion_item   item_effect
  end
  
  def skill_can_use?(skill_id)
    if skill_id == 82 # ID de la Skill que aplica el estado Auto Potion
      result = false
      for i in AUTO_POTIONS
        if $game_party.item_number(i) > 0
          result = true
          break
        end
      end
      return false if result == false
    end
    return auto_potion_can_use?(skill_id)
  end
  
  def attack_effect(attacker)
    effective = auto_potion_attack(attacker)
    auto_potion_effect
    return effective
  end
  
  def skill_effect(user, skill)
    effective = auto_potion_skill(user, skill)
    auto_potion_effect
    return effective
  end
  
  def item_effect(item)
    effective = auto_potion_item(item)
    if !AUTO_POTIONS.include?(item.id)
      auto_potion_effect
    end
    return effective
  end
  
  def auto_potion_effect
    #--------------------------------------------------------------------------
    # Efecto del estado Auto Potion
    #--------------------------------------------------------------------------
    if self.state?(18)
      if !self.dead? && self.hp <= (self.maxhp * 15 / 100)
        for i in AUTO_POTIONS
          if $game_party.item_number(i) > 0
            item_effect($data_items[i])
            $game_party.lose_item(i, 1)
            break
          end
        end
      end
    end
    #--------------------------------------------------------------------------
  end
end

40. Arisen Phoenix
Habilidad que quita todos los estados alterados del target y le cura HP basándose en el número de estados retirados.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 40. Arisen Phoenix
#------------------------------------------------------------------------------
# Habilidad que quita todos los estados alterados del target y le cura HP
# basándose en el número de estados retirados
#------------------------------------------------------------------------------
# Nota: Es muy fácil editar el script de modo que sea un Item y no una Skill,
# solo hay que hacer que se base en item_effect en vez de skill_effect
#==============================================================================

class Game_Battler
 
  # ID de los estados que se pueden quitar
  ARISEN_STATES = [2, 3, 4, 5, 6]
 
  alias arisen_phoenix_skill skill_effect unless $@
  def skill_effect(user, skill)
    if skill.id == 64 # ID de la Skill
      arisen_states = @states.clone
      arisen_states = arisen_states.select do |state_id|
        ARISEN_STATES.include?(state_id)
      end
      arisen_states.each {|state_id| remove_state(state_id, true)}
      #------------------------------------------------------------------------
      # Cálculo del HP usando el número de estados alterados
      #------------------------------------------------------------------------
      hp_count = arisen_states.size
      self.damage = -(hp_count * 50)
      self.hp -= self.damage
      self.damage_pop = true
      #------------------------------------------------------------------------
      return true
    end
    return arisen_phoenix_skill(user, skill)
  end
end

Hasta pronto ;D


Última edición por Wecoc el 2017-04-26, 01:50, editado 2 veces
avatar
Wecoc
Administrador
Administrador



Créditos 8945

Gracias : 434

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por BlazeCrimson el 2017-01-10, 00:02

Fantástico, hay demasiadas buenas, no se ni por cual empezar. Grandisimo aporte.

_________________
Image and video hosting by TinyPic
avatar
BlazeCrimson
Analista
Analista

0/3

Créditos 1109

Gracias : 107

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por Producciones The Golden el 2017-01-10, 00:24

Mmmh... para mi la batalla en el xp no está tan mal! espera... cuasi nunca la uso... XDD
mis favoritos "Tips and tricks" son:
Slip Cure
Spirit Shackles
Magic Guard
Death Scar
Doom
y Skill Turns.
El resto de las que diste son muy para crear estrategias en el combate pero como yo hago combates en mapa ahora pues... las que mencioné me vienen mejor, o me vendrían XD ya que la mayoría no tendría sentido emplearlas en el mapa, pero buah... es que leo tus aportes y montones de juegos se me vienen a la cabeza XD es como plasmar un juego fantástico de estrategia como Warcraft pero en la típica lucha por turnos del rpg maker!
avatar
Producciones The Golden
Principiante
Principiante

0/3

Créditos 552

Gracias : 47

http://gamerprotown.jimdo.com/

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por silvanash el 2017-01-10, 12:37

@Golden: el Spirit Shackles de Wecocio sólo funciona en batalla. El efecto de veneno en mapa se procesa en Game_Party. Te he hecho el Spirit Shackles para mapa:

Código:
class Game_Party
 
  alias slv_check_map_slip_damage check_map_slip_damage unless $@
 
  def check_map_slip_damage
    slv_check_map_slip_damage
    for actor in @actors
      if actor.sp > 0 and actor.state?(2) # Id del estado Spirit Shackles
        actor.sp -= [actor.maxsp / 100, 1].max
        $game_screen.start_flash(Color.new(255,0,0,128), 4)
      end
    end
  end
 
end

Y aquí la versión para Number Flood:

Código:
class Game_Party
 
  # Ported to Number Flood
 
  def check_map_slip_damage
    for actor in @actors
      if actor.hp > 0 and actor.state?(2) # Id del estado veneno
        value = [actor.maxhp / 100, 1].max
        actor.hp -= value
        if actor.hp == 0
          $game_system.se_play($data_system.actor_collapse_se)
        end
        $game_player.damages.push([value, "Poison"])
        $game_temp.gameover = $game_party.all_dead?
      end
      if actor.sp > 0 and actor.state?(11) # Id del estado Spirit Shackles
        value = [actor.maxsp / 100, 1].max
        actor.sp -= value
        $game_player.damages.push([value, "Drain"])
      end
    end
    $game_player.damage_pop = $game_player.damages.size > 0
  end
 
end

La versión para Number Flood no tiene los flashes de pantalla. La version normal los conserva para notificar al jugador de qué pasa, pero si varios estados provocan varios flashes al mismo tiempo, se va a montar una fiesta de luces.
avatar
silvanash
Aventurero
Aventurero

0/3

Créditos 1548

Gracias : 211

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

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

WOW y diste justo en mi favorito X3, de momento no creo que lo use pero gracias por adaptarlo! te lo agradezco mucho, te dejo mis gracias.
avatar
Producciones The Golden
Principiante
Principiante

0/3

Créditos 552

Gracias : 47

http://gamerprotown.jimdo.com/

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por Wecoc el 2017-01-11, 10:26

BlazeCrimson: Me alegra que te sirvan.

Producciones The Golden: Piensa que las batallas en mapa son otro mundo totalmente distinto, a parte que hay varias y cada una usa cosas de la base distintas así que es muy difícil hacer un script que sirva para todo. La mayoría de éstos scripts no te servirán, las batallas en mapa y otras batallas muy alejadas de la default requieren que éste tipo de add-ons se hagan explícitamente para las mismas.

Silvanash: Estás en todo, gracias.

Bueno, pongo alguna más. Como dicen en Final Fantasy VII, allé voy xD

41. Overkill Bonus
Skill que si se usa para matar a un enemigo, todo el daño "extra" que le hiciste se usa en la siguiente acción ofensiva del atacante.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 41. Overkill Bonus
#------------------------------------------------------------------------------
# Skill que si se usa para matar a un enemigo, todo el HP "extra" se usa en la
# siguiente acción ofensiva del atacante.
#==============================================================================

class Game_Battler
  
  attr_accessor :overkill_hp
  
  unless $@
    alias overkill_bonus_ini initialize
    alias overkill_attack    attack_effect
    alias overkill_skill     skill_effect
  end
  
  def initialize
    overkill_bonus_ini
    @overkill_hp = 0
  end
  
  def attack_effect(attacker)
    effective = overkill_attack(attacker)
    #--------------------------------------------------------------------------
    # Causar daño extra en ataque si se tiene Overkill acumulado
    #--------------------------------------------------------------------------
    if attacker.overkill_hp > 0
      if effective and self.damage.to_i > 0
        self.damage += attacker.overkill_hp
        self.hp -= attacker.overkill_hp
      end
      attacker.overkill_hp = 0
    end
    #--------------------------------------------------------------------------
    return effective
  end
  
  def skill_effect(user, skill)
    hp = self.hp
    effective = overkill_skill(user, skill)
    #--------------------------------------------------------------------------
    # Causar daño extra en ataque si se tiene Overkill acumulado
    #--------------------------------------------------------------------------
    if user.overkill_hp > 0
      if effective and self.damage.to_i > 0
        self.damage += user.overkill_hp
        self.hp -= user.overkill_hp
      end
      user.overkill_hp = 0
    end
    #--------------------------------------------------------------------------
    # Efecto de la skill Overkill
    #--------------------------------------------------------------------------
    if skill.id == 59
      if effective and self.damage.to_i > hp
        user.overkill_hp = (self.damage - hp)
      end
    end
    #--------------------------------------------------------------------------
    return effective
  end
end

42. Reverence
Estado que hace que cuando el battler usa ciertas skills, se le cure HP dependiendo del coste de SP de esa skill.
(Puse de ejemplo que se curara la mitad de lo que vale la skill)

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 42. Reverence
#------------------------------------------------------------------------------
# Estado que hace que cuando el battler usa ciertas skills, se le cure HP
# dependiendo del coste de SP de esa skill
#==============================================================================

class Game_Battler
  #----------------------------------------------------------------------------
  # ID de las Skills que al usar Reverence curan a quien las usó
  #----------------------------------------------------------------------------
  REVERENCE_SKILLS = [58, 59, 60, 61]
  #----------------------------------------------------------------------------
end

class Scene_Battle
  alias reverence_skill_phase4 update_phase4_step6 unless $@
  def update_phase4_step6
    reverence_skill_phase4
    if @active_battler.current_action.kind == 1
      skill_id = @active_battler.current_action.skill_id
      if Game_Battler::REVERENCE_SKILLS.include?(skill_id)
        #----------------------------------------------------------------------
        # Efecto del estado Reverence
        #----------------------------------------------------------------------
        if @active_battler.state?(11)
          hp_cure = @skill.sp_cost * 50 / 100
          if defined?(Game_Battler::BLACK_BLOOD_ID) != nil
            if @active_battler.state?(Game_Battler::BLACK_BLOOD_ID)
              hp_cure = -hp_cure
            end
          end
          @active_battler.damage = -hp_cure
          @active_battler.hp += hp_cure
          @active_battler.damage_pop = true
          @status_window.refresh
        end
        #----------------------------------------------------------------------
      end
    end
  end
end

43. Spell Shield
Estado que dura un solo turno y hace que falle cualquier habilidad ofensiva que le hagan (sale como "Fallo")

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 43. Spell Shield
#------------------------------------------------------------------------------
# Estado que dura un solo turno y hace que falle el daño de cualquier habilidad
# ofensiva (sale como "Fallo")
#==============================================================================

class Game_Battler
  alias spell_shield_skill skill_effect unless $@
  def skill_effect(user, skill)
    #--------------------------------------------------------------------------
    # Efecto del estado Spell Shield
    #--------------------------------------------------------------------------
    if self.state?(11)
      if skill.power > 0
        self.damage = "Miss"
        self.damage_pop = true
        remove_state(11)
        return false
      end
    end
    #--------------------------------------------------------------------------
    return spell_shield_skill(user, skill)
  end
end

44. Power Charge
Estado que hace que el siguiente ataque físico cause doble daño. También he puesto la versión Mind Charge, que hace lo mismo pero con la siguiente habilidad ofensiva.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 44. Power Charge
#------------------------------------------------------------------------------
# Power Charge: Estado que hace que el siguiente ataque físico cause doble daño
#------------------------------------------------------------------------------
# Mind Charge: Estado que hace que la siguiente habilidad cause doble daño
#==============================================================================

#==============================================================================
# * Power Charge
#==============================================================================

class Game_Battler
  alias power_charge_attack attack_effect unless $@
  def attack_effect(attacker)
    effective = power_charge_attack(attacker)
    #--------------------------------------------------------------------------
    # Efecto del estado
    #--------------------------------------------------------------------------
    if self.state?(11)
      if self.damage.to_i > 0
        damage_extra = self.damage
        self.hp -= damage_extra
        self.damage += damage_extra
      end
      remove_state(11)
    end
    #--------------------------------------------------------------------------
    return effective
  end
end

#==============================================================================
# * Mind Charge
#==============================================================================

class Game_Battler
  alias mind_charge_skill skill_effect unless $@
  def skill_effect(user, skill)
    effective = mind_charge_skill(user, skill)
    #--------------------------------------------------------------------------
    # Efecto del estado
    #--------------------------------------------------------------------------
    if self.state?(12)
      if self.damage.to_i > 0
        damage_extra = self.damage
        self.hp -= damage_extra
        self.damage += damage_extra
      end
      remove_state(12)
    end
    #--------------------------------------------------------------------------
    return effective
  end
end

45. Greed
Estado que hace que cuando se usa un item o una skill concretos a álguien (funciona tanto con ofensivos como defensivos) el target pase a ser el que la usó.
Atención: Éste script requiere Advanced Scope para funcionar.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 45. Greed
#------------------------------------------------------------------------------
# Greed Items: Estado que hace que cuando se usa un item a álguien, el
# target pase a ser el que la usó
#------------------------------------------------------------------------------
# Greed Skills: Lo mismo que Greed Items pero con habilidades
#------------------------------------------------------------------------------
# ATENCIÓN: Éste script requiere Advanced Scope para funcionar
#==============================================================================

class Game_Battler
  # ID de los Items afectados por el efecto Greed
  GREED_ITEMS = [1, 2, 3]
  # ID de las Skills afectadas por el efecto Greed
  GREED_SKILLS = [51, 52, 53, 54]
end

class Scene_Battle
  alias greed_target_battlers set_target_battlers unless $@
  def set_target_battlers(item)
    case item
    when RPG::Item # Objeto
      if @active_battler.state?(18) # ID del estado
        if Game_Battler::GREED_ITEMS.include?(item.id)
          return [@active_battler]
        end
      end
    when RPG::Skill # Habilidad
      if @active_battler.state?(18) # ID del estado
        if Game_Battler::GREED_SKILLS.include?(item.id)
          return [@active_battler]
        end
      end
    end
    greed_target_battlers(item)
  end
end

46. Wish
Habilidad que sacrifica la mitad de la HP del que la usó para curar el doble de cantidad a un aliado.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 46. Wish
#------------------------------------------------------------------------------
# Habilidad que sacrifica la mitad de la HP del que la usó para curar el doble
# de cantidad a un aliado (si se intenta aplicar a uno mismo la habilidad falla)
#==============================================================================

class Game_Battler
  alias wish_skill skill_effect unless $@
  def skill_effect(user, skill)
    #--------------------------------------------------------------------------
    # Efecto de la habilidad Wish
    #--------------------------------------------------------------------------
    if skill.id == 14
      hit = skill.hit
      hit_result = (rand(100) < hit)
      hit_result = false if self.id == user.id
      if hit_result == true
        # Cálculo del daño
        hp_damage = (user.hp.to_f / 2).ceil
        user.damage = hp_damage
        user.hp -= hp_damage
        user.damage_pop = true
        # Cálculo de la curación
        hp_cure = hp_damage * 2
        if defined?(BLACK_BLOOD_ID) != nil
          if self.state?(BLACK_BLOOD_ID)
            hp_cure = -hp_cure
          end
        end
        self.damage = -hp_cure
        self.hp += hp_cure
        self.damage_pop = true
        return true
      else
        user.damage = "Miss"
        user.damage_pop = true
        return false
      end
    end
    #--------------------------------------------------------------------------
    return wish_skill(user, skill)
  end
end

47. White Wind
Skill que cura a todos los aliados (incluyendo el que la usó) la misma cantidad de HP que éste tenía.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 47. White Wind
#------------------------------------------------------------------------------
# Skill que cura a todos los aliados (incluyendo el que la usó) la misma
# cantidad de HP que éste tenía
#==============================================================================

class Game_Battler
  
  # ID de la skill White Wind
  WHITE_WIND_ID = 82
  
  attr_accessor :white_wind_hp
  attr_accessor :white_wind_hit
  
  alias white_wind_ini initialize unless $@
  def initialize
    white_wind_ini
    @white_wind_hp = 0
    @white_wind_hit = true
  end
  
  alias white_wind_skill skill_effect unless $@
  def skill_effect(user, skill)
    if skill.id == WHITE_WIND_ID
      self.critical = false
      if ((skill.scope == 3 or skill.scope == 4) and self.hp == 0) or
         ((skill.scope == 5 or skill.scope == 6) and self.hp >= 1)
        return false
      end
      effective = false
      hit_result = user.white_wind_hit
      if hit_result == true
        self.damage = -user.white_wind_hp
        self.hp += user.white_wind_hp
      else
        self.damage = "Miss"
      end
      return true
    end
    return white_wind_skill(user, skill)
  end
end

class Scene_Battle
  alias white_wind_skill_result make_skill_action_result unless $@
  def make_skill_action_result
    @skill = $data_skills[@active_battler.current_action.skill_id]
    if @skill.id == Game_Battler::WHITE_WIND_ID
      #------------------------------------------------------------------------
      # Fórmula de la curación White Wind
      #------------------------------------------------------------------------
      @active_battler.white_wind_hp = @active_battler.hp
      @active_battler.white_wind_hit = false
      if rand(100) < @skill.hit
        @active_battler.white_wind_hit = true
      end
      #------------------------------------------------------------------------
    end
    white_wind_skill_result
    @active_battler.white_wind_hp = 0
    @active_battler.white_wind_hit = true
  end
end

48. Mana Bank
Estado que hace que el SP siempre tenga el valor máximo, es decir sea "ilimitado", pero una vez el estado termina éste pasa automáticamente a valer 0.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 48. Mana Bank
#------------------------------------------------------------------------------
# Estado que hace que el SP sea ilimitado, pero una vez el estado termina
# luego el SP baja a 0
#==============================================================================

class Game_Battler
  alias manabank_sp sp= unless $@
  def sp=(sp)
    #--------------------------------------------------------------------------
    # Efecto del estado Mana Bank
    #--------------------------------------------------------------------------
    if self.state?(16)
      manabank_sp(sp) if sp > @sp
      return
    end
    #--------------------------------------------------------------------------
    manabank_sp(sp)
  end
  
  alias safe_manabank_add_state add_state unless $@
  def add_state(state_id, force=false)
    safe_manabank_add_state(state_id, force)
    if state_id == 16       # ID del estado
      self.sp = self.maxsp  # Igualar SP al máximo al añadir el estado
    end
  end
  
  alias safe_manabank_remove_state remove_state unless $@
  def remove_state(state_id, force=false)
    safe_manabank_remove_state(state_id, force)
    if state_id == 16 # ID del estado
      self.sp = 0     # Quitar todo el SP al retirar el estado
    end
  end
end

49. Map Advantage
Dependiendo del mapa, algunos elementos se vuelven más o menos potentes. Por ejemplo si estás en una montaña rocosa tiene sentido que el estado Tierra sea más potente. Hice una alternativa llamada Area Advantage que es lo mismo pero por area, pero éste solo funcionará si usáis el script Area Support.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 49. Map Advantage
#------------------------------------------------------------------------------
# Map: Dependiendo del mapa, algunos elementos se vuelven más o menos potentes
#------------------------------------------------------------------------------
# Area: Lo mismo pero con el Area. Solo aplicable con el script Area Support
#==============================================================================

#==============================================================================
# * Map Advantage
#==============================================================================

class Game_Battler
  
  # Mapas con elementos reforzados:  ID Mapa => [ID Elementos]
  MAP_ELEMENT_PLUS  = {1 => [1, 2, 3]}
  
  # Mapas con elementos debilitados: ID Mapa => [ID Elementos]
  MAP_ELEMENT_MINUS = {1 => [4, 5, 6]}

end

for Klass in [Game_Actor, Game_Enemy]
  class Klass
    alias element_map_rate element_rate
    def element_rate(element_id)
      result = element_map_rate(element_id)
      element_plus  = MAP_ELEMENT_PLUS[$game_map.map_id]
      element_minus = MAP_ELEMENT_MINUS[$game_map.map_id]
      if element_plus.include?(element_id)
        result *= 2 # Multiplicar efecto de los reforzados * 2
      end
      if element_minus.include?(element_id)
        result /= 2 # Dividir efecto de los debilitados / 2
      end
      return result
    end
  end
end

#==============================================================================
# * Area Advantage
#==============================================================================

class Game_Battler
  
  # Areas con elementos reforzados:  ID Area => [ID Elementos]
  AREA_ELEMENT_PLUS  = {1 => [1, 2, 3]}
  
  # Areas con elementos debilitados: ID Area => [ID Elementos]
  AREA_ELEMENT_MINUS = {1 => [4, 5, 6]}
  
end

for Klass in [Game_Actor, Game_Enemy]
  class Klass
    alias element_area_rate element_rate
    def element_rate(element_id)
      result = element_area_rate(element_id)
      if $game_player.respond_to?(:area)
        element_plus  = AREA_ELEMENT_PLUS[$game_player.area]
        element_minus = AREA_ELEMENT_MINUS[$game_player.area]
        if element_plus.include?(element_id)
          result *= 2 # Multiplicar efecto de los reforzados * 2
        end
        if element_minus.include?(element_id)
          result /= 2 # Dividir efecto de los debilitados / 2
        end
      end
      return result
    end
  end
end

50. Chaos Bolt
Skill con un 100% de probabilidades de Crítico, pero que el multiplicador de daño de éste crítico depende del ratio de Crítico actual del que la usó.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 50. Chaos Bolt
#------------------------------------------------------------------------------
# Skill con un 100% de probabilidades de Crítico, pero que el multiplicador de
# daño depende del ratio de Crítico actual del que la usó
#==============================================================================

class Game_Battler
  alias chaos_bolt_skill skill_effect unless $@
  def skill_effect(user, skill)
    if skill.id == 83 # ID de la skill Chaos Bolt
      return false if self.dead?
      self.critical = true
      effective = false
      hit = skill.hit
      if skill.atk_f > 0
        hit *= user.hit / 100
      end
      hit_result = (rand(100) < hit)
      effective |= hit < 100
      if hit_result == true
        power = skill.power + user.atk * skill.atk_f / 100
        power -= self.pdef * skill.pdef_f / 200
        power -= self.mdef * skill.mdef_f / 200
        power = [power, 0].max
        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)
        self.damage = power * rate / 20
        self.damage *= elements_correct(skill.element_set)
        self.damage /= 100
        self.damage /= 2 if self.guarding?
        #------Aquí se define el cambio en el daño según el critical_rate------
        critical_rate = 4 * user.dex / self.agi
        self.damage = (self.damage.to_f * critical_rate).to_i
        #----------------------------------------------------------------------
        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
        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)
        effective |= hit < 100
      end
      if hit_result == true
        remove_states_shock
        effective = true
        self.hp -= self.damage
        @state_changed = false
        effective |= states_plus(skill.plus_state_set)
        effective |= states_minus(skill.minus_state_set)
      else
        self.damage = "Miss"
      end
      unless $game_temp.in_battle
        self.damage = nil
      end
      return effective
    end
    return chaos_bolt_skill(user, skill)
  end
end

Y bueno, ya hice todos los 50, así que ya están... Espero que os haya...
¡No hombre, no! Pronto pondré más ;D


Última edición por Wecoc el 2017-04-28, 03:09, editado 3 veces
avatar
Wecoc
Administrador
Administrador



Créditos 8945

Gracias : 434

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por Wecoc el 2017-01-11, 19:13

He tenido que hacer unas pequeñas modificaciones a Auto Life y Magic Guard porque tenían algún bug, ahora ya deberían ir bien.

51. Enchanted Sword
Arma que tiene una pequeña probabilidad de atacar con una skill en vez de con un golpe normal.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 51. Enchanted Sword
#------------------------------------------------------------------------------
# Arma que tiene una pequeña probabilidad de atacar con una skill en vez de
# con un golpe normal.
# Nota: Aconsejo reservar esa skill solo para el arma y ponerle coste de SP 0.
#==============================================================================

class Scene_Battle
  alias enchanted_attack_phase4 update_phase4_step2
  def update_phase4_step2
    unless @active_battler.current_action.forcing
      kind  = @active_battler.current_action.kind
      basic = @active_battler.current_action.basic
      if kind == 0 && basic == 0
        if @active_battler.is_a?(Game_Actor)
          if @active_battler.weapon_id == 1 # ID del Arma
            skill = $data_skills[64] # ID de la Skill
            skill_rate = 10 # Probabilidad de usar la Skill
            if rand(100) < skill_rate && @active_battler.sp >= skill.sp_cost
              @active_battler.current_action.forcing = true
              @active_battler.current_action.kind = 1
              @active_battler.current_action.skill_id = skill.id
            end
          end
        end
      end
    end
    enchanted_attack_phase4
  end
end

52. Mending
Habilidad que se aplica a un aliado y que hace que el que la ha aplicado vaya perdiendo SP cada turno y el afectado suba HP (es decir, como una sanación por turnos).
Atención: Requiere el Spirit Shackles y el Slip Cure ya posteados previamente.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 52. Mending
#------------------------------------------------------------------------------
# Habilidad que se aplica a un aliado y que hace que el que la ha aplicado vaya
# perdiendo SP cada turno y el afectado suba HP.
#------------------------------------------------------------------------------
# Requiere otros Tips & Tricks para recrear el efecto:
# - 3. Spirit Shackles  (Estado -SP/turno)
# - 34. Slip Cure      (Estado +HP/turno)
#==============================================================================

class Game_Battler
  unless $@
    alias mending_ini    initialize
    alias mending_skill  skill_effect
    alias mending_remove remove_state
  end
 
  attr_accessor :mending_target
 
  def initialize
    mending_ini
    @mending_target = nil
  end
 
  MENDING_SP = 3    # ID Estado -SP/turno
  MENDING_HP = 34  # ID Estado +HP/turno
 
  def skill_effect(user, skill)
    if skill.id == 15 # ID de la habilidad Mending
      hit = skill.hit
      hit_result = (rand(100) < hit)
      hit_result = false if self.id == user.id
      if hit_result == true
        user.add_state(MENDING_SP)
        self.add_state(MENDING_HP)
        user.mending_target = self
        return true
      end
    end
    mending_skill(user, skill)
  end
 
  def remove_state(state_id, force=false)
    mending_remove(state_id, force)
    if state_id == MENDING_SP
      if @mending_target != nil
        @mending_target.mending_remove(MENDING_HP, true)
        @mending_target = nil
      end
    end
    if state_id == MENDING_HP
      if self.is_a?(Game_Actor)
        members = $game_party.actors.clone
      else
        members = $game_troop.enemies.clone
      end
      members.delete(self)
      for target in members
        if target.mending_target != nil && target.mending_target == self
          target.mending_remove(MENDING_SP, true)
          target.mending_target = nil
        end
      end
    end
  end
end

53. False Promise
Habilidad de protección a un aliado; éste no recibe daño físico hasta que termina el estado o muere el que la usó. Pero una vez se termina ese estado, recibe todo el HP acumulado. It's a trap!

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 53. False Promise
#------------------------------------------------------------------------------
# Habilidad que afecta a un aliado añadiéndole un estado.
# Éste no recibe daño físico hasta que termina el estado o muere el que la usó.
# Entonces recibe todo ese daño, de golpe.
# Nota: Configura la Skill en la Base de Datos para que añada ese estado.
#==============================================================================

class Game_Battler
  unless $@
    alias false_promise_ini    initialize
    alias false_promise_skill  skill_effect
    alias false_promise_hp     hp=
    alias false_promise_dead   add_state
    alias false_promise_remove remove_state
  end
  
  attr_accessor :promise_target
  attr_accessor :promise_hp
  
  def initialize
    false_promise_ini
    @promise_target = nil
    @promise_hp = 0
  end
  
  def hp=(hp)
    if hp < self.hp and self.state?(17) # ID del estado False Promise
      @promise_hp += (self.hp - hp)
      return
    end
    false_promise_hp(hp)
  end
  
  def add_state(state_id, force=false)
    false_promise_dead(state_id, force)
    if state_id == 1 # ID estado Muerte
      if @promise_target != nil
        @promise_target.remove_state(17) # ID del estado False Promise
        @promise_target = nil
      end
    end
  end
  
  def remove_state(state_id, force=false)
    false_promise_remove(state_id, force)
    if state_id == 17 # ID del estado False Promise
      self.hp = (self.hp - @promise_hp)
      @promise_hp = 0
    end
  end
  
  def skill_effect(user, skill)
    if skill.id == 54 # ID de la Skill
      return false if self.id == user.id
    end
    effective = false_promise_skill(user, skill)
    if effective
      if skill.id == 54 # ID de la Skill
        user.promise_target = self
      end
    end
    return effective
  end
end

54. Blue Magic
Estado que permite adquirir la habilidad con la que ataca el enemigo. Puse configuración para que lo adaptéis a vuestro gusto.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 54. Blue Magic
#------------------------------------------------------------------------------
# Estado que permite adquirir la habilidad con la que te ha atacado el enemigo
#==============================================================================

module Blue_Magic
  
  # Define si al quitar el estado alterado las magias aprendidas desaparecen
  CLEAR_REMOVING_STATE = true
  
  # Define si solo guarda la última o bien puede aprender más de una skill
  ONLY_ONE_SPELL = true
  
  # Lista con las skills que permite copiar
  SKILLS = [1, 2, 3, 4, 5, 6, 7, 8, 9]
  
end

class Game_Battler
  unless $@
    alias blue_magic_ini    initialize
    alias blue_magic_skill  skill_effect
    alias blue_magic_remove remove_state
  end
  
  attr_accessor :blue_learned
  
  def initialize
    blue_magic_ini
    @blue_learned = []
  end
  
  def skill_effect(user, skill)
    blue_magic_skill(user, skill)
    if self.state?(17) # ID del estado Blue Magic
      if Blue_Magic::SKILLS.include?(skill.id)
        if Blue_Magic::ONLY_ONE_SPELL == true
          @blue_learned = []
        end
        if !@blue_learned.include?(skill.id)
          @blue_learned.push(skill.id)
        end
      end
    end
  end
  
  def remove_state(state_id, force=false)
    blue_magic_remove(state_id, force)
    if state_id == 17 # ID del estado Blue Magic
      if Blue_Magic::CLEAR_REMOVING_STATE == true
        @blue_learned = []
      end
    end
  end
end

class Game_Actor < Game_Battler
  alias blue_magic_skills skills unless $@
  def skills
    result = (blue_magic_skills + @blue_learned)
    return result.uniq.sort!
  end
end

class Game_Enemy
  alias blue_magic_actions actions unless $@
  def actions
    result = blue_magic_actions
    for i in @blue_learned
      action = RPG::Enemy::Action.new
      action.kind = 1
      action.skill_id = i
      result.push(action)
    end
    return result
  end
end

55. Spell Siphon
Habilidad que permite adquirir una habilidad al azar del enemigo.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 55. Spell Siphon
#------------------------------------------------------------------------------
# Skill que permite adquirir una habilidad al azar del enemigo
# Es una modificación más compleja de Blue Magic
#==============================================================================

module Spell_Siphon
  
  # Define si al terminar batalla quien adquirió la habilidad vuelve a perderla
  CLEAR_BATTLE_END = true
  
  # Define si en cada batalla solo puede copiar una skill enemiga
  ONLY_ONE_SPELL = false
  
  # Lista con las skills que permite copiar
  SKILLS = [1, 2, 3, 4, 5, 6, 7, 8, 9]
  
end

class Game_Battler
  unless $@
    alias spell_siphon_ini    initialize
    alias spell_siphon_skill  skill_effect
  end
  
  attr_accessor :siphon_learned
  
  def initialize
    spell_siphon_ini
    @siphon_learned = []
  end
  
  def skill_effect(user, skill)
    if skill.id == 54 # ID de la habilidad Spell Siphon
      hit_result = (rand(100) < skill.hit)
      if hit_result == true
        target_skills = self.skills.clone
        target_skills -= self.blue_learned if self.respond_to?(:blue_learned)
        target_skills -= self.siphon_learned
        skills = []
        for i in target_skills
          if Spell_Siphon::SKILLS.include?(i)
            skills.push(i)
          end
        end
        hit_result = skills.size > 0
      end
      if hit_result == true
        skill = skills[rand(skills.size)]
        hit_result = false if user.skills.include?(skill)
      end
      if hit_result == true
        if Spell_Siphon::ONLY_ONE_SPELL == true
          user.siphon_learned = []
        end
        user.siphon_learned.push(skill)
        return true
      else
        self.damage = "Miss"
        self.damage_pop = true
        return false
      end
    end
    return spell_siphon_skill(user, skill)
  end
end

class Game_Actor < Game_Battler
  alias spell_siphon_skills skills unless $@
  def skills
    result = (spell_siphon_skills + @siphon_learned)
    return result.uniq.sort!
  end
end

class Game_Enemy
  def skills
    result = []
    for i in self.actions
      if action.kind == 1
        result.push(action.skill_id)
      end
    end
    return result.uniq.sort!
  end
  
  alias spell_siphon_actions actions unless $@
  def actions
    result = spell_siphon_actions
    for i in @siphon_learned
      action = RPG::Enemy::Action.new
      action.kind = 1
      action.skill_id = i
      result.push(action)
    end
    return result
  end
end

class Scene_Battle
  alias siphon_battle_end battle_end unless $@
  def battle_end(result)
    for actor in $game_party.actors
      if Spell_Siphon::CLEAR_BATTLE_END == false
        for skill in actor.siphon_learned
          actor.learn_skill(skill)
        end
      end
      actor.siphon_learned = []
    end
    siphon_battle_end(result)
  end
end

56. Mirror Move
Habilidad que imita la última habilidad ofensiva que hayan usado contra ti.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 56. Mirror Move
#------------------------------------------------------------------------------
# Habilidad que imita la última habilidad que recibió del enemigo
# Si no recibió ninguna habilidad, ésta falla.
#==============================================================================

class Game_Battler
  
  # ID de las Skills que pueden ser imitadas
  MIRROR_MOVE_SKILLS = [6, 7, 8, 9, 10, 11, 12, 13, 14, 15]
  
  attr_accessor :last_skill_recieved
  unless $@
    alias mirror_move_ini   initialize
    alias mirror_move_skill skill_effect
  end
  
  def initialize
    mirror_move_ini
    @last_skill_recieved = nil
  end
  
  def skill_effect(user, skill)
    effective = mirror_move_skill(user, skill)
    if MIRROR_MOVE_SKILLS.include?(skill.id)
      @last_skill_recieved = skill.id
      effective = true
    end
    return effective
  end
end

class Scene_Battle
  alias mirror_move_skill_result make_skill_action_result unless $@
  def make_skill_action_result
    @skill = $data_skills[@active_battler.current_action.skill_id]
    if @skill.id == 64 # ID de la Skill Mirror Move
      if @active_battler.last_skill_recieved == nil
        @active_battler.damage = "Miss"
        @active_battler.damage_pop = true
        return
      end
      skill_id = @active_battler.last_skill_recieved
      @active_battler.current_action.skill_id = skill_id
      @active_battler.current_action.forcing = true
      @active_battler.last_skill_recieved = nil
    end
    mirror_move_skill_result
  end
end

57. Death Nova
Estado que hace que si el que lo tiene muere, explota haciendo daño (y a veces también envenenando) a sus aliados.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 57. Death Nova
#------------------------------------------------------------------------------
# Estado que hace que si el que lo tiene muere, explota haciendo daño y
# a veces envenenando a sus aliados
#==============================================================================

class Game_Battler
  unless $@
    alias death_nova_ini   initialize
    alias death_nova_state add_state
  end
  
  attr_accessor :death_nova
  
  def initialize
    death_nova_ini
    @death_nova = false
  end
  
  def add_state(state_id, force=false)
    if force == false && state_id == 1      # ID estado Muerte
      @death_nova = true if self.state?(12) # ID estado Death Nova
    end
    death_nova_state(state_id, force)
  end
end

class Scene_Battle
  alias death_nova_upd update unless $@
  def update
    death_nova_upd
    death_nova = false
    for actor in $game_party.actors
      if actor.death_nova == true
        death_nova = true
        actor.animation_id = 99 # ID animación de explosión
        actor.death_nova = false
        members = $game_party.actors
      end
    end
    for enemy in $game_troop.enemies
      if enemy.death_nova == true
        death_nova = true
        enemy.death_nova = false
        members = $game_troop.enemies
      end
    end
    if death_nova == true
      death_nova_effect(members)
    end
  end
  
  def death_nova_effect(members)
    for target in members
      if target.exist?
        #----------------------------------------------------------------------
        # Efecto de Death Nova al morirse
        #----------------------------------------------------------------------
        damage = target.maxhp / 10
        target.damage = damage
        target.hp -= damage
        target.damage_pop = true
        poison_rate = 20
        if rand(100) < poison_rate
          target.add_state(2) # ID Estado Veneno
        end
        #----------------------------------------------------------------------
      end
    end
  end
end

58. Critical State
Estado que aparece automáticamente si te queda poca vida, y desaparece si vuelves a recuperarla.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 58. Critical State
#------------------------------------------------------------------------------
# Estado que aparece automáticamente si te queda poca vida, y desaparece
# si vuelves a recuperarla
# Nota: He puesto que ocurra solo si ya tiene un estado alterado
#==============================================================================

class Scene_Battle
  alias critical_state_upd update unless $@
  def update
    critical_state_upd
    critical_state = 17 # ID Estado crítico
    #--------------------------------------------------------------------------
    # Efecto de Critical State
    #--------------------------------------------------------------------------
    for member in $game_party.actors + $game_troop.enemies
      if member.exist? and member.state?(16) # ID Estado previo
        if member.hp < member.maxhp * 15 / 100
          if !member.state?(critical_state)
            member.add_state(critical_state, true)
            @status_window.refresh
          end
        else
          if member.state?(critical_state)
            member.remove_state(critical_state, true)
            @status_window.refresh
          end
        end
      end
    end
  end
end

59. Clearing Spell
Habilidad que gasta todo el SP y lo convierte en daño al enemigo multiplicado por dos. Su efectividad depende del porcentaje de SP actual.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 59. Clearing Spell
#------------------------------------------------------------------------------
# Habilidad que gasta todo el SP y lo convierte en daño al enemigo multiplicado
# por dos. Su efectividad depende del porcentaje de SP actual
#==============================================================================

class Game_Battler
  alias clearing_spell_skill skill_effect unless $@
  def skill_effect(user, skill)
    #--------------------------------------------------------------------------
    # Efecto de Clearing Spell
    #--------------------------------------------------------------------------
    if skill.id == 51
      hit = (user.sp * 100 / user.maxsp)
      hit_result = rand(100) < hit
      if hit_result
        self.damage = user.sp * 2
        user.sp -= user.sp
        self.hp -= self.damage
        return true
      else
        self.damage = "Miss"
        return false
      end
    end
    #--------------------------------------------------------------------------
    return clearing_spell_skill(user, skill)
  end
end

60. Auto Life Trinket
Accesorio único que permite revivir en batalla, pero solo una vez.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 60. Auto Life Trinket
#------------------------------------------------------------------------------
# Accesorio único que permite revivir en batalla, pero solo una vez.
#==============================================================================

class Scene_Battle
  unless $@
    alias auto_life_trinket_main   main
    alias auto_file_trinket_phase4 update_phase4_step6
  end
  
  def main
    @trinket_used = false
    auto_life_trinket_main
  end
  
  def update_phase4_step6
    if @trinket_used == false
      for target in $game_party.actors
        if target.dead?
          #--------------------------------------------------------------------
          # Definir el efecto del accesorio
          #--------------------------------------------------------------------
          if target.armor4_id == 80 # ID del Accesorio
            target.remove_state(1)  # ID Estado Muerte
            @trinket_used = true
            target.hp = target.maxhp / 3
            @status_window.refresh
          end
          #--------------------------------------------------------------------
        end
      end
    end
    auto_file_trinket_phase4
  end
end


Última edición por Wecoc el 2017-04-28, 04:02, editado 2 veces
avatar
Wecoc
Administrador
Administrador



Créditos 8945

Gracias : 434

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por BlazeCrimson el 2017-01-11, 19:29

Grande, incluso hay dos en concreto que quería para DC, gracias notworthy

_________________
Image and video hosting by TinyPic
avatar
BlazeCrimson
Analista
Analista

0/3

Créditos 1109

Gracias : 107

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por Wecoc el 2017-01-12, 01:19

Pues ya está, se me acabó la lista, así que por ahora se queda así.
Espero haber activado al máximo vuestras ganas de makear con éstos mini-aportes, y haberos dado ideas para vuestros proyectos.
Posiblemente en un futuro añada alguno más, pero teniendo en cuenta que se pueden editar y moldear creo que lo principal está bastante cubierto.

61. Dualcast
Estado que hace que al usar ciertas habilidades se usen dos veces seguidas en vez de una.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 61. Dualcast
#------------------------------------------------------------------------------
# Estado que hace que al usar una habilidad ofensiva ésta se use dos veces
# seguidas en vez de una
#==============================================================================

class Game_Battler
  
  # ID de las Skills que se dan dos veces con el estado Dualcast
  DUALCAST_SKILLS = [59, 60]
  
end

class Scene_Battle
  unless $@
    alias dualcast_main main
    alias dualcast_phase4 update_phase4_step6
  end
  
  def main
    @dualcast_count = 0
    dualcast_main
  end
  
  def update_phase4_step6
    dualcast_phase4
    if @phase4_step == 1
      if @active_battler.state?(15) # ID del estado Dualcast
        if @dualcast_count < 1 # Número de repeticiones
          @dualcast_count += 1
          if @active_battler.current_action.kind == 1
            skill_id = @active_battler.current_action.skill_id
            if Game_Battler::DUALCAST_SKILLS.include?(skill_id)
              @phase4_step = 2
            end
          end
        else
          @dualcast_count = 0
        end
      end
    end
  end
end

62. Convert
Habilidad que pasa el HP actual a SP y el SP actual a HP (los invierte). Si tu SP es 0 la habilidad falla, loco suicida.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 62. Convert
#------------------------------------------------------------------------------
# Habilidad que pasa el HP actual a SP y el SP actual a HP (los invierte)
#==============================================================================

class Game_Battler
  alias convert_skill skill_effect unless $@
  def skill_effect(user, skill)
    #--------------------------------------------------------------------------
    # Efecto de Convert
    #--------------------------------------------------------------------------
    if skill.id == 83
      current_hp = self.hp
      current_sp = self.sp
      if current_sp == 0
        self.damage = "Miss"
        return false
      end
      self.sp = current_hp
      self.hp = current_sp
    end
    #--------------------------------------------------------------------------
    return convert_skill(user, skill)
  end
end

63. Holy Prism
Offensive: Skill que daña a un enemigo y cura a todo el grupo aliado la mitad de ese daño.
Defensive: Skill que cura a un aliado y daña a todo el grupo enemigo la mitad de esa curación.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 63. Holy Prism
#------------------------------------------------------------------------------
# Offensive: Skill que daña a un enemigo y cura a todo el grupo aliado la mitad
# de ese daño.
#------------------------------------------------------------------------------
# Defensive: Skill que cura a un aliado y daña a todo el grupo enemigo la mitad
# de esa curación.
#==============================================================================

#==============================================================================
# * Holy Prism - Offensive
#==============================================================================

class Scene_Battle
  alias holy_prism_off_result make_skill_action_result unless $@
  def make_skill_action_result
    holy_prism_off_result
    #--------------------------------------------------------------------------
    # Efecto de Holy Prism
    #--------------------------------------------------------------------------
    if @skill.id == 51
      if @target_battlers[0].class != @active_battler.class
        if @active_battler.is_a?(Game_Actor)
          members = $game_party.actors.clone
        else
          members = $game_troop.enemies.clone
        end
        #----------------------------------------------------------------------
        # * Si quieres que no se incluya al usuario activa la siguiente línea:
        #members.delete(@active_battler)
        #----------------------------------------------------------------------
        # * Fórmula de curación a partir del daño causado
        hp_cure = (@target_battlers[0].damage.to_i) / 2
        #----------------------------------------------------------------------
        if hp_cure > 0
          for target in members
            if defined?(Game_Battler::BLACK_BLOOD_ID) != nil and
                target.state?(Game_Battler::BLACK_BLOOD_ID)
              target.damage = hp_cure
              target.hp -= hp_cure
            else
              target.damage = -hp_cure
              target.hp += hp_cure
            end
            target.damage_pop = true
          end
        end
        @status_window.refresh
      end
    end
    #--------------------------------------------------------------------------
  end
end

#==============================================================================
# * Holy Prism - Defensive
#==============================================================================

class Scene_Battle
  alias holy_prism_def_result make_skill_action_result unless $@
  def make_skill_action_result
    holy_prism_def_result
    #--------------------------------------------------------------------------
    # Efecto de Holy Prism
    #--------------------------------------------------------------------------
    if @skill.id == 51
      if @target_battlers[0].class == @active_battler.class
        if @active_battler.is_a?(Game_Actor)
          members = $game_troop.enemies.clone
        else
          members = $game_party.actors.clone
        end
        #----------------------------------------------------------------------
        # * Fórmula de daño a partir de la curación del aliado
        damage = -(@target_battlers[0].damage.to_i) / 2
        #----------------------------------------------------------------------
        if damage > 0
          for target in members
            target.damage = damage
            target.hp -= damage
            target.damage_pop = true
          end
        end
        @status_window.refresh
      end
    end
    #--------------------------------------------------------------------------
  end
end

64. Undo
Habilidad que aplicada a un aliado le devuelve el HP y SP que tenía en el turno anterior (concretamente se reescibe cada vez que sale lo de "Luchar - Escapar")

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 64. Undo
#------------------------------------------------------------------------------
# Habilidad que aplicada a un aliado le devuelve el HP y SP que tenía en el
# turno anterior (excepto si está muerto)
#==============================================================================

class Game_Battler
  
  attr_accessor :last_hp, :last_sp
  
  unless $@
    alias undo_ini    initialize
    alias undo_skill  skill_effect
  end
  
  def initialize
    undo_ini
    @last_hp = 0
    @last_sp = 0
  end
  
  def skill_effect(user, skill)
    effective = undo_skill(user, skill)
    #--------------------------------------------------------------------------
    # Efecto de habilidad Undo
    #--------------------------------------------------------------------------
    if skill.id == 4
      if rand(100) < skill.hit
        self.hp = @last_hp
        self.sp = @last_sp
        return true
      else
        self.damage = "Miss"
        return false
      end
    end
    #--------------------------------------------------------------------------
    return effective
  end
end

class Scene_Battle
  alias undo_start_phase2 start_phase2 unless $@
  def start_phase2
    for target in $game_party.actors + $game_troop.enemies
      if target.exist?
        target.last_hp = target.hp
        target.last_sp = target.sp
      end
    end
    undo_start_phase2
  end
end

65. Arcane Curse
Estado que cada vez que quien lo tiene usa magia su contador de turnos decrece, durando por lo tanto más tiempo.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 65. Arcane Curse
#------------------------------------------------------------------------------
# Estado que cada vez que usas magia su contador de turnos decrece,
# durando por lo tanto más tiempo.
# Nota: El estado deberá tener un efecto a parte, por ejemplo bajar Agilidad
# (en caso que se aplique al enemigo)
#==============================================================================

class Game_Battler
  alias arcane_curse_sp sp= unless $@
  def sp=(sp)
    if sp < self.sp
      arcane_states = [11, 12, 13] # Estados con efecto Arcane Curse
      for state in arcane_states
        if self.state?(state)
          @states_turn[state] += 1
        end
      end
    end
    arcane_curse_sp(sp)
  end
end

66. Unstable Affliction
Skill que causa un estado al que la usa (sin ser él el target), en el ejemplo el estado Silencio.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 66. Unstable Affliction
#------------------------------------------------------------------------------
# Skill que causa el estado Silencio al que la usa (sin ser él el target)
#==============================================================================

class Game_Battler
  alias unstable_skill skill_effect unless $@
  def skill_effect(user, skill)
    effective = unstable_skill(user, skill)
    if effective == true
      #------------------------------------------------------------------------
      # Efecto de la skill Unstable Affliction
      #------------------------------------------------------------------------
      if skill.id == 64     # ID de la habilidad
        silent_chance = 50  # Probabilidad Estado por efectuar la habilidad
        if rand(100) < silent_chance
          user.add_state(5) # ID del estado Silencio
        end
      end
      #------------------------------------------------------------------------
    end
    return effective
  end
end

67. Avoid Critical
Estado que impide que te hagan daño crítico.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 67. Avoid Critical
#------------------------------------------------------------------------------
# Estado que impide que te hagan daño crítico
# Nota: Normalmente el estado Muerte quita todos los estados pero éste
# debe dejarlo activado
#==============================================================================

class Game_Battler
  unless $@
    alias avoid_critical_attack attack_effect
    alias avoid_critical_skill  skill_effect
  end
  
  def attack_effect(attacker)
    effective = avoid_critical_attack(attacker)
    avoid_critical_effect if effective and self.damage.to_i > 0
    return effective
  end
  
  def skill_effect(user, skill)
    effective = avoid_critical_skill(user, skill)
    avoid_critical_effect if effective and self.damage.to_i > 0
    return effective
  end
  
  def avoid_critical_effect
    #--------------------------------------------------------------------------
    # Efecto del estado Avoid Critical
    #--------------------------------------------------------------------------
    if self.state?(25)
      if self.critical == true
        self.hp += self.damage
        self.critical = false
        self.damage /= 2
        self.hp -= self.damage
        self.remove_state(25) if self.dead?
      end
    end
  end
end

68. Memory Shield
Estado que almacena las skills con las que se ha sido atacado, y así puede evadirlas casi del todo a partir de entonces. Al terminar el estado se borran.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 68. Memory Shield
#------------------------------------------------------------------------------
# Estado que almacena las skills con las que se ha sido atacado, y así puede
# evadirlas casi del todo a partir de entonces. Al terminar el estado se borran.
#==============================================================================

class Game_Battler
  unless $@
    alias memory_shield_ini   initialize
    alias memory_shield_skill skill_effect
    alias safe_memory_remove_state remove_state
  end
  
  attr_accessor :memorized_skills
  
  def initialize
    memory_shield_ini
    @memorized_skills = []
  end
  
  def skill_effect(user, skill)
    if @memorized_skills.include?(skill.id)
      evasion_chance = 90 # Probabilidad de evasión tras memorizar skill
      hit_result = rand(100) < (100 - evasion_chance)
      if hit_result == true
        return memory_shield_skill(user, skill)
      else
        self.damage = "Miss"
        return false
      end
    end
    effective = memory_shield_skill(user, skill)
    #--------------------------------------------------------------------------
    # Almacenar ID de la skill en Memory Shield
    #--------------------------------------------------------------------------
    if self.state?(11) # Estado Memory Shield
      if skill.power > 0
        @memorized_skills.push(skill.id)
      end
    end
    #--------------------------------------------------------------------------
    return effective
  end

  def remove_state(state_id, force=false)
    safe_memory_remove_state(state_id, force)
    #--------------------------------------------------------------------------
    # Borrar habilidades almacenadas tras quitar el estado
    #--------------------------------------------------------------------------
    if state_id == 11 # Estado Memory Shield
      @memorized_skills = []
    end
    #--------------------------------------------------------------------------
  end
end

69. Fire Aura
Estado que fija un mínimo de daño. Si le causan daño inferior a ese, éste no le afecta. En cambio si le causan daño superior, le afecta y quita el estado.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 69. Fire Aura
#------------------------------------------------------------------------------
# Estado que fija un mínimo de daño. Si le causan daño inferior a ese, éste no
# le afecta. En cambio si le causan daño superior, le afecta y quita el estado.
# Nota: Normalmente el estado Muerte quita todos los estados pero éste
# debe dejarlo activado
#==============================================================================

class Game_Battler
  unless $@
    alias fire_aura_attack attack_effect
    alias fire_aura_skill  skill_effect
  end

  def attack_effect(attacker)
    effective = fire_aura_attack(attacker)
    fire_aura_effect if effective and self.damage.to_i > 0
    return effective
  end
  
  def skill_effect(user, skill)
    effective = fire_aura_skill(user, skill)
    fire_aura_effect if effective and self.damage.to_i > 0
    return effective
  end
  
  def fire_aura_effect
    #--------------------------------------------------------------------------
    # Efecto del estado Fire Aura
    #--------------------------------------------------------------------------
    if self.state?(15)
      damage_min = 100 # Daño mínimo
      if self.damage < damage_min
        self.hp += self.damage
        self.critical = false
        self.damage = "Miss"
      else
        self.remove_state(15)
      end
    end
  end
end

70. Undead
A ciertos aliados o enemigos las habilidades curativas les dañan.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 70. Undead
#------------------------------------------------------------------------------
# A ciertos aliados o enemigos las habilidades curativas les dañan.
# Nota: Si se usa con el script Advanced Scope se puede definir que también se
# puedan seleccionar enemigos para habilidades curativas incluyendo como
# restricción que éstos sean de tipo Undead.
#==============================================================================

class Game_Battler
 
  # ID de los actores No-Muertos
  UNDEAD_ACTORS = [1]
 
  # ID de los enemigos No-Muertos
  UNDEAD_ENEMIES = [6, 12, 13, 18]
 
  alias undead_skill_effect skill_effect unless $@
  def skill_effect(user, skill)
    undead = false
    if skill.power < 0
      if self.is_a?(Game_Actor)
        if UNDEAD_ACTORS.include?(self.id)
          skill = skill.clone
          skill.power = -skill.power
        end
      else
        if UNDEAD_ENEMIES.include?(self.id)
          skill = skill.clone
          skill.power = -skill.power
        end
      end
    end
    return undead_skill_effect(user, skill)
  end
end

Cool
avatar
Wecoc
Administrador
Administrador



Créditos 8945

Gracias : 434

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por ICF-Soft el 2017-01-18, 19:35

Menuda colección.
Sin duda servirá para muchos que sigan con el XP. Además de que son ejemplos que pueden ayudar a aprender algo de ruby.
avatar
ICF-Soft
Novato
Novato

0/3

Créditos 152

Gracias : 30

http://icfsoft.blogspot.com.es/

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por AsFzKakarotto el 2017-01-25, 16:40

Increíble Script Wecoc se agradese mucho, y que mejor que para el querido XP, Saluditos a todos los del foro, pronto me pondré al día.
avatar
AsFzKakarotto
Iniciado
Iniciado

0/3

Créditos 33

Gracias : 5

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por Alex_Game_Maker el 2017-01-26, 02:45

Me llevo "Black Blood"

Y que te parece:
-Dos o Tres veces mas fuerza y defensa por ¿3 turnos? Pero luego de eso te debilitas.
-Sacrificarse para curar al resto de los aliados.
-Imitar el ultimo skill de un aliado. (Para momentos como: Tierrito quiere luchar! Pepe Ataca con agua! Tierrito pierde 998 ps! A Tierrito solo le queda 2 Ps! Tete no tiene ataques de agua! Tete ataca con fuego! Tierrito perdio solo 1 ps! Tierrito usa terremoto! Tierrito los mato a todos! :v

Son un par de ideas que me parecen interesantes.

Y una duda, ¿funcionan en batallas en mapa? (Blizz-ABS)


Última edición por Alex_Game_Maker el 2017-01-26, 03:01, editado 1 vez
avatar
Alex_Game_Maker
Soñador
Soñador

0/3

Créditos 193

Gracias : 18

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por Producciones The Golden el 2017-01-26, 02:56

Alex: No soy 100tifico pero tomando en cuenta que los scripts trabajan con battlers y no con los personajes solo funciona en el combate.
avatar
Producciones The Golden
Principiante
Principiante

0/3

Créditos 552

Gracias : 47

http://gamerprotown.jimdo.com/

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por Wecoc el 2017-01-26, 03:59

-Dos o Tres veces mas fuerza y defensa por ¿3 turnos? Pero luego de eso te debilitas.
En otras palabras, un estado que incrementa parámetros mientras éste dura.
Esa opción ya viene dada por defecto en la Base de Datos.

-Sacrificarse para curar al resto de los aliados.
Curarlos del todo supondría problemas (¿y si estaban todos a punto de morir?) así que lo suyo sería curarles la cantidad de HP que éste tenía.
Eso es una modificación simple del que ya puse llamado Wish, pero matando del todo al que la usa y afectando a todos los aliados vivos.

-Imitar el ultimo skill de un aliado.
Bueno, esa es más interesante, pero requiere un script con modificaciones más extensas.
Escojes el aliado al que le copias la habilidad y luego escojes al enemigo al que aplicarla, esa doble selección nunca ocurre por defecto y creo que hay que reestructurar algo la batalla para hacerla posible.
¿Además, qué pasa si el actor que seleccionas aún no usó ninguna skill en batalla? ¿Qué pasa si intentas seleccionar al mismo usuario de la skill? Habría que usar mi script Advanced Scopes con alguna restricción avanzada para poder evitar todos esos problemas.

¿funcionan en batallas en mapa?
Ya dije antes que la mayoría no sirven en mapa. Lo expliqué hace un par de posts.
avatar
Wecoc
Administrador
Administrador



Créditos 8945

Gracias : 434

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por 4ngel el 2017-01-26, 22:26

He visto algunos bastante interesantes, tengo que mirarmelo con calma, seguro que hay más de uno al que puedo darle uso rolleyes

También tengo que decir que esta "colección" es de los mejores aportes que he visto por los foros del maker en mucho tiempo.

Un saludo
avatar
4ngel
Principiante
Principiante

0/3

Créditos 123

Gracias : 17

http://xhystr.com

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por Wecoc el 2017-02-26, 19:32

Subo otra tanda con diez pequeños scripts.

71. Persistent States
Estado que dura varias batallas.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 71. Persistent States
#------------------------------------------------------------------------------
# Estado que dura varias batallas.
# Nota: El número de batallas se define con el número de turnos, de hecho
# funciona exactamente como los turnos de estado solo que solo se mira al
# terminar batalla
#==============================================================================

# IDs de los estados que duran varias batallas
PERSISTENT_STATES = [18, 19]

class Game_Battler
  def remove_states_auto
    for i in @states_turn.keys.clone
      next if PERSISTENT_STATES.include?(i)
      if @states_turn[i] > 0
        @states_turn[i] -= 1
      elsif rand(100) < $data_states[i].auto_release_prob
        remove_state(i)
      end
    end
  end
  def remove_states_auto_battle
    for i in @states_turn.keys.clone
      next if !PERSISTENT_STATES.include?(i)
      if @states_turn[i] > 0
        @states_turn[i] -= 1
      elsif rand(100) < $data_states[i].auto_release_prob
        remove_state(i)
      end
    end
  end
end

class Scene_Battle
  alias persistent_end battle_end unless $@
  def battle_end(result)
    for actor in $game_party.actors
      actor.remove_states_auto_battle
    end
    persistent_end(result)
  end
end

72. Atonement
Habilidad que aplica un Estado alterado a un aliado. Cuando el usuario de ésta usa una habilidad ofensiva, el afectado por ese estado es curado un 40% del daño causado por ésta.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 72. Atonement
#------------------------------------------------------------------------------
# Habilidad que aplica un Estado alterado a un aliado.
# Cuando el usuario de ésta usa una habilidad ofensiva, el afectado por ese
# estado es curado un 40% del daño causado por ésta.
# Nota: Es una modificación del script Mending de ésta colección
#==============================================================================

class Game_Battler
  unless $@
    alias atonement_ini    initialize
    alias atonement_skill  skill_effect
    alias aton_heal_skill  skill_effect
    alias atonement_remove remove_state
    alias atonement_dead  add_state
  end
 
  attr_accessor :atonement_target
 
  def initialize
    atonement_ini
    @atonement_target = nil
  end
 
  def skill_effect(user, skill)
    #--------------------------------------------------------------------------
    # Efecto de la habilidad Atonement
    #--------------------------------------------------------------------------
    if skill.id == 15 # ID de la habilidad Atonement
      hit = skill.hit
      hit_result = (rand(100) < hit)
      hit_result = false if self.id == user.id
      if hit_result == true
        user.add_state(3) # Estado Atonement
        user.atonement_target = self
        return true
      end
    end
    #--------------------------------------------------------------------------
    atonement_skill(user, skill)
  end
 
  def skill_effect(user, skill)
    effective = aton_heal_skill(user, skill)
    if effective == true && self.damage.to_i >= 0
      if user.atonement_target != nil && user.atonement_target.exist?
        #----------------------------------------------------------------------
        # Aplicar fórmula de curación
        #----------------------------------------------------------------------
        hp_cure = self.damage * 40 / 100
        if defined?(BLACK_BLOOD_ID) != nil
          if self.state?(BLACK_BLOOD_ID)
            hp_cure = -hp_cure
          end
        end
        user.atonement_target.hp += hp_cure
        user.atonement_target.damage = -hp_cure
        user.atonement_target.damage_pop = true
        #----------------------------------------------------------------------
      end
    end
    return effective
  end
 
  def remove_state(state_id, force=false)
    atonement_remove(state_id, force)
    if state_id == 3 # Estado Atonement
      if self.is_a?(Game_Actor)
        members = $game_party.actors.clone
      else
        members = $game_troop.enemies.clone
      end
      members.delete(self)
      for target in members
        if target.atonement_target != nil && target.atonement_target == self
          target.atonement_target = nil
        end
      end
    end
  end
 
  def add_state(state_id, force=false)
    atonement_dead(state_id, force)
    if state_id == 1 # ID estado Muerte
      if @atonement_target != nil
        @atonement_target.remove_state(3) # Estado Atonement
        @atonement_target = nil
      end
    end
  end
end

73. Ally Protect
Skill con la que el battler selecciona a un aliado de modo que lo protege, si el aliado es golpeado el otro recibirá el golpe por él.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 73. Ally Protect
#------------------------------------------------------------------------------
# Skill con la que el battler selecciona a un aliado de modo que lo protege,
# si el aliado es golpeado el personaje recibirá el golpe por él.
#==============================================================================

class Game_Battler
  unless $@
    alias protect_ini    initialize
    alias protect_skill  skill_effect
    alias protect_remove remove_state
    alias protect_dead  add_state
  end
 
  attr_accessor :protect_target
 
  def initialize
    protect_ini
    @protect_target = nil
  end
 
  def skill_effect(user, skill)
    #--------------------------------------------------------------------------
    # Efecto de la habilidad
    #--------------------------------------------------------------------------
    if skill.id == 15 # ID de la habilidad
      hit = skill.hit
      hit_result = (rand(100) < hit)
      hit_result = false if self.id == user.id
      if hit_result == true
        user.add_state(3) # Estado Ally Protect
        user.protect_target = self
        return true
      end
    end
    #--------------------------------------------------------------------------
    protect_skill(user, skill)
  end
 
  def remove_state(state_id, force=false)
    protect_remove(state_id, force)
    if state_id == 3 # Estado Ally Protect
      if self.is_a?(Game_Actor)
        members = $game_party.actors.clone
      else
        members = $game_troop.enemies.clone
      end
      members.delete(self)
      for target in members
        if target.protect_target != nil && target.protect_target == self
          target.protect_target = nil
        end
      end
    end
  end
   
  def add_state(state_id, force=false)
    protect_dead(state_id, force)
    if state_id == 1 # ID estado Muerte
      if @protect_target != nil
        @protect_target.remove_state(3) # ID del estado Ally Protect
        @protect_target = nil
      end
    end
  end
end

class Game_Battler
  unless $@
    alias protect_attack_effect attack_effect
    alias protect_skill_effect  skill_effect
  end

  def attack_effect(attacker)
    if self.is_a?(Game_Actor)
      members = $game_party.actors.clone
    else
      members = $game_troop.enemies.clone
    end
    members.delete(self)
    for target in members
      if target.protect_target != nil && target.protect_target == self
        target.attack_effect(attacker)
        return
      end
    end
    protect_attack_effect(attacker)
  end
 
  def skill_effect(user, skill)
    if skill.power > 0 # Solo afecta a skills ofensivas
      if self.is_a?(Game_Actor)
        members = $game_party.actors.clone
      else
        members = $game_troop.enemies.clone
      end
      members.delete(self)
      for target in members
        if target.protect_target != nil && target.protect_target == self
          target.skill_effect(user, skill)
          return
        end
      end
    end
    protect_skill_effect(user, skill)
  end
end

74. Heat
Habilidades de fuego que si las aplicas a un enemigo de fuego, se cura en vez de dañarse (hace el mismo daño pero negativo). Si el HP supera el máximo, incrementa el HP máximo.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 74. Heat
#------------------------------------------------------------------------------
# Habilidades de fuego que si las aplicas a un enemigo de fuego, se cura
# en vez de dañarse (hace el mismo daño pero negativo). Si el HP supera el
# máximo, incrementa el HP máximo.
#==============================================================================

class Game_Battler
 
  attr_accessor :heat_points
 
  unless $@
    alias heat_ini  initialize
    alias heat_skill skill_effect
  end
 
  def initialize
    heat_ini
    @heat_points = 0
  end
 
  # ID Actor => IDs habilidades que le causa Heat
  HEAT_ACTORS = {}
  HEAT_ACTORS.default = [] # No cambiar ésto
 
  # ID Enemigo => IDs habilidades que le causa Heat
  HEAT_ENEMIES = {1 => [3, 4], 2 => [3, 4]}
  HEAT_ENEMIES.default = [] # No cambiar ésto
 
  def skill_effect(user, skill)
    if self.is_a?(Game_Actor)
      heat_mode = HEAT_ACTORS[self.id].include?(skill.id)
    else
      heat_mode = HEAT_ENEMIES[self.id].include?(skill.id)
    end
    if heat_mode == true
      # ----- Fórmula de "daño" que se aplicará para curar al enemigo --------
      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
      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)
      damage = power * rate / 20
      damage *= elements_correct(skill.element_set)
      damage /= 100
      if skill.variance > 0 and damage.abs > 0
        amp = [damage.abs * skill.variance / 100, 1].max
        damage += rand(amp+1) + rand(amp+1) - amp
      end
      # ----- Aplicar curación partiendo del daño calculado ------------------
      if damage > 0
        if (damage + self.hp) > self.maxhp
          self.maxhp = (damage + self.hp)
        end
        self.hp += damage
        self.damage = -damage
        self.damage_pop = true
        @heat_points += damage
      else
        self.damage = "Miss"
      end
      # ----------------------------------------------------------------------
      return true
    end
    heat_skill(user, skill)
  end
end

75. Overheat
Si el efecto curado con Heat llega a un valor alto, el enemigo no puede soportar tal cantidad de energía y explota (muere y hace daño a los otros enemigos)
Nota: Requiere el script Heat de ésta colección

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 75. Overheat
#------------------------------------------------------------------------------
# Si el efecto curado con Heat llega a un valor alto, el enemigo no puede
# soportar tal cantidad de energía y explota
# (muere y hace daño a los otros enemigos)
# Nota: Requiere el script Heat de ésta colección
#==============================================================================

class Game_Battler
  alias overheat_skill skill_effect unless $@
  def skill_effect(user, skill)
    if self.is_a?(Game_Actor)
      heat_mode = HEAT_ACTORS[self.id].include?(skill.id)
    else
      heat_mode = HEAT_ENEMIES[self.id].include?(skill.id)
    end
    effective = overheat_skill(user, skill)
    if heat_mode == true
      @heat_points > 500 # Valor máximo curado a partir del cual explota
      if self.is_a?(Game_Actor)
        targets = $game_party.actors.clone
      else
        targets = $game_troop.enemies.clone
      end
      targets.delete_if {|target| !target.exist?}
      for target in targets
        target.overheat_effect(self) # ID de la skill Overheat
      end
      return true
    end
    return effective
  end
 
  def overheat_effect(user)
    # Aplicar efecto "explosión" al que tiene Overheat
    if !user.dead?
      user.animation_id = 50  # Animación de explosión
      user.add_state(1)      # El que explota muere (Estado Muerte)
    end
    # Aplicar daño a los demás aliados
    return if self == user
    damage = self.maxhp / 4
    self.hp -= damage
    self.damage = damage
    self.damage_pop = true
  end
end

Los scripts del 76 al 80 han sido retirados por un error de foroactivo relacionado con los posts muy largos que contienen varios spoilers y códigos.
Éstos han sido añadidos en otro post más adelante, en la siguiente página, por lo que quedarán desordenados en el topic pero siguen estando todos.


Última edición por Wecoc el 2017-05-08, 16:21, editado 1 vez
avatar
Wecoc
Administrador
Administrador



Créditos 8945

Gracias : 434

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por BlazeCrimson el 2017-02-26, 19:46

¡Otro gran aporte, muchos son muy interesantes!
Especialmente "71. Persistent States", será determinante para el sistema de comida que estamos desarollando. ¡Gracias!

_________________
Image and video hosting by TinyPic
avatar
BlazeCrimson
Analista
Analista

0/3

Créditos 1109

Gracias : 107

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por Wecoc el 2017-04-04, 16:40

He visto por la red varios pedidos de éste tipo de add-ons de batalla y algunos se pueden hacer con alguno de los scripts ya posteados, a veces es cuestión de cambiarlo un poco así que voy a comentar alguno.

- Death Nova también se puede usar para añadir un estado positivo a los aliados cuando quien lo tiene se muere. Ésto sería por lo tanto una versión un poco distinta del efecto Death Allies, si el nuevo estado es Furia.

- Clearing Spell se puede editar fácilmente para curar a un aliado en vez de atacar: Habilidad que gasta todo el SP y lo convierte en curación al aliado multiplicada por dos. Solo hay que cambiar el target de la habilidad por un aliado y en la fórmula de cálculo de daño hacer que éste sea negativa (por lo tanto cure). Solo recomiendo usar el script Advanced Scope para impedir aplicarla a uno mismo.

- Arcane Curse puede usarse para hacer una habilidad que haga justo lo contrario; aumentar el número de turnos de un estado en vez de bajarlo.

- Auto Potion, usar poción cuando el HP es bajo, puede usarse sin estado es decir como una característica por defecto. Aún así recomiendo usar una variable de $game_system que active o desactive esa función. En éste caso el script cambia un poco más así que lo he editado yo mismo.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 39. Auto Potion (Game System Version)
#------------------------------------------------------------------------------
# Cuando atacan a un actor y tiene poca vida usa una poción del inventario
# (la más pequeña que haya de la lista de posibles) para curarse.
#------------------------------------------------------------------------------
# Nota: Para activarlo/desactivarlo:
#   $game_system.auto_potion_mode = true/false
#==============================================================================

class Game_System
  attr_accessor :auto_potion_mode
  alias auto_potion_ini initialize unless $@
  def initialize
    auto_potion_ini
    @auto_potion_mode = true
  end
end

class Game_Battler
  # ID de las pociones ordenadas de más prioridad a menos
  AUTO_POTIONS = [1, 2, 3]
end

class Game_Actor < Game_Battler
  unless $@
    alias auto_potion_attack attack_effect
    alias auto_potion_skill  skill_effect
    alias auto_potion_item   item_effect
  end
  
  def attack_effect(attacker)
    effective = auto_potion_attack(attacker)
    auto_potion_effect
    return effective
  end
  
  def skill_effect(user, skill)
    effective = auto_potion_skill(user, skill)
    auto_potion_effect
    return effective
  end
  
  def item_effect(item)
    effective = auto_potion_item(item)
    if !AUTO_POTIONS.include?(item.id)
      auto_potion_effect
    end
    return effective
  end
  
  def auto_potion_effect
    if $game_system.auto_potion_mode == true
      if !self.dead? && self.hp <= (self.maxhp * 15 / 100)
        for i in AUTO_POTIONS
          if $game_party.item_number(i) > 0
            item_effect($data_items[i])
            $game_party.lose_item(i, 1)
            break
          end
        end
      end
    end
  end
end

- Overkill Bonus se puede editar un poco de modo que si una skill mata al target el damage que sobra se reparta entre los otros miembros del grupo enemigo. Otras modificaciones similares se podrían aplicar fácilmente (como usarlo para curar a tus aliados, o para subir tu agilidad...), es cuestión de usar el valor de bonus como una variable para hacer el efecto posterior.
avatar
Wecoc
Administrador
Administrador



Créditos 8945

Gracias : 434

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por plergoth el 2017-04-08, 00:19

Buenas, cuando he visto todo esto me he maravillado de verdad, había cosas que no era capaz de hacer y buscaba desde hace tiempo (ejem... hacer daño al zombi del grupo usando curas) y alguno más que me hacía gracia, aunque como soy un ceporro con los scripts hay alguno que no me he atrevido a usar, por si acaso.

--------------

He estado probando algunos más y he de informarte de un pequeño bug sobre el script de Templar faith, aunque es un poco raro, la verdad. El caso es que cuando el grupo está herido y los curas con un hechizo los puntos de vida no se regeneran, como si no pudieses curarlos, entonces volví atrás y vi que se habían curado  de la forma correcta, es decir que en el momento en que los curas parece que no los curas, pero en realidad sí, no sé si me explico, es como si no se refrescara al momento y solo lo hiciera al volver atrás.

Edita Wecoc: Dos posts han sido juntados y he reordenado un poco el topic debido a un fallo interno de Foroactivo.
avatar
plergoth
Novato
Novato

0/3

Créditos 158

Gracias : 8

Volver arriba Ir abajo

RPG Maker XP Re: [XP] Colección de Tips & Tricks de Wecoc

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Página 1 de 2. 1, 2  Siguiente

Ver el tema anterior Ver el tema siguiente Volver arriba


 :: RPG Maker :: Scripts

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