- VarkanMembre
- Nombre de messages : 292
Distinction : aucune
Date d'inscription : 27/01/2010
[Résolu]Script de quêtes sympa mais bugé ?
Lun 10 Mai 2010 - 19:33
Yop yop all !
Je viens dans un premier temps vous demander de m'aider, si vous le voulez bien, à résoudre mon problème.
Le script n'est pas sur ce forum, donc je le partagerai dans la bonne section une fois le prob. résolu.
Voici le script de Breadlord :
Pour vous aider, une traduction "perso" écrite par un pote :
Les images qu'il faut mettre :
Et pour finir la démo : http://www.mediafire.com/?20nz3m2ntdq
Avec tout ça je pense que vous pourrez m'aider.
Donc si vous avez testé le script, voici mon problème :
Je fais ma quête (pas sur un pnj, mais sur une caisse afin d'activer la quête) comme ceci avec un appel de script :
La quête marche je vois les objectifs....
Ensuite je prend la caisse et je fais ceci, toujours en appelle de script :
Ce qui Normalement, devrait me compléter l'objectif "Prendre la caisse" MAIS le problème justement c'est qu'il me complète la quête entière... et c'est ça que je ne comprend pas.
Si vous avez des questions ou mal compris mon problème dites le moi, merci d'avance pour les futurs réponses.
Je viens dans un premier temps vous demander de m'aider, si vous le voulez bien, à résoudre mon problème.
Le script n'est pas sur ce forum, donc je le partagerai dans la bonne section une fois le prob. résolu.
Voici le script de Breadlord :
- Spoiler:
- ########################## Breadlord's Quets Script ############################
## This is a quest script that alows you to have quests with large ##
## descriptions and multiple sub-tasks. You set up quests in events in the ##
## format $quests['quest name'] = Quest.new(['Description line 1', ' ##
## Description line 2', ect], ['Sub task 1 description', 'Sub task 2 ##
## description', ect]). In this format 'quest name' is the name of the ##
## quest, 'Description line ?' is the ?th line of the quests description, and ##
## 'Sub task ? description' is the description of the ?th sub task. ##
## ##
## To make a sub-task complete in an event use $quests['Quest name'].complete ##
## _sub('sub task description'), and to fail a sub task use $quests['Quest ##
## name'].fail_sub('sub task description'). If all the subtasks are complete ##
## / failed then the quest status will be set to complete / failed. To set a ##
## quest to complete use $quests['Quest name'].complete_all, and to fail the ##
## quest use $quests['Quest name'].fail_all. ##
## ##
## To check if a quest is complete use $quests['Quest name'].complete?, and ##
## to check if a quest is failed use $quests['Quest name'].failed?. To check ##
## if a sub task is complete use $quests['Quest name'].sub_complete?('sub ##
## task description') and to check if a sub task is complete use ##
## $quests['Quest name'].sub_failed?('Sub task description'). Lastly to check ##
## if the quest exists use $quests['Quest name'] != nil ##
## ##
## To call the quest menu use $scene = Scene_Quest.new ##
################################################################################
################################################################################
def quest_settings_picture ## If you set this to true then a picture that you specify in the making of the quest, by putting 'picture name' between the sub tasks and the end bracket
return false
end
### DO NOT EDIT ## DO NOT EDIT ## DO NOT EDIT ## DO NOT EDIT ## DO NOT EDIT ###
class Quest
attr_accessor :desc, :sub, :comp, :sub_text, :pic
def initialize(desc = [''], sub = [''], pic = nil)
@pic = pic
@desc = desc
@sub = {}
for i in 0..sub.size - 1
@sub[sub[i]] = 'prog'
end
@comp = 'prog'
@sub_text = []
for i in 0..sub.size - 1
@sub_text.push(sub[i])
end
end
def complete_sub(sub)
@sub[sub] = 'comp'
a = []
for i in @sub.keys
a = a.push(@sub[i])
end
a = a - ['comp']
print a
if a == []
complete_all
end
end
def fail_sub(sub)
@sub[sub] = 'fail'
a = []
for i in @sub.keys
a = a.push(@sub[i])
end
a = a - ['fail']
print a
if a == []
fail_all
end
end
def complete_all
@comp = 'comp'
for i in @sub.keys
@sub[i] = 'comp'
end
end
def fail_all
@comp = 'fail'
for i in @sub.keys
@sub[i] = 'fail'
end
end
def sub_complete?(sub)
return @sub[sub] == 'comp'? true : false
end
def complete?
return @comp == 'comp'? true : false
end
def sub_failed?(sub)
return @sub[sub] == 'fail'? true : false
end
def failed?
return @comp == 'fail'? true : false
end
end
class Window_Quest_Type < Window_Base
attr_accessor :active, :index
def initialize
super(0,59,160,64)
@active = true
@index = 0
icons = [188, 150, 112]
for i in 0..2
b = icons[i]
c = 0
if i == 1
c = 8
elsif i == 2
c = 14
end
draw_icon(b, 30*(i + 1) + c - 12, 0 , 0)
end
end
def update
if @active == true
if Input.trigger?(Input::RIGHT)
Sound.play_cursor
if @index == 2
@index = 0
else
@index += 1
end
end
if Input.trigger?(Input::LEFT)
Sound.play_cursor
if @index == 0
@index = 2
else
@index -= 1
end
end
rect = self.contents.rect
case @index
when 0
rect.x = 18
rect.y = 0
rect.width = 24
rect.height = 24
when 1
rect.x = 54
rect.y = 0
rect.width = 24
rect.height = 24
when 2
rect.x = 92
rect.y = 0
rect.width = 24
rect.height = 24
end
self.cursor_rect = rect
end
end
end
class Scene_Quest < Scene_Base
def start
super
@no = false
create_menu_background
@type = Window_Quest_Type.new
@type.visible = true
@quests = Window_Select_Quest.new
@quests.active = false
@desc_window = Window_Quest_Desc.new
@title = Window_Quest_Title.new
end
def update
if !@quests.active == true
if Input.trigger?(Input::DOWN)
a = @type.index
Sound.play_cursor
@type.active = false
@quests.dispose
@quests = Window_Select_Quest.new(a + 1)
@quests.active = true
end
@type.update
else
@quests.update
if Input.trigger?(Input::UP) and @quests.index == 0
Sound.play_cursor
@type.active = true
@quests.active = false
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])
end
end
end
if Input.trigger?(Input::B)
Sound.play_cancel
@type.dispose
@quests.dispose
@title.dispose
@desc_window.dispose
$scene = Scene_Map.new
end
end
end
class Window_Quest_Title < Window_Base
def initialize(index = 'Quests')
super( 160, 59, 384, 64)
@pic_title = Sprite.new
@pic_title.bitmap = Cache.picture('Quest')
self.contents.draw_text(0, 0, self.width - 40, WLH, index, 1)
end
def dispose
super
@pic_title.dispose
end
end
class Window_Quest_Desc < Window_Base
def initialize(index = nil)
if quest_settings_picture
super( 160, 123, 384, 165)
@questyp = Sprite.new
if index != nil
@questyp.bitmap = Cache.picture($quests[index].pic)
@questyp.x = 0
@questyp.y = 288
end
else
super( 160, 123, 384, 293)
end
@status = Sprite.new
if index != nil
if $quests[index].complete?
@status.bitmap = Cache.picture('complete')
elsif $quests[index].failed?
@status.bitmap = Cache.picture('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'
ic = 96
elsif $quests[index].sub[b] == 'comp'
ic = 101
else
ic = 99
end
if $quests[index].sub_text[i] != 'qwerty'
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
end
end
end
def dispose
super
@status.dispose
end
end
class Window_Select_Quest < Window_Selectable
attr_accessor :c_items
def initialize(type = 1)
if quest_settings_picture
super(0, 123, 160, 165)
else
super(0, 123, 160, 293)
end
@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
def update
super
@data = @items
@item_max = @data.size
end
def include?(key)
case @type
when 1
if !$quests[key].complete? and !$quests[key].failed?
return true
end
when 2
return $quests[key].complete?
when 3
return $quests[key].failed?
end
end
def draw_opt(itemm)
a = @c_items
rect = item_rect(itemm)
self.contents.clear_rect(rect)
if $quests[@c_items[itemm]].complete?
draw_icon(101,rect.x, rect.y)
elsif $quests[@c_items[itemm]].failed?
draw_icon(99,rect.x, rect.y)
else
draw_icon(96,rect.x, rect.y)
end
string = @c_items[itemm]
rect.width -= 4
self.contents.draw_text(rect.x, rect.y, rect.width, WLH, string, 1)
end
end
class Scene_Title < Scene_Base
alias startupquest command_new_game
def command_new_game
startupquest
$quests = {}
end
end
class Scene_File < Scene_Base
alias savequest write_save_data
alias loadquest read_save_data
def write_save_data(file)
savequest
Marshal.dump($quests, file)
end
def read_save_data(file)
$quests = Marshal.load(file)
loadquest
end
end
Pour vous aider, une traduction "perso" écrite par un pote :
- Spoiler:
- 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 bahvoui, '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')
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
def quest_settings_picture ## si tu le met sur True alors une image que tu choisiras dans le façonnage de la quête, en mettant 'nom de l'image' entre tâche et la fin des parenthèses
Les images qu'il faut mettre :
- Spoiler:
Et pour finir la démo : http://www.mediafire.com/?20nz3m2ntdq
Avec tout ça je pense que vous pourrez m'aider.
Donc si vous avez testé le script, voici mon problème :
Je fais ma quête (pas sur un pnj, mais sur une caisse afin d'activer la quête) comme ceci avec un appel de script :
- Spoiler:
- $quests['Cargaison'] = Quest.new(
['Apporter la cargaison au village Kiko.'],
['Prendre la caisse','Parler à Zecko',
'Déposer la caisse'])
$scene = Scene_Quest.new
La quête marche je vois les objectifs....
Ensuite je prend la caisse et je fais ceci, toujours en appelle de script :
- Spoiler:
- $quests['Cargaison'].complete_sub(
'Prendre la caisse')
$scene = Scene_Quest.new
Ce qui Normalement, devrait me compléter l'objectif "Prendre la caisse" MAIS le problème justement c'est qu'il me complète la quête entière... et c'est ça que je ne comprend pas.
Si vous avez des questions ou mal compris mon problème dites le moi, merci d'avance pour les futurs réponses.
- SkilloStaffeux retraité
- Nombre de messages : 526
Age : 35
Localisation : Rennes
Distinction : J'aime ce gars
(by Coco')
Scripteur apprenti, futur Berka !
(par Tretian)
Membre anonyme de la communauté, caché derrière son PC
(???)
super prof de script
[Dudu']
Résident permanent de la Chat Box
[Autoproclamé]
Adepte du XDDD [Yak' ]
Fanatique hystérique de Raymond le français [Un connu]
Date d'inscription : 19/01/2008
Re: [Résolu]Script de quêtes sympa mais bugé ?
Lun 10 Mai 2010 - 21:01
Ce script ne marche pas même dans la demo XD Je vais voir ce que je peux faire. Je rajouterai aussi quelques modifs.
- VarkanMembre
- Nombre de messages : 292
Distinction : aucune
Date d'inscription : 27/01/2010
Re: [Résolu]Script de quêtes sympa mais bugé ?
Lun 10 Mai 2010 - 21:19
Ah ? moi elle marche ^^ enfin je crois =D les objectifs se finissent petit à petit puis après je retourne vers le vieux et la quête est complétée.
En tout cas merci de ton aide !
En tout cas merci de ton aide !
- SkilloStaffeux retraité
- Nombre de messages : 526
Age : 35
Localisation : Rennes
Distinction : J'aime ce gars
(by Coco')
Scripteur apprenti, futur Berka !
(par Tretian)
Membre anonyme de la communauté, caché derrière son PC
(???)
super prof de script
[Dudu']
Résident permanent de la Chat Box
[Autoproclamé]
Adepte du XDDD [Yak' ]
Fanatique hystérique de Raymond le français [Un connu]
Date d'inscription : 19/01/2008
Re: [Résolu]Script de quêtes sympa mais bugé ?
Lun 10 Mai 2010 - 21:51
Chez moi la quête se termine avant que j'aille revoir le prêtre.
- VarkanMembre
- Nombre de messages : 292
Distinction : aucune
Date d'inscription : 27/01/2010
Re: [Résolu]Script de quêtes sympa mais bugé ?
Lun 10 Mai 2010 - 23:26
Très bizarre oO
Faudrait qu'il y ai une autre personne qui essai la démo pour voir
Faudrait qu'il y ai une autre personne qui essai la démo pour voir
- SkilloStaffeux retraité
- Nombre de messages : 526
Age : 35
Localisation : Rennes
Distinction : J'aime ce gars
(by Coco')
Scripteur apprenti, futur Berka !
(par Tretian)
Membre anonyme de la communauté, caché derrière son PC
(???)
super prof de script
[Dudu']
Résident permanent de la Chat Box
[Autoproclamé]
Adepte du XDDD [Yak' ]
Fanatique hystérique de Raymond le français [Un connu]
Date d'inscription : 19/01/2008
Re: [Résolu]Script de quêtes sympa mais bugé ?
Mar 11 Mai 2010 - 1:52
Ok problème réglé (et tester avec ta quête) et tout marche mais je reste dessus pour l'instant ce script est un vrai bazar et est pas du tout ergonomique ni customisable. Je m'en vais lui apporter quelques modifs de mon cru. XD
- VarkanMembre
- Nombre de messages : 292
Distinction : aucune
Date d'inscription : 27/01/2010
Re: [Résolu]Script de quêtes sympa mais bugé ?
Mar 11 Mai 2010 - 7:22
Super ! bravo à toi ^^ C'était quoi le prob ?
Oki alors amuse toi bien =D vivement que j'essaie ton script
Oki alors amuse toi bien =D vivement que j'essaie ton script
- SkilloStaffeux retraité
- Nombre de messages : 526
Age : 35
Localisation : Rennes
Distinction : J'aime ce gars
(by Coco')
Scripteur apprenti, futur Berka !
(par Tretian)
Membre anonyme de la communauté, caché derrière son PC
(???)
super prof de script
[Dudu']
Résident permanent de la Chat Box
[Autoproclamé]
Adepte du XDDD [Yak' ]
Fanatique hystérique de Raymond le français [Un connu]
Date d'inscription : 19/01/2008
Re: [Résolu]Script de quêtes sympa mais bugé ?
Mar 11 Mai 2010 - 12:53
Le problème était que complet_sub était mal définie du coup un quête pouvais être complétée au moindre complet_sub et ce de manière complètement aléatoire.
Enfin voilà le script, il est désormais possible de choisir ses propres images et icônes ainsi que le nom qui apparait dans le menu. J'ai aussi changé les sélections des quêtes et l'actualisation des fenêtres que je trouvais pourrav.
Pour quitter le menu quêtes il y a maintenant deux possibilités soit en retournant sur la sélections des types de quêtes et en appuyant sur B (Echap, 0 pav num, etc...) soit en appuyant à tout moment sur A (shift).
Voici le script :
Et voici le script pour faire apparaitre le menu quête dans le menu de base.
Voilà lit bien les commentaire du script pour comprendre comment le configurer.
Enfin voilà le script, il est désormais possible de choisir ses propres images et icônes ainsi que le nom qui apparait dans le menu. J'ai aussi changé les sélections des quêtes et l'actualisation des fenêtres que je trouvais pourrav.
Pour quitter le menu quêtes il y a maintenant deux possibilités soit en retournant sur la sélections des types de quêtes et en appuyant sur B (Echap, 0 pav num, etc...) soit en appuyant à tout moment sur A (shift).
Voici le script :
- Spoiler:
- Code:
=begin
########################## Breadlord's Quets Script modifié par Skillo ############################
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')
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
################################################################################
################################################################################
=end
module QUEST_CONFIG
# Ici seront defini les 3 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 = [188, 150, 112]
# 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 seront defini les 3 icones correspondant aux états des quêtes et des tâches
# VALIDATEICONS = [icone des taches en cours, icone des taches complétées, icone des taches echouées]
VALIDATEICONS = [96, 101, 99]
#Ici sera defini le nom apparaissant dans le menu de base et dans le menu de quête
# MENUNAME = nom du menu
MENUNAME = 'Quêtes'
# 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 = 4
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 = [''])
@desc = desc
@sub = {}
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 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)
@sub[sub] = 'fail'
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 = 3
@index = 0
@icons = QUEST_CONFIG::QUEST_ICONS
refresh
end
#--------------------------------------------------------------------------
# * Refresh
#--------------------------------------------------------------------------
def refresh
@item_max = @icons.size
create_contents
for i in 0...@item_max
rect = item_rect(i)
self.contents.clear_rect(rect)
rect.width -= 4
icon = @icons[i]
draw_icon(icon, rect.x, rect.y)
end
end
end
#==============================================================================
# ** Window_Quest_Type
#------------------------------------------------------------------------------
# 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_Type
#------------------------------------------------------------------------------
# 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'
ic = QUEST_CONFIG::VALIDATEICONS[0]
elsif $quests[index].sub[b] == 'comp'
ic = QUEST_CONFIG::VALIDATEICONS[1]
else
ic = QUEST_CONFIG::VALIDATEICONS[2]
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
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?
return true
end
when 2
return $quests[key].complete?
when 3
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?
draw_icon(QUEST_CONFIG::VALIDATEICONS[1],rect.x, rect.y)
elsif $quests[@c_items[itemm]].failed?
draw_icon(QUEST_CONFIG::VALIDATEICONS[2],rect.x, rect.y)
else
draw_icon(QUEST_CONFIG::VALIDATEICONS[0],rect.x, rect.y)
end
string = @c_items[itemm]
rect.width -= 4
self.contents.draw_text(rect.x, rect.y, rect.width, WLH, string, 1)
end
end
#==============================================================================
# ** Scene_Quest
#------------------------------------------------------------------------------
# Cette classe fere le menu de quêtes
#==============================================================================
class Scene_Quest < Scene_Base
#--------------------------------------------------------------------------
# * Object Initialization
#
#--------------------------------------------------------------------------
def initialize(menu = false)
@menu = menu
end
#--------------------------------------------------------------------------
# * Start processing
#--------------------------------------------------------------------------
def start
super
create_menu_background
@type = Window_Quest_Type.new
@type.visible = true
@type.active = true
@quests = Window_Select_Quest.new
@quests.active = false
@quests.index = -1
@desc_window = Window_Quest_Desc.new
@title = Window_Quest_Title.new
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
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
@title.dispose
@title = Window_Quest_Title.new
@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
@title.dispose
@title = Window_Quest_Title.new
@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
alias loadquest read_save_data
#--------------------------------------------------------------------------
# * Write Save Data
# file : write file object (opened)
#--------------------------------------------------------------------------
def write_save_data(file)
savequest
Marshal.dump($quests, file)
end
#--------------------------------------------------------------------------
# * Read Save Data
# file : file object for reading (opened)
#--------------------------------------------------------------------------
def read_save_data(file)
$quests = Marshal.load(file)
loadquest
end
end
Et voici le script pour faire apparaitre le menu quête dans le menu de base.
- Spoiler:
- Code:
## All this does is make the quest menu be accessible from the menu, you ##
## have to use this ##
#==============================================================================
# ** Scene_Menu
#------------------------------------------------------------------------------
# This class performs the menu screen processing.
#==============================================================================
class Scene_Menu < Scene_Base
#--------------------------------------------------------------------------
# * Create Command Window
#--------------------------------------------------------------------------
def create_command_window
s1 = Vocab::item
s2 = Vocab::skill
s3 = Vocab::equip
s4 = Vocab::status
s5 = QUEST_CONFIG::MENUNAME
s6 = Vocab::save
s7 = Vocab::game_end
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])
@command_window.index = @menu_index
if $game_party.members.size == 0 # If number of party members is 0
@command_window.draw_item(0, false) # Disable item
@command_window.draw_item(1, false) # Disable skill
@command_window.draw_item(2, false) # Disable equipment
@command_window.draw_item(3, false) # Disable status
end
if $game_system.save_disabled # If save is forbidden
@command_window.draw_item(5, false) # Disable save
end
end
#--------------------------------------------------------------------------
# * Update Command Selection
#--------------------------------------------------------------------------
def update_command_selection
if Input.trigger?(Input::B)
Sound.play_cancel
$scene = Scene_Map.new
elsif Input.trigger?(Input::C)
if $game_party.members.size == 0 and @command_window.index < 4
Sound.play_buzzer
return
elsif $game_system.save_disabled and @command_window.index == 5
Sound.play_buzzer
return
end
Sound.play_decision
case @command_window.index
when 0 # Item
$scene = Scene_Item.new
when 1,2,3 # Skill, equipment, status
start_actor_selection
when 4 # Quests
$scene = Scene_Quest.new
when 5 # Save
$scene = Scene_File.new(true, false, false)
when 6 # End Game
$scene = Scene_End.new
end
end
end
end
Voilà lit bien les commentaire du script pour comprendre comment le configurer.
- VarkanMembre
- Nombre de messages : 292
Distinction : aucune
Date d'inscription : 27/01/2010
Re: [Résolu]Script de quêtes sympa mais bugé ?
Mar 11 Mai 2010 - 17:18
Oh génial ! je vais tester tout ça et je reviens te dire mon avis !mais je peux déjà te dire merci beaucoup
Edit : Super t'as modification est parfaite !
Juste une question, est-il possible de faire en sorte que le script soit compatible avec le menu de moghunter ? Car mon menu est assez grand et je ne vois pas tout avec l'ajout du menu quête.
Edit : Super t'as modification est parfaite !
Juste une question, est-il possible de faire en sorte que le script soit compatible avec le menu de moghunter ? Car mon menu est assez grand et je ne vois pas tout avec l'ajout du menu quête.
- SkilloStaffeux retraité
- Nombre de messages : 526
Age : 35
Localisation : Rennes
Distinction : J'aime ce gars
(by Coco')
Scripteur apprenti, futur Berka !
(par Tretian)
Membre anonyme de la communauté, caché derrière son PC
(???)
super prof de script
[Dudu']
Résident permanent de la Chat Box
[Autoproclamé]
Adepte du XDDD [Yak' ]
Fanatique hystérique de Raymond le français [Un connu]
Date d'inscription : 19/01/2008
Re: [Résolu]Script de quêtes sympa mais bugé ?
Mar 11 Mai 2010 - 17:46
vi c'est pas compliquer donne moi juste le script de menu que tu veux.
- VarkanMembre
- Nombre de messages : 292
Distinction : aucune
Date d'inscription : 27/01/2010
Re: [Résolu]Script de quêtes sympa mais bugé ?
Mar 11 Mai 2010 - 20:15
Comment ça ? ^^
- Docteur Kojy.Staffeux retraité
- Nombre de messages : 1210
Age : 29
Localisation : si tu dis mon pseudo 3 fois devant un miroir, j'apparais derrière toi !
Distinction : Sauveur préféré de notre chère patrie la communauté
Officieusement le coach-vocal-impresario-choriste-muse-amant de Coco'[Coco' himself ]
Attend toujours de le voir apparaitre après avoir dit son pseudo 256 fois devant un miroir [Xak' ]
Si tu le poses contre ton oreille, tu entends un Sonic Rainboom.
Date d'inscription : 24/02/2008
Re: [Résolu]Script de quêtes sympa mais bugé ?
Mar 11 Mai 2010 - 20:47
Il te demande le lien du script de menu moghunter.
- VarkanMembre
- Nombre de messages : 292
Distinction : aucune
Date d'inscription : 27/01/2010
Re: [Résolu]Script de quêtes sympa mais bugé ?
Mar 11 Mai 2010 - 21:23
oki oki
Le voici :
Le voici :
- Spoiler:
- ################################################
# Mog Basic Menu Plus V 1.0 #
##################################################
# By Moghunter
# revu par Berka
##################################################
##############
# Game_Actor #
##############
class Game_Actor < Game_Battler
def now_exp
return @exp - @exp_list[@level]
end
def next_exp
return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
end
end
###############
# Window_Base #
###############
class Window_Base < Window
def draw_item_icon(item, x, y)
if item != nil
draw_icon(item.icon_index, x, y)
end
end
def draw_actor_level_menu(actor, x, y)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 32, WLH, Vocab::level_a)
self.contents.font.color = normal_color
self.contents.draw_text(x + 16, y, 24, WLH, actor.level, 2)
end
def draw_actor_class_menu(actor, x, y)
self.contents.font.color = normal_color
self.contents.draw_text(x, y, 85, WLH, actor.class.name)
end
def exp_gauge_color1
return text_color(23)
end
def exp_gauge_color2
return text_color(24)
end
def draw_actor_exp_meter(actor, x, y, width = 100)
if actor.next_exp != 0
exp = actor.now_exp
else
exp = 1
end
gw = width * exp / [actor.next_exp, 1].max
gc1 = exp_gauge_color1
gc2 = exp_gauge_color2
self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 30, WLH, "Exp")
self.contents.font.color = normal_color
xr = x + width
self.contents.draw_text(xr - 60, y, 60, WLH, actor.next_rest_exp_s, 2)
end
end
#####################
# Window_MenuStatus #
#####################
class Window_MenuStatus < Window_Selectable
def initialize(x, y)
super(x, y, 384, 416)
refresh
self.active = false
self.index = -1
end
def refresh
self.contents.clear
@item_max = $game_party.members.size
for actor in $game_party.members
x = 104
y = actor.index * 96 + WLH / 2
draw_item_icon($data_weapons[actor.weapon_id], x -92, y + 20)
if actor.two_swords_style
draw_item_icon($data_weapons[actor.armor1_id], x -35, y + 20)
else
draw_item_icon($data_armors[actor.armor1_id], x -35, y + 20)
end
draw_actor_graphic(actor, x -50, y +46)
draw_actor_name(actor, x, y)
draw_actor_class_menu(actor, x + 120, y)
draw_actor_level_menu(actor, x + 200, y)
draw_actor_state(actor, x, y + WLH * 2)
draw_actor_hp(actor, x + 120, y + WLH * 1)
draw_actor_mp(actor, x + 120, y + WLH * 2)
draw_actor_exp_meter(actor, x , y + WLH * 1)
end
end
def update_cursor
if @index < 0
self.cursor_rect.empty
elsif @index < @item_max
self.cursor_rect.set(0, @index * 96, contents.width, 96)
elsif @index >= 100
self.cursor_rect.set(0, (@index - 100) * 96, contents.width, 96)
else
self.cursor_rect.set(0, 0, contents.width, @item_max * 96)
end
end
end
############
# Game_Map #
############
class Game_Map
attr_reader :map_id
def mpname
$mpname = load_data("Data/MapInfos.rvdata")
$mpname[@map_id].name
end
end
###############
# Window_Time #
###############
class Window_Mapname < Window_Base
def initialize(x, y)
super(x, y, 160, WLH + 70)
refresh
end
def refresh
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 120, 32, "Lieu :")
self.contents.font.color = normal_color
self.contents.draw_text(4, 32, 120, 32, $game_map.mpname.to_s, 2)
end
end
###############
# Window_Time #
###############
class Window_Time < Window_Base
def initialize(x, y)
super(x, y, 160, WLH + 66)
refresh
end
def refresh
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 120, 32, "Temps de Jeu")
@total_sec = Graphics.frame_count / Graphics.frame_rate
hour = @total_sec / 60 / 60
min = @total_sec / 60 % 60
sec = @total_sec % 60
text = sprintf("%02d:%02d:%02d", hour, min, sec)
self.contents.font.color = normal_color
self.contents.draw_text(4, 32, 120, 32, text, 2)
end
def update
super
if Graphics.frame_count / Graphics.frame_rate != @total_sec
refresh
end
end
end
##############
# Scene_Menu #
##############
class Scene_Menu
def main
start
perform_transition
Input.update
loop do
Graphics.update
Input.update
update
break if $scene != self
end
Graphics.update
pre_terminate
Graphics.freeze
terminate
end
def initialize(menu_index = 0)
@menu_index = menu_index
end
def create_menu_background
@menuback_sprite = Sprite.new
@menuback_sprite.bitmap = $game_temp.background_bitmap
@menuback_sprite.color.set(16, 16, 16, 128)
update_menu_background
end
def create_menu_background
@menuback_sprite = Sprite.new
@menuback_sprite.bitmap = $game_temp.background_bitmap
@menuback_sprite.color.set(16, 16, 16, 128)
update_menu_background
end
def dispose_menu_background
@menuback_sprite.dispose
end
def update_menu_background
end
def perform_transition
Graphics.transition(10)
end
def start
create_menu_background
create_command_window
@gold_window = Window_Gold.new(0, 360)
@status_window = Window_MenuStatus.new(160, 0)
@playtime_window = Window_Time .new(0, 270)
@mapname_window = Window_Mapname.new(0, 176)
@status_window.openness = 0
@playtime_window.openness = 0
@mapname_window.openness = 0
@gold_window.openness = 0
@status_window.open
@playtime_window.open
@mapname_window.open
@gold_window.open
end
def pre_terminate
@status_window.close
@playtime_window.close
@mapname_window.close
@gold_window.close
@command_window.close
begin
@status_window.update
@playtime_window.update
@mapname_window.update
@gold_window.update
@command_window.update
Graphics.update
end until @status_window.openness == 0
end
def terminate
dispose_menu_background
@command_window.dispose
@gold_window.dispose
@status_window.dispose
@playtime_window.dispose
@mapname_window.dispose
end
def update
update_menu_background
@command_window.update
@gold_window.update
@status_window.update
@mapname_window.update
@playtime_window.update
if @command_window.active
update_command_selection
elsif @status_window.active
update_actor_selection
end
end
def create_command_window
s1 = Vocab::item
s2 = Vocab::skill
s3 = Vocab::equip
s4 = Vocab::status
s5 = Vocab::save
s6 = Vocab::game_end
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6])
@command_window.index = @menu_index
@command_window.openness = 0
@command_window.open
if $game_party.members.size == 0
@command_window.draw_item(0, false)
@command_window.draw_item(1, false)
@command_window.draw_item(2, false)
@command_window.draw_item(3, false)
end
if $game_system.save_disabled
@command_window.draw_item(4, false)
end
end
def update_command_selection
if Input.trigger?(Input::B)
Sound.play_cancel
$scene = Scene_Map.new
elsif Input.trigger?(Input::C)
if $game_party.members.size == 0 and @command_window.index < 4
Sound.play_buzzer
return
elsif $game_system.save_disabled and @command_window.index == 4
Sound.play_buzzer
return
end
Sound.play_decision
case @command_window.index
when 0
$scene = Scene_Item.new
when 1,2,3
start_actor_selection
when 4
$scene = Scene_File.new(true, false, false)
when 5
$scene = Scene_End.new
end
end
end
def start_actor_selection
@command_window.active = false
@status_window.active = true
if $game_party.last_actor_index < @status_window.item_max
@status_window.index = $game_party.last_actor_index
else
@status_window.index = 0
end
end
def end_actor_selection
@command_window.active = true
@status_window.active = false
@status_window.index = -1
end
def update_actor_selection
if Input.trigger?(Input::B)
Sound.play_cancel
end_actor_selection
elsif Input.trigger?(Input::C)
$game_party.last_actor_index = @status_window.index
Sound.play_decision
case @command_window.index
when 1
$scene = Scene_Skill.new(@status_window.index)
when 2
$scene = Scene_Equip.new(@status_window.index)
when 3
$scene = Scene_Status.new(@status_window.index)
end
end
end
end
$mogscript = {} if $mogscript == nil
$mogscript["basic_menu_plus"] = true
- SkilloStaffeux retraité
- Nombre de messages : 526
Age : 35
Localisation : Rennes
Distinction : J'aime ce gars
(by Coco')
Scripteur apprenti, futur Berka !
(par Tretian)
Membre anonyme de la communauté, caché derrière son PC
(???)
super prof de script
[Dudu']
Résident permanent de la Chat Box
[Autoproclamé]
Adepte du XDDD [Yak' ]
Fanatique hystérique de Raymond le français [Un connu]
Date d'inscription : 19/01/2008
Re: [Résolu]Script de quêtes sympa mais bugé ?
Mar 11 Mai 2010 - 22:28
Et voilà:
- Spoiler:
- Code:
################################################
# Mog Basic Menu Plus V 1.0 #
##################################################
# By Moghunter
# revu par Berka
##################################################
##############
# Game_Actor #
##############
class Game_Actor < Game_Battler
def now_exp
return @exp - @exp_list[@level]
end
def next_exp
return @exp_list[@level+1] > 0 ? @exp_list[@level+1] - @exp_list[@level] : 0
end
end
###############
# Window_Base #
###############
class Window_Base < Window
def draw_item_icon(item, x, y)
if item != nil
draw_icon(item.icon_index, x, y)
end
end
def draw_actor_level_menu(actor, x, y)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 32, WLH, Vocab::level_a)
self.contents.font.color = normal_color
self.contents.draw_text(x + 16, y, 24, WLH, actor.level, 2)
end
def draw_actor_class_menu(actor, x, y)
self.contents.font.color = normal_color
self.contents.draw_text(x, y, 85, WLH, actor.class.name)
end
def exp_gauge_color1
return text_color(23)
end
def exp_gauge_color2
return text_color(24)
end
def draw_actor_exp_meter(actor, x, y, width = 100)
if actor.next_exp != 0
exp = actor.now_exp
else
exp = 1
end
gw = width * exp / [actor.next_exp, 1].max
gc1 = exp_gauge_color1
gc2 = exp_gauge_color2
self.contents.fill_rect(x, y + WLH - 8, width, 6, gauge_back_color)
self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2)
self.contents.font.color = system_color
self.contents.draw_text(x, y, 30, WLH, "Exp")
self.contents.font.color = normal_color
xr = x + width
self.contents.draw_text(xr - 60, y, 60, WLH, actor.next_rest_exp_s, 2)
end
end
#####################
# Window_MenuStatus #
#####################
class Window_MenuStatus < Window_Selectable
def initialize(x, y)
super(x, y, 384, 416)
refresh
self.active = false
self.index = -1
end
def refresh
self.contents.clear
@item_max = $game_party.members.size
for actor in $game_party.members
x = 104
y = actor.index * 96 + WLH / 2
draw_item_icon($data_weapons[actor.weapon_id], x -92, y + 20)
if actor.two_swords_style
draw_item_icon($data_weapons[actor.armor1_id], x -35, y + 20)
else
draw_item_icon($data_armors[actor.armor1_id], x -35, y + 20)
end
draw_actor_graphic(actor, x -50, y +46)
draw_actor_name(actor, x, y)
draw_actor_class_menu(actor, x + 120, y)
draw_actor_level_menu(actor, x + 200, y)
draw_actor_state(actor, x, y + WLH * 2)
draw_actor_hp(actor, x + 120, y + WLH * 1)
draw_actor_mp(actor, x + 120, y + WLH * 2)
draw_actor_exp_meter(actor, x , y + WLH * 1)
end
end
def update_cursor
if @index < 0
self.cursor_rect.empty
elsif @index < @item_max
self.cursor_rect.set(0, @index * 96, contents.width, 96)
elsif @index >= 100
self.cursor_rect.set(0, (@index - 100) * 96, contents.width, 96)
else
self.cursor_rect.set(0, 0, contents.width, @item_max * 96)
end
end
end
############
# Game_Map #
############
class Game_Map
attr_reader :map_id
def mpname
$mpname = load_data("Data/MapInfos.rvdata")
$mpname[@map_id].name
end
end
###############
# Window_Mapname #
###############
class Window_Mapname < Window_Base
def initialize(x, y)
super(x, y, 160, WLH + 46)
self.contents = Bitmap.new(width - 32, height - 32)
refresh
end
def refresh
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(4, -5, 120, 24, "Lieu :")
self.contents.font.color = normal_color
self.contents.draw_text(4, 15, 120, 24, $game_map.mpname.to_s, 1)
end
end
###############
# Window_Time #
###############
class Window_Time < Window_Base
def initialize(x, y)
super(x, y, 160, WLH + 66)
refresh
end
def refresh
self.contents.clear
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 120, 32, "Temps de Jeu")
@total_sec = Graphics.frame_count / Graphics.frame_rate
hour = @total_sec / 60 / 60
min = @total_sec / 60 % 60
sec = @total_sec % 60
text = sprintf("%02d:%02d:%02d", hour, min, sec)
self.contents.font.color = normal_color
self.contents.draw_text(4, 32, 120, 32, text, 2)
end
def update
super
if Graphics.frame_count / Graphics.frame_rate != @total_sec
refresh
end
end
end
##############
# Scene_Menu #
##############
class Scene_Menu
def main
start
perform_transition
Input.update
loop do
Graphics.update
Input.update
update
break if $scene != self
end
Graphics.update
pre_terminate
Graphics.freeze
terminate
end
def initialize(menu_index = 0)
@menu_index = menu_index
end
def create_menu_background
@menuback_sprite = Sprite.new
@menuback_sprite.bitmap = $game_temp.background_bitmap
@menuback_sprite.color.set(16, 16, 16, 128)
update_menu_background
end
def create_menu_background
@menuback_sprite = Sprite.new
@menuback_sprite.bitmap = $game_temp.background_bitmap
@menuback_sprite.color.set(16, 16, 16, 128)
update_menu_background
end
def dispose_menu_background
@menuback_sprite.dispose
end
def update_menu_background
end
def perform_transition
Graphics.transition(10)
end
def start
create_menu_background
create_command_window
@gold_window = Window_Gold.new(0, 360)
@status_window = Window_MenuStatus.new(160, 0)
@playtime_window = Window_Time .new(0, 270)
@mapname_window = Window_Mapname.new(0, 200)
@status_window.openness = 0
@playtime_window.openness = 0
@mapname_window.openness = 0
@gold_window.openness = 0
@status_window.open
@playtime_window.open
@mapname_window.open
@gold_window.open
end
def pre_terminate
@status_window.close
@playtime_window.close
@mapname_window.close
@gold_window.close
@command_window.close
begin
@status_window.update
@playtime_window.update
@mapname_window.update
@gold_window.update
@command_window.update
Graphics.update
end until @status_window.openness == 0
end
def terminate
dispose_menu_background
@command_window.dispose
@gold_window.dispose
@status_window.dispose
@playtime_window.dispose
@mapname_window.dispose
end
def update
update_menu_background
@command_window.update
@gold_window.update
@status_window.update
@mapname_window.update
@playtime_window.update
if @command_window.active
update_command_selection
elsif @status_window.active
update_actor_selection
end
end
def create_command_window
s1 = Vocab::item
s2 = Vocab::skill
s3 = Vocab::equip
s4 = Vocab::status
s5 = QUEST_CONFIG::MENUNAME
s6 = Vocab::save
s7 = Vocab::game_end
@command_window = Window_Command.new(160, [s1, s2, s3, s4, s5, s6, s7])
@command_window.index = @menu_index
@command_window.openness = 0
@command_window.open
if $game_party.members.size == 0
@command_window.draw_item(0, false)
@command_window.draw_item(1, false)
@command_window.draw_item(2, false)
@command_window.draw_item(3, false)
end
if $game_system.save_disabled
@command_window.draw_item(4, false)
end
end
def update_command_selection
if Input.trigger?(Input::B)
Sound.play_cancel
$scene = Scene_Map.new
elsif Input.trigger?(Input::C)
if $game_party.members.size == 0 and @command_window.index < 4
Sound.play_buzzer
return
elsif $game_system.save_disabled and @command_window.index == 4
Sound.play_buzzer
return
end
Sound.play_decision
case @command_window.index
when 0
$scene = Scene_Item.new
when 1,2,3
start_actor_selection
when 4
$scene = Scene_Quest.new(true)
when 5
$scene = Scene_File.new(true, false, false)
when 6
$scene = Scene_End.new
end
end
end
def start_actor_selection
@command_window.active = false
@status_window.active = true
if $game_party.last_actor_index < @status_window.item_max
@status_window.index = $game_party.last_actor_index
else
@status_window.index = 0
end
end
def end_actor_selection
@command_window.active = true
@status_window.active = false
@status_window.index = -1
end
def update_actor_selection
if Input.trigger?(Input::B)
Sound.play_cancel
end_actor_selection
elsif Input.trigger?(Input::C)
$game_party.last_actor_index = @status_window.index
Sound.play_decision
case @command_window.index
when 1
$scene = Scene_Skill.new(@status_window.index)
when 2
$scene = Scene_Equip.new(@status_window.index)
when 3
$scene = Scene_Status.new(@status_window.index)
end
end
end
end
$mogscript = {} if $mogscript == nil
$mogscript["basic_menu_plus"] = true
- VarkanMembre
- Nombre de messages : 292
Distinction : aucune
Date d'inscription : 27/01/2010
Re: [Résolu]Script de quêtes sympa mais bugé ?
Mar 11 Mai 2010 - 23:36
Génial ! Merci beaucoup tu me sauve mon jeu !!
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum
|
|