Sujet n°12721
Posté par Renkys le 7 Mai - 22:46 (2013)
Titre : Système de quêtes en dual screen
Bonjour,

J'ai posté il y a quelques temps un screen du système de quête de mon projet.
Comme on m'a demandé si je pourrais le partager, étant sur un forum d'entre aide, je ne vois pas pourquoi je dirais non Clin d'œil foireux

Voici les script:

Fonction_quete
Spoiler
Code:

class Game_Event 
  alias qu_start start 
  def start 
    if $pokemon_party != nil 
      if @event.name != "FALSE" 
        $pokemon_party.quete_parler(@event.name) 
      end 
    end 
    qu_start 
  end 
end 


class Interpreter 
  alias qu_command_126 command_126 
  def command_126 
    value = operate_value(@parameters[1], @parameters[2], @parameters[3]) 
    $pokemon_party.quete_tr_obj(@parameters[0],value) 
    qu_command_126 
  end 
end 


module POKEMON_S  
  class Pokemon_Battle_Trainer < Pokemon_Battle_Core  
    alias qu_initialize initialize  
    def initialize(party, trainer_id, ia = false, run_able = false, lose_able = false, capturable = false)  
      qu_initialize(party, trainer_id, ia, run_able, lose_able, capturable)  
      $pokemon_party.quete_voir_pokemon(@enemy.id)  
    end   
  end  
    
  class Pokemon_Battle_Wild < Pokemon_Battle_Core  
    alias qu_initialize initialize  
    def initialize(party, pokemon, ia = false, lose_able = false)  
      qu_initialize(party, pokemon, ia, lose_able)  
      $pokemon_party.quete_voir_pokemon(@enemy.id)  
    end  
      
    alias qu_catch_pokemon catch_pokemon  
    def catch_pokemon(ball_data)  
      $pokemon_party.quete_capturer_pokemon(@enemy.id)  
      qu_catch_pokemon(ball_data)  
    end  
  end  
    
  class Pokemon_Battle_Core  
    alias qu_enemy_down enemy_down  
    def enemy_down  
      $pokemon_party.quete_vaincre_pokemon(@enemy.id)  
      qu_enemy_down  
    end  
  end  
end




Def_quete:
Spoiler
Code:

#==============================================================================  
# ■ Systeme de gestion de quête  
#------------------------------------------------------------------------------  
#   Ce script a pour but de déclarer les quêtes a faire  
#  
#  
# Date : 20/07/2006  
#   Version   Date          Auteur        Commentaires  
#   1.00      20/09/2007    Tonyryu       Finalisation version 1  
#   
# Attention : Ce script est ma propriété en tant que création et il est donc  
# soumis au droit de la propriété intellectuelle ( http://www.irpi.ccip.fr/ ).  
# En aucun cas, il ne doit être copié ou publié vers un autre forum sans en  
# avoir reçu mon accord au préalable.  
#  
#==============================================================================  
  
#==============================================================================  
# ■ Data_Quete  
#------------------------------------------------------------------------------  
#  Contient la définition des quêtes  
#   Version   Date          Auteur        Commentaires  
#   1.00      12/09/2007    Tonyryu       Création  
#  
#==============================================================================  
class Data_Quete  
  attr_reader   :tab_def_quete  
    
  #--------------------------------------------------------------------------  
  # ● initialize  
  #--------------------------------------------------------------------------   
  def initialize  
    # Création du tableau de quêtes  
    @tab_def_quete = []  
    
    # Définition des quêtes  
  
 @tab_def_quete[0] = { "nom"  => "Exemple pour PSP",  
                                 "desc" => "Exemple pour PSP"+  
                                 "\nSacha vous attends dans le centre"+  
                                 "\nPokémon de la ville voisine. "+
                                 "\nAllez le retrouver. ",
                                 "but"  => [["PARLER","Sacha"]],  
                                 "gain" => [["ARGENT",3000]]}                     


 end
end
                     




  
  
# Créer les données de quête  
$data_quete = Data_Quete.new  



















Gestion_quete:
Code:

module POKEMON_S   
  #==============================================================================   
  # ■ Systeme de gestion de quête   
  #------------------------------------------------------------------------------   
  #   Ce script a pour but de rajouter un systeme de gestion de quête sur votre   
  # projet. Divers commandes script permettent d'intéragir avec ce systeme :   
  #   
  #   $scene = Scene_Quete.new  # Ouvre le livre de quete   
  #   $pokemon_party.quete_demarrer(id_quete) # Démarre une quete   
  #   $pokemon_party.quete_echouer(id_quete) # Fait echouer la quete   
  #   $pokemon_party.quete_finir(id_quete) # Fait réussir la quete et donne les récompenses   
  #   $pokemon_party.quete_parler(nom) # Permet de valider l'objectif de parler, quelque soit les quetes   
  #   $pokemon_party.quete_termine?(id_quete) # Vérifie si les objectifs sont terminé # Dans commande condition   
  #   $pokemon_party.quete_trouve?(id_quete) # Vérifie si la quête est trouvé # Dans commande condition   
  #   $pokemon_party.quete_en_cours?(id_quete) # Vérifie si la quête est en cours # Dans commande condition   
  #   $pokemon_party.quete_reussie?(id_quete) # Vérifie si la quête est réussi # Dans commande condition   
  #   $pokemon_party.quete_echoue?(id_quete) # Vérifie si la quête est échoué # Dans commande condition   
  #   $pokemon_party.quete_voir_pokemon(id_monstre) # Automatique   
  #   $pokemon_party.quete_vaincre_pokemon(id_monstre) # Automatique   
  #   $pokemon_party.quete_capturer_pokemon(id_monstre) # Automatique   
  #   $pokemon_party.quete_objectif_termine?(id_quete,id_objectif) # Vérifie si l'objectif de la quete est terminé # Dans commande condition   
  #   
  #   
  # Date : 20/07/2006   
  #   Version   Date          Auteur        Commentaires   
  #   1.00      20/09/2007    Tonyryu       Finalisation version 1   
  #   1.01      23/09/2007    Tonyryu       Correction d'un bug de comparaison   
  #   1.02      26/09/2007    Tonyryu       Correction Anomalie : caractere '\n' non interprété   
  #   1.03      03/10/2007    Tonyryu       Correction Anomalie : quete_echouer et quete_finir buggés   
  #   1.04      16/07/2008    Tonyryu       Ajout fonction quete_tuer_monstre   
  #   1.05      22/07/2008    Tonyryu       Ajout fonction quete_objectif_termine? ,correction d'un bug de validation de quête, les objectifs terminés sont grisés   
  #   2.00       2/01/2008    Sphinx        Adaptation à PSP4G+   
  #    
  # Attention : Ce script est ma propriété en tant que création et il est donc   
  # soumis au droit de la propriété intellectuelle ( http://www.irpi.ccip.fr/ ).   
  # En aucun cas, il ne doit être copié ou publié vers un autre forum sans en   
  # avoir reçu mon accord au préalable.   
  #   
  #==============================================================================   
     
  #==============================================================================   
  # ■ pokemon_Party   
  #------------------------------------------------------------------------------   
  #  Ajout de méthode de gestion de quete, permettant l'intégration à la sauvegarde   
  #   Version   Date          Auteur        Commentaires   
  #   1.00      12/09/2007    Tonyryu       Création   
  #   
  #==============================================================================   
  class Pokemon_Party   
       
    attr_accessor :tab_quete   
      
    #--------------------------------------------------------------------------   
    # ● initialize (surcharge)   
    #--------------------------------------------------------------------------    
    alias quete_initialize initialize   
    def initialize   
      @tab_quete = {}   
      maj_quetes(false)   
      quete_initialize   
    end   
       
    #--------------------------------------------------------------------------   
    # ● quete_demarrer   
    #--------------------------------------------------------------------------    
    def quete_demarrer(id_quete,jingle = true)   
      # Si La quête existe   
      if !$data_quete.tab_def_quete[id_quete].nil?   
        # Si la quête n'est pas déjà accepter   
        if @tab_quete[id_quete].nil?   
          # Ajouter une entrée dans le tableau de quete du joueur   
          @tab_quete[id_quete] = [1,Array.new($data_quete.tab_def_quete[id_quete]["but"].size, 0)]   
        end   
        if jingle and POKEMON::QU_JINGLE   
          Audio.me_play("Audio/ME/trainer_jingle.mid", 100, 100)   
        end   
      else   
        # Sinon, affiché un message d'erreur   
        print "Quete ID : #{id_quete} non configurée!!"   
      end   
    end   
     
    #--------------------------------------------------------------------------   
    # ● quete_objectif_termine?   
    #--------------------------------------------------------------------------    
    def quete_objectif_termine?(id_quete,id_objectif)   
      # Tester si la quete existe   
      return false if @tab_quete[id_quete].nil?   
         
      # Tester si l'ojectif existe    
      return false if $data_quete.tab_def_quete[id_quete]["but"][id_objectif].nil?   
      objectif = $data_quete.tab_def_quete[id_quete]["but"][id_objectif]   
         
      fait = @tab_quete[id_quete][1][id_objectif]   
      sur = objectif[1]   
         
      fait = ( fait > sur ? sur : fait) if objectif[0] == "TR_OBJ"   
      sur = 1 if objectif[0] == "PARLER"   
      return (fait == sur)   
         
    end   
         
    #--------------------------------------------------------------------------   
    # ● quete_termine?   
    #--------------------------------------------------------------------------    
    def quete_termine?(id_quete)   
        
      # Tester si la quete existe   
      return false if @tab_quete[id_quete].nil?   
      for i in 0...$data_quete.tab_def_quete[id_quete]["but"].size   
        return false if !quete_objectif_termine?(id_quete,i)   
      end   
      return true   
    end   
       
    #--------------------------------------------------------------------------   
    # ● quete_finir   
    #--------------------------------------------------------------------------    
    def quete_finir(id_quete)   
      # Tester si la quete existe   
      if !@tab_quete[id_quete].nil?   
        # Si la quete n'est pas deja cloturer   
        if @tab_quete[id_quete][0] == 1   
          # changer la quete d'état   
          @tab_quete[id_quete][0] = 2   
             
          # Réceptionner la récompense   
          for i in 0...$data_quete.tab_def_quete[id_quete]["gain"].size   
            gain = $data_quete.tab_def_quete[id_quete]["gain"][i]   
            nbr = gain[1]   
     
            case gain[0]   
            when "EXP"   
              nbr /= @actors.size   
              for i in 0...@actors.size  
                @actors[i].exp += nbr   
              end   
            when "OBJ"   
              $pokemon_party.add_item(gain[2], nbr)   
            when "ARGENT"   
              $pokemon_party.add_money(nbr)   
            when "POKE"   
              $pokemon_party.add(Pokemon.new(gain[1],gain[2],gain[3]))   
            end   
          end   
        end   
      end   
         
    end   
       
    #--------------------------------------------------------------------------   
    # ● quete_echouer   
    #--------------------------------------------------------------------------    
    def quete_echouer(id_quete)   
      # Si la quete est connu   
      if !@tab_quete[id_quete].nil?   
        # Si la quete n'est pas deja cloturer   
        if @tab_quete[id_quete][0] == 1   
          # changer la quete d'état   
          @tab_quete[id_quete][0] = 3   
        end   
      end   
    end   
       
    #--------------------------------------------------------------------------   
    # ● quete_trouve?   
    #--------------------------------------------------------------------------    
    def quete_trouve?(id_quete)   
      return !@tab_quete[id_quete].nil?   
       
    end   
       
    #--------------------------------------------------------------------------   
    # ● quete_en_cours?   
    #--------------------------------------------------------------------------    
    def quete_en_cours?(id_quete)   
       return false if @tab_quete[id_quete].nil?   
          
       return ( @tab_quete[id_quete][0] == 1 )   
    end   
       
    #--------------------------------------------------------------------------   
    # ● quete_reussie?   
    #--------------------------------------------------------------------------    
    def quete_reussie?(id_quete)   
       return false if @tab_quete[id_quete].nil?   
          
       return (@tab_quete[id_quete][0] == 2)   
     end   
        
    #--------------------------------------------------------------------------   
    # ● quete_echoue?   
    #--------------------------------------------------------------------------    
    def quete_echoue?(id_quete)   
       return false if @tab_quete[id_quete].nil?   
          
       return (@tab_quete[id_quete][0] == 3)   
    end   
     
    #--------------------------------------------------------------------------   
    # ● maj_quetes   
    #--------------------------------------------------------------------------    
    def maj_quetes(play_jingle = true)   
      jingle = false   
      for i in 0...$data_quete.tab_def_quete.size   
        if quete_termine?(i) and @tab_quete[i][0] == 1   
          quete_finir(i)   
          jingle = true   
        end   
      end   
      for i in 0...$data_quete.tab_def_quete.size   
        if $data_quete.tab_def_quete[i] == nil   
          next   
        end   
        if $data_quete.tab_def_quete[i]["lancement"] == nil or $data_quete.tab_def_quete[i]["lancement"] == ["AUCUNE"]   
          lancer = true   
        else   
          for j in $data_quete.tab_def_quete[i]["lancement"]   
            if j.type == Fixnum and j < $data_quete.tab_def_quete.size and quete_termine?(j)   
              lancer = true   
            else   
              lancer = false   
              break   
            end   
          end   
        end   
        if lancer and @tab_quete[i].nil?   
          quete_demarrer(i,false)   
          jingle = true   
        end   
      end   
      if play_jingle and jingle   
        Audio.me_play("Audio/ME/trainer_jingle.mid", 100, 100)   
      end   
    end   
     
    #--------------------------------------------------------------------------   
    # ● quete_parler   
    #--------------------------------------------------------------------------    
    def quete_parler(nom)
      # Parcourir la liste des quete en cours   
      @tab_quete.each_key { |id_quete|   
        # Si la quete est en cours   
        if @tab_quete[id_quete][0] == 1   
          # Vérifier tous les objectifs de la quete   
          for i in 0...$data_quete.tab_def_quete[id_quete]["but"].size   
            objectif = $data_quete.tab_def_quete[id_quete]["but"][i]   
            if objectif[0] == "PARLER"   
              if objectif[1] == nom   
                @tab_quete[id_quete][1][i] = 1   
              end   
            end   
          end   
        end   
      }   
     #maj_quetes   
    end   
       
    #--------------------------------------------------------------------------   
    # ● quete_tr_obj   
    #--------------------------------------------------------------------------    
    def quete_tr_obj(id,nbr)   
      # Parcourir la liste des quete en cours   
      @tab_quete.each_key { |id_quete_party|   
        # Si la quete est en cours   
        if @tab_quete[id_quete_party][0] == 1   
          # Vérifier si des objectifs sont liés à la chasse   
          id_objectif = -1   
          $data_quete.tab_def_quete[id_quete_party]["but"].each { |objectif|   
          id_objectif += 1   
            if objectif[0] == "TR_OBJ"   
#              if objectif[2].type == String   
#                cible = POKEMON_S::Pokemon_Info.id(objectif[2])   
#              end   
              if objectif[2] == id   
                # ajouter 1 au compteur   
                @tab_quete[id_quete_party][1][id_objectif] += nbr   
                if @tab_quete[id_quete_party][1][id_objectif] > objectif[1]   
                  @tab_quete[id_quete_party][1][id_objectif] == objectif[1]   
                end   
              end   
            end   
          }   
        end   
      }   
     #maj_quetes   
    end   
       
    #--------------------------------------------------------------------------   
    # ● quete_voir_pokemon   
    #--------------------------------------------------------------------------    
    def quete_voir_pokemon(id_monstre)   
      # Parcourir la liste des quete en cours   
      @tab_quete.each_key { |id_quete_party|   
        # Si la quete est en cours   
        if @tab_quete[id_quete_party][0] == 1   
          # Vérifier si des objectifs sont liés à la chasse   
          id_objectif = -1   
          $data_quete.tab_def_quete[id_quete_party]["but"].each { |objectif|   
          id_objectif += 1   
            if objectif[0] == "VOIR"   
              if objectif[2].type == String   
                cible = POKEMON_S::Pokemon_Info.id(objectif[2])   
              else   
                cible = objectif[2]   
              end   
              if cible == id_monstre   
                if ((objectif[3] == true or objectif[3] == nil) and $sauvage) or objectif[3] == false   
                  # ajouter 1 au compteur   
                  @tab_quete[id_quete_party][1][id_objectif] += 1 if objectif[1] != @tab_quete[id_quete_party][1][id_objectif]   
                end   
              end   
            end   
          }   
        end   
      }   
     #maj_quetes   
    end   
       
    #--------------------------------------------------------------------------   
    # ● quete_capturer_pokemon   
    #--------------------------------------------------------------------------    
    def quete_capturer_pokemon(id_monstre)   
      # Parcourir la liste des quete en cours   
      @tab_quete.each_key { |id_quete_party|   
        # Si la quete est en cours   
        if @tab_quete[id_quete_party][0] == 1   
          # Vérifier si des objectifs sont liés à la chasse   
          id_objectif = -1   
          $data_quete.tab_def_quete[id_quete_party]["but"].each { |objectif|   
          id_objectif += 1   
            if objectif[0] == "CAPTURER"   
              if objectif[2].type == String   
                cible = POKEMON_S::Pokemon_Info.id(objectif[2])   
              else   
                cible = objectif[2]   
              end   
              if cible == id_monstre   
                if ((objectif[3] == true or objectif[3] == nil) and $sauvage) or objectif[3] == false   
                  # ajouter 1 au compteur   
                  @tab_quete[id_quete_party][1][id_objectif] += 1 if objectif[1] != @tab_quete[id_quete_party][1][id_objectif]   
                end   
              end   
            end   
          }   
        end   
      }    
     #maj_quetes   
    end   
       
    #--------------------------------------------------------------------------   
    # ● quete_vaincre_pokemon   
    #--------------------------------------------------------------------------    
    def quete_vaincre_pokemon(id_monstre)   
      # Parcourir la liste des quete en cours   
      @tab_quete.each_key { |id_quete_party|   
        # Si la quete est en cours   
        if @tab_quete[id_quete_party][0] == 1   
          # Vérifier si des objectifs sont liés à la chasse   
          id_objectif = -1   
          $data_quete.tab_def_quete[id_quete_party]["but"].each { |objectif|   
          id_objectif += 1   
            if objectif[0] == "VAINCRE"   
              if objectif[2].type == String   
                cible = POKEMON_S::Pokemon_Info.id(objectif[2])   
              else   
                cible = objectif[2]   
              end   
              if cible == id_monstre   
                if ((objectif[3] == true or objectif[3] == nil) and $sauvage) or objectif[3] == false   
                  # ajouter 1 au compteur   
                  @tab_quete[id_quete_party][1][id_objectif] += 1 if objectif[1] != @tab_quete[id_quete_party][1][id_objectif]   
                end   
              end   
            end   
          }   
        end   
      }    
     #maj_quetes   
    end   
       
  end   
