Project1

标题: 求VX的人物仓库脚本 [打印本页]

作者: 1224198918    时间: 2011-3-20 11:49
标题: 求VX的人物仓库脚本
本帖最后由 铃仙·优昙华院·因幡 于 2011-5-11 20:15 编辑

如题 要与人物跟随脚本兼容
  1. #==============================================================================
  2. # ■ Train_Actor::Config
  3. #------------------------------------------------------------------------------
  4. # マップ上でアクターを隊列移動させる
  5. #==============================================================================

  6. module Train_Actor

  7.   # ●透明状態用スイッチ設定
  8.   # true だとスイッチ制御を行う
  9.   #TRANSPARENT_SWITCH = true
  10.   TRANSPARENT_SWITCH = false

  11.   # ●透明状態用スイッチ番号
  12.   # TRANSPARENT_SWITCH が true で、この番号のスイッチがONだと透明になる
  13.   TRANSPARENT_SWITCHES_INDEX = 20

  14.   # 死亡時のキャラクターグラフィック名
  15.   #DEAD_CHARACTER_NAME = "Coffin"
  16.   #DEAD_CHARACTER_INDEX = 0
  17.   DEAD_CHARACTER_NAME = ""
  18.   DEAD_CHARACTER_INDEX = 0

  19.   # 定数
  20.   DOWN_LEFT  = 1
  21.   DOWN_RIGHT = 3
  22.   UP_LEFT    = 7
  23.   UP_RIGHT   = 9
  24.   JUMP       = 5
  25.   STOP       = 0

  26. end
  27.          
  28. # Train_Actor::Game_Event_Module
  29. # マップ上でアクターを隊列移動させる
  30. # Author:: fukuyama
  31. # Date:: 2007/12/31
  32. # Copyright:: Copyright (C) 2005-2007 rgss-lib

  33. module Train_Actor

  34.   module Game_Event_Module

  35.     # 通行可能判定
  36.     # x:: X 座標
  37.     # y:: Y 座標
  38.     # return:: 通行不可 false 可能 true
  39.     def passable?(x, y)
  40.       result = super(x, y)
  41.       return result if @through
  42.       if result
  43.         # 新しい座標を求める

  44.         new_x = x
  45.         new_y = y
  46.         # トレインアクターのループ

  47.         for actor in $game_party.characters
  48.           # 表示されている場合

  49.           if (not actor.character_name.empty?) and (not actor.transparent)
  50.             # アクターの座標が移動先と一致した場合

  51.             if actor.x == new_x and actor.y == new_y
  52.               # 自分がイベントの場合

  53.               if self != $game_player
  54.                 # 通行不可
  55.                 return false
  56.               end
  57.             end
  58.           end
  59.         end
  60.       end
  61.       return result
  62.     end
  63.   end

  64. end

  65. class Game_Event
  66.   include Train_Actor::Game_Event_Module
  67. end

  68. # Train_Actor::Game_Party_Module
  69. # Game_Party用隊列歩行モジュール
  70. # Author:: fukuyama
  71. # Date:: 2007/12/31
  72. # Copyright:: Copyright (C) 2005-2007 rgss-lib

  73. module Train_Actor

  74.   module Game_Party_Module
  75.     attr_reader :characters

  76.     def initialize
  77.       super
  78.       if @characters.nil?
  79.         @characters = []
  80.         for i in 1 ... Game_Party::MAX_MEMBERS
  81.           @characters.push(Game_Party_Actor.new(i - 1))
  82.         end
  83.       end
  84.     end

  85.     def empty?
  86.       return @actors.empty?
  87.     end

  88.     def dead_actor_include?
  89.       for actor in members
  90.         if actor.dead?
  91.           return true
  92.         end
  93.       end
  94.       return false
  95.     end
  96.     def get_active_party_order
  97.       if not dead_actor_include?
  98.         return members
  99.       end
  100.       alive_actors = []
  101.       dead_actors = []
  102.       for actor in members
  103.         if actor.dead?
  104.           dead_actors.push actor
  105.         else
  106.           alive_actors.push actor
  107.         end
  108.       end
  109.       return alive_actors + dead_actors
  110.     end
  111.     def setup_actor_character_sprites
  112.       setup_actors = get_active_party_order
  113.       for i in 1 ... Game_Party::MAX_MEMBERS
  114.         @characters[i - 1].setup(setup_actors[i])
  115.       end
  116.     end
  117.     def transparent_switch
  118.       if TRANSPARENT_SWITCH
  119.         unless $game_player.transparent
  120.           return $game_switches[TRANSPARENT_SWITCHES_INDEX]
  121.         end
  122.       end
  123.       return $game_player.transparent
  124.     end
  125.     def update_party_actors
  126.       setup_actor_character_sprites
  127.       transparent = transparent_switch
  128.       for character in @characters
  129.         character.transparent = transparent
  130.         character.update
  131.         if $game_player.vehicle_type >= 0 # 乗り物に乗ってる時は同期
  132.           character.sync_with_player
  133.         end
  134.       end
  135.     end
  136.     def moveto_party_actors( x, y )
  137.       setup_actor_character_sprites
  138.       for character in @characters
  139.         character.moveto( x, y )
  140.       end
  141.       @move_list = []
  142.       move_list_setup
  143.     end
  144.     def move_party_actors
  145.       if @move_list == nil
  146.         @move_list = []
  147.         move_list_setup
  148.       end
  149.       @move_list.each_index do |i|
  150.         if not @characters[i].nil?
  151.           @characters[i].add_move_list_element(@move_list[i])
  152.         end
  153.       end
  154.     end
  155.     class Move_List_Element
  156.       def initialize(type,args)
  157.         @type = type
  158.         @args = args
  159.       end
  160.       def type() return @type end
  161.       def args() return @args end
  162.     end
  163.     def move_list_setup
  164.       for i in 0 .. Game_Party::MAX_MEMBERS
  165.         @move_list[i] = nil
  166.       end
  167.     end
  168.     def add_move_list(type,*args)
  169.       if $game_player.vehicle_type >= 0 # 乗り物に乗ってる時は同期
  170.         move_list_setup
  171.         return
  172.       end
  173.       @move_list.unshift(Move_List_Element.new(type,args)).pop
  174.     end
  175.     def move_down_party_actors(turn_enabled = true)
  176.       move_party_actors
  177.       add_move_list(Input::DOWN,turn_enabled)
  178.     end
  179.     def move_left_party_actors(turn_enabled = true)
  180.       move_party_actors
  181.       add_move_list(Input::LEFT,turn_enabled)
  182.     end
  183.     def move_right_party_actors(turn_enabled = true)
  184.       move_party_actors
  185.       add_move_list(Input::RIGHT,turn_enabled)
  186.     end
  187.     def move_up_party_actors(turn_enabled = true)
  188.       move_party_actors
  189.       add_move_list(Input::UP,turn_enabled)
  190.     end
  191.     def move_lower_left_party_actors
  192.       move_party_actors
  193.       add_move_list(DOWN_LEFT)
  194.     end
  195.     def move_lower_right_party_actors
  196.       move_party_actors
  197.       add_move_list(DOWN_RIGHT)
  198.     end
  199.     def move_upper_left_party_actors
  200.       move_party_actors
  201.       add_move_list(UP_LEFT)
  202.     end
  203.     def move_upper_right_party_actors
  204.       move_party_actors
  205.       add_move_list(UP_RIGHT)
  206.     end
  207.     def jump_party_actors(x_plus, y_plus)
  208.       move_party_actors
  209.       add_move_list(JUMP,x_plus, y_plus)
  210.       move_stop_party_actors
  211.     end
  212.     def move_stop_party_actors
  213.       self.members.each do |a|
  214.         move_party_actors
  215.         add_move_list(STOP)
  216.       end
  217.     end
  218.   end

  219. end

  220. class Game_Party
  221.   include Train_Actor::Game_Party_Module
  222. end

  223. # Train_Actor::Game_Player_Module
  224. # Game_Player用隊列歩行モジュール
  225. # Author:: fukuyama
  226. # Date:: 2007/12/31
  227. # Copyright:: Copyright (C) 2005-2007 rgss-lib

  228. module Train_Actor

  229.   module Game_Player_Module
  230.     attr_reader :move_speed
  231.     attr_reader :step_anime
  232.     attr_reader :direction_fix

  233.     def update_party_actors
  234.       if $game_party.empty?
  235.         return
  236.       end
  237.       $game_party.update_party_actors
  238.       actors = $game_party.members
  239.       actor = actors[0]
  240.       if not actor.dead?
  241.         if not @prev_dead.nil?
  242.           @character_name = actor.character_name
  243.           @character_index = actor.character_index
  244.           @prev_dead = nil
  245.         end
  246.         return
  247.       end
  248.       @prev_dead = true
  249.       actors.each do |actor|
  250.         if not actor.dead?
  251.           @character_name = actor.character_name
  252.           @character_index = actor.character_index
  253.           break
  254.         end
  255.       end
  256.     end
  257.     def update
  258.       update_party_actors
  259.       super
  260.     end
  261.     def moveto( x, y )
  262.       $game_party.moveto_party_actors( x, y )
  263.       super( x, y )
  264.     end
  265.     def move_down(turn_enabled = true)
  266.       if passable?(@x, @y + 1)
  267.         $game_party.move_down_party_actors(turn_enabled)
  268.       end
  269.       super(turn_enabled)
  270.     end
  271.     def move_left(turn_enabled = true)
  272.       if passable?(@x - 1, @y)
  273.         $game_party.move_left_party_actors(turn_enabled)
  274.       end
  275.       super(turn_enabled)
  276.     end
  277.     def move_right(turn_enabled = true)
  278.       if passable?(@x + 1, @y)
  279.         $game_party.move_right_party_actors(turn_enabled)
  280.       end
  281.       super(turn_enabled)
  282.     end
  283.     def move_up(turn_enabled = true)
  284.       if passable?(@x, @y - 1)
  285.         $game_party.move_up_party_actors(turn_enabled)
  286.       end
  287.       super(turn_enabled)
  288.     end
  289.     def move_lower_left
  290.       # 下→左、左→下 のどちらかのコースが通行可能な場合
  291.       if (passable?(@x, @y+1) and passable?(@x-1, @y+1)) or
  292.        (passable?(@x-1, @y) and passable?(@x-1, @y+1))
  293.         $game_party.move_lower_left_party_actors
  294.       end
  295.       super
  296.     end
  297.     def move_lower_right
  298.       # 下→右、右→下 のどちらかのコースが通行可能な場合
  299.       if (passable?(@x, @y+1) and passable?(@x+1, @y+1)) or
  300.        (passable?(@x+1, @y) and passable?(@x+1, @y+1))
  301.         $game_party.move_lower_right_party_actors
  302.       end
  303.       super
  304.     end
  305.     def move_upper_left
  306.       # 上→左、左→上 のどちらかのコースが通行可能な場合
  307.       if (passable?(@x, @y-1) and passable?(@x-1, @y-1)) or
  308.        (passable?(@x-1, @y) and passable?(@x-1, @y-1))
  309.         $game_party.move_upper_left_party_actors
  310.       end
  311.       super
  312.     end
  313.     def move_upper_right
  314.       # 上→右、右→上 のどちらかのコースが通行可能な場合
  315.       if (passable?(@x, @y-1) and passable?(@x+1, @y-1)) or
  316.        (passable?(@x+1, @y) and passable?(@x+1, @y-1))
  317.         $game_party.move_upper_right_party_actors
  318.       end
  319.       super
  320.     end
  321.     def jump(x_plus, y_plus)
  322.       # 新しい座標を計算
  323.       new_x = @x + x_plus
  324.       new_y = @y + y_plus
  325.       # 加算値が (0,0) の場合か、ジャンプ先が通行可能な場合
  326.       if (x_plus == 0 and y_plus == 0) or passable?(new_x, new_y)
  327.         $game_party.jump_party_actors(x_plus, y_plus)
  328.       end
  329.       super(x_plus, y_plus)
  330.     end
  331.   end

  332. end

  333. class Game_Player
  334.   include Train_Actor::Game_Player_Module
  335. end

  336. # Train_Actor::Spriteset_Map_Module
  337. # Spriteset_Map用隊列歩行モジュール
  338. # Author:: fukuyama
  339. # Date:: 2007/12/31
  340. # Copyright:: Copyright (C) 2005-2007 rgss-lib

  341. module Train_Actor
  342.   module Spriteset_Map_Module
  343.     def setup_actor_character_sprites
  344.       for character in $game_party.characters.reverse
  345.         @character_sprites.unshift(Sprite_Character.new(@viewport1, character))
  346.       end
  347.     end
  348.   end
  349. end

  350. class Spriteset_Map
  351.   include Train_Actor::Spriteset_Map_Module
  352.   alias train_actor_create_characters create_characters
  353.   def create_characters
  354.     train_actor_create_characters
  355.     setup_actor_character_sprites
  356.   end
  357. end

  358. # Train_Actor::Game_Party_Actor
  359. # マップ上のパーティ用キャラクター
  360. # Author:: fukuyama
  361. # Date:: 2007/12/31
  362. # Copyright:: Copyright (C) 2005-2007 rgss-lib

  363. module Train_Actor

  364.   class Game_Party_Actor < Game_Character
  365.     def initialize(train_index)
  366.       super()
  367.       @train_index = train_index
  368.       @character_wait = 0
  369.       @through = true
  370.       # 不透明度と合成方法を初期化
  371.       @opacity = 255
  372.       @blend_type = 0
  373.       @move_list = []
  374.     end
  375.     def setup(actor)
  376.       # キャラクターのファイル名と色相を設定
  377.       if actor.nil?
  378.         @character_name = ""
  379.       elsif not actor.dead? # 死んでる場合とりあえず、消しとこ…
  380.         @character_name = actor.character_name
  381.         @character_index = actor.character_index
  382.       else
  383.         @character_name = DEAD_CHARACTER_NAME
  384.         @character_index = DEAD_CHARACTER_INDEX
  385.       end
  386.     end
  387.     def dash?
  388.       return false if $game_map.disable_dash?
  389.       #      return false if $game_player.move_route_forcing
  390.       return Input.press?(Input::A)
  391.     end
  392.     def update
  393.       @move_speed = $game_player.move_speed
  394.       @step_anime = $game_player.step_anime
  395.       @opacity = $game_player.opacity
  396.       @blend_type = $game_player.blend_type
  397.       @direction_fix = $game_player.direction_fix
  398.       if @direction_fix
  399.         @direction = $game_player.direction
  400.       end
  401.       update_move_list()
  402.       super
  403.     end
  404.     def screen_z(height = 0)
  405.       if $game_player.x == @x and $game_player.y == @y
  406.         super() - 1
  407.       else
  408.         super()
  409.       end
  410.     end
  411.     def add_move_list_element(element)
  412.       @move_list.push(element)
  413.       if @move_list.size == 1
  414.         update_move_list()
  415.       end
  416.     end
  417.     def move_list_size
  418.       return @move_list.size
  419.     end
  420.     def update_move_list()
  421.       return if moving?
  422.       return if @move_list.empty?
  423.       if @move_list[0].type == STOP
  424.         if @train_index != 0
  425.           character = $game_party.characters[@train_index - 1]
  426.           if character.x == @x and character.y == @y and character.direction == @direction
  427.             distance = (2 ** @move_speed)
  428.             distance *= 2 if dash?
  429.             @character_wait = 256 / distance + 1
  430.             while character.move_list_size < @move_list.size and @move_list[0].type == STOP
  431.               @move_list.shift
  432.             end
  433.           end
  434.         end
  435.       else
  436.         @character_wait = 0
  437.       end
  438.       if @character_wait > 0
  439.         if dash?
  440.           @character_wait -= 2
  441.         else
  442.           @character_wait -= 1
  443.         end
  444.         return
  445.       end
  446.       element = @move_list.shift
  447.       case element.type
  448.       when Input::DOWN
  449.         move_down(element.args[0])
  450.       when Input::LEFT
  451.         move_left(element.args[0])
  452.       when Input::RIGHT
  453.         move_right(element.args[0])
  454.       when Input::UP
  455.         move_up(element.args[0])
  456.       when DOWN_LEFT
  457.         move_lower_left
  458.       when DOWN_RIGHT
  459.         move_lower_right
  460.       when UP_LEFT
  461.         move_upper_left
  462.       when UP_RIGHT
  463.         move_upper_right
  464.       when JUMP
  465.         jump(element.args[0],element.args[1])
  466.       when STOP
  467.         update_move_list()
  468.       end
  469.     end
  470.     def moveto( x, y )
  471.       @move_list.clear
  472.       super(x, y)
  473.     end
  474.     #--------------------------------------------------------------------------
  475.     # ● 下に移動
  476.     #     turn_enabled : その場での向き変更を許可するフラグ
  477.     #--------------------------------------------------------------------------
  478.     def move_down(turn_enabled = true)
  479.       # 下を向く
  480.       if turn_enabled
  481.         turn_down
  482.       end
  483.       # 通行可能な場合
  484.       if passable?(@x, @y + 1)
  485.         # 下を向く
  486.         turn_down
  487.         # 座標を更新
  488.         @y += 1
  489.       end
  490.     end
  491.     #--------------------------------------------------------------------------
  492.     # ● 左に移動
  493.     #     turn_enabled : その場での向き変更を許可するフラグ
  494.     #--------------------------------------------------------------------------
  495.     def move_left(turn_enabled = true)
  496.       # 左を向く

  497.       if turn_enabled
  498.         turn_left
  499.       end
  500.       # 通行可能な場合

  501.       if passable?(@x - 1, @y)
  502.         # 左を向く

  503.         turn_left
  504.         # 座標を更新
  505.         @x -= 1
  506.       end
  507.     end
  508.     #--------------------------------------------------------------------------
  509.     # ● 右に移動
  510.     #     turn_enabled : その場での向き変更を許可するフラグ
  511.     #--------------------------------------------------------------------------
  512.     def move_right(turn_enabled = true)
  513.       # 右を向く

  514.       if turn_enabled
  515.         turn_right
  516.       end
  517.       # 通行可能な場合

  518.       if passable?(@x + 1, @y)
  519.         # 右を向く

  520.         turn_right
  521.         # 座標を更新
  522.         @x += 1
  523.       end
  524.     end
  525.     #--------------------------------------------------------------------------
  526.     # ● 上に移動
  527.     #     turn_enabled : その場での向き変更を許可するフラグ
  528.     #--------------------------------------------------------------------------
  529.     def move_up(turn_enabled = true)
  530.       # 上を向く
  531.       if turn_enabled
  532.         turn_up
  533.       end
  534.       # 通行可能な場合

  535.       if passable?(@x, @y - 1)
  536.         # 上を向く
  537.         turn_up
  538.         # 座標を更新
  539.         @y -= 1
  540.       end
  541.     end
  542.     #--------------------------------------------------------------------------
  543.     # ● 左下に移動
  544.     #--------------------------------------------------------------------------
  545.     def move_lower_left
  546.       # 向き固定でない場合
  547.       unless @direction_fix
  548.         # 右向きだった場合は左を、上向きだった場合は下を向く
  549.         @direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::UP ? Input::DOWN : @direction)
  550.       end
  551.       # 下→左、左→下 のどちらかのコースが通行可能な場合
  552.       if (passable?(@x, @y+1) and passable?(@x-1, @y+1)) or
  553.        (passable?(@x-1, @y) and passable?(@x-1, @y+1))
  554.         # 座標を更新
  555.         @x -= 1
  556.         @y += 1
  557.       end
  558.     end
  559.     #--------------------------------------------------------------------------
  560.     # ● 右下に移動
  561.     #--------------------------------------------------------------------------
  562.     def move_lower_right
  563.       # 向き固定でない場合

  564.       unless @direction_fix
  565.         # 左向きだった場合は右を、上向きだった場合は下を向く
  566.         @direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::UP ? Input::DOWN : @direction)
  567.       end
  568.       # 下→右、右→下 のどちらかのコースが通行可能な場合

  569.       if (passable?(@x, @y+1) and passable?(@x+1, @y+1)) or
  570.        (passable?(@x+1, @y) and passable?(@x+1, @y+1))
  571.         # 座標を更新
  572.         @x += 1
  573.         @y += 1
  574.       end
  575.     end
  576.     #--------------------------------------------------------------------------
  577.     # ● 左上に移動
  578.     #--------------------------------------------------------------------------
  579.     def move_upper_left
  580.       # 向き固定でない場合
  581.       unless @direction_fix
  582.         # 右向きだった場合は左を、下向きだった場合は上を向く
  583.         @direction = (@direction == Input::RIGHT ? Input::LEFT : @direction == Input::DOWN ? Input::UP : @direction)
  584.       end
  585.       # 上→左、左→上 のどちらかのコースが通行可能な場合
  586.       if (passable?(@x, @y-1) and passable?(@x-1, @y-1)) or
  587.        (passable?(@x-1, @y) and passable?(@x-1, @y-1))
  588.         # 座標を更新
  589.         @x -= 1
  590.         @y -= 1
  591.       end
  592.     end
  593.     #--------------------------------------------------------------------------
  594.     # ● 右上に移動
  595.     #--------------------------------------------------------------------------
  596.     def move_upper_right
  597.       # 向き固定でない場合
  598.       unless @direction_fix
  599.         # 左向きだった場合は右を、下向きだった場合は上を向く
  600.         @direction = (@direction == Input::LEFT ? Input::RIGHT : @direction == Input::DOWN ? Input::UP : @direction)
  601.       end
  602.       # 上→右、右→上 のどちらかのコースが通行可能な場合
  603.       if (passable?(@x, @y-1) and passable?(@x+1, @y-1)) or
  604.        (passable?(@x+1, @y) and passable?(@x+1, @y-1))
  605.         # 座標を更新
  606.         @x += 1
  607.         @y -= 1
  608.       end
  609.     end

  610.     def sync_with_player
  611.       @x = $game_player.x
  612.       @y = $game_player.y
  613.       @real_x = $game_player.real_x
  614.       @real_y = $game_player.real_y
  615.       @direction = $game_player.direction
  616.       update_bush_depth
  617.     end

  618.   end

  619. end
复制代码

作者: 强弩之末    时间: 2011-3-23 18:19
本帖最后由 铃仙·优昙华院·因幡 于 2011-5-11 20:14 编辑

  仓库脚本很多的啦,但是不知道是不是兼容的……
  1. #==============================================================================
  2. #
  3. #  仓库ver1.1
  4. #
  5. #                         汉化 by 约束
  6. #
  7. #    RPG中存放多余物品的仓库。
  8. #    本脚本与黑狮子的脚本相似
  9. #    参考于MQ0_PartyReserve所做。
  10. #   
  11. #    使用方法
  12. #    事件中的「脚本」里填入reserve_system即可启动此脚本。
  13. #
  14. #    不可存放物品
  15. #    ・不想可以存放事件/剧情所需物品时
  16. #      在物品的备注栏中填入  非存放 即可
  17. #      如此即可使物品不可存入仓库。
  18. #
  19. #    另外、为能使用TYPE74RX-T様的「限定特定物平的所持数上限」脚本
  20. #    而写了专门应对的方法
  21. #    如果有用到以上所述脚本、请使RX_T_ITEM为true状态
  22. #
  23. #==============================================================================

  24. module BBL_RESERVE_SYSTEM
  25. #==============================================================================
  26. # 设定项目开始
  27. #==============================================================================

  28.   # 如果不希望保管物品根据以下范畴区分的情况时 请填入false
  29.   ITEM_DISCRETION = true

  30.   # ITEM_DISCRETION在true的状态时 请在以下填入范畴名
  31.   # 从左开始依次为物品、武器、防具、金钱(顺序不可改变)
  32.   # ※如果不希望有金钱保管功能时 将金钱从范畴内消去
  33.   #   例) ["物品", "武器", "防具"]
  34.   DISCRETION_NAME = ["物品", "武器", "防具", "金钱"]

  35.   # 操作说明文
  36.   # 如果不需要时、消除""内文字即可
  37.   COMMAND_EXPLANATION = "空格键:将物品分别存入  D键:将物品全部存入"

  38.   # 使用仓库时的按键
  39.   RESERVE_KEY = Input::C      # 分别存入
  40.   RESERVE_ALL_KEY = Input::Z  # 全部存入

  41.   # 金钱选项窗口的用语
  42.   # 从左开始依次为保存和提取
  43.   GOLD_COMMAND_NAME = ["存入", "提取"]

  44.   # 所持金钱的用语
  45.   GOLD_NAME = "拥有金币"

  46.   # 保存金钱的用语
  47.   RESERVE_GOLD_NAME = "储存金额"

  48.   # 使用了TYPE74RX-T様的「限定特定物平的所持数上限」脚本
  49.   # 请在以下改为true即可
  50.   RX_T_ITEM = false

  51. #==============================================================================
  52. # 设定项目完毕
  53. #==============================================================================
  54. end

  55. $imported = {} if $imported == nil

  56. class Game_Party
  57.   alias bbl_initialize initialize
  58.   #--------------------------------------------------------------------------
  59.   # ○ 定义实例变量 (追加定义)
  60.   #--------------------------------------------------------------------------
  61.   attr_reader   :keep_gold                     # 保存金钱
  62.   #--------------------------------------------------------------------------
  63.   # ● 初期化对象
  64.   #--------------------------------------------------------------------------
  65.   def initialize
  66.     bbl_initialize
  67.     @keep_items = {}       # 保管品 hash (物品 ID)
  68.     @keep_weapons = {}     # 保管品 hash (武器 ID)
  69.     @keep_armors = {}      # 保管品 hash (防具 ID)
  70.     @keep_gold = 0         # 保管金钱
  71.   end
  72.   #--------------------------------------------------------------------------
  73.   # ○ 获取保存物品的排序
  74.   #--------------------------------------------------------------------------
  75.   def keeping_items
  76.     result = []
  77.     for i in @keep_items.keys.sort
  78.       result.push($data_items[i]) if @keep_items[i] > 0
  79.     end
  80.     for i in @keep_weapons.keys.sort
  81.       result.push($data_weapons[i]) if @keep_weapons[i] > 0
  82.     end
  83.     for i in @keep_armors.keys.sort
  84.       result.push($data_armors[i]) if @keep_armors[i] > 0
  85.     end
  86.     return result
  87.   end
  88.   #--------------------------------------------------------------------------
  89.   # ○ 获取保存物品的所持数量
  90.   #--------------------------------------------------------------------------
  91.   def keeping_item_number(item)
  92.     case item
  93.     when RPG::Item
  94.       number = @keep_items[item.id]
  95.     when RPG::Weapon
  96.       number = @keep_weapons[item.id]
  97.     when RPG::Armor
  98.       number = @keep_armors[item.id]
  99.     end
  100.     return number == nil ? 0 : number
  101.   end
  102.   #--------------------------------------------------------------------------
  103.   # ○ 保存物品的增加  (减少)
  104.   #     item          : 物品
  105.   #     n             : 个数
  106.   #--------------------------------------------------------------------------
  107.   def gain_keeping_item(item, n)
  108.     number = keeping_item_number(item)
  109.     case item
  110.     when RPG::Item
  111.       @keep_items[item.id] = [[number + n, 0].max, 99].min
  112.     when RPG::Weapon
  113.       @keep_weapons[item.id] = [[number + n, 0].max, 99].min
  114.     when RPG::Armor
  115.       @keep_armors[item.id] = [[number + n, 0].max, 99].min
  116.     end
  117.   end
  118.   #--------------------------------------------------------------------------
  119.   # ○ 保存物品的减少
  120.   #     item          : 物品
  121.   #     n             : 个数
  122.   #--------------------------------------------------------------------------
  123.   def lose_keeping_item(item, n)
  124.     gain_keeping_item(item, -n)
  125.   end
  126.   #--------------------------------------------------------------------------
  127.   # ● 保管金额的增加 (减少)
  128.   #     n : 金额
  129.   #--------------------------------------------------------------------------
  130.   def gain_keeping_gold(n)
  131.     @keep_gold = [[@keep_gold + n, 0].max, 9999999].min
  132.   end
  133.   #--------------------------------------------------------------------------
  134.   # ● 保管金额的减少
  135.   #     n : 金额
  136.   #--------------------------------------------------------------------------
  137.   def lose_keeping_gold(n)
  138.     gain_keeping_gold(-n)
  139.   end
  140. end


  141. #==============================================================================
  142. # ■ Game_Interpreter
  143. #==============================================================================
  144. class Game_Interpreter
  145.   #--------------------------------------------------------------------------
  146.   # ● 呼出仓库
  147.   #--------------------------------------------------------------------------
  148.   def reserve_system
  149.     $scene = Scene_Reserve.new
  150.     return true
  151.   end
  152. end

  153. class Scene_Reserve < Scene_Base
  154.   #--------------------------------------------------------------------------
  155.   # ● 开始处理
  156.   #--------------------------------------------------------------------------
  157.   def start
  158.     super
  159.     create_menu_background
  160.     @not_gold = true if BBL_RESERVE_SYSTEM::DISCRETION_NAME.size < 4
  161.     if BBL_RESERVE_SYSTEM::ITEM_DISCRETION
  162.       @item_window = Window_Reserve_main.new(0, 112, 272, 248)
  163.       @reserve_window = Window_Reserve.new(272, 112, 272, 248)
  164.     else
  165.       @item_window = Window_Reserve_main.new(0, 56, 272, 304)
  166.       @reserve_window = Window_Reserve.new(272, 56, 272, 304)
  167.     end
  168.     @help_window = Window_Help.new
  169.     @item_window.help_window = @help_window
  170.     @reserve_window.help_window = @help_window
  171.     @command_window = Window_ReserveCommand.new(544, BBL_RESERVE_SYSTEM::DISCRETION_NAME,
  172.     BBL_RESERVE_SYSTEM::DISCRETION_NAME.size, 1, 4)
  173.     @command_window.y = 56
  174.     @command_window.active = true
  175.     @gold_command_window = Window_ReserveCommand.new(192, BBL_RESERVE_SYSTEM::GOLD_COMMAND_NAME, 1, 0)
  176.     @gold_command_window.opacity = 0
  177.     @gold_command_window.x = 32
  178.     @gold_command_window.y = @item_window.y + 64
  179.     @gold_command_window.visible = false
  180.     @item_window.active = false
  181.     @reserve_window.active = false
  182.     @item_window.index = -1
  183.     @reserve_window.index = -1
  184.     @item_cursor = 0
  185.     @reserve_cursor = 0
  186.     @item_window.mode = 1
  187.     @reserve_window.mode = 1
  188.     @number_window = Window_GoldInput.new
  189.     @number_window.visible = false
  190.     @number_window.y = @gold_command_window.y + @gold_command_window.height
  191.     @gold_window = Window_HandGold.new(0, 416 - 56)
  192.     @gold_reserve_window = Window_ReserveGold.new(272, 416 - 56)
  193.     unless BBL_RESERVE_SYSTEM::ITEM_DISCRETION
  194.       @command_window.active = false
  195.       @command_window.visible = false
  196.       @item_window.index = 0
  197.       @item_window.active
  198.     end
  199.     if $imported["HelpExtension"]
  200.       adjust_window_size
  201.     else
  202.       adjust_gold_window_size
  203.     end
  204.   end
  205.   #--------------------------------------------------------------------------
  206.   # ● 完毕处理
  207.   #--------------------------------------------------------------------------
  208.   def terminate
  209.     super
  210.     dispose_menu_background
  211.     @item_window.dispose
  212.     @reserve_window.dispose
  213.     @command_window.dispose
  214.     @help_window.dispose
  215.     @gold_command_window.dispose
  216.     @gold_window.dispose
  217.     @gold_reserve_window.dispose
  218.     @number_window.dispose
  219.   end
  220.   #--------------------------------------------------------------------------
  221.   # ● 刷新画面
  222.   #--------------------------------------------------------------------------
  223.   def update
  224.     super
  225.     update_menu_background
  226.     @command_window.update if BBL_RESERVE_SYSTEM::ITEM_DISCRETION
  227.     if @item_window.index >= 0
  228.       @item_window.active = true
  229.       @reserve_window.active = false
  230.     elsif @reserve_window.index >= 0
  231.       @item_window.active = false
  232.       @reserve_window.active = true
  233.     end
  234.     if @command_window.active == true
  235.       command_selection
  236.     elsif @item_window.active == true
  237.       select_item
  238.     elsif @reserve_window.active == true
  239.       select_keeping_item
  240.     elsif @gold_command_window.active == true
  241.       select_gold_command
  242.     elsif @number_window.active == true
  243.       select_number
  244.     end
  245.     item_mode = @command_window.index + 1
  246.     if item_mode != @item_window.mode
  247.       @item_window.mode = item_mode
  248.     end
  249.     if item_mode != @reserve_window.mode
  250.       @reserve_window.mode = item_mode
  251.     end
  252.   end
  253.   #--------------------------------------------------------------------------
  254.   # ● 指令窗口选项的刷新
  255.   #--------------------------------------------------------------------------
  256.   def command_selection
  257.     @help_window.set_text(BBL_RESERVE_SYSTEM::COMMAND_EXPLANATION)
  258.     if Input.trigger?(Input::C)
  259.       if @command_window.index == 3
  260.       Sound.play_decision
  261.       @command_window.active = false
  262.       @gold_command_window.visible = true
  263.       @gold_command_window.active = true
  264.       @gold_command_window.index = 0
  265.       else
  266.       Sound.play_decision
  267.       @command_window.active = false
  268.       @item_window.active = true
  269.       @item_window.index = 0
  270.       end
  271.     elsif Input.trigger?(Input::B)
  272.       Sound.play_cancel
  273.       $scene = Scene_Map.new
  274.     end
  275.   end
  276.   #--------------------------------------------------------------------------
  277.   # ● 所持物品选项的刷新
  278.   #--------------------------------------------------------------------------
  279.   def select_item
  280.     @item_window.update
  281.     @reserve_window.update
  282.     if Input.repeat?(BBL_RESERVE_SYSTEM::RESERVE_KEY)
  283.       @item_window.gain_item
  284.       @item_window.refresh
  285.       @reserve_window.refresh
  286.         if @item_window.item == nil
  287.           @item_window.index -= 1 if @item_window.index > 0
  288.         end
  289.     elsif Input.repeat?(BBL_RESERVE_SYSTEM::RESERVE_ALL_KEY)
  290.       @item_window.gain_item_all
  291.       @item_window.refresh
  292.       @reserve_window.refresh
  293.       if @item_window.item == nil
  294.         @item_window.index -= 1 if @item_window.index > 0
  295.       end
  296.     elsif Input.trigger?(Input::B)
  297.       if BBL_RESERVE_SYSTEM::ITEM_DISCRETION
  298.         Sound.play_cancel
  299.         @item_window.active = false
  300.         @item_window.index = -1
  301.         @command_window.active = true
  302.       else
  303.         Sound.play_cancel
  304.         $scene = Scene_Map.new
  305.       end
  306.     elsif Input.trigger?(Input::RIGHT) or Input.trigger?(Input::LEFT)
  307.       Sound.play_cursor
  308.       @item_cursor = @item_window.index
  309.       @item_window.active = false
  310.       @reserve_window.active
  311.       @item_window.index = -1
  312.       @reserve_window.index = @reserve_cursor
  313.     end
  314.   end
  315.   #--------------------------------------------------------------------------
  316.   # ● 保管物品选项的刷新
  317.   #--------------------------------------------------------------------------
  318.   def select_keeping_item
  319.     @item_window.update
  320.     @reserve_window.update
  321.     if Input.repeat?(BBL_RESERVE_SYSTEM::RESERVE_KEY)
  322.       @reserve_window.reserve_item
  323.       @item_window.refresh
  324.       @reserve_window.refresh
  325.       if @reserve_window.item == nil
  326.         @reserve_window.index -= 1 if @reserve_window.index > 0
  327.       end
  328.     elsif Input.repeat?(BBL_RESERVE_SYSTEM::RESERVE_ALL_KEY)
  329.       @reserve_window.reserve_item_all
  330.       @item_window.refresh
  331.       @reserve_window.refresh
  332.       if @reserve_window.item == nil
  333.         @reserve_window.index -= 1 if @reserve_window.index > 0
  334.       end
  335.     elsif Input.trigger?(Input::B)
  336.       if BBL_RESERVE_SYSTEM::ITEM_DISCRETION
  337.         Sound.play_cancel
  338.         @reserve_window.active = false
  339.         @reserve_window.index = -1
  340.         @command_window.active = true
  341.       else
  342.         Sound.play_cancel
  343.         $scene = Scene_Map.new
  344.       end
  345.     elsif Input.trigger?(Input::RIGHT) or Input.trigger?(Input::LEFT)
  346.       Sound.play_cursor
  347.       @reserve_cursor = @reserve_window.index
  348.       @reserve_window.active = false
  349.       @item_window.active
  350.       @reserve_window.index = -1
  351.       @item_window.index = @item_cursor
  352.     end
  353.   end
  354.   #--------------------------------------------------------------------------
  355.   # ● 金钱指令窗口选项的刷新
  356.   #--------------------------------------------------------------------------
  357.   def select_gold_command
  358.     @gold_command_window.update
  359.     if Input.trigger?(Input::C)
  360.       Sound.play_decision
  361.       @gold_command_window.active = false
  362.       @gold_command_window.visible = false
  363.       @number_window.visible = true
  364.       @number_window.active = true
  365.       if @gold_command_window.index == 0
  366.         @number_window.mode = 0 # 存入
  367.         @number_window.x = 32
  368.       else
  369.         @number_window.mode = 1 # 提取
  370.         @number_window.x = 304
  371.       end
  372.     elsif Input.trigger?(Input::B)
  373.       Sound.play_cancel
  374.       @gold_command_window.active = false
  375.       @gold_command_window.visible = false
  376.       @command_window.active = true
  377.     end
  378.   end
  379.   #--------------------------------------------------------------------------
  380.   # ● 填写金额的刷新
  381.   #--------------------------------------------------------------------------
  382.   def select_number
  383.     @number_window.update
  384.     if Input.trigger?(Input::C)
  385.       if @number_window.mode == 0
  386.         if @number_window.number > $game_party.gold
  387.           Sound.play_buzzer
  388.           @number_window.number = $game_party.gold
  389.         else
  390.           Sound.play_decision
  391.           gold = @number_window.number
  392.           $game_party.lose_gold(gold)
  393.           $game_party.gain_keeping_gold(gold)
  394.           @number_window.number = 0
  395.           @gold_window.refresh
  396.           @gold_reserve_window.refresh
  397.         end
  398.       elsif @number_window.mode == 1
  399.         if @number_window.number > $game_party.keep_gold
  400.           Sound.play_buzzer
  401.           @number_window.number = $game_party.keep_gold
  402.         else
  403.           Sound.play_decision
  404.           gold = @number_window.number
  405.           $game_party.gain_gold(gold)
  406.           $game_party.lose_keeping_gold(gold)
  407.           @number_window.number = 0
  408.           @gold_window.refresh
  409.           @gold_reserve_window.refresh
  410.         end
  411.       end
  412.     elsif Input.trigger?(Input::B)
  413.       Sound.play_cancel
  414.       @number_window.visible = false
  415.       @number_window.active = false
  416.       @number_window.number = 0
  417.       @number_window.index = 6
  418.       @gold_command_window.visible = true
  419.       @gold_command_window.active = true
  420.     end
  421.   end
  422.   if $imported["HelpExtension"]
  423.   #--------------------------------------------------------------------------
  424.   # ● 调整窗口大小 用于KGC的扩张帮助窗口
  425.   #--------------------------------------------------------------------------
  426.   def adjust_window_size
  427.     @help_window.row_max = KGC::HelpExtension::ROW_MAX
  428.     @command_window.y = @help_window.height
  429.     @item_window.y = @command_window.height + @help_window.height
  430.     @reserve_window.y = @command_window.height + @help_window.height
  431.     sy = @help_window.height + @command_window.height + @gold_window.height
  432.     sy = @help_window.height + @command_window.height if @not_gold
  433.     @item_window.height = 416 - sy
  434.     @reserve_window.height = 416 - sy
  435.     @gold_command_window.y = @item_window.y
  436.     if @not_gold
  437.       @gold_window.visible = false
  438.       @gold_reserve_window.visible = false
  439.     end
  440.   end
  441.   end
  442.   #--------------------------------------------------------------------------
  443.   # ● 调整窗口大小
  444.   #--------------------------------------------------------------------------
  445.   def adjust_gold_window_size
  446.     sy = @help_window.height + @command_window.height + @gold_window.height
  447.     sy = @help_window.height + @command_window.height if @not_gold
  448.     @item_window.height = 416 - sy
  449.     @reserve_window.height = 416 - sy
  450.     if @not_gold
  451.       @gold_window.visible = false
  452.       @gold_reserve_window.visible = false
  453.     end
  454.   end
  455. end

  456. #==============================================================================
  457. # ■ Window_Reserve
  458. #------------------------------------------------------------------------------
  459. #  显示仓库中物品一览
  460. #==============================================================================

  461. class Window_Reserve < Window_Selectable
  462.   #--------------------------------------------------------------------------
  463.   # ● 定义实例变量
  464.   #--------------------------------------------------------------------------
  465.   attr_reader   :mode                     # 模式
  466.   #--------------------------------------------------------------------------
  467.   # ● 初期化对象
  468.   #     x      : 窗口的 X 坐标
  469.   #     y      : 窗口的 Y 坐标
  470.   #     width  : 窗口的宽度
  471.   #     height : 窗口的高度
  472.   #--------------------------------------------------------------------------
  473.   def initialize(x, y, width, height)
  474.     super(x, y, width, height)
  475.     @column_max = 1
  476.     self.index = -1
  477.     @mode = 0
  478.     @total = 0
  479.     @value = 0
  480.     refresh
  481.   end
  482.   #--------------------------------------------------------------------------
  483.   # ● 获取物品
  484.   #--------------------------------------------------------------------------
  485.   def item
  486.     return @data[self.index]
  487.   end
  488.   #--------------------------------------------------------------------------
  489.   # ● 刷新
  490.   #--------------------------------------------------------------------------
  491.   def refresh
  492.     @data = []
  493.     for item in $game_party.keeping_items
  494.       next unless include?(item)
  495.       @data.push(item)
  496.       if item.is_a?(RPG::Item) and item.id == $game_party.last_item_id
  497.         self.index = @data.size - 1
  498.       end
  499.     end
  500.     @data.push(nil) if include?(nil)
  501.     @item_max = @data.size
  502.     create_contents
  503.     for i in 0...@item_max
  504.       draw_item(i)
  505.     end
  506.   end
  507.   #--------------------------------------------------------------------------
  508.   # ● 项目的描画
  509.   #     index : 项目编号
  510.   #--------------------------------------------------------------------------
  511.   def draw_item(index)
  512.     rect = item_rect(index)
  513.     self.contents.clear_rect(rect)
  514.     item = @data[index]
  515.     if item != nil
  516.       number = $game_party.keeping_item_number(item)
  517.       enabled = enable?(item)
  518.       rect.width -= 4
  519.       draw_item_name(item, rect.x, rect.y, enabled)
  520.       self.contents.draw_text(rect, sprintf("%2d", number), 2)
  521.       self.contents.font.size = 14
  522.       rect.width -= 20
  523.       self.contents.draw_text(rect, "×", 2)
  524.       self.contents.font.size = 20
  525.     end
  526.   end
  527.   #--------------------------------------------------------------------------
  528.   # ● 刷新帮助文本
  529.   #--------------------------------------------------------------------------
  530.   def update_help
  531.     @help_window.set_text(item == nil ? "" : item.description)
  532.   end
  533.   #--------------------------------------------------------------------------
  534.   # ● 模式的设定
  535.   #     mode : 新模式
  536.   #--------------------------------------------------------------------------
  537.   def mode=(mode)
  538.     if @mode != mode
  539.       @mode = mode
  540.       refresh
  541.     end
  542.   end
  543.   #--------------------------------------------------------------------------
  544.   # ● 物品在许可状态时是否显示
  545.   #--------------------------------------------------------------------------
  546.   def enable?(item)
  547.     if BBL_RESERVE_SYSTEM::RX_T_ITEM
  548.     rx_limit = RX_T.get_numeric_of_system_word_in_sys_str(item, "所持可能数")
  549.       if rx_limit > 0
  550.         if $game_party.item_number(item) == rx_limit
  551.           return false
  552.         end
  553.       end
  554.     end
  555.     if $game_party.item_number(item) == 99
  556.       return false
  557.     else
  558.       return true
  559.     end
  560.   end
  561.   #--------------------------------------------------------------------------
  562.   # ● 物品是否存在于名单
  563.   #     item : 物品
  564.   #--------------------------------------------------------------------------
  565.   def include?(item)
  566.     if BBL_RESERVE_SYSTEM::ITEM_DISCRETION
  567.       case @mode
  568.       when 1    # 物品
  569.         return false unless item.is_a?(RPG::Item)
  570.       when 2    # 武器
  571.         return false unless item.is_a?(RPG::Weapon)
  572.       when 3    # 防具
  573.         return false unless item.is_a?(RPG::Armor)
  574.       when 4    # 金钱
  575.         return false
  576.       end
  577.       return true
  578.     else
  579.       return false if item == nil
  580.       if $game_temp.in_battle
  581.         return false unless item.is_a?(RPG::Item)
  582.       end
  583.       return true
  584.     end
  585.   end
  586.   #--------------------------------------------------------------------------
  587.   # ● 取出保管中物品
  588.   #--------------------------------------------------------------------------
  589.   def reserve_item
  590.     return if item == nil
  591.     if BBL_RESERVE_SYSTEM::RX_T_ITEM
  592.     rx_limit = RX_T.get_numeric_of_system_word_in_sys_str(item, "所持可能数")
  593.     end
  594.     return Sound.play_buzzer if $game_party.item_number(item) == 99
  595.     if rx_limit == 0
  596.       rx_limit = nil
  597.     end
  598.     if $game_party.item_number(item) == rx_limit
  599.         Sound.play_buzzer
  600.     else
  601.       Sound.play_use_item
  602.       $game_party.lose_keeping_item(item, 1)
  603.       $game_party.gain_item(item, 1)
  604.     end
  605.   end
  606.   #--------------------------------------------------------------------------
  607.   # ● 将保管中物品全部取出
  608.   #--------------------------------------------------------------------------
  609.   def reserve_item_all
  610.     return if item == nil
  611.     if BBL_RESERVE_SYSTEM::RX_T_ITEM
  612.       rx_limit = RX_T.get_numeric_of_system_word_in_sys_str(item, "所持可能数")
  613.     end
  614.     return Sound.play_buzzer if $game_party.item_number(item) == 99
  615.     if rx_limit == 0
  616.       rx_limit = nil
  617.     end
  618.     if $game_party.item_number(item) == rx_limit
  619.       Sound.play_buzzer
  620.     else
  621.       Sound.play_use_item
  622.       @total = $game_party.keeping_item_number(item) + $game_party.item_number(item)
  623.       if rx_limit != nil
  624.         if rx_limit > 0
  625.           if @total > rx_limit
  626.             @value = @total - rx_limit
  627.           end
  628.         end
  629.       else   
  630.           if @total > 99
  631.             @value = @total - 99
  632.           end
  633.       end
  634.       $game_party.gain_item(item, $game_party.keeping_item_number(item))
  635.       $game_party.lose_keeping_item(item, $game_party.keeping_item_number(item))
  636.       $game_party.gain_keeping_item(item, @value)
  637.       @total = 0
  638.       @value = 0
  639.     end
  640.   end
  641. end

  642. #==============================================================================
  643. # ■ Window_Reserve
  644. #------------------------------------------------------------------------------
  645. #  显示仓库中所持物品一览
  646. #==============================================================================

  647. class Window_Reserve_main < Window_Selectable
  648.   #--------------------------------------------------------------------------
  649.   # ● 定义实例变量
  650.   #--------------------------------------------------------------------------
  651.   attr_reader   :mode                     # 模式
  652.   #--------------------------------------------------------------------------
  653.   # ● 初期化对象
  654.   #     x      : 窗口的 X 坐标
  655.   #     y      : 窗口的 Y 坐标
  656.   #     width  : 窗口的宽度
  657.   #     height : 窗口的高度
  658.   #--------------------------------------------------------------------------
  659.   def initialize(x, y, width, height)
  660.     super(x, y, width, height)
  661.     @column_max = 1
  662.     self.index = -1
  663.     @mode = 0
  664.     @total = 0
  665.     @value = 0
  666.     refresh
  667.   end
  668.   #--------------------------------------------------------------------------
  669.   # ● 物品的获取
  670.   #--------------------------------------------------------------------------
  671.   def item
  672.     return @data[self.index]
  673.   end
  674.   #--------------------------------------------------------------------------
  675.   # ● 刷新
  676.   #--------------------------------------------------------------------------
  677.   def refresh
  678.     @data = []
  679.     for item in $game_party.items
  680.       next unless include?(item)
  681.       @data.push(item)
  682.       if item.is_a?(RPG::Item) and item.id == $game_party.last_item_id
  683.         self.index = @data.size - 1
  684.       end
  685.     end
  686.     @data.push(nil) if include?(nil)
  687.     @item_max = @data.size
  688.     create_contents
  689.     for i in 0...@item_max
  690.       draw_item(i)
  691.     end
  692.   end
  693.   #--------------------------------------------------------------------------
  694.   # ● 项目的描画
  695.   #     index : 项目编号
  696.   #--------------------------------------------------------------------------
  697.   def draw_item(index)
  698.     rect = item_rect(index)
  699.     self.contents.clear_rect(rect)
  700.     item = @data[index]
  701.     if item != nil
  702.       number = $game_party.item_number(item)
  703.       enabled = enable?(item)
  704.       rect.width -= 4
  705.       draw_item_name(item, rect.x, rect.y, enabled)
  706.       self.contents.draw_text(rect, sprintf("%2d", number), 2)
  707.       self.contents.font.size = 14
  708.       rect.width -= 20
  709.       self.contents.draw_text(rect, "×", 2)
  710.       self.contents.font.size = 20
  711.     end
  712.   end
  713.   #--------------------------------------------------------------------------
  714.   # ● 刷新帮助文本
  715.   #--------------------------------------------------------------------------
  716.   def update_help
  717.     @help_window.set_text(item == nil ? "" : item.description)
  718.   end
  719.   #--------------------------------------------------------------------------
  720.   # ● 模式的设定
  721.   #     mode : 新模式
  722.   #--------------------------------------------------------------------------
  723.   def mode=(mode)
  724.     if @mode != mode
  725.       @mode = mode
  726.       refresh
  727.     end
  728.   end
  729.   #--------------------------------------------------------------------------
  730.   # ● 物品在许可状态时是否显示
  731.   #--------------------------------------------------------------------------
  732.   def enable?(item)
  733.     if $game_party.keeping_item_number(item) == 99
  734.       return false
  735.     else
  736.       return true
  737.     end
  738.   end
  739.   #--------------------------------------------------------------------------
  740.   # ○ 物品是否存在于名单
  741.   #     item : 物品
  742.   #--------------------------------------------------------------------------
  743.   def include?(item)
  744.     if BBL_RESERVE_SYSTEM::ITEM_DISCRETION
  745.       case @mode
  746.       when 1    # 物品
  747.         return false unless item.is_a?(RPG::Item)
  748.         return false if item.note.include?("非存放")
  749.       when 2    # 武器
  750.         return false unless item.is_a?(RPG::Weapon)
  751.         return false if item.note.include?("非存放")
  752.       when 3    # 防具
  753.         return false unless item.is_a?(RPG::Armor)
  754.         return false if item.note.include?("非存放")
  755.       when 4    # 金钱
  756.         return false
  757.       end
  758.       return true
  759.     else
  760.       return false if item == nil
  761.       if $game_temp.in_battle
  762.         return false unless item.is_a?(RPG::Item)
  763.       end
  764.       return false if item.note.include?("非存放")
  765.       return true
  766.     end
  767.   end
  768.   #--------------------------------------------------------------------------
  769.   # ● 所持有物品的保存
  770.   #--------------------------------------------------------------------------
  771.   def gain_item
  772.     return if item == nil
  773.     if $game_party.keeping_item_number(item) == 99
  774.       Sound.play_buzzer
  775.     else
  776.       Sound.play_use_item
  777.       $game_party.gain_keeping_item(item, 1)
  778.       $game_party.lose_item(item, 1)
  779.     end
  780.   end
  781.   #--------------------------------------------------------------------------
  782.   # ● 所持有物品全部保存
  783.   #--------------------------------------------------------------------------
  784.   def gain_item_all
  785.     return if item == nil
  786.     if $game_party.keeping_item_number(item) == 99
  787.       Sound.play_buzzer
  788.     else
  789.       Sound.play_use_item
  790.       @total = $game_party.keeping_item_number(item) + $game_party.item_number(item)
  791.         if @total > 99
  792.           @value = @total - 99
  793.         end
  794.       $game_party.gain_keeping_item(item, $game_party.item_number(item))
  795.       $game_party.lose_item(item, $game_party.item_number(item))
  796.       $game_party.gain_item(item, @value)
  797.       @total = 0
  798.       @value = 0
  799.     end
  800.   end
  801. end

  802. #==============================================================================
  803. # ■ Window_GoldInput
  804. #------------------------------------------------------------------------------
  805. #   用于填写所持金钱的窗口。
  806. #==============================================================================

  807. class Window_GoldInput < Window_Base
  808.   #--------------------------------------------------------------------------
  809.   # ● 定义实例变量
  810.   #--------------------------------------------------------------------------
  811.   attr_reader   :mode                     # 模式
  812.   attr_accessor :index                    # 索引
  813.   #--------------------------------------------------------------------------
  814.   # ● 初期化对象
  815.   #     digits_max : 行数
  816.   #--------------------------------------------------------------------------
  817.   def initialize
  818.     super(32, 208, 544, 64)
  819.     @number = 0
  820.     @digits_max = 7
  821.     @index = @digits_max - 1
  822.     @mode = 0
  823.     self.opacity = 0
  824.     self.active = false
  825.     self.z += 9999
  826.     refresh
  827.     update_cursor
  828.   end
  829.   #--------------------------------------------------------------------------
  830.   # ● 数值的获取
  831.   #--------------------------------------------------------------------------
  832.   def number
  833.     return @number
  834.   end
  835.   #--------------------------------------------------------------------------
  836.   # ● 模式的获取
  837.   #    0:保存 1:提取
  838.   #--------------------------------------------------------------------------
  839.   def mode=(mode)
  840.     @mode = mode
  841.     return @mode
  842.   end
  843.   #--------------------------------------------------------------------------
  844.   # ● 数值的设定
  845.   #     number : 新数值
  846.   #--------------------------------------------------------------------------
  847.   def number=(number)
  848.     @number = [[number, 0].max, 10 ** @digits_max - 1].min
  849.     refresh
  850.   end
  851.   #--------------------------------------------------------------------------
  852.   # ● 行数的获取
  853.   #--------------------------------------------------------------------------
  854.   def digits_max
  855.     return @digits_max
  856.   end
  857.   #--------------------------------------------------------------------------
  858.   # ● 行数的设定
  859.   #     digits_max : 新行数
  860.   #--------------------------------------------------------------------------
  861.   def digits_max=(digits_max)
  862.     @digits_max = digits_max
  863.     refresh
  864.   end
  865.   #--------------------------------------------------------------------------
  866.   # ● 光标向右移动
  867.   #     wrap : 可以往复循环移动
  868.   #--------------------------------------------------------------------------
  869.   def cursor_right(wrap)
  870.     if @index < @digits_max - 1 or wrap
  871.       @index = (@index + 1) % @digits_max
  872.     end
  873.   end
  874.   #--------------------------------------------------------------------------
  875.   # ● 光标向左移动
  876.   #     wrap : 可以往复循环移动
  877.   #--------------------------------------------------------------------------
  878.   def cursor_left(wrap)
  879.     if @index > 0 or wrap
  880.       @index = (@index + @digits_max - 1) % @digits_max
  881.     end
  882.   end
  883.   #--------------------------------------------------------------------------
  884.   # ● 刷新画面
  885.   #--------------------------------------------------------------------------
  886.   def update
  887.     super
  888.     if self.active
  889.       if Input.repeat?(Input::UP) or Input.repeat?(Input::DOWN)
  890.         Sound.play_cursor
  891.         place = 10 ** (@digits_max - 1 - @index)
  892.         n = @number / place % 10
  893.         @number -= n * place
  894.         n = (n + 1) % 10 if Input.repeat?(Input::UP)
  895.         n = (n + 9) % 10 if Input.repeat?(Input::DOWN)
  896.         @number += n * place
  897.         refresh
  898.       end
  899.       last_index = @index
  900.       if Input.repeat?(Input::RIGHT)
  901.         if @index == @digits_max - 1
  902.           Sound.play_cursor
  903.           if @mode == 0
  904.             if @number == $game_party.gold
  905.               @number = 0
  906.             else
  907.               @number = $game_party.gold
  908.             end
  909.           elsif @mode == 1
  910.             if @number == $game_party.keep_gold
  911.               @number = 0
  912.             else
  913.               @number = $game_party.keep_gold
  914.             end
  915.           end
  916.           refresh
  917.         else
  918.           cursor_right(Input.trigger?(Input::RIGHT))
  919.         end
  920.       end
  921.       if Input.repeat?(Input::LEFT)
  922.         if @index == 0
  923.           Sound.play_cursor
  924.           if @mode == 0
  925.             if @number == $game_party.gold
  926.               @number = 0
  927.             else
  928.               @number = $game_party.gold
  929.             end
  930.           elsif @mode == 1
  931.             if @number == $game_party.keep_gold
  932.               @number = 0
  933.             else
  934.               @number = $game_party.keep_gold
  935.             end
  936.           end
  937.           refresh
  938.         else
  939.           cursor_left(Input.trigger?(Input::LEFT))
  940.         end
  941.       end
  942.       if @index != last_index
  943.         Sound.play_cursor
  944.       end
  945.       update_cursor
  946.     end
  947.   end
  948.   #--------------------------------------------------------------------------
  949.   # ● 刷新
  950.   #--------------------------------------------------------------------------
  951.   def refresh
  952.     self.contents.clear
  953.     self.contents.font.color = normal_color
  954.     s = sprintf("%0*d", @digits_max, @number)
  955.     for i in 0...@digits_max
  956.       self.contents.draw_text(24 + i * 16, 0, 16, WLH, s[i,1], 1)
  957.     end
  958.     self.contents.font.color = system_color
  959.     self.contents.draw_text(24 + (i + 1) * 16, 0, 16, WLH, Vocab::gold)
  960.   end
  961.   #--------------------------------------------------------------------------
  962.   # ● 光标的刷新
  963.   #--------------------------------------------------------------------------
  964.   def update_cursor
  965.     self.cursor_rect.set(24 + @index * 16, 0, 16, WLH)
  966.   end
  967. end

  968. #==============================================================================
  969. # ■ Window_ReserveGold
  970. #------------------------------------------------------------------------------
  971. #  显示保存金额的窗口。
  972. #==============================================================================

  973. class Window_ReserveGold < Window_Base
  974.   #--------------------------------------------------------------------------
  975.   # ● 初期化对象
  976.   #     x : 窗口的 X 坐标
  977.   #     y : 窗口的 Y 坐标
  978.   #--------------------------------------------------------------------------
  979.   def initialize(x, y)
  980.     super(x, y, 272, WLH + 32)
  981.     refresh
  982.   end
  983.   #--------------------------------------------------------------------------
  984.   # ● 刷新
  985.   #--------------------------------------------------------------------------
  986.   def refresh
  987.     self.contents.clear
  988.     draw_currency_value($game_party.keep_gold, 104, 0, 120)
  989.     self.contents.font.color = system_color
  990.     self.contents.draw_text(16, 0, 120, WLH, BBL_RESERVE_SYSTEM::RESERVE_GOLD_NAME)
  991.   end
  992. end

  993. #==============================================================================
  994. # ■ Window_HandGold
  995. #------------------------------------------------------------------------------
  996. #  显示所持金额的窗口。
  997. #==============================================================================

  998. class Window_HandGold < Window_Base
  999.   #--------------------------------------------------------------------------
  1000.   # ● 初期化对象
  1001.   #     x : 窗口的 X 坐标
  1002.   #     y : 窗口的 Y 坐标
  1003.   #--------------------------------------------------------------------------
  1004.   def initialize(x, y)
  1005.     super(x, y, 272, WLH + 32)
  1006.     refresh
  1007.   end
  1008.   #--------------------------------------------------------------------------
  1009.   # ● 刷新
  1010.   #--------------------------------------------------------------------------
  1011.   def refresh
  1012.     self.contents.clear
  1013.     draw_currency_value($game_party.gold, 104, 0, 120)
  1014.     self.contents.font.color = system_color
  1015.     self.contents.draw_text(16, 0, 120, WLH, BBL_RESERVE_SYSTEM::GOLD_NAME)
  1016.   end
  1017. end

  1018. #==============================================================================
  1019. # ■ Window_ReserveCommand
  1020. #------------------------------------------------------------------------------
  1021. #  进行仓库指令选择的窗口。
  1022. #==============================================================================

  1023. class Window_ReserveCommand < Window_Selectable
  1024.   #--------------------------------------------------------------------------
  1025.   # ● 定义实例变量
  1026.   #--------------------------------------------------------------------------
  1027.   attr_reader   :commands                 # 指令
  1028.   #--------------------------------------------------------------------------
  1029.   # ● 初期化对象
  1030.   #     width      : 窗口的宽度
  1031.   #     commands   : 指令字符串的排序
  1032.   #     column_max : 行数 (在2 以上时,横向选项)
  1033.   #     row_max    : 列数 (0:切合指令个数)
  1034.   #     spacing    : 项目横向排列时 空白的部分
  1035.   #--------------------------------------------------------------------------
  1036.   def initialize(width, commands, column_max = 1, row_max = 0, spacing = 32)
  1037.     if row_max == 0
  1038.       row_max = (commands.size + column_max - 1) / column_max
  1039.     end
  1040.     super(0, 0, width, row_max * WLH + 32, spacing)
  1041.     @commands = commands
  1042.     @item_max = commands.size
  1043.     @column_max = column_max
  1044.     refresh
  1045.     self.index = 0
  1046.   end
  1047.   #--------------------------------------------------------------------------
  1048.   # ● 刷新
  1049.   #--------------------------------------------------------------------------
  1050.   def refresh
  1051.     self.contents.clear
  1052.     for i in 0...@item_max
  1053.       draw_item(i)
  1054.     end
  1055.   end
  1056.   #--------------------------------------------------------------------------
  1057.   # ● 项目的描画
  1058.   #     index   : 项目编号
  1059.   #     enabled : 有效标志。false 时会描绘为半透明状
  1060.   #--------------------------------------------------------------------------
  1061.   def draw_item(index, enabled = true)
  1062.     rect = item_rect(index)
  1063.     rect.x += 4
  1064.     rect.width -= 8
  1065.     self.contents.clear_rect(rect)
  1066.     self.contents.font.color = normal_color
  1067.     self.contents.font.color.alpha = enabled ? 255 : 128
  1068.     self.contents.draw_text(rect, @commands[index], 1)
  1069.   end
  1070. end
复制代码

作者: 一箭烂YiJL    时间: 2011-3-23 19:47
这一个可以兼容跟随的:
http://f44.aaa.livedoor.jp/~ytom ... mp;tech=large_party
作者: 强弩之末    时间: 2011-3-25 18:00
回复 强弩之末 的帖子

  大汗……- -
作者: 1224198918    时间: 2011-3-27 10:30
回复 一箭烂YiJL 的帖子

能不能把变成中文操作啊




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1