#============================================================================== # ■ 重量制 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 @money = 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