#============================================================================= # (测试)vx复杂装备系统之 装备升级功能 by 沉影不器 #----------------------------------------------------------------------------- # 此版本侧重于捕捉bug,欢迎反馈. #============================================================================= # 参数设定如下 $scene = Scene_UpEquip.new #============================================================================= module Game_Equip ## 能力升级基数(倍数) BaseAbility = 0.03 ## 每级价格提高基数(倍数) BasePrice = 0.3 ## 是否保证成功 UpGrade_Absoluteness = true ## 每级成功率基数(百分比,用于逐级下降) BaseSucceed = 0.8 ## 最大等级 MaxLevel = 10 ## 需金钱基数(与本身价格的倍数) GoldNeed = 0.3 ## 需物品id => 数量 ItemsNeed = {17=>1} end #============================================================================= # 复杂装备模块 #============================================================================= module Game_Equip #-------------------------------------------------------------------------- # ● 处理价格 #-------------------------------------------------------------------------- def self.setup_price(item, price) item.price = $base_weapons[item.base_id].price item.price += [(item.price * BasePrice).round, 1].max item.price += price end #-------------------------------------------------------------------------- # ● 升级是否成功? #-------------------------------------------------------------------------- def self.upgradesucceed?(lv) return true if UpGrade_Absoluteness new_lv = lv.nil? ? 1 : lv + 1 return false if new_lv > MaxLevel return BaseSucceed**new_lv > rand(0) end #-------------------------------------------------------------------------- # ● 装备重生 # equip: 装备 #-------------------------------------------------------------------------- def self.reini(equip) return if equip.nil? result = Marshal.load(Marshal.dump(equip)) result.base_id = equip.id setup_price(result, 0) case result when RPG::Weapon result.id = $data_weapons.size ##result.name += result.id.to_s $data_weapons.push result when RPG::Armor result.id = $data_armors.size ##result.name += result.id.to_s $data_armors.push result end return result end #-------------------------------------------------------------------------- # ● 直接指定装备等级 # equip: 装备 # lv: 等级 #-------------------------------------------------------------------------- def self.level(equip, lv) equip.level = 1 if equip.level.nil? n = lv - equip.level ## 等级更低时返回 return if n < 0 n.times{equip = self.upgrade(equip, true)} return equip end #-------------------------------------------------------------------------- # ● 装备升级 # equip: 装备 #-------------------------------------------------------------------------- def self.upgrade(equip, abs = false) return unless abs || upgradesucceed?(equip.level) case equip when RPG::Weapon return if equip.level == MaxLevel equip.level += 1 if equip.level == 2 equip.name.concat "(Lv.2)" elsif equip.level > 2 equip.name.sub!(/\(Lv\.([0-9]+)\)/) {"(Lv.#{equip.level})"} end equip.atk += [(equip.atk * BaseAbility).round, 1].max setup_price(equip, 0) when RPG::Armor return if equip.level == MaxLevel equip.level += 1 if equip.level == 2 equip.name.concat "(Lv.2)" elsif equip.level > 2 equip.name.sub!(/\(Lv\.([0-9]+)\)/) {"(Lv.#{equip.level})"} end equip.def += [(equip.def * BaseAbility).round, 1].max setup_price(equip, 0) end return equip end end #============================================================================== # ■ RPG::BaseItem #============================================================================== module RPG class BaseItem def initialize @id = 0 @name = "" @icon_index = 0 @description = "" @note = "" @base_id = 0 [url=home.php?mod=space&uid=22147]@level[/url] = 1 end attr_accessor :id attr_accessor :name attr_accessor :icon_index attr_accessor :description attr_accessor :note attr_accessor :base_id attr_accessor :level end end #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● 设置 # actor_id : 角色 ID #-------------------------------------------------------------------------- def setup(actor_id) actor = $data_actors[actor_id] @actor_id = actor_id @name = actor.name @character_name = actor.character_name @character_index = actor.character_index @face_name = actor.face_name @face_index = actor.face_index @class_id = actor.class_id @weapon_id = actor.weapon_id @armor1_id = actor.armor1_id @armor2_id = actor.armor2_id @armor3_id = actor.armor3_id @armor4_id = actor.armor4_id [url=home.php?mod=space&uid=22147]@level[/url] = actor.initial_level @exp_list = Array.new(101) make_exp_list [url=home.php?mod=space&uid=13302]@exp[/url] = @exp_list[@level] @skills = [] for i in self.class.learnings learn_skill(i.skill_id) if i.level <= @level end clear_extra_values recover_all ## 生成新装备id reset_equip_id end #-------------------------------------------------------------------------- # ● 装备重设 #-------------------------------------------------------------------------- def reset_equip_id if @weapon_id != 0 item = Game_Equip.reini($base_weapons[@weapon_id]) unless item.nil? $data_weapons.push item @weapon_id = item.id end end if @armor1_id != 0 if two_swords_style####two_hands_legal? item = Game_Equip.reini($base_weapons[@armor1_id]) unless item.nil? $data_weapons.push item @armor1_id = item.id end else item = Game_Equip.reini($base_armors[@armor1_id]) unless item.nil? $data_armors.push item @armor1_id = item.id end end end if @armor2_id != 0 item = $base_armors[@armor2_id] unless item.nil? item = Game_Equip.reini(item) $data_armors.push item @armor2_id = item.id end end if @armor3_id != 0 item = $base_armors[@armor3_id] unless item.nil? item = Game_Equip.reini(item) $data_armors.push item @armor3_id = item.id end end if @armor4_id != 0 item = $base_armors[@armor4_id] unless item.nil? item = Game_Equip.reini(item) $data_armors.push item @armor4_id = item.id end end end #-------------------------------------------------------------------------- # ● 判断是否可以装备 # item : 物品 # base : 是否读取母版数据 #-------------------------------------------------------------------------- def equippable?(item, base = true) id = base ? item.base_id : item.id if item.is_a?(RPG::Weapon) return self.class.weapon_set.include?(id) elsif item.is_a?(RPG::Armor) return false if two_swords_style and item.kind == 0 return self.class.armor_set.include?(id) end return false end end #============================================================================== # ■ Game_Party #============================================================================== class Game_Party < Game_Unit #-------------------------------------------------------------------------- # ● 判断持有的物品 # item : 物品 # include_equip : 包括装备品 #-------------------------------------------------------------------------- def has_item_by_base_id?(item, include_equip = false) for i in items return true if i.base_id == item.id end if include_equip for actor in members for e in actor.equips return true if e.base_id == item.id end end end return false end #-------------------------------------------------------------------------- # ● 获得物品 # item : 物品 # n : 个数 #-------------------------------------------------------------------------- def gain_reini_item(item, n, include_equip = false) if n < 0 lose_item(item, -n, include_equip = false) else case item when RPG::Item number = item_number(item) @items[item.id] = [[number + n, 0].max, 99].min when RPG::Weapon for i in 0...n w = Game_Equip.reini(item) @weapons[w.id] = 1 end when RPG::Armor for i in 0...n a = Game_Equip.reini(item) @armors[a.id] = 1 end end end end #-------------------------------------------------------------------------- # ● 减少物品 (减少) # item : 物品 # n : 个数 # include_equip : 包括装备品 #-------------------------------------------------------------------------- def lose_reini_item(item, n, include_equip = false) number = item_number(item) case item when RPG::Item @items[item.id] = [[number - n, 0].max, 99].min when RPG::Weapon @weapons[item.id] = [[number - n, 0].max, 99].min when RPG::Armor @armors[item.id] = [[number - n, 0].max, 99].min end n -= number if include_equip and n > 0 for actor in members while n > 0 and actor.equips.include?(item) actor.discard_equip(item) n -= 1 end end end end end #============================================================================== # ■ Game_Troop #============================================================================== class Game_Troop < Game_Unit #-------------------------------------------------------------------------- # ● 敌人角色名称后的文字表 #-------------------------------------------------------------------------- LETTER_TABLE = [ 'A','B','C','D','E','F','G','H','I','J', 'K','L','M','N','O','P','Q','R','S','T', 'U','V','W','X','Y','Z'] #-------------------------------------------------------------------------- # ● 生成掉落物品队列 #-------------------------------------------------------------------------- def make_drop_items drop_items = [] for enemy in dead_members for di in [enemy.drop_item1, enemy.drop_item2] next if di.kind == 0 next if rand(di.denominator) != 0 if di.kind == 1 drop_items.push($data_items[di.item_id]) elsif di.kind == 2 drop_items.push($base_weapons[di.weapon_id]) elsif di.kind == 3 drop_items.push($base_armors[di.armor_id]) end end end return drop_items end end #============================================================================== # ■ Game_Interpreter #============================================================================== class Game_Interpreter #-------------------------------------------------------------------------- # ● 计算操作的值 # operation : 操作 (0:增加 1:减少) # operand_type : 运算域类型 (0:常量 1:变量) # operand : 运算域 (数值为变量 ID) #-------------------------------------------------------------------------- def operate_value(operation, operand_type, operand) if operand_type == 0 value = operand else value = $game_variables[operand] end if operation == 1 value = -value end return value end #-------------------------------------------------------------------------- # ● 条件分歧 #-------------------------------------------------------------------------- def command_111 result = false case @params[0] when 0 # 开关 result = ($game_switches[@params[1]] == (@params[2] == 0)) when 1 # 变量 value1 = $game_variables[@params[1]] if @params[2] == 0 value2 = @params[3] else value2 = $game_variables[@params[3]] end case @params[4] when 0 # 相等 result = (value1 == value2) when 1 # 大于等于 result = (value1 >= value2) when 2 # 小于等于 result = (value1 <= value2) when 3 # 大于 result = (value1 > value2) when 4 # 小于 result = (value1 < value2) when 5 # 不等于 result = (value1 != value2) end when 2 # 自我开关 if @original_event_id > 0 key = [@map_id, @original_event_id, @params[1]] if @params[2] == 0 result = ($game_self_switches[key] == true) else result = ($game_self_switches[key] != true) end end when 3 # 计时器 if $game_system.timer_working sec = $game_system.timer / Graphics.frame_rate if @params[2] == 0 result = (sec >= @params[1]) else result = (sec <= @params[1]) end end when 4 # 角色 actor = $game_actors[@params[1]] if actor != nil case @params[2] when 0 # 是同伴 result = ($game_party.members.include?(actor)) when 1 # 姓名 result = (actor.name == @params[3]) when 2 # 特技 result = (actor.skill_learn?($data_skills[@params[3]])) when 3 # 武器 ## 判断是否符合母版id actor.weapons.each do |weapon| if weapon.base_id == @params[3] result = true break end end when 4 # 防具 ## 判断是否符合母版id actor.armors.each do |armor| if armor.base_id == @params[3] result = true break end end when 5 # 状态 result = (actor.state?(@params[3])) end end when 5 # 敌方角色 enemy = $game_troop.members[@params[1]] if enemy != nil case @params[2] when 0 # 出现 result = (enemy.exist?) when 1 # 状态 result = (enemy.state?(@params[3])) end end when 6 # 角色 character = get_character(@params[1]) if character != nil result = (character.direction == @params[2]) end when 7 # 金钱 if @params[2] == 0 result = ($game_party.gold >= @params[1]) else result = ($game_party.gold <= @params[1]) end when 8 # 物品 result = $game_party.has_item?($data_items[@params[1]]) when 9 # 武器 result = $game_party.has_item_by_base_id?($base_weapons[@params[1]], @params[2]) when 10 # 防具 result = $game_party.has_item_by_base_id?($base_armors[@params[1]], @params[2]) when 11 # 按钮 result = Input.press?(@params[1]) when 12 # 脚本 result = eval(@params[1]) when 13 # 交通工具 result = ($game_player.vehicle_type == @params[1]) end @branch[@indent] = result # 将判断结果放置在缓存中 if @branch[@indent] == true @branch.delete(@indent) return true end return command_skip end #-------------------------------------------------------------------------- # ● 计算装备操作的值 # operand_type : 运算域类型 (0:常量 1:变量) # operand : 运算域 (数值为变量 ID) #-------------------------------------------------------------------------- def opera_equip_value(operation, operand_type, operand) if operand_type == 0 value = operand else value = $game_variables[operand] end return value end #-------------------------------------------------------------------------- # ● 增减武器 #-------------------------------------------------------------------------- def command_127 value = operate_value(@params[1], @params[2], @params[3]) if @params[1] == 0 $game_party.gain_reini_item($base_weapons[@params[0]], value.abs, @params[4]) else $game_party.lose_reini_item($base_weapons[@params[0]], value.abs, @params[4]) end return true end #-------------------------------------------------------------------------- # ● 增减防具 #-------------------------------------------------------------------------- def command_128 value = operate_value(@params[1], @params[2], @params[3]) if @params[1] == 0 $game_party.gain_reini_item($base_armors[@params[0]], value.abs, @params[4]) else $game_party.lose_reini_item($base_armors[@params[0]], value.abs, @params[4]) end return true end #-------------------------------------------------------------------------- # ● 更改装备 #-------------------------------------------------------------------------- def command_319 actor = $game_actors[@params[0]] if actor != nil actor.change_equip_by_id(@params[1], @params[2]) end return true end end #============================================================================== # ■ Window_ShopBuy #============================================================================== class Window_ShopBuy < Window_Selectable #-------------------------------------------------------------------------- # ● 刷新 #-------------------------------------------------------------------------- def refresh @data = [] for goods_item in @shop_goods case goods_item[0] when 0 item = $base_items[goods_item[1]] when 1 item = $base_weapons[goods_item[1]] when 2 item = $base_armors[goods_item[1]] end if item != nil @data.push(item) end end @item_max = @data.size create_contents for i in 0...@item_max draw_item(i) end end end #============================================================================== # ■ Window_ShopStatus #============================================================================== class Window_ShopStatus < Window_Base #-------------------------------------------------------------------------- # ● 描绘角色现在装备的能力值变化 # actor : 角色 # x : 描画目标 X 坐标 # y : 描画目标 Y 坐标 #-------------------------------------------------------------------------- def draw_actor_parameter_change(actor, x, y) return if @item.is_a?(RPG::Item) enabled = actor.equippable?(@item, false) self.contents.font.color = normal_color self.contents.font.color.alpha = enabled ? 255 : 128 self.contents.draw_text(x, y, 200, WLH, actor.name) if @item.is_a?(RPG::Weapon) item1 = weaker_weapon(actor) elsif actor.two_swords_style and @item.kind == 0 item1 = nil else item1 = actor.equips[1 + @item.kind] end if enabled if @item.is_a?(RPG::Weapon) atk1 = item1 == nil ? 0 : item1.atk atk2 = @item == nil ? 0 : @item.atk change = atk2 - atk1 else def1 = item1 == nil ? 0 : item1.def def2 = @item == nil ? 0 : @item.def change = def2 - def1 end self.contents.draw_text(x, y, 200, WLH, sprintf("%+d", change), 2) end draw_item_name(item1, x, y + WLH, enabled) end end #============================================================================== # ■ Window_ScrEquip #============================================================================== class Window_ScrEquip < Window_Selectable attr_accessor :equip_only #-------------------------------------------------------------------------- # ● 初始化对象 # x : 窗口的 X 坐标 # y : 窗口的 Y 坐标 # width : 窗口的宽 # height : 窗口的高 #-------------------------------------------------------------------------- def initialize(x, y, width, height) super(x, y, width, height) @column_max = 1 @equip_only = true refresh end #-------------------------------------------------------------------------- # ● 取得物品 #-------------------------------------------------------------------------- def item return @data[self.index] end #-------------------------------------------------------------------------- # ● 显示是否可以使用物品 # item : 物品 #-------------------------------------------------------------------------- def enable?(item) return true end #-------------------------------------------------------------------------- # ● 列表中包含的物品 # item : 物品 #-------------------------------------------------------------------------- def include?(item) return true if item == nil if @equip_only return false if item.is_a? RPG::Item else return false unless item.is_a? RPG::Item end return true end #-------------------------------------------------------------------------- # ● 刷新 #-------------------------------------------------------------------------- def refresh self.index = 0 @data = [] for item in $game_party.items next unless include?(item) @data.push(item) end @data.push(nil) if include?(nil) @item_max = @data.size create_contents for i in 0...@item_max draw_item(i) end end #-------------------------------------------------------------------------- # ● 描绘项目 # index : 项目编号 #-------------------------------------------------------------------------- def draw_item(index) rect = item_rect(index) self.contents.clear_rect(rect) item = @data[index] if item != nil number = $game_party.item_number(item) rect.width -= 4 draw_item_name(item, rect.x, rect.y) self.contents.draw_text(rect, sprintf(":%2d", number), 2) end end #-------------------------------------------------------------------------- # ● 更新帮助文本 #-------------------------------------------------------------------------- def update_help @help_window.set_text(item == nil ? "" : item.description) end end #============================================================================== # ■ Window_DestEquip #equip add clear items #============================================================================== class Window_DestEquip < Window_Base #-------------------------------------------------------------------------- # ● 定义实例变量 #-------------------------------------------------------------------------- attr_reader :equip attr_reader :items #-------------------------------------------------------------------------- # ● 初始化对象 # x : 窗口的 X 坐标 # y : 窗口的 Y 坐标 # width : 窗口的宽 # height : 窗口的高 #-------------------------------------------------------------------------- def initialize(x, y, width, height) super(x, y, width, height) clear end #-------------------------------------------------------------------------- # ● 添加物品 #-------------------------------------------------------------------------- def add(item, n = 1) $game_party.lose_item(item, n) if @index == -1 @equip = item else number = @items[item].to_i @items[item] = [[number + n, 0].max, 99].min end @index += 1 draw_item(item, n) end #-------------------------------------------------------------------------- # ● 清除物品 #-------------------------------------------------------------------------- def clear @equip = nil @items = {} @index = -1 self.contents.clear self.contents.font.color = system_color self.contents.draw_text(0,0,self.contents.width-16,WLH,"请放入升级装备:") self.contents.draw_text(0,WLH*2,self.contents.width-16,WLH,"请放入炼制物品:") end #-------------------------------------------------------------------------- # ● 归还物品 #-------------------------------------------------------------------------- def revert $game_party.gain_item(@equip, 1) @items.each{|i,n| $game_party.gain_item(i, n)} clear end #-------------------------------------------------------------------------- # ● 描绘项目 # index : 项目编号 #-------------------------------------------------------------------------- def draw_item(item, n) rect = Rect.new(4,WLH+WLH*@index,self.contents.width-8, WLH) rect.y += WLH if @index >0 ##self.contents.clear_rect(rect) if item != nil ##rect.width -= 4 draw_item_name(item, rect.x, rect.y) self.contents.draw_text(rect, sprintf(":%2d", n), 2) end end #-------------------------------------------------------------------------- # ● 更新帮助文本 #-------------------------------------------------------------------------- def update_help @help_window.set_text(item == nil ? "" : item.description) end end #============================================================================== # ■ Window_EquipNumber #============================================================================== class Window_EquipNumber < Window_Base #-------------------------------------------------------------------------- # ● 初始化对象 # x : 窗口的 X 坐标 # y : 窗口的 Y 坐标 #-------------------------------------------------------------------------- def initialize(x, y) super(x, y, 272, 304) @item = nil [url=home.php?mod=space&uid=25307]@Max[/url] = 1 [url=home.php?mod=space&uid=27178]@Number[/url] = 1 end #-------------------------------------------------------------------------- # ● 设置物品、最大个数 #-------------------------------------------------------------------------- def set(item, max) @item = item [url=home.php?mod=space&uid=25307]@Max[/url] = max [url=home.php?mod=space&uid=27178]@Number[/url] = 1 refresh end #-------------------------------------------------------------------------- # ● 设置输入个数 #-------------------------------------------------------------------------- def number return @number end #-------------------------------------------------------------------------- # ● 刷新 #-------------------------------------------------------------------------- def refresh y = 96 self.contents.clear draw_item_name(@item, 0, y) self.contents.font.color = normal_color self.contents.draw_text(212-32, y, 20, WLH, "×") self.contents.draw_text(248-32, y, 20, WLH, @number, 2) self.cursor_rect.set(244-32, y, 28, WLH) end #-------------------------------------------------------------------------- # ● 更新画面 #-------------------------------------------------------------------------- def update super if self.active last_number = @number if Input.repeat?(Input::RIGHT) and [url=home.php?mod=space&uid=27178]@Number[/url] < @max @number += 1 end if Input.repeat?(Input::LEFT) and @number > 1 @number -= 1 end if Input.repeat?(Input::UP) and @number < @max @number = [@number + 10, @max].min end if Input.repeat?(Input::DOWN) and @number > 1 @number = [@number - 10, 1].max end if @number != last_number Sound.play_cursor refresh end end end end #============================================================================== # ■ Scene_UpEquip #============================================================================== class Scene_UpEquip < Scene_Base include Game_Equip #-------------------------------------------------------------------------- # ● 开始处理 #-------------------------------------------------------------------------- def start super create_menu_background create_command_window @help_window = Window_Help.new @gold_window = Window_Gold.new(96+16, 56) @gold_window.opacity = 0 @scr_window = Window_ScrEquip.new(0,112,272,304) @scr_window.active = true @scr_window.help_window = @help_window @dest_window = Window_DestEquip.new(272,56,272,304+56) @number_window = Window_EquipNumber.new(0, 112) @number_window.active = false @number_window.visible = false @result_window = Window_Base.new(56,56,384,80) @result_window.active = false @result_window.visible = false end #-------------------------------------------------------------------------- # ● 结束处理 #-------------------------------------------------------------------------- def terminate super dispose_menu_background dispose_command_window @help_window.dispose @gold_window.dispose @scr_window.dispose @dest_window.dispose @number_window.dispose end #-------------------------------------------------------------------------- # ● 更新画面 #-------------------------------------------------------------------------- def update super update_menu_background @help_window.update @command_window.update @gold_window.update @scr_window.update @dest_window.update @number_window.update if @command_window.active @scr_window.contents_opacity = 128 @command_window.contents_opacity = 255 update_command_selection elsif @scr_window.active @scr_window.contents_opacity = 255 @command_window.contents_opacity = 128 update_item_selection elsif @number_window.active update_number_input elsif @result_window.active update_result_window end end #-------------------------------------------------------------------------- # ● 生成指令窗口 #-------------------------------------------------------------------------- def create_command_window s1 = "升级" s2 = "退出" @command_window = Window_Command.new(272, [s1, s2], 4, 0, 8) @command_window.y = 56 @command_window.active = false @command_window.contents_opacity = 128 end #-------------------------------------------------------------------------- # ● 释放指令窗口 #-------------------------------------------------------------------------- def dispose_command_window @command_window.dispose end #-------------------------------------------------------------------------- # ● 是否满足装备升级条件? #-------------------------------------------------------------------------- def upgradeable?(equip) return false if equip.nil? if equip.is_a?(RPG::Weapon) || equip.is_a?(RPG::Armor) and equip.level.nil? equip.level = 1 end price = (equip.price * (GoldNeed ** equip.level)).round return false if $game_party.gold < price ItemsNeed.each do |id,n| return false if @dest_window.items[$data_items[id]].nil? return false if @dest_window.items[$data_items[id]] < n end ## 扣钱 $game_party.lose_gold(price) return true end #-------------------------------------------------------------------------- # ● 显示结果(包括处理金钱物品) #-------------------------------------------------------------------------- def show_result @result_window.active = true @result_window.visible = true ###@scr_window.refresh unless upgradeable?(@dest_window.equip) @result_window.contents.clear @result_window.contents.draw_text(0,0,352,24,"材料或金钱不足!", 1) @result_window.contents.draw_text(0,24,352,24,"物品已自动归还.", 1) @dest_window.revert Sound.play_actor_collapse ## 直接返回 return end msg = Game_Equip.upgrade(@dest_window.equip) case msg when RPG::Weapon s = "攻击力提升到(#{msg.atk})" @result_window.contents.clear @result_window.contents.draw_text(0, 0, 352, 24, "#{msg.name}升级成功!") @result_window.contents.draw_text(4, 24, 352-4, 24, s) $game_party.gain_item(msg, 1) Sound.play_shop when RPG::Armor s = "防御力提升到(#{msg.def})" @result_window.contents.clear @result_window.contents.draw_text(0, 0, 352, 24, "#{msg.name}升级成功!") @result_window.contents.draw_text(4, 24, 352-4, 24, s) $game_party.gain_item(msg, 1) Sound.play_shop else @result_window.contents.clear @result_window.contents.draw_text(0,0,352,24,"升级失败, 物品已损坏!", 1) Sound.play_actor_collapse end @dest_window.clear end #-------------------------------------------------------------------------- # ● 更新帮助文本 #-------------------------------------------------------------------------- def update_help(text) @help_window.set_text(text) end #-------------------------------------------------------------------------- # ● 更新指令窗口 #-------------------------------------------------------------------------- def update_command_selection case @command_window.index when 0 update_help("确定键执行装备升级") when 1 update_help("退出升级界面") end if Input.trigger?(Input::B) ## 重来 Sound.play_cancel @scr_window.active = true @command_window.active = false elsif Input.trigger?(Input::C) case @command_window.index when 0 # 升级 Sound.play_decision @command_window.active = false @scr_window.active = false ######### 显示升级结果,归还物品 show_result when 1 # 退出 Sound.play_decision @dest_window.revert $scene = Scene_Map.new end end end #-------------------------------------------------------------------------- # ● 更新选择物品 #-------------------------------------------------------------------------- def update_item_selection if Input.trigger?(Input::B) Sound.play_cancel @command_window.active = true @scr_window.active = false ###@help_window.set_text("") return end if Input.trigger?(Input::C) @item = @scr_window.item number = $game_party.item_number(@item) if @item == nil or number == 0 Sound.play_buzzer else Sound.play_decision ##### 传递物品给容器栏 if number > 1 @scr_window.active = false @number_window.set(@item, number) @number_window.active = true @number_window.visible = true else Sound.play_shop @dest_window.add(@scr_window.item, 1) @scr_window.equip_only = false @scr_window.refresh end end end end #-------------------------------------------------------------------------- # ● 更新输入个数 #-------------------------------------------------------------------------- def update_number_input if Input.trigger?(Input::B) cancel_number_input elsif Input.trigger?(Input::C) decide_number_input end end #-------------------------------------------------------------------------- # ● 更新结果窗体 #-------------------------------------------------------------------------- def update_result_window if Input.trigger?(Input::B) or Input.trigger?(Input::C) Sound.play_decision @scr_window.equip_only = true @scr_window.refresh @scr_window.active = true @result_window.active = false @result_window.visible = false end end #-------------------------------------------------------------------------- # ● 取消输入个数 #-------------------------------------------------------------------------- def cancel_number_input Sound.play_cancel @number_window.active = false @number_window.visible = false @scr_window.active = true @scr_window.visible = true end #-------------------------------------------------------------------------- # ● 确定输入个数 #-------------------------------------------------------------------------- def decide_number_input Sound.play_shop @number_window.active = false @number_window.visible = false @dest_window.add(@item, @number_window.number) @scr_window.equip_only = false @scr_window.refresh @scr_window.active = true end end #============================================================================== # ■ Scene_File #============================================================================== class Scene_File < Scene_Base #-------------------------------------------------------------------------- # ● 写入存档数据 # file : 写入文件用对象 (已经打开) #-------------------------------------------------------------------------- def write_save_data(file) characters = [] for actor in $game_party.members characters.push([actor.character_name, actor.character_index]) end $game_system.save_count += 1 $game_system.version_id = $data_system.version_id @last_bgm = RPG::BGM::last @last_bgs = RPG::BGS::last Marshal.dump(characters, file) Marshal.dump(Graphics.frame_count, file) Marshal.dump(@last_bgm, file) Marshal.dump(@last_bgs, file) Marshal.dump($game_system, file) Marshal.dump($game_message, file) Marshal.dump($game_switches, file) Marshal.dump($game_variables, file) Marshal.dump($game_self_switches, file) Marshal.dump($game_actors, file) Marshal.dump($game_party, file) Marshal.dump($game_troop, file) Marshal.dump($game_map, file) Marshal.dump($game_player, file) Marshal.dump($data_weapons, file) Marshal.dump($data_armors, file) end #-------------------------------------------------------------------------- # ● 读取存档数据 # file : 读取文件用对象 (已经打开) #-------------------------------------------------------------------------- def read_save_data(file) characters = Marshal.load(file) Graphics.frame_count = Marshal.load(file) @last_bgm = Marshal.load(file) @last_bgs = Marshal.load(file) $game_system = Marshal.load(file) $game_message = Marshal.load(file) $game_switches = Marshal.load(file) $game_variables = Marshal.load(file) $game_self_switches = Marshal.load(file) $game_actors = Marshal.load(file) $game_party = Marshal.load(file) $game_troop = Marshal.load(file) $game_map = Marshal.load(file) $game_player = Marshal.load(file) $data_weapons = Marshal.load(file) $data_armors = Marshal.load(file) if $game_system.version_id != $data_system.version_id $game_map.setup($game_map.map_id) $game_player.center($game_player.x, $game_player.y) end end end #============================================================================== # ■ Scene_Shop #============================================================================== class Scene_Shop < Scene_Base #-------------------------------------------------------------------------- # ● 确定输入个数 #-------------------------------------------------------------------------- def decide_number_input Sound.play_shop @number_window.active = false @number_window.visible = false case @command_window.index when 0 # 购买 $game_party.lose_gold(@number_window.number * @item.price) $game_party.gain_reini_item(@item, @number_window.number) @gold_window.refresh @buy_window.refresh @status_window.refresh @buy_window.active = true @buy_window.visible = true when 1 # 卖出 $game_party.gain_gold(@number_window.number * (@item.price / 2)) $game_party.lose_reini_item(@item, @number_window.number) @gold_window.refresh @sell_window.refresh @status_window.refresh @sell_window.active = true @sell_window.visible = true @status_window.visible = false end end end #============================================================================== # ■ Scene_Title #============================================================================== class Scene_Title < Scene_Base #-------------------------------------------------------------------------- # ● 载入数据库 #-------------------------------------------------------------------------- def load_database $data_actors = load_data("Data/Actors.rvdata") $data_classes = load_data("Data/Classes.rvdata") $data_skills = load_data("Data/Skills.rvdata") $data_items = load_data("Data/Items.rvdata") $base_weapons = load_data("Data/Weapons.rvdata") $base_armors = load_data("Data/Armors.rvdata") $data_enemies = load_data("Data/Enemies.rvdata") $data_troops = load_data("Data/Troops.rvdata") $data_states = load_data("Data/States.rvdata") $data_animations = load_data("Data/Animations.rvdata") $data_common_events = load_data("Data/CommonEvents.rvdata") $data_system = load_data("Data/System.rvdata") $data_areas = load_data("Data/Areas.rvdata") $data_weapons = [nil] $data_armors = [nil] end #-------------------------------------------------------------------------- # ● 载入战斗测试用的数据库 #-------------------------------------------------------------------------- def load_bt_database $data_actors = load_data("Data/BT_Actors.rvdata") $data_classes = load_data("Data/BT_Classes.rvdata") $data_skills = load_data("Data/BT_Skills.rvdata") $data_items = load_data("Data/BT_Items.rvdata") $data_weapons = load_data("Data/BT_Weapons.rvdata") $data_armors = load_data("Data/BT_Armors.rvdata") $data_enemies = load_data("Data/BT_Enemies.rvdata") $data_troops = load_data("Data/BT_Troops.rvdata") $data_states = load_data("Data/BT_States.rvdata") $data_animations = load_data("Data/BT_Animations.rvdata") $data_common_events = load_data("Data/BT_CommonEvents.rvdata") $data_system = load_data("Data/BT_System.rvdata") $base_weapons = $data_weapons $base_armors = $data_armors end end
QQ图片20130604133100.jpg (15.92 KB, 下载次数: 14)
道具店对话出错
170452xsbkk2x82snzom3t.jpg (59.05 KB, 下载次数: 7)
玛雅宝石是强化材料,但是药水和老鼠不是
欢迎光临 Project1 (https://rpg.blue/) | Powered by Discuz! X3.1 |