Partagez
Aller en bas
avatar
metaking
Membre

Nombre de messages : 368
Age : 24
Distinction : aucune
Date d'inscription : 18/04/2008

Variation du prix des marchandises ( Achat / Vente ) Empty Variation du prix des marchandises ( Achat / Vente )

le Dim 18 Mai 2008 - 8:47
Nom : Variation du prix des marchandises ( Achat / Vente )
Auteur : ASHKA
Script : 1
Info :Ce script est la version simplifié et pour VX d'un systeme que j'ai developpé pour mon projet solo.
Il permet de modifier le prix des objets, armes, armures pour chaque magasin, à l'achat comme à la vente et independament les uns des autres.
Il existe en deux versions :

1) La permiere utilise un systeme d'indice qui influe sur le prix
( Multiplié par 1 / 1.2 / 2.3 / 0.5 / 0.9 / 0.2 ... )
L'indice d'achat par defaut est 1.
L'indice de vente par defaut est 0.5.
Spoiler:
Code:
#          Variation du prix des marchandises ( Achat / Vente )
#                      par indice



# Ce script permet d'avoir pour chaque objet, arme et armure un indice
# modifiant le prix d'achat ou de vente.
# Il suffit d'inserer un script avant d'appeler votre magasin.
# Voici les commandes à utiliser :

# $indice_achat_objet[X] = Y
# Donne à l'objet d'ID X l'indice Y pour l'achat

# $indice_achat_arme[X] = Y
# Donne à l'arme d'ID X l'indice Y pour l'achat

# $indice_achat_armure[X] = Y
# Donne à l'armure d'ID X l'indice Y pour l'achat

# $indice_vente_objet[X] = Y
# Donne à l'objet d'ID X l'indice Y pour la vente

# $indice_vente_arme[X] = Y
# Donne à l'arme d'ID X l'indice Y pour la vente

# $indice_vente_armure[X] = Y
# Donne à l'armure d'ID X l'indice Y pour la vente

# Ci dessous, vous pouvez regler le retour automatique à l'indice par
# defaut entre chaque magasin ( soit 1 pour l'achat et 0.5 pour la vente)
# true = réinitialisation automatique à l'indice par defaut.
# false = conserve l'indice d'un magasin à l'autre si rien n'est defini.
# --------------------------------------------------

#===============================================================
#                         
#                www.rpgmakervx-fr.com                                         
#     
#===============================================================

class Scene_Shop < Scene_Base

####
RETOUR_AUTO_DEFAUT = true # Retour automatique à l'indice par defaut entre chaque magasin
####

  def update_buy_selection
    @status_window.item = @buy_window.item
    if Input.trigger?(Input::B)
      Sound.play_cancel
      @command_window.active = true
      @dummy_window.visible = true
      @buy_window.active = false
      @buy_window.visible = false
      @status_window.visible = false
      @status_window.item = nil
      @help_window.set_text("")
      return
    end
    if Input.trigger?(Input::C)
      @item = @buy_window.item
      number = $game_party.item_number(@item)
      if @item.is_a?(RPG::Item)
        prix = (@item.price * $indice_achat_objet[@item.id]).to_i
      elsif @item.is_a?(RPG::Weapon)
        prix = (@item.price * $indice_achat_arme[@item.id]).to_i
      elsif @item.is_a?(RPG::Armor)
        prix = (@item.price * $indice_achat_armure[@item.id]).to_i
      end
      if @item == nil or prix > $game_party.gold or number == 99
        Sound.play_buzzer
      else
        Sound.play_decision
        max = @item.price == 0 ? 99 : $game_party.gold / prix
        max = [max, 99 - number].min
        @buy_window.active = false
        @buy_window.visible = false
        @number_window.set(@item, max, prix)
        @number_window.active = true
        @number_window.visible = true
      end
    end
  end
 
  def update_sell_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      @command_window.active = true
      @dummy_window.visible = true
      @sell_window.active = false
      @sell_window.visible = false
      @status_window.item = nil
      @help_window.set_text("")
    elsif Input.trigger?(Input::C)
      @item = @sell_window.item
      @status_window.item = @item
      if @item.is_a?(RPG::Item)
        prix = (@item.price * $indice_vente_objet[@item.id]).to_i
      elsif @item.is_a?(RPG::Weapon)
        prix = (@item.price * $indice_vente_arme[@item.id]).to_i
      elsif @item.is_a?(RPG::Armor)
        prix = (@item.price * $indice_vente_armure[@item.id]).to_i
      end
      if @item == nil or prix == 0
        Sound.play_buzzer
      else
        Sound.play_decision
        max = $game_party.item_number(@item)
        @sell_window.active = false
        @sell_window.visible = false
        @number_window.set(@item, max, prix)
        @number_window.active = true
        @number_window.visible = true
        @status_window.visible = true
      end
    end
  end

  def decide_number_input
    Sound.play_shop
    @number_window.active = false
    @number_window.visible = false
    case @command_window.index
    when 0  # Buy
      if @item.is_a?(RPG::Item)
        prix = (@item.price * $indice_achat_objet[@item.id]).to_i
      elsif @item.is_a?(RPG::Weapon)
        prix = (@item.price * $indice_achat_arme[@item.id]).to_i
      elsif @item.is_a?(RPG::Armor)
        prix = (@item.price * $indice_achat_armure[@item.id]).to_i
      end
      $game_party.lose_gold(@number_window.number * prix)
      $game_party.gain_item(@item, @number_window.number)
      @gold_window.refresh
      @buy_window.refresh
      @status_window.refresh
      @buy_window.active = true
      @buy_window.visible = true
    when 1  # sell
      if @item.is_a?(RPG::Item)
        prix = (@item.price * $indice_vente_objet[@item.id]).to_i
      elsif @item.is_a?(RPG::Weapon)
        prix = (@item.price * $indice_vente_arme[@item.id]).to_i
      elsif @item.is_a?(RPG::Armor)
        prix = (@item.price * $indice_vente_armure[@item.id]).to_i
      end
      $game_party.gain_gold(@number_window.number * prix)
      $game_party.lose_item(@item, @number_window.number)
      @gold_window.refresh
      @sell_window.refresh
      @status_window.refresh
      @sell_window.active = true
      @sell_window.visible = true
      @status_window.visible = false
    end
  end

  def update_command_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      if RETOUR_AUTO_DEFAUT == true
        réinitialisation
      end
      $scene = Scene_Map.new
    elsif Input.trigger?(Input::C)
      case @command_window.index
      when 0  # buy
        Sound.play_decision
        @command_window.active = false
        @dummy_window.visible = false
        @buy_window.active = true
        @buy_window.visible = true
        @buy_window.refresh
        @status_window.visible = true
      when 1  # sell
        if $game_temp.shop_purchase_only
          Sound.play_buzzer
        else
          Sound.play_decision
          @command_window.active = false
          @dummy_window.visible = false
          @sell_window.active = true
          @sell_window.visible = true
          @sell_window.refresh
        end
      when 2  # Quit
        Sound.play_decision
        if RETOUR_AUTO_DEFAUT == true
          réinitialisation
        end
        $scene = Scene_Map.new
      end
    end
  end
 
  def réinitialisation
    for i in 1...$data_items.size
      item = $data_items[i]
      $indice_achat_objet[item.id] = 1
      $indice_vente_objet[item.id] = 0.5
    end
    for i in 1...$data_weapons.size
      item = $data_weapons[i]
      $indice_achat_arme[item.id] = 1
      $indice_vente_arme[item.id] = 0.5
    end
    for i in 1...$data_armors.size
      item = $data_armors[i]
      $indice_achat_armure[item.id] = 1
      $indice_vente_armure[item.id] = 0.5
    end
  end
 
end # class

# ---------------------------------------------------

