Mundo Maker
¡Bienvenid@ a Mundo Maker!

¿Quieres aprender todo sobre el RPG Maker?



Regístrate y forma parte de Mundo Maker.
Conectarse

Recuperar mi contraseña

Temas importantes
----------------------------------------
Páginas con recursos RPG Maker
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
----------------------------------------
Afiliados
Estadísticas
Tenemos 3761 miembros registrados.
El último usuario registrado es Abraham 331.

Nuestros miembros han publicado un total de 85756 mensajes en 12212 argumentos.

[XP] Skill Cooldowns

Ver el tema anterior Ver el tema siguiente Ir abajo

RPG Maker XP [XP] Skill Cooldowns

Mensaje por Wecoc el 2017-01-19, 21:47

Hoy os pongo otro script que requiere modificación y configuración por vuestra parte, pero ésta vez fácil de usar si se siguen las notas del script, pues al fin y al cabo no es un sistema nada complejo. Para quien no lo sepa, las Cooldowns son una propiedad no definida por defecto de las skills, que hacen que tras usar una skill el actor o enemigo no pueda volver a usarla durante unos turnos. Eso se puede expandir y controlar mucho más, pero básicamente es eso.

Si sabéis un poco de script, usando ésta base podréis hacer todo lo que cito a continuación sin demasiada dificultad:

- Skills que no se pueden usar durante unos turnos tras usarlas (se les añaden Cooldowns).
Notas: 1. Ésto puede ser distinto según el Actor o Enemigo. 2. Esa propiedad solo ocurrirá a ciertas skills, no todas.
- Skills que modifican las Cooldowns de otras skills, tanto del que la realiza como del target.
- Skills que pierden todas las Cooldowns al acabar batalla, contra skills que se quedan igual.
- Skills que solo pierden algunas Cooldowns al acabar batalla.
- Estados alterados que interactúan con el sistema de Cooldowns.
- Cooldowns que se quitan al recibir un golpe (shock) en cierta probabilidad (similar a Estados)
- Cooldowns que se quitan solos tras andar algunos pasos por el mapa (aunque la base para eso es muy rudimentaria)

Nota del autor:
Lo que no añadí es un modo de visualizar las Cooldowns que tiene cada skill, solo se ve si se puede usar o no xDD Al fin y al cabo tampoco ves cuantos turnos le queda a un estado, por ejemplo... El maker suele tenernos a ciegas. No tiene demasiado secreto mostrar eso, pero todo eso ya no sería parte de éste script sinó una modificación más visual del Window_Skill y más específica por proyecto. Puede que haga algún script para mostrar eso más adelante, no sé.

Ponedlo encima de main:
Código:
#==============================================================================
# ** [XP] Skill Cooldowns
#------------------------------------------------------------------------------
# Permite poner Cooldowns a las habilidades
# Autor: Wecoc (no requiere créditos)
#------------------------------------------------------------------------------
# Se puede aplicar tanto a un actor como a un enemigo:
#    $game_party.actors[ID Actor].cooldown(ID Skill)
#    $game_troop.enemies[ID Enemigo].cooldown(ID Skill)
#------------------------------------------------------------------------------
# Puedes obtener, incrementar y bajar Cooldowns fácilmente.
#
# El Cooldown por defecto de cualquier skill es -1, si se le añade luego
# ésta no podrá ser usada hasta que éste vuelva a ser -1.
#
# Se resta 1 Cooldown cada turno automáticamente (-1 es el mínimo), pero puedes
# hacer modificaciones a tu gusto, por ID de Skill, de Actor, según un Estado...
#
# Para ello hay una série de métodos que te harán la vida más fácil:
#    $game_party.actors[ID Actor].cooldown(ID Skill)
#    $game_party.actors[ID Actor].set_cooldown(ID Skill, Valor)
#    $game_party.actors[ID Actor].increase_cooldown(ID Skill, Valor)
#    $game_party.actors[ID Actor].decrease_cooldown(ID Skill, Valor)
#
# A lo largo del script hay consejos para customizar el modo en el que se
# controlan los Cooldown tanto en batalla como en mapa.
#==============================================================================

#==============================================================================
# ** Game_Battler
#==============================================================================

