Partagez
Aller en bas
avatar
Varkan
Membre

Nombre de messages : 292
Distinction : aucune
Date d'inscription : 27/01/2010

[Résolu]Script de quêtes sympa mais bugé ?

le 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 :

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.


Dernière édition par Varkan le Mar 11 Mai 2010 - 23:38, édité 1 fois
avatar
Skillo
Staffeux retraité

Nombre de messages : 526
Age : 29
Localisation : Rennes
Distinction : J'aime ce gars :P
(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' Very Happy]
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é ?

le 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.
avatar
Varkan
Membre

Nombre de messages : 292
Distinction : aucune
Date d'inscription : 27/01/2010

Re: [Résolu]Script de quêtes sympa mais bugé ?

le 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 !
avatar
Skillo
Staffeux retraité

Nombre de messages : 526
Age : 29
Localisation : Rennes
Distinction : J'aime ce gars :P
(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' Very Happy]
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é ?

le Lun 10 Mai 2010 - 21:51
Chez moi la quête se termine avant que j'aille revoir le prêtre.
avatar
Varkan
Membre

Nombre de messages : 292
Distinction : aucune
Date d'inscription : 27/01/2010

Re: [Résolu]Script de quêtes sympa mais bugé ?

le 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
avatar
Skillo
Staffeux retraité

Nombre de messages : 526
Age : 29
Localisation : Rennes
Distinction : J'aime ce gars :P
(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' Very Happy]
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é ?

le 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
avatar
Varkan
Membre

Nombre de messages : 292
Distinction : aucune
Date d'inscription : 27/01/2010

Re: [Résolu]Script de quêtes sympa mais bugé ?

le 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 Smile
avatar
Skillo
Staffeux retraité

Nombre de messages : 526
Age : 29
Localisation : Rennes
Distinction : J'aime ce gars :P
(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' Very Happy]
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é ?

le 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 :

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.
avatar
Varkan
Membre

Nombre de messages : 292
Distinction : aucune
Date d'inscription : 27/01/2010

Re: [Résolu]Script de quêtes sympa mais bugé ?

le 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 Smile

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.
avatar
Skillo
Staffeux retraité

Nombre de messages : 526
Age : 29
Localisation : Rennes
Distinction : J'aime ce gars :P
(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' Very Happy]
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é ?

le Mar 11 Mai 2010 - 17:46
vi c'est pas compliquer donne moi juste le script de menu que tu veux.
avatar
Varkan
Membre

Nombre de messages : 292
Distinction : aucune
Date d'inscription : 27/01/2010

Re: [Résolu]Script de quêtes sympa mais bugé ?

le Mar 11 Mai 2010 - 20:15
Comment ça ? ^^
avatar
Docteur Kojy.
Staffeux retraité

Nombre de messages : 1210
Age : 24
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 Smile]
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é ?

le Mar 11 Mai 2010 - 20:47
Il te demande le lien du script de menu moghunter.
avatar
Varkan
Membre

Nombre de messages : 292
Distinction : aucune
Date d'inscription : 27/01/2010

Re: [Résolu]Script de quêtes sympa mais bugé ?

le Mar 11 Mai 2010 - 21:23
oki oki

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
avatar
Skillo
Staffeux retraité

Nombre de messages : 526
Age : 29
Localisation : Rennes
Distinction : J'aime ce gars :P
(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' Very Happy]
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é ?

le 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
avatar
Varkan
Membre

Nombre de messages : 292
Distinction : aucune
Date d'inscription : 27/01/2010

Re: [Résolu]Script de quêtes sympa mais bugé ?

le Mar 11 Mai 2010 - 23:36
Génial ! Merci beaucoup tu me sauve mon jeu !!
Contenu sponsorisé

Re: [Résolu]Script de quêtes sympa mais bugé ?

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum