设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 1109|回复: 0
打印 上一主题 下一主题

[已经过期] 仓库和烛光系统冲突 求解决方案

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
111 小时
注册时间
2011-10-1
帖子
217
跳转到指定楼层
1
发表于 2012-1-8 05:23:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  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


复制代码
烛光:↓

  1. # 设置烛光种类数
  2. CANDLE_NUMBER = 2

  3. # 设置控制开关,不用的话设0
  4. CANDLE_SWITCH = 10

  5. #--------------------------------------------------------------------------
  6. # ● 开启或关闭烛光
  7. #--------------------------------------------------------------------------
  8. def candlelight(on=true)
  9.   $candlelight_on = $game_switches[CANDLE_SWITCH] = on
  10.   if on
  11.     # 生成黑色画面
  12.     $black_rect = Sprite.new
  13.     $black_rect.bitmap = Bitmap.new(544, 416)
  14.     $black_rect.bitmap.fill_rect(0, 0, 544, 416, Color.new(255, 255, 255))
  15.     $black_rect.blend_type = 2
  16.    
  17.     # 黑色透明度,决定黑暗的程度
  18.     $black_rect.opacity = 255
  19.    
  20.     # 生成烛光
  21.     $candle_rect = Array.new(CANDLE_NUMBER+1).map{|sprite| sprite=Sprite.new}
  22. #===============================================================================]
  23. #                               烛光在此设置
  24. #===============================================================================
  25.     # 指定第一种烛光
  26.     $candle_rect[1].bitmap = Cache.picture("write1")
  27.    
  28.     # 指定第二种烛光
  29.     $candle_rect[2].bitmap = Cache.picture("write2")
  30. #===============================================================================
  31. #===============================================================================
  32.     $candle_rect.each {|sprite|
  33.         if sprite.bitmap
  34.           sprite.visible = false
  35.           sprite.ox, sprite.oy = sprite.bitmap.width/2, sprite.bitmap.height/2
  36.         end}
  37.   else
  38.     # 释放黑色画面和所有烛光
  39.     $black_rect.dispose
  40.     $candle_rect.each {|sprite| sprite.dispose}
  41.     $game_lighterlist.clear
  42.   end
  43. end
  44. #--------------------------------------------------------------------------
  45. # ● 设置有烛光的角色
  46. #     candle_index : 烛光编号
  47. #     object       : 角色编号,可以为数字或是数字数组
  48. #--------------------------------------------------------------------------
  49. def candles(candle_index, object)
  50.   $game_lighterlist ||= []
  51.   $game_lighterlist[candle_index] ||= []
  52.   if object.is_a?(Integer)
  53.     $game_lighterlist[candle_index] << object
  54.   elsif object.is_a?(Array)
  55.     $game_lighterlist[candle_index] += object
  56.   end
  57.   # 移除重复的角色
  58.   $game_lighterlist[candle_index].uniq!
  59.   # 开启烛光功能
  60.   candlelight unless $candlelight_on
  61. end
  62. #--------------------------------------------------------------------------
  63. # ● 初始化烛光
  64. #--------------------------------------------------------------------------
  65. def initialize_candle
  66.   for k in 1...$candle_rect.size
  67.     next unless $game_lighterlist[k]
  68.     for j in $game_lighterlist[k]
  69.       ch = j == 0 ? $game_player : $game_map.events[j]
  70.       $candle_rect[k].x = ch.screen_x
  71.       $candle_rect[k].y = ch.screen_y - 16
  72.       lsx = $candle_rect[k].x - $candle_rect[k].bitmap.width / 2
  73.       lsy = $candle_rect[k].y - $candle_rect[k].bitmap.height / 2
  74.       $black_rect.bitmap.blt(lsx, lsy, $candle_rect[k].bitmap, $black_rect.bitmap.rect)
  75.     end
  76.   end
  77. end
  78. #--------------------------------------------------------------------------
  79. # ● 更新烛光
  80. #--------------------------------------------------------------------------
  81. def update_candle
  82.   if $game_lighterlist != []
  83.     light = []
  84.     $game_lighterlist.each{|i| light+=i if i}
  85.     light.each do |i|
  86.       ch = i == 0 ? $game_player : $game_map.events[i]
  87.       unless ch.moving_judge?
  88.         $black_rect.bitmap.fill_rect(0, 0, 544, 416, Color.new(200, 200, 200))
  89.         initialize_candle
  90.       end
  91.       break
  92.     end
  93.   end
  94. end

  95. class Game_Character
  96.   #--------------------------------------------------------------------------
  97.   # ● 判断移动
  98.   #--------------------------------------------------------------------------
  99.   def moving_judge?
  100.     return (!stopping? or (@pattern != @original_pattern))
  101.   end
  102. end
  103. class Game_Map
  104.   #--------------------------------------------------------------------------
  105.   # ● 刷新烛光
  106.   #--------------------------------------------------------------------------
  107.   alias update_candle_system update
  108.   def update
  109.     if $candlelight_on
  110.       update_candle
  111.       $candlelight_on = false unless $game_switches[CANDLE_SWITCH]
  112.       candlelight(false) unless $candlelight_on
  113.     end
  114.     update_candle_system
  115.   end
  116. end   
  117. class Scene_Map < Scene_Base
  118.   #--------------------------------------------------------------------------
  119.   # ● 生成烛光
  120.   #--------------------------------------------------------------------------
  121.   alias candle_system_start start
  122.   def start
  123.     candle_system_start
  124.     candlelight if $candlelight_on
  125.     initialize_candle if $candlelight_on
复制代码
请问这是怎么了?
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-12-28 23:17

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表