Partagez
Aller en bas
Yasan
Yasan
Membre

Nombre de messages : 149
Age : 34
Distinction : aucune
Date d'inscription : 18/01/2011

Buff & State Manager par Yanfly Empty Buff & State Manager par Yanfly

le Mer 28 Déc 2011 - 11:40
Buff & State Manager


Auteur : Yanfly

Version du script :1.01

Traducteur : Yasan


Buff & State Manager par Yanfly Bsm-0110


Ce script altère quelques mécanismes basiques, qui gèrent les statuts, buffs et debuffs, et qui ne sont pas ajustables dans RPG Maker VX Ace par défaut, comme ceux qui affectent le nombre de tours que peuvent durer un statut, buff et debuff. On peut aussi ajuster combien de fois un buff (ou un debuff) peut être appliqué à un actor.

Buff & State Manager par Yanfly Bsm-0210


Ce script ramène la possibilité de montrer les tours restants pour les statuts, buffs et debuffs. Cette fonctionnalité peut être désactivée dans le script. Connaître quand un statut, buff ou debutt va se terminer peut faire une grande différence dans la stratégie d'un joueur.


Buff & State Manager par Yanfly Bsm-0310


Ces notetags “traits” peuvent affecter le nombre maximum de fois qu'un buff ou un debuff peut être appliqué. Utilisez ces traits sur les actors, classes, armes, amures, ennemis, et même statuts.

Code:
<max buff stat: +x>
<max buff stat: -x>

Augmenter ou diminuer le nombre maximum de fois qu'un buff peut être utilisé par x. Notez qu'ici, le maximum d'augmentation ici est toujours limité par le module constant MAXIMUM_BUFF_LIMIT. Remplacez "stat" par "MAXHP", "MAXMP", "ATK", "DEF", "MAT", "MDF", "AGI", "LUK", ou "ALL" pour ces stats en particulier.

Code:
<max debuff stat: +x>
<max debuff stat: -x>

Augmenter ou diminuer le nombre maximum de fois qu'un debuff peut être utilisé par x. Notez qu'ici, le maximum d'augmentation ici est toujours limité par le module constant MAXIMUM_BUFF_LIMIT. Remplacez "stat" par "MAXHP", "MAXMP", "ATK", "DEF", "MAT", "MDF", "AGI", "LUK", ou "ALL" pour ces stats en particulier.

Code:
<state x turn: +y>
<state x turn: -y>

Quand le battler est affecté par le statut x, des modificateurs additionnels sont conçus pour gérer le nombre de tours restants au statut x via la valeur y. Les modificateurs ne peuvent pas réduire le nombre de tours en dessous de 0.

Buff & State Manager par Yanfly Bsm-0410


Les utilisateurs avancés peuvent ajuster la formule des buffs et debuffs comme ils le souhaitent. L'une des choses qui m'a irrité était le fait qu'il n'était pas possible originellement de modifier ça. A présent, c'est possible en utilisant un format de formule. Il suffit de l'ajuster dans le script module.

Buff & State Manager par Yanfly Bsm-0510


Quand les status sont réappliqués aux battlers alors qu'ils étaient déjà affectés par eux, choisissez d'ignorer le changement du nombre de tours, de réinitialiser les tours restants ou d'ajouter la valeur des tours restants par défaut à la valeur en cours. Ces notetags s'insèrent dans la notebox des statuts :

Code:
<reapply ignore>

Si le statut est invoqué sur un battler qui était déjà affecté par ce statut le nombre de tours restants ne sera pas réinitialisé et il ne sera pas ajouté
de nombre de tours supplémentaires.

Code:
<reapply reset>

Si le statut est invoqué sur un battler qui était déjà affecté par ce statut, celui-ci sera réinitialisé à la valeur par défaut du nombre de tours durant lesquels le statut commence à s'appliquer normalement.

Code:
<reapply total>

Si le statut est invoqué sur un battler qui était déjà affecté par ce statut, le nombre de tours sera ajouté à valeur actuelle des tours restants. Exemple :
Si Eric est sous effet du statut x qui dure 3 tours (et qui a commencé il y a 2 tours, ce qui fait que la valeur max du statut est 5) et qu'on lui ré-applique le statut, le décompte devient : 3 + 5 = 8 tours restants.


Buff & State Manager par Yanfly Bsm-0610

Skills et objets peuvent à présent directement affecter le nombre de tours restants de statuts, buffs et debuffs pré-existants et appliqués sur une cible.

Code:
<state x turn: +y>
<state x turn: -y>

Quand le battler est affecté par le statut x, des modificateurs additionnels sont conçus pour gérer le nombre de tours restants au statut x via la valeur y. Les modificateurs ne peuvent pas réduire le nombre de tours en dessous de 0.

Code:
<buff stat turn: +x>
<buff stat turn: -x>

S'il y a un buff sur une stat de la cible, ceci va altérer le nombre de tours restants pour ce buff par x tours. Si le nombre restants de tous va en dessous de 0, le buff sera retiré.

Code:
<debuff stat turn: +x>
<debuff stat turn: -x>

S'il y a un debuff sur une stat de la cible, ceci va altérer le nombre de tours restants pour ce debuff par x tours. Si le nombre restants de tous va en dessous de 0, le debuff sera retiré.

_____________________________________________________________________________________________________________________________

Le script =>
Spoiler:
Code:
#==============================================================================
#
# ▼ Yanfly Engine Ace - Buff & State Manager v1.01
# -- Dernière update: 2011.12.28
# -- Niveau: Normal
# -- Requis: n/a
#
#==============================================================================

$imported = {} if $imported.nil?
$imported["YEA-Buff&StateManager"] = true

#==============================================================================
# ▼ Updates
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# 2011.12.28 - Added <state x turn: +y> for actors, classes, weapons, armours,
#              enemies, and states.
# 2011.12.27 - Started Script and Finished.
#
#==============================================================================
# ▼ Introduction
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Ce script altère quelques mécanismes basiques qui gèrent les statuts, buffs
# et debuffs et qui ne sont pas ajustables dans RPG Maker VX Ace par défaut
# comme ceux qui affectent le nombre de tours que peuvent durer un statut, buff 
# et debuff sans affecter quoique ce soit d'autres ou même ajuster combien de 
# fois un buff (ou un debuff) peut être appliqué à un actor.
#
#==============================================================================
# ▼ Instructions
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Pour installer ce script, ouvrez votre éditeur de script et copiez/coller
# ce script dans un emplacement disponible ▼ Materials/素材 mais au dessus de
# ▼ Main. Souvenez vous de sauvegarder.
#
# -----------------------------------------------------------------------------
# Actors Notetags - Ces notetags vont dans la notebox des Actors dans la BDD.
# -----------------------------------------------------------------------------
# <max buff stat: +x>
# <max buff stat: -x>
# Augmenter ou diminuer le nombre maximum de fois qu'un buff peut être utilisé
# par x. Notez qu'ici, le maximum d'augmentation ici est toujours limité par le
# module constant MAXIMUM_BUFF_LIMIT. Remplacez "stat" par "MAXHP", "MAXMP",
# "ATK", "DEF", "MAT", "MDF", "AGI", "LUK", ou "ALL" pour ces stats en
# particulier.
#
# <max debuff stat: +x>
# <max debuff stat: -x>
# Augmenter ou diminuer le nombre maximum de fois qu'un debuff peut être utilisé
# par x. Notez qu'ici, le maximum d'augmentation ici est toujours limité par le
# module constant MAXIMUM_BUFF_LIMIT. Remplacez "stat" par "MAXHP", "MAXMP",
# "ATK", "DEF", "MAT", "MDF", "AGI", "LUK", ou "ALL" pour ces stats en
# particulier.
#
# <state x turn: +y>
# <state x turn: -y>
# Quand le battler est affecté par le statut x, des modificateurs additionels
# sont conçus pour gérer le nombre de tours restants au statut x via la
# valeur  y. Les modificateurs ne peuvent pas réduire le nombre de tours en
# dessous de 0.
#
# -----------------------------------------------------------------------------
# Classes Notetags - Ces notetags vont dans la notebox des Classes dans la BDD.
# -----------------------------------------------------------------------------
# <max buff stat: +x>
# <max buff stat: -x>
# Augmenter ou diminuer le nombre maximum de fois qu'un buff peut être utilisé
# par x. Notez qu'ici, le maximum d'augmentation ici est toujours limité par le
# module constant MAXIMUM_BUFF_LIMIT. Remplacez "stat" par "MAXHP", "MAXMP",
# "ATK", "DEF", "MAT", "MDF", "AGI", "LUK", ou "ALL" pour ces stats en
# particulier.
#
# <max debuff stat: +x>
# <max debuff stat: -x>
# Augmenter ou diminuer le nombre maximum de fois qu'un debuff peut être utilisé
# par x. Notez qu'ici, le maximum d'augmentation ici est toujours limité par le
# module constant MAXIMUM_BUFF_LIMIT. Remplacez "stat" par "MAXHP", "MAXMP",
# "ATK", "DEF", "MAT", "MDF", "AGI", "LUK", ou "ALL" pour ces stats en
# particulier.
#
# <state x turn: +y>
# <state x turn: -y>
# Quand le battler est affecté par le statut x, des modificateurs additionels
# sont conçus pour gérer le nombre de tours restants au statut x via la
# valeur  y. Les modificateurs ne peuvent pas réduire le nombre de tours en
# dessous de 0.
#
# -----------------------------------------------------------------------------
# Skill Notetags - Ces notetags vont dans la notebox des Skills dans la BDD.
# -----------------------------------------------------------------------------
# <state x turn: +y>
# <state x turn: -y>
# Si la cible est affectée par le statut x, ceci va altérer le nombre de tours
# restants pour ce statut par y turns si le statut peut être retiré par un 
# nombre de tours. Si le statut va en dessous de 0 tours, le statut sera retiré.
#
# <buff stat turn: +x>
# <buff stat turn: -x>
# S'il y a un buff sur une stat de la cible, ceci va altérer le nombre de tours
# restants pour ce buff par x tours. Si le nombre restants de tous va en dessous
# de 0, le buff sera retiré.
#
# <debuff stat turn: +x>
# <debuff stat turn: -x>
# S'il y a un debuff sur une stat de la cible, ceci va altérer le nombre de
# tours restants pour ce debuff par x tours. Si le nombre restants de tours va 
# en dessous de 0, le debuff sera retiré.
#
# -----------------------------------------------------------------------------
# Item Notetags - Ces notetags vont dans la notebox des Objets dans la BDD.
# -----------------------------------------------------------------------------
# <state x turn: +y>
# <state x turn: -y>
# Si la cible est affectée par le statut x, ceci va altérer le nombre de tours
# restants pour ce statut par y turns si le statut peut être retiré par un 
# nombre de tours. Si le statut va en dessous de 0 tours, le statut sera retiré.
#
# <buff stat turn: +x>
# <buff stat turn: -x>
# S'il y a un buff sur une stat de la cible, ceci va altérer le nombre de tours
# restants pour ce buff par x tours. Si le nombre restants de tous va en dessous
# de 0, le buff sera retiré.
#
# <debuff stat turn: +x>
# <debuff stat turn: -x>
# S'il y a un debuff sur une stat de la cible, ceci va altérer le nombre de
# tours restants pour ce debuff par x tours. Si le nombre restants de tous va en
# dessous de 0, le debuff sera retiré.
#
# -----------------------------------------------------------------------------
# Weapon Notetags - Ces notetags vont dans la notebox des Armes dans la BDD.
# -----------------------------------------------------------------------------
# <max buff stat: +x>
# <max buff stat: -x>
# Augmenter ou diminuer le nombre maximum de fois qu'un buff peut être utilisé
# par x. Notez qu'ici, le maximum d'augmentation ici est toujours limité par le
# module constant MAXIMUM_BUFF_LIMIT. Remplacez "stat" par "MAXHP", "MAXMP",
# "ATK", "DEF", "MAT", "MDF", "AGI", "LUK", ou "ALL" pour ces stats en
# particulier.
#
# <max debuff stat: +x>
# <max debuff stat: -x>
# Augmenter ou diminuer le nombre maximum de fois qu'un debuff peut être utilisé
# par x. Notez qu'ici, le maximum d'augmentation ici est toujours limité par le
# module constant MAXIMUM_BUFF_LIMIT. Remplacez "stat" par "MAXHP", "MAXMP",
# "ATK", "DEF", "MAT", "MDF", "AGI", "LUK", ou "ALL" pour ces stats en
# particulier.
#
# <state x turn: +y>
# <state x turn: -y>
# Quand le battler est affecté par le statut x, des modificateurs additionels
# sont conçus pour gérer le nombre de tours restants au statut x via la
# valeur  y. Les modificateurs ne peuvent pas réduire le nombre de tours en
# dessous de 0.
#
# -----------------------------------------------------------------------------
# Armour Notetags - Ces notetags vont dans la notebox des Armures dans la BDD.
# -----------------------------------------------------------------------------
# <max buff stat: +x>
# <max buff stat: -x>
# Augmenter ou diminuer le nombre maximum de fois qu'un buff peut être utilisé
# par x. Notez qu'ici, le maximum d'augmentation ici est toujours limité par le
# module constant MAXIMUM_BUFF_LIMIT. Remplacez "stat" par "MAXHP", "MAXMP",
# "ATK", "DEF", "MAT", "MDF", "AGI", "LUK", ou "ALL" pour ces stats en
# particulier.
#
# <max debuff stat: +x>
# <max debuff stat: -x>
# Augmenter ou diminuer le nombre maximum de fois qu'un debuff peut être utilisé
# par x. Notez qu'ici, le maximum d'augmentation ici est toujours limité par le
# module constant MAXIMUM_BUFF_LIMIT. Remplacez "stat" par "MAXHP", "MAXMP",
# "ATK", "DEF", "MAT", "MDF", "AGI", "LUK", ou "ALL" pour ces stats en
# particulier.
#
# <state x turn: +y>
# <state x turn: -y>
# Quand le battler est affecté par le statut x, des modificateurs additionels
# sont conçus pour gérer le nombre de tours restants au statut x via la
# valeur  y. Les modificateurs ne peuvent pas réduire le nombre de tours en
# dessous de 0.
#
# -----------------------------------------------------------------------------
# Enemy Notetags - Ces notetags vont dans la notebox des Ennemis dans la BDD.
# -----------------------------------------------------------------------------
# <max buff stat: +x>
# <max buff stat: -x>
# Augmenter ou diminuer le nombre maximum de fois qu'un buff peut être utilisé
# par x. Notez qu'ici, le maximum d'augmentation ici est toujours limité par le
# module constant MAXIMUM_BUFF_LIMIT. Remplacez "stat" par "MAXHP", "MAXMP",
# "ATK", "DEF", "MAT", "MDF", "AGI", "LUK", ou "ALL" pour ces stats en
# particulier.
#
# <max debuff stat: +x>
# <max debuff stat: -x>
# Augmenter ou diminuer le nombre maximum de fois qu'un debuff peut être utilisé
# par x. Notez qu'ici, le maximum d'augmentation ici est toujours limité par le
# module constant MAXIMUM_BUFF_LIMIT. Remplacez "stat" par "MAXHP", "MAXMP",
# "ATK", "DEF", "MAT", "MDF", "AGI", "LUK", ou "ALL" pour ces stats en
# particulier.
#
# <state x turn: +y>
# <state x turn: -y>
# Quand le battler est affecté par le statut x, des modificateurs additionels
# sont conçus pour gérer le nombre de tours restants au statut x via la
# valeur  y. Les modificateurs ne peuvent pas réduire le nombre de tours en
# dessous de 0.
#
# -----------------------------------------------------------------------------
# State Notetags - Ces notetags vont dans la notebox des Statuts dans la BDD.
# -----------------------------------------------------------------------------
# <max buff stat: +x>
# <max buff stat: -x>
# Augmenter ou diminuer le nombre maximum de fois qu'un buff peut être utilisé
# par x. Notez qu'ici, le maximum d'augmentation ici est toujours limité par le
# module constant MAXIMUM_BUFF_LIMIT. Remplacez "stat" par "MAXHP", "MAXMP",
# "ATK", "DEF", "MAT", "MDF", "AGI", "LUK", ou "ALL" pour ces stats en
# particulier.
#
# <max debuff stat: +x>
# <max debuff stat: -x>
# Augmenter ou diminuer le nombre maximum de fois qu'un debuff peut être utilisé
# par x. Notez qu'ici, le maximum d'augmentation ici est toujours limité par le
# module constant MAXIMUM_BUFF_LIMIT. Remplacez "stat" par "MAXHP", "MAXMP",
# "ATK", "DEF", "MAT", "MDF", "AGI", "LUK", ou "ALL" pour ces stats en
# particulier.
#
# <reapply ignore>
# Si le statut est invoqué sur un battler qui était déjà affecté par ce statut
# le nombre de tours restants ne sera pas réinitialisé et il ne sera pas ajouté 
# de nombre de tours supplémentaires.
#
# <reapply reset>
# Si le statut est invoqué sur un battler qui était déjà affecté par ce statut,
# celui-ci sera réinitialisé à la valeur par défaut du nombre de tours durant
# lesquels le statut commence à s'appliquer normalement.
#
# <reapply total>
# Si le statut est invoqué sur un battler qui était déjà affecté par ce statut,
# le nombre de tours sera ajouté à valeur actuelle des tours restants. Exemple :
# Si Eric est sous effet du statut x qui dure 3 tours (et qui a commencé il y a
# 2 tours, ce qui fait que la valeur max du statut est 5) et qu'on lui
# réapplique le statut, le décompte devient : 3 + 5 = 8 tours restants.
#
# <state x turn: +y>
# <state x turn: -y>
# Quand le battler est affecté par le statut x, des modificateurs additionels
# sont conçus pour gérer le nombre de tours restants au statut x via la
# valeur  y. Les modificateurs ne peuvent pas réduire le nombre de tours en
# dessous de 0.
#
#==============================================================================
# ▼ Compatibilité
# =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Ce script est compatible uniquement avec Rpg Maker VX Ace. Il est hautement
# improbable qu'il puisse fonctionner sur VX sans ajustements.
#==============================================================================

module YEA
  module BUFF_STATE_MANAGER
   
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # - Montrer les tours restants en jeu -
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # Ce paramètre va forcer le jeu à montrer le nombre de tours restants pour
    # un statut dans un combat (si le statut va se retirer de lui même selon un
    # nombre de tours définis).
    # Ajustez les paramètres ci-dessous pour changer la taille de la police
    # et la coordonnées y de l'endroit où le décompte apparaitra.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    SHOW_REMAINING_TURNS = true    # Montre le nombre de tours restants?
    TURNS_REMAINING_SIZE = 18      # Taille de la police
    TURNS_REMAINING_Y    = -4      # Ajustez la position du texte.
   
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # - Buff Paramètres -
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # Ces paramètres ajustent comment les buffs sont joués dans votre jeu et la
    # manière dont ils modifient la valeur d'une stat d'un battler comme le
    # nombre maximum de fois qu'une stat peut être augmentés par un buff et la
    # buff boost formula. Notez que ces maximums s'appliquent à la fois aux buff
    # et debuffs.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    DEFAULT_BUFF_LIMIT = 4    # Nombre de fois par défaut pour un buff
                              # Par défaut: 2
    MAXIMUM_BUFF_LIMIT = 8    # Nombre de fois maximum pour un buff 
                              # Par Défaut: 2
   
    # Ceci est la formule utilisée pour appliquer le taux des buffs et debuffs.
    BUFF_BOOST_FORMULA = "buff_level(param_id) * 0.25 + 1.0"
   
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # - Réappliquer les paramètres -
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    # Ces paramètres ajustent comment les règles s'appliquent aux statuts quand
    # ils sont réappliqués sur un actor avec le même statut encore en activité.
    # Si vous souhaitez avoir un statut spécifique utilisant plusieurs règles,
    # utilisez les notetags pour ajuster les tours à votre sauce.
    #  0 - Ignoré. Paramètre par défaut de VX.
    #  1 - Les tours se réinitialisent à la valeur de base.
    #      Paramètre par défaut de VX Ace.
    #  2 - La valeur par défaut est ajoutée à la valeur des tours actuels.
    #=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
    REAPPLY_STATE_RULES = 1
   
  end # BUFF_STATE_MANAGER
end # YEA

#==============================================================================
# ▼ Editer quoique ce soit à partir de ce point peut potentiellement causer des
# dommages à votre ordinateur, incontinence, explosion de votre tête, coma, mort
# et/ou mauvaise haleine donc n'éditez qu'à vos risques et périls.
#==============================================================================

module YEA
  module REGEXP
  module BASEITEM
   
    MAX_BUFF = /<(?:MAX_BUFF|max buff)[ ](.*):[ ]([\+\-]\d+)>/i
    MAX_DEBUFF = /<(?:MAX_DEBUFF|max debuff)[ ](.*):[ ]([\+\-]\d+)>/i
    CHANGE_STATE_TURN = /<(?:state)[ ](\d+)[ ](?:TURN|turns):[ ]([\+\-]\d+)>/i
    STATE_REAPPLY_IGNORE = /<(?:REAPPLY_IGNORE|reapply ignore)>/i
    STATE_REAPPLY_RESET = /<(?:REAPPLY_RESET|reapply reset)>/i
    STATE_REAPPLY_TOTAL = /<(?:REAPPLY_TOTAL|reapply total)>/i
   
  end # BASEITEM
  module USABLEITEM
   
    CHANGE_STATE_TURN = /<(?:state)[ ](\d+)[ ](?:TURN|turns):[ ]([\+\-]\d+)>/i
    CHANGE_BUFF_TURN = /<(?:buff)[ ](.*)[ ](?:TURN|turns):[ ]([\+\-]\d+)>/i
    CHANGE_DEBUFF_TURN = /<(?:debuff)[ ](.*)[ ](?:TURN|turns):[ ]([\+\-]\d+)>/i
   
  end # USABLEITEM
  end # REGEXP
