Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

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

Página 3 de 3. Precedente  1, 2, 3

Ver el tema anterior Ver el tema siguiente Ir abajo

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

Mensaje por Wecoc el 2017-10-15, 00:12

Actualizo para que queden bien ordenados aquí algunos scripts de este tipo que he puesto en posts a parte.

E4. Autocure Armor
Armadura que cura el HP del personaje cada n turnos.
Link al post: Armadura que cure al personaje cada X tiempo

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# E4. Autocure Armor
#------------------------------------------------------------------------------
# Armadura que cura el HP del personaje cada n turnos
#==============================================================================

class Scene_Battle
  alias autocure_armor_p4 start_phase4 unless $@
  def start_phase4
    autocure_armor_p4
    #-------------------------------------------------------------------------
    # La siguiente línea indica que solo ocurrirá cada 3 turnos.
    # Quítala para que ocurre a cada turno, o bien cambia el 3 por el número
    # de turnos que quieras
    #return if $game_temp.battle_turn % 3 != 0
    #-------------------------------------------------------------------------
    for i in 0...$game_party.actors.size
      actor = $game_party.actors[i]
      next if !actor.exist? or actor.dead? # Abortar si el personaje está muerto
      if actor.armor3_id == 17 # ID de la armadura autocure
        #---------------------------------------------------------------------
        # Aquí se aplica el efecto si el personaje tiene equipada esa armadura
        d = actor.maxhp - actor.hp
        actor.hp = actor.maxhp
        actor.damage = -d
        actor.damage_pop = true
        @status_window.refresh
        #---------------------------------------------------------------------
      end
    end
  end
end

E5. Pain Bonus
Estado que hace que cuando te atacan luego tu ataque sea más fuerte.
Link al post: Pain damage

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

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

E6. Critical Perfect
1) Permite modificar el parámetro critical manualmente de modo que puedas hacer un estado con el que siempre haces crítico, uno que siempre te hacen crítico, uno que nunca haces crítico o uno que nunca te hacen crítico.
2) Permite modificar el parámetro guarding manualmente de modo que puedas hacer un estado con el que siempre estás en modo defensa aunque hayas atacado, o uno en el que aunque asignes que te defiendes no entres en modo defensa.
Link: Aumentar los críticos que recibe un personaje

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# E6. Perfect Critical
#------------------------------------------------------------------------------
# * Perfect Critical
# Estado que hace que siempre hagas daño crítico (en ataques físicos)
#------------------------------------------------------------------------------
# * Alternativa: Critical Spot (también llamado "Feel Like Wecoc")
# Estado que hace que siempre recibas daño crítico (en ataques físicos)
#------------------------------------------------------------------------------
# Nota: Jugando con la nueva variable critical_flag también se pueden hacer
# estados que hagan que nunca hagas crítico o nunca te hagan crítico.
# Algo parecido con la nueva variable guarding_flag que define si se está
# defendiendo; ahora puedes hacer estados o condiciones que la modifiquen.
#==============================================================================

class Game_Battler
  
  PERFECT_CRITICAL = 11 # ID del estado Perfect Critical
  CRITICAL_SPOT    = 12 # ID del estado Critical Spot

  def attack_effect(attacker)
    self.critical = false
    hit_result = (rand(100) < attacker.hit)
    if hit_result == true
      atk = [attacker.atk - self.pdef / 2, 0].max
      self.damage = atk * (20 + attacker.str) / 20
      self.damage *= elements_correct(attacker.element_set)
      self.damage /= 100
      if self.damage > 0
        #----------------------------------------------------------------------
        critical_flag = false
        guarding_flag = false
        # Probabilidad de crítico por defecto
        critical_flag = true if rand(100) < 4 * attacker.dex / self.agi
        # Efecto Perfect Critical (quitar línea para desactivarlo)
        critical_flag = true if attacker.state?(PERFECT_CRITICAL)
        # Efecto Critical Spot (quitar línea para desactivarlo)
        critical_flag = true if self.state?(CRITICAL_SPOT)
        # Añadir aquí otras modificaciones de critical_flag
        if critical_flag
          self.damage *= 2
          self.critical = true
        end
        # Efecto defensa por defecto
        guarding_flag = self.guarding?
        # Añadir aquí otras modificaciones de guarding_flag
        if guarding_flag
          self.damage /= 2
        end
        #----------------------------------------------------------------------
      end
      if self.damage.abs > 0
        amp = [self.damage.abs * 15 / 100, 1].max
        self.damage += rand(amp+1) + rand(amp+1) - amp
      end
      eva = 8 * self.agi / attacker.dex + self.eva
      hit = self.damage < 0 ? 100 : 100 - eva
      hit = self.cant_evade? ? 100 : hit
      hit_result = (rand(100) < hit)
    end
    if hit_result == true
      remove_states_shock
      self.hp -= self.damage
      @state_changed = false
      states_plus(attacker.plus_state_set)
      states_minus(attacker.minus_state_set)
    else
      self.damage = "Miss"
      self.critical = false
    end
    return true
  end
