Oniromancie: Scripts - Journal de quêtes


Comment ça marche?

Aëdemphia
Par Sylvanor

Fighting Robots Quest
Par Boulon

Forstale
Par Ødd Clock

Geex
Par roys

Inexistence
Par Falco

La Légende d'Ibabou
Par Zaitan

Lije
Par Gaetz

LoveMaster
Par Cuddlefox

Sarcia
Par Kaëlar

Super Mario RPG - Lost Souls
Par Omegabowser

Jeux: Monster World RPG / Jeux: Pif et Hercule / News: Mise à jour de RPG Maker 2003 / Tutos: Création de charset / Jeux: FAYLINAWA /

Chat  (62 connectés)

Bienvenue
visiteur !






publicité RPG Maker!

Statistiques

Liste des
membres


Contact

77 connectés actuellement

9257370 visiteurs
depuis l'ouverture

1497 visiteurs
aujourd'hui

Groupe Facebook

Barre de séparation

Partenaires




TOP
GAMEMAKING


Les 5 plus
visités

Lunae, le baz'arts d'Emz0

Le studio du chat vert

Pixelandgame

Tashiroworld

HeyMakeGames

Au hasard

Citadelle d'Hyrule

Lunarisblog

Shadow Temple

Les deux derniers

Lunae, le baz'arts d'Emz0

Le studio du chat vert

Nos autres partenaires

Devenir
partenaire


Barre de séparation

Un site du réseau
War Paradise

Annuaires référenceurs




Journal de quêtes
Script pour RPG Maker VXACE
Ecrit par gearX0001

Dans ce tutoriel je vais vous montrez comment utilisez ce script de modern algebra (rmrk.net).
[spoiler]#==============================================================================
# Quest Journal [VXA]
# Version: 1.0.3
# Author: modern algebra (rmrk.net)
# Date: 24 September 2012
# Support: http://rmrk.net/index.php/topic,45127.0.html
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Description:
#
# This script provides a graphical interface for showing quest progress. It
# is objective-based, meaning that you choose when to reveal objectives and
# you can set it so that they show up as complete or failed. That said, this
# script does not build quests for you; it is only a supplementary scene for
# showing them. As such, you need to event all of the quests yourself and
# update quest progress via script call. Therefore, pay close attention to
# the instructions here and in the Editable Regions at lines 232 and 612.
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Instructions:
#
# Paste this script into its own slot or slots, above Main and below
# Materials. If you are using the menu access feature, you should put any
# other menu scripts above this one.
#
# All of the configuration is done in the QuestData module. While it is not
# necessary, it is recommended that you separate the configuration module
# from the rest of the script by cutting and pasting it into its own slot in
# the Script Editor (as you will see if you have the demo). The reason for
# this is that, if and when this script gets updated, you can preserve the
# configuration section and only replace the other parts of the script. If
# you wish to do that, you must cut everything from the first line down to
# the final end of the module. The first lines of the body script should be
# the equals bar right above # ** Game_Quest. Again, it's up to you whether
# you do it.
#
# You can go to EDITABLE REGION A at line 232 to configure the default
# settings for the script. All of these will work fine without modification,
# of course, but even if do not want to configure now, you should familiarize
# yourself with all the settings so that you can make the best use of your
# script. I have included tons of settings so that you can make the Quest
# Journal unique for your game, even down to the order in which each section
# of the info window is drawn. A brief description of each setting is
# included either to the right or directly above each constant.
#
# EDITABLE REGION B is the real heart of the script however - this is where
# you fill in all of the details for the quests. Read the instructions at
# line 612 very carefully!
#
# You can activate and access a quest with this code in the Script event
# command:
#
# quest(quest_id)
# quest_id : the integer ID of the quest you want to access
#
# From that, you can access or alter any relevant data stored in the quest,
# like name, description, objectives, etc... Example:
# quest(1).name = "Rest in Pieces"
#
# More relevantly, when it comes to controlling the progress of quests the
# following codes can be used in a Script event command. The arguments are
# the same for each command so I only explain them once. All of them are
# pretty self-explanatory and using any of them will activate the quest
# (unless you are using the MANUAL REVEAL setting at line 267).
#
# reveal_objective(quest_id, objective_id_1, ..., objective_id_n)
# quest_id : the integer ID of the quest you want to access.
# objective_id_1, ..., objective_id_n : a list of the IDs of the
# objectives you want to operate on. It can be as few as one or as
# many as all of them.
# Will show the listed objectives in the Quest's information
#
# conceal_objective(quest_id, objective_id_1, ..., objective_id_n)
# Will hide the listed objectives in the Quest's information
#
# complete_objective(quest_id, objective_id_1, ..., objective_id_n)
# Changes the colour of the listed objectives to the completed colour.
# The quest is completed once all prime objectives are.
#
# uncomplete_objective (quest_id, objective_id_1, ..., objective_id_n)
# Changes the status of the listed complete objectives back to active
#
# fail_objective(quest_id, objective_id_1, ..., objective_id_n)
# Changes the colour of the listed objectives to the failed colour.
# The quest is failed once one prime objective is.
#
# unfail_objective(quest_id, objective_id_1, ..., objective_id_n)
# Changes the status of the listed failed objectives back to active
#
# change_reward_status(quest_id, value)
# value : either true or false. If excluded, defaults to true.
# Totally optional, but this is just a personal switch which you can
# turn on when the reward is given. You can then make it a condition
# so you don't reward the players more than once. (see line 180)
#
# EXAMPLES:
# reveal_objective(1, 0)
# This would reveal the first objective of the quest with ID 1
# complete_objective(6, 2, 3)
# This would complete the third & fourth objectives of the quest with ID 6
# change_reward_status(8)
# This would set the reward switch to true for the quest with ID 8.
#
# Another new feature is the ability to set rewards that will show up in the
# menu (see EDITABLE REGION B). In addition to that, you can use the following
# code to automatically distribute the specified rewards for a quest if the
# quest is complete and no reward has yet been given:
#
# distribute_quest_rewards(quest_id)
# quest_id : the ID of the quest whose rewards you want to distribute
#
# Of course, it can only distribute the material rewards (items, weapons,
# armors, gold, or exp). It won't distribute rewards you specify by string.
# To that end though, you can also use this code in a conditional branch and
# it will be satisfied only if it distributes the rewards. Thus, if you
# wanted to add some special rewards or do things like that, you can just put
# that in the branch for when it is true. This feature is not really
# recommended, since I think it is better to do it by events.
#
# Other codes for the Script event command that can be useful are:
#
# reset_quest(quest_id)
# quest_id : the integer ID of the quest you want to access.
# This will re-initialize the quest, meaning all quest progress to
# date will be lost
#
# delete_quest(quest_id)
# Deactivates the quest and resets it
#
# conceal_quest(quest_id)
# Deactivates the quest so it won't show up in the scene, but progress
# is saved
#
# reveal_quest(quest_id)
# Activates or reactivates the quest. This command is NECESSARY if
# MANUAL_REVEAL at line 284 is true or it has previously been
# concealed. Otherwise, it is sufficient just to operate on the quest
#
# change_quest_access(:symbol)
# :symbol must be one of six options (include the colon!):
# :disable - prevents access to the quest scene (greys out in menu)
# :enable - enables access to the quest scene
# :disable_menu - this removes the quest option from the menu
# :enable_menu - this adds the quest option to the menu
# :disable_map - this prevents access by key from the map
# :enable_map - this allows access by key to the map
#
# change_quest_background("bg_filename", bg_opacity, bg_blend_type)
# bg_filename : the filename of the picture for the background in
# the Pictures folder
# bg_opacity : the opacity of the background graphic. If
# excluded, this defaults to the value of the setting at line 434.
# bg_blend_type : the blend type of the background graphic. If
# excluded, this defaults to the value of the setting at line 437.
#
# change_quest_windows ("windowskin_filename", tone, opacity)
# windowskin_filename : the name of the Window graphic in the
# System folder of Graphics
# opacity : the opacity of the windows. If excluded,
# this defaults to the value of the setting at line 423.
# blend_type : the blend_type of the windows. If excluded,
# this defaults to the value of the setting at line 426.
#
# Also, there are a few codes that can be used in the Script command of a
# conditional branch. I note here that all of these are optional. You could
# use switch and variable checks and monitor quest progress solely through
# events. However, these commands make it a little easier and they are:
#
# quest_revealed?(quest_id)
# quest_id : the integer ID of the quest you want to access.
# This is satisfied if the quest has been activated.
#
# quest_complete?(quest_id)
# This is satisfied if all prime objectives of the quest are complete
#
# quest_failed?(quest_id)
# This is satisfied if any prime objective of the quest is failed
#
# quest_rewarded?(quest_id)
# This is satisfied if you have changed the reward status to true.
#
# objective_revealed?(quest_id, objective_id_1, ... objective_id_n)
# objective_id_1, ..., objective_id_n : a list of the IDs of the
# objectives you want to operate on. It can be as few as one or as
# many as all of them.
# This is satisfied if the listed objectives have been revealed
#
# objective_active?(quest_id, objective_id_1, ... objective_id_n)
# This is satisfied if all the listed objectives are revealed and
# neither complete nor failed.
#
# objective_complete?(quest_id, objective_id_1, ... objective_id_n)
# This is satisfied if all the listed objectives have been completed
#
# objective_failed?(quest_id, objective_id_1, ... objective_id_n)
# This is satisfied if all the listed objectives have been failed
#
# If you want to call the Quest scene from an event, you use the following
# code in a call script:
#
# call_quest_journal
# call_quest_journal(quest_id)
# quest_id : ID of the quest you want to open the scene on
#
# If you do not specify a quest_id (line 198) then it will simply open the
# scene as it would normally. If you do specify a quest_id (line 199) then it
# will open the scene on that quest so long as it has been revealed and it is
# normally accessible through the quest menu.
#
# Finally, the default way this script operates is that quests automatically
# complete or fail based on the status of the prime objectives. However, you
# can set it so that there are no prime objectives, in which case you can only
# complete, fail, or (re)activate a quest manually through the following code
# in a script call:
#
# manually_complete_quest(quest_id)
# quest_id : ID of the quest you want to manually complete
# manually_fail_quest(quest_id)
# quest_id : ID of the quest you want to manually fail
# manually_activate_quest(quest_id)
# quest_id : ID of the quest you want to manually activate
#==============================================================================

$imported ||= {}
$imported[:"MA_QuestJournal_1.0"] = true
$imported[:"MA_QuestJournal_1.0.1"] = true

#==============================================================================
# *** QuestData
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# This module contains all the configuration data for the quest journal
#==============================================================================