end   
     
  #==============================================================================   
  # ■ Sprite_Battler   
  #------------------------------------------------------------------------------   
  #  Surcharge de la méthode update pour gestion de chasse   
  #   Version   Date          Auteur        Commentaires   
  #   1.00      12/09/2007    Tonyryu       Création   
  #   
  #==============================================================================   
  class Sprite_Battler   
       
    #--------------------------------------------------------------------------   
    # ● update (surcharge)   
    #   permet de comptabiliser une créature tuée, objectif "CHASSER"   
    #--------------------------------------------------------------------------    
    alias quete_update update   
    def update   
      sav_battler_visible = @battler_visible   
      quete_update()   
      if @battler.is_a?(pokemon_Enemy) and sav_battler_visible and !@battler_visible   
        # vérifier que l'id du monstre est recherché dans une quete en cours   
        $pokemon_party.quete_tuer_monstre(@battler.id)   
      end   
        
    end   
       
  end   
     
     
  #==============================================================================   
  # ■ Window_Optionquete   
  #------------------------------------------------------------------------------   
  #  Fenêtre des option de quete   
  #   Version   Date          Auteur        Commentaires   
  #   1.00      12/09/2007    Tonyryu       Création   
  #   
  #==============================================================================   
  class Window_Optionquete < Window_Selectable   
       
       
    #--------------------------------------------------------------------------   
    # ● initialize   
    #--------------------------------------------------------------------------    
    def initialize   
      super(0, -20, 320, 120)   
      self.contents = Bitmap.new(width - 32, height - 32)   
      self.back_opacity = 0   
      self.opacity = 0   
      self.contents.font.name = $fontface   
      self.contents.font.size = $fontsizebig  
             
      self.index = 0   
      @item_max =3   
      @column_max = 1   
         
      refresh   
    end   
     
    #--------------------------------------------------------------------------   
    # ● refresh   
    #--------------------------------------------------------------------------   
    def refresh   
      self.contents.clear   
      # Afficher le titre   
      self.contents.font.color = Color.new(100,100,100,255)   
      self.contents.font.size = $fontsizebig   
         
      # Afficher le menu   
      self.contents.font.size = $fontsizebig 
      self.contents.font.color = Color.new(0,0,0,255)   
      self.contents.draw_text(14, 23, 200, 25, " Quêtes en cours")   
      self.contents.draw_text(14, 43, 200, 25, " Quêtes réussies")   
      self.contents.draw_text(14, 63, 200, 25, " Quêtes échouées")   
         
         
    end   
       
     
    #--------------------------------------------------------------------------   
    # ● update_cursor_rect   
    #    - Permet de modifier la position du rectangle de sélection à chaque cycle   
    #--------------------------------------------------------------------------   
    def update_cursor_rect   
      # Si l'index de focus est inferieur à 0   
      if @index < 0   
        # Alors effacer le rectangle de sélection   
        self.cursor_rect.empty   
      else   
        # Sinon afficher le rectangle à la position du focus   
        self.cursor_rect.set(0, 26 + (20 * @index), 20, 20)   
      end   
    end   
  end   
     
     
  #==============================================================================   
  # ■ Window_Listequete   
  #------------------------------------------------------------------------------   
  #  Fenêtre de la liste des quetes   
  #   Version   Date          Auteur        Commentaires   
  #   1.00      12/09/2007    Tonyryu       Création   
  #   
  #==============================================================================   
  class Window_Listequete < Window_Selectable   
       
       
    #--------------------------------------------------------------------------   
    # ● initialize   
     
    #--------------------------------------------------------------------------    
    def initialize   
      super(-14, 236, 320, 360)   
      self.contents = Bitmap.new(width - 32, height - 32)   
      self.back_opacity = 0   
      self.opacity = 0   
      self.contents.font.name = $fontface   
      self.contents.font.size = $fontsizebig   
         
      self.active = false   
      self.index = -1   
         
      @column_max = 1   
         
         
         
      refresh   
    end   
       
    #--------------------------------------------------------------------------   
    # ● refresh   
    #--------------------------------------------------------------------------   
    def refresh(etat_quete = 1)   
      if self.contents != nil   
        self.contents.dispose   
        self.contents = nil   
      end   
         
      @tab_quete = []   
         
      # Parcourir la liste des quete en cours   
      $pokemon_party.tab_quete.each_key { |id_quete_party|   
       # Si la quete est en cours   
        if $pokemon_party.tab_quete[id_quete_party][0] == etat_quete   
          #@tab_quete.push(id_quete_party)   
          @tab_quete.insert(0,id_quete_party)   
        end   
      }   
         
      @item_max = @tab_quete.size   
         
      if @item_max > 0   
        self.contents = Bitmap.new(width - 32, row_max * 20 -3)   
        self.contents.font.name = $fontface   
        self.contents.font.size = $fontsizebig
        self.contents.font.color = Color.new(0,0,0,255)   
           
        @tab_quete.sort!   
           
        for i in 0...@tab_quete.size 
          id_quete_party = @tab_quete[i]   
          # Afficher le nom de la quete   
          self.contents.draw_text(30, (i * 20) - 4, 250, 20, $data_quete.tab_def_quete[id_quete_party]["nom"])   
     
        end   
      end   
     
         
    #--------------------------------------------------------------------------   
    # ● nb_quete   
    #--------------------------------------------------------------------------   
      def nb_quete()   
        return @tab_quete.size   
      end   
     
    #--------------------------------------------------------------------------   
    # ● id_quete   
    #--------------------------------------------------------------------------   
      def id_quete()   
        return @tab_quete[@index]   
      end   
     
         
    end   
       
    #--------------------------------------------------------------------------   
    # ● update_cursor_rect   
    #    - Permet de modifier la position du rectangle de sélection à chaque cycle   
    #--------------------------------------------------------------------------   
    def update_cursor_rect   
      # Si l'index de focus est inferieur à 0   
      if @index < 0   
        # Alors effacer le rectangle de sélection   
        self.cursor_rect.empty   
      else   
        # Sinon afficher le rectangle à la position du focus   
        self.cursor_rect.set(14, -4 + (20 * @index), 20, 20)   
      end   
    end   
  end   
     
       
     
  #==============================================================================   
  # ■ Window_Detailquete   
  #------------------------------------------------------------------------------   
  #  Fenêtre de détail d'une quete   
  #   Version   Date          Auteur        Commentaires   
  #   1.00      12/09/2007    Tonyryu       Création   
  #   
  #==============================================================================   
  class Window_Detailquete < Window_Base   
    #--------------------------------------------------------------------------   
    # ● initialize   
    #--------------------------------------------------------------------------    
    def initialize   
      super(17, 61, 600, 600)   
      self.contents = Bitmap.new(width - 32, height - 32)   
      self.back_opacity = 0   
      self.opacity = 0   
      self.contents.font.name = $fontface   
      self.contents.font.size = $fontsizebig   
      self.contents.font.color = Color.new(0,0,0,255)   
         
      refresh   
    end   
       
    #--------------------------------------------------------------------------   
    # ● refresh   
    #--------------------------------------------------------------------------   
    def refresh(id_quete = -1)   
      self.contents.clear   
         
      return if id_quete == -1 or $data_quete.tab_def_quete[id_quete] == nil   
      ligne = 0   
         
      # Afficher le descriptif de la quete ( max 8 lignes )  
      self.contents.font.italic = false   
      $data_quete.tab_def_quete[id_quete]["desc"].each { |texte|   
        ligne += 1   
        texte[-1] = ""   
        self.contents.draw_text(0, (ligne * 20) -3, 324, 47,texte )   
        break if ligne == 10   
      }   
        
      # Afficher Récompense   
      ligne += 5   
      k = 0   
     
      self.contents.font.italic = false   
      for i in 0...$data_quete.tab_def_quete[id_quete]["gain"].size   
        k += 1   
        gain = $data_quete.tab_def_quete[id_quete]["gain"][i]   
        nbr = gain[1].to_s   
           
        if gain[0] == "EXP"
          text = "-"
          taille = self.contents.text_size(text).width   
          self.contents.draw_text(110, (ligne * 30 + k * 26) -116, 290, 20, text)   
          self.contents.draw_text(taille + 112, (ligne * 30 + k * 26) -116, 290, 20, nbr + " Exp")   
        end   
           
        if gain[0] == "OBJ"   
          item = $data_items[gain[2]] 
          text = "-"
          taille = self.contents.text_size(text).width   
          self.contents.draw_text(110, (ligne * 30 + k * 26) -116, 290, 20, text)   
          self.contents.draw_text(taille + 113, (ligne * 30 + k * 26) -116, 290, 20, item.name + " x" + nbr)      
             
        end   
           
        if gain[0] == "ARGENT"
          text = "-"
          taille = self.contents.text_size(text).width  
          self.contents.draw_text(110, (ligne * 30 + k * 26) -116, 290, 20, text)  
          self.contents.draw_text(taille + 113, (ligne * 30 + k * 26) -116, 290, 20, nbr + " $" )      
        end   
           
        if gain[0] == "POKE"   
          if gain[1].type == Fixnum   
            cible = POKEMON_S::Pokemon_Info.name(gain[1])
          elsif gain[1].type == String   
            cible = gain[1]   
          end
          text = "-"
          taille = self.contents.text_size(text).width   
          self.contents.draw_text(110, (ligne * 30 + k * 26) -116, 290, 20, text)  
          self.contents.draw_text(taille + 113, (ligne * 30 + k * 26) -116, 290, 20, cible + " Lv" + gain[2].to_s)     
        end   
           
      end   
         
      # Afficher objectif   
      ligne -= 1   
      self.contents.font.italic = false   
         
      for i in 0...$data_quete.tab_def_quete[id_quete]["but"].size   
        objectif = $data_quete.tab_def_quete[id_quete]["but"][i]   
        fait = $pokemon_party.tab_quete[id_quete][1][i]   
        sur = objectif[1]   
        ligne += 1   
           
        if $pokemon_party.quete_objectif_termine?(id_quete,i)   
          self.contents.font.color = Color.new(100,100,100,255)   
        end   
           
        if objectif[0] == "VOIR"   
          if objectif[2].type == Fixnum   
            cible = $data_enemies[objectif[2]].name   
          elsif objectif[2].type == String   
            cible = objectif[2]   
          end   
          type = "- VUS " + fait.to_s + "/" + sur.to_s + " " + cible   
          self.contents.draw_text(110, (ligne * 20) -55, 310, 400, type )   
        end   
           
        if objectif[0] == "CAPTURER"   
          if objectif[2].type == Fixnum   
            cible = $data_enemies[objectif[2]].name   
          elsif objectif[2].type == String   
            cible = objectif[2]   
          end   
          type = "- PRIS " + fait.to_s + "/" + sur.to_s + " " + cible   
          self.contents.draw_text(110, (ligne * 20) -55, 310, 400, type )   
        end   
           
        if objectif[0] == "VAINCRE"   
          if objectif[2].type == Fixnum   
            cible = $data_enemies[objectif[2]].name   
          elsif objectif[2].type == String   
            cible = objectif[2]   
          end   
          type = "- VAINCUS " + fait.to_s + "/" + sur.to_s + " " + cible   
          self.contents.draw_text(110, (ligne * 20) -55, 310, 400, type )   
        end   
           
        if objectif[0] == "TR_OBJ"   
          item = $data_items[objectif[2]]   
          fait = ( fait > sur ? sur : fait)   
          text = "- Trouver " + fait.to_s + "/" + sur.to_s   
          taille = self.contents.text_size(text).width   
          self.contents.draw_text(110, (ligne * 20) -55, 310, 400, text)  
          self.contents.draw_text(taille + 136, (ligne * 20) -55, 310, 400, item.name)   
        end   
           
        if objectif[0] == "PARLER"   
          self.contents.draw_text(110, (ligne * 20) -55, 310, 400, "- Parler à " + objectif[1])   
        end   
           
        self.contents.font.color = Color.new(0,0,0,255)   
           
      end   
         
    end   
  end   
     
     
     
  #==============================================================================   
  # ■ Scene_Quete   
  #------------------------------------------------------------------------------   
  #  Gérer les quetes   
  #   Version   Date          Auteur        Commentaires   
  #   1.00      12/09/2007    Tonyryu       Création   
  #   
  #==============================================================================   
  class Scene_Quete   
       
    #--------------------------------------------------------------------------   
    # ● main   
    #--------------------------------------------------------------------------    
    def main   
      # Création des fenêtres   
      @optionquete_window = Window_Optionquete.new   
      @listequete_window = Window_Listequete.new   
      @detailquete_window = Window_Detailquete.new   
     
      # Affichage image de fond   
      @img_fond = Sprite.new   
      @img_fond.bitmap = RPG::Cache.picture("grim4")
      @img_fond.x = 13
      @img_fond.y = 13
      # Effectuer la transition graphique   
      Graphics.transition   
      # Boucle   
      loop do   
        # Mettre à jour les graphique   
        Graphics.update   
        # Mettre à jour les entrés clavier   
        Input.update    
        # Appeler fonction update   
        update   
        # si la Scene n'est plus la même   
        if $scene != self   
          # Alors sortir de la boucle   
          break   
        end   
      end   
      Graphics.freeze   
         
      # Détruire objets de classe   
      @optionquete_window.dispose   
      @listequete_window.dispose   
      @detailquete_window.dispose   
         
      # destruction de l'image de fond   
      @img_fond.bitmap.dispose   
      @img_fond.dispose   
    end   
       
    #--------------------------------------------------------------------------   
    # ● update   
    #--------------------------------------------------------------------------   
    def update   
      # Mettre à jour les fenêtres   
      @optionquete_window.update   
      @listequete_window.update   
      @detailquete_window.update   
         
      if @optionquete_window.active   
        gerer_menu   
      elsif @listequete_window .active   
        gerer_liste   
      end   
         
    end   
       
    #--------------------------------------------------------------------------   
    # ● gerer_menu   
    #--------------------------------------------------------------------------   
    def gerer_menu   
         
      # si la touche B est appuyée   
      if Input.trigger?(Input::B)   
        # Alors, jouer le son "cancel"   
        $game_system.se_play($data_system.cancel_se)   
        # Revenir sur l'écran de compte   
        $scene = Scene_Map.new   
     
        return   
      end   
         
      # Si la fleche bas ou la fleche bas est appuyée   
      if Input.trigger?(Input::DOWN) or Input.trigger?(Input::UP)   
        @listequete_window.refresh(@optionquete_window.index + 1)   
      end   
         
      # si la touche C est appuyée   
      if Input.trigger?(Input::C)   
        # ne rien faire si il n'y a pas de quete   
        return if @listequete_window.nb_quete() == 0   
        # Alors, jouer le son "decision"   
        $game_system.se_play($data_system.decision_se)   
        # Parcourir la liste des quetes   
        @optionquete_window.active = false   
        @listequete_window.active = true   
        @listequete_window.index = 0   
        @detailquete_window.refresh(@listequete_window.id_quete)   
      end   
         
    end   
     
    #--------------------------------------------------------------------------   
    # ● gerer_liste   
    #--------------------------------------------------------------------------   
    def gerer_liste   
      # Si la fleche bas ou la fleche bas est appuyée   
      if Input.trigger?(Input::DOWN) or Input.trigger?(Input::UP)   
        @detailquete_window.refresh(@listequete_window.id_quete)   
      end   
         
      # si la touche B est appuyée   
      if Input.trigger?(Input::B)   
        # Alors, jouer le son "cancel"   
        $game_system.se_play($data_system.cancel_se)   
        # Revenir sur le sommaire   
        @listequete_window.active = false   
        @optionquete_window.active = true   
        @listequete_window.index = -1   
        @detailquete_window.refresh   
        return   
      end   
         
    end   
        
  end


















Ce script ce trouve sur ce forum, ici même: ./2305.html
Je n'ai pas beaucoup de mérite, j'ai juste modifié quelques trucs très simple, à la porté de tous ^^
Pour l'utilisation du script, je vous recommande donc de suivre le lien que je vous ai donné, tout est déjà très bien expliqué. Les crédits s'y trouvent également.

Ah et voici l'image à mettre dans le dossier picture de votre projet:



Celle ci étant exclusive à mon projet, je vous la laisse quand même pour que vous ayez une base, mais j'aimerais svp, que vous la modifiez.


Petite précision, il est possible d’apporter plusieurs récompenses pour une même quête, pour mon projet, il n'y aura qu'une seul récompense par quête.
Mais si vous souhaitez en mettre plusieurs, il vous faudra agrandir la zone "récompense" pour que cela ne dépasse pas.


Si vous souhaitez comme moi, que votre menu s'ouvre via l'appuie d'une touche, voici comment procéder:

N'oubliez pas d'activer l'interrupteur en processus parralele au début de votre jeu, ou autre. 


Amusez vous Imbécile heureux


Ps: Si vous rencontrez des bugs, prévenez moi ^^
Et n'oubliez pas de m'ajouter dans vos crédit svp Imbécile heureux

Posté par FinalArt le 7 Mai - 22:50 (2013)
Pourquoi donc laissez les bugs graphiques sur les images ? J'entend pas là les traits gris à droite de chaque cadre.

