# ▼▲▼ XRXS24. システム・ウェポンプロパティXC. ver.1.9 ▼▲▼ built 092407 # by 桜雅 在土 #============================================================================== # □ カスタマイズポイント #============================================================================== module XRXS24 # # 「ディフォルト最高レベル」 # GRANT_MAX_LEVEL = 30 # # 「名前が本来と違う場合の色」 # RENAME_COLOR = Color.new(34, 250, 250) # # 「属性付与時のSE」 # ELEMENT_SE = "" # # 「レベルアップ時のSE」 # LEVELUP_SE = "" end #============================================================================== # □ 定数 #============================================================================== module WPXC include XRXS24 # 現在のプロパティの総数(制限無し) PROPERTY_NUMBER = 20 # 以下のナンバーは 同値は指定不可能かつ0から個数-1までの整数 PROPERTY_ELEMENT_GRANT_1st = 4 # プロパティ:付与属性#1 end #============================================================================== # ■ レベル制限用 #============================================================================== module RPG class Weapon def max_level returnar = XRXS.element_check(self.element_set, "最大レベル") if returnar[0] == true and returnar[1] != 0 return returnar[1] else return XRXS24::GRANT_MAX_LEVEL end end end end #============================================================================== # ■ Game_Party #============================================================================== class Game_Party #-------------------------------------------------------------------------- # ● 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :weapons_name # プロパティ→武器名称のハッシュ #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias :xrxs24plus_initialize :initialize def initialize xrxs24plus_initialize @weapons_name = {} end #-------------------------------------------------------------------------- # ● 武器の増加 → 武器の入手 [ 機能変更 ] # weapon_id : 武器 ID # n : 初期武器レベル # ←元[個数] #-------------------------------------------------------------------------- def gain_weapon(weapon_id, n) if n < 0 lose_weapon(weapon_id, n) return end # weapon_id が 0 の場合 if weapon_id == 0 return 0 end # ハッシュの個数データを更新 if weapon_id > 0 @weapons[weapon_id] = [[weapon_number(weapon_id) + 1, 0].max, 99].min end # ウェポンテーブルに新規アイテムを追加 # xsize(テーブルの武器IDの最大値)が足りない場合リサイズ if @weapons_table.xsize <= weapon_id @weapons_table.resize(weapon_id+1, @weapons_table.ysize, @weapons_table.zsize) end # ysize(テーブルの個数の最大値)が足りない場合リサイズ num = weapon_number(weapon_id) if @weapons_table.ysize <= num @weapons_table.resize(@weapons_table.xsize, num+1, @weapons_table.zsize) end # ウェポンテーブルから空き部屋No.を検索 for i in 0...@weapons_table.ysize # 空き部屋である 0 を返した場合 if @weapons_table[weapon_id, i, PROPERTY_ROOM_FILLED] == 0 # 部屋を埋める @weapons_table[weapon_id, i, PROPERTY_ROOM_FILLED] = 1 # 初期武器レベルを設定 @weapons_table[weapon_id, i, PROPERTY_LEVEL] = [n, $data_weapons[weapon_id].max_level].min # 名前をデフォルトに設定 @weapons_name["#{weapon_id}@#{i}"] = $data_weapons[weapon_id].name # EXPをレベルの三乗に設定 expp = n ** 3 # "強化必要EXP(±数字)%"属性による変動 percent = XRXS.element_percent($data_weapons[weapon_id].element_set, "強化必要EXP") expp = (n * (100 + percent) / 100.0).round ** 3 # EXPの数値を設定 @weapons_table[weapon_id, i, PROPERTY_EXP] = expp % 32768 @weapons_table[weapon_id, i, PROPERTY_EXP_SECOND] = (expp / 32768).floor # 終了、部屋番号を返す return i end end # 空き部屋が無かった場合 p "空き部屋が無かった場合" end #-------------------------------------------------------------------------- # ○ 武器を捨てる(部屋No.指定) # weapon_id : 武器 ID # room_no : 部屋No. #-------------------------------------------------------------------------- alias :xrxs24_lose_weapon_wp :lose_weapon_wp def lose_weapon_wp(weapon_id, room_no) xrxs24_lose_weapon_wp(weapon_id, room_no) @weapons_name["#{weapon_id}@#{room_no}"] = "" end #-------------------------------------------------------------------------- # ○ プロパティを詰める #-------------------------------------------------------------------------- def fill_weapon_wp(weapon_id) # 詰める作業 for j in 0...@weapons_table.ysize-1 # 部屋が空いている場合 room_state = @weapons_table[weapon_id, j, PROPERTY_ROOM_FILLED] if room_state != 1 # 次の部屋からプロパティを全て移動する for i in 0...PROPERTY_NUMBER @weapons_table[weapon_id, j, i] = @weapons_table[weapon_id, j+1, i] @weapons_table[weapon_id, j+1, i] = 0 end # 名前を再設定 @weapons_name["#{weapon_id}@#{j}"] = @weapons_name["#{weapon_id}@#{j+1}"] @weapons_name["#{weapon_id}@#{j+1}"] = "" end end end end #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ○ 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :weapon_name # 装備中の武器の武器名 #-------------------------------------------------------------------------- # ● セットアップ #-------------------------------------------------------------------------- alias :xrxs24plus_setup :setup def setup(actor_id) xrxs24plus_setup(actor_id) # 初期化 n = ($data_weapons[@weapon_id] == nil ? "" : $data_weapons[@weapon_id].name) @weapon_name = n end #-------------------------------------------------------------------------- # ○ 武器に付与されている属性のIDの配列 #-------------------------------------------------------------------------- def wpxc_elements_set set = [] unless @weapon_property.nil? for j in PROPERTY_ELEMENT_GRANT_1st...PROPERTY_NUMBER id = @weapon_property[j] if id > 0 set.push(id) end end end return set end #-------------------------------------------------------------------------- # ○ 武器の変更 [ WPXC版 ] # equip_type : 武器のインデックス(通常は0のみ) # id : 武器ID (0 なら装備解除) # room_no : 武器部屋No. #-------------------------------------------------------------------------- def equip_wp(equip_type, id, room_no) if id == 0 or $game_party.weapon_number(id) > 0 weapon_id = @weapon_id # 現在装備武器 if weapon_id != 0 # 現在装備を増やす equip_used_room_no = $game_party.gain_weapon(weapon_id, 1) # アクター現在武器のプロパティ for i in 0...PROPERTY_NUMBER # プロパティを部屋へコピー $game_party.weapons_table[weapon_id, equip_used_room_no, i] = @weapon_property[i] # コピー後に削除 @weapon_property[i] = 0 end $game_party.weapons_name["#{weapon_id}@#{equip_used_room_no}"] = @weapon_name @weapon_name = "" @weapon_property[PROPERTY_ROOM_FILLED] = 0 # 部屋の空き状況は無条件で 1 にする $game_party.weapons_table[weapon_id, equip_used_room_no, PROPERTY_ROOM_FILLED] = 1 end # 新規装着 if id != 0 # 装備対象武器のプロパティ for i in 0...PROPERTY_NUMBER # プロパティをアクターへコピー @weapon_property[i] = $game_party.weapons_table[id, room_no, i] # コピー後に削除 $game_party.weapons_table[id, room_no, i] = 0 end @weapon_name = $game_party.weapons_name["#{id}@#{room_no}"] $game_party.weapons_name["#{id}@#{room_no}"] = "" # 装備対象のアイテムを消す $game_party.lose_weapon_wp(id, room_no) $game_party.fill_weapon_wp(id) # 外す場合 else # アクタープロパティを初期化 for i in 0...PROPERTY_NUMBER @weapon_property[i] = 0 end @weapon_name = "" end # 装備変更 @weapon_id = id end return equip_used_room_no end #-------------------------------------------------------------------------- # ● 基本攻撃力の取得 #-------------------------------------------------------------------------- def base_atk # 基本攻撃力の取得 atk = xrxs24_base_atk weapon = $data_weapons[@weapon_id] if weapon.is_a?(RPG::Weapon) # 武器Lv.による強化 returnar = XRXS.element_check(weapon.element_set, /^#{$data_system.words.atk}成長/) if returnar[0] increase_percent = returnar[1] else increase_percent = XRXS24::FIX_ATK_INCREASE_PER_LV increase_percent = weapon.atk % 10 if increase_percent.nil? end atk += (weapon.atk * (increase_percent * @weapon_property[PROPERTY_LEVEL]) / 100.0).floor # 属性による強化 returnar = XRXS.element_check(self.element_set, $data_system.words.atk) if returnar[0] atk = (atk * (100 + returnar[2]) / 100.0).floor atk += returnar[1] end end return atk end #-------------------------------------------------------------------------- # ● 基本器用さの取得 #-------------------------------------------------------------------------- alias :xrxs24_base_dex :base_dex def base_dex # 基本器用さの取得 dex = 0 weapon = $data_weapons[@weapon_id] if weapon.is_a?(RPG::Weapon) dex = weapon.dex_plus # 武器Lv.による強化 returnar = XRXS.element_check(weapon.element_set, /^#{$data_system.words.dex}成長/) if returnar[0] increase_percent = returnar[1] else increase_percent = 0 end dex += (dex * (increase_percent * @weapon_property[PROPERTY_LEVEL] ** 2) / 1000.0).floor # 属性による強化 returnar = XRXS.element_check(self.element_set, $data_system.words.dex) if returnar[0] dex = (dex * (100 + returnar[2]) / 100.0).floor dex += returnar[1] end dex -= weapon.dex_plus end dex += xrxs24_base_dex return dex end #-------------------------------------------------------------------------- # ● 基本素早さの取得 #-------------------------------------------------------------------------- alias :xrxs24_base_agi :base_agi def base_agi # 基本素早さの取得 agi = 0 weapon = $data_weapons[@weapon_id] if weapon.is_a?(RPG::Weapon) agi = weapon.agi_plus # 武器Lv.による強化 returnar = XRXS.element_check(weapon.element_set, /^#{$data_system.words.agi}成長/) if returnar[0] increase_percent = returnar[1] else increase_percent = 0 end agi += (agi * (increase_percent * @weapon_property[PROPERTY_LEVEL] ** 2) / 1000.0).floor # 属性による強化 returnar = XRXS.element_check(self.element_set, $data_system.words.agi) if returnar[0] agi = (agi * (100 + returnar[2]) / 100.0).floor agi += returnar[1] end agi -= weapon.agi_plus end agi += xrxs24_base_agi return agi end #-------------------------------------------------------------------------- # ● 基本魔力の取得 #-------------------------------------------------------------------------- alias :xrxs24_base_int :base_int def base_int # 基本魔力の取得 int = 0 weapon = $data_weapons[@weapon_id] if weapon.is_a?(RPG::Weapon) int = weapon.int_plus # 武器Lv.による強化 returnar = XRXS.element_check(weapon.element_set, /^#{$data_system.words.int}成長/) if returnar[0] increase_percent = returnar[1] else increase_percent = 0 end int += (int * (increase_percent * @weapon_property[PROPERTY_LEVEL] ** 2) / 1000.0).floor # 属性による強化 returnar = XRXS.element_check(self.element_set, $data_system.words.int) if returnar[0] int = (dex * (100 + returnar[2]) / 100.0).floor int += returnar[1] end int -= weapon.int_plus end int += xrxs24_base_int return int end #-------------------------------------------------------------------------- # ● 基本防御力の取得 #-------------------------------------------------------------------------- def base_pdef # 基本防御力の取得 pdef = 0 weapon = $data_weapons[@weapon_id] if weapon.is_a?(RPG::Weapon) pdef = weapon.pdef # 武器Lv.による強化 returnar = XRXS.element_check(weapon.element_set, /^#{$data_system.words.pdef}成長/) if returnar[0] increase_percent = returnar[1] else increase_percent = 0 end pdef += (pdef * (increase_percent * @weapon_property[PROPERTY_LEVEL] ** 2) / 1000.0).floor # 属性による強化 returnar = XRXS.element_check(self.element_set, $data_system.words.pdef) if returnar[0] pdef = (pdef * (100 + returnar[2]) / 100.0).floor pdef += returnar[1] end pdef -= weapon.pdef end pdef += xrxs24_base_pdef return pdef end #-------------------------------------------------------------------------- # ● 基本魔法防御の取得 #-------------------------------------------------------------------------- def base_pdef # 基本魔法防御の取得 mdef = 0 weapon = $data_weapons[@weapon_id] if weapon.is_a?(RPG::Weapon) mdef = weapon.mdef # 武器Lv.による強化 returnar = XRXS.element_check(weapon.element_set, /^#{$data_system.words.mdef}成長/) if returnar[0] increase_percent = returnar[1] else increase_percent = 0 end mdef += (mdef * (increase_percent * @weapon_property[PROPERTY_LEVEL] ** 2) / 1000.0).floor # 属性による強化 returnar = XRXS.element_check(self.element_set, /^#{$data_system.words.mdef}/) if returnar[0] mdef = (mdef * (100 + returnar[2]) / 100.0).floor mdef += returnar[1] end mdef -= weapon.mdef end mdef += xrxs24_base_mdef return mdef end end #============================================================================== # ■ Scene_Equip #============================================================================== class Scene_Equip #-------------------------------------------------------------------------- # ● リフレッシュ [ 武器( @right_window.index == 0 )のみ再定義 ] #-------------------------------------------------------------------------- def refresh # 呼び戻す if @right_window.index != 0 xrxs24_refresh return end # アイテムウィンドウの可視状態設定 @item_window1.visible = true @item_window2.visible = false @item_window3.visible = false @item_window4.visible = false @item_window5.visible = false # 現在装備中のアイテムを取得 item1 = @right_window.item # 現在のアイテムウィンドウを @item_window に設定 @item_window = @item_window1 # ライトウィンドウがアクティブの場合 if @right_window.active # 装備変更後のパラメータを消去 @left_window.set_new_parameters(nil, nil, nil) @item_window_cursor = -2 end # アイテムウィンドウがアクティブの場合 if @item_window.active # /--- 軽量化処理 : カーソル位置が変わっていなければリターン return if @item_window_cursor == @item_window.index @item_window_cursor = @item_window.index # 現在選択中のアイテムと部屋No.を取得 item2 = @item_window.item item2_room_no = (@item_window.item_room_no == nil ? 0 : @item_window.item_room_no) # 装備を変更------ last_hp = @actor.hp last_sp = @actor.sp # ---実際に装備を変更 # ---使用した部屋No.を取得 item1_room_no = @actor.equip_wp(0, item2 == nil ? 0 : item2.id, item2_room_no) # 装備変更後のパラメータを取得 new_atk = @actor.atk new_pdef = @actor.pdef new_mdef = @actor.mdef new_atk = @actor.atk new_pdef = @actor.pdef new_mdef = @actor.mdef new_str = @actor.str new_dex = @actor.dex new_agi = @actor.agi new_int = @actor.int new_eva = @actor.eva # 装備を戻す # ---実際に装備を変更 @actor.equip_wp(0, item1 == nil ? 0 : item1.id, item1_room_no) @actor.hp = last_hp @actor.sp = last_sp # レフトウィンドウに描画(条件付きで全能力表示) @left_window.set_new_parameters(new_atk, new_pdef, new_mdef) if Window_Base.const_defined?("SYSTEM_WORD_EVA") @left_window.set_new_parameters2(new_str, new_dex, new_agi, new_int, new_eva) end end end end #============================================================================== # ■ Interpreter #============================================================================== class Interpreter #-------------------------------------------------------------------------- # ● EXP の増減 #-------------------------------------------------------------------------- def get_weapon_exp # 操作する値を取得 value = operate_value(@parameters[1], @parameters[2], @parameters[3]) # イレテータで処理 iterate_actor(@parameters[0]) do |actor| # アクターの EXP を変更 actor.exp += value # アクターの武器に経験値獲得 now_exp = actor.weapon_property[WPXC::PROPERTY_EXP_SECOND] * 32768 now_exp += actor.weapon_property[WPXC::PROPERTY_EXP] now_exp += value actor.weapon_property[WPXC::PROPERTY_EXP] = now_exp % 32768 actor.weapon_property[WPXC::PROPERTY_EXP_SECOND] = (now_exp / 32768).floor end # 継続 return true end end #============================================================================== # □ Window_Base #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # ● アイテム名の描画 # item : アイテム # x : 描画先 X 座標 # y : 描画先 Y 座標 #-------------------------------------------------------------------------- def draw_item_name(item, x, y, name = nil) if item == nil return end bitmap = RPG::Cache.icon(item.icon_name) self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24)) self.contents.font.color = normal_color if name != nil and name != "" if name != item.name self.contents.font.color = XRXS24::RENAME_COLOR end self.contents.draw_text(x + 28, y, 212, 32, name) else self.contents.draw_text(x + 28, y, 212, 32, item.name) end end end #============================================================================== # ■ Window_Item #============================================================================== class Window_Item < Window_Selectable #-------------------------------------------------------------------------- # ● 項目の描画 #-------------------------------------------------------------------------- unless WPXC::SHOW_WEAPON_LEVEL_SYSTEM alias xrxs24_draw_item draw_item end def draw_item(index) item = @data[index] case item when RPG::Weapon self.contents.font.color = disabled_color room_no = @data_room_no[index].to_i number = $game_party.weapon_number(item.id) x = 4 + index % @column_max * (288 + 32) y = index / @column_max * 32 rect = Rect.new(x, y, self.width / @column_max - 32, 32) self.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) bitmap = RPG::Cache.icon(item.icon_name) opacity = 128 self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24), opacity) # 名前 if $game_party.weapons_name["#{item.id}@#{room_no}"] != item.name self.contents.font.color = XRXS24::RENAME_COLOR self.contents.font.color.alpha = opacity self.contents.draw_text(x + 28, y, 212, 32, $game_party.weapons_name["#{item.id}@#{room_no}"], 0) else self.contents.draw_text(x + 28, y, 212, 32, item.name, 0) end if WPXC::SHOW_WEAPON_LEVEL_SYSTEM # 武器レベル部分 self.contents.font.color = disabled_color self.contents.draw_text(x +224, y, 56, 32, "Lv. ") level = $game_party.weapons_table[item.id, room_no, WPXC::PROPERTY_LEVEL].to_s self.contents.draw_text(x + 232, y, 48, 32, level, 2) else self.contents.draw_text(x + 240, y, 16, 32, ":", 1) self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2) end else xrxs24_draw_item(index) end end end #============================================================================== # ■ Window_EquipRight #============================================================================== class Window_EquipRight < Window_Selectable #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear @data = [] @data.push($data_weapons[@actor.weapon_id]) @data.push($data_armors[@actor.armor1_id]) @data.push($data_armors[@actor.armor2_id]) @data.push($data_armors[@actor.armor3_id]) @data.push($data_armors[@actor.armor4_id]) @item_max = @data.size self.contents.font.color = system_color self.contents.draw_text(4, 32 * 0, 92, 32, $data_system.words.weapon) self.contents.draw_text(4, 32 * 1, 92, 32, $data_system.words.armor1) self.contents.draw_text(4, 32 * 2, 92, 32, $data_system.words.armor2) self.contents.draw_text(4, 32 * 3, 92, 32, $data_system.words.armor3) self.contents.draw_text(5, 32 * 4, 92, 32, $data_system.words.armor4) draw_item_name(@data[0], 92, 32 * 0, @actor.weapon_name) draw_item_name(@data[1], 92, 32 * 1) draw_item_name(@data[2], 92, 32 * 2) draw_item_name(@data[3], 92, 32 * 3) draw_item_name(@data[4], 92, 32 * 4) if WPXC::SHOW_WEAPON_LEVEL_SYSTEM # 武器レベルの描写を追加 xrxs_additional_refresh end end end #============================================================================== # ■ Window_EquipItem #============================================================================== class Window_EquipItem < Window_Selectable #-------------------------------------------------------------------------- # ● 項目の描画 #-------------------------------------------------------------------------- unless WPXC::SHOW_WEAPON_LEVEL_SYSTEM alias xrxs24_draw_item draw_item end def draw_item(index) # 武器レベルの描写を追加 item = @data[index] case item when RPG::Weapon x = 4 + index % @column_max * (288 + 32) y = index / @column_max * 32 room_no = @data_room_no[index].to_i number = $game_party.weapon_number(item.id) bitmap = RPG::Cache.icon(item.icon_name) self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24)) if $game_party.weapons_name["#{item.id}@#{room_no}"] != item.name self.contents.font.color = XRXS24::RENAME_COLOR self.contents.draw_text(x + 28, y, 212, 32, $game_party.weapons_name["#{item.id}@#{room_no}"], 0) else self.contents.draw_text(x + 28, y, 212, 32, item.name, 0) end if WPXC::SHOW_WEAPON_LEVEL_SYSTEM # 武器Lv. self.contents.font.color = system_color self.contents.draw_text(x + 224, y, 56, 32, "Lv. ") self.contents.font.color = normal_color level = $game_party.weapons_table[item.id, room_no, WPXC::PROPERTY_LEVEL].to_s self.contents.draw_text(x + 232, y, 48, 32, level, 2) else self.contents.draw_text(x + 240, y, 16, 32, ":", 1) self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2) end else xrxs24_draw_item(index) end end end #============================================================================== # ■ Window_ShopSell #============================================================================== class Window_ShopSell < Window_Selectable #-------------------------------------------------------------------------- # ● 項目の描画 #-------------------------------------------------------------------------- unless WPXC::SHOW_WEAPON_LEVEL_SYSTEM alias xrxs24_draw_item draw_item end def draw_item(index) # 武器レベルの描写を追加 item = @data[index] case item when RPG::Weapon x = 4 + index % @column_max * (288 + 32) y = index / @column_max * 32 room_no = @data_room_no[index].to_i number = $game_party.weapon_number(item.id) bitmap = RPG::Cache.icon(item.icon_name) self.contents.blt(x, y + 4, bitmap, Rect.new(0, 0, 24, 24)) if $game_party.weapons_name["#{item.id}@#{room_no}"] != item.name self.contents.font.color = XRXS24::RENAME_COLOR self.contents.draw_text(x + 28, y, 212, 32, $game_party.weapons_name["#{item.id}@#{room_no}"], 0) else self.contents.draw_text(x + 28, y, 212, 32, item.name, 0) end if WPXC::SHOW_WEAPON_LEVEL_SYSTEM # 武器Lv. self.contents.font.color = system_color self.contents.draw_text(x + 224, y, 56, 32, "Lv. ") self.contents.font.color = normal_color level = $game_party.weapons_table[item.id, room_no, WPXC::PROPERTY_LEVEL].to_s self.contents.draw_text(x + 232, y, 48, 32, level, 2) else self.contents.draw_text(x + 240, y, 16, 32, ":", 1) self.contents.draw_text(x + 256, y, 24, 32, number.to_s, 2) end else xrxs24_draw_item(index) end end end #============================================================================== # □ Window_PartyWeapon #------------------------------------------------------------------------------ #  鍛冶屋画面で、パーティ全員の現在装備している武器を表示するウィンドウです。 #============================================================================== class Window_PartyWeapon < Window_Selectable #-------------------------------------------------------------------------- # ○ リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear @data = [] y = 32 * ($game_party.actors.size + 1) for i in 0...$game_party.actors.size actor = $game_party.actors[i] next if actor == nil # キャラ顔 draw_actor_facesquare(actor, 4, 32 * (i)+4) # 武器名描写 weapon_id = actor.weapon_id @data.push($data_weapons[weapon_id]) if weapon_id == 0 self.contents.font.color = disabled_color self.contents.draw_text(36, 32 * (i), 106, 32, "---", 2) else # 武器名 self.contents.font.color = normal_color draw_item_name(@data[i], 36, 32 * (i), actor.weapon_name) level = $game_party.actors[i].weapon_property[PROPERTY_LEVEL] # レベル if SHOW_WEAPON_LEVEL_SYSTEM self.contents.font.color = normal_color self.contents.draw_text(296, 32 * (i), 24, 32, level.to_s, 2) self.contents.font.color = system_color self.contents.draw_text(260, 32 * (i), 32, 32, "Lv.") end end end @item_max = @data.size end end #============================================================================== # □ Window_WeaponInfo #------------------------------------------------------------------------------ #  鍛冶屋画面で、武器のパラメータなどを表示するウィンドウです。 #============================================================================== class Window_WeaponInfo < Window_Selectable #-------------------------------------------------------------------------- # ○ 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :sub_window # サブなウィンドウ #-------------------------------------------------------------------------- # ○ オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(368, 64, 272, 416) self.contents = Bitmap.new(width - 32, height - 32) # 消去する refresh @item_max = 1 end #-------------------------------------------------------------------------- # ○ リフレッシュ #-------------------------------------------------------------------------- def refresh # 初期化 @levelupable = false now_free_exp = 0 self.contents.clear # 武器の場合、Lv: の描写 if @item.is_a?(RPG::Weapon) # 武器のレベルと経験値の取得 if @actor != nil # 武器名 draw_item_name(@item, 4, 32, @actor.weapon_name) @level = @actor.weapon_property[PROPERTY_LEVEL] exp_p = @actor.weapon_property[PROPERTY_EXP_SECOND] * 32768 exp_p += @actor.weapon_property[PROPERTY_EXP] else # 武器名 draw_item_name(@item, 4, 32, $game_party.weapons_name["#{@item.id}@#{room_no}"]) @level = $game_party.weapons_table[@item.id, @room_no, PROPERTY_LEVEL] exp_p = $game_party.weapons_table[@item.id, @room_no, PROPERTY_EXP_SECOND] * 32768 exp_p += $game_party.weapons_table[@item.id, @room_no, PROPERTY_EXP] end # 武器Lv./EXP, の表示 if SHOW_WEAPON_LEVEL_SYSTEM # 武器レベル self.contents.font.color = system_color self.contents.draw_text(124, 64, 32, 32, "Lv.") self.contents.font.color = normal_color self.contents.draw_text(216, 64, 24, 32, @level.to_s, 2) # EXPメーター self.contents.draw_line(143, 104, 273, 104, Color.new(0,0,0,255), 3) now_level_exp = $scene.get_exp_for_levelup(@level) # 現在レベルの所要EXP next_level_exp = $scene.get_exp_for_levelup(@level + 1) # 次のレベルの所要EXP now_free_exp = [exp_p - now_level_exp, 0].max # 現在自由に使えるEXP next_need_exp = next_level_exp - now_level_exp # 次のレベルに必要なEXP percentile = [[100 * (now_free_exp) / (next_need_exp), 0].max, 100].min if percentile < 100 line_color = Color.new(255, 255, 0, 255) else line_color = Color.new( 0, 255, 0, 255) @levelupable = true end self.contents.draw_line(144, 104, 144 + percentile * 1.28, 104, line_color, 1) # 武器経験値 self.contents.font.size = 10 self.contents.font.color = system_color self.contents.draw_text(124, 96, 32, 16, "EXP.") # EXP数値 self.contents.font.size = 10 self.contents.draw_text(124, 116, 64, 18, "NOW") self.contents.font.size = 16 self.contents.font.color = normal_color self.contents.draw_text(132, 116, 64, 16, now_free_exp.to_s + " /", 2) self.contents.draw_text(140, 116, 96, 16, next_need_exp.to_s, 2) end # 攻撃力 self.contents.font.size = 22 self.contents.font.color = system_color self.contents.draw_text( 96, 160, 96, 32, $data_system.words.atk) atk_p = @actor.base_atk self.contents.font.color = normal_color self.contents.draw_text(192, 160, 48, 32, atk_p.to_s, 2) # 付与属性数を取得 @available_slots = GRANT_SLOT_NUMBER returnar = XRXS.element_check(@actor.element_set, /^付与属性数/) if returnar[0] @available_slots = returnar[1] end @item_max = 1 # 各々付与されている武器属性の描写 i_no = 0 size = PROPERTY_NUMBER - PROPERTY_ELEMENT_GRANT_1st if @available_slots > 0 @sub_window.contents = Bitmap.new(width - 32, @available_slots * 32) @sub_window.item_max = @available_slots for i in PROPERTY_ELEMENT_GRANT_1st...PROPERTY_NUMBER if @actor != nil element_id = @actor.weapon_property[i] else element_id = $game_party.weapons_table[@item.id, @room_no, i] end if element_id != 0 and element_id != nil @sub_window.contents.font.color = normal_color @sub_window.contents.draw_text(112, 32 * i_no, 128, 32, $data_system.elements[element_id]) else @sub_window.contents.font.color = disabled_color @sub_window.contents.draw_text(112, 32 * i_no, 128, 32, "---") end i_no += 1 break if @available_slots <= i_no end end else # 武器名 draw_item_name(@item, 4, 32) end @now_free_exp = now_free_exp # 可視状態にする self.visible = true end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super # カーソルの移動が可能な状態の場合 if self.active and @item_max > 0 and @index >= 0 # 方向ボタンの下が押された場合 if Input.repeat?(Input::DOWN) self.active = false self.index = -1 @sub_window.active = true @sub_window.index = 0 end # 方向ボタンの上が押された場合 if Input.repeat?(Input::UP) self.active = false self.index = -1 @sub_window.active = true @sub_window.index = @available_slots - 1 end end # ヘルプテキストを更新 (update_help は継承先で定義される) if self.active and @help_window != nil update_help end # カーソルの矩形を更新 update_cursor_rect end end #============================================================================== # □ Window_WeaponEleset #------------------------------------------------------------------------------ #  鍛冶屋画面で、武器属性の一覧を表示するウィンドウです。 #============================================================================== class Window_WeaponEleset < Selectable_Nomove #-------------------------------------------------------------------------- # ○ 公開インスタンス変数 #-------------------------------------------------------------------------- attr_accessor :item_max # コマンドの要素数 #-------------------------------------------------------------------------- # ○ オブジェクト初期化 #-------------------------------------------------------------------------- def initialize(parent) super(368, 256, 272, 160) @parent = parent self.opacity = 0 end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super # カーソルの移動が可能な状態の場合 if self.active and @item_max > 0 and @index >= 0 # 方向ボタンの下が押された場合 if Input.repeat?(Input::DOWN) $game_system.se_play($data_system.cursor_se) # 下端の場合 if @index == (@item_max - 1) if XRXS24::SHOW_WEAPON_LEVEL_SYSTEM self.active = false self.index = -1 @parent.active = true @parent.index = 0 else @index = 0 end else # カーソルを下に移動 @index += 1 end end # 方向ボタンの上が押された場合 if Input.repeat?(Input::UP) $game_system.se_play($data_system.cursor_se) # 上端の場合 if @index == 0 if XRXS24::SHOW_WEAPON_LEVEL_SYSTEM self.active = false self.index = -1 @parent.active = true @parent.index = 0 else @index = (@item_max - 1) end else # カーソルを上に移動 @index -= 1 end end end # ヘルプテキストを更新 if self.active and @help_window != nil update_help end # カーソルの矩形を更新 update_cursor_rect end #-------------------------------------------------------------------------- # ○ ヘルプテキスト更新 #-------------------------------------------------------------------------- def update_help @help_window.set_text("武器に属性を付与します。") end end #============================================================================== # □ Window_SmithyItems #------------------------------------------------------------------------------ #  鍛冶屋画面で、付与のための所持アイテムの一覧を表示するウィンドウです。 #============================================================================== class Window_SmithyItems < Window_ShopSell #-------------------------------------------------------------------------- # ○ アイテムの第一属性の取得 #-------------------------------------------------------------------------- def get_first_element(item, room_no = 0) return 0 if item.nil? or item.id == 0 # アイテム本来の属性セットを取得 if item.is_a?(RPG::Armor) element_set = item.guard_element_set.dup else element_set = item.element_set.dup end # ウェポンプロパティ付与属性を属性セットに追加 if element_set.size == 0 and item.is_a?(RPG::Weapon) for i in PROPERTY_ELEMENT_GRANT_1st...PROPERTY_NUMBER element_id = $game_party.weapons_table[item.id, room_no, i] if element_id > 0 element_set.push(element_id) break end end end # 例外属性 able_id = element_id_enchantable ban_id = element_id_enchant_ban if LIST_ITEM_ONLY_FOR_GRANT return 0 unless element_set.include?(able_id) else return 0 if element_set.include?(ban_id) end element_set.delete(able_id) element_set.delete(ban_id) # 値を返す if element_set.size == 0 return 0 else return element_set[0] end end end #============================================================================== # □ Scene_Smithy #------------------------------------------------------------------------------ #  鍛冶屋画面の処理を行うクラスです。 #============================================================================== class Scene_Smithy #-------------------------------------------------------------------------- # ○ メイン処理 #-------------------------------------------------------------------------- def initialize(scene = Scene_Map, index = -1) @prev_scene = scene @prev_index = index end #-------------------------------------------------------------------------- # ○ メイン処理 #-------------------------------------------------------------------------- def main # ヘルプウィンドウを作成 @help_window = Window_Help.new # レフトウィンドウを作成 @leftwindow = Window_SmithyLeft.new # パーティ武器ウィンドウを作成 @partyweapon_window = Window_PartyWeapon.new @partyweapon_window.help_window = @help_window @partyweapon_window.active = true @partyweapon_window.index = 0 @partyweapon_window.z = @leftwindow.z + 1 # アイテムウィンドウを作成 @sellect_window = Window_SmithyItems.new @sellect_window.help_window = @help_window @sellect_window.z = @partyweapon_window.z + 1 @sellect_window.active = false @sellect_window.visible = false if GRANT_SLOT_NUMBER == 0 # 武器インフォウィンドウを作成 @weaponinfo_window = Window_WeaponInfo.new @weaponinfo_window.set(nil) @weaponinfo_window.active = false @weaponinfo_window.index = -1 @weaponinfo_window.help_window = @help_window @weaponele_window = Window_WeaponEleset.new(@weaponinfo_window) @weaponele_window.help_window = @help_window @weaponinfo_window.sub_window = @weaponele_window # ゴールドウィンドウを作成 @gold_window = Window_Gold.new @gold_window.x = 480 @gold_window.y = 416 @gold_window.z = @weaponinfo_window.z + 1 if Window_NameEdit.method_defined?("obj_set") # リネームウィンドウを作成 @input_window = Window_NameEdit.new(nil, 16) @name_window = Window_NameInput.new @input_window.z = @weaponinfo_window.z + 8 @name_window.z = @weaponinfo_window.z + 8 @input_window.active = false @name_window.active = false @input_window.visible = false @name_window.visible = false end # 訪ねウィンドウを作成 @ask_window = Window_CenterAsk.new @ask_window.active = false @ask_window.help_window = @help_window # トランジション実行 Graphics.transition # メインループ loop do # ゲーム画面を更新 Graphics.update # 入力情報を更新 Input.update # フレーム更新 update # 画面が切り替わったらループを中断 if $scene != self break end end # トランジション準備 Graphics.freeze # ウィンドウを解放 @help_window.dispose @gold_window.dispose @partyweapon_window.dispose @sellect_window.dispose @weaponinfo_window.dispose @weaponele_window.dispose @leftwindow.dispose @ask_window.dispose if Window_NameEdit.method_defined?("obj_set") @input_window.dispose @name_window.dispose end end #-------------------------------------------------------------------------- # ○ フレーム更新 #-------------------------------------------------------------------------- def update # ウィンドウを更新 @help_window.update @gold_window.update @partyweapon_window.update @sellect_window.update if @weaponele_window.index == -1 @weaponinfo_window.update else @weaponele_window.update end @ask_window.update # パーティ武器ウィンドウがアクティブの場合: update_partyweapon を呼ぶ if @partyweapon_window.active update_partyweapon return end # リネームウィンドウがアクティブの場合: update_rename を呼ぶ if Window_NameEdit.method_defined?("obj_set") and @name_window.active update_rename return end # 武器インフォウィンドウがアクティブの場合: update_weaponinfo を呼ぶ if @weaponinfo_window.active update_weaponinfo return end # 武器属性ウィンドウがアクティブの場合: update_weaponele を呼ぶ if @weaponele_window.active update_weaponele return end # アイテム選択ウィンドウがアクティブの場合: update_sellect を呼ぶ if @sellect_window.active update_sellect return end # 中央選択ウィンドウがアクティブの場合: update_ask を呼ぶ if @ask_window.active update_ask return end end #-------------------------------------------------------------------------- # ○ フレーム更新 (パーティ武器ウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_partyweapon # カーソル位置が変わった場合 if @partyweapon_window_now_index == nil or (@partyweapon_window_now_index != @partyweapon_window.index) # ステータスウィンドウのアイテムを設定 @weaponinfo_window.set($game_party.actors[@partyweapon_window.index], 0) @partyweapon_window_now_index = @partyweapon_window.index end # A ボタンが押された場合 if Input.trigger?(Input::A) # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # 素手の場合 if @weaponinfo_window.item.nil? # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return # 付与属性数0 elsif $game_party.actors[@partyweapon_window.index].weapon_property[PROPERTY_ELEMENT_GRANT_1st] == 0 # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return end @input_window.active = true @name_window.active = true @input_window.visible = true @name_window.visible = true @input_window.obj_set($game_party.actors[@partyweapon_window.index].weapon_name, 16) @partyweapon_window.active = false return end # B ボタンが押された場合 if Input.trigger?(Input::B) # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # 前の画面に切り替え if @prev_index >= 0 $scene = @prev_scene.new(@prev_index) else $scene = @prev_scene.new end return end # C ボタンが押された場合 if Input.trigger?(Input::C) # 素手の場合 if @weaponinfo_window.item.nil? # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return # 武器Lv.非表示かつ付与属性数0 elsif @weaponinfo_window.item_max == 1 and !SHOW_WEAPON_LEVEL_SYSTEM # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return end # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) if SHOW_WEAPON_LEVEL_SYSTEM @weaponinfo_window.active = true @weaponinfo_window.index = 0 else @weaponele_window.active = true @weaponele_window.index = 0 end @partyweapon_window.active = false end end #-------------------------------------------------------------------------- # ○ フレーム更新 (リネームウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_rename @input_window.update @name_window.update # B ボタンが押された場合 if Input.repeat?(Input::B) # キャンセル SE を演奏 $game_system.se_play($data_system.cancel_se) # カーソル位置が 0 の場合 if @input_window.index == 0 @input_window.active = false @name_window.active = false @input_window.visible = false @name_window.visible = false @partyweapon_window.active = true return else # 文字を削除 @input_window.back return end end # C ボタンが押された場合 if Input.trigger?(Input::C) # カーソル位置が [決定] の場合 if @name_window.character == nil # 名前が空の場合 if @input_window.name == "" # デフォルトの名前に戻す @input_window.restore_default # 名前が空の場合 if @input_window.name == "" # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return end # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) return end # 武器の名前を変更 $game_party.actors[@partyweapon_window.index].weapon_name = @input_window.name # 決定 SE を演奏 @partyweapon_window.refresh @weaponinfo_window.refresh $game_system.se_play($data_system.decision_se) @input_window.active = false @name_window.active = false @input_window.visible = false @name_window.visible = false @partyweapon_window.active = true return end # カーソル位置が最大の場合 if @input_window.index == @input_window.max_char # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return end # 文字が空の場合 if @name_window.character == "" # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return end # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # 文字を追加 @input_window.add(@name_window.character) return end end #-------------------------------------------------------------------------- # ○ フレーム更新 (武器インフォウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_weaponinfo # B ボタンが押された場合 if Input.trigger?(Input::B) # キャンセル SE を演奏 $game_system.se_play($data_system.cancel_se) @partyweapon_window.active = true @weaponinfo_window.active = false @weaponinfo_window.index = -1 end # C ボタンが押された場合 if Input.trigger?(Input::C) # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # レベルによる強化金額の取得 price = get_price_for_levelup now_level = $game_party.actors[@partyweapon_window.index].weapon_property[PROPERTY_LEVEL] if @weaponinfo_window.levelupable? help1 = "所定の金額を支払い武器の強化を実行します。" else help1 = "武器の経験値が足りません。" end if $game_party.gold < price help1 = "所持金が不足しています。" end if now_level >= @weaponinfo_window.item.max_level help1 = "レベルが限界に達しています。" price = "---" end first_choice = "強化実行!!   #{price} #{$data_system.words.gold}" help2 = "強化を取りやめます。" @ask_window.set(first_choice,"やめる", help1, help2) if @weaponinfo_window.levelupable? == false @ask_window.disable(0) elsif $game_party.gold < price @ask_window.disable(0) elsif now_level >= @weaponinfo_window.item.max_level @ask_window.disable(0) end @ask_window.active = true @ask_window.visible = true @weaponinfo_window.active = false @weaponele_window.active = false return end end #-------------------------------------------------------------------------- # ○ フレーム更新 (武器属性ウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_weaponele # B ボタンが押された場合 if Input.trigger?(Input::B) # キャンセル SE を演奏 $game_system.se_play($data_system.cancel_se) @partyweapon_window.active = true @weaponele_window.active = false @weaponele_window.index = -1 @weaponele_window.oy = 0 end # C ボタンが押された場合 if Input.trigger?(Input::C) # 属性付与へ。まずはアイテムウィンドウへ移行 if @sellect_window.item_max <= 0 # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return end # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # ウィンドウの状態を売却モードへ @weaponele_window.active = false @sellect_window.index = 0 @sellect_window.active = true @sellect_window.refresh return end end #-------------------------------------------------------------------------- # ○ フレーム更新 (アイテム選択ウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_sellect # B ボタンが押された場合 if Input.trigger?(Input::B) # キャンセル SE を演奏 $game_system.se_play($data_system.cancel_se) # ウィンドウの状態を初期モードへ @weaponele_window.active = true @sellect_window.active = false @sellect_window.index = -1 return end # C ボタンが押された場合 if Input.trigger?(Input::C) # 属性が一つ以上あるか、 if @sellect_window.item_first_element == 0 # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return end # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # 属性を付与確認 price = get_price_for_grant necessary_exp = get_necessary_exp_for_grant if necessary_exp >= 0 exp_str = " " + necessary_exp.to_s + " EXP" else exp_str = " +" + necessary_exp.abs.to_s + " EXP" end unless SHOW_WEAPON_LEVEL_SYSTEM exp_str = "" end first_choice = "属性を付与する!!   " + price.to_s + " " + $data_system.words.gold + exp_str help1 = $data_system.elements[@sellect_window.item_first_element] + " を武器に付与します。" help2 = "付与を取りやめます。" if @sellect_window.item.price == 0 first_choice = "付与不可能。        " help1 = "このアイテムは付与できません。" elsif $game_party.gold < price help1 = "所持金が不足しています。" end @ask_window.set(first_choice,"やめる", help1, help2) if @sellect_window.item.price == 0 @ask_window.disable(0) elsif $game_party.gold < price @ask_window.disable(0) elsif SHOW_WEAPON_LEVEL_SYSTEM and @weaponinfo_window.now_free_exp < necessary_exp @ask_window.disable(0) end @ask_window.active = true @ask_window.visible = true @sellect_window.active = false return end end #-------------------------------------------------------------------------- # ○ フレーム更新 (中央二択ウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_ask # B ボタン or "やめる"で C ボタン が押された場合 if Input.trigger?(Input::B) or (Input.trigger?(Input::C) and @ask_window.index == 1) # キャンセル SE を演奏 $game_system.se_play($data_system.cancel_se) # ウィンドウ @ask_window.active = false @ask_window.visible = false if @sellect_window.index >= 0 @sellect_window.active = true else @weaponinfo_window.active = true end return end # "実行"で C ボタンが押された場合 if Input.trigger?(Input::C) and @ask_window.index == 0 if @ask_window.disabled?(0) # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return end # 決定 SE を演奏 index = @partyweapon_window.index $game_system.se_play($data_system.decision_se) if @sellect_window.index >= 0 # 属性付与 price = get_price_for_grant # 属性付与 SE を演奏 Audio.se_stop if ELEMENT_SE != "" Audio.se_play("Audio/SE/#{XRXS24::ELEMENT_SE}") end # 付与を実行 # IDNo.の取得 set_id = @weaponele_window.index + PROPERTY_ELEMENT_GRANT_1st # 代入 $game_party.actors[index].weapon_property[set_id] = @sellect_window.item_first_element # 付与に使用したアイテムをなくす if @sellect_window.item.is_a?(RPG::Weapon) $game_party.lose_weapon(@sellect_window.item.id, @sellect_window.item_room_no) elsif @sellect_window.item.is_a?(RPG::Armor) $game_party.lose_armor(@sellect_window.item.id, 1) else $game_party.lose_item(@sellect_window.item.id, 1) end # 武器EXPを消費する if SHOW_WEAPON_LEVEL_SYSTEM # 必要武器経験値の取得 necessary_exp = get_necessary_exp_for_grant # 経験値の更新 now_exp = $game_party.actors[index].weapon_property[PROPERTY_EXP_SECOND] * 32768 now_exp+= $game_party.actors[index].weapon_property[PROPERTY_EXP] now_exp-= necessary_exp $game_party.actors[index].weapon_property[PROPERTY_EXP] = now_exp % 32768 $game_party.actors[index].weapon_property[PROPERTY_EXP_SECOND] =(now_exp / 32768).floor end else # 武器強化 # 武器レベルアップ SE を演奏 Audio.me_stop if LEVELUP_SE != "" Audio.me_play("Audio/ME/#{XRXS24::LEVELUP_SE}") end # 強化を実行 $game_party.actors[index].weapon_property[PROPERTY_LEVEL] += 1 # レベルによる強化金額の取得 price = get_price_for_levelup end # 金額を支払う $game_party.lose_gold(price) # ウィンドウを戻す if @sellect_window.index >= 0 @weaponele_window.active = true else @weaponinfo_window.active = true end @sellect_window.active = false @sellect_window.index = -1 # ウィンドウを消す @ask_window.active = false @ask_window.visible = false # 再描写する @gold_window.refresh @sellect_window.refresh @partyweapon_window.refresh @weaponinfo_window.refresh end end #-------------------------------------------------------------------------- # ○ 付与に必要なGOLDの取得 #-------------------------------------------------------------------------- def get_price_for_grant price = @weaponinfo_window.item.price # "付与必要GOLD(±数字)%"属性による変動:付与アイテム側 case @sellect_window.item when RPG::Armor percent = XRXS.element_percent(@sellect_window.item.guard_element_set, "付与必要GOLD") else percent = XRXS.element_percent(@sellect_window.item.element_set, "付与必要GOLD") end price = price * (100 + percent) / 100 # "付与必要GOLD(±数字)%"属性による変動 percent = XRXS.element_percent(@weaponinfo_window.item.element_set, "付与必要GOLD") price = price * (100 + percent) / 100 return price end #-------------------------------------------------------------------------- # ○ 付与に必要なEXPの取得 #-------------------------------------------------------------------------- def get_necessary_exp_for_grant necessary_exp = @sellect_window.item.price/10 # "付与消費EXP(±数字)%"属性による変動:付与アイテム側 case @sellect_window.item when RPG::Armor percent = XRXS.element_percent(@sellect_window.item.guard_element_set, "付与消費EXP") else percent = XRXS.element_percent(@sellect_window.item.element_set, "付与消費EXP") end necessary_exp = necessary_exp * (100 + percent) / 100 # "付与消費EXP(±数字)%"属性による変動:武器 percent = XRXS.element_percent(@weaponinfo_window.item.element_set, "付与消費EXP") necessary_exp = necessary_exp * (100 + percent) / 100 # 値を返す return necessary_exp end #-------------------------------------------------------------------------- # ○ レベルアップに必要な金額を取得 #-------------------------------------------------------------------------- def get_price_for_levelup base_price = @weaponinfo_window.item.price / 10 # "強化必要GOLD(±数字)%"属性による変動 percent = XRXS.element_percent(@weaponinfo_window.item.element_set, "強化必要GOLD") price = ((base_price * (100 + percent) / 100.0) * (@weaponinfo_window.level ** 1.5)).floor # 値を返す return price end #-------------------------------------------------------------------------- # ○ レベルアップに必要な経験値を取得 #-------------------------------------------------------------------------- def get_exp_for_levelup(level) # "強化必要EXP(±数字)%"属性による変動 percent = XRXS.element_percent(@weaponinfo_window.item.element_set, "強化必要EXP") # 値を返す return ((level * (100 + percent) / 100.0) ** 3).floor end end