module QuestData
#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
# BEGIN Editable Region A
#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# MENU_ACCESS - If true, you can access the quest journal through a command
# in the menu. If false, there will be no such command.
MENU_ACCESS = true
# MENU_INDEX - If MENU_ACCESS is true, this determines where it appears
MENU_INDEX = 4
# MAP_ACCESS - If true, this allows you to access the quest journal by
# pressing a key on the map.
MAP_ACCESS = true
# MAP_BUTTON - If MAP_ACCESS is true, this determines which button calls the
# Quest Journal
MAP_BUTTON = :L
# OPEN_TO_LAST_REVEALED_QUEST - If true, then the first time you open the
# quest journal after revealing a new quest, it will open to the new quest.
OPEN_TO_LAST_REVEALED_QUEST = true
# OPEN_TO_LAST_CHANGED_QUEST - If true, then the Quest Journal will open to
# the last quest whose objective status has changed.
OPEN_TO_LAST_CHANGED_QUEST = false
# LIST_WINDOW_WIDTH - The width, in pixels, of the List Window
LIST_WINDOW_WIDTH = 192
# BASIC_DATA_TYPES - This lets you set up additional types of data. Just
# include an identifying signal in the Array. Then, you will need to give
# each signal an icon (in the ICONS hash at line 322) and a signal text (in
# the VOCAB array at line 333, though it can be an empty string). Then, you
# can set the data itself when setting up quests by simply adding a:
# q[:symbol] = ""
# line to the quest. You will also need to include the data type somewhere in
# the DATA_LAYOUT at line 306. As an example of this, I have included :client
# and :location by default. You can CTRL+F for anything in this section with
# one of those symbols (excluding :) and you will there need to add something
# for any new data types you add.
BASIC_DATA_TYPES = [:client, :location]
# BASIC_DATA_WIDTH - This determines how much room, in pixels, is given to
# any basic data types you set up in the data window.
BASIC_DATA_WIDTH = 240
# CONCURRENT_ACTIVITY - If true, then when in the Quest Journal scene, you
# can switch categories or scroll down the quest list at the same time. If
# false, you will first need to select a category before you can start
# scrolling through the quest list.
CONCURRENT_ACTIVITY = true
# HIDE_CATEGORY_CURSOR - If true, then the Category Window will not have a
# cursor and will instead just highlight the currently selected category.
# This is best when CONCURRENT_ACTIVITY is true.
HIDE_CATEGORY_CURSOR = true
# SHOW_QUEST_ICONS - If true, then the icon you choose for each quest will
# be displayed to the left of its name in the Quest List window
SHOW_QUEST_ICONS = true
# MANUAL_REVEAL - If false, then quests will be revealed the moment you
# first reveal, complete, or fail an objective. If this is true, you will
# need to specifically reveal each quest via a separate script call:
# reveal_quest(quest_id)
MANUAL_REVEAL = false
# DATA_LAYOUT - This controls the way that the quest window lays out all of
# the relevant data. If you set one of the entries to be an array, then any
# of the commands there will be drawn at the same y. With exception to :line,
# none of the commands will be drawn if the quest is not set to have that
# particular data. The symbols are:
# :line - Draws a horizontal line across the window.
# :name - Draws the name of the quest
# :level - Draws the level of the quest
# :banner - Draws the banner for the quest
# :client - Draws the client set in the quest (basic data)
# :location - Draws the location set in the quest (basic data)
# :description - Draws the quest's description
# :objectives - Draws all the quest's objectives that have been revealed
# :rewards - Draws whatever rewards have been set
#
# You will also need to add an entry for any new BASIC_DATA that you place
# in BASIC_DATA_TYPES at line 264.
#
# Remember to place a comma after each entry. Also note that this is only the
# default layout. You can set a different layout for any quest, and when
# viewing that quest, it will be the custom layout that is shown.
DATA_LAYOUT = [
[:line, :name, :level],
:banner,
:client,
:location,
:description,
:objectives,
[:line, :rewards],
:line,
] # <= Do not touch.
# ICONS - This is where you setup many of the icons used in the script. The
# purpose of each is listed next to it. Also, if you make any custom
# categories, you NEED to give them an icon by placing a line like the
# others. So, if the new custom category is :romance then you would need to
# set it like this:
# romance: 107,
ICONS = {
all: 226, # The icon for the All Quests category
active: 236, # The icon for the Active Quests category
complete: 238, # The icon for the Complete Quests category
failed: 227, # The icon for the Failed Quests category
client: 121, # The icon for client data. If none wanted, set to 0
location: 231, # The icon for location data. If none wanted, set to 0
reward_gold: 262, # The icon for gold rewards. If none wanted, set to 0
reward_exp: 117, # The icon for exp rewards. If none wanted, set to 0
} # <= Do not touch.
# VOCAB - This lets you choose some of the words used in the quest scene
VOCAB = {
# menu_label: The command name in the menu if MENU_ACCESS is true
menu_label: "Quêtes",
# scene_label: The label at the top of the scene. If empty, no window
scene_label: "Journal des quêtes",
# description: The heading to identify the description
description: "Description",
# objectives: The heading to identify the objectives
objectives: "Objectifs",
# objective_bullet: The bullet which shows up to the left of every
# objective. If %d is included, it shows the objective's ID.
objective_bullet: "♦",
# rewards: The heading to identify the rewards.
rewards: "Récompenses",
# reward_amount: For item rewards, this is the text to show the amount.
# It should include %d to show the amount.
reward_amount: "x%d",
# reward_gold: Text to identify gold rewards
reward_gold: "",
# reward_exp: Text to identify exp rewards
reward_exp: "",
# level: If LEVEL_ICON is 0, this is the text which precedes the level
level: "Niveau: ",
# location: The text label for quest location
location: "",
# location: The text label for quest client
client: "",
} # <= Do not touch.
# CATEGORIES - This array allows you to set which categories are available
# in the Quest scene. The default categories are :all, :active, :complete,
# and :failed, and their names are self-explanatory. You can add custom
# categories as well, but note that you will need to make sure that each new
# category has an icon set in the ICONS hash, as well as a label set in the
# CATEGORY_VOCAB hash (if you are using SHOW_CATEGORY_LABEL). It is also
# advisable to give it a sort type, unless you are fine with it being sorted
# by ID, as is default.
CATEGORIES = [:all, :active, :complete, :failed]
# SHOW_CATEGORY_LABEL - This allows you to choose whether to show the name
# of the currently selected category. If true, it will choose the name out
# of the CATEGORY_VOCAB hash.
SHOW_CATEGORY_LABEL = true
# CATEGORY_LABEL_IN_SAME_WINDOW - If SHOW_CATEGORY_LABEL is true, then this
# options lets you choose whether the label is shown in the same window as
# the category icons or in a separate window below. true = same window.
CATEGORY_LABEL_IN_SAME_WINDOW = true
# CATEGORY_VOCAB - If SHOW_CATEGORY_LABEL is true, this hash lets you set the
# label for each category. For any custom categories you create, you will
# need to add a line for each below and in the same format:
# :category => "Label",
# Don't forget to add the comma at the end of each line.
CATEGORY_VOCAB = {
:all => "Toutes les Quêtes", # The label for the :all category
:active => "Quêtes en cours", # The label for the :active category
:complete => "Quêtes terminées", # The label for the :complete category
:failed => "Quêtes échouées", # The label for the :failed category
} # <= Do not touch.
# SORT_TYPE - This hash allows you to choose how each category is sorted.
# For each category, default or custom, you can set a different sort method
# There are seven options to choose from:
# :id - The quests are sorted from lowest to highest ID
# :alphabet - The quests are sorted in alphabetical order
# :level - The quests are sorted from the lowest to highest level
# :reveal - The quests are sorted from most recently revealed on.
# Every time a new quest is revealed, it will be at the top.
# :change - The quests are sorted from the one whose status most recently
# changed on. So, every time an objective is modified, that quest
# will be thrown to the top.
# :complete - The quests are sorted from the most recently completed on.
# Every time a quest is completed, it will be thrown to the top.
# :failed - The quests are sorted from the most recently failed on.
# Every time a quest is failed, it will be thrown to the top.
#
# Additionally, you can put _r at the end of any of the sort options and it
# will reverse the order. So, for instance, if the sort method for a category
# is :alphabet_r, then the quests will show up from Z-A
SORT_TYPE = {
:all => :id, # Sort type for the All Quests category
:active => :change, # Sort type for the Active Quests category
:complete => :complete, # Sort type for the Complete Quests category
:failed => :failed, # Sort type for the Failed Quests category
} # <= Do not touch.
# WINDOWSKIN - The windowskin for each window in the Quest scene. It must
# refer to a graphic in the System folder of Graphics. If set to false, then
# it will use whatever windowskin is default. If you are using a script which
# lets the player choose the windowskin, false is the recommended value.
WINDOWSKIN = false
# WINDOW_TONE - The tone for each window. It must be an array in the form:
# WINDOW_TONE = [red, green, blue, gray]
# gray can be excluded, but the other three must be present. If you set this
# value to false, then the windows will have whatever tone is default.
WINDOW_TONE = false
# WINDOW_OPACITY - The opacity of the windows in the Quest scene. If set to
# false, it will use the default opacity for windows.
WINDOW_OPACITY = false
# BG_PICTURE - This is a string referring to a picture in the Picture folder
# of Graphics. If set to "", then there will be no picture. Otherwise, it
# will display the selected picture below the windows but above the map in
# the Quest scene.
BG_PICTURE = ""
# BG_OPACITY - This allows you to set the opacity of the background picture,
# if you have selected one.
BG_OPACITY = 255
# BG_BLEND_TYPE - This allows you to set the blend type of the background
# picture, if you have selected one.
BG_BLEND_TYPE = 0
# DESCRIPTION_IN_BOX - This is a graphical option, and it allows you to
# choose whether the description should be shown in a box.
DESCRIPTION_IN_BOX = true
# LEVEL_ICON - This sets how levels are shown. If set to an integer, then it
# will draw the same icon numerous times up to the level of the quest. Ie. If
# the level's quest is 1, then the icon will only be drawn once, but if the
# level's quest is 4, it will be drawn 4 times. LEVEL_ICONS_SPACE determines
# the space between them. If you set LEVEL_ICON to 0, however, then it will
# instead draw a signal for the level, corresponding to that index in the
# LEVEL_SIGNALS array. If the LEVEL_SIGNALS array is empty, then it will just
# draw the integer for the level. Finally, LEVEL_ICON can also be an array of
# integers, in which case the level will be represented only by the icon set
# which corresponds to it in the array.
LEVEL_ICON = 125
# LEVEL_ICONS_SPACE - If LEVEL_ICON is an integer, this is the amount of
# space between each time the icon is drawn.
LEVEL_ICONS_SPACE = 16
# LEVEL_SIGNALS - If LEVEL_ICON is 0, this allows you to set what string
# should be the signal for each level. If this array is empty, then it will
# just draw the level integer. Ie. if the Quest is Level 4, it will draw 4.
LEVEL_SIGNALS = ["F", "E", "D", "C", "B", "A", "S"]
# COLOURS - This lets you change the colour for various aspects of the
# quest scene. Each can be set in one of three ways:
# :symbol - If you use a symbol, the colour will be the result of calling
# the method of the same name. For instance, if you set something to
# :system_color, it will set the colour to the result of the Window_Base
# system_color method.
# Integer - If you set the colour to an integer, then it will take its
# colour from the windowskin palette, just like using \c[x] in messages.
# Array - You can also set the rgba values directly with an array in the
# format: [red, green, blue, alpha]. alpha can be excluded, but you must
# have values for red, green, and blue.
COLOURS = {
# active: This sets the colour for active quests in the list and the name
# of the active quest when shown in the data window.
active: :normal_color,
# complete: This sets the colour for complete quests in the list and the
# name of the complete quest when shown in the data window.
complete: 3,
# failed: This sets the colour for failed quests in the list and the name
# of the failed quest when shown in the data window.
failed: 10,
# line: This sets the colour for lines or boxes drawn in the quest scene
line: :system_color,
# line_shadow: This sets the colour of the shadow for lines or boxes drawn
# in the quest scene
line_shadow: [0, 0, 0, 128],
# scene_label: This sets the colour for the scene label, if shown
scene_label: :system_color,
# category_label: This sets the colour for the category label, if shown
category_label: :normal_color,
# level_signal: This sets the colour for the level signal, if shown
level_signal: :normal_color,
# objective_bullet: This sets the colour for objectives; if set to
# :maqj_objective_color, it will reflect the completion status of the
# objective, but you can change it to something else if you prefer
objective_bullet: :maqj_objective_color,
# reward_amount: The colour of the item amount, when shown
reward_amount: :normal_color,
# heading: The colour of any headings in the script, like "Description"
heading: :system_color,
# basic_label: For basic data, like client, the colour of the label
basic_label: :system_color,
# basic_value: For basic data, like client, the colour of the value
basic_value: :normal_color,
} # <= Do not touch.
# HEADING_ALIGN - This sets the alignment for the aspects listed. 0 is Left;
# 1 is Centre; 2 is Right
HEADING_ALIGN = {
description: 0, # Alignment for the Description heading
objectives: 0, # Alignment for the Objectives heading
rewards: 1, # Alignment for the Rewards heading
level: 2 # Alignment when showing the level
} # <= Do not touch.
#````````````````````````````````````````````````````````````````````````````
# Font Aspects
#
# All of the following options (FONTNAMES, FONTSIZES, FONTBOLDS, and
# FONTITALICS) allow you to alter the fonts used for various aspects of the
# scene. The only one listed there by default is normal:, which is the
# font used by default for the entire scene. However, you can change the
# fonts for almost any aspect - all you need to do is add a line like so:
#
# description: value,
#
# and that will change that font aspect when drawing the description. The
# following symbols are available for changing:
#
# normal: The default font used for every part of the scene
# list: The font used in the List Window
# scene_label: The font used when drawing the Scene Label, if shown
# category_label: The font used when drawing the Category Label, if shown
# heading: The font used when drawing any headings, like "Description"
# name: The font used when drawing the quest name in data window
# description: The font used when drawing the Description
# objectives: The font used when drawing the objectives
# rewards: The font used when drawing the rewards
# client: The font used when drawing the client
# location: The font used when drawing the location
#
# For any of them, you need to set a value. What the value can be depends
# on which font aspect you are changing and is described below, but for any
# of them setting it to the false will mean it will simply use the default
#
# For any that you add, remember that you must put a comma after the value.
#````````````````````````````````````````````````````````````````````````````
# FONTNAMES - Here you can change the font used for any of the various
# options. It can take any of the following types of values:
# false - The default font will be used
# "String" - The font with the name "String" will be used.
# [Array] - The array must be in the form: ["String1", "String2", ...]
# The font used will be the first one in the array that the
# player has installed.
#
# EXAMPLES:
#
# normal: false,
# The font used for unaltered aspects of the scene is the default font
# scene_label: "Algerian",
# The font used for the Scene Label will be Algerian.
# description: ["Cambria", "Times New Roman"],
# The font used when drawing the description will be Cambria if the
# player has Cambria installed. If the player does not have Cambria
# installed, then the font used will be Times New Roman
FONTNAMES = {
normal: false, # normal: the default font name
} # <= Do not touch.
# FONTSIZES - Here you can change the size of the font. There are two types
# of values you can set:
# false - The default fontsize will be used
# Integer - The fontsize will be equal to the value of the Integer.
#
# For everything but the label windows, this shouldn't exceed 24, since that
# is the line_height. However, for scene_label: and category_label:, the size
# of the window will be adjusted to whatever size you set the font.
FONTSIZES = {
normal: false, # normal: default font size
scene_label: 28, # scene_label: fontsize for the Scene Label window
category_label: 24, # category_label: fontsize for Category Label window
} # <= Do not touch.
# FONTBOLDS - Here you can set whether the font will be bolded. You can set
# it to either false, in which case it will not be bolded, or true, in which
# case it will be bolded.
FONTBOLDS = {
scene_label: true, # scene_label: whether font is bold for Scene Label
heading: true, # heading: whether font is bold for the headings
level_signal: true, # level_signal: whether font is bold for level
} # <= Do not touch.
# FONTITALICS - Here you can set whether the font will be italicized. You
# can set it to either false, in which case it will not be italicized, or
# true, in which case it will be italicized.
FONTITALICS = {
}
#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# END Editable Region A
#//////////////////////////////////////////////////////////////////////////
CATEGORIES = [:all] if !CATEGORIES || CATEGORIES.empty?
VOCAB.default = ""
ICONS.default = 0
CATEGORY_VOCAB.default = ""
SORT_TYPE.default = :id
COLOURS.default = :normal_color
HEADING_ALIGN.default = 0
FONTNAMES.default = false
FONTSIZES.default = false
FONTBOLDS.default = false
FONTITALICS.default = false
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Setup Quest
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def self.setup_quest(quest_id)
q = { objectives: [] }
case quest_id
#\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
# BEGIN Editable Region B
#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# Quest Setup
#
# This is where you set up the data for every quest in the game. While
# it may seem complicated, I urge you to pay attention and, once you get
# the hang of it, I am sure it will quickly become second nature.
#
# Every single quest should be set up in the following format, but note
# that if you are not setting anything for a particular aspect, you can
# delete that line. Anyway, this is what each quest should look like, with
# the values on the left being the default values if you don't set them:
#
# when quest_id
# q[:name] = "??????"
# q[:icon_index] = 0
# q[:level] = 0
# q[:description] = ""
# q[:banner] = ""
# q[:banner_hue] = 0
# q[:objectives][0] = ""
# q[:objectives][1] = ""
# q[:objectives][2] = ""
# q[:objectives][n] = ""
# q[:prime_objectives] = [0, 1, 2, n]
# q[:custom_categories] = []
# q[:client] = ""
# q[:location] = ""
# q[:rewards] = []
# q[:common_event_id] = 0
# q[:layout] = false
#
# For each line, with the exception of objectives, it is only the value on
# the right of the equals sign that you will need to change. Now I will
# explain each line:
#
# when quest_id
# quest_id - is an integer of your choosing, and this is how you
# reference a quest in order to advance and do anything else. It
# must be unique for every quest; if you use 1 for the first quest,
# you cannot use 1 for any other quest.
#
# q[:name] = ""
# "" - This line sets the name of the quest which shows in the Quest
# List.
#
# q[:icon_index] = 0
# 0 - This line sets the icon to be used for this quest. It will show
# to the left of the quest's name in the Quest List.
#
# q[:level] = 0
# 0 - This line sets the level of the quest. If 0, no level will be
# shown. See the level options at lines 441-458 for more detail.
#
# q[:description] = ""
# "" - This line sets the description of the quest. You can use message
# codes in this string, but if you are using "" then you need to use
# \\ to identify codes and not just \. Ie. It's \\v[x], not \v[x]
#
# q[:objectives][0] = ""
# q[:objectives][1] = ""
# q[:objectives][2] = ""
# q[:objectives][n] = ""
# Objectives are slightly different. Notice that after q[:objectives] on
# each line there is an integer enclosed in square brackets:
# [n] - This is the ID of the objective, and n MUST be an integer. No
# quest can have more than one objective with the same ID. This is
# how you identify which objective you want to reveal, complete or
# fail. That said, you can make as many objectives as you want, as
# long as you give them all distinct IDs. The IDs should be in
# sequence as well, so there shouldn't be a q[:objectives][5] if
# there is no q[:objectives][4].
# "" - This is the text of the objective. You can use message codes in
# this string, but if you are using "" then you will need to use
# \\ to identify codes and not just \. Ie: It's \\v[x], not \v[x]
#
# q[:prime_objectives] = [0, 1, 2, n]
# [0, 1, 2, n] - This array determines what objectives need to be
# completed in order for the quest to be complete. In other words,
# all of the objectives with the IDs in this array need to be
# complete for the quest to be complete. If any one of them is
# failed, the quest will be failed. If you remove this line
# altogether, then all objectives are prime. If you set this to [],
# then the quest will never be automatically completed or failed and
# you need to use the manual options described at lines 208-219.
#
# q[:custom_categories] = []
# [] - This allows you to set an array of custom categories for this
# quest, whiich means this quest will show up in each of those
# categories if you add it to the CATEGORIES array at line 370.
# Note that each category you make must be identified by a unique
# :symbol, and you must set up all the category details for that
# :symbol.
#
# q[:banner] = ""
# "" - This line sets the banner to be used for a quest. It must be the
# filename of an image in the Pictures folder of Graphics.
#
# q[:banner_hue] = 0
# 0 - The hue of the banner graphic, if used
#
# q[:client] = ""
# "" - This line sets the client name for this quest. (basic data)
#
# q[:location] = ""
# "" - This line sets the location of the quest. (basic data)
#
# q[:rewards] = []
# [] - In this array, you can identify particular rewards that will
# show up. Each reward should be in its own array and can be any of
# the following:
# [:item, ID, n],
# [:weapon, ID, n],
# [:armor, ID, n],
# [:gold, n],
# [:exp, n],
# where ID is the ID of the item, weapon or armour you want
# distributed and n is the amount of the item, weapon, armor, gold,
# or experience you want distributed. Additionally, you can also set
# some text to show up in the rewards format but which wouldn't be
# automatically distributed. You would need to specify that type of
# reward text in the following format:
# [:string, icon_index, "string", "vocab"],
# where icon_index is the icon to be shown, "string" is what you
# would show up as the amount, and "vocab" is what would show up as a
# label between the icon and the amount.
#
#
# q[:common_event_id] = 0
# 0 - This allows you to call the identified common event immediately
# and automatically once the quest is completed. It is generally
# not recommended, as for most quests you should be controlling it
# enough not to need this feature.
#
# q[:layout] = false
# false - The default value for this is false, and when it is false the
# layout for the quest will be inherited from the default you set at
# 302. However, you can also give the quest its own layout - the
# format would be the same as you set for the default at line 307.
#
# Template:
#
# When making a new quest, I recommend that you copy and paste the
# following template, removing whichever lines you don't want to alter.
# Naturally, you need to remove the #~. You can do so by highlighting
# the entire thing and pressing CTRL+Q:
#~ when 2 # <= REMINDER: The Quest ID MUST be unique
#~ q[:name] = "??????"
#~ q[:icon_index] = 0
#~ q[:level] = 0
#~ q[:description] = ""
#~ # REMINDER: You can make as many objectives as you like, but each must
#~ # have a unique ID.
#~ q[:objectives][0] = ""
#~ q[:objectives][1] = ""
#~ q[:objectives][2] = ""
#~ q[:prime_objectives] = [0, 1, 2]
#~ q[:custom_categories] = []
#~ q[:banner] = ""
#~ q[:banner_hue] = 0
#~ q[:client] = ""
#~ q[:location] = ""
#~ q[:rewards] = []
#~ q[:common_event_id] = 0
when 1 # Quest 1 - SAMPLE QUEST
q[:name] = "Matière noire"
q[:level] = 1
q[:icon_index] = 367
q[:description] = "Trouver de la matière noire en tuant des ombres."
q[:objectives][0] = "Trouver de la matière noire"
q[:prime_objectives] = [0]
q[:custom_categories] = []
q[:banner] = ""
q[:banner_hue] = 0
q[:client] = "Marchand d'armes"
q[:location] = "Kachiri"
q[:common_event_id] = 0
q[:rewards] = [
[:gold, 250],
[:exp, 750],
]
q[:layout] = false
#||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
# END Editable Region B
#//////////////////////////////////////////////////////////////////////
end
q
end
end

#==============================================================================
# *** DataManager
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# aliased method - self.extract_save_contents
#==============================================================================

class << DataManager
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Extract Save Contents
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias maqj_extractsavecons_2kw5 extract_save_contents
def extract_save_contents(*args, &block)
maqj_extractsavecons_2kw5(*args, &block) # Call Original Method
if $game_party.quests.nil?
$game_party.init_maqj_data
$game_system.init_maqj_data
end
end
end

#==============================================================================
# ** MAQJ_SortedArray
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# This module mixes in to an array to maintain the sorted order when inserting
#==============================================================================

module MAQJ_SortedArray
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Insert to Array
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def maqj_insert_sort(el, &block)
index = bsearch_index(el, 0, size, &block)
index ? insert(index, el) : push(el)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Retrieve Index from Binary Search
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def bsearch_index(el, b = 0, e = size, &block)
return bsearch_index(el, b, e) { |a,b| a <=> b } if block.nil?
return b if b == e # Return the discovered insertion index
return if b > e
m = (b + e) / 2 # Get Middle
block.call(el, self[m]) > 0 ? b = m + 1 : e = m
bsearch_index(el, b, e, &block)
end
end

#==============================================================================
# ** Game_Quest
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# This class holds all instance data for a quest
#==============================================================================

class Game_Quest
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Public Instance Variables
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
attr_reader :id # Unique identifier for this quest
attr_reader :name # The name to be shown for the quest
attr_reader :level # The level of difficulty of the quest
attr_reader :objectives # An array of objective strings
attr_reader :prime_objectives # An array of crucial objective IDs
attr_reader :revealed_objectives # An array of revealed objective IDs
attr_reader :complete_objectives # An array of completed objective IDs
attr_reader :failed_objectives # An array of failed objective IDs
attr_reader :custom_categories # An array of category symbols
attr_accessor :icon_index # Icon associated with this quest
attr_accessor :common_event_id # ID of common event to call upon complete
attr_accessor :description # The description for the quest
attr_accessor :banner # Picture shown to represent the quest
attr_accessor :banner_hue # The hue of the banner
attr_accessor :layout # The layout of this quest in scene
attr_accessor :rewards # An array of rewards to show
attr_accessor :reward_given # Boolean tracking if quest was rewarded
attr_accessor :concealed # Whether or not the quest is visible
attr_accessor :manual_status # Quest status if not using prime objectives
QuestData::BASIC_DATA_TYPES.each { |data_type| attr_accessor(data_type) }
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def initialize(quest_id)
@id = quest_id
@concealed = default_value_for(:concealed)
@reward_given = default_value_for(:reward_given)
reset
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Reset
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def reset
data = QuestData.setup_quest(@id)
data_symbol_array.each { |meth| instance_variable_set(:"@#{meth}",
data[meth] ? data[meth] : default_value_for(meth)) }
@revealed_objectives = [].send(:extend, MAQJ_SortedArray)
@complete_objectives = [].send(:extend, MAQJ_SortedArray)
@failed_objectives = [].send(:extend, MAQJ_SortedArray)
@manual_status = default_value_for(:manual_status)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Data Symbol Array
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def data_symbol_array
[:name, :level, :objectives, :prime_objectives, :custom_categories,
:icon_index, :description, :banner, :banner_hue, :common_event_id,
:layout, :rewards] + QuestData::BASIC_DATA_TYPES
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Default Value
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def default_value_for(method)
case method
when :name then "??????"
when :description, :banner then ""
when :level, :banner_hue, :icon_index, :common_event_id then 0
when :objectives, :rewards, :custom_categories then []
when :prime_objectives then Array.new(objectives.size) { |x| x }
when :concealed then QuestData::MANUAL_REVEAL
when :manual_status then :active
when :layout, :reward_given then false
else ""
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Reveal/Conceal Objective
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def reveal_objective(*obj)
valid_obj = obj.select {|x| x < objectives.size && !@revealed_objectives.include?(x) }
valid_obj.each {|i| @revealed_objectives.maqj_insert_sort(i) }
quest_status_changed unless valid_obj.empty?
end
def conceal_objective(*obj)
quest_status_changed unless (obj & @revealed_objectives).empty?
obj.each { |obj_id| @revealed_objectives.delete(obj_id) }
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Complete/Uncomplete Objective
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def complete_objective(*obj)
valid_obj = obj.select {|x| x < objectives.size && !@complete_objectives.include?(x) }
reveal_objective(*valid_obj)
unfail_objective(*valid_obj)
was_complete = status?(:complete)
valid_obj.each {|i| @complete_objectives.maqj_insert_sort(i) }
quest_status_changed unless valid_obj.empty?
# If just completed
if status?(:complete) && !was_complete
$game_temp.reserve_common_event(common_event_id)
$game_party.quests.add_to_sort_array(:complete, @id)
end
end
def uncomplete_objective(*obj)
quest_status_changed unless (obj & @complete_objectives).empty?
obj.each { |obj_id| @complete_objectives.delete(obj_id) }
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Fail/Unfail Objective
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def fail_objective(*obj)
valid_obj = obj.select {|x| x < objectives.size && !@failed_objectives.include?(x) }
reveal_objective(*valid_obj)
uncomplete_objective(*valid_obj)
was_failed = status?(:failed)
valid_obj.each {|i| @failed_objectives.maqj_insert_sort(i) }
quest_status_changed unless valid_obj.empty?
$game_party.quests.add_to_sort_array(:failed, @id) if status?(:failed) && !was_failed
end
def unfail_objective(*obj)
quest_status_changed unless (obj & @failed_objectives).empty?
obj.each { |obj_id| @failed_objectives.delete(obj_id) }
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Updates when the quest status has been changed
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def quest_status_changed
$game_party.quests.add_to_sort_array(:change, @id)
$game_system.last_quest_id = @id if QuestData::OPEN_TO_LAST_CHANGED_QUEST
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Objective Status?
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def objective_status?(status_check, *obj)
return false if obj.empty?
case status_check
when :failed then !(obj & @failed_objectives).empty?
when :complete then obj.size == (obj & @complete_objectives).size
when :revealed then obj.size == (obj & @revealed_objectives).size
when :active then objective_status?(:revealed, *obj) &&
!objective_status?(:complete, *obj) && !objective_status?(:failed, *obj)
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Status?
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def status?(status_check)
case status_check
when :failed
@prime_objectives.empty? ? @manual_status == :failed :
!(@failed_objectives & @prime_objectives).empty?
when :complete
@prime_objectives.empty? ? @manual_status == :complete : !status?(:failed) &&
((@prime_objectives & @complete_objectives) == @prime_objectives)
when :active then !concealed && !status?(:complete) && !status?(:failed)
when :reward then @reward_given
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Set Name
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def name=(new_name)
@name = new_name
$game_party.quests.add_to_sort_array(:alphabet, @id) if $game_party &&
$game_party.quests
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Set Level
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def level=(new_lvl)
@level = new_lvl
$game_party.quests.add_to_sort_array(:level, @id) if $game_party &&
$game_party.quests
end
end

#==============================================================================
# ** Game_Quests
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# This is a wrapper for an array holding Game_Quest objects
#==============================================================================