Sinon, merci du partage !

Posté par Renkys le 7 Mai - 22:52 (2013)
Quels traits gris O_O ?

Edit: je viens de voir depuis mon tel et je vois aussi les traits gris FinalArt.
Tu as regardé depuis ton tel toi aussi ?
Bizarre car quand je regarde depuis le pc il n'apparaissent pas..

Posté par Rey' le 7 Mai - 22:52 (2013)
Merci beaucoup du partage ! Depuis le temps qu'on attendait un portage pour les versions Dual Screen. Clin d'œil foireux

Posté par TouzaxA le 8 Mai - 08:06 (2013)
Je vais certainement m'en servir, si je reprends sérieusement mon projet un jour.
Merci du partage, ça en aidera beaucoup.

Posté par Renkys le 8 Mai - 10:42 (2013)
Il n'y a pas de quoi, j'espère que ça servira à beaucoup d'entre vous Imbécile heureux

FinalArt j'ai édit mon post, les traits gris apparaissent sur mon tel mais pas sur mon pc, c'est pareil pour toi ?

Posté par Eurons くさ le 8 Mai - 10:50 (2013)
Bonjour, merci d'avoir partager ton script, pour ce qui est de l'image, ne t'inquiète pas pour moi, j'en ai une qui attendais ce script depuis longtemps Imbécile heureux

Posté par TouzaxA le 8 Mai - 11:12 (2013)
Renkys a écrit:
Il n'y a pas de quoi, j'espère que ça servira à beaucoup d'entre vous Imbécile heureux

FinalArt j'ai édit mon post, les traits gris apparaissent sur mon tel mais pas sur mon pc, c'est pareil pour toi ?


Ils apparaissent aussi sur mon PC (Safari). Ce n'est pas pour autant très gênant, puisqu'on doit se le faire custom. Clin d'œil foireux

Posté par Renkys le 8 Mai - 13:38 (2013)
Bizarre bizarre !
Je ne suis pas a la maison, je regarderais ça ce soir.
Mais sur chrome je ne vois pas de défaut ni même sur mon pc d'ailleurs, car c'est moi même qui est fait ces cadres sur photofiltre..

Posté par TouzaxA le 8 Mai - 14:06 (2013)
AH ! Mes yeux ! Bizard => Bizarre !
Pour notification, j'ai le même problème sur Chrome et Firefox.

Posté par Eurons くさ le 8 Mai - 14:57 (2013)
J'aimerais, par contre savoir, sous quelle nom, l'image doit-être enregistrer?

Posté par Rey' le 8 Mai - 15:00 (2013)
J'ai regardé dans le script et tu dois la nommer grim4. Tu peux changer le nom à la ligne 762 du Script Gestion_quete. Clin d'œil foireux

