Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.

[XP] Stat-based Defense (con opción de estado oculto)

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] Stat-based Defense (con opción de estado oculto)

Mensaje por Wecoc el 2018-10-18, 23:52

Este pequeño script hace que la opción "Defensa" añada un estado, lo que lo hace un poco más controlable.
Además el script lo pone más fácil si se quiere aplicar una animación cuando el estado aparece o desaparece en el battler.

Estado oculto:
Puede que os interese que el estado en sí no se muestre en la ventana aunque el actor o enemigo lo tenga. En ese caso es cuestión de ocultarlo. No sé si ya puse este script en otra parte pero en todo caso es muy simple, solo tenéis que añadirlo a la global HIDDEN_STATES

Código:
#==============================================================================
# ** [XP] Hidden States
#==============================================================================

module States_Addon
  # Define aquí los estados que no se mostrarán en la ventana
  HIDDEN_STATES = [17]
end

class Window_Base < Window
  def make_battler_state_text(battler, width, need_normal)
    brackets_width = self.contents.text_size("[]").width
    text = ""
    for i in battler.states
      next if States_Addon::HIDDEN_STATES.include?(i) ##
      if $data_states[i].rating >= 1
        if text == ""
          text = $data_states[i].name
        else
          new_text = text + "/" + $data_states[i].name
          text_width = self.contents.text_size(new_text).width
          if text_width > width - brackets_width
            break
          end
          text = new_text
        end
      end
    end
    if text == ""
      if need_normal
        text = "[Normal]"
      end
    else
      text = "[" + text + "]"
    end
    return text
  end
end

Solo añade una línea que marqué con ##, por si usáis un método :make_battler_state_text personalizado.

Aquí tenéis el script, la configuración es al inicio del todo. Veréis que es de lo más simple y compatible con prácticamente todo.
Ponedlo encima de main. No requiere créditos.

Código:
#==============================================================================
# ** [XP] Stat-based defense
#==============================================================================

module States_Addon
  GUARDING_STATE = 17       # ID del estado "Defensa"
  GUARDING_INSTANT = true   # Empezar estado al empezar turno
end

class Game_Battler
  # Quitar efecto Guarding por defecto
  def guarding?
    return false
  end
end

class Scene_Battle
  # Añadir estado Guarding
  alias guard_action_result make_basic_action_result unless $@
  def make_basic_action_result
    guard_action_result
    unless States_Addon::GUARDING_INSTANT
      if @active_battler.current_action.basic == 1
        @active_battler.add_state(States_Addon::GUARDING_STATE)
      end
    end
  end
  alias guard_action_instant start_phase4 unless $@
  def start_phase4
    guard_action_instant
    if States_Addon::GUARDING_INSTANT
      for battler in $game_party.actors + $game_troop.enemies
        if battler.current_action.basic == 1
          battler.add_state(States_Addon::GUARDING_STATE)
        end
      end
    end
  end
  # Quitar estado Guarding
  alias guard_action_remove start_phase2 unless $@
  def start_phase2
    guard_action_remove
    for battler in $game_party.actors + $game_troop.enemies
      battler.remove_state(States_Addon::GUARDING_STATE)
    end
    @status_window.refresh
  end
end

Configuración básica

Tenéis la opción de seguir dividiendo el valor por dos como por defecto, en ese caso solo tenéis que borrar esta parte:

[line]class Game_Battler
 # Quitar efecto Guarding por defecto
 def guarding?
   return false
 end
end[/line]

La fórmula de daño es un poco compleja así que no hay un valor exacto al que poner a PDEF y MDEF como para recrear el efecto por defecto desde el estado (de ahí la posible ventaja de mantener la opción de dividir por defecto). Aún así tras unos testeos llegué a la conclusión que un valor de 115% en ambos da un resultado bastante similar al predeterminado.



También podéis hacer que el efecto se base en la evasión (es decir harán el mismo daño al battler pero fallarán más a menudo) o incluso a otros parámetros como destreza o agilidad.

Configuración avanzada

Si queréis hacer que al defenderse el battler haga una animación, buscad esta línea:
@active_battler.add_state(States_Addon::GUARDING_STATE)
Y justo antes añadís esta:
@active_battler.animation_id = 1
También tenéis que buscar esta línea:
battler.add_state(States_Addon::GUARDING_STATE)
Y justo antes añadir esta:
battler.animation_id = 1
En ambos casos el 1 debe ser cambiado por la ID de la animación.

Si queréis hacer que al dejar de defenderse el battler haga una animación, buscad esta línea:
battler.remove_state(States_Addon::GUARDING_STATE)
Y justo antes añadís esto:
[line]      if battler.state?(States_Addon::GUARDING_STATE)
       battler.animation_id = 1
     end[/line]
Nuevamente el 1 debe ser cambiado por la ID de la animación.

Espero que os ayude este pequeño añadido.
avatar
Wecoc
Administrador
Administrador



Créditos 12310

Gracias : 654

Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


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