class Game_Quests
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def initialize
@data = {}
@sort_arrays = {
reveal: [], change: [], complete: [], failed: [],
id: [].send(:extend, MAQJ_SortedArray),
alphabet: [].send(:extend, MAQJ_SortedArray),
level: [].send(:extend, MAQJ_SortedArray)
}
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Get Quest
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def [](quest_id)
reset_quest(quest_id) if !@data[quest_id]
@data[quest_id]
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Set Quest <- Not sure when this would ever be useful.
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def []=(quest_id, value)
@data[quest_id] = value
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * List
# list_type : the type of list to return
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def list(list_type = :all, sort_type = $game_system.quest_sort_type[list_type])
sort_type_s = sort_type.to_s
reverse = !(sort_type_s.sub!(/_r$/, "")).nil?
sort_type = sort_type_s.to_sym
list = @sort_arrays[sort_type].select { |quest_id| include?(quest_id, list_type) }
list.reverse! if reverse
list.collect { |quest_id| @data[quest_id] }
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Include?
# determines whether to include a particular quest depending on list type
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def include?(quest_id, list_type = :all)
return false if !revealed?(quest_id)
case list_type
when :all then true
when :complete, :failed, :active then @data[quest_id].status?(list_type)
else
@data[quest_id].custom_categories.include?(list_type)
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Revealed?
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def revealed?(quest_id)
(!@data[quest_id].nil? && !@data[quest_id].concealed)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Setup Quest
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def setup_quest(quest_id)
return if @data[quest_id]
@data[quest_id] = Game_Quest.new(quest_id)
# Open to this quest next time the QJ is opened
$game_system.last_quest_id = quest_id if QuestData::OPEN_TO_LAST_REVEALED_QUEST
# Save sorting order in separate arrays to avoid re-sorting every time
@sort_arrays.keys.each { |sym| add_to_sort_array(sym, quest_id) }
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Delete Quest
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def delete_quest(quest_id)
@data.delete(quest_id)
@sort_arrays.values.each { |ary| ary.delete(quest_id) }
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Reset Quest
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def reset_quest(quest_id)
delete_quest(quest_id)
setup_quest(quest_id)
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Add to Sorted Array
# sort_type : array to alter
# quest_id : ID of the quest to add.
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def add_to_sort_array(sort_type, quest_id)
@sort_arrays[sort_type].delete(quest_id) # Make sure always unique
case sort_type
when :reveal, :change, :complete, :failed
@sort_arrays[sort_type].unshift(quest_id)
when :id
@sort_arrays[sort_type].maqj_insert_sort(quest_id)
when :alphabet
@sort_arrays[sort_type].maqj_insert_sort(quest_id) { |a, b| @data[a].name.downcase <=> @data.name.downcase }
when :level
@sort_arrays[sort_type].maqj_insert_sort(quest_id) { |a, b| @data[a].level <=> self.level }
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Find Location
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def find_location(quest_id, cat = nil)
if revealed?(quest_id)
categories = $game_system.quest_categories.dup
# If cat specified, check in that category first.
if cat && categories.include?(cat)
categories.delete(cat)
categories.unshift(cat)
end
for category in categories # Check all categories
index = list(category).index(@data[quest_id])
return category, index if index != nil
end
end
return nil, nil
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Clear
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def clear
@data.clear
end
end

#==============================================================================
# ** Game System
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# new attr_accessor - quest_menu_access; quest_map_access; quest_sort_type;
# quest_bg_picture; quest_bg_opacity; quest_windowskin;
# quest_window_opacity; quest_access_disabled; last_quest_cat;
# last_quest_id
# aliased methods - initialize
# new methods - init_maqj_data
#==============================================================================

class Game_System
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Public Instance Variables
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
attr_reader :quest_menu_access # Whether the scene is called from menu
attr_accessor :quest_map_access # Whether the scene is called from map
attr_accessor :quest_sort_type # The sort types for each category
attr_accessor :quest_bg_picture # The filename of the background picture
attr_accessor :quest_bg_opacity # The opacity of the background picture
attr_accessor :quest_bg_blend_type # The blend type of the background pic
attr_accessor :quest_windowskin # The windowskin used for the scene
attr_accessor :quest_window_tone # The tone of windows in the scene
attr_accessor :quest_window_opacity # The opacity of windows in the scene
attr_accessor :quest_access_disabled # Whether access to Quests is disabled
attr_accessor :quest_categories # The categories to show in the scene
attr_accessor :quest_scene_label # The label to show in the scene
attr_accessor :last_quest_cat # The category to open to
attr_accessor :last_quest_id # The ID to open to
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias maqj_initialze_2cy9 initialize
def initialize(*args, &block)
maqj_initialze_2cy9(*args, &block)
init_maqj_data
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Initialize Quest Data
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def init_maqj_data
# Initialize new variables
self.quest_menu_access = QuestData::MENU_ACCESS
@quest_map_access = QuestData::MAP_ACCESS
@quest_sort_type = QuestData::SORT_TYPE
@quest_bg_picture = QuestData::BG_PICTURE
@quest_bg_opacity = QuestData::BG_OPACITY
@quest_bg_blend_type = QuestData::BG_BLEND_TYPE
@quest_windowskin = QuestData::WINDOWSKIN
@quest_window_tone = QuestData::WINDOW_TONE
@quest_window_opacity = QuestData::WINDOW_OPACITY
@quest_access_disabled = false
@quest_categories = QuestData::CATEGORIES
@quest_scene_label = QuestData::VOCAB[:scene_label]
@last_quest_cat = @quest_categories[0]
@last_quest_id = 0
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Set Quest Menu Access
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def quest_menu_access=(boolean)
@quest_menu_access = boolean
maic_inserted_menu_commands.delete(:quest_journal)
maic_inserted_menu_commands.push(:quest_journal) if @quest_menu_access
maic_inserted_menu_commands.sort!
end
end

#==============================================================================
# ** Game_Party
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# new attr_reader - quests
# aliased method - initialize
# new method - init_maqj_data
#==============================================================================

class Game_Party
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Public Instance Variables
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
attr_reader :quests
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Object Initialization
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
alias maqj_intiaze_2si9 initialize
def initialize(*args, &block)
maqj_intiaze_2si9(*args, &block) # Call Original Method
init_maqj_data
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Initialize Quests
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def init_maqj_data
@quests = Game_Quests.new # Initialize @quests
end
end

#==============================================================================
# ** Game_Interpreter
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Summary of Changes:
# new methods - change_quest_access; change_quest_background;
# change_quest_windows; setup_quest; delete_quest; reset_quest; quest;
# reveal_quest; conceal_quest; manually_complete_quest;
# manually_fail_quest; reveal_objective; conceal_objective;
# complete_objective; uncomplete_objective; fail_objective;
# unfail_objective; quest_revealed?; quest_complete?; quest_active?;
# quest_failed?; objective_complete?; objective_active?;
# objective_failed?; distribute_quest_rewards; distribute_quest_reward;
# call_quest_journal
#==============================================================================

class Game_Interpreter
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Change Quest Access
# sym : symbol representing what aspect of access is being changed
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
def change_quest_access(sym)
case sym
when :enable then $game_system.quest_access_disabled = false
when :disable then $game_system.quest_access_disabled = true
when :enable_menu then $game_system.quest_menu_access = true
when :disable_menu then $game_system.quest_menu_access = false
when :enable_map then $game_system.quest_map_access = true
when :disable_map then $game_system.quest_map_access = false
end
end
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# * Change Quest Background
# picture : pi


Astellan - posté le 15/12/2016 à 19:07:00. (1 messages postés)

Bonjour, j'ai un pitit problème que je ne sais résoudre, à l'avant dernière ligne et la dernière il me met un message d'erreur.


corbac83100 - posté le 18/12/2016 à 11:16:03. (9 messages postés)

Geek

bonjour il a l'aire bien mais je n'arrive pas a applet le scipts via un éventement ou un envenimement communs. comment faire?

Citation:

Astellan - posté le 15/12/2016 à 19:07:00. (1 messages postés)
Bonjour, j'ai un pitit problème que je ne sais résoudre, à l'avant dernière ligne et la dernière il me met un message d'erreur.



note: le scripts et trop long pour l’afficher donc va sur le lien pour récupéré le scripts originale. car il manque une bonne parti.

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
#==============================================================================
#    Quest Journal [VXA]
#    Version: 1.0.3
#    Author: modern algebra (rmrk.net)
#    Date: 24 September 2012
#    Support: http://rmrk.net/index.php/topic,45127.0.html
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# La description:
#
# Ce script fournit une interface graphique pour montrer les progrès de la quête. Il
# Est axée sur les objectifs, ce qui signifie que vous choisissez lors de révéler les objectifs et
# Vous pouvez le configurer de sorte qu'ils apparaissent comme terminée ou a échoué. Cela dit, cette
# Script ne construit pas des quêtes pour vous; il est seulement une scène supplémentaire pour
# Les montrer. En tant que tel, vous avez besoin à l'événement toutes les quêtes vous et
# Progrès de la quête de mise à jour via l'appel de script. Par conséquent, faites attention à
# Les instructions ici et dans les régions éditables sur les lignes 232 et 612.
# +++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++
# Instructions:
#
# Collez ce script dans son propre ou les fentes, au-dessus et au-dessous principale
# Matériaux. Si vous utilisez la fonctionnalité d'accès au menu, vous devez mettre tout
# autres scripts de menu ci-dessus celui-ci.
#
# Tous de la configuration se fait dans le module Quête données. Bien qu'il ne soit pas
# Nécessaire, il est recommandé de séparer le module de configuration
# Du reste du script en coupant et collant dans sa propre fente
# Script Editor (comme vous le verrez si vous avez la démo). La raison pour
# Ceci est que, si et quand ce script est mis à jour, vous pouvez préserver la
# Section de configuration et seulement remplacer les autres parties du script. Si
# Que vous souhaitez faire, vous devez couper tout de la première ligne vers le bas pour
# L'extrémité finale du module. Les premières lignes du script de corps devrait être
# Les égaux bar juste au-dessus # ** Game_Quest. Encore une fois, il est à vous si
# Tu le fais.
#
# Vous pouvez aller à EDITABLE REGION A à la ligne 232 pour configurer la valeur par défaut
# paramètres du script. Tous ces éléments vont bien fonctionner sans modification,
# Bien sûr, mais même si vous ne voulez pas configurer maintenant, vous devez familiariser
#-Vous avec tous les paramètres afin que vous puissiez tirer le meilleur parti de votre
# Script. J'ai inclus des tonnes de paramètres de sorte que vous pouvez faire la quête
# Journal unique pour votre jeu, même jusqu'à l'ordre dans lequel chaque section
# De la fenêtre d'information est tirée. Une brève description de chaque réglage est
# Inclus soit à droite ou directement au-dessus de chaque constante.
#
# EDITABLE REGION B est le vrai coeur du script mais - ceci est où
# Vous remplissez tous les détails pour les quêtes. Lisez les instructions à
# Ligne 612 très attentivement!
#
# Vous pouvez activer et accéder à une quête avec ce code dans l'événement Script
# Commande:
#
# Quest (quest_id)
# Quest_id: l'ID d'entier de la quête que vous voulez accéder
#
# De là, vous pouvez accéder ou modifier les données pertinentes stockées dans la quête,
# Comme nom, description, objectifs, etc ... Exemple:
# Quête (1) .name = "Rest in Pieces"
#
# Plus pertinente, en ce qui concerne le contrôle de l'état d'avancement des quêtes les
# codes suivants peuvent être utilisés dans une commande d'événement Script. Les arguments sont
# La même chose pour chaque commande donc je n'expliquer une fois. Elles sont toutes
# Assez explicite et en utilisant l'un d'eux va activer la quête
# (Sauf si vous utilisez le MANUEL Révéler la mise à la ligne 267).
#
# Reveal_objective (quest_id, objective_id_1, ..., objective_id_n)
# Quest_id: l'ID d'entier de la quête que vous souhaitez accéder.
# Objective_id_1, ..., objective_id_n: une liste des ID de la
# objectifs que vous souhaitez opérer. Il peut être aussi peu qu'une ou comme
# Autant que chacun d'entre eux.
# Montrera les objectifs énumérés dans les informations de la Quête
#
# Conceal_objective (quest_id, objective_id_1, ..., objective_id_n)
# Cachera les objectifs énumérés dans les informations de la Quête
#
# Complete_objective (quest_id, objective_id_1, ..., objective_id_n)
# Change la couleur des objectifs énumérés à la couleur terminée.
# La quête est terminée une fois que tous les objectifs principaux sont.
#
# Uncomplete_objective (quest_id, objective_id_1, ..., objective_id_n)
# Change l'état des objectifs complets énumérés retour à actif
#
# Fail_objective (quest_id, objective_id_1, ..., objective_id_n)
# Change la couleur des objectifs énumérés à la couleur a échoué.
# La quête a échoué une fois un objectif premier est.
#
# Unfail_objective (quest_id, objective_id_1, ..., objective_id_n)
# Change l'état des objectifs énumérés échoué vers actif
#
# Change_reward_status (quest_id, valeur)
# Valeur: vrai ou faux. Si exclus, par défaut à true.
# Totalement facultatif, mais ceci est juste un interrupteur personnel que vous pouvez
# Tour quand la récompense est donnée. Vous pouvez alors faire une condition
# Afin de ne pas récompenser les joueurs plus d'une fois. (Voir la ligne 180)
#
# EXEMPLES:
# Reveal_objective (1, 0)
# Ce serait révéler le premier objectif de la quête avec ID 1
# Complete_objective (6, 2, 3)
# Ceci compléterait les troisième et quatrième objectifs de la quête avec ID 6
# Change_reward_status (8)
# Ce serait mettre le commutateur de récompense à vrai pour la recherche avec l'ID 8.
#
# Une autre nouveauté est la possibilité de définir des récompenses qui apparaîtra dans le
# Menu (voir EDITABLE REGION B). En plus de cela, vous pouvez utiliser ce qui suit
# Code pour distribuer automatiquement les récompenses spécifiées pour une quête si le
# Quête est terminée et aucune récompense n'a encore été donné:
#
# distribute_quest_rewards (quest_id)
# Quest_id: l'ID de la quête dont les récompenses que vous voulez distribuer
#
# Bien sûr, il ne peut distribuer les récompenses matérielles (objets, armes,
# blindages, or, ou exp). Il ne distribuera pas les récompenses que vous spécifiez par chaîne.
# À cette fin cependant, vous pouvez également utiliser ce code dans une branche conditionnelle et
# Elle sera satisfaite que si elle distribue les récompenses. Ainsi, si vous
# Voulait ajouter quelques récompenses spéciales ou faire des choses comme cela, vous pouvez simplement mettre
# Que dans la branche pour quand il est vrai. Cette fonctionnalité est pas vraiment
# Recommandé, car je pense qu'il est préférable de le faire par les événements.
#
# D'autres codes pour la commande d'événement Script qui peut être utile sont:
#
# Reset_quest (quest_id)
# Quest_id: l'ID d'entier de la quête que vous souhaitez accéder.
# Cette ré-initialiser la recherche, ce qui signifie tous les progrès de quête pour
# Date sera perdu
#
# Delete_quest (quest_id)
# Désactive la quête et réinitialise
#
# Conceal_quest (quest_id)
# Désactive la quête afin de ne pas apparaître dans la scène, mais les progrès
# Est enregistré
#
# Reveal_quest (quest_id)
# Active ou réactive la quête. Cette commande est nécessaire si
# MANUAL_REVEAL à la ligne 284 est vrai ou il a déjà été
# Caché. Sinon, il suffit simplement d'opérer sur la quête
#
# Change_quest_access (symbole:)
#: Symbole doit être l'une des six options (inclure le colon!):
#: Disable - empêche l'accès à la scène de la quête (gris dans le menu)
#: Enable - permet d'accéder à la scène de quête
#: Disable_menu - cela supprime l'option de recherche dans le menu
#: Enable_menu - ce qui ajoute l'option de recherche au menu
#: Disable_map - ce qui empêche l'accès par la clé de la carte
#: Enable_map - ce qui permet un accès par clé de la carte
#
# Change_quest_background( «bg_filename», bg_opacity, bg_blend_type)
# Bg_filename: le nom du fichier de l'image pour l'arrière-plan
# Le dossier Images
# Bg_opacity: l'opacité du graphique de fond. Si
# Exclus, la valeur par défaut à la valeur du paramètre à la ligne 434.
# Bg_blend_type: le type de l'image de fond de mélange. Si
# Exclus, la valeur par défaut à la valeur du paramètre à la ligne 437.
#
# change_quest_windows ( "windowskin_filename", le ton, l'opacité)
# Windowskin_filename: le nom de la bannière de la fenêtre dans la
# dossier Graphics System 
# Opacité: l'opacité des fenêtres. Si exclus,
# La valeur par défaut à la valeur du paramètre à la ligne 423.
# Blend_type: le blend_type des fenêtres. Si exclus,
# La valeur par défaut à la valeur du paramètre à la ligne 426.
#
# En outre, il y a quelques codes qui peuvent être utilisés dans la commande d'un script
# Branchement conditionnel. Je note ici que tous ces éléments sont en option. Vous pourriez
# interrupteur utilisation et les contrôles variables et les progrès de la quête du moniteur uniquement par
# événements. Cependant, ces commandes font un peu plus facile et ils sont:
#
# Quest_revealed? (Quest_id)
# Quest_id: l'ID d'entier de la quête que vous souhaitez accéder.
# Ceci est satisfaite si la quête a été activé.
#
# Quest_complete? (Quest_id)
# Ceci est satisfaite si tous les objectifs principaux de la recherche sont complets
#
# Quest_failed? (Quest_id)
# Ceci est satisfait si tout premier objectif de la quête a échoué
#
# Quest_rewarded? (Quest_id)
# Ceci est satisfait si vous avez modifié le statut de récompense pour vrai.
#
# Objective_revealed ? (Quest_id, objective_id_1 ... objective_id_n)
# Objective_id_1, ..., objective_id_n: une liste des ID de la
# objectifs que vous souhaitez opérer. Il peut être aussi peu qu'une ou comme
# Autant que chacun d'entre eux.
# Ceci est satisfait si les objectifs énumérés ont été révélés
#
# Objective_active ? (Quest_id, objective_id_1 ... objective_id_n)
# Ceci est satisfaite si tous les objectifs énumérés sont révélés et
# Ni complètes, ni échoué.
#
# Objective_complete? (Quest_id, objective_id_1 ... objective_id_n)
# Ceci est satisfaite si tous les objectifs énumérés ont été achevés
#
# Objective_failed ? (Quest_id, objective_id_1 ... objective_id_n)
# Ceci est satisfaite si tous les objectifs énumérés ont été omis
#
# Si vous voulez appeler la scène Quête d'un événement, vous utilisez ce qui suit
# Code dans un script d'appel:
#
# call_quest_journal
# Call_quest_journal (quest_id)
# Quest_id: ID de la quête que vous voulez ouvrir la scène sur
#
# Si vous ne spécifiez pas de quest_id (ligne 198), alors il sera tout simplement ouvrir la
# Scène comme il le ferait normalement. Si vous spécifiez un quest_id (ligne 199), alors il
# Ouvrira la scène sur cette quête aussi longtemps qu'il a été révélé et il est
# Normalement accessible via le menu de quête.
#
# Enfin, le chemin par défaut de ce script fonctionne est que les quêtes automatiquement
# Complète ou échouer en fonction de l'état des principaux objectifs. Cependant, vous
# Peut le mettre pour qu'il n'y ait pas d'objectifs premiers, dans ce cas, vous ne pouvez
# Complète, échouent, ou (re) activer une quête manuellement à travers le code suivant
# Dans un appel de script:
#
# Manually_complete_quest (quest_id)
# Quest_id: ID de la quête que vous souhaitez manuellement complète
# Manually_fail_quest (quest_id)
# Quest_id: ID de la quête que vous voulez à l'échec manuellement
# Manually_activate_quest (quest_id)
# Quest_id: ID de la quête que vous voulez activer manuellement
# ==============================================================================
 
$imported ||= {}
$imported[:"MA_QuestJournal_1.0"] = true
$imported[:"MA_QuestJournal_1.0.1"] = true
 
#==============================================================================
# *** QuestData
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Ce module contient toutes les données de configuration pour le journal de quête
#==============================================================================
 
module QuestData
  #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  #  BEGIN éditable Région A
  #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  #  ACCÈS MENU - Si cela est vrai, vous pouvez accéder au journal de quête à travers une commande 
  # dans le menu. Si elle est fausse, il n'y aura pas une telle commande.
  MENU_ACCESS = true
  #  INDEX MENU - D'ACCES MENU est vrai, ce qui détermine où il apparaît
  MENU_INDEX = 4
  #  ACCESS MAP - Si cela est vrai, cela vous permet d'accéder au journal de quête par 
  # appuyant sur une touche sur la carte.
  MAP_ACCESS = true
  #  MAP_BUTTON - Si MAP_ACCESS est vrai, ce qui détermine quel bouton appelle la
  # Quête Journal
  MAP_BUTTON = :Q
  # OPEN_TO_LAST_REVEALED_QUEST - Si cela est vrai, alors la première fois que vous ouvrez le Journal 
  # quête après avoir révélé une nouvelle quête, il sera ouvert à la nouvelle quête.
  OPEN_TO_LAST_REVEALED_QUEST = true
  #  OPEN_TO_LAST_CHANGED_QUEST - Si cela est vrai , alors le Journal Quest ouvrir
  # La dernière quête dont le statut objectif a changé .
  OPEN_TO_LAST_CHANGED_QUEST = false
  # FENÊTRE WIDTH - La largeur, en pixels, de la fenêtre de liste
  LIST_WINDOW_WIDTH = 192
  # TYPES  DONNÉES DE BASE - Cela vous permet de configurer d'autres types de données. Juste 
  # incluent un signal d'identification dans le tableau. Ensuite, vous devez donner 
  # chaque signal une icône (dans le hachage ICONS à la ligne 322) et un texte de signal (dans 
  # le réseau de VOCAB à la ligne 333, mais il peut être une chaîne vide). Ensuite, vous 
  # pouvez définir les données lui-même lors de la configuration des quêtes en ajoutant simplement un: 
  # q [symbole] = "" 
  # ligne à la quête. Vous aurez également besoin d'inclure le type de données quelque part dans 
  # la disposition des données à la ligne 306. Comme exemple de cela, j'ai inclus: client 
  # et: emplacement par défaut. Vous pouvez CTRL + F pour rien dans cette section avec 
  # un de ces symboles (hors :) et vous y besoin d'ajouter quelque chose 
  # pour tous les nouveaux types de données que vous ajoutez.
  BASIC_DATA_TYPES = [:client, :location]
  # DONNÉES DE BASE LARGEUR - Ceci détermine combien d'espace, en pixels, est donné à 
  # tout type de données de base que vous définissez dans la fenêtre de données.
  BASIC_DATA_WIDTH = 240
  # ACTIVITÉ CONCURRENT - Si cela est vrai, alors quand dans la scène Quête Journal, vous pouvez passer 
  # catégories ou faire défiler la liste des quêtes en même temps. Si 
  # false, vous devez d'abord sélectionner une catégorie avant de pouvoir commencer 
  # faire défiler la liste de quête.
  CONCURRENT_ACTIVITY = true
  # HIDE CATEGORIE CURSOR - Si cela est vrai, alors la fenêtre Catégorie aura pas un 
  # curseur et au lieu simplement mettre en évidence la catégorie sélectionnée.
  # Ceci est mieux quand ACTIVITÉ CONCURRENT est vrai.
  HIDE_CATEGORY_CURSOR = true
  # SHOW_QUEST_ICONS - Si cela est vrai, alors l'icône que vous choisissez pour chaque quête
  # Être affiché à gauche de son nom dans la fenêtre Liste des quêtes
  SHOW_QUEST_ICONS = true
  # MANUEL Reveal - Si false, quêtes sera révélé au moment où vous 
  # premier révéler, complet, ou ne l'objectif. Si cela est vrai, vous 
  # besoin de révéler spécifiquement chaque quête via un appel de script distinct: 
  # révèle la quête (quête id)
  MANUAL_REVEAL = false
  # DATA LAYOUT - Ce contrôle la façon dont la fenêtre de quête expose toutes 
  # les données pertinentes. Si vous définissez l'une des entrées comme un tableau, alors toute 
  # des commandes, il sera établi en même y. A l'exception de: ligne, 
  # aucune des commandes sera établie si la quête est pas réglé pour avoir que 
  # données particulières. Les symboles sont: 
  #: Ligne - Dessine une ligne horizontale à travers la fenêtre. 
  #: Nom - Dessine le nom de la quête 
  #: niveau - Dessine le niveau de la quête 
  #: bannière - Dessine la bannière pour la quête 
  #: client - Dessine le client défini dans la quête (données de base) 
  #: emplacement - Dessine l'emplacement défini dans la quête (données de base) 
  #: Description - Tirages de la quête Description de 
  #: objectifs - Dessine tous les objectifs de la quête qui ont été révélées 
  #: récompenses - Dessine ce que les récompenses ont été mis en 
  # 
  # Vous aurez aussi besoin d'ajouter un entrée pour toute nouvelle BASIC_DATA que vous placez dans 
  # TYPES dE DONNÉES dE BASE à la ligne 264. 
  # 
  # Rappelez-vous de placer une virgule après chaque entrée. A noter également que ce n'est que la mise en page par défaut 
  #. Vous pouvez définir une mise en page différente pour toute quête, et quand 
  # visualiser cette quête, il sera la mise en page personnalisée qui est montré.
  DATA_LAYOUT = [
    [:line, :name, :level],
    :banner,
    :client,
    :location,
    :description,
    :objectives,
    [:line, :rewards],
    :line,
  ] # <= Ne touchez pas.
   # ICONS - C'est l'endroit où vous avez installé plusieurs des icônes utilisées dans le script. le
   # But de chacun est indiqué à côté de lui. En outre, si vous faites une coutume
   # catégories, vous devez leur donner une icône en plaçant une ligne comme
   # autres. Donc, si la nouvelle catégorie personnalisée est: la romance alors vous aurait besoin de
   # Défini comme ceci:
   # Roman: 107,
  ICONS = {
    all:         226, # L'icône de la catégorie Toutes les Quêtes
    active:      236, # L'icône de la catégorie Quêtes active
    complete:    238, # L'icône de la catégorie complète Quêtes
    failed:      227, # L'icône de la catégorie Quêtes Échec
    client:      121, # L'icône de données client. Si aucune voulait, mis à 0
    location:    231, # L'icône de données de localisation. Si aucune voulait, mis à 0
    reward_gold: 262, # L'icône pour les récompenses d'or. Si aucune voulait, mis à 0
    reward_exp:  117, # L'icône de récompenses exp. Si aucune voulait, mis à 0
  } # <= Ne touchez pas.
   # VOCABULAIRE - Cela vous permet de choisir quelques-uns des mots utilisés dans la scène de quête
  VOCAB = {
    # Étiquette de menu: Le nom de la commande dans le menu si ACCESS MENU est vrai
    menu_label:       "Quests",
    # étiquette de scène : L'étiquette en haut de la scène. Si elle est vide, pas de fenêtre
    scene_label:      "Journal de Quest",
    # Description: Le titre pour identifier la description
    description:      "Description",
    # objectifs: Le titre pour identifier les objectifs
    objectives:       "Objectives",
    # balle objectif: La balle qui apparaît à la gauche de chaque 
    # objectif. Si% d est inclus, il affiche l'ID d'objectifs.
    objective_bullet: "?",
    # récompenses: Le titre pour identifier les récompenses.
    rewards:          "Récompenses",
    # récompenser montant: Pour objets de récompense, ceci est le texte pour montrer la quantité. 
    # Il devrait inclure% d pour montrer la quantité.
    reward_amount:    "x%d",
    # récompenser l'or: texte pour identifier les récompenses d'or
    reward_gold:      "€",
    # récompense exp: texte pour identifier les récompenses exp
    reward_exp:       "",
    # niveau: Si LEVEL_ICON est 0, ceci est le texte qui précède le niveau
    level:            "Rang: ",
    # Situation: L'étiquette de texte pour l'emplacement de quête
    location:         "",
    # Lieu: L'étiquette de texte pour le client de quête
    client:           "",
  } # <= Ne touchez pas. 
  # CATEGORIES - Ce tableau vous permet de définir les catégories sont disponibles 
  # dans la scène de Quest. Les catégories par défaut sont: tous,: actif,: complet, 
  # et: a échoué, et leurs noms sont explicites. Vous pouvez ajouter des 
  # catégories, mais notez que vous devez vous assurer que chaque nouvelle 
  # catégorie a une icône située dans le hachage ICONS, ainsi qu'un jeu d'étiquettes dans le hachage 
  # CATEGORIE VOCAB (si vous utilisez MONTRER CATÉGORIE LABEL). Il est également conseillé 
  # pour lui donner un type de tri, sauf si vous êtes bien avec elle étant triés par ID 
  #, comme cela est par défaut.
  CATEGORIES = [:all, :active, :complete, :failed]
  #  MONTRER CATEGORIE LABEL - Cela vous permet de choisir d'afficher ou non le nom 
  # de la catégorie sélectionnée. Si cela est vrai, il choisira le nom sur 
  # de la table de hachage CATEGORIE VOCAB.
  SHOW_CATEGORY_LABEL = true
  #  CATEGORIE LABEL_IN_SAME_WINDOW - Si SHOW_CATEGORY_LABEL est vrai, alors ce 
  # Options vous permet de choisir si l'étiquette est affichée dans la même fenêtre que 
  # les icônes de catégorie ou dans une fenêtre séparée ci-dessous. true = même fenêtre.
  CATEGORY_LABEL_IN_SAME_WINDOW = true
  #  CATEGORIE VOCABULAIRE - Si SHOW_CATEGORY_LABEL est vrai, ce hachage vous permet de définir la 
  # étiquette pour chaque catégorie. Pour toutes les catégories personnalisées que vous créez, vous 
  # besoin d'ajouter une ligne pour chaque ci-dessous et dans le même format: #: category => "label", 
  # Ne pas oublier d'ajouter la virgule à la fin de chaque ligne.
  CATEGORY_VOCAB = {
    :all =>      "Toutes les quêtes",      # The label for the :all category
    :active =>   "Quêtes actives",   # The label for the :active category
    :complete => "Quêtes complètes", # The label for the :complete category
    :failed =>   "Quêtes échouées",   # The label for the :failed category
  } # <= Ne touchez pas. 
  # SORT TYPE - Ce hachage vous permet de choisir comment chaque catégorie est triée. 
  # Pour chaque catégorie, par défaut ou personnalisé, vous pouvez définir une autre méthode de tri 
  # Il y a sept options à choisir: 
  #: id - Les quêtes sont triées de la plus faible à ID le plus élevé 
  #: alphabet - Les quêtes sont triés par ordre alphabétique 
  # : niveau - les quêtes sont triés du plus bas au plus haut niveau 
  #: révèlent - les quêtes sont triées de la plus récemment révélé sur. 
  # Chaque fois qu'une nouvelle quête est révélée, il sera au sommet. 
  #: Changement - Les quêtes sont classifiées de celui dont le statut le plus récent 
  # changé sur. Ainsi, chaque fois qu'un objectif est modifié, cette quête 
  # sera jeté vers le haut. 
  #: Toutes - Les quêtes sont triés du plus récemment terminé sur. 
  # Chaque fois qu'une quête est terminée, il sera jeté vers le haut. 
  #: Échec - Les quêtes sont triés du plus récemment échoué sur. 
  # Chaque fois qu'une quête échoue, il sera jeté vers le haut.
  #
  # De plus, vous pouvez mettre _r à la fin de l'une des options de tri et 
  # allez inverser l'ordre. Ainsi, par exemple, si la méthode de tri pour une catégorie 
  # est: alphabet r, les quêtes s'affichera de Z-A 
  #: échoué - Les quêtes sont triées de la plus récemment échoué sur. 
  # Chaque fois qu'une quête échoue, il sera jeté vers le haut.
  SORT_TYPE = {
    :all =>      :id,       # Sort type for the All Quests category
    :active =>   :change,   # Sort type for the Active Quests category
    :complete => :complete, # Sort type for the Complete Quests category
    :failed =>   :failed,   # Sort type for the Failed Quests category
  } # <= Ne touchez pas. 
  # WINDOW PEAU - La peau de fenêtre pour chaque fenêtre dans la scène Quest. Il doit 
  # se référer à un graphique dans le dossier système de Graphics. Si elle est définie sur false, 
  # il utilisera tout ce qui est windowskin par défaut. Si vous utilisez un script qui 
  # permet au joueur de choisir le windowskin, false est la valeur recommandée.
  WINDOWSKIN = false
  #  WINDOW TO - La tonalité de chaque fenêtre. Il doit être un tableau sous la forme: TONE 
  # WINDOW = [rouge, vert, bleu, gris] 
  # gris peut être exclue, mais les trois autres doivent être présents. Si vous définissez cette 
  # valeur à false, les fenêtres ont tout ce ton est par défaut.
  WINDOW_TONE = false
  # WINDOW OPACITY - L'opacité des fenêtres de la scène Quest. Si la valeur 
  # false, il utilisera l'opacité par défaut pour les fenêtres.
  WINDOW_OPACITY = false
  # BG_PICTURE - Ceci est une chaîne faisant référence à une image dans le dossier Image
  # Graphics. Si réglé sur "", alors il n'y aura pas d'image. Dans le cas contraire, il
  # Affiche l'image sélectionnée sous les fenêtres mais au-dessus de la carte en
  # La scène Quest.
  BG_PICTURE = ""
  # BG OPACITY - Cela vous permet de définir l'opacité de l'image de fond, 
  # si vous avez sélectionné.
  BG_OPACITY = 255
  # BG_BLEND_TYPE - Cela vous permet de définir le type de l'arrière-plan de mélange
  # Photo, si vous avez sélectionné.
  BG_BLEND_TYPE = 0
  # DESCRIPTION_IN_BOX - Ceci est une option graphique, et il vous permet de
  # Choisir si la description doit être affiché dans une boîte.
  DESCRIPTION_IN_BOX = true
  #  LEVEL_ICON - This sets how levels are shown. If set to an integer, then it
  # will draw the same icon numerous times up to the level of the quest. Ie. If
  # the level's quest is 1, then the icon will only be drawn once, but if the
  # level's quest is 4, it will be drawn 4 times. LEVEL_ICONS_SPACE determines
  # the space between them. If you set LEVEL_ICON to 0, however, then it will
  # instead draw a signal for the level, corresponding to that index in the
  # LEVEL_SIGNALS array. If the LEVEL_SIGNALS array is empty, then it will just
  # draw the integer for the level. Finally, LEVEL_ICON can also be an array of
  # integers, in which case the level will be represented only by the icon set
  # which corresponds to it in the array.
  LEVEL_ICON = 125
  # NIVEAU ICÔNES SPACE - Si ICON LEVEL est un entier, cela est la quantité de 
  # espace entre chaque fois que l'icône est dessinée.
  LEVEL_ICONS_SPACE = 16
  #  SIGNAUX DE NIVEAU - Si LEVEL_ICON est 0, ce qui vous permet de définir quelle chaîne 
  # devrait être le signal pour chaque niveau. Si ce tableau est vide, alors il sera juste 
  # tirer l'entier de niveau. C'est à dire. si la quête est de niveau 4, il attirera 4.
  LEVEL_SIGNALS = ["F", "E", "D", "C", "B", "A", "S"]
  #  COLOURS - Cela vous permet de modifier la couleur des différents aspects de la scène 
  # quête. Chacun peut être défini dans l'une des trois façons: 
  #: symbole - Si vous utilisez un symbole, la couleur sera le résultat de l'appel 
  # la méthode du même nom. Par exemple, si vous définissez quelque chose à 
  #: system_color, il définir la couleur du résultat de la méthode de la couleur 
  # système Windows Base. 
  # Entier - Si vous réglez la couleur à un nombre entier, il prendra sa 
  # couleur dans la palette de windowskin, tout comme l'utilisation \ c [x] dans les messages. 
  # Array - Vous pouvez également définir les valeurs de rgba directement avec un tableau dans le format 
  #: [rouge, vert, bleu, alpha]. alpha peut être exclue, mais vous devez 
  # avoir des valeurs pour le rouge, le vert et le bleu.
  COLOURS = {
    # Actif: Ceci définit la couleur pour les quêtes actives dans la liste et le nom
    # De la quête active lorsque apparaît dans la fenêtre de données.
    active:           :normal_color,
    # Complète: Ceci définit la couleur pour les quêtes dans la liste et le
    # Nom de la quête terminée lorsque apparaît dans la fenêtre de données.
    complete:         3,
    # A échoué: Ceci définit la couleur pour les quêtes échoué dans la liste et le nom
    # De la quête a échoué lorsque affiché dans la fenêtre de données.
    failed:           10,
    # Ligne: Ceci définit la couleur des lignes ou des boîtes dessinée dans la scène de quête
    line:             :system_color,
    # Ligne ombre: Ceci définit la couleur de l'ombre pour les lignes ou les boîtes dessinée 
    # dans la scène de quête
    line_shadow: [0, 0, 0, 128],
    # Label scène: Ceci définit la couleur de l'étiquette de la scène, se montre
    scene_label:      :system_color,
    # Catégorie label: Ceci définit la couleur pour la catégorie étiquette, si montré
    category_label:   :normal_color,
    #le signal de niveau : Ceci définit la couleur pour le signal de niveau, si montré
    level_signal:     :normal_color,
    # objective_bullet: Ceci définit la couleur pour les objectifs; si mis à
    #: Maqj_objective_color, il reflétera l'état d'achèvement du
    # Objectif, mais vous pouvez le changer à autre si vous préférez quelque chose
    objective_bullet: :maqj_objective_color,
    # Montant de la récompense: La couleur de la quantité de l'article, lorsqu'elle est présentée
    reward_amount:    :normal_color,
    # rubrique: La couleur de toutes les rubriques dans le script, comme "Description"
    heading:          :system_color,
    # étiquette de base: Pour les données de base, comme client, la couleur de l'étiquette
    basic_label:      :system_color,
    # valeur de base: Pour les données de base, comme client, la couleur de la valeur
    basic_value:      :normal_color,
  } # <= Ne touchez pas. 
   # RUBRIQUE ALIGN - Cela définit l'alignement pour les aspects énumérés. 0 est à gauche; 
   # 1 est Centre; 2 est droit
  HEADING_ALIGN = {
    description: 0, # Alignement de la tête Description
    objectives:  0, # Alignement de la rubrique Objectifs
    rewards:     1, # Alignement de la rubrique Récompenses
    level:       2  # Alignement en montrant le niveau
  } # <= Do not touch.
  #````````````````````````````````````````````````````````````````````````````
  #    Aspects Font 
  # 
  # Toutes les options suivantes (noms de police, la TAILLES, FONTBOLDS et 
  # POLICES italiques) vous permettent de modifier les polices utilisées pour divers aspects de la 
  # scène. Le seul qui y est mentionnée par défaut est :, normale qui est la 
  # police utilisée par défaut pour toute la scène. Cependant, vous pouvez modifier les polices 
  # pour presque tous les aspects - tout ce que vous devez faire est d'ajouter une ligne comme ceci:
  #
  #    description: valeur,
  #
  # Et cela va changer cet aspect de la police lors de l'élaboration de la description. le
  # symboles suivants sont disponibles pour le changement:
  #
  #   normal:         La police par défaut utilisée pour chaque partie de la scène
  #   list:           La police utilisée dans la fenêtre Liste
  #   scene_label:    Tla police utilisée lors de l'élaboration du label Scène, si montré
  #   category_label: The font used when drawing the Category Label, if shown
  #   heading:        The font used when drawing any headings, like "Description"
  #   name:           The font used when drawing the quest name in data window
  #   description:    The font used when drawing the Description
  #   objectives:     The font used when drawing the objectives
  #   rewards:        The font used when drawing the rewards
  #   client:         The font used when drawing the client
  #   location:       The font used when drawing the location
  #
  # Pour l'un d'eux, vous devez définir une valeur. Qu'est-ce que la valeur peut être dépend
  # Sur lequel la police aspect que vous modifiez et est décrit ci-dessous, mais pour tout
  # De les mettre à la fausse signifie qu'il sera tout simplement utiliser la valeur par défaut
  #
  # For any that you add, remember that you must put a comma after the value.
  #````````````````````````````````````````````````````````````````````````````
  #  FONTNAMES - Here you can change the font used for any of the various
  # options. It can take any of the following types of values:
  #     false    - The default font will be used
  #     "String" - The font with the name "String" will be used.
  #     [Array]  - The array must be in the form: ["String1", "String2", ...]
  #               The font used will be the first one in the array that the
  #               player has installed.
  #
  #  EXAMPLES:
  #
  #    normal:      false,
  #     La police utilisée pour les aspects non altérées de la scène est l'étiquette 
  # scène de police par défaut: "algérien", 
  # La police utilisée pour le label de Scène sera algérienne. 
  # Description: [ "Cambria", "Times New Roman"], 
  # La police utilisée lors de l'élaboration de la description sera Cambria si le joueur 
  # a installé Cambria. Si le joueur n'a pas de Cambria 
  # installé, la police utilisée sera Times New Roman
  FONTNAMES = {
    normal: false, # normal: the default font name
  } # <= Do not touch.
  #  FONTSIZES - Here you can change the size of the font. There are two types
  # of values you can set:
  #    false   - The default fontsize will be used
  #    Integer - The fontsize will be equal to the value of the Integer.
  #  
  # For everything but the label windows, this shouldn't exceed 24, since that
  # is the line_height. However, for scene_label: and category_label:, the size
  # of the window will be adjusted to whatever size you set the font.
  FONTSIZES = {
    normal:         false, # normal: default font size
    scene_label:    28,    # scene_label: fontsize for the Scene Label window
    category_label: 24,    # category_label: fontsize for Category Label window
  } # <= Do not touch.
  #  FONTBOLDS - Here you can set whether the font will be bolded. You can set
  # it to either false, in which case it will not be bolded, or true, in which
  # case it will be bolded.
  FONTBOLDS = {
    scene_label:  true, # scene_label: whether font is bold for Scene Label
    heading:      true, # heading: whether font is bold for the headings
    level_signal: true, # level_signal: whether font is bold for level
  } # <= Do not touch.
  #  FONTITALICS - Here you can set whether the font will be italicized. You
  # can set it to either false, in which case it will not be italicized, or
  # true, in which case it will be italicized.
  FONTITALICS = {
  }
  #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  #  END Editable Region A
  #//////////////////////////////////////////////////////////////////////////
  CATEGORIES = [:all] if !CATEGORIES || CATEGORIES.empty?
  VOCAB.default = ""
  ICONS.default = 0
  CATEGORY_VOCAB.default = ""
  SORT_TYPE.default = :id
  COLOURS.default = :normal_color
  HEADING_ALIGN.default = 0
  FONTNAMES.default = false
  FONTSIZES.default = false
  FONTBOLDS.default = false
  FONTITALICS.default = false
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Setup Quest
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.setup_quest(quest_id)
    q = { objectives: [] }
    case quest_id
    #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    #  BEGIN Editable Region B
    #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    #   Configuration Quest
    #
    # Ceci est l'endroit où vous configurez les données pour toutes les quêtes dans le jeu. Tandis que
    # Il peut sembler compliqué, je vous invite à faire attention et, une fois que vous obtenez
    # Le coup de lui, je suis sûr qu'il va rapidement devenir une seconde nature.
    #
    # Chaque quête unique devrait être mis en place dans le format suivant, mais la note
    # Que si vous n'êtes pas tout ce paramètre pour un aspect particulier, vous pouvez
    # Supprimer cette ligne. Quoi qu'il en soit, voici ce que chaque quête devrait ressembler, avec
    # Les valeurs sur la gauche étant les valeurs par défaut si vous ne les définissez pas:
    #
    #  when quest_id
    #   q[:name]              = "??????"
    #   q[:icon_index]        = 0
    #   q[:level]             = 0
    #   q[:description]       = ""
    #   q[:banner]            = ""
    #   q[:banner_hue]        = 0
    #   q[:objectives][0]     = ""
    #   q[:objectives][1]     = ""
    #   q[:objectives][2]     = ""
    #   q[:objectives][n]     = ""
    #   q[:prime_objectives]  = [0, 1, 2, n]
    #   q[:custom_categories] = []
    #   q[:client]            = ""
    #   q[:location]          = ""
    #   q[:rewards]           = []
    #   q[:common_event_id]   = 0
    #   q[:layout]            = false
    #
    #  Pour chaque ligne, à l'exception des objectifs, il est seulement la valeur
    # Le droit du signe égal que vous aurez besoin de changer. Maintenant je vais
    # Expliquer chaque ligne:
    #
    # when quest_id
    #    quest_id - est un entier de votre choix, ce qui est la façon dont vous
    # Référence une quête afin de faire avancer et de faire autre chose. Il
    # Doit être unique pour chaque quête; si vous utilisez 1 pour la première quête,
    # Vous ne pouvez pas utiliser 1 pour toute autre quête.
    #
    #   q[:name]              = ""
    #     "" - Cette ligne définit le nom de la quête qui montre dans la quête
    # Liste.
    #  
    #   q[:icon_index]        = 0
    #     0  - Cette ligne définit l'icône à utiliser pour cette quête. Il montrera 
    # à la gauche du nom de l'invité dans la Liste des quêtes.
    #
    #   q[:level]             = 0
    #     0  - Cette ligne définit le niveau de la quête. Si 0 , aucun niveau sera
    # Montré . Voir les options de niveau de lignes 441-458 pour plus de détails .
    #  
    #   q[:description]       = ""
    #    "" - Cette ligne définit la description de la quête. Vous pouvez utiliser un message
    # codes dans cette chaîne , mais si vous utilisez " " alors vous devez utiliser
    # \\ Pour identifier les codes et pas seulement \ . C'est à dire. Il est \\ v [x] , pas \ v [x]
    #
    #   q[:objectives][0]     = ""
    #   q[:objectives][1]     = ""
    #   q[:objectives][2]     = ""
    #   q[:objectives][n]     = ""
    #  Les objectifs sont légèrement différents. Remarqué que, après q [objectifs] sur 
    # chaque ligne il y a un nombre entier entre crochets: 
    # [n] - Ceci est l'ID de l'objectif, et n doit être un entier. No 
    # quête peut avoir plus d'un objectif avec le même ID. Ceci est 
    # comment vous identifier quel objectif vous voulez révéler, complète ou 
    # échouez. Cela dit, vous pouvez faire autant d'objectifs que vous voulez, comme 
    # longtemps que vous leur donnez tous les ID distincts. Les ID doivent être en 
    # séquence aussi, donc il ne devrait pas être un q [objectifs] [5] si 
    # il n'y a pas q [objectifs] [4]. 
    # "" - Ceci est le texte de l'objectif. Vous pouvez utiliser des codes de message dans 
    # cette chaîne, mais si vous utilisez "" alors vous aurez besoin d'utiliser 
    # \\ pour identifier les codes et pas seulement \. Ie: Il est \\ v [x], pas \ v [x] #
    #   q[:prime_objectives]  = [0, 1, 2, n]
    #     [0, 1, 2, n] - Ce tableau détermine quels objectifs doivent être
     # Achevé pour que la quête soit complète. En d'autres termes,
     # Tous les objectifs avec les ID de ce tableau doivent être
     # Complet pour la quête pour être complète. Si l'un d'eux est
     # A échoué, la quête sera échoué. Si vous supprimez cette ligne
     # Tout à fait, tous les objectifs sont premiers. Si vous réglez cette option sur [],
     # Puis la quête ne sera jamais automatiquement terminée ou a échoué et
     # Vous devez utiliser les options manuelles décrites aux lignes 208-219.
    #
    #   q[:custom_categories] = []
    #     [] - Cela vous permet de définir un éventail de catégories personnalisées pour cette 
    # quête, ce qui signifie que cette quête sera affiché dans chacune de ces 
    # catégories si vous l'ajoutez au tableau CATÉGORIES à la ligne 370. 
    # Notez que chaque catégorie que vous faites doit être identifié par un unique, 
    #: symbole, et vous devez configurer tous les détails des catégories pour ce 
    #: symbole.
    #
    #   q[:banner]            = ""
    #     "" - Cette ligne définit la bannière à utiliser pour une quête. Il doit être
    # Nom de l'image dans le dossier Images de Graphics.
    #
    #   q[:banner_hue]        = 0
    #     0 - La teinte de la bannière graphique, si elle est utilisée
    #
    #   q[:client]            = ""
    #     "" - Cette ligne définit le nom du client pour cette quête. (donnee de base)
    #
    #   q[:location]          = ""
    #     "" - Cette ligne définit l'emplacement de la quête. (donnee de base)
    #
    #   q[:rewards]           = []
    #    [] - Dans ce tableau, vous pouvez identifier notamment les récompenses qui seront
    # arriver. Chaque récompense devrait être dans son propre réseau et peut être l'un des
    # le suivant:
    #          [:item, ID, n],
    #          [:weapon, ID, n],
    #          [:armor, ID, n],
    #          [:gold, n],
    #          [:exp, n],
    #       où ID est l'ID de l'élément, l'arme ou l'armure que vous voulez 
    # distribué et n est la quantité de l'élément, arme, armure, or, 
    # ou de l'expérience que vous voulez distribué. En outre, vous pouvez également définir 
    # texte à apparaître dans le format de récompenses, mais qui ne serait pas 
    # distribué automatiquement. Vous auriez besoin de spécifier ce type de texte 
    # récompense dans le format suivant: 
    # [: string, icon_index, "string", "vocab"], 
    # où l'index de l'icône est l'icône pour être montré, "string" est ce que vous 
    # apparaîtrait comme la quantité, et "vocab" est ce qui apparaîtra comme une étiquette 
    # entre l'icône et le montant.
    #      
    #
    #   q[:common_event_id]   = 0
    #     0  - Cela vous permet d'appeler immédiatement l'événement commun identifiés
    # Et automatiquement une fois la quête terminée. Il est en général
    # Pas recommandé, comme pour la plupart des quêtes que vous devriez le contrôlez
    # Assez pour ne pas avoir besoin de cette fonctionnalité.
    #
    #   q[:layout]            = false
    #     false - La valeur par défaut pour ce qui est faux , et quand il est fausse, le
    # Mise en page pour la quête sera héritée de la valeur par défaut que vous définissez à
    # 302. Cependant, vous pouvez également donner la quête de sa propre mise en page - la
    # Le format serait le même que celui défini pour la valeur par défaut à la ligne 307 .
    #  
    # Template:
    #
    #  Lorsque vous effectuez une nouvelle quête , je recommande que vous copiez et collez le
    # Suivant modèle, la suppression selon les lignes que vous ne voulez pas modifier .
    # Naturellement, vous devez retirer le # ~ . Vous pouvez le faire en mettant en évidence
    # La chose entière et en appuyant sur CTRL + Q :
# ~ when 2 # < = RAPPEL: La Quête ID DOIT être unique
#~       q[:name]              = "??????"
#~       q[:icon_index]        = 0
#~       q[:level]             = 0
#~       q[:description]       = ""
#~       # RAPPEL: Vous pouvez faire autant d'objectifs que vous le souhaitez, mais chacun doit
# ~      # Ont un identifiant (ID) unique.
#~       q[:objectives][0]     = ""
#~       q[:objectives][1]     = ""
#~       q[:objectives][2]     = ""
#~       q[:prime_objectives]  = [0, 1, 2]
#~       q[:custom_categories] = []
#~       q[:banner]            = ""
#~       q[:banner_hue]        = 0
#~       q[:client]            = ""
#~       q[:location]          = ""
#~       q[:rewards]           = []
#~       q[:common_event_id]   = 0
    when 1 # Quest 1 - SAMPLE QUEST
      q[:name]              = "misson infiltration"
      q[:level]             = 1
      q[:icon_index]        = 7
      q[:description]       = "infiltre la base rebelle et volet le prototipe de chasseur."
      q[:objectives][0]     = "prendre l'assenceur 2 et monté au 3eme"
      q[:objectives][1]     = "passet les controle"
      q[:objectives][2]     = "piraté les basse de donné"
      q[:objectives][3]     = "fuire avec les chasseur"
      q[:prime_objectives]  = [1, 2]
      q[:custom_categories] = []
      q[:banner]            = ""
      q[:banner_hue]        = 0
      q[:client]            = "Magort"
      q[:location]          = "basse rebelle"
      q[:common_event_id]   = 0
      q[:rewards]           = [
        [:item, 1, 3],
        [:gold, 500],
      ]
      q[:layout]            = false
    #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    #  END Editable Region B
    #//////////////////////////////////////////////////////////////////////
    end
    q
  end
end
 
#==============================================================================
# *** DataManager
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Summary of Changes:
#    aliased method - self.extract_save_contents
#==============================================================================
 
class << DataManager
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Extract Save Contents
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias maqj_extractsavecons_2kw5 extract_save_contents
  def extract_save_contents(*args, &block)
    maqj_extractsavecons_2kw5(*args, &block) # Call Original Method
    if $game_party.quests.nil?
      $game_party.init_maqj_data
      $game_system.init_maqj_data
    end
  end
end
 
#==============================================================================
# ** MAQJ_SortedArray
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  This module mixes in to an array to maintain the sorted order when inserting
#==============================================================================
 
module MAQJ_SortedArray
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Insert to Array
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def maqj_insert_sort(el, &block)
    index = bsearch_index(el, 0, size, &block)
    index ? insert(index, el) : push(el)
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Retrieve Index from Binary Search
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def bsearch_index(el, b = 0, e = size, &block)
    return bsearch_index(el, b, e) { |a,b| a <=> b } if block.nil?
    return b if b == e # Return the discovered insertion index
    return if b > e
    m = (b + e) / 2    # Get Middle
    block.call(el, self[m]) > 0 ? b = m + 1 : e = m 
    bsearch_index(el, b, e, &block) 
  end
end
 
#==============================================================================
# ** Game_Quest
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  This class holds all instance data for a quest
#==============================================================================
 
class Game_Quest
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Public Instance Variables
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  attr_reader   :id                  # Unique identifier for this quest
  attr_reader   :name                # The name to be shown for the quest
  attr_reader   :level               # The level of difficulty of the quest
  attr_reader   :objectives          # An array of objective strings
  attr_reader   :prime_objectives    # An array of crucial objective IDs
  attr_reader   :revealed_objectives # An array of revealed objective IDs
  attr_reader   :complete_objectives # An array of completed objective IDs
  attr_reader   :failed_objectives   # An array of failed objective IDs
  attr_reader   :custom_categories   # An array of category symbols
  attr_accessor :icon_index          # Icon associated with this quest
  attr_accessor :common_event_id     # ID of common event to call upon complete
  attr_accessor :description         # The description for the quest
  attr_accessor :banner              # Picture shown to represent the quest
  attr_accessor :banner_hue          # The hue of the banner
  attr_accessor :layout              # The layout of this quest in scene
  attr_accessor :rewards             # An array of rewards to show
  attr_accessor :reward_given        # Boolean tracking if quest was rewarded
  attr_accessor :concealed           # Whether or not the quest is visible
  attr_accessor :manual_status       # Quest status if not using prime objectives
  QuestData::BASIC_DATA_TYPES.each { |data_type| attr_accessor(data_type) }
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Object Initialization
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def initialize(quest_id)
    @id = quest_id
    @concealed = default_value_for(:concealed)
    @reward_given = default_value_for(:reward_given)
    reset
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Reset
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def reset
    data = QuestData.setup_quest(@id)
    data_symbol_array.each { |meth| instance_variable_set(:"@#{meth}", 
      data[meth] ? data[meth] : default_value_for(meth)) }
    @revealed_objectives = [].send(:extend, MAQJ_SortedArray)
    @complete_objectives = [].send(:extend, MAQJ_SortedArray)
    @failed_objectives =   [].send(:extend, MAQJ_SortedArray)
    @manual_status = default_value_for(:manual_status)
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Data Symbol Array
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def data_symbol_array
    [:name, :level, :objectives, :prime_objectives, :custom_categories, 
      :icon_index, :description, :banner, :banner_hue, :common_event_id, 
      :layout, :rewards] + QuestData::BASIC_DATA_TYPES
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Default Value
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def default_value_for(method)
    case method
    when :name then "??????"
    when :description, :banner then ""
    when :level, :banner_hue, :icon_index, :common_event_id then 0
    when :objectives, :rewards, :custom_categories then []
    when :prime_objectives then Array.new(objectives.size) { |x| x }
    when :concealed then QuestData::MANUAL_REVEAL
    when :manual_status then :active
    when :layout, :reward_given then false
    else ""
    end
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Reveal/Conceal Objective
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def reveal_objective(*obj)
    valid_obj = obj.select {|x| x < objectives.size && !@revealed_objectives.include?(x) }
    valid_obj.each {|i| @revealed_objectives.maqj_insert_sort(i) }
    quest_status_changed unless valid_obj.empty?
  end
  def conceal_objective(*obj)
    quest_status_changed unless (obj & @revealed_objectives).empty?
    obj.each { |obj_id| @revealed_objectives.delete(obj_id) }
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Complete/Uncomplete Objective
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def complete_objective(*obj)
    valid_obj = obj.select {|x| x < objectives.size && !@complete_objectives.include?(x) }
    reveal_objective(*valid_obj)
    unfail_objective(*valid_obj)
    was_complete = status?(:complete)
    valid_obj.each {|i| @complete_objectives.maqj_insert_sort(i) }
    quest_status_changed unless valid_obj.empty?
    # If just completed
    if status?(:complete) && !was_complete
      $game_temp.reserve_common_event(common_event_id)
      $game_party.quests.add_to_sort_array(:complete, @id)
    end
  end
  def uncomplete_objective(*obj)
    quest_status_changed unless (obj & @complete_objectives).empty?
    obj.each { |obj_id| @complete_objectives.delete(obj_id) }
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Fail/Unfail Objective
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def fail_objective(*obj)
    valid_obj = obj.select {|x| x < objectives.size && !@failed_objectives.include?(x) }
    reveal_objective(*valid_obj)
    uncomplete_objective(*valid_obj)
    was_failed = status?(:failed)
    valid_obj.each {|i| @failed_objectives.maqj_insert_sort(i) }
    quest_status_changed unless valid_obj.empty?
    $game_party.quests.add_to_sort_array(:failed, @id) if status?(:failed) && !was_failed
  end
  def unfail_objective(*obj)
    quest_status_changed unless (obj & @failed_objectives).empty?
    obj.each { |obj_id| @failed_objectives.delete(obj_id) }
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Updates when the quest status has been changed
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def quest_status_changed
    $game_party.quests.add_to_sort_array(:change, @id) 
    $game_system.last_quest_id = @id if QuestData::OPEN_TO_LAST_CHANGED_QUEST
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Objective Status?
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def objective_status?(status_check, *obj)
    return false if obj.empty?
    case status_check
    when :failed   then !(obj & @failed_objectives).empty?
    when :complete then obj.size == (obj & @complete_objectives).size
    when :revealed then obj.size == (obj & @revealed_objectives).size
    when :active then objective_status?(:revealed, *obj) && 
      !objective_status?(:complete, *obj) && !objective_status?(:failed, *obj)
    end
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Status?
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def status?(status_check)
    case status_check
    when :failed  
      @prime_objectives.empty? ? @manual_status == :failed : 
        !(@failed_objectives & @prime_objectives).empty?
    when :complete
      @prime_objectives.empty? ? @manual_status == :complete : !status?(:failed) && 
        ((@prime_objectives & @complete_objectives) == @prime_objectives)
    when :active then !concealed && !status?(:complete) && !status?(:failed)
    when :reward then @reward_given
    end
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Set Name
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def name=(new_name)
    @name = new_name
    $game_party.quests.add_to_sort_array(:alphabet, @id) if $game_party && 
      $game_party.quests
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Set Level
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def level=(new_lvl)
    @level = new_lvl
    $game_party.quests.add_to_sort_array(:level, @id) if $game_party && 
      $game_party.quests
  end
end
 
#==============================================================================
# ** Game_Quests 
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  This is a wrapper for an array holding Game_Quest objects
#==============================================================================
 