Posté par Renkys le 8 Mai - 16:11 (2013)
Reynald76 dit juste ^^ l'image doit se nommer grim4.
Dsl pour la faute, je change ça tout de suite !

Autre truc BIZARRE j'utilise chrome sur mon pc ainsi que mon tel et les traits gris s'affichent seulement sur mon tel :x

Posté par TouzaxA le 8 Mai - 16:37 (2013)
C'est en effet franchement bizarre, puisque c'est du PNG, donc un format courant...
Ce serait pas des zones transparentes ? J'ai déjà eu un problème comme ça.

Posté par Rey' le 9 Mai - 10:46 (2013)
EDIT : J'ai supprimé mon message étant donné qu'il n'était pas dans la bonne section.

En tout cas, très bonne adaptation à PSP DS, je t'en remercie. Cependant, j'ai repéré une modification à faire.
En effet, en appuyant sur W, tout les textes comme Quêtes en cours, quêtes réussites et quêtes échouées disparaissent.

Voilà, si je trouve d'autres petits détails, je te met au courant. Clin d'œil foireux

Posté par Frosties le 14 Mai - 17:25 (2013)
Faut les appeler comment les images ?

Posté par Rey' le 14 Mai - 18:08 (2013)
Rey' a écrit:
J'ai regardé dans le script et tu dois la nommer grim4. Tu peux changer le nom à la ligne 762 du Script Gestion_quete. Clin d'œil foireux



Frosties a écrit:
Faut les appeler comment les images ?


Je crois que tu as ta réponse. Pense à regarder les autres messages avant de poster. Clin d'œil foireux

Posté par Renkys le 14 Mai - 19:05 (2013)
Salut les gens !

Dsl mon internet à lâcher il y a quelques jours et j'attends encore le technicien...
Merci de me rapporter tous ces bugs j'essaierais de résoudre ces problèmes.
Merci aussi pour les compliments Imbécile heureux

Bonne soirée à tous !

Ps:Je vais peut être passer sur le billard dans quelques jours, donc ne soyez pas pressé ^^

Posté par Rey' le 14 Mai - 19:07 (2013)
T'inquiète, on a tout notre temps. ^^
Sinon, pendant que tu es là Renkys, il faudrait que tu appliques ces corrections à ton script Fonction_quete (sauf si Sphinx s'en ai déjà occupé) ^^
Voilà le lien : ./12737-Probleme-avec-le-systeme-de-Que…

Posté par Frosties le 15 Mai - 16:58 (2013)
Oui je sais que la première faut l'appeller grim4...Et la deuxième ? grim5 ?

Posté par Rey' le 15 Mai - 17:34 (2013)
La deuxième ?! C'est une seule et même image adapté à PSP DS. Clin d'œil foireux

Posté par Renkys le 16 Juin - 11:13 (2013)
Bonjour tout le monde !


Suite à un long moment sans internet, et de super vacances à Marseille *_*, me revoilà !
Donc je remercie tout d'abord Rey' d'avoir découvert un bug bien embêtant, ainsi que Sphinx pour avoir réparé ce bug !
La première page à donc été mise à jour.


Ensuite pour le second problème, pas de problème !
Il suffit de lancer votre jeu, d'appuyer sur la touche F1, un petit menu va s'ouvrir, cliquez sur le 3ème onglet ensuite cliquez sur la case "W" et mettez y un "-" et voilà !


Bonne journée !

Posté par lucario360 le 18 Aoû - 20:39 (2013)
Bonjour, je voulais déclarer un bug sur ce scripts, il me dit qu'il y a une erreur de syntax à la ligne 6 du 2ieme scripts pourtant j'ai bien copier les scripts sans rien toucher.

Posté par Rey' le 18 Aoû - 20:54 (2013)
Ça m'étonnerai un peu, la ligne 6 est une ligne de commentaire. Tu es sûr de ne pas avoir supprimé un # ?
Sinon, montre le log et éventuellement le message d'erreur. Imbécile heureux

Posté par lucario360 le 19 Aoû - 02:54 (2013)
Oups Désolé ! Je me suis tromper de partie du scripts, je voulais dire le premier, celui de fonction la part du code qui bug en syntax est celle-ci:

$pokemon_party.quete_parler(@event.name)
La ligne 6 comme j'ai préciser et j'ai plus le Log j'ai du supprimer le scripts pour attendre une solution, car j'avais besoin de faire des tests alors il me faillais me débarrasser de ce qui bug. Ce scripts me serait utile pour mon projet, si quelqu'un peu trouver l'erreur.