end # YEA

#==============================================================================
# ■ DataManager
#==============================================================================

module DataManager
 
  #--------------------------------------------------------------------------
  # alias method: load_database
  #--------------------------------------------------------------------------
  class <<self; alias load_database_bsm load_database; end
  def self.load_database
    load_database_bsm
    load_notetags_bsm
  end
 
  #--------------------------------------------------------------------------
  # new method: load_notetags_bsm
  #--------------------------------------------------------------------------
  def self.load_notetags_bsm
    groups = [$data_actors, $data_classes, $data_weapons, $data_armors,
      $data_enemies, $data_states, $data_skills, $data_items]
    for group in groups
      for obj in group
        next if obj.nil?
        obj.load_notetags_bsm
      end
    end
  end
 
end # DataManager

#==============================================================================
# ■ RPG::BaseItem
#==============================================================================

class RPG::BaseItem
 
  #--------------------------------------------------------------------------
  # public instance variables
  #--------------------------------------------------------------------------
  attr_accessor :max_buff
  attr_accessor :max_debuff
  attr_accessor :change_state_turns
  attr_accessor :state_reapply_rules
 
  #--------------------------------------------------------------------------
  # common cache: load_notetags_bsm
  #--------------------------------------------------------------------------
  def load_notetags_bsm
    @change_state_turns = {}
    @max_buff = {
      0 => 0, 1 => 0, 2 => 0, 3 => 0, 4 => 0, 5 => 0, 6 => 0, 7 => 0 }
    @max_debuff = {
      0 => 0, 1 => 0, 2 => 0, 3 => 0, 4 => 0, 5 => 0, 6 => 0, 7 => 0 }
    if self.is_a?(RPG::State)
      @state_reapply_rules = YEA::BUFF_STATE_MANAGER::REAPPLY_STATE_RULES
    end
    #---
    self.note.split(/[\r\n]+/).each { |line|
      case line
      #---
      when YEA::REGEXP::BASEITEM::MAX_BUFF
        case $1.upcase
        when "MAXHP", "MHP", "HP"
          @max_buff[0] = $2.to_i
        when "MAXMP", "MMP", "MP", "MAXSP", "SP", "MSP"
          @max_buff[1] = $2.to_i
        when "ATK"
          @max_buff[2] = $2.to_i
        when "DEF"
          @max_buff[3] = $2.to_i
        when "MAT", "INT", "SPI"
          @max_buff[4] = $2.to_i
        when "MDF", "RES"
          @max_buff[5] = $2.to_i
        when "AGI"
          @max_buff[6] = $2.to_i
        when "LUK"
          @max_buff[7] = $2.to_i
        when "ALL"
          for i in 0...8; @max_buff[i] = $2.to_i; end
        end
      #---
      when YEA::REGEXP::BASEITEM::MAX_DEBUFF
        case $1.upcase
        when "MAXHP", "MHP", "HP"
          @max_debuff[0] = $2.to_i
        when "MAXMP", "MMP", "MP", "MAXSP", "SP", "MSP"
          @max_debuff[1] = $2.to_i
        when "ATK"
          @max_debuff[2] = $2.to_i
        when "DEF"
          @max_debuff[3] = $2.to_i
        when "MAT", "INT", "SPI"
          @max_debuff[4] = $2.to_i
        when "MDF", "RES"
          @max_debuff[5] = $2.to_i
        when "AGI"
          @max_debuff[6] = $2.to_i
        when "LUK"
          @max_debuff[7] = $2.to_i
        when "ALL"
          for i in 0...8; @max_debuff[i] = $2.to_i; end
        end
      #---
      when YEA::REGEXP::BASEITEM::CHANGE_STATE_TURN
        @change_state_turns[$1.to_i] = $2.to_i
      #---
      when YEA::REGEXP::BASEITEM::STATE_REAPPLY_IGNORE
        next unless self.is_a?(RPG::State)
        @state_reapply_rules = 0
      when YEA::REGEXP::BASEITEM::STATE_REAPPLY_RESET
        next unless self.is_a?(RPG::State)
        @state_reapply_rules = 1
      when YEA::REGEXP::BASEITEM::STATE_REAPPLY_TOTAL
        next unless self.is_a?(RPG::State)
        @state_reapply_rules = 2
      #---
      end
    } # self.note.split
    #---
  end
 
end # RPG::BaseItem

#==============================================================================
# ■ RPG::UsableItem
#==============================================================================

class RPG::UsableItem < RPG::BaseItem
 
  #--------------------------------------------------------------------------
  # public instance variables
  #--------------------------------------------------------------------------
  attr_accessor :change_state_turns
  attr_accessor :change_buff_turns
  attr_accessor :change_debuff_turns
 
  #--------------------------------------------------------------------------
  # common cache: load_notetags_bsm
  #--------------------------------------------------------------------------
  def load_notetags_bsm
    @change_state_turns = {}
    @change_buff_turns = {}
    @change_debuff_turns = {}
    #---
    self.note.split(/[\r\n]+/).each { |line|
      case line
      #---
      when YEA::REGEXP::USABLEITEM::CHANGE_STATE_TURN
        @change_state_turns[$1.to_i] = $2.to_i
      when YEA::REGEXP::USABLEITEM::CHANGE_BUFF_TURN
        case $1.upcase
        when "MAXHP", "MHP", "HP"
          @change_buff_turns[0] = $2.to_i
        when "MAXMP", "MMP", "MP", "MAXSP", "SP", "MSP"
          @change_buff_turns[1] = $2.to_i
        when "ATK"
          @change_buff_turns[2] = $2.to_i
        when "DEF"
          @change_buff_turns[3] = $2.to_i
        when "MAT", "INT", "SPI"
          @change_buff_turns[4] = $2.to_i
        when "MDF", "RES"
          @change_buff_turns[5] = $2.to_i
        when "AGI"
          @change_buff_turns[6] = $2.to_i
        when "LUK"
          @change_buff_turns[7] = $2.to_i
        when "ALL"
          for i in 0...8; @change_buff_turns[i] = $2.to_i; end
        end
      when YEA::REGEXP::USABLEITEM::CHANGE_DEBUFF_TURN
        case $1.upcase
        when "MAXHP", "MHP", "HP"
          @change_debuff_turns[0] = $2.to_i
        when "MAXMP", "MMP", "MP", "MAXSP", "SP", "MSP"
          @change_debuff_turns[1] = $2.to_i
        when "ATK"
          @change_debuff_turns[2] = $2.to_i
        when "DEF"
          @change_debuff_turns[3] = $2.to_i
        when "MAT", "INT", "SPI"
          @change_debuff_turns[4] = $2.to_i
        when "MDF", "RES"
          @change_debuff_turns[5] = $2.to_i
        when "AGI"
          @change_debuff_turns[6] = $2.to_i
        when "LUK"
          @change_debuff_turns[7] = $2.to_i
        when "ALL"
          for i in 0...8; @change_debuff_turns[i] = $2.to_i; end
        end
      end
    } # self.note.split
    #---
  end
 
end # class RPG::UsableItem

#==============================================================================
# ■ Game_BattlerBase
#==============================================================================