class Game_Battler
 
  unless $@
    alias skill_cooldown_ini    initialize
    alias skill_cooldown_use?  skill_can_use?
    alias skill_cooldown_end    remove_states_battle
    alias skill_cooldown_auto  remove_states_auto
    alias skill_cooldown_shock  remove_states_shock
    alias skill_cooldown_effect skill_effect
  end
 
  # ID de las skills que se les quita el Cooldown tras finalizar la batalla
  COOLDOWN_REMOVE_END = [1, 2, 3]
   
  #--------------------------------------------------------------------------
  # * Initialize
  #--------------------------------------------------------------------------
  def initialize
    skill_cooldown_ini
    @skills_turn = {}
    @skills_turn.default = -1
  end
  #--------------------------------------------------------------------------
  # * Obtener Cooldown
  #--------------------------------------------------------------------------
  def cooldown(skill_id)
    return @skills_turn[skill_id]
  end
  #--------------------------------------------------------------------------
  # * Definir Cooldown
  #--------------------------------------------------------------------------
  def set_cooldown(skill_id, value)
    @skills_turn[skill_id] = value
  end
  #--------------------------------------------------------------------------
  # * Subir Cooldown
  #--------------------------------------------------------------------------
  def increase_cooldown(skill_id, value=1)
    cooldown = @skills_turn[skill_id]
    @skills_turn[skill_id] = cooldown + value
  end
  #--------------------------------------------------------------------------
  # * Quitar Cooldown
  #--------------------------------------------------------------------------
  def decrease_cooldown(skill_id, value=1)
    cooldown = @skills_turn[skill_id]
    @skills_turn[skill_id] = [cooldown - value, -1].max
  end
  #--------------------------------------------------------------------------
  # * Impedir usar una skill si ésta tiene Cooldowns
  #--------------------------------------------------------------------------
  def skill_can_use?(skill_id)
    return false if @skills_turn[skill_id] >= 0
    return skill_cooldown_use?(skill_id)
  end
  #--------------------------------------------------------------------------
  # * Quitar Skill Cooldowns a final de la batalla
  #--------------------------------------------------------------------------
  def remove_states_battle
    skill_cooldown_end
    for i in @skills_turn.keys.clone
      if COOLDOWN_REMOVE_END.include?(i)
        @skills_turn[i] = -1
      end
    end
    #------------------------------------------------------------------------
    # Aquí puedes añadir otras características según el ID de Skill, por ejemplo
    # si quieres que una skill quite 2 cooldowns al acabar batalla pero no
    # todos, puedes poner:
    #------------------------------------------------------------------------
    # self.decrease_cooldown(ID de la skill, Cooldown Retirados)
    #------------------------------------------------------------------------
  end
  #--------------------------------------------------------------------------
  # * Bajar contador de Cooldowns en cada turno
  #--------------------------------------------------------------------------
  def remove_states_auto
    skill_cooldown_auto
    for i in @skills_turn.keys.clone
      self.decrease_cooldown(i, 1)
    end
  end
  #--------------------------------------------------------------------------
  # * Quitar Cooldowns al ser golpeado
  #--------------------------------------------------------------------------
  def remove_states_shock
    skill_cooldown_shock
    #------------------------------------------------------------------------
    # Aquí puedes poner que en algunas skills se les quiten cooldowns al
    # ser golpeado, con cierta probabilidad. Ésta probabilidad va de 0 a 100.
    #------------------------------------------------------------------------
    # if rand(100) < (Probabilidad de Retirar)
    #  self.set_cooldown(ID de la skill, -1)
    # end
    #------------------------------------------------------------------------
  end
  #--------------------------------------------------------------------------
  # * Aplicar skill
  #--------------------------------------------------------------------------
  def skill_effect(user, skill)
    effective = skill_cooldown_effect(user, skill)
    skill_id = skill.id
    #------------------------------------------------------------------------
    # Aquí defines según el ID de Skill cuantos cooldowns obtiene ésta.
    # También puedes hacer modificar cooldowns de otras Skills o incluso
    # alterarle las del atacado por la Skill.
    #------------------------------------------------------------------------
    case skill_id
    when 1 # ID de la Skill
      user.increase_cooldown(1, 3) # (ID de la Skill, Cooldowns aumentados)
    end
    #------------------------------------------------------------------------
    return effective
  end
end

#==============================================================================
# ** Game_Party
#==============================================================================

class Game_Party
 
  # ID de la skill => Número de pasos para quitarle un Cooldown
  COOLDOWN_REMOVE_STEP = {1 => 10, 2 => 20, 3 => 50}
 
  alias skill_cooldown_steps increase_steps unless $@
  #--------------------------------------------------------------------------
  # * Hacer un paso (quitar Countdowns por pasos)
  #--------------------------------------------------------------------------
  def increase_steps
    skill_cooldown_steps
    for i in COOLDOWN_REMOVE_STEP.keys
      if @steps % COOLDOWN_REMOVE_STEP[i] == 0
        for actor in @actors
          actor.decrease_cooldown(i, 1)
        end
      end
    end
  end
end
avatar
Wecoc
Administrador
Administrador



Créditos 9360

Gracias : 516

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.