価値観の違いによる価格変動
地球じゃ、ダイヤモンドは希少だけど火星(月だっけ?)では石ころ同然にゴロゴロしている中、どっちも
同じ価格でダイヤモンドを売っているのはおかしい・・・という場合(例)に効果を発揮します。
※貪藻矢射妥←ベースモジュールとTOI風最大所持数変更モジュールが必要です。
※TOI風最大保持数変更に対応したため、スクリプト導入後、ゲームははじめからを選択しないとショップの
画面に移る際にエラー落ちします。(でも、ショップの画面に移る前に
$game_system.max_hold_change(0)
を実行すればOK)
変更点
2008:12:16
・最大保持数を別モジュール化
・TOI風最大所持数変更に対応
2009:05:07
・購入項目に並んでいないものを売却しようとした際、価格が変動しないバグを修正
(■ Window_ShopNumber)
2009:05:08
・価格変動(アイテム装備)を併用した際、売却時しか価格の変動に対応して
いなかったバグを修正
(■ Window_ShopNumber)
2011:07:01
・アイテム、武器、防具の配列の最大値を定数で実装
2011:12:08
・VX風Vocab対応
(■ Window_ShopNumber)
2016:05:01
・価値観の違いによる価格変動の外部フラグ対応
スクリプト本体 |
#==============================================================================
# ■ 価値観の違いによる価格変動 By 貪藻矢射妥←
# - Window_ShopBuy plus -
#
# ・あるスイッチがonの場合、価格が変わります
#
# ※地球じゃ、ダイヤモンドは希少だけど火星(月だっけ?)では石ころ同然に
# ゴロゴロしている中、どっちも同じ価格でダイヤモンドを売っているのは
# おかしい・・・という場合(例)に効果を発揮します。
#
# ※TOI風最大保持数変更に対応したため、スクリプト導入後、ゲームははじめから
# を選択しないとショップの画面に移る際にエラー落ちします。
# (でも、ショップの画面に移る前に
# $game_system.max_hold_change(0)
# を実行すればOK)
#
# ※スイッチじゃなく、変数にすれば応用がきくはず・・・
#
#==============================================================================
# 更新っぽいもの
#
# 2008:12:16
# ・最大保持数を別モジュール化
# ・TOI風最大所持数変更に対応
#
# 2011:07:01
# ・アイテム、武器、防具の配列の最大値を定数で実装
#
# 2016:05:01
# ・価値観の違いによる価格変動の外部フラグ対応
$OuterFlgs = {} if $OuterFlgs == nil
$OuterFlgs["Price_Change_AB"] = true
module DIAMOND
# 価値観Bでの価格
PROCEB_ITEM = {
215=>50, # コスモサイト
216=>55, # ブルーコスモス
225=>60, # トリックダイヤ
226=>65, # ドレスデングリーン
}
PROCEB_WEAPON = {
12=>150, # ダイヤの剣
13=>38000, # ふわふわの剣
116=>8500, # 菊一文字則宗
344=>80, # ダイヤの手甲
}
PROCEB_ARMOR = {
307=>180, # ダイヤメイル
430=>25000, # ふわふわの指輪
}
#価格変動のスイッチ番号
CH_P_FLG = 127
# アイテム配列最大値
# Item, Weapon, Armor
ARRAY_MAX = [1000, 1000, 1000]
end
class Game_System
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :price_off # プライスオフ変数
attr_reader :premium # プレミア変数
attr_accessor :root_price_items # ルートプレイス(アイテム)
attr_accessor :root_price_weapons # ルートプレイス(武器)
attr_accessor :root_price_armors # ルートプレイス(防具)
attr_reader :max_hold_value # 外部最大所持数
end
class Scene_Shop
include DIAMOND
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
alias diamond_main main
def main
# 価値観の違いによる価格変動のための初期化
if $OuterFlgs["Price_Change_AB"]
if $game_system.root_price_items == nil
$game_system.root_price_items = Array.new(ARRAY_MAX[0])
for i in 0..ARRAY_MAX[0]
$game_system.root_price_items[i] = false
end
end
if $game_system.root_price_weapons == nil
$game_system.root_price_weapons = Array.new(ARRAY_MAX[1])
for i in 0..ARRAY_MAX[1]
$game_system.root_price_weapons[i] = false
end
end
if $game_system.root_price_armors == nil
$game_system.root_price_armors = Array.new(ARRAY_MAX[2])
for i in 0..ARRAY_MAX[2]
$game_system.root_price_armors[i] = false
end
end
end
#呼び戻し
diamond_main
end
end
#==============================================================================
# ■ Window_Base
#------------------------------------------------------------------------------
# ゲーム中のすべてのウィンドウのスーパークラスです。
#==============================================================================
class Window_Base < Window
#--------------------------------------------------------------------------
# ● もともとの価格をゲットしてみる
# item : アイテム種別
#--------------------------------------------------------------------------
def set_root_price(item)
case item
when RPG::Item
if !$game_system.root_price_items[item.id]
$game_system.root_price_items[item.id] = item.price
end
when RPG::Weapon
if !$game_system.root_price_weapons[item.id]
$game_system.root_price_weapons[item.id] = item.price
end
when RPG::Armor
if !$game_system.root_price_armors[item.id]
$game_system.root_price_armors[item.id] = item.price
end
else
p "武器でも防具でもアイテムでもない・・・"
end
end
end
#==============================================================================
# ■ Window_ShopBuy
#------------------------------------------------------------------------------
# ショップ画面で、購入できる商品の一覧を表示するウィンドウです。
#==============================================================================
class Window_ShopBuy < Window_Selectable
include RUBY_SYS
include ChangeSC
include BM
include DIAMOND
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# shop_goods : 商品
#--------------------------------------------------------------------------
alias diamond_initialize initialize
def initialize(shop_goods)
diamond_initialize(shop_goods)
@draw_item_num = 2 # 一度に描画する数
@draw_ok = Array.new() # 描画完了フラグ配列
end
include VDI
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
@item_drawing = false
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@draw_counter = 0
reset_array
@data = []
for goods_item in @shop_goods
case goods_item[0]
when 0
item = $data_items[goods_item[1]]
when 1
item = $data_weapons[goods_item[1]]
when 2
item = $data_armors[goods_item[1]]
end
if item != nil
@data.push(item)
end
item.name = transfer(item.name)
end
# 項目数が 0 でなければビットマップを作成し、全項目を描画
@item_max = @data.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
draw_item_v
end
end
#--------------------------------------------------------------------------
# ● 項目の描画
# index : 項目番号
#--------------------------------------------------------------------------
def draw_item(index)
item = @data[index]
if $OuterFlgs["Price_Change_AB"]
set_root_price(item)
end
# アイテムの所持数を取得 + 価格取得
case item
when RPG::Item
number = $game_party.item_number(item.id)
if $game_switches[CH_P_FLG] && PROCEB_ITEM[item.id] != nil
item.price = PROCEB_ITEM[item.id]
else
item.price = $game_system.root_price_items[item.id]
end
when RPG::Weapon
number = $game_party.weapon_number(item.id)
if $game_switches[CH_P_FLG] && PROCEB_WEAPON[item.id] != nil
item.price = PROCEB_WEAPON[item.id]
else
item.price = $game_system.root_price_weapons[item.id]
end
when RPG::Armor
number = $game_party.armor_number(item.id)
if $game_switches[CH_P_FLG] && PROCEB_ARMOR[item.id] != nil
item.price = PROCEB_ARMOR[item.id]
else
item.price = $game_system.root_price_armors[item.id]
end
end
if item.price == nil
p "価格がエラってます・・・"
end
# 価格が所持金以下、かつ所持数が MAX_HOLD でなければ通常文字色に、
# そうでなければ無効文字色に設定
if $OuterFlgs["Max_Hold_Change"]
max_hold = MAX_HOLD[$game_system.max_hold_value]
else
max_hold = DEFAULT_MH
end
if item.price <= $game_party.gold and number < max_hold
root_color = normal_color
num_color = ITEMCOLOR
dflag = true
else
root_color = disabled_color
num_color = ITEMDISCL
dflag = false
end
x = 4
y = index * 32
rect = Rect.new(x, y, self.width - 32, 32)
self.contents.fill_rect(rect, NILCOLOR)
bitmap = RPG::Cache.icon(item.icon_name)
opacity = root_color == normal_color ? MAX8BIT : HARF8BIT
self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity)
draw_shadow_text([x + 28, y], item.name, root_color, 0, dflag)
rectr = [x + 240, y, 88, 32]
if ITEMCLFLG
root_color = num_color
end
change_price = (item.price / $game_system.price_off).to_i
draw_shadow_text(rectr, change_price.to_s, root_color, 2, dflag)
self.contents.font.color = normal_color
end
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(self.item == nil ? "" : self.item.description)
end
end
|
Window_ShopNumber |
#==============================================================================
# ■ 価値観の違いによる価格変動 By 貪藻矢射妥←
# - Window_ShopNumber plus -
#
#==============================================================================
# 更新っぽいもの
#
# 2009:05:07
# ・購入項目に並んでいないものを売却しようとした際、価格が変動しないバグを修正
#
# 2009:05:08
# ・価格変動(アイテム装備)を併用した際、売却時しか価格の変動に対応して
# いなかったバグを修正
#
# 2011:12:08
# ・VX風Vocab対応
#
# 2016:05:01
# ・価値観の違いによる価格変動の外部フラグ対応
class Game_System
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :shop_value # 購入/売却用外部変数
end
#==============================================================================
# ■ Scene_Shop
#------------------------------------------------------------------------------
# ショップ画面の処理を行うクラスです。
#==============================================================================
class Scene_Shop
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
alias update_diamond update
def update
if $OuterFlgs["Price_Change_I"]
$game_system.shop_value = @command_window.index
end
# 元の処理を行う
update_diamond
end
end
#==============================================================================
# ■ Window_ShopNumber
#------------------------------------------------------------------------------
# ショップ画面で、購入または売却するアイテムの個数を入力するウィンドウです。
#==============================================================================
class Window_ShopNumber < Window_Base
include DIAMOND
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
draw_item_name(@item, 4, 96)
rectr = [272, 96, 32, 32]
rectr2 = [308, 96, 24, 32]
draw_shadow_text(rectr, "×")
draw_shadow_text(rectr2, @number.to_s, normal_color, 2)
self.cursor_rect.set(304, 96, 32, 32)
# 合計価格と通貨単位を描画
if $OuterFlgs["Price_Change_AB"]
set_root_price(item)
case @item
when RPG::Item
if $game_switches[CH_P_FLG] && PROCEB_ITEM[@item.id] != nil
@price = PROCEB_ITEM[@item.id]
else
@price = $game_system.root_price_items[@item.id]
end
when RPG::Weapon
if $game_switches[CH_P_FLG] && PROCEB_WEAPON[@item.id] != nil
@price = PROCEB_WEAPON[@item.id]
else
@price = $game_system.root_price_weapons[@item.id]
end
when RPG::Armor
if $game_switches[CH_P_FLG] && PROCEB_ARMOR[@item.id] != nil
@price = PROCEB_ARMOR[@item.id]
else
@price = $game_system.root_price_armors[@item.id]
end
end
if @price == nil
p "価格がエラってます・・・"
end
end
# 購入か売却かによって変更
if $OuterFlgs["Price_Change_I"]
if $game_system.shop_value == 0
@price /= $game_system.price_off
else
@price *= $game_system.premium
end
end
if $OuterFlgs["Price_Change_AB"]
total_price = Integer(@price) * @number
else
total_price = @price * @number
end
if !KGC::ICMP_HIDE_ZERO_COST || total_price > 0
domination = Vocab::gold
cx = contents.text_size(domination).width
rectr3 = [4, 160, 328-cx-2, 32]
rectr4 = [332-cx, 160, cx, 32]
draw_shadow_text(rectr3, total_price.to_s, normal_color, 2)
draw_shadow_text(rectr4, domination, system_color, 2)
end
end
end
|
カスタマイズポイントについて
PROCEB_ITEM |
CH_P_FLGがonの場合のアイテムの価格(ハッシュで入力) |
PROCEB_WEAPON |
CH_P_FLGがonの場合の武器の価格(ハッシュで入力) |
PROCEB_ARMOR |
CH_P_FLGがonの場合の防具の価格(ハッシュで入力) |
CH_P_FLG |
価格を変動させるフラグ |
※スイッチじゃなく、変数にすればもっとバリエーションを増やせるハズ
戻る