#===============================================================================
# ▼ [VX] Afficher les objets trouvés/reçu sur la map
#------------------------------------------------------------------------
# Blockade Script Library - Afficher les objets trouvés/reçu sur la map
# Date : 12/04/2010
# Niveau : Facile
# Version : 2.0
# Auteur : Blockade
# Forum d'origine :
https://rpg-maker-vx.bbactif.com/forum.html#
# Remerciment à Khai ( http://ktbanh.wordpress.com/)
#
# Marre de pas avoir d'interface spécifique quand le joueur gagne un objet ou de l'expérience ?
# Ce script permet d'afficher une fenêtre qui récapitule les gains obtenus ! Dans sa nouvelle version, il
# n'y plus aucun code à rentrer le script reconnait les gains tout seul !
#=======================================================================
# ▼ Mises a jour
# -------------------------------------------------------------------------
# ☼ 12/04/2010 - Version 1.0
# - Sortie du script
# ☼ ??/??/???? - Version 1.1
# - Permet de gagner de l'expérience
# ☼ 20/06/2010 - Version 1.2
# - Correction de plusieurs bugs
# ☼ 01/01/2011 - Version 2.0
# - Plus besoin de passer par des lignes de codes, tout se fait automatiquement
# - Réécriture complète du script
#=======================================================================
# ▼ Fonctionnalités
# -------------------------------------------------------------------------
# - Affiche une fenêtre avec les gains obtenus (gère l'expérience, l'or, les objets et l'équipement)
# - La fenêtre s'adapte quand il y a plusieurs gains
# - On peut adapter très facilement le titre de la fenêtre et le son joué en fonction de la situation (coffre, PNJ...)
# - Plus aucun code à rentrer !
# - Retro-compatible avec les versions antérieures
# (vous n'avez pas besoin de changer les appels de scripts, ils marchent toujours)
#=======================================================================
# ▼ Installation
#--------------------------------------------------------------------------
# Mettez le au dessus de main, et jetez un coup d'oeil au module de configuration.
#=======================================================================
# ▼ Utilisation
#--------------------------------------------------------------------------
# Dans cette nouvelle version vous n'avez rien à faire ! Mettez juste votre event avec le gain
# d'objet/équipement/argent/expérience et le jeu affichera tout seul comme un grand la fenêtre.
# Bien sur il est possible de désactiver la fenêtre très simplement, juste en activant un interrupteur
# dont l'ID est configurable plus bas !
#
# Aussi pour vous éviter de tout changer dans le jeu, cette version est rétro compatible, c'est à
# dire que la veille méthode marche toujours (avec gain()), jetez un coup d'oeil à la démo vous
# verrez.
#
# Pour changer le lieu, c'est simple vous avez juste à changer la valeur d'une variable dont l'ID
# est configurable. Pour les nouveaux, un lieu dans le script c'est juste l'affichage d'un texte
# différent, et un son différent suivant les cas. Si vous vous trouvez dans un coffre, il suffit de
# mettre la variable lieu à 1 pour que le script affiche "Butin trouvé" à la place de "Butin", et qu'il
# joue un son de coffre. Bien sur vous pouvez changer ces valeurs dans le module de
# configuration ! Si vous ne comprenez pas regardez la démo !
#=======================================================================
# ▼ Alias et compatibilité
#--------------------------------------------------------------------------
# ► Méthodes réecrites :
# > Game_Interpreter : update
#
# ► Alias méthodes :
# > Game_Interpreter : initialize
# > Game_Interpreter : execute_command
# > Scene_Map : start
# > Scene_Map : update
# > Scene_Map : terminate
# > Game_Temp : initialize
#===============================================================================
module BSL
module OTR
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# ID_X - Configuration des ID de variable/interrupteurs
#-------------------------------------------------
# Niveau : Facile
# Vous pouvez configurer ici l'ID de l'interrupteur qui désactive l'affichage de la fenêtre;
# et de la variable de lieu.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# L'ID de l'interrupteur qui désactive la fenêtre de gain si il est activé
ID_INT_DESACTIVER = 1
# L'ID de la variable qui contient le lieu (voir la section LIEU_X plus loin pour les détails)
ID_VAR_LIEU = 1
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# TEXT_X - Configuration des textes
#-------------------------------------------------
# Niveau : Facile
# Vous pouvez configurer ici tous les textes qui apparaissent dans les fenêtres.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Texte situé avant la quantité d'objets gagné
TEXT_QUANTITE = "x"
# Texte affiché avant la quantité d'argent obtenu
TEXT_GAIN_GOLD = "Gils obtenus"
# Texte affiché avant la quantité d'argent obtenu
TEXT_GAIN_EXP = "Exp. obtenue"
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# UPDATE_X - Permetre aux éléments du décors de bouger
#-------------------------------------------------
# Niveau : Facile
# Si vous souhaitez pour une raison ou une autre que les events ou que les autotiles
# ne bougent plus pendant que la fenêtre apparaît c'est ici qu'il faut se rendre.
# Mettez true si vous voulez qu'ils bougent, false sinon.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# Continuer à faire bouger les autotitles lors de l'apparition de la fenêtre (L'eau par exemple)
UPDATE_SPRITESET = true
# Continuer à exécuter les events
UPDATE_EVENT = true
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# ICON_X - Configuration des icônes
#-------------------------------------------------
# Niveau : Facile
# Vous pouvez modifier ici les icônes qui apparaissent lors du gain d'expérience et d'or.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# L'ID de l'icône affichée pour l'argent
ICON_GOLD = 205
# L'ID de l'icône affichée pour l'expérience
ICON_EXP = 101
#-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# LIEU_X - Configuration des lieux
#-------------------------------------------------
# Niveau : Facile
# Vous pouvez modifier ici les différents titres affichés, ainsi que les sons joué suivant
# la valeur de la variable qui défini le lieu.
#=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
# > Par défaut (si la variable lieu vaut 0)
LIEU_0_TEXT = "Butin" # Texte affiché par défaut lors de l'obtention d'un butin
LIEU_0_MUSIQUE = true # Jouer le SE ? (par défaut)
LIEU_0_SE = "Saint5" # Le SE joué par défaut lors de l'obtention d'un butin
LIEU_0_VOLUME = 100 # Le volume du SE joué par défaut
LIEU_0_TEMPO = 100 # Le tempo du SE joué par défaut
# > Un coffre (Lieu = 1)
LIEU_1_TEXT = "Butin trouvé" # Texte affiché lors de l'obtention d'un butin (Lieu = 1)
LIEU_1_MUSIQUE = true # Jouer le SE ? (Lieu = 1)
LIEU_1_SE = "Chest" # Le SE joué lors de l'obtention d'un butin (Lieu = 1)
LIEU_1_VOLUME= 100 # Le volume du SE joué (Lieu = 1)
LIEU_1_TEMPO = 100 # Le tempo du SE joué (Lieu = 1)
# > Un PNJ (Lieu = 2)
LIEU_2_TEXT = "Butin reçu" # Texte affiché lors de l'obtention d'un butin (Lieu = 2)
LIEU_2_MUSIQUE = true # Jouer le SE ? (Lieu = 2)
LIEU_2_SE = "Saint5" # Le SE joué lors de l'obtention d'un butin (Lieu = 2)
LIEU_2_VOLUME = 100 # Le volume du SE joué (Lieu = 2)
LIEU_2_TEMPO = 100 # Le tempo du SE joué (Lieu = 2 )
# > Autres (Objet caché...) (Lieu = 3)
LIEU_3_TEXT = "Butin trouvé" # Texte affiché lors de l'obtention d'un butin (Lieu = 3)
LIEU_3_MUSIQUE = true # Jouer le SE ? (Lieu = 3)
LIEU_3_SE = "Saint5" # Le SE joué lors de l'obtention d'un butin (Lieu = 3)
LIEU_3_VOLUME = 100 # Le volume du SE joué (Lieu = 3)
LIEU_3_TEMPO = 100 # Le tempo du SE joué (Lieu = 3)
end
end
#==============================================================================
# ** Game_Interpreter
#------------------------------------------------------------------------------
# An interpreter for executing event commands. This class is used within the
# Game_Map, Game_Troop, and Game_Event classes.
#==============================================================================
class Game_Interpreter
include BSL::OTR
#--------------------------------------------------------------------------
# * alias_method : initialize
#--------------------------------------------------------------------------
alias bsl_otr_gameinterpreter_initialize initialize
def initialize(*args)
bsl_otr_gameinterpreter_initialize(*args)
@cmd_trouve = false # Mis à true si on à déjà trouvé une commande de gain
@gain = []
end
#--------------------------------------------------------------------------
# * Event Command Execution
#--------------------------------------------------------------------------
alias bsl_otr_gameinterpreter_execute_command execute_command
def execute_command
# On le fait pas si on arrive à la fin de l'event et si on est pas sur la carte
if !(@index >= @list.size-1) && $scene.is_a?(Scene_Map) && !$game_switches[ID_INT_DESACTIVER]
code = @list[@index].code
# Si le code n'est pas entre 125 et 128, et que y'avait au moins une commande de gain avant
afficher_gains if !(code.between?(125,128)) && code != 315 && @cmd_trouve
# Si le code est entre 125 et 128 on met cette information dans @gain
if code.between?(125,128) || code == 315
params = @list[@index].parameters
if code == 125
value = operate_value(params[0], params[1], params[2])
index = 0
else
value = operate_value(params[1], params[2], params[3])
index = params[0]
end
if value > 0 # On fait la suite que si la valeur est positive
@cmd_trouve = true
type = calcul_type(code)
@gain.push([type,index,value])
end
end
end
# Si c'est la fin de l'event et qui y'a toujours des gains
afficher_gains if @index >= @list.size-1 && $scene.is_a?(Scene_Map) && @cmd_trouve
# On execute la commande habituellement
bsl_otr_gameinterpreter_execute_command
end
#--------------------------------------------------------------------------
# * Frame Update
#---------------------------------------------------------------------------
def update
loop do
return if $game_temp.affichage_gain
if $game_map.map_id != @map_id # Map is different?
@event_id = 0 # Make event ID 0
end
if @child_interpreter != nil # If child interpreter exists
@child_interpreter.update # Update child interpreter
if @child_interpreter.running? # If running
return # Return
else # After execution has finished
@child_interpreter = nil # Erase child interpreter
end
end
if @message_waiting # Waiting for message finish
return
end
if @moving_character != nil # Waiting for move to finish
if @moving_character.move_route_forcing
return
end
@moving_character = nil
end
if @wait_count > 0 # Waiting
@wait_count -= 1
return
end
if $game_troop.forcing_battler != nil # Forcing battle action
return
end
if $game_temp.next_scene != nil # Opening screens
return
end
if @list == nil # If content list is empty
setup_starting_event if @main # Set up starting event
return if @list == nil # Nothing was set up
end
return if execute_command == false # Execute event command
@index += 1 # Advance index
end
end
#--------------------------------------------------------------------------
# * On affiche les gains
#--------------------------------------------------------------------------
def afficher_gains
@cmd_trouve = false
$scene.afficher_gains(@gain)
@gain = []
$game_temp.affichage_gain = true
end
#--------------------------------------------------------------------------
# * Converti le code de la commande en type pour le script
#--------------------------------------------------------------------------
def calcul_type(code)
type = 0
case code
when 126 # Objet
type = 1
when 127 # Arme
type = 2
when 128 # Armure
type = 3
when 125 # Or
type = 4
when 315 # Experience
type = 5
end
return type
end
#--------------------------------------------------------------------------
# * Ancienne méthode
#--------------------------------------------------------------------------
def gain(type,index,value,lieu=0)
@gain = []
if type.is_a?(Array)
type.each_index { |i|
@gain.push([type[i],index[i],value[i]])}
else
@gain.push([type,index,value])
end
$game_variables[ID_VAR_LIEU] = lieu
donner_butin
afficher_gains
end
end
#--------------------------------------------------------------------------
# * Donne le butin gagné (retro-compatibilité)
#--------------------------------------------------------------------------
def donner_butin
@gain.each { |gain|
case gain[0]
when 1
$game_party.gain_item($data_items[gain[1]], gain[2])
when 2
$game_party.gain_item($data_weapons[gain[1]], gain[2])
when 3
$game_party.gain_item($data_armors[gain[1]], gain[2])
when 4
$game_party.gain_gold(gain[2])
when 5
if gain[1] == 0
$game_party.members.each{|member|
member.change_exp(member.exp + gain[2],false)}
else
actor = $game_actors[gain[1]]
actor.change_exp(actor.exp + gain[2],false)
end
end}
end
#==============================================================================
# ** Scene_Map
#------------------------------------------------------------------------------
# This class performs the map screen processing.
#==============================================================================
class Scene_Map < Scene_Base
include BSL::OTR
#--------------------------------------------------------------------------
# * alias_method : initialize
#--------------------------------------------------------------------------
alias bsl_otr_scenemap_start start
def start
@window_lieu = Window_Lieu.new
@window_butin = Window_Butin.new
bsl_otr_scenemap_start
end
#--------------------------------------------------------------------------
# *alias_method : update
#--------------------------------------------------------------------------
alias bsl_otr_scenemap_update update
def update
# On met à jour les informations que si la fenêtre est visible
if @window_butin.visible
@spriteset.update if UPDATE_SPRITESET
$game_map.update if UPDATE_EVENT
@window_butin.update
@window_lieu.update
@message_window.update if @message_window.visible
if Input.trigger?(Input::C) || Input.trigger?(Input::B)
@window_butin.visible = false
@window_lieu.visible = false
$game_temp.affichage_gain = false
$game_variables[ID_VAR_LIEU] = 0
end
else
bsl_otr_scenemap_update
end
end
#--------------------------------------------------------------------------
# * Afficher le gain
#--------------------------------------------------------------------------
def afficher_gains(gain)
@gain = gain
ajuster_fenetres
afficher_texte
afficher_fenetres
end
#--------------------------------------------------------------------------
# * On centre les deux fenêtres
#--------------------------------------------------------------------------
def ajuster_fenetres
@window_butin.height = 56 + 25*(@gain.size-1)
@window_lieu.x=(544-@window_lieu.width)/2
@window_butin.x = (544-@window_butin.width)/2
@window_lieu.y = (416-@window_lieu.height-@window_butin.height)/2
@window_butin.y = @window_lieu.y + @window_butin.height-25*(@gain.size-1)
end
#--------------------------------------------------------------------------
# * Affiche le texte voulu
#--------------------------------------------------------------------------
def afficher_texte
@window_lieu.clear
@window_butin.clear
@window_lieu.set_text
y = 0
@gain.each { |data_gain|
special = false
case data_gain[0]
when 1
nom = $data_items[data_gain[1]].name
icone = $data_items[data_gain[1]].icon_index
when 2
nom = $data_weapons[data_gain[1]].name
icone = $data_weapons[data_gain[1]].icon_index
when 3
nom = $data_armors[data_gain[1]].name
icone = $data_armors[data_gain[1]].icon_index
when 4
nom = TEXT_GAIN_GOLD
icone = ICON_GOLD
special = true
when 5
nom = TEXT_GAIN_EXP
icone = ICON_EXP
special = true
end
@window_butin.set_gain(0,y,nom,icone,data_gain[2],special)
y += 25}
end
#--------------------------------------------------------------------------
# * On affiche les fenêtres
#--------------------------------------------------------------------------
def afficher_fenetres
@window_lieu.visible = false
@window_butin.visible = true
end
#--------------------------------------------------------------------------
# * alias_method : terminate
#--------------------------------------------------------------------------
alias bsl_otr_scenemap_terminate terminate
def terminate
bsl_otr_scenemap_terminate
@window_butin.dispose
@window_lieu.dispose
end
end
#==============================================================================
# ** Window_Lieu
#------------------------------------------------------------------------------
# La fenêtre qui gère le titre général du butin obtenu
#==============================================================================
class Window_Lieu < Window_Base
include BSL::OTR
#--------------------------------------------------------------------------
# * Initialize
#--------------------------------------------------------------------------
def initialize
super(0,0,250,-100)
self.visible = true
end
#--------------------------------------------------------------------------
# * Efface le contenu
#--------------------------------------------------------------------------
def clear
self.contents.clear
end
#--------------------------------------------------------------------------
# * Affiche le texte dans la fenêtre (/!\ Personalisable)
#--------------------------------------------------------------------------
def set_text
case $game_variables[ID_VAR_LIEU]
when 0 # Par défaut
title = LIEU_0_TEXT
Audio.se_play("Audio/SE/#{LIEU_0_SE}", LIEU_0_VOLUME, LIEU_0_TEMPO) if LIEU_0_MUSIQUE
when 1 # Coffre
title = LIEU_1_TEXT
Audio.se_play("Audio/SE/#{LIEU_1_SE}", LIEU_1_VOLUME, LIEU_1_TEMPO) if LIEU_1_MUSIQUE
when 2 # PNJ
title = LIEU_2_TEXT
Audio.se_play("Audio/SE/#{LIEU_2_SE}", LIEU_2_VOLUME, LIEU_2_TEMPO) if LIEU_2_MUSIQUE
when 3 # Recu (Autres coffre/PNJ)
title = LIEU_3_TEXT
Audio.se_play("Audio/SE/#{LIEU_3_SE}",LIEU_3_VOLUME, LIEU_3_TEMPO) if LIEU_3_MUSIQUE
end
self.contents.draw_text(0,0,contents.width,WLH,title,1)
end
end
#==============================================================================
# ** Window_Butin
#------------------------------------------------------------------------------
# La fenêtre qui gère les objets obtenus
#==============================================================================
class Window_Butin < Window_Base
include BSL::OTR
#--------------------------------------------------------------------------
# * Initialize
#--------------------------------------------------------------------------
def initialize
super(0,0,250,-100)
self.visible = false
end
#--------------------------------------------------------------------------
# * Efface le contenu
#--------------------------------------------------------------------------
def clear
self.contents.clear
create_contents
end
#--------------------------------------------------------------------------
# * Affiche les objets/gils gagnés
#--------------------------------------------------------------------------
def set_gain(x,y,butin,icone,num,special)
@num = num
draw_icon(icone,x,y)
self.contents.draw_text(x+25,y,150,WLH,butin)
if special
self.contents.draw_text(x,y,contents.width,WLH,@num,2)
else
self.contents.draw_text(x,y,contents.width,WLH,TEXT_QUANTITE + @num.to_s,2)
end
end
end
#==============================================================================
# ** Game_Temp
#------------------------------------------------------------------------------
# This class handles temporary data that is not included with save data.
# The instance of this class is referenced by $game_temp.
#==============================================================================
class Game_Temp
#--------------------------------------------------------------------------
# * Public Instance Variables
#--------------------------------------------------------------------------
attr_accessor :affichage_gain # True si on affiche des gains
#--------------------------------------------------------------------------
# * Object Initialization
#--------------------------------------------------------------------------
alias bsl_otr_gametemp_initialize initialize
def initialize
bsl_otr_gametemp_initialize
@affichage_gain = false
end
end