Voyageur Lv.10
Age : 27 Inscrit le : 01/08/2011 Messages : 446
| Sujet: Script de quête Dim 16 Oct 2011 - 12:52 | |
| Bonjour, j'utilise un script de quête : - Code:
-
=begin ########################## Breadlord's Quets Script ############################ Ceci est un script pour quête vous permettant d'avoir une large description des quêtes et de multiples tâches (entend par là plusieurs à truc à faire pour la même quête hein). Tu met les quêtes sous forme d'evenement c'est à dire sous ce format :
$quests['nom de la quête'] = Quest.new([' ligne de description 1', 'ligne de description 2', ...], ['tâche 1 description', 'tâche 2 description',...])
Dans ce format 'nom de la quête' correspond au nom de la quête, 'ligne de description N' est la N ème ligne de la description de la quête et 'tâche N description' est la description de la N eme tâche
Pour completer une tâche dans un evenement utilisez $quests['nom de la quête'].complete_sub('tâche description'), et pour échouer une tâche utilisez $quests['nom de la quête'].fail_sub('tâche description'). Si toutes les tâches sont complétées/échouées alors le status de la quête deviendra complétée/échouée. Pour mettre une quête en complétée utilisez $quests['nom de la quête'].complete_all, et échouée utilisez $quests['nom de la quête'].fail_all
Pour vérifier si une quête est complétée utilisez $quests['nom de la quête'].complete?, et pour vérifier si elle est échouée utilisez $quests['nom de la quête'].failed?. Pour vérifier si une tâche est complétée utilisez $quests['nom de la quête'].sub_complete?('tâche description') et pour vérifier si elle est échouée utilisez $quests['nom de la quête'].sub_failed?('tâche description')
Pour definir une quete secondaire il suffit de rajouter true après les taches : $quests['nom de la quête'] = Quest.new([' ligne de description 1', 'ligne de description 2, ...], ['tâche 1 description', 'tâche 2 description',...], true)
Enfin pour vérifier que la quête existe utilisez $quests['nom de la quête'] != nil Pour appeler le menu de quête utilisez $scene = Scene_Quest.new Et pour lancer le menu quête sur un onglet précis il suffit de $scene = Scene_Quest.new(index de l'onglet) 0<= index de l'onglet <= 3
################################################################################ ################################################################################ =end
module QUEST_CONFIG
# Ici seront defini les 4 icones correspondant aux tri des quêtes # QUEST_ICONS = [icone des quetes en cours, icone des quetes complétées, icone des quete echouées] QUEST_ICONS = [8679,8673,8674,8685]
# Ici sera defini l'image apparaissant dans le menu # QUEST_PICTURE = "nom de l'image" QUEST_PICTURE = "Quest"
# Ici sera defini la hauteur des fenêtre et par consequence la place laisser à l'image # QUEST_WINDOWHEIGHT = hauteur QUEST_WINDOWHEIGHT = 293 # 293
# Ici sera defini l'image apparaissant lorsqu'une quête est completée # QUEST_COMPLETE = "nom de l'image" QUEST_COMPLETE = "Complete"
# Ici sera defini l'image apparaissant lorsqu'une quête est échouée # QUEST_FAILED = "nom de l'image" QUEST_FAILED = "Failed"
# Ici sera defini le message apparaissant dans la fenetre de description lors d'une quête secondaire # QUEST_SECOND = "message" QUEST_SECOND = "Quête secondaire" # Ici seront defini les 3 icones correspondant aux états des quêtes et des tâches principales # VALIDATEICONS = [icone des taches en cours, icone des taches complétées, icone des taches echouées] VALIDATEICONS = [8686, 8688, 8676]
# Ici seront defini les 3 icones correspondant aux états des quêtes et des tâches secondaires # VALIDATEICONS = [icone des taches en cours, icone des taches complétées, icone des taches echouées] VALIDATESECONDICONS = [8686, 8688, 8676]
#Ici sera defini le nom apparaissant dans le menu de base # MENUNAME = nom du menu MENUNAME = 'Quêtes'
#Ici sera defini le nom apparaissant dans la description de l'onglet des quêtes principales # QUEST_NAMEPRINCIP = nom QUEST_NAMEPRINCIP = "Quêtes Principales"
#Ici sera defini le nom apparaissant dans la description de l'onglet des quêtes secondaires # QUEST_NAMESECOND = nom QUEST_NAMESECOND = "Quêtes Secondaires"
#Ici sera defini le nom apparaissant dans la description de l'onglet des quêtes réussies # QUEST_NAMECOMP = nom QUEST_NAMECOMP = "Quêtes Réussies"
#Ici sera defini le nom apparaissant dans la description de l'onglet des quêtes échouées # QUEST_NAMEFAIL = nom QUEST_NAMEFAIL = "Quêtes Ratés"
# Ici sera defini à titre indicatif le numero du menu quête dans le menu de base (comptez à partir de 0) # cela n'aura aucune influance sur sa position. # MENU_NUMBER = umero du menu quête dans le menu de base MENU_NUMBER = 5
# Ici sera defini l'interrupteur definissant si un tache échoué fais echoué la quête ou non. # FAILSUB_FAILCOMPLETE = true/false FAILSUB_FAILCOMPLETE = false
end
#============================================================================== # ** Quest #------------------------------------------------------------------------------ # Cette classe permet de definir des quêtes # Elle est appelée par $quests #============================================================================== class Quest attr_accessor :desc, :sub, :comp, :sub_text, :pic #-------------------------------------------------------------------------- # * Quête Initialization # desc : tableau des descriptions # sub : tableau des tâches # pic : window width #-------------------------------------------------------------------------- def initialize(desc = [''], sub = [''], second = false) @desc = desc @sub = {} @second = second for i in 0..sub.size - 1 # pour chaque tache @sub[sub[i]] = 'prog' #construit une clef du nom de la tache avec la valeur prog end @comp = 'prog' @sub_text = [] for i in 0..sub.size - 1 @sub_text.push(sub[i]) # pour chaque tache end end
#-------------------------------------------------------------------------- # * Completer une Tâche # sub : tâche #-------------------------------------------------------------------------- def second? return @second end #-------------------------------------------------------------------------- # * Completer une Tâche # sub : tâche #-------------------------------------------------------------------------- def complete_sub(sub) @sub[sub] = 'comp' test_complete end #-------------------------------------------------------------------------- # * Tester si la Quête est devenue complete # sub : tâche #-------------------------------------------------------------------------- def test_complete @a = true for i in 0..@sub.keys.size - 1 if @sub[@sub.keys[i]] == 'comp' @a = (@a and true) else @a = (@a and false) end end if @a == true complete_all end end #-------------------------------------------------------------------------- # * Echouer une Tâche # sub : tâche #-------------------------------------------------------------------------- def fail_sub(sub) if QUEST_CONFIG::FAILSUB_FAILCOMPLETE fail_all else @sub[sub] = 'fail' end end
#-------------------------------------------------------------------------- # *Compeleter toutes les Tâches #-------------------------------------------------------------------------- def complete_all @comp = 'comp' for i in @sub.keys @sub[i] = 'comp' end end #-------------------------------------------------------------------------- # *Echouer à toutes les Tâches #-------------------------------------------------------------------------- def fail_all @comp = 'fail' for i in @sub.keys @sub[i] = 'fail' end end #-------------------------------------------------------------------------- # *Tester si une Tâches est complete #-------------------------------------------------------------------------- def sub_complete?(sub) return @sub[sub] == 'comp'? true : false end #-------------------------------------------------------------------------- # *Tester si une Quête est complete #-------------------------------------------------------------------------- def complete? return @comp == 'comp'? true : false end #-------------------------------------------------------------------------- # *Tester si une Tâches est échouée #-------------------------------------------------------------------------- def sub_failed?(sub) return @sub[sub] == 'fail'? true : false end #-------------------------------------------------------------------------- # *Tester si une Quête est échouée #-------------------------------------------------------------------------- def failed? return @comp == 'fail'? true : false end end
#============================================================================== # ** Window_Quest_Type #------------------------------------------------------------------------------ # Cette fenetre affiche les differents états des quêtes. #============================================================================== class Window_Quest_Type < Window_Selectable attr_accessor :active, :index #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize super(0,352 - QUEST_CONFIG::QUEST_WINDOWHEIGHT,160,64) @column_max = 4 @index = 0 @icons = QUEST_CONFIG::QUEST_ICONS @spacing = 14 refresh end #-------------------------------------------------------------------------- # * Refresh #-------------------------------------------------------------------------- def refresh @item_max = @icons.size create_contents for i in 0...@item_max rect = item_rect(i) rect.x -= 2 icon = @icons[i] draw_icon(icon, rect.x, rect.y) end end end #============================================================================== # ** Window_Quest_Title #------------------------------------------------------------------------------ # Cette fenetre affiche les descriptions des quêtes. #============================================================================== class Window_Quest_Title < Window_Base #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(index = QUEST_CONFIG::MENUNAME) super( 160, 352 - QUEST_CONFIG::QUEST_WINDOWHEIGHT, 384, 64) @pic_title = Sprite.new @pic_title.bitmap = Cache.picture(QUEST_CONFIG::QUEST_PICTURE) self.contents.draw_text(0, 0, self.width - 40, WLH, index, 1) end #-------------------------------------------------------------------------- # * Dispose #-------------------------------------------------------------------------- def dispose super @pic_title.dispose end end #============================================================================== # ** Window_Quest_Desc #------------------------------------------------------------------------------ # Cette fenetre affiche lee contenue des quêtes. #============================================================================== class Window_Quest_Desc < Window_Base #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(index = nil) super( 160, 416 - QUEST_CONFIG::QUEST_WINDOWHEIGHT, 384, QUEST_CONFIG::QUEST_WINDOWHEIGHT) @status = Sprite.new if index != nil if $quests[index].complete? @status.bitmap = Cache.picture(QUEST_CONFIG::QUEST_COMPLETE) elsif $quests[index].failed? @status.bitmap = Cache.picture(QUEST_CONFIG::QUEST_FAILED) end @status.z = 201 for i in 0..$quests[index].desc.size - 1 a = $quests[index].desc[i] self.contents.draw_text(0, WLH*i, self.width - 40, WLH, a, 1) end a = $quests[index].sub_text for i in 0..a.size - 1 b = a[i] if $quests[index].sub[b] == 'prog' if $quests[index].second? ic = QUEST_CONFIG::VALIDATESECONDICONS[0] else ic = QUEST_CONFIG::VALIDATEICONS[0] end elsif $quests[index].sub[b] == 'comp' if $quests[index].second? ic = QUEST_CONFIG::VALIDATESECONDICONS[1] else ic = QUEST_CONFIG::VALIDATEICONS[1] end else if $quests[index].second? ic = QUEST_CONFIG::VALIDATESECONDICONS[2] else ic = QUEST_CONFIG::VALIDATEICONS[2] end end draw_icon(ic, 4, WLH*(i + $quests[index].desc.size + 1)) self.contents.draw_text(0, WLH*(i + $quests[index].desc.size + 1), self.width - 40, WLH, b, 1) end if $quests[index].second? self.contents.draw_text(0, QUEST_CONFIG::QUEST_WINDOWHEIGHT - 3*WLH, self.width - 40, WLH, QUEST_CONFIG::QUEST_SECOND, 1) end end end #-------------------------------------------------------------------------- # * Dispose #-------------------------------------------------------------------------- def dispose super @status.dispose end end #============================================================================== # ** Window_Quest_Type #------------------------------------------------------------------------------ # Cette fenetre affiche lee contenue des quêtes. #============================================================================== class Window_Select_Quest < Window_Selectable
attr_accessor :c_items #-------------------------------------------------------------------------- # * Object Initialization #-------------------------------------------------------------------------- def initialize(type = 1) super(0, 416 - QUEST_CONFIG::QUEST_WINDOWHEIGHT, 160, QUEST_CONFIG::QUEST_WINDOWHEIGHT) @type = type self.index = 0 self.active = false @items = $quests.keys create_contents a = @items @c_items = [] for it in 0...@items.size if include?(a[it]) @c_items.push(a[it]) end end for it in 0...@c_items.size draw_opt(it) end end
#-------------------------------------------------------------------------- # * Update #-------------------------------------------------------------------------- def update super @data = @c_items @item_max = @data.size end
#-------------------------------------------------------------------------- # * Include ? # key : nom d'une quête #-------------------------------------------------------------------------- def include?(key) case @type when 1 if !$quests[key].complete? and !$quests[key].failed? and !$quests[key].second? return true end when 2 unless $quests[key].complete? or $quests[key].failed? return $quests[key].second? end when 3 return $quests[key].complete? when 4 return $quests[key].failed? end end #-------------------------------------------------------------------------- # * Draw Opt # itemm : quête #-------------------------------------------------------------------------- def draw_opt(itemm) a = @c_items rect = item_rect(itemm) self.contents.clear_rect(rect) if $quests[@c_items[itemm]].complete? if $quests[@c_items[itemm]].second? draw_icon(QUEST_CONFIG::VALIDATESECONDICONS[1],rect.x, rect.y) else draw_icon(QUEST_CONFIG::VALIDATEICONS[1],rect.x, rect.y) end elsif $quests[@c_items[itemm]].failed? if $quests[@c_items[itemm]].second? draw_icon(QUEST_CONFIG::VALIDATESECONDICONS[2],rect.x, rect.y) else draw_icon(QUEST_CONFIG::VALIDATEICONS[2],rect.x, rect.y) end else if $quests[@c_items[itemm]].second? draw_icon(QUEST_CONFIG::VALIDATESECONDICONS[0],rect.x, rect.y) else draw_icon(QUEST_CONFIG::VALIDATEICONS[0],rect.x , rect.y) end end string = @c_items[itemm] rect.width -= 4 self.contents.draw_text(rect.x, rect.y, rect.width, WLH, string, 2) end end
#============================================================================== # ** Scene_Quest #------------------------------------------------------------------------------ # Cette classe fere le menu de quêtes #============================================================================== class Scene_Quest < Scene_Base
#-------------------------------------------------------------------------- # * Object Initialization # #-------------------------------------------------------------------------- def initialize(index = 0, menu = false) @menu = menu @index = index end
#-------------------------------------------------------------------------- # * Start processing #-------------------------------------------------------------------------- def start super create_menu_background @type = Window_Quest_Type.new @type.visible = true @type.active = true @type.index = @index @quests = Window_Select_Quest.new(@index +1) @quests.active = false @quests.index = -1 @desc_window = Window_Quest_Desc.new @title = Window_Quest_Title.new update_desc end
#-------------------------------------------------------------------------- # * Return to Original Screen #-------------------------------------------------------------------------- def return_scene if @menu $scene = Scene_Menu.new(QUEST_CONFIG::MENU_NUMBER) else $scene = Scene_Map.new end end
#-------------------------------------------------------------------------- # * Terminate #-------------------------------------------------------------------------- def terminate dispose_menu_background @type.dispose @quests.dispose @title.dispose @desc_window.dispose end #-------------------------------------------------------------------------- # * Update Frame #-------------------------------------------------------------------------- def update super update_menu_background @type.update @quests.update if @type.active update_type_selection elsif @quests.active update_quests_selection else update_desc_selection end if Input.trigger?(Input::A) Sound.play_cancel return_scene end end #-------------------------------------------------------------------------- # * Update Type Selection #-------------------------------------------------------------------------- def update_type_selection if Input.trigger?(Input::B) Sound.play_cancel return_scene elsif Input.trigger?(Input::C) a = @type.index Sound.play_cursor @type.active = false @quests.dispose @quests = Window_Select_Quest.new(a + 1) @quests.active = true @quests.index = 0 elsif Input.trigger?(Input::LEFT) or Input.trigger?(Input::RIGHT) a = @type.index @quests.dispose @quests = Window_Select_Quest.new(a + 1) @quests.index = -1 update_desc end end
#-------------------------------------------------------------------------- # * Update Quests Decription #-------------------------------------------------------------------------- def update_desc case @type.index when 0 @title.dispose @title = Window_Quest_Title.new(QUEST_CONFIG::QUEST_NAMEPRINCIP) when 1 @title.dispose @title = Window_Quest_Title.new(QUEST_CONFIG::QUEST_NAMESECOND) when 2 @title.dispose @title = Window_Quest_Title.new(QUEST_CONFIG::QUEST_NAMECOMP) when 3 @title.dispose @title = Window_Quest_Title.new(QUEST_CONFIG::QUEST_NAMEFAIL) end end #-------------------------------------------------------------------------- # * Update Quests Selection #-------------------------------------------------------------------------- def update_quests_selection if Input.trigger?(Input::B) Sound.play_cancel Sound.play_cursor @type.active = true @quests.active = false @quests.index = -1 update_desc @desc_window.dispose @desc_window = Window_Quest_Desc.new elsif Input.trigger?(Input::C) if @quests.c_items[@quests.index] == nil Sound.play_buzzer else Sound.play_decision @desc_window.dispose @desc_window = Window_Quest_Desc.new(@quests.c_items[@quests.index]) @title.dispose @title = Window_Quest_Title.new(@quests.c_items[@quests.index]) @quests.active = false @type.active = false end end end
#-------------------------------------------------------------------------- # * Update Desc Selection #-------------------------------------------------------------------------- def update_desc_selection if Input.trigger?(Input::B) Sound.play_cancel Sound.play_cursor @quests.active = true update_desc @desc_window.dispose @desc_window = Window_Quest_Desc.new end end end
#============================================================================== # ** Scene_Title #------------------------------------------------------------------------------ # This class performs the title screen processing. #============================================================================== class Scene_Title < Scene_Base
alias startupquest command_new_game #-------------------------------------------------------------------------- # * Command: New Game #-------------------------------------------------------------------------- def command_new_game startupquest $quests = {} end end #============================================================================== # ** Scene_File #------------------------------------------------------------------------------ # This class performs the save and load screen processing. #============================================================================== class Scene_File < Scene_Base
alias savequest write_save_data #-------------------------------------------------------------------------- # * Write Save Data # file : write file object (opened) #-------------------------------------------------------------------------- def write_save_data(file) savequest(file) Marshal.dump($quests, file) end
alias loadquest read_save_data #-------------------------------------------------------------------------- # * Read Save Data # file : file object for reading (opened) #-------------------------------------------------------------------------- def read_save_data(file) loadquest(file) $quests = Marshal.load(file) end end Mais je n'arrive pas, malgré les explications, à programmer les quetes. Quelqu'un pourrait il m'aider ? |
|
Voyageur Lv.10
Age : 27 Inscrit le : 01/08/2011 Messages : 446
| Sujet: Re: Script de quête Sam 22 Oct 2011 - 15:04 | |
| |
|
Poulet carnivore Lv.2
Inscrit le : 22/10/2011 Messages : 16
| Sujet: Re: Script de quête Sam 22 Oct 2011 - 18:18 | |
| Pour programmer les quêtes il faut que tu fasses un évent puis, insérer un script : - Code:
-
$quests['Retrouve mon doudou'] = Quest.new([' Tu vas devoir reprendre', 'le doudou de la fille', 'aux bandits'],['reprends le doudou aux bandits et', 'ramène le doudou à la fillette']) Pour la finir (quand tu donnes le doudou à la fillette tu fais insérer un script) ; - Code:
-
$quests['Retrouve mon doudou'].complete_all?
Si tu dis que les bandits ont vendus le doudou à des contrebandiers parce que le chrono a dépassé les 2h, insérer un script : - Code:
-
$quests['Retrouve mon doudou'].sub_failed? C'est peut-être faux, j'ai lu que les premières lignes... à tester. |
|
Voyageur Lv.10
Age : 27 Inscrit le : 01/08/2011 Messages : 446
| Sujet: Re: Script de quête Dim 23 Oct 2011 - 10:37 | |
| |
|
| Sujet: Re: Script de quête | |
| |
|