#==============================================================================
# ■ 重量制 Ver 1.21 By むー
#------------------------------------------------------------------------------
# アイテムに重量を付加し、所持可能な重量を指定できます。
# 本スクリプトを利用するには、[むー素材用]スクリプトが別途必要になります。
# 本スクリプトは[むー素材用]よりも下に設置して下さい。
#------------------------------------------------------------------------------
#
# ★簡単な仕様★
#
# ・ゲームに重量を設置します。
# ・設定した総重量以上の物は持てません。
# ・チェックコマンドにて、イベントで入手可能チェックができます。
# ・戦闘後のドロップアイテムは、持てる分だけ出ます。
# →3個出た場合、最初の2個は持てるけれど残りが持てない場合、
# 2個分だけメッセージが出ます。入手も2個だけです。
# ・重量オーバーの場合、店で購入ができません。
# ・イベントでアイテムの増加をおこなう場合にもチェックが入ります。
# →特にメッセージは出ません。例えば5個入手で持てるだけ入手したい場合は、
# 5個いぺっんに入手ではなく、1個入手を5回分作って下さい。
# 5個いっぺんに入手する場合、5個持てなかったら1個も入手できません。
#
# ★チェック機能★
#
# イベントでアイテムを入手する時、重量オーバーになると取得できません。
# イベントのスクリプトで、以下のように記述すると動作する機能があります。
#
# can_gain_item?(アイテム種類, ID, 数量, スイッチ番号, [取得フラグ])
#
# アイテム種類: アイテム="I"、武器="W"、防具="A"
# ID : 上記アイテム種類別のID ("W",3...) なら武器ID3
# 数量 : 取得する数量
# スイッチ番号: 入手できる場合はON、できない場合はOFFが入るスイッチの番号
# 取得フラグ : ついでに取得するか(true/false)
#
# アイテム種類は必ず""で囲って下さい。I、W、A以外のチェックしていません。
# 数量が0の場合のエラーチェックはおこなっていません。
# アイテム種類、ID、数量、スイッチ番号は必須です。
# スイッチを使わない場合は、0にしておいて下さい。
# 取得フラグをtrueにしておくと、取得可能な場合は自動的にアイテムを入手します。
# falseまたは何も記述しなかった場合は取得しません。
# またスイッチに入れなくとも、返り値でtrueかfalseが戻ります。
#
# ★注意点★
#
# ・ゲーム開始時に、基本重量を設定して下さい。
# ・初期装備によって、総重量がオーバーしている場合があります。
#
#==============================================================================
$rgsslab = {} if $rgsslab.nil? # 併用対策
#==============================================================================
$moo_have_item_weight = true
module MOO_HAVE_ITEM_WEIGHT
#--------------------------------------------------------------------------
# 以下、設定箇所です。
#--------------------------------------------------------------------------
# 総重量を代入する変数番号
MAX_WT = 11
# 重量指定文字
WORD_WT = "重量"
# アイテム(および装備品)のメモ欄に書く文字です。
# "重量"の場合、<重量:5>とすれば、そのアイテムの重量は5になります。
# 他のスクリプトと重複する場合は変更してください。
# 重量指定のないアイテムの重量
DEFAULT_WT = 1
# 重量の指定をしなかったアイテムの重量です。
# 所持している総重量計算を個数×重量にするか
UNIT_WT = true
# 総重量の計算をどうするか決めます。
# trueの場合、アイテム個数×個別の重量の総計が、所持している総重量になります。
# falseの場合、アイテムが1個でも99個でも1個分の重さが総重量に加算されます。
# アイテム欄の重量表示を個数×重量にするか
VIEW_WT = true
# アイテム個数の後ろに表示される重量表示をどうするか決めます。
# trueの場合、アイテムの重量が5で個数が4の場合、20と表示されます。
# falseの場合、個数に関係なく、単純にアイテムの重量だけが表示されます。
# このVIEW_WTをfalse、上記のUNIT_WTがtrueの場合、錯覚しないようご注意ください。
# その場合、()はあくまでそのアイテムの重量であり、総重量は個数×重量となります。
# また、UNIT_WTをfalse、VIEW_WTをtrueにすると、混乱の元となります(笑)
# 重量計算に装備品を含むか
CONT_WT = false
# 装備品を総重量に含むかどうかを決めます。
# 袋(?)はあくまで袋、装備品は関係ない、などのような場合はfalseにして下さい。
# 総重量を表示する上での文字
SUM_WEIGHT_WORD = "総重量"
# アイテム欄で重量を囲う文字
PARENTHESIS_F = "(W:" # 前
PARENTHESIS_L = ")" # 後
# 1つのアイテム重量の最大桁数
FIGURE_WT = 2
# 1つのアイテムに設定する重量の桁数です。99までなら2という感じで。
# 上の「アイテム欄で重量を囲う文字」と合わせて表示しますが、
# これが"(W:"と")"だった場合、画面上のアイテム欄には
# [アイテム名 10(W: 5)] のように表示されます。
# ↑ ↑ ↑
# アイテム名 個数 重さ(この部分の数字の前の空白に関わってきます)
# 売買価格のレートを格納する変数 (1 = 1%)/おまけ機能
USE_RATE = false # レート変動を使う場合
BUY_RATE = 12 # 購入レート(USE_RATE=trueの場合のみ有効)
SELL_RATE = 13 # 売却レート(USE_RATE=trueの場合のみ有効)
# 指定しない場合、購入価格と売却価格は同じになります。
# 小数点以下の価格は切り捨てられます。
# 販売不可アイテムの文字
CANT_SELL = "重量制販売不可"
# アイテムのメモ欄にこの文字があると、価格が0以上でも
# ショップで販売不可になります(0はデフォルトのまま販売不可です)。
# 重量制販売不可 とした場合、<重量制販売不可> と <>を一緒に記述して下さい。
# なお、これはあくまでデフォルト形態のショップだけに有効です。
#--------------------------------------------------------------------------
# 以下、他のスクリプトを導入しているかどうかの判断です。
# これらのスクリプトを使用する場合、本スクリプトより上の位置に置いて下さい。
#--------------------------------------------------------------------------
# ドロップアイテム系のスクリプトを導入しているか
DROP_ITEM = false
# 導入している場合は true にして下さい。通常は false にして下さい。
# その際、そのスクリプトに$game_party.gain_item(ナントカ)とあると思います。
# その前後に、本スクリプトの中身のように改造する必要があります。
#
#--------------------------------------------------------------------------
# ここまで。
#--------------------------------------------------------------------------
end
#==============================================================================
# ★ ここより下は変更しないで下さい。
#==============================================================================
if MOO_HAVE_ITEM_WEIGHT::DROP_ITEM == false
#==============================================================================
# ■ BattleManager
#------------------------------------------------------------------------------
# 戦闘の進行を管理するモジュールです。
#==============================================================================
module BattleManager
def self.gain_drop_items
$game_troop.make_drop_items.each do |item|
if $game_party.gain_item_failed?(item) # ドロップ系スクリプトに追加部分
$game_party.moo_gain_item(item, 1)
$game_message.add(sprintf(Vocab::ObtainItem, item.name))
end # ドロップ系スクリプトに追加部分
end
wait_for_message
end
end
end
#==============================================================================
# ■ Game_Party
#------------------------------------------------------------------------------
# パーティを扱うクラスです。所持金やアイテムなどの情報が含まれます。このクラ
# スのインスタンスは $game_party で参照されます。
#==============================================================================
class Game_Party < Game_Unit
include MOO_GENERAL_MODULE
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :gold # 所持金
attr_reader :steps # 歩数
attr_reader :last_item # カーソル記憶用 : アイテム
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super
@gold = 0
@steps = 0
@last_item = Game_BaseItem.new
@total_weight = 0 # 追加
@menu_actor_id = 0
@target_actor_id = 0
@actors = []
init_all_items
end
#--------------------------------------------------------------------------
# ◎ アイテムの増加(減少)
# include_equip : 装備品も含める
#--------------------------------------------------------------------------
alias moo_gain_item gain_item
def gain_item(item, amount, include_equip = false)
# gain_item内では、include_equipの関係からか、memberが使えません。
# ですので重量に装備品を含む場合、メンバーの装備情報が取得できません。
# 以下の"if MOO_HAVE_ITEM_WEIGHT::CONT_WT == false"があるのはそのためです。
# 重量に装備品抜きの場合に限り、ここで重量のチェックをしています。
#
# 総重量を超える場合は取得不可能
# 1度に2以上取得しようとして引っかかった場合は、
# たとえ1個分の許容があったとしても、全て取得できません。
#
# 一応ここ以外にも、以下の箇所で入手可能かどうかのチェックをしています。
#
# ・イベントでアイテム、武器、防具を入手する時
# ・ショップでアイテムを購入する時
# ・戦闘後のドロップアイテム入手時
# ・装備を変更する時
#
# 普通に作成していれば、ここでチェックしなくてもよほど大丈夫だとはいますが、
# 他のスクリプトを導入する際、アイテム入手がある場合は注意して下さい。
# アイテム入手前に $game_party.gain_item(アイテム, 数量) を使って
# trueかfalseで判断するようにして下さい。
if MOO_HAVE_ITEM_WEIGHT::CONT_WT == false
return if gain_item_failed?(item, amount) == false
end
# moo_gain_item(item, amount, include_equip)
container = item_container(item.class)
return unless container
last_number = item_number(item)
new_number = last_number + amount
container[item.id] = [[new_number, 0].max, max_item_number(item)].min
container.delete(item.id) if container[item.id] == 0
if include_equip && new_number < 0
discard_members_equip(item, -new_number)
end
$game_map.need_refresh = true
end
#--------------------------------------------------------------------------
# ○ アイテムの個別重量を取得
#--------------------------------------------------------------------------
def weight_item(item)
return 0 if item == nil
# アイテムのメモ取得
memo = item.note.scan((/<#{MOO_HAVE_ITEM_WEIGHT::WORD_WT}[::](\S+)>/))
memo = memo.flatten
# 重量取得
if memo != nil and not memo.empty?
# 重量設定がある場合はそれを採用
wt = memo[0].to_i
else
# 重量設定がない場合は指定した重量とする
wt = MOO_HAVE_ITEM_WEIGHT::DEFAULT_WT
end
return wt
end
#--------------------------------------------------------------------------
# ○ 所持アイテムの総重量を取得
#--------------------------------------------------------------------------
def weight_sum
# 変数初期化
wt = 0
# 所持しているアイテムの重量取得
$data_items.each do |item|
# アイテムの総重量
wt += weight_have_item(item) if item and item.name != ""
end
$data_weapons.each do |item|
# 武器の総重量
wt += weight_have_item(item) if item and item.name != ""
end
$data_armors.each do |item|
# 防具の総重量
wt += weight_have_item(item) if item and item.name != ""
end
return wt
end
#--------------------------------------------------------------------------
# ○ 所持アイテムの個別重量を取得(フラグがあれば装備品を含む)
#--------------------------------------------------------------------------
def weight_have_item(item)
return 0 if item == nil
# アイテムの個別重量を取得
wt = weight_item(item)
# 所持個数の取得
cn = item_number(item)
if MOO_HAVE_ITEM_WEIGHT::CONT_WT
if item.class == RPG::Weapon or item.class == RPG::Armor
members.each do |actor|
if item.class == RPG::Weapon
cn += 1 if $game_actors[actor.id].equips[0] == item
cn += 1 if $game_actors[actor.id].equips[1] == item
elsif item.class == RPG::Armor
cn += 1 if $game_actors[actor.id].equips[item.etype_id] == item
end
end
end
end
# 個数×重量の場合の計算
if cn == 0
wt = 0
else
wt *= cn if MOO_HAVE_ITEM_WEIGHT::UNIT_WT
end
return wt
end
#--------------------------------------------------------------------------
# ○ 重量をカッコ書き(アイテム一覧に書くため)
#--------------------------------------------------------------------------
def weight_item_draw(item)
wt = weight_item(item).to_i
wt *= item_number(item) if MOO_HAVE_ITEM_WEIGHT::VIEW_WT
wt = wt.to_s
wt = bury_plus(wt, MOO_HAVE_ITEM_WEIGHT::FIGURE_WT, " ", lr = 1)
wt = MOO_HAVE_ITEM_WEIGHT::PARENTHESIS_F + wt + MOO_HAVE_ITEM_WEIGHT::PARENTHESIS_L
return wt
end
#--------------------------------------------------------------------------
# ○ アイテムを取得可能かどうかの判断
#--------------------------------------------------------------------------
def gain_item_failed?(item, val = 1)
val = 1 if MOO_HAVE_ITEM_WEIGHT::UNIT_WT == false
if weight_sum + weight_item(item) * val > $game_variables[MOO_HAVE_ITEM_WEIGHT::MAX_WT]
false
else
true
end
end
#--------------------------------------------------------------------------
# ○ 個数の限界によってアイテムを取得可能かどうかの判断
#--------------------------------------------------------------------------
def gain_item_max?(item, val = 1)
return false if item_number(item) + val > max_item_number(item)
return true
end
end
#==============================================================================
# ■ Game_Actor
#------------------------------------------------------------------------------
# アクターを扱うクラスです。このクラスは Game_Actors クラス($game_actors)
# の内部で使用され、Game_Party クラス($game_party)からも参照されます。
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ◎ 装備の変更
# slot_id : 装備スロット ID
# item : 武器/防具(nil なら装備解除)
#--------------------------------------------------------------------------
alias moo_change_equip change_equip
def change_equip(slot_id, item)
# equips[slot_id]: 装備中アイテム(nil=装備なし)
# item: これから装備しようとしているアイテム(nil=装備なし)
if MOO_HAVE_ITEM_WEIGHT::CONT_WT == false
wt_old = $game_party.weight_item(equips[slot_id])
wt_new = $game_party.weight_item(item)
wt_clc = $game_party.weight_sum + wt_old - wt_new
# wt_clc: 現在の重さ + 外す装備品の重さ - これから装備する物の重さ
if wt_clc > $game_variables[MOO_HAVE_ITEM_WEIGHT::MAX_WT]
Sound.play_buzzer
return
end
end
moo_change_equip(slot_id, item)
end
#--------------------------------------------------------------------------
# ● パーティとアイテムを交換する
# new_item : パーティから取り出すアイテム
# old_item : パーティに返すアイテム
#--------------------------------------------------------------------------
alias moo_trade_item_with_party trade_item_with_party
def trade_item_with_party(new_item, old_item)
return false if new_item && !$game_party.has_item?(new_item)
# 入手と破棄を逆転
$game_party.lose_item(new_item, 1)
$game_party.gain_item(old_item, 1)
return true
end
end
#==============================================================================
# ■ Game_Interpreter
#------------------------------------------------------------------------------
# イベントコマンドを実行するインタプリタです。このクラスは Game_Map クラス、
# Game_Troop クラス、Game_Event クラスの内部で使用されます。
#==============================================================================
class Game_Interpreter
#--------------------------------------------------------------------------
# ● アイテムの増減
#--------------------------------------------------------------------------
def command_126
value = operate_value(@params[1], @params[2], @params[3])
if $game_party.gain_item_failed?($data_items[@params[0]], value)
$game_party.moo_gain_item($data_items[@params[0]], value)
end
end
#--------------------------------------------------------------------------
# ● 武器の増減
#--------------------------------------------------------------------------
def command_127
value = operate_value(@params[1], @params[2], @params[3])
if $game_party.gain_item_failed?($data_weapons[@params[0]], value)
$game_party.moo_gain_item($data_weapons[@params[0]], value, @params[4])
end
end
#--------------------------------------------------------------------------
# ● 防具の増減
#--------------------------------------------------------------------------
def command_128
value = operate_value(@params[1], @params[2], @params[3])
if $game_party.gain_item_failed?($data_armors[@params[0]], value)
$game_party.moo_gain_item($data_armors[@params[0]], value, @params[4])
end
end
#--------------------------------------------------------------------------
# ○ 所持品を追加できるかの判断
# kind : アイテム種類(/[IWA]/)
# id : アイテムID
# num : 入手する個数
# val : 入手可能かどうかを代入するスイッチ番号(使わない場合は0を指定)
# gain : 入手処理もついでに行なうか(省略時は行なわない)
#--------------------------------------------------------------------------
def can_gain_item?(kind, id, num = 1, val = 0, gain = false)
# アイテム変数初期値
item = nil
# アイテム種類分別
case kind
when "I"; item = $data_items[id]
when "W"; item = $data_weapons[id]
when "A"; item = $data_armors[id]
end
# 重量による取得可能チェック
flg1 = $game_party.gain_item_failed?(item, num)
# 数量による取得可能チェック
flg2 = $game_party.gain_item_max?(item, num)
# 重量か数量いずれかで取得不能判定があった場合のフラグ
flg = true
flg = false if flg1 == false or flg2 == false
# 取得可能であり取得フラグが立っていたら取得
$game_party.moo_gain_item(item, num) if flg and gain
# スイッチに値を返す
$game_switches[val] = flg if val > 0 and val != nil
# 値を返す
return flg
end
#--------------------------------------------------------------------------
# ○ 所持品の総重量を取得
#--------------------------------------------------------------------------
def get_weight_sum
$game_party.weight_sum
end
end
#==============================================================================
# ■ Window_ItemCategory
#------------------------------------------------------------------------------
# アイテム画面またはショップ画面で、通常アイテムや装備品の分類を選択するウィ
# ンドウです。
#==============================================================================
class Window_ItemCategory < Window_HorzCommand
#--------------------------------------------------------------------------
# ● ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width
Graphics.width - 160
end
end
#==============================================================================
# ■ Window_ItemList
#------------------------------------------------------------------------------
# アイテム画面で、所持アイテムの一覧を表示するウィンドウです。
#==============================================================================
class Window_ItemList < Window_Selectable
#--------------------------------------------------------------------------
# ● アイテムの個数を描画
#--------------------------------------------------------------------------
def draw_item_number(rect, item)
$game_party.weight_sum
# カッコ書きの重量文字列を取得
wt = $game_party.weight_item_draw(item)
# 数量の後に重量を追加
draw_text(rect, sprintf(":%2d", $game_party.item_number(item)) + wt, 2)
end
end
#==============================================================================
# ■ Window_ShopBuy
#------------------------------------------------------------------------------
# ショップ画面で、購入できる商品の一覧を表示するウィンドウです。
#==============================================================================
class Window_ShopBuy
# include MOO_GENERAL_MODULE
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(x, y, height, shop_goods)
super(x, y, window_width, height)
@shop_goods = shop_goods
[url=home.php?mod=space&uid=26101]@Money[/url] = 0
end
#--------------------------------------------------------------------------
# ● 商品の値段を取得
#--------------------------------------------------------------------------
def price(item)
if MOO_HAVE_ITEM_WEIGHT::USE_RATE
return Integer(@price[item] * $game_variables[MOO_HAVE_ITEM_WEIGHT::BUY_RATE] / 100)
else
return @price[item]
end
end
#--------------------------------------------------------------------------
# ● アイテムリストの作成
#--------------------------------------------------------------------------
def make_item_list
@data = []
@price = {}
@shop_goods.each do |goods|
case goods[0]
when 0; item = $data_items[goods[1]]
when 1; item = $data_weapons[goods[1]]
when 2; item = $data_armors[goods[1]]
end
if item
@data.push(item)
@price[item] = goods[2] == 0 ? item.price : goods[3]
end
end
end
#--------------------------------------------------------------------------
# ● 項目の描画
#--------------------------------------------------------------------------
def draw_item(index)
item = @data[index]
rect = item_rect(index)
draw_item_name(item, rect.x, rect.y, enable?(item))
rect.width -= 4
# wt = $game_party.weight_item(item)
# wt = wt.to_s
# wt = bury_plus(wt, MOO_HAVE_ITEM_WEIGHT::FIGURE_WT, " ", 1)
# wt = MOO_HAVE_ITEM_WEIGHT::PARENTHESIS_F + wt + MOO_HAVE_ITEM_WEIGHT::PARENTHESIS_L
# draw_text(rect, price(item).to_s + wt, 2)
draw_text(rect, price(item), 2)
end
end
#==============================================================================
# ■ Window_ShopSell
#------------------------------------------------------------------------------
# ショップ画面で、売却のために所持アイテムの一覧を表示するウィンドウです。
#==============================================================================
class Window_ShopSell
#--------------------------------------------------------------------------
# ○ 桁数の取得
#--------------------------------------------------------------------------
def col_max
return 1
end
#--------------------------------------------------------------------------
# ○ 項目の描画
#--------------------------------------------------------------------------
def draw_item(index)
item = @data[index]
rect = item_rect(index)
draw_item_name(item, rect.x, rect.y, enable?(item))
rect.width -= 4
draw_text(rect, price(item), 2)
end
#--------------------------------------------------------------------------
# ◎ アイテムを許可状態で表示するかどうか
#--------------------------------------------------------------------------
alias moo_weight_enable? enable?
def enable?(item)
flg = $data_items[item.id].note.include?("<" + MOO_HAVE_ITEM_WEIGHT::CANT_SELL + ">") if item.class == RPG::Item
flg = $data_weapons[item.id].note.include?("<" + MOO_HAVE_ITEM_WEIGHT::CANT_SELL + ">") if item.class == RPG::Weapon
flg = $data_armors[item.id].note.include?("<" + MOO_HAVE_ITEM_WEIGHT::CANT_SELL + ">") if item.class == RPG::Armor
return false if flg
moo_weight_enable?(item)
end
#--------------------------------------------------------------------------
# ○ 商品の値段を取得
#--------------------------------------------------------------------------
def price(item)
if MOO_HAVE_ITEM_WEIGHT::USE_RATE
return Integer(item.price * $game_variables[MOO_HAVE_ITEM_WEIGHT::SELL_RATE] / 100)
else
return item.price
end
end
end
#==============================================================================
# ■ Window_ShopNumber
#------------------------------------------------------------------------------
# ショップ画面で、購入または売却するアイテムの個数を入力するウィンドウです。
#==============================================================================
class Window_ShopNumber < Window_Selectable
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
contents.clear
draw_item_name(@item, 0, item_y)
draw_number
draw_total_price
draw_total_weight(@item)
end
#--------------------------------------------------------------------------
# ○ 個数の総重量の描画
#--------------------------------------------------------------------------
def draw_total_weight(item)
width = contents_width - 8
cx = text_size(@currency_unit).width
change_color(system_color)
x_plus = 4
if MOO_GENERAL_MODULE::WINDOW_SIZE == 1
y_plus = 36
elsif MOO_GENERAL_MODULE::WINDOW_SIZE == 2
y_plus = 72
end
wd = MOO_HAVE_ITEM_WEIGHT::SUM_WEIGHT_WORD
draw_text(4, y + 24 + y_plus, width, line_height, wd)
change_color(normal_color)
cn = 1
cn = @number if MOO_HAVE_ITEM_WEIGHT::UNIT_WT
wt = $game_party.weight_item(item) * cn #@number
draw_text(x - cx - 2 + x_plus, y + 24 + y_plus, width, line_height, wt, 2)
end
end
#==============================================================================
# ■ Window_ShopStatus
#------------------------------------------------------------------------------
# ショップ画面で、アイテムの所持数やアクターの装備を表示するウィンドウです。
#==============================================================================
class Window_ShopStatus < Window_Base
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
contents.clear
draw_possession(4, 0)
draw_weight_possession(4, 24)
y_plus = 0
y_plus = 24 if MOO_GENERAL_MODULE::WINDOW_SIZE == 2
draw_equip_info(4, line_height * 2 + y_plus) if @item.is_a?(RPG::EquipItem)
end
#--------------------------------------------------------------------------
# ○ 総重量の描画
#--------------------------------------------------------------------------
def draw_weight_possession(x, y)
rect = Rect.new(x, y, contents.width - 4 - x, line_height)
change_color(system_color)
draw_text(rect, MOO_HAVE_ITEM_WEIGHT::SUM_WEIGHT_WORD)
change_color(normal_color)
str = $game_party.weight_sum.to_s + "/" + $game_variables[MOO_HAVE_ITEM_WEIGHT::MAX_WT].to_s
draw_text(rect, str, 2)
end
end
#==============================================================================
# ■ Window_Weight_Sum_Menu
#------------------------------------------------------------------------------
# メニューウィンドウで総重量を表示するクラスです。
#==============================================================================
class Window_Weight_Sum_Menu < Window_Base
#--------------------------------------------------------------------------
# ○ オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(x, y, width, height)
super(x, y, width, height)
refresh
end
#--------------------------------------------------------------------------
# ○ リフレッシュ
#--------------------------------------------------------------------------
def refresh
contents.clear
rect = Rect.new(0, 0, width - 28, line_height)
change_color(system_color)
draw_text(rect, MOO_HAVE_ITEM_WEIGHT::SUM_WEIGHT_WORD)
change_color(normal_color)
str = $game_party.weight_sum.to_s + "/" + $game_variables[MOO_HAVE_ITEM_WEIGHT::MAX_WT].to_s
draw_text(rect, str, 2)
end
end
#==============================================================================
# ■ Window_Weight_Sum_item
#------------------------------------------------------------------------------
# アイテム一覧で総重量を表示するクラスです。
#==============================================================================
class Window_Weight_Sum_item < Window_ItemList
#--------------------------------------------------------------------------
# ○ オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(x, y, width, height)
super(x, y, width, height)
refresh
end
#--------------------------------------------------------------------------
# ○ リフレッシュ
#--------------------------------------------------------------------------
def refresh
contents.clear
rect = Rect.new(0, 0, width - 28, line_height)
change_color(system_color)
draw_text(rect, MOO_HAVE_ITEM_WEIGHT::SUM_WEIGHT_WORD)
change_color(normal_color)
str = $game_party.weight_sum.to_s + "/" + $game_variables[MOO_HAVE_ITEM_WEIGHT::MAX_WT].to_s
draw_text(rect, str, 2)
end
end
#==============================================================================
# ■ Window_Weight_Sum_Shop
#------------------------------------------------------------------------------
# ショップの売却画面で総重量を表示するクラスです。
#==============================================================================
class Window_Weight_Sum_Shop < Window_ItemList
#--------------------------------------------------------------------------
# ○ オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(x, y, width, height)
super(x, y, width, height)
refresh
end
#--------------------------------------------------------------------------
# ○ リフレッシュ
#--------------------------------------------------------------------------
def refresh
contents.clear
rect = Rect.new(0, 0, width - 28, line_height)
change_color(system_color)
draw_text(rect, MOO_HAVE_ITEM_WEIGHT::SUM_WEIGHT_WORD)
change_color(normal_color)
str = $game_party.weight_sum.to_s + "/" + $game_variables[MOO_HAVE_ITEM_WEIGHT::MAX_WT].to_s
draw_text(rect, str, 2)
end
end
#==============================================================================
# ■ Scene_Menu
#------------------------------------------------------------------------------
# メニュー画面の処理を行うクラスです。
#==============================================================================
class Scene_Menu < Scene_MenuBase
include MOO_GENERAL_MODULE
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
def start
super
create_command_window
create_gold_window
create_status_window
@wt_x = 0
@wt_y = Graphics.height - @gold_window.height - weight_item_window_h
@wt_w = weight_item_window_w
@wt_h = @gold_window.height
create_weight_sum_window(@wt_x, @wt_y, @wt_w, @wt_h)
end
#--------------------------------------------------------------------------
# ○ 総重量ウィンドウの作成
#--------------------------------------------------------------------------
def create_weight_sum_window(x, y, width, height)
@weight_sum_window = Window_Weight_Sum_Menu.new(x, y, width, height)
@weight_sum_window.viewport = @viewport
end
end
#==============================================================================
# ■ Scene_Item
#------------------------------------------------------------------------------
# アイテム画面の処理を行うクラスです。
#==============================================================================
class Scene_Item < Scene_ItemBase
include MOO_GENERAL_MODULE
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
def start
super
create_help_window
create_category_window
create_item_window
@wt_x = weight_item_window_x
@wt_y = weight_item_window_y
@wt_w = weight_item_window_w
@wt_h = weight_item_window_h
create_weight_sum_window(@wt_x, @wt_y, @wt_w, @wt_h)
end
#--------------------------------------------------------------------------
# ○ 総重量ウィンドウの作成
#--------------------------------------------------------------------------
def create_weight_sum_window(x, y, width, height)
@weight_sum_window = Window_Weight_Sum_item.new(x, y, width, height)
@weight_sum_window.viewport = @viewport
@weight_sum_window.y = @help_window.height
end
#--------------------------------------------------------------------------
# ● アイテムの使用
#--------------------------------------------------------------------------
def use_item
super
@item_window.redraw_current_item
@weight_sum_window.refresh
end
end
#==============================================================================
# ■ Scene_Shop
#------------------------------------------------------------------------------
# ショップ画面の処理を行うクラスです。
#==============================================================================
class Scene_Shop < Scene_MenuBase
include MOO_GENERAL_MODULE
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
def start
super
create_help_window
create_gold_window
create_command_window
create_dummy_window
create_category_window
create_number_window
create_status_window
create_buy_window
@wt_x = weight_item_window_x
@wt_y = weight_item_window_y + 48
@wt_w = weight_item_window_w
@wt_h = weight_item_window_h
create_weight_sum_window(@wt_x, @wt_y, @wt_w, @wt_h)
create_sell_window
end
#--------------------------------------------------------------------------
# ○ 総重量ウィンドウの作成
#--------------------------------------------------------------------------
def create_weight_sum_window(x, y, width, height)
@weight_sum_window = Window_Weight_Sum_Shop.new(x, y, width, height)
@weight_sum_window.viewport = @viewport
@weight_sum_window.y = @help_window.height
@weight_sum_window.y = @dummy_window.y
@weight_sum_window.hide.deactivate
end
#--------------------------------------------------------------------------
# ● 個数入力[決定]
#--------------------------------------------------------------------------
def on_number_ok
case @command_window.current_symbol
when :buy
do_buy(@number_window.number)
@weight_sum_window.refresh
@weight_sum_window.hide
when :sell
do_sell(@number_window.number)
@weight_sum_window.refresh
end
end_number_input
@gold_window.refresh
@status_window.refresh
end
#--------------------------------------------------------------------------
# ● 購入の実行
#--------------------------------------------------------------------------
def do_buy(number)
if $game_party.gain_item_failed?(@item, number) == false
Sound.play_buzzer
return
end
Sound.play_shop
$game_party.lose_gold(number * buying_price)
$game_party.moo_gain_item(@item, number)
end
#--------------------------------------------------------------------------
# ● 売却ウィンドウのアクティブ化
#--------------------------------------------------------------------------
def activate_sell_window
@category_window.show
@weight_sum_window.show
@sell_window.refresh
@sell_window.show.activate
@status_window.hide
end
#--------------------------------------------------------------------------
# ● 購入ウィンドウのアクティブ化
#--------------------------------------------------------------------------
def activate_buy_window
@buy_window.money = money
@buy_window.show.activate
@status_window.show
end
#--------------------------------------------------------------------------
# ● コマンド[購入する]
#--------------------------------------------------------------------------
def command_buy
@dummy_window.hide
activate_buy_window
@buy_window.select(0)
@buy_window.refresh
end
#--------------------------------------------------------------------------
# ● コマンド[売却する]
#--------------------------------------------------------------------------
def command_sell
@dummy_window.hide
@category_window.show.activate
@weight_sum_window.show
@sell_window.show
@sell_window.unselect
@sell_window.refresh
@weight_sum_window.show
end
#--------------------------------------------------------------------------
# ● カテゴリ[キャンセル]
#--------------------------------------------------------------------------
def on_category_cancel
@command_window.activate
@dummy_window.show
@category_window.hide
@weight_sum_window.hide
@sell_window.hide
end
#--------------------------------------------------------------------------
# ● 売却[決定]
#--------------------------------------------------------------------------
def on_sell_ok
@item = @sell_window.item
@status_window.item = @item
@category_window.hide
@weight_sum_window.hide
@sell_window.hide
@number_window.set(@item, max_sell, selling_price, currency_unit)
@number_window.show.activate
@status_window.show
end
#--------------------------------------------------------------------------
# ● 売却[キャンセル]
#--------------------------------------------------------------------------
def on_sell_cancel
@sell_window.unselect
@category_window.activate
@weight_sum_window.activate
@status_window.item = nil
@help_window.clear
end
#--------------------------------------------------------------------------
# ● 売却の実行
#--------------------------------------------------------------------------
def do_sell(number)
Sound.play_shop
$game_party.gain_gold(number * selling_price)
$game_party.lose_item(@item, number)
end
#--------------------------------------------------------------------------
# ● 売値の取得
#--------------------------------------------------------------------------
def selling_price
@sell_window.price(@item)
end
end