Sujet n°9126
Posté par valentin4311 le 4 Fév - 22:04 (2011)
Titre : Sac (demi) DP
Bonjour voici le Script de Krosk modifié par mes soins pour un rendu plus joli à la DP:

Résultat

Garçon:

Fille:




Voici comment faire:

Télécharger les images suivantes et les appeler comme écris.

images

bagfond:



bag1:

bag2:

bag3:

bag4:

bag5:

bagf1:

bagf2:

bagf3:

bagf4:

bagf5:



Le_Script

#==============================================================================
# ■ Pokemon_Item_Bag
# Pokemon Script Project - Krosk modifié par Valentin4311
# 23/08/07
#-----------------------------------------------------------------------------
# Scène à ne pas modifier de préférence
#-----------------------------------------------------------------------------
# Interface du Sac
#-----------------------------------------------------------------------------
  #-------------------------------------------------------------
  # $data_item
  #   [Nom, Icone, Type, Description, Prix, Profil]
  #   Profil:  "BALL": usable en combat uniquement, tenable, jetable, limité
  #            "BATTLE" : usable en combat uniquement sur les Pokémons, tenable, jetable, limité (boosts stats en combat)
  #            "ITEM": usable en combat sur les Pokémons, en map, tenable, jetable, limité (Consommables tels Potions, etc)
  #            "HOLD": non usable, tenable, jetable, illimité (objets boostants les types)
  #            "PKMN": usable hors combat uniquement, sur les Pokémons, tenable, jetable, limité (super bonbon, boosts stats)
  #            "KEYITEM": non usable en combat, usable en map en interaction, non tenable, non jetable, usage illimité (Objets rares)
  #            "MAP" : usage en interaction, tenable, jetable, limité (repousse, flute repousse)
  #            "CS" / "HM" : non usable en combat, usable en map sur les Pokémons, non tenable, non jetable, usage illimité
  #-------------------------------------------------------------
  #------------------------------------------------------------ 
  #  @bag = [ paramètre, [], [], [], [], [] ]
  #  id: id objet, nombre: -1 pour objet utilisable à l'infini.
  #  paramètre : optionnel
  #  @bag[1] : Items, objets simples, sous la forme [id, nombre]
  #  @bag[2] : Balles sous la forme [id, nombre]
  #  @bag[3] : CT/CS sous la forme [id, nombre]
  #  @bag[4] : Baies [id, nombre]
  #  @bag[5] : Objets clés
  #------------------------------------------------------------