class Scene_Title < Scene_Base

  def start
    super
    $indice_achat_objet = Hash.new(1)
    $indice_vente_objet = Hash.new(0.5)
    $indice_achat_arme = Hash.new(1)
    $indice_vente_arme = Hash.new(0.5)
    $indice_achat_armure = Hash.new(1)
    $indice_vente_armure = Hash.new(0.5)
    load_database                    # Load database
    create_game_objects              # Create game objects
    check_continue                    # Determine if continue is enabled
    create_title_graphic              # Create title graphic
    create_command_window            # Create command window
    play_title_music                  # Play title screen music
  end

end

# -------------------------------------------------

class Window_ShopBuy < Window_Selectable

  def draw_item(index)
    item = @data[index]
    number = $game_party.item_number(item)
    if item.is_a?(RPG::Item)
      prix = (item.price * $indice_achat_objet[item.id]).to_i
    elsif item.is_a?(RPG::Weapon)
      prix = (item.price * $indice_achat_arme[item.id]).to_i
    elsif item.is_a?(RPG::Armor)
      prix = (item.price * $indice_achat_armure[item.id]).to_i
    end
    enabled = (prix <= $game_party.gold and number < 99)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    draw_item_name(item, rect.x, rect.y, enabled)
    rect.width -= 4
    self.contents.draw_text(rect, prix.to_s, 2)
  end

end

# ---------------------------------------------------------
avatar
metaking
Membre

Nombre de messages : 368
Age : 24
Distinction : aucune
Date d'inscription : 18/04/2008

Variation du prix des marchandises ( Achat / Vente ) Empty Re: Variation du prix des marchandises ( Achat / Vente )

le Dim 18 Mai 2008 - 8:47
2) La deuxieme permet de directement choisir son prix.
Le prix d'achat par defaut est celui de la base de donnée.
Le prix de vente par defaut est celui de la base de donnée divisé par 2.
Spoiler:
Code:
#          Variation du prix des marchandises ( Achat / Vente )
#                par modification du prix



# Ce script permet d'avoir pour chaque objet, arme et armure un prix
# different dans chaque magasin que ce soit pour l'achat ou la vente.
# Il suffit d'inserer un script avant d'appeler votre magasin.
# Voici les commandes à utiliser :

# $prix_achat_objet[X] = Y
# Donne à l'objet d'ID X le prix Y pour l'achat

# $prix_achat_arme[X] = Y
# Donne à l'arme d'ID X le prix Y pour l'achat

# $prix_achat_armure[X] = Y
# Donne à l'armure d'ID X le prix Y pour l'achat

# $prix_vente_objet[X] = Y
# Donne à l'objet d'ID X le prix Y pour la vente

# $prix_vente_arme[X] = Y
# Donne à l'arme d'ID X le prix Y pour la vente

# $prix_vente_armure[X] = Y
# Donne à l'armure d'ID X le prix Y pour la vente

# Entre chaque magasin, le prix est réinitialisé.
# Le prix normal de la base de donnée pour l'achat.
# Le prix de la base de donnée divisé par 2 pour la vente.
# --------------------------------------------------

class Scene_Shop < Scene_Base

  def update_buy_selection
    @status_window.item = @buy_window.item
    if Input.trigger?(Input::B)
      Sound.play_cancel
      @command_window.active = true
      @dummy_window.visible = true
      @buy_window.active = false
      @buy_window.visible = false
      @status_window.visible = false
      @status_window.item = nil
      @help_window.set_text("")
      return
    end
    if Input.trigger?(Input::C)
      @item = @buy_window.item
      number = $game_party.item_number(@item)
      if @item.is_a?(RPG::Item)
        if $prix_achat_objet[@item.id] != @item.price
          prix = $prix_achat_objet[@item.id].to_i
        else
          prix = @item.price
        end
      elsif @item.is_a?(RPG::Weapon)
        if $prix_achat_arme[@item.id] != @item.price
          prix = $prix_achat_arme[@item.id].to_i
        else
          prix = @item.price
        end
      elsif @item.is_a?(RPG::Armor)
        if $prix_achat_armure[@item.id] != @item.price
          prix = $prix_achat_armure[@item.id].to_i
        else
          prix = @item.price
        end
      end
      if @item == nil or prix > $game_party.gold or number == 99
        Sound.play_buzzer
      else
        Sound.play_decision
        max = @item.price == 0 ? 99 : $game_party.gold / prix
        max = [max, 99 - number].min
        @buy_window.active = false
        @buy_window.visible = false
        @number_window.set(@item, max, prix)
        @number_window.active = true
        @number_window.visible = true
      end
    end
  end
 
  def update_sell_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      @command_window.active = true
      @dummy_window.visible = true
      @sell_window.active = false
      @sell_window.visible = false
      @status_window.item = nil
      @help_window.set_text("")
    elsif Input.trigger?(Input::C)
      @item = @sell_window.item
      @status_window.item = @item
      if @item.is_a?(RPG::Item)
        if $prix_vente_objet[@item.id] != (@item.price / 2)
          prix = $prix_vente_objet[@item.id].to_i
        else
          prix = @item.price / 2
        end
      elsif @item.is_a?(RPG::Weapon)
        if $prix_vente_arme[@item.id] != (@item.price / 2)
          prix = $prix_vente_arme[@item.id].to_i
        else
          prix = @item.price / 2
        end
      elsif @item.is_a?(RPG::Armor)
        if $prix_vente_armure[@item.id] != (@item.price / 2)
          prix = $prix_vente_armure[@item.id].to_i
        else
          prix = @item.price / 2
        end
      end
      if @item == nil or prix == 0
        Sound.play_buzzer
      else
        Sound.play_decision
        max = $game_party.item_number(@item)
        @sell_window.active = false
        @sell_window.visible = false
        @number_window.set(@item, max, prix)
        @number_window.active = true
        @number_window.visible = true
        @status_window.visible = true
      end
    end
  end

  def decide_number_input
    Sound.play_shop
    @number_window.active = false
    @number_window.visible = false
    case @command_window.index
    when 0  # Buy
      if @item.is_a?(RPG::Item)
        if $prix_achat_objet[@item.id] != @item.price
          prix = $prix_achat_objet[@item.id].to_i
        else
          prix = @item.price
        end
      elsif @item.is_a?(RPG::Weapon)
        if $prix_achat_arme[@item.id] != @item.price
          prix = $prix_achat_arme[@item.id].to_i
        else
          prix = @item.price
        end
      elsif @item.is_a?(RPG::Armor)
        if $prix_achat_armure[@item.id] != @item.price
          prix = $prix_achat_armure[@item.id].to_i
        else
          prix = @item.price
        end
      end
      $game_party.lose_gold(@number_window.number * prix)
      $game_party.gain_item(@item, @number_window.number)
      @gold_window.refresh
      @buy_window.refresh
      @status_window.refresh
      @buy_window.active = true
      @buy_window.visible = true
    when 1  # sell
      if @item.is_a?(RPG::Item)
        if $prix_vente_objet[@item.id] != (@item.price / 2)
          prix = $prix_vente_objet[@item.id].to_i
        else
          prix = @item.price / 2
        end
      elsif @item.is_a?(RPG::Weapon)
        if $prix_vente_arme[@item.id] != (@item.price / 2)
          prix = $prix_vente_arme[@item.id].to_i
        else
          prix = @item.price / 2
        end
      elsif @item.is_a?(RPG::Armor)
        if $prix_vente_armure[@item.id] != (@item.price / 2)
          prix = $prix_vente_armure[@item.id].to_i
        else
          prix = @item.price / 2
        end
      end
      $game_party.gain_gold(@number_window.number * prix)
      $game_party.lose_item(@item, @number_window.number)
      @gold_window.refresh
      @sell_window.refresh
      @status_window.refresh
      @sell_window.active = true
      @sell_window.visible = true
      @status_window.visible = false
    end
  end

  def update_command_selection
    if Input.trigger?(Input::B)
      Sound.play_cancel
      $scene = Scene_Map.new
    elsif Input.trigger?(Input::C)
      case @command_window.index
      when 0  # buy
        Sound.play_decision
        @command_window.active = false
        @dummy_window.visible = false
        @buy_window.active = true
        @buy_window.visible = true
        @buy_window.refresh
        @status_window.visible = true
      when 1  # sell
        if $game_temp.shop_purchase_only
          Sound.play_buzzer
        else
          Sound.play_decision
          @command_window.active = false
          @dummy_window.visible = false
          @sell_window.active = true
          @sell_window.visible = true
          @sell_window.refresh
        end
      when 2  # Quit
        Sound.play_decision
        $scene = Scene_Map.new
      end
    end
  end
 
  def réinitialisation
    for i in 1...$data_items.size
      item = $data_items[i]
      $prix_achat_objet[item.id] = item.price
      $prix_vente_objet[item.id] = item.price / 2
    end
    for i in 1...$data_weapons.size
      item = $data_weapons[i]
      $prix_achat_arme[item.id] = item.price
      $prix_vente_arme[item.id] = item.price / 2
    end
    for i in 1...$data_armors.size
      item = $data_armors[i]
      $prix_achat_armure[item.id] = item.price
      $prix_vente_armure[item.id] = item.price / 2
    end
  end
 