end

Cool

Edit: Pongo una variación del Second Chance que no se quita directamente. Es decir, mientras el estado dure el HP mínimo de ese battler es 1.

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# 11. Second Chance (*)
#------------------------------------------------------------------------------
# Si matan al actor pero tiene el estado Second Change éste revive con HP 1
# En esta versión del script el estado no se quita solo al revivir
# 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
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
avatar
Wecoc
Administrador
Administrador



Créditos 12205

Gracias : 632

Volver arriba Ir abajo

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

Mensaje por Wecoc el 2017-11-21, 18:08

Aquí sigo. Aporto otro que es un poco más difícil de configurar, para éste se requiere más nivel de script porque no es solo cambiar algunas ID o valores como en la mayoría que puse, en este caso son condiciones enteras las que hay que controlar.

E7. Victory Items
Items que se gastan directamente al ganar la batalla.
Ejemplo usado: Pociones que se gastan en actores con HP mínimo al 25%

Spoiler:
Código:
#==============================================================================
# ** [XP] Wecoc's Tips & Tricks Battle Collection
#------------------------------------------------------------------------------
# E7. Victory Items
#------------------------------------------------------------------------------
# Items que se gastan directamente al ganar la batalla.
# Ejemplo usado: Pociones que se gastan en actores con HP mínimo al 25%
#==============================================================================

class Scene_Battle
  alias victory_items_up5 update_phase5 unless $@
  def update_phase5
    victory_items_up5
    # Inicio del proceso de objetos de victoria
    if @phase5_wait_count == 50
      apply_victory_items
    end
    # Final del proceso de objetos de victoria
    if @phase5_wait_count == 20 && @help_window.visible == true
      @help_window.visible = false
    end
  end
 
  def apply_victory_items
    items = $game_party.instance_eval("@items")
    item_array = []
    for k in items.keys
      items[k].times { item_array.push(k) }
    end
    for i in item_array
      item = $data_items[i]
      #----------------------------------------------------------------------
      # Aquí se añaden los items que se gastan al terminar batalla
      # Pongo un ejemplo a continuación
      #----------------------------------------------------------------------
      if item.id == 1 # Poción normal
        # Condición para usarla: HP menor al 25%
        if $game_party.actors.any? {|actor| actor.hp <= actor.maxhp * 25 / 100}
          @item = item
          # Selección del target: HP mínimo
          target = $game_party.actors.sort {|a,b| a.hp - b.hp}[0]
          @target_battlers = [target]
          # Aplicación del efecto
          apply_victory_item_effect
          $game_party.refresh
        end
      end
      #----------------------------------------------------------------------
    end
    @status_window.refresh
  end
 
  def apply_victory_item_effect
    if @item.consumable
      $game_party.lose_item(@item.id, 1)
    end
    @help_window.set_text(@item.name, 1)
    @common_event_id = @item.common_event_id
    for target in @target_battlers
      target.item_effect(@item)
      target.animation_id = @item.animation2_id
    end
    if @common_event_id > 0
      common_event = $data_common_events[@common_event_id]
      $game_system.battle_interpreter.setup(common_event.list, 0)
    end
  end
end
avatar
Wecoc
Administrador
Administrador



Créditos 12205

Gracias : 632

Volver arriba Ir abajo

Página 3 de 3. Precedente  1, 2, 3

Ver el tema anterior Ver el tema siguiente Volver arriba


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