- metakingMembre
- Nombre de messages : 368
Age : 29
Distinction : aucune
Date d'inscription : 18/04/2008
Variation du prix des marchandises ( Achat / Vente )
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.
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.
# --------------------------------------------------
#===============================================================
#
# rpgmakervx.1fr1.net
#
#===============================================================
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
# ---------------------------------------------------------
- metakingMembre
- Nombre de messages : 368
Age : 29
Distinction : aucune
Date d'inscription : 18/04/2008
Re: Variation du prix des marchandises ( Achat / Vente )
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.
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
# -----------------------------------------------------------
- freeziaStaffeux 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
Re: Variation du prix des marchandises ( Achat / Vente )
Dim 18 Mai 2008 - 12:18
Un bon système utile je trouve .
- InvitéInvité
Re: Variation du prix des marchandises ( Achat / Vente )
Dim 18 Mai 2008 - 14:16
Tout à fait d'accord avec toi, Freezia. Merci beaucoup Metaking, ce script va m'être très utile
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum