- YasanMembre
- Nombre de messages : 149
Age : 39
Distinction : aucune
Date d'inscription : 18/01/2011
Buff & State Manager par Yanfly
Mer 28 Déc 2011 - 11:40
Buff & State Manager
Auteur : Yanfly
Version du script :1.01
Traducteur : Yasan
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.
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.
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.
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.
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.
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'Staffeux retraité
- Nombre de messages : 2924
Age : 26
Localisation : Par là-bas !
Distinction : Mon héritière que je chéris
[Coco' ]
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
Re: Buff & State Manager par Yanfly
Mer 28 Déc 2011 - 11:51
Merci du partage, +1 point de participation
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum