查看: 1896|回复: 2

[已经解决] 如何设置一个储存东西的存放点?

[复制链接]
梦石
0
星屑
50
在线时间
11 小时
注册时间
2014-7-15
回帖
13
发表于 2014-7-23 15:31:37 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
如何设置存放东西的宝箱之类的,可以存放武器,道具,药剂,金钱,
如何限制背包和箱子存放的数量?求版主大大回答~

无限の剣制

梦石
0
星屑
10445
在线时间
5019 小时
注册时间
2013-2-28
回帖
4942

开拓者贵宾

发表于 2014-7-23 15:33:25 | 显示全部楼层
本帖最后由 VIPArcher 于 2014-7-23 15:49 编辑

限制负重
仓库脚本#使用方法看注释,谷歌翻译一下基本都能懂
#呼出仓库SceneManager.call(Scene_Item_Keep)[pre lang="ruby" line="1"]
#==============================================================================
# ■ RGSS3 アイテム預かり所 Ver1.01 by 星潟
#------------------------------------------------------------------------------
# アイテムを預ける事が出来るようになります。
# 莫大な数のアイテムが登場する作品におすすめです。
#
# 最大所持数を越える量のアイテムを引き出せないようにする機能や
# 預けられないアイテムの作成、預けられる数の限界設定の他、
# アイテムの預かり・引き出しに関わるイベントコマンドをいくつか実装します。
#
# アイテム・武器・防具のメモ欄に以下のように書き込む事で
# それぞれ特殊な設定が行われます。
#
# <保存禁止>……このアイテムは預かり所で預ける事が出来ません。
#
# <保存制限:20>……このアイテムは預かり所にも20個までしか預ける事が出来ません。
#
# 以下、イベントコマンドです。(全て、スクリプトを用います)
#
# SceneManager.call(Scene_Item_Keep)
# アイテム預かり所画面を呼び出します。
#
# item_keep_all(data_a)
# data_aが0の時……預けられるアイテムを預けられるだけ預けます。
# data_aが1の時……アイテムを全て引き出せるだけ引き出します。
#
# weapon_keep_all(data_a)
# data_aが0の時……預けられる武器を預けられるだけ預けます。
# data_aが1の時……武器を全て引き出せるだけ引き出します。
#
# armor_keep_all(data_a)
# data_aが0の時……預けられる防具を預けられるだけ預けます。
# data_aが1の時……防具を全て引き出せるだけ引き出します。
#
# item_keep(data_a, data_b)
# data_aが0の時……data_bで指定したIDのアイテムを預けられるだけ預けます。
# data_aが1の時……data_bで指定したIDのアイテムを引き出せるだけ引き出します。
#
# weapon_keep(data_a, data_b)
# data_aが0の時……data_bで指定したIDの武器を預けられるだけ預けます。
# data_aが1の時……data_bで指定したIDの武器を引き出せるだけ引き出します。
#
# armor_keep(data_a, data_b)
# data_aが0の時……data_bで指定したIDの防具を預けられるだけ預けます。
# data_aが1の時……data_bで指定したIDの防具を引き出せるだけ引き出します。
#
# word_keep_all(data_a, data_b)
#
# data_aが0の時……
# data_bで指定した言葉がメモ欄に含まれる
# アイテム・武器・防具を預けられるだけ預けます。
#
# data_aが1の時……
# data_bで指定した言葉がメモ欄に含まれる
# アイテム・武器・防具を引き出せるだけ引き出します。
#
# word_keep_allで、data_bで設定する言葉は、前後を""で囲んでください。
# 【例.word_keep_all(1, "回復")】
# この場合、回復という言葉をメモ欄に含んだアイテム・武器・防具を
# 預かり所から全て引き出します。
#------------------------------------------------------------------------------
# Ver1.01 導入前のセーブデータを使用した場合に正常に機能しなくなる不具合を修正。
#         軽量化スクリプトと統合し、軽量化モード切替機能を追加。
#         説明ウィンドウ機能を追加。
#==============================================================================
module ITEM_KEEPER

  #保存禁止アイテムについて、預かり所で表示しないようにするかを設定できます。
  #true 表示しない false 表示する

  UNVISIBLE = false

  #保存禁止アイテムについて、預かり所で表示しないようにするかを設定できます。
  #true 表示しない false 表示する

  WORD1     = "保存禁止"

  #保存に個数制限を設ける為の設定用キーワードです。

  WORD2     = "保存制限"

  #保存制限のないアイテムについていくつまで預けられるかを設定します。

  LIMIT     = 999

  #説明ウィンドウを表示するかどうかを設定します。

  DESCRIPT  = true

  #数量ウィンドウと説明ウィンドウの背景透明度を変更します。

  B_OPACITY = 255

  #軽量化フラグ。

  FLAG      = true

  #説明ウィンドウに表示する項目を設定します。
  #(基本的にこの部分を変更する必要はありません)

  D         = [
  ["下キー",":1個引き出す"],
  ["上キー",":1個預ける"],
  ["左キー",":10個引き出す"],
  ["右キー",":10個預ける"],
  ["CTRLキー",":100個引き出す"],
  ["SHIFTキー",":100個預ける"]
  ]

end
class RPG::BaseItem
  #--------------------------------------------------------------------------
  # 最大保管数を取得
  #--------------------------------------------------------------------------
  def max_item_keep_number

    #キャッシュが存在する場合はキャッシュを返す。

    return @max_item_keep_number if @max_item_keep_number != nil

    #メモ欄からデータを取得し、取得できない場合はデフォルト数を返す。

    memo = self.note.scan(/<#{ITEM_KEEPER::WORD2}[::](\S+)>/).flatten
    @max_item_keep_number = memo != nil && !memo.empty? ? memo[0].to_i : ITEM_KEEPER::LIMIT

    #データを返す。

    @max_item_keep_number
  end
end
class Game_Party < Game_Unit
  #--------------------------------------------------------------------------
  # オブジェクト初期化
  #--------------------------------------------------------------------------
  alias initialize_ik initialize
  def initialize

    #本来の処理を実行。

    initialize_ik

    #パーティー外全アイテムリストを初期化。

    init_all_items_ik
  end
  #--------------------------------------------------------------------------
  # パーティー外全アイテムリストの初期化(強制)
  #--------------------------------------------------------------------------
  def init_all_items_ik

    #それぞれ、空のハッシュを生成。

    @items_k = {}
    @weapons_k = {}
    @armors_k = {}
  end
  #--------------------------------------------------------------------------
  # パーティー外全アイテムリストの初期化(nilの場合)
  #--------------------------------------------------------------------------
  def init_all_items_ik_un_nil

    #それぞれ、存在しない場合のみハッシュを生成。

    @items_k = {} if @items_k == nil
    @weapons_k = {} if @weapons_k == nil
    @armors_k = {} if @armors_k == nil
  end
  #--------------------------------------------------------------------------
  # アイテムの最大保管数取得
  #--------------------------------------------------------------------------
  def max_item_keep_number(item)

    #アイテムが存在しない場合はfalseを返す。

    return false if item == nil

    #アイテムの最大保管数を返す。

    item.max_item_keep_number
  end
  #--------------------------------------------------------------------------
  # アイテムの保管数取得
  #--------------------------------------------------------------------------
  def item_keep_number(item)

    #コンテナを取得。

    container = item_keep_container(item.class)

    #コンテナにデータが存在しない場合は0を返す。

    container ? container[item.id] || 0 : 0
  end
  #--------------------------------------------------------------------------
  # アイテムの保管
  #--------------------------------------------------------------------------
  def item_keep(item, number, get = false)

    #数量データを取得。

    number_data = number

    #アイテム保管を実行。

    item_keep_execute(item, number_data)

    #所持アイテムを減らす。

    gain_item(item, -number_data) if get == false
  end
  #--------------------------------------------------------------------------
  # 預けているアイテムのクラスに対応するコンテナオブジェクトを取得
  #--------------------------------------------------------------------------
  def item_keep_container(item_class)

    #アイテムの種類に応じてコンテナを取得。

    return @items_k   if item_class == RPG::Item
    return @weapons_k if item_class == RPG::Weapon
    return @armors_k  if item_class == RPG::Armor
    return nil
  end
  #--------------------------------------------------------------------------
  # アイテムの増加(減少)
  #--------------------------------------------------------------------------
  def item_keep_execute(item, amount)

    #コンテナを取得。

    container = item_keep_container(item.class)

    #コンテナが存在しない場合は処理をしない。

    return if container == nil

    #処理前の保管数を取得。

    last_number = item_keep_number(item)

    #処理後の保管数を取得。

    new_number = last_number + amount

    #保管数を変更する。

    container[item.id] = new_number

    #保管数が0となった場合はハッシュから削除する。

    container.delete(item.id) if container[item.id] == 0

    #マップのリフレッシュフラグを立てる。

    $game_map.need_refresh = true
  end
end
class Scene_Item_Keep < Scene_Item
  #--------------------------------------------------------------------------
  # 開始処理
  #--------------------------------------------------------------------------
  def start

    #コンテナが存在しない場合はコンテナを生成する。

    $game_party.init_all_items_ik_un_nil

    #スーパークラスの処理を実行。

    super

    #説明ウィンドウの作成

    create_description_window

    #個数入力ウィンドウの作成

    create_number_window
  end
  #--------------------------------------------------------------------------
  # カテゴリウィンドウの作成
  #--------------------------------------------------------------------------
  def create_category_window
    @category_window = Window_ItemCategory.new
    @category_window.viewport = @viewport
    @category_window.help_window = @help_window
    @category_window.y = @help_window.height
    @category_window.set_handler(:ok,     method(:on_category_ok))
    @category_window.set_handler(:cancel, method(:return_scene))
  end
  #--------------------------------------------------------------------------
  # アイテムウィンドウの作成
  #--------------------------------------------------------------------------
  def create_item_window
    wy = @category_window.y + @category_window.height
    wh = Graphics.height - wy
    @item_window = Window_PTItemList.new(0, wy, Graphics.width, wh)
    @item_window.viewport = @viewport
    @item_window.help_window = @help_window
    @item_window.set_handler(:ok,     method(:on_item_ok))
    @item_window.set_handler(:cancel, method(:on_item_cancel))
    @category_window.item_window = @item_window
  end
  #--------------------------------------------------------------------------
  # 説明ウィンドウの作成
  #--------------------------------------------------------------------------
  def create_description_window

    #説明ウィンドウを作成しない場合は処理を行わない。

    return unless ITEM_KEEPER::DESCRIPT

    @description_window = Window_IKDescription.new
    @description_window.z = 100
    @description_window.viewport = @viewport
  end
  #--------------------------------------------------------------------------
  # 個数入力ウィンドウの作成
  #--------------------------------------------------------------------------
  def create_number_window
    @number_window = Window_IKInput.new
    @number_window.z = 100
    @number_window.item_window = @item_window
    @number_window.description_window = @description_window if ITEM_KEEPER::DESCRIPT
    @number_window.viewport = @viewport
  end
  #--------------------------------------------------------------------------
  # カテゴリ[決定]
  #--------------------------------------------------------------------------
  def on_category_ok
    @item_window.activate
    @item_window.select_last
    @category_window.deactivate
  end
  #--------------------------------------------------------------------------
  # アイテム[決定]
  #--------------------------------------------------------------------------
  def on_item_ok
    $game_party.last_item.object = item
    item == nil ? @item_window.activate : determine_item
  end
  #--------------------------------------------------------------------------
  # アイテムの決定
  #--------------------------------------------------------------------------
  def determine_item
    @number_window.number = 0
    item = @item_window.item
    @number_window.show
    @number_window.refresh
    @description_window.show if ITEM_KEEPER::DESCRIPT
    @item_window.deactivate
  end
  #--------------------------------------------------------------------------
  # アイテム[キャンセル]
  #--------------------------------------------------------------------------
  def on_item_cancel
    @item_window.unselect
    @category_window.activate
  end
end
#==============================================================================
# ■ Window_PTItemList
#------------------------------------------------------------------------------
#  アイテム画面で、所持アイテムの一覧を表示するウィンドウです。
#==============================================================================

class Window_PTItemList < Window_ItemList
  #--------------------------------------------------------------------------
  # アイテムをリストに含めるかどうか
  #--------------------------------------------------------------------------
  alias include_ik? include?
  def include?(item)

    #アイテムが存在しない場合、ウィンドウが不可視の場合
    #保管禁止アイテムを非表示にする場合は表示しない。

    return false if item == nil
    return false if self.visible == false
    return false if ITEM_KEEPER::UNVISIBLE == true && item.note.include?("<" + ITEM_KEEPER::WORD1 + ">")

    #本来の処理を実行。

    include_ik?(item)
  end
  #--------------------------------------------------------------------------
  # アイテムを許可状態で表示するかどうか
  #--------------------------------------------------------------------------
  def enable?(item)

    #アイテムが存在しない場合、もしくは保管禁止アイテムの場合はfalseを返す。

    return false if item == nil
    return false if item.note.include?("<" + ITEM_KEEPER::WORD1 + ">")
    return true
  end
  #--------------------------------------------------------------------------
  # アイテムリストの作成
  #--------------------------------------------------------------------------
  def make_item_list

    #全ての中から、所持アイテムか倉庫アイテムとして存在する物のみ取得する。

    item_data = $data_items + $data_weapons + $data_armors
    @data = item_data.select {|item| include?(item) && ($game_party.item_number(item) > 0 or $game_party.item_keep_number(item) > 0)}
    @data.push(nil) if include?(nil)
  end
  #--------------------------------------------------------------------------
  # 選択項目の有効状態を取得
  #--------------------------------------------------------------------------
  def current_item_enabled?
    enable?(@data[index])
  end
  #--------------------------------------------------------------------------
  # 桁数の取得
  #--------------------------------------------------------------------------
  def col_max
    return 1
  end
  #--------------------------------------------------------------------------
  # フレーム更新
  #--------------------------------------------------------------------------
  def update
    super
  end
  #--------------------------------------------------------------------------
  # 項目の描画
  #--------------------------------------------------------------------------
  def draw_item(index, flag = false)

    #データからアイテムを取得し、各種データを記述する。

    item = @data[index]

    #アイテムが存在しない場合は処理を行わない。

    return unless item

    rect = item_rect(index)
    contents.clear_rect(rect) if flag
    rect.width -= 4
    draw_item_name(item, rect.x, rect.y, enable?(item))
    change_color(text_color(5))
    draw_text(180, rect.y, 100, line_height, "所持", 2)
    change_color(text_color(0))
    draw_text(220, rect.y, 100, line_height, $game_party.item_number(item), 2)
    draw_text(240, rect.y, 100, line_height,"/", 2)
    draw_text(270, rect.y, 100, line_height, $game_party.max_item_number(item), 2)
    change_color(text_color(5))
    draw_text(330, rect.y, 100, line_height, "倉庫", 2)
    change_color(text_color(0))
    draw_text(370, rect.y, 100, line_height, $game_party.item_keep_number(item), 2)
    draw_text(390, rect.y, 100, line_height, "/", 2)
    draw_text(420, rect.y, 100, line_height, $game_party.max_item_keep_number(item), 2)

  end
end
class Window_IKInput < Window_Selectable
  #--------------------------------------------------------------------------
  # 公開インスタンス変数
  #--------------------------------------------------------------------------
  attr_accessor   :item_window
  attr_accessor   :number
  attr_accessor   :description_window
  #--------------------------------------------------------------------------
  # オブジェクト初期化
  #--------------------------------------------------------------------------
  def initialize

    #ウィンドウを生成する。

    super(Graphics.width / 2 - 122, Graphics.height / 2 - 50, 244, 100)

    #設定に応じて背景透明度を変更する。

    self.back_opacity = ITEM_KEEPER::B_OPACITY

    #一旦隠す。

    hide

    #非アクティブにする。

    deactivate
  end
  #--------------------------------------------------------------------------
  # 数字の変更処理
  #--------------------------------------------------------------------------
  def update

    #見えない場合は更新しない。

    return unless self.visible

    #入力関連の各種処理を実行。

    if Input.press?(:UP) or Input.press?(:DOWN) or Input.press?(:RIGHT) or Input.press?(:LEFT) or Input.press?(Input::SHIFT) or Input.press?(Input::CTRL)
      if Input.press?(Input::SHIFT)   #100個預ける
        keep_exe(@item_window.item, 100)
      elsif Input.press?(Input::CTRL) #100個引き出す
        get_exe(@item_window.item, 100)
      elsif Input.repeat?(:RIGHT)     #10個預ける
        keep_exe(@item_window.item, 10)
      elsif Input.repeat?(:LEFT)      #10個引き出す
        get_exe(@item_window.item, 10)
      elsif Input.repeat?(:UP)        #1個預ける
        keep_exe(@item_window.item, 1)
      elsif Input.repeat?(:DOWN)      #1個引き出す
        get_exe(@item_window.item, 1)
      end
      refresh_number
    end
    if Input.trigger?(:C)

      #決定音を鳴らす。

      Sound.play_ok

      #数に応じてアイテム数を変更。

      $game_party.item_keep(@item_window.item, @number)

      #ウィンドウを隠す。

      self.hide

      #ウィンドウを非アクティブにする。

      self.deactivate

      #説明ウィンドウが存在する場合、説明ウィンドウを隠す。

      @description_window.hide if ITEM_KEEPER::DESCRIPT

      #条件に応じてアイテムウィンドウを変更する。

      ITEM_KEEPER::FLAG ? @item_window.draw_item(@item_window.index, true) : @item_window.refresh

      #アイテムウィンドウをアクティブにする。

      @item_window.activate
    elsif Input.trigger?(:B)

      #決定音を鳴らす。

      Sound.play_cancel

      #ウィンドウを隠す。

      self.hide

      #ウィンドウを非アクティブにする。

      self.deactivate

      #説明ウィンドウが存在する場合、説明ウィンドウを隠す。

      @description_window.hide if ITEM_KEEPER::DESCRIPT

      #アイテムウィンドウをアクティブにする。

      @item_window.activate

    end
  end
  #--------------------------------------------------------------------------
  # 預けられる限界をチェック
  #--------------------------------------------------------------------------
  def limitcheck1

    #所持数が既に0、もしくは預ける限界に達している場合はfalseを返す。

    return false if $game_party.item_number(@item_window.item) - @Number == 0
    return false if $game_party.item_keep_number(@item_window.item) + @Number == $game_party.max_item_keep_number(@item_window.item)
    return true
  end
  #--------------------------------------------------------------------------
  # 引き出せる限界をチェック
  #--------------------------------------------------------------------------
  def limitcheck2

    #所持数が既に限界に達している場合、もしくは預けている数が0の場合はfalseを返す。

    return false if $game_party.item_number(@item_window.item) - @Number == $game_party.max_item_number(@item_window.item)
    return false if $game_party.item_keep_number(@item_window.item) + @number == 0
    return true
  end
  #--------------------------------------------------------------------------
  # 預ける
  #--------------------------------------------------------------------------
  def keep_exe(item, amount)

    #数量分処理する。

    amount.times do
      @number += 1 if limitcheck1
    end
  end
  #--------------------------------------------------------------------------
  # 引き出す
  #--------------------------------------------------------------------------
  def get_exe(item, amount)

    #数量分処理する。

    amount.times do
      @number -= 1 if limitcheck2
    end
  end
  #--------------------------------------------------------------------------
  # リフレッシュ
  #--------------------------------------------------------------------------
  def refresh

    #不可視状態の場合はリフレッシュしない。

    return false unless self.visible

    #数量を更新する。

    @last_number = @number

    #ウィンドウの内容を消去する。

    contents.clear
    create_contents

    #アイテム名を描写。

    draw_item_name(@item_window.item, 0, 0)
    change_color(system_color)
    draw_text(0, line_height * 1, 80, line_height, "所持", 1)
    draw_text(self.contents.width - 80, line_height * 1, 80, line_height, "倉庫", 1)
    draw_text(0, line_height * 1, self.contents.width, line_height, "→", 1)
    draw_text(0, line_height * 2, self.contents.width, line_height, "←", 1)

    #所持数データを描写。

    $game_party.item_number(@item_window.item) + @number == $game_party.max_item_number(@item_window.item) ? change_color(text_color(3)) : change_color(normal_color)
    draw_text(0, line_height * 2, 80, line_height, $game_party.item_number(@item_window.item) - @number, 1)
    $game_party.item_keep_number(@item_window.item) + @number == $game_party.max_item_keep_number(@item_window.item) ? change_color(text_color(3)) : change_color(normal_color)
    draw_text(self.contents.width - 80, line_height * 2, 80, line_height, $game_party.item_keep_number(@item_window.item) + @number, 1)
  end
  #--------------------------------------------------------------------------
  # 数量のみリフレッシュ
  #--------------------------------------------------------------------------
  def refresh_number

    #不可視状態の場合はリフレッシュしない。

    return false unless self.visible

    #最後の数量と現在の数量が異なる場合は数量を更新する。

    if @last_number != @number
      Sound.play_cursor
      @last_number = @number
    end

    #ウィンドウの内容を消去する。

    contents.clear_rect(0, line_height * 2, 80, line_height)
    contents.clear_rect(self.contents.width - 80, line_height * 2, 80, line_height)

    #所持数データを描写。

    $game_party.item_number(@item_window.item) + @number == $game_party.max_item_number(@item_window.item) ? change_color(text_color(3)) : change_color(normal_color)
    draw_text(0, line_height * 2, 80, line_height, $game_party.item_number(@item_window.item) - @number, 1)
    $game_party.item_keep_number(@item_window.item) + @number == $game_party.max_item_keep_number(@item_window.item) ? change_color(text_color(3)) : change_color(normal_color)
    draw_text(self.contents.width - 80, line_height * 2, 80, line_height, $game_party.item_keep_number(@item_window.item) + @number, 1)
  end
end
class Window_IKDescription < Window_Base
  def initialize

    #ウィンドウを生成する。

    super(Graphics.width / 2 - 240, Graphics.height / 3 * 2, 480, 96)

    #設定に応じて背景透明度を変更する。

    self.back_opacity = ITEM_KEEPER::B_OPACITY

    #システムカラーで項目部分を描画する。

    change_color(system_color)

    draw_text(0, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[0][0], 0)
    draw_text(self.contents.width / 2, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[1][0], 0)
    draw_text(0, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[2][0], 0)
    draw_text(self.contents.width / 2, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[3][0], 0)
    draw_text(0, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[4][0], 0)
    draw_text(self.contents.width / 2, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[5][0], 0)

    #通常カラーで項目部分を描画する。

    change_color(normal_color)

    draw_text(90, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[0][1], 0)
    draw_text(self.contents.width / 2 + 90, 0, self.contents.width / 2, line_height, ITEM_KEEPER::D[1][1], 0)
    draw_text(90, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[2][1], 0)
    draw_text(self.contents.width / 2 + 90, line_height * 1, self.contents.width / 2, line_height, ITEM_KEEPER::D[3][1], 0)
    draw_text(90, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[4][1], 0)
    draw_text(self.contents.width / 2 + 90, line_height * 2, self.contents.width / 2, line_height, ITEM_KEEPER::D[5][1], 0)

    hide
  end
end
class Game_Interpreter
  #--------------------------------------------------------------------------
  # アイテムを全て預ける/引き出す
  #--------------------------------------------------------------------------
  def item_keep_all(data)

    #種類をアイテムとする。

    item_data = $data_items

    #共通処理を実行。

    common_keep_all(item_data, data)
  end
  #--------------------------------------------------------------------------
  # 武器を全て預ける/引き出す
  #--------------------------------------------------------------------------
  def weapon_keep_all(data)

    #種類を武器とする。

    item_data = $data_weapons

    #共通処理を実行。

    common_keep_all(item_data, data)
  end
  #--------------------------------------------------------------------------
  # 防具を全て預ける/引き出す
  #--------------------------------------------------------------------------
  def armor_keep_all(data)

    #種類を防具とする。

    item_data = $data_armors

    #共通処理を実行。

    common_keep_all(item_data, data)
  end
  #--------------------------------------------------------------------------
  # 全て預ける/引き出す場合の共通処理を実行
  #--------------------------------------------------------------------------
  def common_keep_all(item_data, data)

    #存在するオブジェクトの数分だけ処理。

    item_data.each do |i|

      #nilの場合は処理しない。

      next if i == nil

      #預けられないアイテムの場合は処理しない。

      next if i.note.include?("<" + ITEM_KEEPER::WORD1 + ">")

      #各種データを取得。

      data1 = $game_party.item_number(i)
      data2 = $game_party.max_item_number(i)
      data3 = $game_party.item_keep_number(i)
      data4 = $game_party.max_item_keep_number(i)

      #追加で所持できる数と、追加で預けられる数を計算。

      data5 = data4 - data3
      data6 = data2 - data1

      #処理内容に応じて、預ける場合と引き出す場合とをそれぞれ処理。

      amount = data == 0 ? (data5 < data1 ? data5 : data1) : (data6 < data3 ? -data6 : -data3)
      $game_party.item_keep(i, amount)

    end
  end
  #--------------------------------------------------------------------------
  # アイテムを一定個数預ける/引き出す
  #--------------------------------------------------------------------------
  def item_keep(data_a, data_b)

    #種類をアイテムとする。

    item_data = $data_items

    #共通処理を実行。

    common_keep(item_data, data_a, data_b)

  end
  #--------------------------------------------------------------------------
  # 武器を一定個数預ける/引き出す
  #--------------------------------------------------------------------------
  def weapon_keep(data_a, data_b)

    #種類を武器とする。

    item_data = $data_weapons

    #共通処理を実行。

    common_keep(item_data, data_a, data_b)

  end
  #--------------------------------------------------------------------------
  # 防具を一定個数預ける/引き出す
  #--------------------------------------------------------------------------
  def armor_keep(data_a, data_b)

    #種類を防具とする。

    item_data = $data_armors

    #共通処理を実行。

    common_keep(item_data, data_a, data_b)

  end
  #--------------------------------------------------------------------------
  # 一定個数預ける/引き出す場合の共通処理を実行します。
  #--------------------------------------------------------------------------
  def common_keep(item_data, data_a, data_b)

    #nilの場合は処理しない。

    return if item_data[data_b] == nil

    #預けられないアイテムの場合は処理しない。

    return if item_data[data_b].note.include?("<" + ITEM_KEEPER::WORD1 + ">")

    #各種データを取得。

    data1 = $game_party.item_number(item_data[data_b])
    data2 = $game_party.max_item_number(item_data[data_b])
    data3 = $game_party.item_keep_number(item_data[data_b])
    data4 = $game_party.max_item_keep_number(item_data[data_b])

    #追加で所持できる数と、追加で預けられる数を計算。

    data5 = data4 - data3
    data6 = data2 - data1

    #処理内容に応じて、預ける場合と引き出す場合とをそれぞれ処理。

    amount = data_a == 0 ? (data5 < data1 ? data5 : data1) : (data6 < data3 ? -data6 : -data3)
    $game_party.item_keep(item_data[data_b], amount)

  end
  #--------------------------------------------------------------------------
  # 特定ワードを含む単語を全て預ける/引き出す場合の処理を行う。
  #--------------------------------------------------------------------------
  def word_keep_all(data_a, data_b)

    #アイテム・武器・防具全てを含める配列を生成。

    item_data = $data_items + $data_weapons + $data_armors

    #存在するオブジェクトの数分だけ処理。

    item_data.each do |i|

      #nilの場合は処理しない。

      next if i == nil

      #預けられないアイテムの場合は処理しない。

      next if i.note.include?("<" + ITEM_KEEPER::WORD1 + ">")

      #指定されたワードがメモ欄に含まれていない場合は処理しない。

      next unless i.note.include?(data_b)

      #各種データを取得。

      data1 = $game_party.item_number(i)
      data2 = $game_party.max_item_number(i)
      data3 = $game_party.item_keep_number(i)
      data4 = $game_party.max_item_keep_number(i)

      #追加で所持できる数と、追加で預けられる数を計算。

      data5 = data4 - data3
      data6 = data2 - data1

      #処理内容に応じて、預ける場合と引き出す場合とをそれぞれ処理。

      amount = data_a == 0 ? (data5 < data1 ? data5 : data1) : (data6 < data3 ? -data6 : -data3)
      $game_party.item_keep(i, amount)

    end
  end
end
[/pre]

评分

参与人数 1星屑 +150 收起 理由
taroxd + 150 认可答案

查看全部评分

回复

使用道具 举报

梦石
0
星屑
50
在线时间
11 小时
注册时间
2014-7-15
回帖
13
 楼主| 发表于 2014-7-23 16:41:41 | 显示全部楼层
900行的脚本~艾玛~我该怎么学脚本?

点评

话说,使用方法见注释……看不懂日语的话没办法……  发表于 2014-7-23 16:43
艾玛~没让你学啊~ 用不就好了  发表于 2014-7-23 16:43
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部