class Game_Quests
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Object Initialization
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def initialize
    @data = {}
    @sort_arrays = {
      reveal: [], change: [], complete: [], failed: [],
      id:       [].send(:extend, MAQJ_SortedArray),
      alphabet: [].send(:extend, MAQJ_SortedArray),
      level:    [].send(:extend, MAQJ_SortedArray)
    }
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Get Quest
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def [](quest_id)
    reset_quest(quest_id) if !@data[quest_id]
    @data[quest_id]
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Set Quest <- Not sure when this would ever be useful.
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def []=(quest_id, value)
    @data[quest_id] = value
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * List
  #    list_type : the type of list to return
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def list(list_type = :all, sort_type = $game_system.quest_sort_type[list_type])
    sort_type_s = sort_type.to_s
    reverse = !(sort_type_s.sub!(/_r$/, "")).nil?
    sort_type = sort_type_s.to_sym
    list = @sort_arrays[sort_type].select { |quest_id| include?(quest_id, list_type) }
    list.reverse! if reverse
    list.collect { |quest_id| @data[quest_id] }
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Include?
  #    determines whether to include a particular quest depending on list type
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def include?(quest_id, list_type = :all)
    return false if !revealed?(quest_id)
    case list_type
    when :all then true
    when :complete, :failed, :active then @data[quest_id].status?(list_type)
    else
      @data[quest_id].custom_categories.include?(list_type)
    end
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Revealed? 
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def revealed?(quest_id)
    (!@data[quest_id].nil? && !@data[quest_id].concealed)
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Setup Quest
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def setup_quest(quest_id)
    return if @data[quest_id]
    @data[quest_id] = Game_Quest.new(quest_id)
    # Open to this quest next time the QJ is opened
    $game_system.last_quest_id = quest_id if QuestData::OPEN_TO_LAST_REVEALED_QUEST
    # Save sorting order in separate arrays to avoid re-sorting every time
    @sort_arrays.keys.each { |sym| add_to_sort_array(sym, quest_id) }
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Delete Quest
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def delete_quest(quest_id)
    @data.delete(quest_id)
    @sort_arrays.values.each { |ary| ary.delete(quest_id) }
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Reset Quest
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def reset_quest(quest_id)
    delete_quest(quest_id)
    setup_quest(quest_id)
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Add to Sorted Array
  #    sort_type : array to alter
  #    quest_id  : ID of the quest to add.
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def add_to_sort_array(sort_type, quest_id)
    @sort_arrays[sort_type].delete(quest_id) # Make sure always unique
    case sort_type
    when :reveal, :change, :complete, :failed
      @sort_arrays[sort_type].unshift(quest_id)
    when :id
      @sort_arrays[sort_type].maqj_insert_sort(quest_id)
    when :alphabet 
      @sort_arrays[sort_type].maqj_insert_sort(quest_id) { |a, b| @data[a].name.downcase <=> @data[b].name.downcase }
    when :level
      @sort_arrays[sort_type].maqj_insert_sort(quest_id) { |a, b| @data[a].level <=> self[b].level }
    end
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Find Location
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def find_location(quest_id, cat = nil)
    if revealed?(quest_id)
      categories = $game_system.quest_categories.dup
      # If cat specified, check in that category first.
      if cat && categories.include?(cat)
        categories.delete(cat)
        categories.unshift(cat)
      end
      for category in categories # Check all categories
        index = list(category).index(@data[quest_id])
        return category, index if index != nil
      end
    end
    return nil, nil
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Clear
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def clear
    @data.clear
  end
end
 
#==============================================================================
# ** Game System
#++++++++++++++++++++++++++++++++++++++++++++++++++++++


c'est une petite parti du scripts

Corbac la nuit est t'on refuge


Naksu - posté le 18/12/2016 à 22:54:48. (8 messages postés)

Périmé dans : x années

Salut.
J'ai pris le script de corbac83100 et j'ai corrigé les fautes d'orthographes.

Le voici le voilà :

Portion de code : Tout sélectionner

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
#==============================================================================
#    Quest Journal [VXA]
#    Version: 1.0.3
#    Author: modern algebra (rmrk.net)
#    Date: 24 September 2012
#    Support: http://rmrk.net/index.php/topic,45127.0.html
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# La description:
#
# Ce script fournit une interface graphique pour montrer les progrès de la quête. Il
# Est axée sur les objectifs, ce qui signifie que vous choisissez lors de révéler les objectifs et
# Vous pouvez le configurer de sorte qu'ils apparaissent comme terminée ou a échoué. Cela dit, cette
# Script ne construit pas des quêtes pour vous; il est seulement une scène supplémentaire pour
# Les montrer. En tant que tel, vous avez besoin à l'événement toutes les quêtes vous et
# Progrès de la quête de mise à jour via l'appel de script. Par conséquent, faites attention à
# Les instructions ici et dans les régions éditables sur les lignes 232 et 612.
# +++++++++++++++++++++++++++++++++++++++++++++++++ +++++++++++++++++++++++++++++
# Instructions:
#
# Collez ce script dans son propre ou les fentes, au-dessus et au-dessous principale
# Matériaux. Si vous utilisez la fonctionnalité d'accès au menu, vous devez mettre tout
# autres scripts de menu ci-dessus celui-ci.
#
# Tous de la configuration se fait dans le module Quête données. Bien qu'il ne soit pas
# Nécessaire, il est recommandé de séparer le module de configuration
# Du reste du script en coupant et collant dans sa propre fente
# Script Editor (comme vous le verrez si vous avez la démo). La raison pour
# Ceci est que, si et quand ce script est mis à jour, vous pouvez préserver la
# Section de configuration et seulement remplacer les autres parties du script. Si
# Que vous souhaitez faire, vous devez couper tout de la première ligne vers le bas pour
# L'extrémité finale du module. Les premières lignes du script de corps devrait être
# Les égaux bar juste au-dessus # ** Game_Quest. Encore une fois, il est à vous si
# Tu le fais.
#
# Vous pouvez aller à EDITABLE REGION A à la ligne 232 pour configurer la valeur par défaut
# paramètres du script. Tous ces éléments vont bien fonctionner sans modification,
# Bien sûr, mais même si vous ne voulez pas configurer maintenant, vous devez familiariser
#-Vous avec tous les paramètres afin que vous puissiez tirer le meilleur parti de votre
# Script. J'ai inclus des tonnes de paramètres de sorte que vous pouvez faire la quête
# Journal unique pour votre jeu, même jusqu'à l'ordre dans lequel chaque section
# De la fenêtre d'information est tirée. Une brève description de chaque réglage est
# Inclus soit à droite ou directement au-dessus de chaque constante.
#
# EDITABLE REGION B est le vrai coeur du script mais - ceci est où
# Vous remplissez tous les détails pour les quêtes. Lisez les instructions à
# Ligne 612 très attentivement!
#
# Vous pouvez activer et accéder à une quête avec ce code dans l'événement Script
# Commande:
#
# Quest (quest_id)
# Quest_id: l'ID d'entier de la quête que vous voulez accéder
#
# De là, vous pouvez accéder ou modifier les données pertinentes stockées dans la quête,
# Comme nom, description, objectifs, etc ... Exemple:
# Quête (1) .name = "Rest in Pieces"
#
# Plus pertinente, en ce qui concerne le contrôle de l'état d'avancement des quêtes les
# codes suivants peuvent être utilisés dans une commande d'événement Script. Les arguments sont
# La même chose pour chaque commande donc je n'expliquer une fois. Elles sont toutes
# Assez explicite et en utilisant l'un d'eux va activer la quête
# (Sauf si vous utilisez le MANUEL Révéler la mise à la ligne 267).
#
# Reveal_objective (quest_id, objective_id_1, ..., objective_id_n)
# Quest_id: l'ID d'entier de la quête que vous souhaitez accéder.
# Objective_id_1, ..., objective_id_n: une liste des ID de la
# objectifs que vous souhaitez opérer. Il peut être aussi peu qu'une ou comme
# Autant que chacun d'entre eux.
# Montrera les objectifs énumérés dans les informations de la Quête
#
# Conceal_objective (quest_id, objective_id_1, ..., objective_id_n)
# Cachera les objectifs énumérés dans les informations de la Quête
#
# Complete_objective (quest_id, objective_id_1, ..., objective_id_n)
# Change la couleur des objectifs énumérés à la couleur terminée.
# La quête est terminée une fois que tous les objectifs principaux sont.
#
# Uncomplete_objective (quest_id, objective_id_1, ..., objective_id_n)
# Change l'état des objectifs complets énumérés retour à actif
#
# Fail_objective (quest_id, objective_id_1, ..., objective_id_n)
# Change la couleur des objectifs énumérés à la couleur a échoué.
# La quête a échoué une fois un objectif premier est.
#
# Unfail_objective (quest_id, objective_id_1, ..., objective_id_n)
# Change l'état des objectifs énumérés échoué vers actif
#
# Change_reward_status (quest_id, valeur)
# Valeur: vrai ou faux. Si exclus, par défaut à true.
# Totalement facultatif, mais ceci est juste un interrupteur personnel que vous pouvez
# Tour quand la récompense est donnée. Vous pouvez alors faire une condition
# Afin de ne pas récompenser les joueurs plus d'une fois. (Voir la ligne 180)
#
# EXEMPLES:
# Reveal_objective (1, 0)
# Ce serait révéler le premier objectif de la quête avec ID 1
# Complete_objective (6, 2, 3)
# Ceci compléterait les troisième et quatrième objectifs de la quête avec ID 6
# Change_reward_status (8)
# Ce serait mettre le commutateur de récompense à vrai pour la recherche avec l'ID 8.
#
# Une autre nouveauté est la possibilité de définir des récompenses qui apparaîtra dans le
# Menu (voir EDITABLE REGION B). En plus de cela, vous pouvez utiliser ce qui suit
# Code pour distribuer automatiquement les récompenses spécifiées pour une quête si le
# Quête est terminée et aucune récompense n'a encore été donné:
#
# distribute_quest_rewards (quest_id)
# Quest_id: l'ID de la quête dont les récompenses que vous voulez distribuer
#
# Bien sûr, il ne peut distribuer les récompenses matérielles (objets, armes,
# blindages, or, ou exp). Il ne distribuera pas les récompenses que vous spécifiez par chaîne.
# À cette fin cependant, vous pouvez également utiliser ce code dans une branche conditionnelle et
# Elle sera satisfaite que si elle distribue les récompenses. Ainsi, si vous
# Voulait ajouter quelques récompenses spéciales ou faire des choses comme cela, vous pouvez simplement mettre
# Que dans la branche pour quand il est vrai. Cette fonctionnalité est pas vraiment
# Recommandé, car je pense qu'il est préférable de le faire par les événements.
#
# D'autres codes pour la commande d'événement Script qui peut être utile sont:
#
# Reset_quest (quest_id)
# Quest_id: l'ID d'entier de la quête que vous souhaitez accéder.
# Cette ré-initialiser la recherche, ce qui signifie tous les progrès de quête pour
# Date sera perdu
#
# Delete_quest (quest_id)
# Désactive la quête et réinitialise
#
# Conceal_quest (quest_id)
# Désactive la quête afin de ne pas apparaître dans la scène, mais les progrès
# Est enregistré
#
# Reveal_quest (quest_id)
# Active ou réactive la quête. Cette commande est nécessaire si
# MANUAL_REVEAL à la ligne 284 est vrai ou il a déjà été
# Caché. Sinon, il suffit simplement d'opérer sur la quête
#
# Change_quest_access (symbole:)
#: Symbole doit être l'une des six options (inclure le colon!):
#: Disable - empêche l'accès à la scène de la quête (gris dans le menu)
#: Enable - permet d'accéder à la scène de quête
#: Disable_menu - cela supprime l'option de recherche dans le menu
#: Enable_menu - ce qui ajoute l'option de recherche au menu
#: Disable_map - ce qui empêche l'accès par la clé de la carte
#: Enable_map - ce qui permet un accès par clé de la carte
#
# Change_quest_background( «bg_filename», bg_opacity, bg_blend_type)
# Bg_filename: le nom du fichier de l'image pour l'arrière-plan
# Le dossier Images
# Bg_opacity: l'opacité du graphique de fond. Si
# Exclus, la valeur par défaut à la valeur du paramètre à la ligne 434.
# Bg_blend_type: le type de l'image de fond de mélange. Si
# Exclus, la valeur par défaut à la valeur du paramètre à la ligne 437.
#
# change_quest_windows ( "windowskin_filename", le ton, l'opacité)
# Windowskin_filename: le nom de la bannière de la fenêtre dans la
# dossier Graphics System 
# Opacité: l'opacité des fenêtres. Si exclus,
# La valeur par défaut à la valeur du paramètre à la ligne 423.
# Blend_type: le blend_type des fenêtres. Si exclus,
# La valeur par défaut à la valeur du paramètre à la ligne 426.
#
# En outre, il y a quelques codes qui peuvent être utilisés dans la commande d'un script
# Branchement conditionnel. Je note ici que tous ces éléments sont en option. Vous pourriez
# interrupteur utilisation et les contrôles variables et les progrès de la quête du moniteur uniquement par
# événements. Cependant, ces commandes font un peu plus facile et ils sont:
#
# Quest_revealed? (Quest_id)
# Quest_id: l'ID d'entier de la quête que vous souhaitez accéder.
# Ceci est satisfaite si la quête a été activé.
#
# Quest_complete? (Quest_id)
# Ceci est satisfaite si tous les objectifs principaux de la recherche sont complets
#
# Quest_failed? (Quest_id)
# Ceci est satisfait si tout premier objectif de la quête a échoué
#
# Quest_rewarded? (Quest_id)
# Ceci est satisfait si vous avez modifié le statut de récompense pour vrai.
#
# Objective_revealed ? (Quest_id, objective_id_1 ... objective_id_n)
# Objective_id_1, ..., objective_id_n: une liste des ID de la
# objectifs que vous souhaitez opérer. Il peut être aussi peu qu'une ou comme
# Autant que chacun d'entre eux.
# Ceci est satisfait si les objectifs énumérés ont été révélés
#
# Objective_active ? (Quest_id, objective_id_1 ... objective_id_n)
# Ceci est satisfaite si tous les objectifs énumérés sont révélés et
# Ni complètes, ni échoué.
#
# Objective_complete? (Quest_id, objective_id_1 ... objective_id_n)
# Ceci est satisfaite si tous les objectifs énumérés ont été achevés
#
# Objective_failed ? (Quest_id, objective_id_1 ... objective_id_n)
# Ceci est satisfaite si tous les objectifs énumérés ont été omis
#
# Si vous voulez appeler la scène Quête d'un événement, vous utilisez ce qui suit
# Code dans un script d'appel:
#
# call_quest_journal
# Call_quest_journal (quest_id)
# Quest_id: ID de la quête que vous voulez ouvrir la scène sur
#
# Si vous ne spécifiez pas de quest_id (ligne 198), alors il sera tout simplement ouvrir la
# Scène comme il le ferait normalement. Si vous spécifiez un quest_id (ligne 199), alors il
# Ouvrira la scène sur cette quête aussi longtemps qu'il a été révélé et il est
# Normalement accessible via le menu de quête.
#
# Enfin, le chemin par défaut de ce script fonctionne est que les quêtes automatiquement
# Complète ou échouer en fonction de l'état des principaux objectifs. Cependant, vous
# Peut le mettre pour qu'il n'y ait pas d'objectifs premiers, dans ce cas, vous ne pouvez
# Complète, échouent, ou (re) activer une quête manuellement à travers le code suivant
# Dans un appel de script:
#
# Manually_complete_quest (quest_id)
# Quest_id: ID de la quête que vous souhaitez manuellement complète
# Manually_fail_quest (quest_id)
# Quest_id: ID de la quête que vous voulez à l'échec manuellement
# Manually_activate_quest (quest_id)
# Quest_id: ID de la quête que vous voulez activer manuellement
# ==============================================================================
 
$imported ||= {}
$imported[:"MA_QuestJournal_1.0"] = true
$imported[:"MA_QuestJournal_1.0.1"] = true
 
#==============================================================================
# *** QuestData
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Ce module contient toutes les données de configuration pour le journal de quête
#==============================================================================
 
module QuestData
  #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
  #  BEGIN éditable Région A
  #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  #  ACCÈS MENU - Si cela est vrai, vous pouvez accéder au journal de quête à travers une commande 
  # dans le menu. Si elle est fausse, il n'y aura pas une telle commande.
  MENU_ACCESS = true
  #  INDEX MENU - D'ACCES MENU est vrai, ce qui détermine où il apparaît
  MENU_INDEX = 4
  #  ACCESS MAP - Si cela est vrai, cela vous permet d'accéder au journal de quête par 
  # appuyant sur une touche sur la carte.
  MAP_ACCESS = true
  #  MAP_BUTTON - Si MAP_ACCESS est vrai, ce qui détermine quel bouton appelle la
  # Quête Journal
  MAP_BUTTON = :Q
  # OPEN_TO_LAST_REVEALED_QUEST - Si cela est vrai, alors la première fois que vous ouvrez le Journal 
  # quête après avoir révélé une nouvelle quête, il sera ouvert à la nouvelle quête.
  OPEN_TO_LAST_REVEALED_QUEST = true
  #  OPEN_TO_LAST_CHANGED_QUEST - Si cela est vrai , alors le Journal Quest ouvrir
  # La dernière quête dont le statut objectif a changé .
  OPEN_TO_LAST_CHANGED_QUEST = false
  # FENÊTRE WIDTH - La largeur, en pixels, de la fenêtre de liste
  LIST_WINDOW_WIDTH = 192
  # TYPES  DONNÉES DE BASE - Cela vous permet de configurer d'autres types de données. Juste 
  # incluent un signal d'identification dans le tableau. Ensuite, vous devez donner 
  # chaque signal une icône (dans le hachage ICONS à la ligne 322) et un texte de signal (dans 
  # le réseau de VOCAB à la ligne 333, mais il peut être une chaîne vide). Ensuite, vous 
  # pouvez définir les données lui-même lors de la configuration des quêtes en ajoutant simplement un: 
  # q [symbole] = "" 
  # ligne à la quête. Vous aurez également besoin d'inclure le type de données quelque part dans 
  # la disposition des données à la ligne 306. Comme exemple de cela, j'ai inclus: client 
  # et: emplacement par défaut. Vous pouvez CTRL + F pour rien dans cette section avec 
  # un de ces symboles (hors :) et vous y besoin d'ajouter quelque chose 
  # pour tous les nouveaux types de données que vous ajoutez.
  BASIC_DATA_TYPES = [:client, :location]
  # DONNÉES DE BASE LARGEUR - Ceci détermine combien d'espace, en pixels, est donné à 
  # tout type de données de base que vous définissez dans la fenêtre de données.
  BASIC_DATA_WIDTH = 240
  # ACTIVITÉ CONCURRENT - Si cela est vrai, alors quand dans la scène Quête Journal, vous pouvez passer 
  # catégories ou faire défiler la liste des quêtes en même temps. Si 
  # false, vous devez d'abord sélectionner une catégorie avant de pouvoir commencer 
  # faire défiler la liste de quête.
  CONCURRENT_ACTIVITY = true
  # HIDE CATEGORIE CURSOR - Si cela est vrai, alors la fenêtre Catégorie aura pas un 
  # curseur et au lieu simplement mettre en évidence la catégorie sélectionnée.
  # Ceci est mieux quand ACTIVITÉ CONCURRENT est vrai.
  HIDE_CATEGORY_CURSOR = true
  # SHOW_QUEST_ICONS - Si cela est vrai, alors l'icône que vous choisissez pour chaque quête
  # Être affiché à gauche de son nom dans la fenêtre Liste des quêtes
  SHOW_QUEST_ICONS = true
  # MANUEL Reveal - Si false, quêtes sera révélé au moment où vous 
  # premier révéler, complet, ou ne l'objectif. Si cela est vrai, vous 
  # besoin de révéler spécifiquement chaque quête via un appel de script distinct: 
  # révèle la quête (quête id)
  MANUAL_REVEAL = false
  # DATA LAYOUT - Ce contrôle la façon dont la fenêtre de quête expose toutes 
  # les données pertinentes. Si vous définissez l'une des entrées comme un tableau, alors toute 
  # des commandes, il sera établi en même y. A l'exception de: ligne, 
  # aucune des commandes sera établie si la quête est pas réglé pour avoir que 
  # données particulières. Les symboles sont: 
  #: Ligne - Dessine une ligne horizontale à travers la fenêtre. 
  #: Nom - Dessine le nom de la quête 
  #: niveau - Dessine le niveau de la quête 
  #: bannière - Dessine la bannière pour la quête 
  #: client - Dessine le client défini dans la quête (données de base) 
  #: emplacement - Dessine l'emplacement défini dans la quête (données de base) 
  #: Description - Tirages de la quête Description de 
  #: objectifs - Dessine tous les objectifs de la quête qui ont été révélées 
  #: récompenses - Dessine ce que les récompenses ont été mis en 
  # 
  # Vous aurez aussi besoin d'ajouter un entrée pour toute nouvelle BASIC_DATA que vous placez dans 
  # TYPES dE DONNÉES dE BASE à la ligne 264. 
  # 
  # Rappelez-vous de placer une virgule après chaque entrée. A noter également que ce n'est que la mise en page par défaut 
  #. Vous pouvez définir une mise en page différente pour toute quête, et quand 
  # visualiser cette quête, il sera la mise en page personnalisée qui est montré.
  DATA_LAYOUT = [
    [:line, :name, :level],
    :banner,
    :client,
    :location,
    :description,
    :objectives,
    [:line, :rewards],
    :line,
  ] # <= Ne touchez pas.
   # ICONS - C'est l'endroit où vous avez installé plusieurs des icônes utilisées dans le script. le
   # But de chacun est indiqué à côté de lui. En outre, si vous faites une coutume
   # catégories, vous devez leur donner une icône en plaçant une ligne comme
   # autres. Donc, si la nouvelle catégorie personnalisée est: la romance alors vous aurait besoin de
   # Défini comme ceci:
   # Roman: 107,
  ICONS = {
    all:         226, # L'icône de la catégorie Toutes les Quêtes
    active:      236, # L'icône de la catégorie Quêtes active
    complete:    238, # L'icône de la catégorie complète Quêtes
    failed:      227, # L'icône de la catégorie Quêtes Échec
    client:      121, # L'icône de données client. Si aucune voulait, mis à 0
    location:    231, # L'icône de données de localisation. Si aucune voulait, mis à 0
    reward_gold: 262, # L'icône pour les récompenses d'or. Si aucune voulait, mis à 0
    reward_exp:  117, # L'icône de récompenses exp. Si aucune voulait, mis à 0
  } # <= Ne touchez pas.
   # VOCABULAIRE - Cela vous permet de choisir quelques-uns des mots utilisés dans la scène de quête
  VOCAB = {
    # Étiquette de menu: Le nom de la commande dans le menu si ACCESS MENU est vrai
    menu_label:       "Quêtes",
    # étiquette de scène : L'étiquette en haut de la scène. Si elle est vide, pas de fenêtre
    scene_label:      "Journal de Quêtes",
    # Description: Le titre pour identifier la description
    description:      "Description",
    # objectifs: Le titre pour identifier les objectifs
    objectives:       "Objectifs",
    # balle objectif: La balle qui apparaît à la gauche de chaque 
    # objectif. Si% d est inclus, il affiche l'ID d'objectifs.
    objective_bullet: "?",
    # récompenses: Le titre pour identifier les récompenses.
    rewards:          "Récompenses",
    # récompenser montant: Pour objets de récompense, ceci est le texte pour montrer la quantité. 
    # Il devrait inclure% d pour montrer la quantité.
    reward_amount:    "x%d",
    # récompenser l'or: texte pour identifier les récompenses d'or
    reward_gold:      "Rubis",
    # récompense exp: texte pour identifier les récompenses exp
    reward_exp:       "",
    # niveau: Si LEVEL_ICON est 0, ceci est le texte qui précède le niveau
    level:            "Rang: ",
    # Situation: L'étiquette de texte pour l'emplacement de quête
    location:         "",
    # Lieu: L'étiquette de texte pour le client de quête
    client:           "",
  } # <= Ne touchez pas. 
  # CATEGORIES - Ce tableau vous permet de définir les catégories sont disponibles 
  # dans la scène de Quest. Les catégories par défaut sont: tous,: actif,: complet, 
  # et: a échoué, et leurs noms sont explicites. Vous pouvez ajouter des 
  # catégories, mais notez que vous devez vous assurer que chaque nouvelle 
  # catégorie a une icône située dans le hachage ICONS, ainsi qu'un jeu d'étiquettes dans le hachage 
  # CATEGORIE VOCAB (si vous utilisez MONTRER CATÉGORIE LABEL). Il est également conseillé 
  # pour lui donner un type de tri, sauf si vous êtes bien avec elle étant triés par ID 
  #, comme cela est par défaut.
  CATEGORIES = [:all, :active, :complete, :failed]
  #  MONTRER CATEGORIE LABEL - Cela vous permet de choisir d'afficher ou non le nom 
  # de la catégorie sélectionnée. Si cela est vrai, il choisira le nom sur 
  # de la table de hachage CATEGORIE VOCAB.
  SHOW_CATEGORY_LABEL = true
  #  CATEGORIE LABEL_IN_SAME_WINDOW - Si SHOW_CATEGORY_LABEL est vrai, alors ce 
  # Options vous permet de choisir si l'étiquette est affichée dans la même fenêtre que 
  # les icônes de catégorie ou dans une fenêtre séparée ci-dessous. true = même fenêtre.
  CATEGORY_LABEL_IN_SAME_WINDOW = true
  #  CATEGORIE VOCABULAIRE - Si SHOW_CATEGORY_LABEL est vrai, ce hachage vous permet de définir la 
  # étiquette pour chaque catégorie. Pour toutes les catégories personnalisées que vous créez, vous 
  # besoin d'ajouter une ligne pour chaque ci-dessous et dans le même format: #: category => "label", 
  # Ne pas oublier d'ajouter la virgule à la fin de chaque ligne.
  CATEGORY_VOCAB = {
    :all =>      "Toutes les quêtes",      # The label for the :all category
    :active =>   "Quêtes actives",   # The label for the :active category
    :complete => "Quêtes complétés", # The label for the :complete category
    :failed =>   "Quêtes échouées",   # The label for the :failed category
  } # <= Ne touchez pas. 
  # SORT TYPE - Ce hachage vous permet de choisir comment chaque catégorie est triée. 
  # Pour chaque catégorie, par défaut ou personnalisé, vous pouvez définir une autre méthode de tri 
  # Il y a sept options à choisir: 
  #: id - Les quêtes sont triées de la plus faible à ID le plus élevé 
  #: alphabet - Les quêtes sont triés par ordre alphabétique 
  # : niveau - les quêtes sont triés du plus bas au plus haut niveau 
  #: révèlent - les quêtes sont triées de la plus récemment révélé sur. 
  # Chaque fois qu'une nouvelle quête est révélée, il sera au sommet. 
  #: Changement - Les quêtes sont classifiées de celui dont le statut le plus récent 
  # changé sur. Ainsi, chaque fois qu'un objectif est modifié, cette quête 
  # sera jeté vers le haut. 
  #: Toutes - Les quêtes sont triés du plus récemment terminé sur. 
  # Chaque fois qu'une quête est terminée, il sera jeté vers le haut. 
  #: Échec - Les quêtes sont triés du plus récemment échoué sur. 
  # Chaque fois qu'une quête échoue, il sera jeté vers le haut.
  #
  # De plus, vous pouvez mettre _r à la fin de l'une des options de tri et 
  # allez inverser l'ordre. Ainsi, par exemple, si la méthode de tri pour une catégorie 
  # est: alphabet r, les quêtes s'affichera de Z-A 
  #: échoué - Les quêtes sont triées de la plus récemment échoué sur. 
  # Chaque fois qu'une quête échoue, il sera jeté vers le haut.
  SORT_TYPE = {
    :all =>      :id,       # Sort type for the All Quests category
    :active =>   :change,   # Sort type for the Active Quests category
    :complete => :complete, # Sort type for the Complete Quests category
    :failed =>   :failed,   # Sort type for the Failed Quests category
  } # <= Ne touchez pas. 
  # WINDOW PEAU - La peau de fenêtre pour chaque fenêtre dans la scène Quest. Il doit 
  # se référer à un graphique dans le dossier système de Graphics. Si elle est définie sur false, 
  # il utilisera tout ce qui est windowskin par défaut. Si vous utilisez un script qui 
  # permet au joueur de choisir le windowskin, false est la valeur recommandée.
  WINDOWSKIN = false
  #  WINDOW TO - La tonalité de chaque fenêtre. Il doit être un tableau sous la forme: TONE 
  # WINDOW = [rouge, vert, bleu, gris] 
  # gris peut être exclue, mais les trois autres doivent être présents. Si vous définissez cette 
  # valeur à false, les fenêtres ont tout ce ton est par défaut.
  WINDOW_TONE = false
  # WINDOW OPACITY - L'opacité des fenêtres de la scène Quest. Si la valeur 
  # false, il utilisera l'opacité par défaut pour les fenêtres.
  WINDOW_OPACITY = false
  # BG_PICTURE - Ceci est une chaîne faisant référence à une image dans le dossier Image
  # Graphics. Si réglé sur "", alors il n'y aura pas d'image. Dans le cas contraire, il
  # Affiche l'image sélectionnée sous les fenêtres mais au-dessus de la carte en
  # La scène Quest.
  BG_PICTURE = ""
  # BG OPACITY - Cela vous permet de définir l'opacité de l'image de fond, 
  # si vous avez sélectionné.
  BG_OPACITY = 255
  # BG_BLEND_TYPE - Cela vous permet de définir le type de l'arrière-plan de mélange
  # Photo, si vous avez sélectionné.
  BG_BLEND_TYPE = 0
  # DESCRIPTION_IN_BOX - Ceci est une option graphique, et il vous permet de
  # Choisir si la description doit être affiché dans une boîte.
  DESCRIPTION_IN_BOX = true
  #  LEVEL_ICON - This sets how levels are shown. If set to an integer, then it
  # will draw the same icon numerous times up to the level of the quest. Ie. If
  # the level's quest is 1, then the icon will only be drawn once, but if the
  # level's quest is 4, it will be drawn 4 times. LEVEL_ICONS_SPACE determines
  # the space between them. If you set LEVEL_ICON to 0, however, then it will
  # instead draw a signal for the level, corresponding to that index in the
  # LEVEL_SIGNALS array. If the LEVEL_SIGNALS array is empty, then it will just
  # draw the integer for the level. Finally, LEVEL_ICON can also be an array of
  # integers, in which case the level will be represented only by the icon set
  # which corresponds to it in the array.
  LEVEL_ICON = 125
  # NIVEAU ICÔNES SPACE - Si ICON LEVEL est un entier, cela est la quantité de 
  # espace entre chaque fois que l'icône est dessinée.
  LEVEL_ICONS_SPACE = 16
  #  SIGNAUX DE NIVEAU - Si LEVEL_ICON est 0, ce qui vous permet de définir quelle chaîne 
  # devrait être le signal pour chaque niveau. Si ce tableau est vide, alors il sera juste 
  # tirer l'entier de niveau. C'est à dire. si la quête est de niveau 4, il attirera 4.
  LEVEL_SIGNALS = ["F", "E", "D", "C", "B", "A", "S"]
  #  COLOURS - Cela vous permet de modifier la couleur des différents aspects de la scène 
  # quête. Chacun peut être défini dans l'une des trois façons: 
  #: symbole - Si vous utilisez un symbole, la couleur sera le résultat de l'appel 
  # la méthode du même nom. Par exemple, si vous définissez quelque chose à 
  #: system_color, il définir la couleur du résultat de la méthode de la couleur 
  # système Windows Base. 
  # Entier - Si vous réglez la couleur à un nombre entier, il prendra sa 
  # couleur dans la palette de windowskin, tout comme l'utilisation \ c [x] dans les messages. 
  # Array - Vous pouvez également définir les valeurs de rgba directement avec un tableau dans le format 
  #: [rouge, vert, bleu, alpha]. alpha peut être exclue, mais vous devez 
  # avoir des valeurs pour le rouge, le vert et le bleu.
  COLOURS = {
    # Actif: Ceci définit la couleur pour les quêtes actives dans la liste et le nom
    # De la quête active lorsque apparaît dans la fenêtre de données.
    active:           :normal_color,
    # Complète: Ceci définit la couleur pour les quêtes dans la liste et le
    # Nom de la quête terminée lorsque apparaît dans la fenêtre de données.
    complete:         3,
    # A échoué: Ceci définit la couleur pour les quêtes échoué dans la liste et le nom
    # De la quête a échoué lorsque affiché dans la fenêtre de données.
    failed:           10,
    # Ligne: Ceci définit la couleur des lignes ou des boîtes dessinée dans la scène de quête
    line:             :system_color,
    # Ligne ombre: Ceci définit la couleur de l'ombre pour les lignes ou les boîtes dessinée 
    # dans la scène de quête
    line_shadow: [0, 0, 0, 128],
    # Label scène: Ceci définit la couleur de l'étiquette de la scène, se montre
    scene_label:      :system_color,
    # Catégorie label: Ceci définit la couleur pour la catégorie étiquette, si montré
    category_label:   :normal_color,
    #le signal de niveau : Ceci définit la couleur pour le signal de niveau, si montré
    level_signal:     :normal_color,
    # objective_bullet: Ceci définit la couleur pour les objectifs; si mis à
    #: Maqj_objective_color, il reflétera l'état d'achèvement du
    # Objectif, mais vous pouvez le changer à autre si vous préférez quelque chose
    objective_bullet: :maqj_objective_color,
    # Montant de la récompense: La couleur de la quantité de l'article, lorsqu'elle est présentée
    reward_amount:    :normal_color,
    # rubrique: La couleur de toutes les rubriques dans le script, comme "Description"
    heading:          :system_color,
    # étiquette de base: Pour les données de base, comme client, la couleur de l'étiquette
    basic_label:      :system_color,
    # valeur de base: Pour les données de base, comme client, la couleur de la valeur
    basic_value:      :normal_color,
  } # <= Ne touchez pas. 
   # RUBRIQUE ALIGN - Cela définit l'alignement pour les aspects énumérés. 0 est à gauche; 
   # 1 est Centre; 2 est droit
  HEADING_ALIGN = {
    description: 0, # Alignement de la tête Description
    objectives:  0, # Alignement de la rubrique Objectifs
    rewards:     1, # Alignement de la rubrique Récompenses
    level:       2  # Alignement en montrant le niveau
  } # <= Do not touch.
  #````````````````````````````````````````````````````````````````````````````
  #    Aspects Font 
  # 
  # Toutes les options suivantes (noms de police, la TAILLES, FONTBOLDS et 
  # POLICES italiques) vous permettent de modifier les polices utilisées pour divers aspects de la 
  # scène. Le seul qui y est mentionnée par défaut est :, normale qui est la 
  # police utilisée par défaut pour toute la scène. Cependant, vous pouvez modifier les polices 
  # pour presque tous les aspects - tout ce que vous devez faire est d'ajouter une ligne comme ceci:
  #
  #    description: valeur,
  #
  # Et cela va changer cet aspect de la police lors de l'élaboration de la description. le
  # symboles suivants sont disponibles pour le changement:
  #
  #   normal:         La police par défaut utilisée pour chaque partie de la scène
  #   list:           La police utilisée dans la fenêtre Liste
  #   scene_label:    Tla police utilisée lors de l'élaboration du label Scène, si montré
  #   category_label: The font used when drawing the Category Label, if shown
  #   heading:        The font used when drawing any headings, like "Description"
  #   name:           The font used when drawing the quest name in data window
  #   description:    The font used when drawing the Description
  #   objectives:     The font used when drawing the objectives
  #   rewards:        The font used when drawing the rewards
  #   client:         The font used when drawing the client
  #   location:       The font used when drawing the location
  #
  # Pour l'un d'eux, vous devez définir une valeur. Qu'est-ce que la valeur peut être dépend
  # Sur lequel la police aspect que vous modifiez et est décrit ci-dessous, mais pour tout
  # De les mettre à la fausse signifie qu'il sera tout simplement utiliser la valeur par défaut
  #
  # For any that you add, remember that you must put a comma after the value.
  #````````````````````````````````````````````````````````````````````````````
  #  FONTNAMES - Here you can change the font used for any of the various
  # options. It can take any of the following types of values:
  #     false    - The default font will be used
  #     "String" - The font with the name "String" will be used.
  #     [Array]  - The array must be in the form: ["String1", "String2", ...]
  #               The font used will be the first one in the array that the
  #               player has installed.
  #
  #  EXAMPLES:
  #
  #    normal:      false,
  #     La police utilisée pour les aspects non altérées de la scène est l'étiquette 
  # scène de police par défaut: "algérien", 
  # La police utilisée pour le label de Scène sera algérienne. 
  # Description: [ "Cambria", "Times New Roman"], 
  # La police utilisée lors de l'élaboration de la description sera Cambria si le joueur 
  # a installé Cambria. Si le joueur n'a pas de Cambria 
  # installé, la police utilisée sera Times New Roman
  FONTNAMES = {
    normal: false, # normal: the default font name
  } # <= Do not touch.
  #  FONTSIZES - Here you can change the size of the font. There are two types
  # of values you can set:
  #    false   - The default fontsize will be used
  #    Integer - The fontsize will be equal to the value of the Integer.
  #  
  # For everything but the label windows, this shouldn't exceed 24, since that
  # is the line_height. However, for scene_label: and category_label:, the size
  # of the window will be adjusted to whatever size you set the font.
  FONTSIZES = {
    normal:         false, # normal: default font size
    scene_label:    28,    # scene_label: fontsize for the Scene Label window
    category_label: 24,    # category_label: fontsize for Category Label window
  } # <= Do not touch.
  #  FONTBOLDS - Here you can set whether the font will be bolded. You can set
  # it to either false, in which case it will not be bolded, or true, in which
  # case it will be bolded.
  FONTBOLDS = {
    scene_label:  true, # scene_label: whether font is bold for Scene Label
    heading:      true, # heading: whether font is bold for the headings
    level_signal: true, # level_signal: whether font is bold for level
  } # <= Do not touch.
  #  FONTITALICS - Here you can set whether the font will be italicized. You
  # can set it to either false, in which case it will not be italicized, or
  # true, in which case it will be italicized.
  FONTITALICS = {
  }
  #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  #  END Editable Region A
  #//////////////////////////////////////////////////////////////////////////
  CATEGORIES = [:all] if !CATEGORIES || CATEGORIES.empty?
  VOCAB.default = ""
  ICONS.default = 0
  CATEGORY_VOCAB.default = ""
  SORT_TYPE.default = :id
  COLOURS.default = :normal_color
  HEADING_ALIGN.default = 0
  FONTNAMES.default = false
  FONTSIZES.default = false
  FONTBOLDS.default = false
  FONTITALICS.default = false
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Setup Quest
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def self.setup_quest(quest_id)
    q = { objectives: [] }
    case quest_id
    #\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
    #  BEGIN Editable Region B
    #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    #   Configuration Quest
    #
    # Ceci est l'endroit où vous configurez les données pour toutes les quêtes dans le jeu. Tandis que
    # Il peut sembler compliqué, je vous invite à faire attention et, une fois que vous obtenez
    # Le coup de lui, je suis sûr qu'il va rapidement devenir une seconde nature.
    #
    # Chaque quête unique devrait être mis en place dans le format suivant, mais la note
    # Que si vous n'êtes pas tout ce paramètre pour un aspect particulier, vous pouvez
    # Supprimer cette ligne. Quoi qu'il en soit, voici ce que chaque quête devrait ressembler, avec
    # Les valeurs sur la gauche étant les valeurs par défaut si vous ne les définissez pas:
    #
    #  when quest_id
    #   q[:name]              = "??????"
    #   q[:icon_index]        = 0
    #   q[:level]             = 0
    #   q[:description]       = ""
    #   q[:banner]            = ""
    #   q[:banner_hue]        = 0
    #   q[:objectives][0]     = ""
    #   q[:objectives][1]     = ""
    #   q[:objectives][2]     = ""
    #   q[:objectives][n]     = ""
    #   q[:prime_objectives]  = [0, 1, 2, n]
    #   q[:custom_categories] = []
    #   q[:client]            = ""
    #   q[:location]          = ""
    #   q[:rewards]           = []
    #   q[:common_event_id]   = 0
    #   q[:layout]            = false
    #
    #  Pour chaque ligne, à l'exception des objectifs, il est seulement la valeur
    # Le droit du signe égal que vous aurez besoin de changer. Maintenant je vais
    # Expliquer chaque ligne:
    #
    # when quest_id
    #    quest_id - est un entier de votre choix, ce qui est la façon dont vous
    # Référence une quête afin de faire avancer et de faire autre chose. Il
    # Doit être unique pour chaque quête; si vous utilisez 1 pour la première quête,
    # Vous ne pouvez pas utiliser 1 pour toute autre quête.
    #
    #   q[:name]              = ""
    #     "" - Cette ligne définit le nom de la quête qui montre dans la quête
    # Liste.
    #  
    #   q[:icon_index]        = 0
    #     0  - Cette ligne définit l'icône à utiliser pour cette quête. Il montrera 
    # à la gauche du nom de l'invité dans la Liste des quêtes.
    #
    #   q[:level]             = 0
    #     0  - Cette ligne définit le niveau de la quête. Si 0 , aucun niveau sera
    # Montré . Voir les options de niveau de lignes 441-458 pour plus de détails .
    #  
    #   q[:description]       = ""
    #    "" - Cette ligne définit la description de la quête. Vous pouvez utiliser un message
    # codes dans cette chaîne , mais si vous utilisez " " alors vous devez utiliser
    # \\ Pour identifier les codes et pas seulement \ . C'est à dire. Il est \\ v [x] , pas \ v [x]
    #
    #   q[:objectives][0]     = ""
    #   q[:objectives][1]     = ""
    #   q[:objectives][2]     = ""
    #   q[:objectives][n]     = ""
    #  Les objectifs sont légèrement différents. Remarqué que, après q [objectifs] sur 
    # chaque ligne il y a un nombre entier entre crochets: 
    # [n] - Ceci est l'ID de l'objectif, et n doit être un entier. No 
    # quête peut avoir plus d'un objectif avec le même ID. Ceci est 
    # comment vous identifier quel objectif vous voulez révéler, complète ou 
    # échouez. Cela dit, vous pouvez faire autant d'objectifs que vous voulez, comme 
    # longtemps que vous leur donnez tous les ID distincts. Les ID doivent être en 
    # séquence aussi, donc il ne devrait pas être un q [objectifs] [5] si 
    # il n'y a pas q [objectifs] [4]. 
    # "" - Ceci est le texte de l'objectif. Vous pouvez utiliser des codes de message dans 
    # cette chaîne, mais si vous utilisez "" alors vous aurez besoin d'utiliser 
    # \\ pour identifier les codes et pas seulement \. Ie: Il est \\ v [x], pas \ v [x] #
    #   q[:prime_objectives]  = [0, 1, 2, n]
    #     [0, 1, 2, n] - Ce tableau détermine quels objectifs doivent être
     # Achevé pour que la quête soit complète. En d'autres termes,
     # Tous les objectifs avec les ID de ce tableau doivent être
     # Complet pour la quête pour être complète. Si l'un d'eux est
     # A échoué, la quête sera échoué. Si vous supprimez cette ligne
     # Tout à fait, tous les objectifs sont premiers. Si vous réglez cette option sur [],
     # Puis la quête ne sera jamais automatiquement terminée ou a échoué et
     # Vous devez utiliser les options manuelles décrites aux lignes 208-219.
    #
    #   q[:custom_categories] = []
    #     [] - Cela vous permet de définir un éventail de catégories personnalisées pour cette 
    # quête, ce qui signifie que cette quête sera affiché dans chacune de ces 
    # catégories si vous l'ajoutez au tableau CATÉGORIES à la ligne 370. 
    # Notez que chaque catégorie que vous faites doit être identifié par un unique, 
    #: symbole, et vous devez configurer tous les détails des catégories pour ce 
    #: symbole.
    #
    #   q[:banner]            = ""
    #     "" - Cette ligne définit la bannière à utiliser pour une quête. Il doit être
    # Nom de l'image dans le dossier Images de Graphics.
    #
    #   q[:banner_hue]        = 0
    #     0 - La teinte de la bannière graphique, si elle est utilisée
    #
    #   q[:client]            = ""
    #     "" - Cette ligne définit le nom du client pour cette quête. (donnee de base)
    #
    #   q[:location]          = ""
    #     "" - Cette ligne définit l'emplacement de la quête. (donnee de base)
    #
    #   q[:rewards]           = []
    #    [] - Dans ce tableau, vous pouvez identifier notamment les récompenses qui seront
    # arriver. Chaque récompense devrait être dans son propre réseau et peut être l'un des
    # le suivant:
    #          [:item, ID, n],
    #          [:weapon, ID, n],
    #          [:armor, ID, n],
    #          [:gold, n],
    #          [:exp, n],
    #       où ID est l'ID de l'élément, l'arme ou l'armure que vous voulez 
    # distribué et n est la quantité de l'élément, arme, armure, or, 
    # ou de l'expérience que vous voulez distribué. En outre, vous pouvez également définir 
    # texte à apparaître dans le format de récompenses, mais qui ne serait pas 
    # distribué automatiquement. Vous auriez besoin de spécifier ce type de texte 
    # récompense dans le format suivant: 
    # [: string, icon_index, "string", "vocab"], 
    # où l'index de l'icône est l'icône pour être montré, "string" est ce que vous 
    # apparaîtrait comme la quantité, et "vocab" est ce qui apparaîtra comme une étiquette 
    # entre l'icône et le montant.
    #      
    #
    #   q[:common_event_id]   = 0
    #     0  - Cela vous permet d'appeler immédiatement l'événement commun identifiés
    # Et automatiquement une fois la quête terminée. Il est en général
    # Pas recommandé, comme pour la plupart des quêtes que vous devriez le contrôlez
    # Assez pour ne pas avoir besoin de cette fonctionnalité.
    #
    #   q[:layout]            = false
    #     false - La valeur par défaut pour ce qui est faux , et quand il est fausse, le
    # Mise en page pour la quête sera héritée de la valeur par défaut que vous définissez à
    # 302. Cependant, vous pouvez également donner la quête de sa propre mise en page - la
    # Le format serait le même que celui défini pour la valeur par défaut à la ligne 307 .
    #  
    # Template:
    #
    #  Lorsque vous effectuez une nouvelle quête , je recommande que vous copiez et collez le
    # Suivant modèle, la suppression selon les lignes que vous ne voulez pas modifier .
    # Naturellement, vous devez retirer le # ~ . Vous pouvez le faire en mettant en évidence
    # La chose entière et en appuyant sur CTRL + Q :
# ~ when 2 # < = RAPPEL: La Quête ID DOIT être unique
#~       q[:name]              = "??????"
#~       q[:icon_index]        = 0
#~       q[:level]             = 0
#~       q[:description]       = ""
#~       # RAPPEL: Vous pouvez faire autant d'objectifs que vous le souhaitez, mais chacun doit
# ~      # Ont un identifiant (ID) unique.
#~       q[:objectives][0]     = ""
#~       q[:objectives][1]     = ""
#~       q[:objectives][2]     = ""
#~       q[:prime_objectives]  = [0, 1, 2]
#~       q[:custom_categories] = []
#~       q[:banner]            = ""
#~       q[:banner_hue]        = 0
#~       q[:client]            = ""
#~       q[:location]          = ""
#~       q[:rewards]           = []
#~       q[:common_event_id]   = 0
    when 1 # Quest 1 - SAMPLE QUEST
      q[:name]              = "Nouveau"
      q[:level]             = 1
      q[:icon_index]        = 7
      q[:description]       = "Va chez le barman pour en savoir plus."
      q[:objectives][0]     = "Rentrer au bar."
      q[:objectives][1]     = "Lui parler."
      q[:objectives][2]     = "Acheter 1 carrote."
      q[:objectives][3]     = "Parler à la personne au cheveux blanc."
      q[:prime_objectives]  = [1, 2]
      q[:custom_categories] = []
      q[:banner]            = ""
      q[:banner_hue]        = 0
      q[:client]            = "Barman"
      q[:location]          = "Bar"
      q[:common_event_id]   = 0
      q[:rewards]           = [
        [:item, 1, 3],
        [:gold, 500],
      ]
      q[:layout]            = false
    #||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
    #  END Editable Region B
    #//////////////////////////////////////////////////////////////////////
    end
    q
  end
end
 
#==============================================================================
# *** DataManager
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  Summary of Changes:
#    aliased method - self.extract_save_contents
#==============================================================================
 
class << DataManager
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Extract Save Contents
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  alias maqj_extractsavecons_2kw5 extract_save_contents
  def extract_save_contents(*args, &block)
    maqj_extractsavecons_2kw5(*args, &block) # Call Original Method
    if $game_party.quests.nil?
      $game_party.init_maqj_data
      $game_system.init_maqj_data
    end
  end
end
 
#==============================================================================
# ** MAQJ_SortedArray
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  This module mixes in to an array to maintain the sorted order when inserting
#==============================================================================
 
module MAQJ_SortedArray
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Insert to Array
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def maqj_insert_sort(el, &block)
    index = bsearch_index(el, 0, size, &block)
    index ? insert(index, el) : push(el)
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Retrieve Index from Binary Search
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def bsearch_index(el, b = 0, e = size, &block)
    return bsearch_index(el, b, e) { |a,b| a <=> b } if block.nil?
    return b if b == e # Return the discovered insertion index
    return if b > e
    m = (b + e) / 2    # Get Middle
    block.call(el, self[m]) > 0 ? b = m + 1 : e = m 
    bsearch_index(el, b, e, &block) 
  end
end
 
#==============================================================================
# ** Game_Quest
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  This class holds all instance data for a quest
#==============================================================================
 
class Game_Quest
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Public Instance Variables
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  attr_reader   :id                  # Unique identifier for this quest
  attr_reader   :name                # The name to be shown for the quest
  attr_reader   :level               # The level of difficulty of the quest
  attr_reader   :objectives          # An array of objective strings
  attr_reader   :prime_objectives    # An array of crucial objective IDs
  attr_reader   :revealed_objectives # An array of revealed objective IDs
  attr_reader   :complete_objectives # An array of completed objective IDs
  attr_reader   :failed_objectives   # An array of failed objective IDs
  attr_reader   :custom_categories   # An array of category symbols
  attr_accessor :icon_index          # Icon associated with this quest
  attr_accessor :common_event_id     # ID of common event to call upon complete
  attr_accessor :description         # The description for the quest
  attr_accessor :banner              # Picture shown to represent the quest
  attr_accessor :banner_hue          # The hue of the banner
  attr_accessor :layout              # The layout of this quest in scene
  attr_accessor :rewards             # An array of rewards to show
  attr_accessor :reward_given        # Boolean tracking if quest was rewarded
  attr_accessor :concealed           # Whether or not the quest is visible
  attr_accessor :manual_status       # Quest status if not using prime objectives
  QuestData::BASIC_DATA_TYPES.each { |data_type| attr_accessor(data_type) }
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Object Initialization
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def initialize(quest_id)
    @id = quest_id
    @concealed = default_value_for(:concealed)
    @reward_given = default_value_for(:reward_given)
    reset
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Reset
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def reset
    data = QuestData.setup_quest(@id)
    data_symbol_array.each { |meth| instance_variable_set(:"@#{meth}", 
      data[meth] ? data[meth] : default_value_for(meth)) }
    @revealed_objectives = [].send(:extend, MAQJ_SortedArray)
    @complete_objectives = [].send(:extend, MAQJ_SortedArray)
    @failed_objectives =   [].send(:extend, MAQJ_SortedArray)
    @manual_status = default_value_for(:manual_status)
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Data Symbol Array
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def data_symbol_array
    [:name, :level, :objectives, :prime_objectives, :custom_categories, 
      :icon_index, :description, :banner, :banner_hue, :common_event_id, 
      :layout, :rewards] + QuestData::BASIC_DATA_TYPES
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Default Value
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def default_value_for(method)
    case method
    when :name then "??????"
    when :description, :banner then ""
    when :level, :banner_hue, :icon_index, :common_event_id then 0
    when :objectives, :rewards, :custom_categories then []
    when :prime_objectives then Array.new(objectives.size) { |x| x }
    when :concealed then QuestData::MANUAL_REVEAL
    when :manual_status then :active
    when :layout, :reward_given then false
    else ""
    end
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Reveal/Conceal Objective
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def reveal_objective(*obj)
    valid_obj = obj.select {|x| x < objectives.size && !@revealed_objectives.include?(x) }
    valid_obj.each {|i| @revealed_objectives.maqj_insert_sort(i) }
    quest_status_changed unless valid_obj.empty?
  end
  def conceal_objective(*obj)
    quest_status_changed unless (obj & @revealed_objectives).empty?
    obj.each { |obj_id| @revealed_objectives.delete(obj_id) }
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Complete/Uncomplete Objective
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def complete_objective(*obj)
    valid_obj = obj.select {|x| x < objectives.size && !@complete_objectives.include?(x) }
    reveal_objective(*valid_obj)
    unfail_objective(*valid_obj)
    was_complete = status?(:complete)
    valid_obj.each {|i| @complete_objectives.maqj_insert_sort(i) }
    quest_status_changed unless valid_obj.empty?
    # If just completed
    if status?(:complete) && !was_complete
      $game_temp.reserve_common_event(common_event_id)
      $game_party.quests.add_to_sort_array(:complete, @id)
    end
  end
  def uncomplete_objective(*obj)
    quest_status_changed unless (obj & @complete_objectives).empty?
    obj.each { |obj_id| @complete_objectives.delete(obj_id) }
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Fail/Unfail Objective
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def fail_objective(*obj)
    valid_obj = obj.select {|x| x < objectives.size && !@failed_objectives.include?(x) }
    reveal_objective(*valid_obj)
    uncomplete_objective(*valid_obj)
    was_failed = status?(:failed)
    valid_obj.each {|i| @failed_objectives.maqj_insert_sort(i) }
    quest_status_changed unless valid_obj.empty?
    $game_party.quests.add_to_sort_array(:failed, @id) if status?(:failed) && !was_failed
  end
  def unfail_objective(*obj)
    quest_status_changed unless (obj & @failed_objectives).empty?
    obj.each { |obj_id| @failed_objectives.delete(obj_id) }
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Updates when the quest status has been changed
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def quest_status_changed
    $game_party.quests.add_to_sort_array(:change, @id) 
    $game_system.last_quest_id = @id if QuestData::OPEN_TO_LAST_CHANGED_QUEST
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Objective Status?
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def objective_status?(status_check, *obj)
    return false if obj.empty?
    case status_check
    when :failed   then !(obj & @failed_objectives).empty?
    when :complete then obj.size == (obj & @complete_objectives).size
    when :revealed then obj.size == (obj & @revealed_objectives).size
    when :active then objective_status?(:revealed, *obj) && 
      !objective_status?(:complete, *obj) && !objective_status?(:failed, *obj)
    end
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Status?
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def status?(status_check)
    case status_check
    when :failed  
      @prime_objectives.empty? ? @manual_status == :failed : 
        !(@failed_objectives & @prime_objectives).empty?
    when :complete
      @prime_objectives.empty? ? @manual_status == :complete : !status?(:failed) && 
        ((@prime_objectives & @complete_objectives) == @prime_objectives)
    when :active then !concealed && !status?(:complete) && !status?(:failed)
    when :reward then @reward_given
    end
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Set Name
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def name=(new_name)
    @name = new_name
    $game_party.quests.add_to_sort_array(:alphabet, @id) if $game_party && 
      $game_party.quests
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Set Level
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def level=(new_lvl)
    @level = new_lvl
    $game_party.quests.add_to_sort_array(:level, @id) if $game_party && 
      $game_party.quests
  end
end
 
#==============================================================================
# ** Game_Quests 
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#  This is a wrapper for an array holding Game_Quest objects
#==============================================================================
 
class Game_Quests
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Object Initialization
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def initialize
    @data = {}
    @sort_arrays = {
      reveal: [], change: [], complete: [], failed: [],
      id:       [].send(:extend, MAQJ_SortedArray),
      alphabet: [].send(:extend, MAQJ_SortedArray),
      level:    [].send(:extend, MAQJ_SortedArray)
    }
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Get Quest
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def [](quest_id)
    reset_quest(quest_id) if !@data[quest_id]
    @data[quest_id]
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Set Quest <- Not sure when this would ever be useful.
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def []=(quest_id, value)
    @data[quest_id] = value
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * List
  #    list_type : the type of list to return
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def list(list_type = :all, sort_type = $game_system.quest_sort_type[list_type])
    sort_type_s = sort_type.to_s
    reverse = !(sort_type_s.sub!(/_r$/, "")).nil?
    sort_type = sort_type_s.to_sym
    list = @sort_arrays[sort_type].select { |quest_id| include?(quest_id, list_type) }
    list.reverse! if reverse
    list.collect { |quest_id| @data[quest_id] }
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Include?
  #    determines whether to include a particular quest depending on list type
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def include?(quest_id, list_type = :all)
    return false if !revealed?(quest_id)
    case list_type
    when :all then true
    when :complete, :failed, :active then @data[quest_id].status?(list_type)
    else
      @data[quest_id].custom_categories.include?(list_type)
    end
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Revealed? 
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def revealed?(quest_id)
    (!@data[quest_id].nil? && !@data[quest_id].concealed)
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Setup Quest
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def setup_quest(quest_id)
    return if @data[quest_id]
    @data[quest_id] = Game_Quest.new(quest_id)
    # Open to this quest next time the QJ is opened
    $game_system.last_quest_id = quest_id if QuestData::OPEN_TO_LAST_REVEALED_QUEST
    # Save sorting order in separate arrays to avoid re-sorting every time
    @sort_arrays.keys.each { |sym| add_to_sort_array(sym, quest_id) }
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Delete Quest
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def delete_quest(quest_id)
    @data.delete(quest_id)
    @sort_arrays.values.each { |ary| ary.delete(quest_id) }
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Reset Quest
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def reset_quest(quest_id)
    delete_quest(quest_id)
    setup_quest(quest_id)
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Add to Sorted Array
  #    sort_type : array to alter
  #    quest_id  : ID of the quest to add.
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def add_to_sort_array(sort_type, quest_id)
    @sort_arrays[sort_type].delete(quest_id) # Make sure always unique
    case sort_type
    when :reveal, :change, :complete, :failed
      @sort_arrays[sort_type].unshift(quest_id)
    when :id
      @sort_arrays[sort_type].maqj_insert_sort(quest_id)
    when :alphabet 
      @sort_arrays[sort_type].maqj_insert_sort(quest_id) { |a, b| @data[a].name.downcase <=> @data[b].name.downcase }
    when :level
      @sort_arrays[sort_type].maqj_insert_sort(quest_id) { |a, b| @data[a].level <=> self[b].level }
    end
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Find Location
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def find_location(quest_id, cat = nil)
    if revealed?(quest_id)
      categories = $game_system.quest_categories.dup
      # If cat specified, check in that category first.
      if cat && categories.include?(cat)
        categories.delete(cat)
        categories.unshift(cat)
      end
      for category in categories # Check all categories
        index = list(category).index(@data[quest_id])
        return category, index if index != nil
      end
    end
    return nil, nil
  end
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  # * Clear
  #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  def clear
    @data.clear
  end
end
 
#==============================================================================
# ** Game System
#++++++++++++++++++++++++++++++++++++++++++++++++++++++


corbac83100 - posté le 19/12/2016 à 18:05:52. (9 messages postés)

Geek

Naksu a dit:


Salut.
J'ai pris le script de corbac83100 et j'ai corrigé les fautes d'orthographes.

Le voici le voilà :


merci ^^U...
et pour l'appel via le script XaiL System - Menu Delux
ligne 57 a 66

Portion de code : Tout sélectionner

1
:quest => ["Journal", "Journal de quêtes", 5349, true, true, Scene_Quest],


pour appelé le journal.

Corbac la nuit est t'on refuge

Suite à de nombreux abus, le post en invités a été désactivé. Veuillez vous inscrire si vous souhaitez participer à la conversation.

Haut de page

Merci de ne pas reproduire le contenu de ce site sans autorisation.
Contacter l'équipe

Plan du site:

Activité: Accueil | News | Forum | Flash-news | Chat | Commentaires | Galerie | Screen de la semaine | Sorties | Articles perso | Livre d'or | Recherche
Jeux: Index jeux séparés | Top Classiques | Top Originaux | Les autres | RPG Maker 95 | RPG Maker 2000 | RPG Maker 2003 | RPG Maker XP | RPG Maker VX | RPG Maker VX Ace | RPG Maker MV | Autres | Jeux complets | Proposer
Rubriques: Le Wiki | Collection Oniro | Tutoriaux | Scripts | Guides | Gaming-Live | Tests | Making-of | Interviews | Articles perso | OST | L'Annuaire | Divers | Palmarès
Hébergés: Aëdemphia | Fighting Robots Quest | Forstale | Geex | Inexistence | La Légende d'Ibabou | Lije | LoveMaster | Sarcia | Super Mario RPG - Lost Souls
Ressources: Jeux | Programmes | Packs de ressources | Midis | Eléments séparés | Sprites
RPG Maker 2000/2003: Chipsets | Charsets | Panoramas | Backdrops | Facesets | Battle anims | Battle charsets | Monstres | Systems | Templates
RPG Maker XP: Tilesets | Autotiles | Characters | Battlers | Window skins | Icônes | Transitions | Fogs | Templates
RPG Maker VX: Tilesets | Charsets | Facesets | Systèmes
RPG Maker MV: Tilesets | Characters | Faces | Systèmes | Title | Battlebacks | Animations | SV/Ennemis