end # class

# ---------------------------------------------------

class Scene_Title < Scene_Base

  def start
    super
    $prix_achat_objet = Hash.new(1)
    $prix_vente_objet = Hash.new(1)
    $prix_achat_arme = Hash.new(1)
    $prix_vente_arme = Hash.new(1)
    $prix_achat_armure = Hash.new(1)
    $prix_vente_armure = Hash.new(1)
    load_database                    # Load database
    create_game_objects              # Create game objects
    check_continue                    # Determine if continue is enabled
    create_title_graphic              # Create title graphic
    create_command_window            # Create command window
    play_title_music                  # Play title screen music
  end

end

# -------------------------------------------------

class Window_ShopBuy < Window_Selectable

  def draw_item(index)
    item = @data[index]
    number = $game_party.item_number(item)
      if item.is_a?(RPG::Item)
        if $prix_achat_objet[item.id] != item.price
          prix = $prix_achat_objet[item.id].to_i
        else
          prix = item.price
        end
      elsif item.is_a?(RPG::Weapon)
        if $prix_achat_arme[item.id] != item.price
          prix = $prix_achat_arme[item.id].to_i
        else
          prix = item.price
        end
      elsif item.is_a?(RPG::Armor)
        if $prix_achat_armure[item.id] != item.price
          prix = $prix_achat_armure[item.id].to_i
        else
          prix = item.price
        end
      end
    enabled = (prix <= $game_party.gold and number < 99)
    rect = item_rect(index)
    self.contents.clear_rect(rect)
    draw_item_name(item, rect.x, rect.y, enabled)
    rect.width -= 4
    self.contents.draw_text(rect, prix.to_s, 2)
  end

end

# ---------------------------------------------------------

class Scene_Map < Scene_Base

  def start
    super
    Scene_Shop.new.réinitialisation
    $game_map.refresh
    @spriteset = Spriteset_Map.new
    @message_window = Window_Message.new
  end

end

# -----------------------------------------------------------
freezia
freezia
Staffeux retraité

Nombre de messages : 1734
Distinction : Elu membre de l'année 2009 haut la main.
Inventeur du Mapping Show.

caricaturatationeur de la comu'
[ Dudu']
Date d'inscription : 18/02/2008

Variation du prix des marchandises ( Achat / Vente ) Empty Re: Variation du prix des marchandises ( Achat / Vente )

le Dim 18 Mai 2008 - 12:18
Un bon système utile je trouve .
Anonymous
Invité
Invité

Variation du prix des marchandises ( Achat / Vente ) Empty Re: Variation du prix des marchandises ( Achat / Vente )

le Dim 18 Mai 2008 - 14:16
Tout à fait d'accord avec toi, Freezia. Merci beaucoup Metaking, ce script va m'être très utile Very Happy
Contenu sponsorisé

Variation du prix des marchandises ( Achat / Vente ) Empty Re: Variation du prix des marchandises ( Achat / Vente )

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