module POKEMON_S
  class Pokemon_Item_Bag
    # -------------------------------------------
    # Initialisation
    #    socket: cf rubrique @bag, indique la poche
    #    item_index: index du curseur
    #    mode =
    # -------------------------------------------
    def initialize(socket_index = $pokemon_party.bag_index, z_level = 100, mode = 0)
      @bag_index = socket_index[0]
      @item_index = socket_index[1]
      @z_level = z_level
      @mode = mode
    end
   
    def main
      Graphics.freeze
      @background = Sprite.new
      @background.bitmap = RPG::Cache.picture("bagfond.png")
      @background.z = @z_level
     
    if $game_switches[60] == true  ###
      @bag_sprite = Sprite.new
      @bag_sprite.bitmap = RPG::Cache.picture("bag"+@bag_index.to_s+".png")
      @bag_sprite.z = @z_level + 1
      @bag_sprite.x = 4
      @bag_sprite.y = 38
    end
   
    if $game_switches[61] == true  ###
      @bag_sprite = Sprite.new
      @bag_sprite.bitmap = RPG::Cache.picture("bagf"+@bag_index.to_s+".png")
      @bag_sprite.z = @z_level + 1
      @bag_sprite.x = 4
      @bag_sprite.y = 38
    end 
   
     if $game_switches[9] == true  ###
      @bag_sprite = Sprite.new
      @bag_sprite.bitmap = RPG::Cache.picture("bag"+@bag_index.to_s+".png")
      @bag_sprite.z = @z_level + 1
      @bag_sprite.x = 4
      @bag_sprite.y = 38
    end
     
      @socket_name = Window_Base.new(51-35, 254-16, 228+32, 45+32)
      @socket_name.contents = Bitmap.new(228, 45)
      @socket_name.opacity = 0
      @socket_name.z = @z_level + 1
      @socket_name.contents.font.name = $fontface
      @socket_name.contents.font.size = $fontsizebig
      @socket_name.contents.font.color = @socket_name.normal_color
     
      @item_list = POKEMON_S::Pokemon_Item_List.new(@bag_index, @item_index)
      @item_list.opacity = 0
      @item_list.z = @z_level + 1
      @item_list.active = true
      @item_list.visible = true
     
      @text_window = Window_Base.new(85, 350, 550, 120)#273
      @text_window.opacity = 0
      @text_window.contents = Bitmap.new(550, 161)#241
      @text_window.contents.font.name = $fontface
      @text_window.contents.font.size = $fontsizebig
      @text_window.contents.font.color = @text_window.normal_color
      @text_window.z = @z_level + 1
     
      @item_icon = Sprite.new
      @item_icon.z = @z_level + 2
      @item_icon.x = 4
      @item_icon.y = 375
      @item_icon.zoom_x = 3
      @item_icon.zoom_y = 3
      @item_icon.bitmap = RPG::Cache.icon(item_icon)
     
      @drop_counter = Window_Base.new(0, 0, 120, 64)
      @drop_counter.contents = Bitmap.new(150-32, 32)
      @drop_counter.x = 640 - 120 - 3
      @drop_counter.y = 480 - 64 - 3
      @drop_counter.z = @z_level + 4
      @drop_counter.contents.font.name = $fontface
      @drop_counter.contents.font.size = $fontsize
      @drop_counter.contents.font.color = @drop_counter.normal_color
      @drop_counter.visible = false
      @drop_counter_number = 1
     
      list = ["UTILISER", "DONNER", "JETER", "ORDRE", "RETOUR"]
      if $battle_var.in_battle
        list = ["UTILISER", "RETOUR"]
      end
      @command_window = Window_Command.new(260, list)
      @command_window.active = false
      @command_window.visible = false
      @command_window.x = 640 - 260 - 3
      @command_window.y = 480 - @command_window.height - 3
      @command_window.z = @z_level + 10
     
      refresh_all
     
      Graphics.transition
      loop do
        Graphics.update
        if @done == true
          break
        end
        Input.update
        if @drop_counter.visible == true
          update_drop
          next
        end
        if @command_window.active == true
          update_command
          next
        end
        if @command_window.active == false
          @item_list.update
          update
          next
        end
      end
     
      $pokemon_party.bag_index[0] = @bag_index
      $pokemon_party.bag_index[1] = @item_list.index
     
      Graphics.freeze
      @item_list.dispose
      @text_window.dispose
      @item_icon.dispose
      @background.dispose
      @socket_name.dispose
      @drop_counter.dispose
      @bag_sprite.dispose
  end
   
    def update
      if Input.repeat?(Input::DOWN) or Input.repeat?(Input::UP)
        refresh
        return
      end
     
      if Input.repeat?(Input::RIGHT) and @item_list.on_switch == -1
        $game_system.se_play($data_system.cursor_se)
        @bag_index += @bag_index == 5 ? -4 : 1
        @item_list.refresh(@bag_index)
        refresh_all
        return
      end
     
      if Input.repeat?(Input::LEFT) and @item_list.on_switch == -1
        $game_system.se_play($data_system.cursor_se)
        @bag_index += @bag_index == 1 ? 4 : -1
        @item_list.refresh(@bag_index)
        refresh_all
        return
      end
     
      if Input.trigger?(Input::C)
        if @mode == "sell"
          if @item_list.index == @item_list.size
            @done = true
            return
          end
          # item invendable
          if not(Item.soldable?(item_id))
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          # $scene = Pokemon_Item_Shop.new
          $scene.call_item_amount([item_id, item_amount], "sell", @z_level + 100)
          refresh_all
          return
        end
       
        # Echange d'objet
        if @item_list.on_switch != -1
          if @item_list.index != @item_list.size
            $game_system.se_play($data_system.decision_se)
            $pokemon_party.item_switch(@bag_index, @item_list.index, @item_list.on_switch)
            @item_list.on_switch = -1
            refresh_all
          else
            $game_system.se_play($data_system.cancel_se)
            @item_list.on_switch = -1
            refresh_all
          end
          return
        end
       
        # Mode sélection objet à donner
        if @mode == "hold"
          # Fermer le sac
          if @item_list.index == @item_list.size
            $game_system.se_play($data_system.decision_se)
            @done = true
            @return_data = [0, false]
          # Fermer le sac
          elsif Item.holdable?(item_id)
            $game_system.se_play($data_system.decision_se)
            @done = true
            @return_data = [item_id, true]
          else 
            $game_system.se_play($data_system.buzzer_se)
          end
          return 
        end
       
        # Retour
        if @item_list.index == @item_list.size
          @done = true
          # Retour au combat
          if $battle_var.in_battle
            return
          end
          $scene = POKEMON_S::Pokemon_Menu.new(2)
          return
        # Sélection item
        else
          @command_window.active = true
          refresh
          @command_window.visible = true
          return
        end
      end
     
      if Input.trigger?(Input::B)
        $game_system.se_play($data_system.cancel_se)
        if @mode == "hold"
          @done = true
          @return_data = [0, false]
          return
        end
       
        if @mode == "sell"
          @done = true
          return
        end
       
        if @item_list.on_switch != -1
          @item_list.on_switch = -1
          refresh_all
          return
        end
       
        if $battle_var.in_battle
          $game_system.se_play($data_system.cancel_se)
          @return_data = 0
          @done = true
          return
        end
       
        $game_system.se_play($data_system.cancel_se)
        $scene = POKEMON_S::Pokemon_Menu.new(2)
        @done = true
        return
      end
    end
   
    def return_data
      return @return_data
    end
   
    # ----------------------------------
    # Appel en cas de changement d'item
    # ----------------------------------
    def refresh
      # Sprite sac
    if $game_switches[60] == true ###
      @bag_sprite.bitmap = RPG::Cache.picture("bag"+@bag_index.to_s+".png")
    end
   
    if $game_switches[61] == true ###
      @bag_sprite.bitmap = RPG::Cache.picture("bagf"+@bag_index.to_s+".png")
    end
   
    if $game_switches[9] == true ###
      @bag_sprite.bitmap = RPG::Cache.picture("bag"+@bag_index.to_s+".png")
    end
   
      # Nom de la poche
      @socket_name.contents.clear
      @socket_name.contents.draw_text(0,0, 228, 48, socket_name, 1)
     
      # Tracage de l'icone objet
      @item_icon.bitmap = RPG::Cache.icon(item_icon)
     
      # Texte de description
      if @command_window.active
        string = []
        string[0] = Item.name(item_id)
        string[1] = "est sélectionné."
      elsif @drop_counter.visible == true
        string = []
        string[0] = "En jeter"
        string[1] = "combien?"
      elsif @item_list.on_switch != -1
        string = []
        string[0] = "Echanger avec"
        string[1] = "lequel?"
      else
        string = string_builder(item_descr, 36)
      end
     
      text_window_draw(string)
     
      refresh_command_list
    end
   
   
   
    # ------------------------------------
    # Appel en cas de changement de poche
    # ------------------------------------
    def refresh_all
      refresh_list
      refresh
    end
   
    # ------------------------------------
    # Rafraichissement de liste (même poche)
    # ------------------------------------
    def refresh_list
      @item_list.refresh_list
    end
   
    # ----------------------------------
    # Liste d'actions associé à l'item
    # ----------------------------------
    def update_command
      @command_window.update
     
      if Input.trigger?(Input::B)
        $game_system.se_play($data_system.cancel_se)
        @command_window.active = false
        @command_window.visible = false
        refresh
        return
      end
     
      if Input.trigger?(Input::C)
        case @command_window.index
        # Utiliser
        when 0
          if $battle_var.in_battle and not(Item.battle_usable?(item_id))
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          if not($battle_var.in_battle) and not(Item.map_usable?(item_id))
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          $game_system.se_play($data_system.decision_se)
          @command_window.active = false
          @command_window.visible = false
          if Item.use_on_pokemon?(item_id)
            item_mode = "item_use"
            if Item.item_able_mode?(item_id)
              item_mode = "item_able"
            end
            scene = POKEMON_S::Pokemon_Party_Menu.new(0, @z_level + 100, item_mode, item_id)
            scene.main
            # return_data = [id item_utilisé, item utilisé oui/non, ]
            data = scene.return_data
            used = data[1]
            item_used = 0
          else
            # Utilisé
            data = Item.effect(item_id)
            used = data[0]
            item_used = item_id
            string = data[1]
            return_map = data[2]
            if string.type == String and string != ""
              window = Pokemon_Window_Help.new
              window.draw_text(string)
              Input.update
              until Input.trigger?(Input::C)
                Graphics.update
                Input.update
              end
              window.dispose
            end
          end
          if used
            $pokemon_party.use_item(item_id)
          end
          # En combat, retour à l'écran après utilisation de l'objet
          if $battle_var.in_battle and used
            $battle_var.action_id = 1
            @done = true
            @return_data = item_used
            return
          end
          if used and return_map
            @done = true
            return
          end
          refresh_all
          @item_list.refresh
          Graphics.transition
          return
        # Retour (dernière option)
        when @command_window.item_max-1
          $game_system.se_play($data_system.cancel_se)
          @command_window.active = false
          @command_window.visible = false
          refresh
          return
        # Donner
        when 1
          if not(Item.holdable?(item_id))
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          $game_system.se_play($data_system.decision_se)
          @command_window.active = false
          @command_window.visible = false
          scene = POKEMON_S::Pokemon_Party_Menu.new(0, @z_level + 100, "hold", item_id)
          scene.main
          return_data = scene.return_data
          # return_data = [item tenu true/false, id item_tenu, item remplacé true/false, id item remplacé]
          item_id2 = return_data[2]
          replaced = return_data[3]
          if replaced
            $pokemon_party.add_item(item_id2)
          end
          item_id1 = return_data[0]
          hold = return_data[1]
          if hold
            $pokemon_party.drop_item(item_id1)
          end
          refresh_all
          Graphics.transition
          return
        # Jeter
        when 2
          if not(Item.holdable?(item_id))
            $game_system.se_play($data_system.buzzer_se)
            return
          end
          $game_system.se_play($data_system.decision_se)
          @command_window.active = false
          @command_window.visible = false
          @drop_counter.visible = true
          refresh
          refresh_drop_counter
          return
        # Ordre
        when 3
          @item_list.on_switch = @item_list.index
          @command_window.active = false
          @command_window.visible = false
          refresh_all
          return
        end
      end
     
    end
   
    def refresh_command_list
      # Fermer le sac
      if @item_list.index == @item_list.size
        return
      end 
      # En combat
      if $battle_var.in_battle
        if Item.battle_usable?(item_id)
          @command_window.enable_item(0)
        else
          @command_window.disable_item(0)
        end
      # En map
      else
        if Item.map_usable?(item_id)
          @command_window.enable_item(0)
        else
          @command_window.disable_item(0)
        end
        if Item.holdable?(item_id)
          @command_window.enable_item(1)
          @command_window.enable_item(2)
        else
          @command_window.disable_item(1)
          @command_window.disable_item(2)
        end
      end
    end
   
    def update_drop
      if Input.repeat?(Input::UP)
        if @drop_counter_number < item_amount
          @drop_counter_number += 1
          refresh_drop_counter
        end
        return
      end
     
      if Input.repeat?(Input::DOWN)
        if @drop_counter_number > 1
          @drop_counter_number -= 1
          refresh_drop_counter
        end
        return
      end
     
      if Input.repeat?(Input::LEFT)
        if @drop_counter_number > 1
          @drop_counter_number -= 10
          if @drop_counter_number < 1
            @drop_counter_number = 1
          end
          refresh_drop_counter
        end
        return
      end
     
      if Input.repeat?(Input::RIGHT)
        if @drop_counter_number < item_amount
          @drop_counter_number += 10
          if @drop_counter_number > item_amount
            @drop_counter_number = item_amount
          end
          refresh_drop_counter
        end
        return
      end
     
      if Input.repeat?(Input::B)
        $game_system.se_play($data_system.cancel_se)
        @drop_counter_number = 1
        @drop_counter.visible = false
        @command_window.active = true
        @command_window.visible= true
        refresh
        return
      end
     
      if Input.repeat?(Input::C)
        $game_system.se_play($data_system.decision_se)
        if decision
          $game_system.se_play($data_system.decision_se)
          id_ = item_id
          $pokemon_party.drop_item(id_, @drop_counter_number)
          @drop_counter.visible = false
          refresh_list
          text_window_draw(["Jeté " + @drop_counter_number.to_s, Item.name(id_) + "."])
          @drop_counter_number = 1
          @command_window.active = false
          @command_window.visible = false
          Input.update
          until Input.trigger?(Input::C)
            Graphics.update
            Input.update
          end
          refresh_all
          return
        else
          $game_system.se_play($data_system.cancel_se)
          @drop_counter_number = 1
          @drop_counter.visible = false
          @command_window.active = false
          @command_window.visible = false
          refresh
          return
        end
      end
    end
   
    def refresh_drop_counter
      @drop_counter.contents.clear
      @drop_counter.contents.draw_text(0,0,88,32, "x    " + @drop_counter_number.to_s, 2)
    end
   
    # ----------------------------------
    # Identification de l'item !!!!!!! Utilise l'index de la poche
    # ----------------------------------
    def item_id
      return $pokemon_party.bag[@bag_index][@item_list.index][0]
    end
   
    def item_icon
      if @item_list.index == @item_list.size
        return "return.png"
      else
        return Item.icon(item_id)
      end
    end
   
    def item_descr
      if @item_list.index == @item_list.size
        if $battle_var.in_battle
          return "Retourner au combat."
        end
        if @mode == "sell"
          return "Retourner au magasin."
        end
        return "Retourner au jeu."
      else
        return Item.descr(item_id)
      end
    end
   
    def item_amount
      return $pokemon_party.bag[@bag_index][@item_list.index][1]
    end
   
    # ----------------------------------
    # Decision
    # ----------------------------------
    def decision
      @command = Window_Command.new(120, ["OUI", "NON"], $fontsize)
      @command.x = 517
      @command.y = 480 - 6 - @drop_counter.height - @command.height
      @command.z = @z_level + 15
      loop do
        Graphics.update
        Input.update
        @command.update
        if Input.trigger?(Input::C) and @command.index == 0
          @command.dispose
          @command = nil
          return true
        end
        if (Input.trigger?(Input::C) and @command.index == 1) or Input.trigger?(Input::B)
          @command.dispose
          @command = nil
          return false
        end
      end
    end
   
    # ----------------------------------
    # Texte
    # ----------------------------------
    def socket_name
      case @bag_index
      when 1
        return "OBJETS"
      when 2
        return "POKéBALL"
      when 3
        return "CT & CS"
      when 4
        return "BAIES"
      when 5
        return "OBJ.RARES"
      end
    end
   
    def text_window_draw(list)
      @text_window.contents.clear
      for i in 0..list.length-1
        @text_window.contents.draw_text(6, 40*i, 550, $fhb, list)
      end
    end
   
    def dialog_window_draw(string)
    end
   
    def string_builder(text, limit)
      length = text.length
      full1 = false
      full2 = false
      full3 = false
      full4 = false
      string1 = ""
      string2 = ""
      string3 = ""
      string4 = ""
      word = ""
      for i in 0..length
        letter = text
        if letter != " " and i != length
          word += letter.to_s
        else
          word = word + " "
          if (string1 + word).length < limit and not(full1)
            string1 += word
            word = ""
          else
            full1 = true
          end
         
          if (string2 + word).length < limit and not(full2)
            string2 += word
            word = ""
          else
            full2 = true
          end
         
          if (string3 + word).length < limit and not(full3)
            string3 += word
            word = ""
          else
            full3 = true
          end
         
          #if (string4 + word).length < limit and not(full4)
            string4 += word
            word = ""
          #else
          #  full4 = true
          #end
        end
      end
      if string4.length > 1
        string4 = string4[0..string4.length-2]
      end
      return [string1, string2, string3, string4]
    end
  end




  # ----------------------------------
  # class liste des objets dans une poche (socket)
  # ----------------------------------
  class Pokemon_Item_List < Window_Selectable
    attr_accessor :on_switch
   
    def initialize(socket = 1, index = 1)
      super(287, 32, 356, 416, $fn)
      self.contents = Bitmap.new(324, 384)
      self.contents.font.name = $fontnarrow
      self.contents.font.size = $fontnarrowsize
      self.contents.font.color = normal_color
      @bag_index = socket
      @item_max = size + 1
      @on_switch = -1
      self.index = index
    end
   
    def refresh(socket = @bag_index)
      self.index = 0
      @bag_index = socket
      @item_max = size + 1
      refresh_list
    end
   
    def refresh_list
      self.contents.clear
      self.contents = Bitmap.new(356, $fhb*(size+1))
      self.contents.font.name = $fontnarrow
      self.contents.font.size = $fontnarrowsize
      self.contents.font.color = normal_color
      hl = $fn
      i = 0
      for item in $pokemon_party.bag[@bag_index]
        id = item[0]
        amount = item[1]
        if @on_switch == i
          self.contents.font.color = text_color(2) # Rouge
        end
        self.contents.draw_text(19, hl*i, 304, hl, Item.name(id))#14
        if Item.holdable?(id)
          self.contents.draw_text(14, hl*i, 304, hl, "x   ", 2)
          self.contents.draw_text(14, hl*i, 304, hl, amount.to_s, 2)
        end
        if @on_switch == i
          self.contents.font.color = normal_color
        end
        i += 1
      end
      self.contents.draw_text(19, hl*i, 310, hl, "FERMER LE SAC")
    end
   
    def item_id(index = @bag_index)
      return $pokemon_party.bag[index][self.index]
    end
   
    def size
      return $pokemon_party.bag_list(@bag_index).length
    end
  end
end




Attention!!!:ce script ne marche que si les interrupteur 60(garçon) ou (et non pas et) 61(fille) est activé.
Il sont modifiable au niveaux des lignes où il y a ###(pour ce qui n'y connaisent rien il faut modifier le chiffres de la ligne des ###.

Si toute fois vous ne voulez que d'avoir garçon/fille activer l'interrupteur 9 (modifiable aussi)et vous aurez le sac d'un garçon.