| 赞 | 3 |
| VIP | |
| 好人卡 | |
| 积分 | 2 |
| 经验 | |
| 最后登录 | 2024-6-13 |
| 在线时间 | 332 小时 |
- 梦石
- 0
- 星屑
- 175
- 在线时间
- 332 小时
- 注册时间
- 2013-7-6
- 回帖
- 316
|
发表于 2015-2-11 22:09:34
|
显示全部楼层
- class Window_ItemCommand < Window_Command
- attr_accessor :calling_window
- def initialize(width, commands)
- super(width, commands)
- @item = nil
- @calling_window = nil
- self.z = 120
- self.active = false
- self.visible = false
- end
- def item=(item)
- @item = item
- refresh
- end
- def refresh
- self.contents.clear
- (0...@item_max).each do |i|
- draw_item(i, normal_color)
- end
- unless @item.is_a?(RPG::Item) && $game_party.item_can_use?(@item.id)
- disable_item(0)
- end
- end
- def adjust_position
- if @calling_window.nil?
- return
- end
- if @calling_window.cursor_y + 32 + self.height < 480
- self.y = @calling_window.cursor_y + 32
- else
- self.y = @calling_window.cursor_y - self.height
- end
- self.x = @calling_window.cursor_x
- end
- end
- class Window_Selectable
- def cursor_x
- cursor_width = self.width / @column_max - 32
- x = @index % @column_max * (cursor_width + 32) + self.x + 16
- return x
- end
- def cursor_y
- y = @index / @column_max * 32 - self.oy + self.y + 16
- return y
- end
- end
- class Window_Dump < Window_Base
- def initialize
- super(0, 0, 176, 96)
- self.contents = Bitmap.new(width - 32, height - 32)
- self.x = 320 - width / 2
- self.y = 240 - height / 2
- self.z = 200
- self.active = false
- self.visible = false
- @Max = 1
- @number = 1
- end
- def set(max)
- @max = max
- @number = 1
- refresh
- end
- def number
- return @number
- end
- def refresh
- self.contents.clear
- self.contents.font.color = system_color
- self.contents.draw_text(0, 0, 144, 32, "输入个数")
- self.contents.font.color = normal_color
- self.contents.draw_text(72, 32, 32, 32, "×")
- self.contents.draw_text(104, 32, 24, 32, @number.to_s, 2)
- self.cursor_rect.set(100, 32, 32, 32)
- end
- def update
- super
- if self.active
- # 光标右 (+1)
- if Input.repeat?(Input::RIGHT) and @number < @max
- $game_system.se_play($data_system.cursor_se)
- @number += 1
- refresh
- end
- # 光标左 (-1)
- if Input.repeat?(Input::LEFT) and @number > 1
- $game_system.se_play($data_system.cursor_se)
- @number -= 1
- refresh
- end
- # 光标上 (+10)
- if Input.repeat?(Input::UP) and @number < @max
- $game_system.se_play($data_system.cursor_se)
- @number = [@number + 10, @max].min
- refresh
- end
- # 光标下 (-10)
- if Input.repeat?(Input::DOWN) and @number > 1
- $game_system.se_play($data_system.cursor_se)
- @number = [@number - 10, 1].max
- refresh
- end
- end
- end
- end
- class Scene_Item
- alias rb_main main
- def main
- @dump_window = Window_Dump.new
- @command_window = Window_ItemCommand.new(108, ["使用", "丢弃"])
- rb_main
- @dump_window.dispose
- @command_window.dispose
- end
- def update
- @command_window.calling_window = @item_window
- @dump_window.update
- @command_window.update
- @help_window.update
- @item_window.update
- @target_window.update
- if @item_window.active
- update_item
- return
- end
- if @target_window.active
- update_target
- return
- end
- if @command_window.active
- update_command
- return
- end
- if @dump_window.active
- update_dump
- return
- end
- end
- def update_item
- if Input.trigger?(Input::B)
- $game_system.se_play($data_system.cancel_se)
- $scene = Scene_Menu.new(0)
- return
- end
- if Input.trigger?(Input::C)
- @item = @item_window.item
- if @item.nil?
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- $game_system.se_play($data_system.decision_se)
- @command_window.item = @item
- @command_window.adjust_position
- @command_window.index = 0
- @command_window.active = true
- @command_window.visible = true
- @item_window.active = false
- return
- end
- end
- def update_command
- if Input.trigger?(Input::B)
- $game_system.se_play($data_system.cancel_se)
- @command_window.visible = false
- @command_window.active = false
- @item_window.active = true
- return
- end
- if Input.trigger?(Input::C)
- case @command_window.index
- when 0
- unless @item.is_a?(RPG::Item) && $game_party.item_can_use?(@item.id)
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- $game_system.se_play($data_system.decision_se)
- if @item.scope >= 3
- @use=true
- @dump_window.set($game_party.item_number(@item.id))
- @dump_window.visible = true
- @dump_window.active = true
- @command_window.visible = false
- @command_window.active = false
- else
- if @item.common_event_id > 0
- $game_temp.common_event_id = @item.common_event_id
- $game_system.se_play(@item.menu_se)
- if @item.consumable
- $game_party.lose_item(@item.id, 1)
- @item_window.draw_item(@item_window.index)
- end
- $scene = Scene_Map.new
- return
- end
- end
- when 1
- case @item
- when RPG::Item
- number = $game_party.item_number(@item.id)
- when RPG::Weapon
- number = $game_party.weapon_number(@item.id)
- when RPG::Armor
- number = $game_party.weapon_number(@item.id)
- end
- $game_system.se_play($data_system.decision_se)
- @use=false
- @dump_window.set(number)
- @dump_window.visible = true
- @dump_window.active = true
- @command_window.visible = false
- @command_window.active = false
- end
- end
- return
- end
- def update_target
- # 按下 B 键的情况下
- if Input.trigger?(Input::B)
- # 演奏取消 SE
- $game_system.se_play($data_system.cancel_se)
- # 由于物品用完而不能使用的场合
- unless $game_party.item_can_use?(@item.id)
- # 再次生成物品窗口的内容
- @item_window.refresh
- end
- # 删除目标窗口
- @item_window.active = true
- @target_window.visible = false
- @target_window.active = false
- return
- end
- # 按下 C 键的情况下
- if Input.trigger?(Input::C)
- # 如果物品用完的情况下
- if $game_party.item_number(@item.id) < @numbersss
- # 演奏冻结 SE
- $game_system.se_play($data_system.buzzer_se)
- return
- end
- # 目标是全体的情况下
- if @target_window.index == -1
- # 对同伴全体应用物品使用效果
- @numbersss.times do
- used = false
- for i in $game_party.actors
- used |= i.item_effect(@item)
- end
- end
- end
- # 目标是单体的情况下
- if @target_window.index >= 0
- # 对目标角色应用物品的使用效果
- @numbersss.times do
- target = $game_party.actors[@target_window.index]
- target.item_effect(@item)
- end
- end
- # 演奏物品使用时的 SE
- $game_system.se_play(@item.menu_se)
- # 消耗品的情况下
- if @item.consumable
- # 使用的物品数减 @numbersss
- $game_party.lose_item(@item.id, @numbersss)
- # 再描绘物品窗口的项目
- @item_window.draw_item(@item_window.index)
- end
- # 再生成目标窗口的内容
- @target_window.refresh
- @target_window.active = false
- @target_window.visible = false
- @dump_window.visible = false
- @item_window.active = true
- @item_window.refresh
- # 全灭的情况下
- if $game_party.all_dead?
- # 切换到游戏结束画面
- $scene = Scene_Gameover.new
- return
- end
- # 公共事件 ID 有效的情况下
- if @item.common_event_id > 0
- # 预约调用公共事件
- $game_temp.common_event_id = @item.common_event_id
- # 切换到地图画面
- $scene = Scene_Map.new
- return
- end
- return
- end
- end
- def update_dump
- if Input.trigger?(Input::B)
- $game_system.se_play($data_system.cancel_se)
- @dump_window.visible = false
- @dump_window.active = false
- @command_window.active = true
- @command_window.visible = true
- return
- end
- if Input.trigger?(Input::C)
- number = @dump_window.number
- if @use
- @numbersss=number
- @dump_window.active = false
- @target_window.x = (@item_window.index + 1) % 2 * 304
- @target_window.visible = true
- @target_window.active = true
- if @item.scope == 4 || @item.scope == 6
- @target_window.index = -1
- else
- @target_window.index = 0
- end
- else
- $game_system.se_play($data_system.shop_se)
- case @item
- when RPG::Item
- $game_party.lose_item(@item.id, number)
- when RPG::Weapon
- $game_party.lose_weapon(@item.id, number)
- when RPG::Armor
- $game_party.lose_armor(@item.id, number)
- end
- @dump_window.visible = false
- @dump_window.active = false
- @item_window.active = true
- @item_window.refresh
- return
- end
- end
- end
- end
复制代码 改好了,看看怎么样,使用数量只能对可使用物品有效。 |
评分
-
查看全部评分
|