Pokémon Script Project Forum Index

Manuel | Search
 Information des admins 
Si vous désirez parler de PSP ou obtenir du soutient là dessus, merci d'aller faire un tour sur https://pokemonworkshop.com/forum/index.php Imbécile heureux

Systeme de Quetes
Goto page: <  1, 2, 3, 4, 59, 10, 11  >
 
Post new topic   Reply to topic    Pokémon Script Project Forum Index -> Game Making -> Ressources techniques -> Scripts
Previous topic :: Next topic   
Author Message
Ace Attorney Man
Guest





PostPosted: Sat 3 Jan - 21:10 (2009)    Post subject: Systeme de Quetes

je démarre un combat de dresseur avec le nouveau truc de sphinx et pan une erreur >.<

---------- Erreur de script : Gestion_Quete ----------
----- Type
NoMethodError

----- Message
- ARGS - ["VUS"]
undefined method `[]' for nil:NilClass

----- Position dans Gestion_Quete
Ligne 279

----- Backtrace
Script : Gestion_Quete | Ligne : 279 | Méthode : in `quete_voir_pokemon'
Script : Pokemon_Battle_Trainer | Ligne : 109 | Méthode : in `initialize'
Script : Interpreter | Ligne : 62 | Méthode : in `new'
Script : Interpreter | Ligne : 62 | Méthode : in `call_battle_trainer'
Script : Interpreter Bis | Ligne : 182 | Méthode : in `command_301'
Script : Interpreter 2 | Ligne : 151 | Méthode : in `execute_command'
Script : Interpreter 1 | Ligne : 199 | Méthode : in `update'
Script : Interpreter 1 | Ligne : 113 | Méthode : in `loop'
Script : Interpreter 1 | Ligne : 204 | Méthode : in `update'
Script : Scene_Map | Ligne : 48 | Méthode : in `alias_update'
Script : Scene_Map | Ligne : 46 | Méthode : in `loop'
Script : Scene_Map | Ligne : 59 | Méthode : in `alias_update'
Script : MAPPANEL | Ligne : 90 | Méthode : in `update'
Script : Scene_Map | Ligne : 25 | Méthode : in `main'
Script : Scene_Map | Ligne : 19 | Méthode : in `loop'
Script : Scene_Map | Ligne : 30 | Méthode : in `main'
Script : Main | Ligne : 53
Back to top
Publicité






PostPosted: Sat 3 Jan - 21:10 (2009)    Post subject: Publicité

PublicitéSupprimer les publicités ?
Back to top
PiVa
Guest





PostPosted: Sat 3 Jan - 21:11 (2009)    Post subject: Systeme de Quetes

Version 2 : Imbécile heureux


Vous l'utiliserez ?
Back to top
Sphinx
Scribe
Scribe


Joined: 07 Jan 2008
Posts: 9,736
Localisation: Quelque part, dans le monde... Ou peut être sur une autre planète...
ID Steam: FaQuinator

PostPosted: Sat 3 Jan - 21:14 (2009)    Post subject: Systeme de Quetes

aaaaaaaaaaaaah xD g oublié qques lignes dsl xP


(ca c une fonction de PSP)

Dans le script Organisation Quêtes, supprimez ces 3 lignes :

ligne 279
Code:
@list_pokes["VUS"][id_monstre] += 1


ligne 311
Code:
@list_pokes["PRIS"][id_monstre] += 1


ligne 343
Code:
@list_pokes["VAINCUS"][id_monstre] += 1
Back to top
PiVa
Guest





PostPosted: Sat 3 Jan - 21:17 (2009)    Post subject: Systeme de Quetes

Ca sert à quoi c'est trois lignes ?
Back to top
Ace Attorney Man
Guest





PostPosted: Sat 3 Jan - 21:27 (2009)    Post subject: Systeme de Quetes

Ahhhh super ça marche ^^

merci sphinx =P
Back to top
Sphinx
Scribe
Scribe


Joined: 07 Jan 2008
Posts: 9,736
Localisation: Quelque part, dans le monde... Ou peut être sur une autre planète...
ID Steam: FaQuinator

PostPosted: Sat 3 Jan - 21:39 (2009)    Post subject: Systeme de Quetes

>> compter le nbre de fois qu'on voit / capture / met KO chaque pokémon ! Clin d'œil foireux
Back to top
Ace Attorney Man
Guest





PostPosted: Sat 3 Jan - 21:41 (2009)    Post subject: Systeme de Quetes

Et elles ont été ajouté au script pokemon battle wild trainer truc et machin mais il a oublié de les supprimer du script parce que ça buggait ... C'est ça ?
Back to top
Sphinx
Scribe
Scribe


Joined: 07 Jan 2008
Posts: 9,736
Localisation: Quelque part, dans le monde... Ou peut être sur une autre planète...
ID Steam: FaQuinator

PostPosted: Sat 3 Jan - 21:43 (2009)    Post subject: Systeme de Quetes

Clin d'œil foireux au script Organisation des quêtes Clin d'œil foireux


nop elles buggent pas, juste que c une fonction qui n'est pas sous PSP et donc qui ne peut pas tourner chez vous xP
Back to top
Ace Attorney Man
Guest





PostPosted: Sat 3 Jan - 22:36 (2009)    Post subject: Systeme de Quetes

Ah ok^^
Back to top
Heiwka
Membre


Joined: 29 Jan 2009
Posts: 885
Localisation: 59 (Nord)

PostPosted: Wed 4 Feb - 16:07 (2009)    Post subject: Systeme de Quetes

Pichu65 wrote:

Version 2 : Imbécile heureux


Vous l'utiliserez ?
J'adore ! je crois que je vais essayer d'en créer un aussi ^^
Back to top
Zelda
Ex-staff


Joined: 29 Apr 2008
Posts: 2,442
Localisation: Nantes (44)

PostPosted: Wed 4 Feb - 17:25 (2009)    Post subject: Systeme de Quetes

Pichu t'es un artiste !
Back to top
Visit poster’s website
PiVa
Guest





PostPosted: Wed 4 Feb - 17:42 (2009)    Post subject: Systeme de Quetes

xD, si tu le dit, moi je trouve pas  :lol:
Back to top
Sphinx
Scribe
Scribe


Joined: 07 Jan 2008
Posts: 9,736
Localisation: Quelque part, dans le monde... Ou peut être sur une autre planète...
ID Steam: FaQuinator

PostPosted: Wed 4 Feb - 17:58 (2009)    Post subject: Systeme de Quetes

Grande nouvelle =)

Je crois que j'ai rempli un nouvel objectif : réunir les modifs des différentes modifs des différents scripts en un seul script qu'il suffit d'ajouter =)

Ainsi, il faut simplement insérer ces 3 scripts quelque part au dessus de Main (plutôt vers la fin, en tout cas après les Pokemon_Battle_..., pour le 3°) :

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, 0, 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 = 18
         
      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 = 24
      self.contents.draw_text(0, -2, 130, 25, "Sommaire",1)
     
      # Afficher le menu
      self.contents.font.size = 18
      self.contents.font.color = Color.new(0,0,0,255)
      self.contents.draw_text(14, 25, 200, 25, " Quêtes en cours")
      self.contents.draw_text(14, 45, 200, 25, " Quêtes réussies")
      self.contents.draw_text(14, 65, 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(-20, 170, 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 = 20
     
      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 = 18
        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(230, 0, 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 = 20
      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 = true
      self.contents.draw_text(60, (ligne * 20) -2, 290, 47,"Descriptif :" )
      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) - 2, 324, 47,texte )
        break if ligne == 10
      }
     
      # Afficher Récompense
      ligne += 5
      k = 0

      self.contents.font.italic = true
      self.contents.draw_text(20, (ligne * 20) -2, 290, 20,"Récompense(s) :" )
      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"
          bitmap = RPG::Cache.icon("exp.png")
          text = "- "
          taille = self.contents.text_size(text).width
          self.contents.draw_text(0, (ligne * 20 + k * 26) -2, 290, 20, text)
          self.contents.blt(taille + 4, (ligne * 20 + k * 26) -6, bitmap, Rect.new(0, 0, 24, 24))
          self.contents.draw_text(taille + 35, (ligne * 20 + k * 26) -2, 290, 20, "Exp +" + nbr)
          bitmap.dispose
        end
       
        if gain[0] == "OBJ"
          item = $data_items[gain[2]]
          bitmap = RPG::Cache.icon(item.icon_name)
          text = "- "
          taille = self.contents.text_size(text).width
          self.contents.draw_text(0, (ligne * 20 + k * 26) -2, 290, 20, text)
          self.contents.blt(taille + 2, (ligne * 20 + k * 26) -6, bitmap, Rect.new(0, 0, 24, 24))
          self.contents.draw_text(taille + 35, (ligne * 20 + k * 26) -2, 290, 20, item.name + " * " + nbr)
          bitmap.dispose
         
        end
       
        if gain[0] == "ARGENT"
          bitmap = RPG::Cache.icon("gold.png")
          text = "- "
          taille = self.contents.text_size(text).width
          self.contents.draw_text(0, (ligne * 20 + k * 26) -2, 290, 20, text)
          self.contents.blt(taille + 3, (ligne * 20 + k * 26) -6, bitmap, Rect.new(0, 0, 24, 24))
          self.contents.draw_text(taille + 35, (ligne * 20 + k * 26) -2, 290, 20, "$ +" + nbr)
          bitmap.dispose
        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
          bitmap = RPG::Cache.icon("pokeball.png")
          text = "- "
          taille = self.contents.text_size(text).width
          self.contents.draw_text(0, (ligne * 20 + k * 26) -2, 290, 20, text)
          self.contents.blt(taille + 2, (ligne * 20 + k * 26) -6, bitmap, Rect.new(0, 0, 24, 24))
          self.contents.draw_text(taille + 35, (ligne * 20 + k * 26) -2, 290, 20, cible + " niveau " + gain[2].to_s)
          bitmap.dispose
        end
       
      end
     
      # Afficher objectif
      ligne -= 1
      self.contents.font.italic = true
      self.contents.draw_text(20, (ligne * 20) -2, 290, 380,"Objectif(s) :" )
      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(0, (ligne * 20) -2, 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(0, (ligne * 20) -2, 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(0, (ligne * 20) -2, 310, 400, type )
        end
       
        if objectif[0] == "TR_OBJ"
          item = $data_items[objectif[2]]
          bitmap = RPG::Cache.icon(item.icon_name)
          fait = ( fait > sur ? sur : fait)
          text = "- Trouver " + fait.to_s + "/" + sur.to_s
          taille = self.contents.text_size(text).width
          self.contents.draw_text(0, (ligne * 20) -2, 310, 400, text)
          self.contents.blt(taille + 4, (ligne * 20) + 183, bitmap, Rect.new(0, 0, 24, 24))
          self.contents.draw_text(taille + 30, (ligne * 20) -2, 310, 400, item.name)
          bitmap.dispose
        end
       
        if objectif[0] == "PARLER"
          self.contents.draw_text(0, (ligne * 20) -2, 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")
     
      # 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


Code:
module POKEMON_S
  #==============================================================================
  # ■ Systeme de gestion de quête
  #------------------------------------------------------------------------------
  # Script créé par Tonyryu
  # 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.
  #
  # adapté à PSP4G+ par Zelda puis Sphinx
  #==============================================================================
 
  #==============================================================================
  # ■ Data_Quete
  #------------------------------------------------------------------------------
  #  Contient la définition des quêtes
  #   Version   Date          Auteur        Commentaires
  #   1.00      12/09/2007    Tonyryu       Création
  #   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+
  #
  #==============================================================================
  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
 
=begin
  STRUCTURE GENERALE DE LA DEFINITION D'UNE QUÊTE (où n est le n°de la quête) :
      @tab_def_quete[n] = { "lancement"  => [CONDITIONS],
                            "nom"  => "NOM",
                            "desc" => "DESC1"+
                                     "\nDESC2"+
                                     "\nDESC3"+
                                     "\nDESC4",
                            "but"  => [OBJECTIFS],
                            "gain" => [GAINS]}
     
      CONDITIONS : "AUCUN" : aucune condition de lancement
                   Liste d'IDs des quêtes nécessaires pour le lancement
                   de la quête.
      NOM : nom de la quête
      DESC1 -> DESC4 : description de la quête sur 4 lignes (laisser \n si
                       ligne vide)
      OBJECTIFS : - ["TR_OBJ",Nbre,ID]
                        >> Nbre : nbre d'objets à trouver
                        >> ID : ID de l'objet à trouver

                  - ["PARLER","NOM"]
                        >> NOM : Nom du personnage à rencontrer

                  - ["VOIR",Nbre,ID,POKES]
                        >> Nbre : nbre de pokémons à voir
                        >> ID : NOM entre "" ou ID du pokémon à voir
                        >> POKES : * true :  ne prend pas en compte
                                             les pokémons des
                                             dresseurs
                                   * false : prend en compte les pokémons des
                                             dresseurs
                                   * non précisé >> true

                  - ["VAINCRE",Nbre,ID,POKES]
                        >> Nbre : nbre de pokémons à vaincre
                        >> ID : NOM entre "" ou ID du pokémon à vaincre
                        >> POKES : * true :  ne prend pas en compte
                                             les pokémons des
                                             dresseurs
                                   * false : prend en compte les pokémons des
                                             dresseurs
                                   * non précisé >> true

                  - ["CAPTURER",Nbre,ID,POKES]
                        >> Nbre : nbre de pokémons à capturer
                        >> ID : NOM entre "" ou ID du pokémon à capturer
                        >> POKES : * true :  ne prend pas en compte
                                             les pokémons des
                                             dresseurs
                                   * false : prend en compte les pokémons des
                                             dresseurs
                                   * non précisé >> true

      GAINS : - ["EXP",gain]
                    >> gain : expérience que l'équipe gagne (l'expérience est
                              partagée entre tous les pokémons de l'équipe)

              - ["ARGENT",somme]
                    >> somme : argent remporté

              - ["OBJ",nb,ID]
                    >> ID : ID de l'objet remporté
                    >> nb : nbre d'objets remportés

              - ["POKE",ID,lv,shiny]
                    >> ID : NOM entre "" ou ID du pokémon remporté
                    >> lv : niveau du poké remporté
                    >> shiny : true : poké shiny / false : poké non shiny

=end
 
      # Aucune quête n'est nécessaire pour démarrer cette quête. Elle démarrera
      # donc dès le début de la partie. Pour la remplir, il faut aller parler aux
      # 5 stands du Centre Sphinx.
      @tab_def_quete[0] = { "lancement"  => ["AUCUNE"],
                            "nom"  => "ETUDIONS",
                            "desc" => "Parlez aux cinq stands pour remplir cette quête."+
                                     "\n"+
                                     "\n"+
                                     "\n",
                            "but"  => [["PARLER","STAND1"],["PARLER","STAND2"],["PARLER","STAND3"],["PARLER","STAND4"],["PARLER","STAND5"]],
                            "gain" => []}

      # Aucune quête n'est nécessaire pour démarrer cette quête. Elle démarrera
      # donc dès le début de la partie. Pour la remplir, il faut voir au moins
      # deux nirondelle et en capturer au moins un, pour remporter 5 pokéballs.
      @tab_def_quete[1] = { "lancement"  => ["AUCUNE"],
                            "nom"  => "PREMIERS PAS",
                            "desc" => "Rencontrez 2 NIRONDELLE, capturez en un, ainsi"+
                                     "\nqu'un linéon, pour remplir cette quête et obtenir"+
                                     "\n6 pokéballs."+
                                     "\n",
                            "but"  => [["VOIR",2,"NIRONDELLE"],["CAPTURER",1,"NIRONDELLE"],["CAPTURER",1,"LINEON"]],
                            "gain" => [["OBJ",6,4]]}

      # Cette quête ne se lancera pas avant qu'un évent l'appelle. Elle ne
      # démarrera donc ni au début de la partie, ni lorsque d'autres quêtes
      # seront remplies. Elle a un lancement "SPECIAL". Pour la remplir, il
      # faut parler à Sphinx, ce qui validera cette quête et vous fera remporter
      # 3 superballs, et un MUNJA lv15.
      @tab_def_quete[2] = { "lancement"  => ["SPECIAL"],
                            "nom"  => "SUR LES TRACES DU CREATEUR",
                            "desc" => "Retrouvez le Créateur et passez lui les amitiés de Krosk,"+
                                     "\npour remplir cette qupete et remporter 3 superballs et"+
                                     "\nun MUNJA."+
                                     "\n",
                            "but"  => [["PARLER","SPHINX"]],
                            "gain" => [["OBJ",3,3],["POKE","MUNJA",15]]}

      # Cette quête se lancera automatiquement dès que les quêtes 0 et 1 seront
      # terminées. Il vous faudra obtenir l'objet 325 (LETTRE SPHINX) et trouver
      # le garde pour remporter une hyperball, 200$ et 500 points d'expérience
      # (répartis entre tous les pokémons de votre équipe.)
      @tab_def_quete[3] = { "lancement"  => [1,2],
                            "nom"  => "MISSION DE CONFIANCE",
                            "desc" => "Trouvez le garde, situé au Centre Sphinx, afin de lui remettre"+
                                     "\nla lettre, pour remporter une hyperball, 200$ et 500 points"+
                                     "\nd'expérience."+
                                     "\n",
                            "but"  => [["TR_OBJ",1,325],["PARLER","GARDE"]],
                            "gain" => [["OBJ",1,2],["GOLD",200],["EXP",500]]}


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


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, niveau = 2)
      $pokemon_party.quete_voir_pokemon(pokemon.id)
      qu_initialize(party, trainer_id, ia, run_able, lose_able, capturable, niveau)
    end
  end
 
  class Pokemon_Battle_Wild < Pokemon_Battle_Core
    alias qu_initialize initialize
    def initialize(party, pokemon, ia = false, lose_able = false)
      $pokemon_party.quete_voir_pokemon(pokemon.id)
      qu_initialize(party, pokemon, ia, lose_able)
    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


>> Toutes les autres modifs que j'avais posté avant sont intégrallement reprises par le 3° script, qu'il faut, du coup, placer vers la fin des scripts, juste avant main =)


Last edited by Sphinx on Sat 8 Aug - 17:24 (2009); edited 2 times in total
Back to top
PiVa
Guest





PostPosted: Wed 4 Feb - 18:08 (2009)    Post subject: Systeme de Quetes

J'ai rien compris, sa sert a avoir trois scripts oO" au lieu de deux ?
Back to top
Sphinx
Scribe
Scribe


Joined: 07 Jan 2008
Posts: 9,736
Localisation: Quelque part, dans le monde... Ou peut être sur une autre planète...
ID Steam: FaQuinator

PostPosted: Mon 9 Feb - 00:06 (2009)    Post subject: Systeme de Quetes

>> le 3° script remplace l'ensemble des modifs qu'il fallait faire dans les autres topics Clin d'œil foireux


edit : Zelda, t'as oublié le ptit up qui annonce la maj générale du topic =)
Back to top
Display posts from previous:   
Post new topic   Reply to topic    Pokémon Script Project Forum Index -> Game Making -> Ressources techniques -> Scripts All times are GMT + 1 Hour
Goto page: <  1, 2, 3, 4, 59, 10, 11  >
Page 4 of 11

 
Jump to:  

Index | Free forum | Free support forum | Free forums directory | Report a violation | Cookies | Charte | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Thème par Thomas et l'équipe de la refonte PSP 2012 (version 1.0)