class Game_BattlerBase
 
  #--------------------------------------------------------------------------
  # overwrite method: param_buff_rate
  #--------------------------------------------------------------------------
  def param_buff_rate(param_id)
    return eval(YEA::BUFF_STATE_MANAGER::BUFF_BOOST_FORMULA)
  end
 
  #--------------------------------------------------------------------------
  # new method: max_buff_limit
  #--------------------------------------------------------------------------
  def max_buff_limit(param_id)
    n = YEA::BUFF_STATE_MANAGER::DEFAULT_BUFF_LIMIT
    if actor?
      n += self.actor.max_buff[param_id]
      n += self.class.max_buff[param_id]
      for equip in equips
        next if equip.nil?
        n += equip.max_buff[param_id]
      end
    else
      n += self.enemy.max_buff[param_id]
    end
    for state in states
      next if state.nil?
      n += state.max_buff[param_id]
    end
    return [[n.to_i, 0].max, YEA::BUFF_STATE_MANAGER::MAXIMUM_BUFF_LIMIT].min
  end
 
  #--------------------------------------------------------------------------
  # new method: max_debuff_limit
  #--------------------------------------------------------------------------
  def max_debuff_limit(param_id)
    n = YEA::BUFF_STATE_MANAGER::DEFAULT_BUFF_LIMIT
    if actor?
      n += self.actor.max_debuff[param_id]
      n += self.class.max_debuff[param_id]
      for equip in equips
        next if equip.nil?
        n += equip.max_debuff[param_id]
      end
    else
      n += self.enemy.max_debuff[param_id]
    end
    for state in states
      next if state.nil?
      n += state.max_debuff[param_id]
    end
    return [[n.to_i, 0].max, YEA::BUFF_STATE_MANAGER::MAXIMUM_BUFF_LIMIT].min
  end
 
  #--------------------------------------------------------------------------
  # overwrite method: buff_icon_index
  #--------------------------------------------------------------------------
  def buff_icon_index(buff_level, param_id)
    if buff_level > 0
      return ICON_BUFF_START + ([buff_level - 1, 1].min) * 8 + param_id
    elsif buff_level < 0
      return ICON_DEBUFF_START + ([-buff_level - 1, -1].max) * 8 + param_id
    else
      return 0
    end
  end
 
  #--------------------------------------------------------------------------
  # new method: buff_turns
  #--------------------------------------------------------------------------
  def buff_turns(param_id)
    return @buff_turns.include?(param_id) ? @buff_turns[param_id] : 0
  end
 
  #--------------------------------------------------------------------------
  # new method: buff_level
  #--------------------------------------------------------------------------
  def buff_level(param_id)
    return 0 if @buffs[param_id].nil?
    buff_maximum = max_buff_limit(param_id)
    debuff_maximum = max_debuff_limit(param_id)
    return [[@buffs[param_id], buff_maximum].min, -debuff_maximum].max
  end
 
  #--------------------------------------------------------------------------
  # new method: buff_change_turns
  #--------------------------------------------------------------------------
  def buff_change_turns(param_id, value)
    @buff_turns[param_id] = 0 if @buff_turns[param_id].nil?
    @buff_turns[param_id] = [value, 0].max
  end
 
  #--------------------------------------------------------------------------
  # new method: state_turns
  #--------------------------------------------------------------------------
  def state_turns(state_id)
    state_id = state_id.id if state_id.is_a?(RPG::State)
    return @state_turns.include?(state_id) ? @state_turns[state_id] : 0
  end
 
  #--------------------------------------------------------------------------
  # new method: state_steps
  #--------------------------------------------------------------------------
  def state_steps(state_id)
    state_id = state_id.id if state_id.is_a?(RPG::State)
    return @state_steps.include?(state_id) ? @state_steps[state_id] : 0
  end
 
  #--------------------------------------------------------------------------
  # new method: state_change_turns
  #--------------------------------------------------------------------------
  def state_change_turns(state_id, value)
    state_id = state_id.id if state_id.is_a?(RPG::State)
    @state_turns[state_id] = 0 if @state_turns[state_id].nil?
    @state_turns[state_id] = [value, 0].max
  end
 
  #--------------------------------------------------------------------------
  # new method: state_turn_mod
  #--------------------------------------------------------------------------
  def state_turn_mod(state_id)
    return 0 if $data_states[state_id].nil?
    state = $data_states[state_id]
    n = state.min_turns + rand(1 + [state.max_turns - state.min_turns, 0].max)
    if actor?
      if self.actor.change_state_turns.include?(state_id)
        n += self.actor.change_state_turns[state_id]
      end
      if self.class.change_state_turns.include?(state_id)
        n += self.class.change_state_turns[state_id]
      end
      for equip in equips
        next if equip.nil?
        next unless equip.change_state_turns.include?(state_id)
        n += equip.change_state_turns[state_id]
      end
    else
      if self.enemy.change_state_turns.include?(state_id)
        n += self.enemy.change_state_turns[state_id]
      end
    end
    for state in states
      next if state.nil?
      next unless state.change_state_turns.include?(state_id)
      n += state.change_state_turns[state_id]
    end
    return [n, 0].max
  end
 
end # Game_BattlerBase

#==============================================================================
# ■ Game_Battler
#==============================================================================

class Game_Battler < Game_BattlerBase
 
  #--------------------------------------------------------------------------
  # overwrite method: buff_max?
  #--------------------------------------------------------------------------
  def buff_max?(param_id)
    return @buffs[param_id] == max_buff_limit(param_id)
  end
 
  #--------------------------------------------------------------------------
  # overwrite method: debuff_max?
  #--------------------------------------------------------------------------
  def debuff_max?(param_id)
    return @buffs[param_id] == -max_debuff_limit(param_id)
  end
 
  #--------------------------------------------------------------------------
  # overwrite method: add_state
  #--------------------------------------------------------------------------
  def add_state(state_id)
    return if $data_states[state_id].nil?
    state_rules = $data_states[state_id].state_reapply_rules
    return if state_rules == 0 && state?(state_id)
    if state_addable?(state_id)
      add_new_state(state_id) unless state?(state_id)
      reset_state_counts(state_id) if state_rules == 1
      total_state_counts(state_id) if state_rules == 2
      @result.added_states.push(state_id).uniq!
    end
  end
 
  #--------------------------------------------------------------------------
  # overwrite method: reset_state_counts
  #--------------------------------------------------------------------------
  def reset_state_counts(state_id)
    state = $data_states[state_id]
    @state_turns[state_id] = state_turn_mod(state_id)
    @state_steps[state_id] = state.steps_to_remove
  end
 
  #--------------------------------------------------------------------------
  # new method: total_state_counts
  #--------------------------------------------------------------------------
  def total_state_counts(state_id)
    state = $data_states[state_id]
    value = state_turn_mod(state_id)
    state_change_turns(state_id, value + state_turns(state_id))
  end
 
  #--------------------------------------------------------------------------
  # alias method: item_user_effect
  #--------------------------------------------------------------------------
  alias game_battler_item_user_effect_bsm item_user_effect
  def item_user_effect(user, item)
    game_battler_item_user_effect_bsm(user, item)
    apply_state_turn_changes(user, item)
    apply_buff_turn_changes(user, item)
    apply_debuff_turn_changes(user, item)
  end
 
  #--------------------------------------------------------------------------
  # new method: apply_state_turn_changes
  #--------------------------------------------------------------------------
  def apply_state_turn_changes(user, item)
    return if item.nil?
    return unless $game_party.in_battle
    for key in item.change_state_turns
      state_id = key[0]
      next unless state?(state_id)
      next unless $data_states[state_id].auto_removal_timing > 0
      state_change_turns(state_id, key[1] + state_turns(state_id))
      remove_state(state_id) if state_turns(state_id) < 0
      @result.success = true
    end
  end
 
  #--------------------------------------------------------------------------
  # new method: apply_buff_turn_changes
  #--------------------------------------------------------------------------
  def apply_buff_turn_changes(user, item)
    return if item.nil?
    return unless $game_party.in_battle
    for key in item.change_buff_turns
      param_id = key[0]
      next unless buff?(param_id)
      buff_change_turns(param_id, key[1] + buff_turns(param_id))
      remove_buff(param_id) if buff_turns(param_id) < 0
      @result.success = true
    end
  end
 
  #--------------------------------------------------------------------------
  # new method: apply_debuff_turn_changes
  #--------------------------------------------------------------------------
  def apply_debuff_turn_changes(user, item)
    return if item.nil?
    return unless $game_party.in_battle
    for key in item.change_debuff_turns
      param_id = key[0]
      next unless debuff?(param_id)
      buff_change_turns(param_id, key[1] + buff_turns(param_id))
      remove_buff(param_id) if buff_turns(param_id) < 0
      @result.success = true
    end
  end
 
end # Game_Battler

#==============================================================================
# ■ Window_Base
#==============================================================================

class Window_Base < Window
 
  #--------------------------------------------------------------------------
  # alias method: draw_actor_icons
  #--------------------------------------------------------------------------
  alias window_base_draw_actor_icons_bsm draw_actor_icons
  def draw_actor_icons(actor, dx, dy, dw = 96)
    window_base_draw_actor_icons_bsm(actor, dx, dy, dw)
    draw_actor_icon_turns(actor, dx, dy, dw)
  end
 
  #--------------------------------------------------------------------------
  # new method: draw_actor_icon_turns
  #--------------------------------------------------------------------------
  def draw_actor_icon_turns(actor, dx, dy, dw)
    return unless YEA::BUFF_STATE_MANAGER::SHOW_REMAINING_TURNS
    return unless SceneManager.scene_is?(Scene_Battle)
    reset_font_settings
    contents.font.out_color.alpha = 255
    contents.font.bold = true
    contents.font.size = YEA::BUFF_STATE_MANAGER::TURNS_REMAINING_SIZE
    dy += YEA::BUFF_STATE_MANAGER::TURNS_REMAINING_Y
    #---
    for state in actor.states
      break if dx + 24 > dw
      next if state.icon_index <= 0
      turns = actor.state_turns(state.id)
      if state.auto_removal_timing > 0 && turns < 100
        draw_text(dx, dy, 24, line_height, turns, 2)
      end
      dx += 24
    end
    #---
    for i in 0...8
      break if dx + 24 > dw
      next if actor.buff_icon_index(actor.buff_level(i), i) == 0
      turns = actor.buff_turns(i)
      draw_text(dx, dy, 24, line_height, turns, 2) if turns < 100
      dx += 24
    end
    #---
    contents.font.out_color = Font.default_out_color
    reset_font_settings
  end
 
end # Window_Base

#==============================================================================
#
# ▼ End of File
#
#==============================================================================

+1 point de participation.

Elisa'
Elisa'
Staffeux retraité

Nombre de messages : 2924
Age : 21
Localisation : Par là-bas !
Distinction : Mon héritière que je chéris Buff & State Manager par Yanfly 344805Buff & State Manager par Yanfly 344805
[Coco' Smile]
Plus que 2 ans avant d'épouser Coco' ! Compte à rebours lancé !
[Auto-distinction]

Adepte du "Je le savais" alors qu'elle le savait pas.
Date d'inscription : 30/05/2009

Buff & State Manager par Yanfly Empty Re: Buff & State Manager par Yanfly

le Mer 28 Déc 2011 - 11:51
Merci du partage, +1 point de participation Smile
Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum