#============================================================================= # # 熟練度画面表示 ver1.0 # #============================================================================= module VIEW_WEAPON_LEVEL #============================================================================= # カスタマイズ開始 #============================================================================= # マップ移動中の熟練度画面呼び出しキー INPUT_KEY = Input::X #----------------------------------------------------------------------------- # メンバー選択ウィンドウの配置 #----------------------------------------------------------------------------- # trueでウィンドウが自動的に画面中央に配置されます CENTER_MEMBER_WINDOW = true # CENTER_WINDOWをfalseにした場合は、ウィンドウのX座標とY座標を設定してください MEMBER_WINDOW_X = 0 # X座標 MEMBER_WINDOW_Y = 0 # Y座標 MEMBER_WINDOW_WIDTH = 320 MEMBER_WINDOW_HEIGHT = 48 #----------------------------------------------------------------------------- # 熟練度ウィンドウの配置 #----------------------------------------------------------------------------- # trueでウィンドウが自動的に画面中央に配置されます CENTER_WINDOW = true # CENTER_WINDOWをfalseにした場合は、ウィンドウのX座標とY座標を設定してください WINDOW_X = 0 # X座標 WINDOW_Y = 0 # Y座標 COLUMN_MAX = 2 # 列数 LINE_MAX = 3 # 行数 CONTENTS_WIDTH = 192 # 属性ひとつ分の横幅 CONTENTS_HEIGHT = 48 # 1行分の縦幅 # 熟練度ゲージの色 # COLOR1(左)からCOLOR2(右)にグラデーションが流れます COLOR1 = Color.new(0, 0, 255) COLOR2 = Color.new(0, 150, 255) #============================================================================= # カスタマイズ終了 #============================================================================= end #============================================================================== # ■ Scene_Map #------------------------------------------------------------------------------ #  マップ画面の処理を行うクラスです。 #============================================================================== class Scene_Map < Scene_Base #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- alias update_bbl update def update update_bbl unless $game_message.visible # メッセージ表示中以外 update_call_member end end #-------------------------------------------------------------------------- # ● 画面切り替えの実行 #-------------------------------------------------------------------------- alias update_scene_change_bbl update_scene_change def update_scene_change return if $game_player.moving? # プレイヤーの移動中? return call_member if $game_temp.next_scene == "member" update_scene_change_bbl end #-------------------------------------------------------------------------- # ● 熟練度表呼び出し判定 #-------------------------------------------------------------------------- def update_call_member if Input.trigger?(VIEW_WEAPON_LEVEL::INPUT_KEY) return if $game_map.interpreter.running? # イベント実行中? return if $game_system.menu_disabled # メニュー禁止中? $game_temp.menu_beep = true # SE 演奏フラグ設定 $game_temp.next_scene = "member" end end #-------------------------------------------------------------------------- # ● 熟練度画面への切り替え #-------------------------------------------------------------------------- def call_member if $game_temp.menu_beep Sound.play_decision $game_temp.menu_beep = false end $game_temp.next_scene = nil $scene = Scene_ShowWeaponLevel.new end end #============================================================================== # ■ Scene_ShowWeaponLevel #------------------------------------------------------------------------------ #  熟練度表示を行うクラスです。 #============================================================================== class Scene_ShowWeaponLevel < Scene_Base #-------------------------------------------------------------------------- # ● オブジェクト初期化 # menu_index : コマンドのカーソル初期位置 #-------------------------------------------------------------------------- def initialize(menu_index = 0) @actor_index = menu_index @members = $game_party.all_members if $imported["LargeParty"] @members = $game_party.members unless $imported["LargeParty"] end #-------------------------------------------------------------------------- # ● 開始処理 #-------------------------------------------------------------------------- def start super create_menu_background @actor = @members[@actor_index] @status_window = Window_Skill_Level.new @status_window.visible = false @member_window = Window_WeaponLevelMember.new @member_window.active = true end #-------------------------------------------------------------------------- # ● 終了処理 #-------------------------------------------------------------------------- def terminate super dispose_menu_background @status_window.dispose @member_window.dispose end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update super update_menu_background if @member_window.active update_actor_selection elsif @status_window.active update_status_window end end #-------------------------------------------------------------------------- # ● メンバーウィンドウ更新 #-------------------------------------------------------------------------- def update_actor_selection @member_window.update if Input.trigger?(Input::B) Sound.play_cancel $scene = Scene_Map.new elsif Input.trigger?(Input::C) Sound.play_decision @status_window.visible = true @status_window.active = true @status_window.refresh(@member_window.index) @actor_index = @member_window.index @member_window.active = false @member_window.move_refresh(@member_window.index) @member_window.y = @status_window.y - @member_window.height @member_window.x = @status_window.x end end #-------------------------------------------------------------------------- # ● 熟練度ウィンドウ更新 #-------------------------------------------------------------------------- def update_status_window @status_window.update if Input.trigger?(Input::B) Sound.play_cancel @status_window.visible = false @member_window.visible = true @member_window.active = true @member_window.index = @actor_index @member_window.refresh elsif Input.repeat?(Input::R) Sound.play_cursor next_actor elsif Input.repeat?(Input::L) Sound.play_cursor prev_actor end end #-------------------------------------------------------------------------- # ● 次のアクターの画面に切り替え #-------------------------------------------------------------------------- def next_actor @actor_index += 1 @actor_index %= @members.size @member_window.move_refresh(@actor_index) @status_window.refresh(@actor_index) end #-------------------------------------------------------------------------- # ● 前のアクターの画面に切り替え #-------------------------------------------------------------------------- def prev_actor @actor_index += @members.size - 1 @actor_index %= @members.size @member_window.move_refresh(@actor_index) @status_window.refresh(@actor_index) end end #============================================================================== # ■ Window_Base #============================================================================== class Window_Base < Window #-------------------------------------------------------------------------- # ● 熟練度EXP描画 #-------------------------------------------------------------------------- def draw_weapon_lv_exp(actor, element, x, y, width = 120) draw_weapon_lv_gauge(actor, element, x, y, width) self.contents.font.color = normal_color exp = actor.weapon_level_exp(element) list = actor.weapon_exp_list next_exp = list[actor.weapon_level[element] + 1] if next_exp != nil self.contents.draw_text(x, y, width, WLH, sprintf("%1d%", exp), 2) else xr = x + width self.contents.draw_text(xr - 48, y, 96, 24, "MAX") end end #-------------------------------------------------------------------------- # ● 熟練度ゲージ描画 #-------------------------------------------------------------------------- def draw_weapon_lv_gauge(actor, element, x, y, width = 120) max = 100 exp = actor.weapon_level_exp(element) gw = width * exp / max gc1 = VIEW_WEAPON_LEVEL::COLOR1 gc2 = VIEW_WEAPON_LEVEL::COLOR2 color = text_color(19) self.contents.fill_rect(x, y + WLH - 8, width, 6, color) self.contents.gradient_fill_rect(x, y + WLH - 8, gw, 6, gc1, gc2) end end #============================================================================== # ■ Window_WeaponLevelMember #============================================================================== class Window_WeaponLevelMember < Window_Selectable HEIGHT = VIEW_WEAPON_LEVEL::MEMBER_WINDOW_HEIGHT #-------------------------------------------------------------------------- # ● オブジェクト初期化 # x : ウィンドウの X 座標 # y : ウィンドウの Y 座標 #-------------------------------------------------------------------------- def initialize @members = $game_party.all_members if $imported["LargeParty"] @members = $game_party.members unless $imported["LargeParty"] height = @members.size * HEIGHT + 32 width = VIEW_WEAPON_LEVEL::MEMBER_WINDOW_WIDTH y = 208 - (height / 2) x = 272 - (width / 2) super(x, y, width, height) self.index = 0 refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh self.contents.clear self.height = @members.size * HEIGHT + 32 self.y = 208 - (height / 2) self.x = 272 - (width / 2) create_contents @item_max = @members.size for actor in @members y = actor.index * HEIGHT element = actor.using_weapon(actor) draw_actor_graphic(actor, 32, y + 40) draw_weapon_lv_exp(actor, element, 160, y + 16) draw_using_weapon_level(actor, 64, y + 20) end end #-------------------------------------------------------------------------- # ● メンバーウィンドウの移動 #-------------------------------------------------------------------------- def move_refresh(index) self.contents.clear self.height = 32 + 32 self.index = -1 create_contents @item_max = 1 actor = @members[index] y = 0 element = actor.using_weapon(actor) draw_actor_graphic(actor, 32, y + 32) draw_weapon_lv_exp(actor, element, 160, y + 8) draw_using_weapon_level(actor, 64, y + 12) end #-------------------------------------------------------------------------- # ● ウィンドウ内容の作成 #-------------------------------------------------------------------------- def create_contents self.contents.dispose self.contents = Bitmap.new(width - 32, self.height - 32) end #-------------------------------------------------------------------------- # ● カーソルの更新 #-------------------------------------------------------------------------- def update_cursor if @index < 0 # カーソルなし self.cursor_rect.empty elsif @index < @item_max # 通常 self.cursor_rect.set(0, @index * HEIGHT, contents.width, HEIGHT) end end end #============================================================================== # ■ Window_Skill_Level #============================================================================== class Window_Skill_Level < Window_Base HEIGHT = VIEW_WEAPON_LEVEL::CONTENTS_HEIGHT WIDTH = VIEW_WEAPON_LEVEL::CONTENTS_WIDTH LINE_MAX = VIEW_WEAPON_LEVEL::LINE_MAX COLUMN_MAX = VIEW_WEAPON_LEVEL::COLUMN_MAX #---------------------------------------------------------------------------- # ● 開始処理 #---------------------------------------------------------------------------- def initialize @members = $game_party.all_members if $imported["LargeParty"] @members = $game_party.members unless $imported["LargeParty"] height = HEIGHT * LINE_MAX + 32 width = WIDTH * COLUMN_MAX + 32 x = 272 - (width / 2) y = 208 - (height / 2) x = VIEW_WEAPON_LEVEL::WINDOW_X unless VIEW_WEAPON_LEVEL::CENTER_WINDOW y = VIEW_WEAPON_LEVEL::WINDOW_Y unless VIEW_WEAPON_LEVEL::CENTER_WINDOW super(x, y, width, height) end #---------------------------------------------------------------------------- # ● リフレッシュ #---------------------------------------------------------------------------- def refresh(actor_index) actor = @members[actor_index] self.contents.clear draw_weapon_level(actor, type = 2) end #-------------------------------------------------------------------------- # ● 熟練度レベルの描画 # actor : アクター # x : 描画先 X 座標 # y : 描画先 Y 座標 # type : 0:ステータス画面 1:装備画面 2:熟練度画面 #-------------------------------------------------------------------------- def draw_weapon_level(actor, type = 0) index = 0 data = BBL_WEAPON::WEAPON_ELEMENT icon_data = BBL_WEAPON::WEAPON_ICON column_max = VIEW_WEAPON_LEVEL::COLUMN_MAX line_max = VIEW_WEAPON_LEVEL::LINE_MAX x = 12 y = 16 width = VIEW_WEAPON_LEVEL::CONTENTS_WIDTH height = VIEW_WEAPON_LEVEL::CONTENTS_HEIGHT for element_id in data si = (index / column_max).truncate sx = width * (index - (si * column_max)) text = actor.weapon_level[element_id] divi = actor.weapon_level_exp(element_id) text_divi = sprintf("(%1d%)", divi) text_divi = sprintf("(MAX)") if text == BBL_WEAPON::LIMIT_LEVEL self.contents.draw_text(x + sx + 64, y + (height * si), width, WLH, text_divi) if type == 1 draw_weapon_lv_exp(actor, element_id, x + sx + 64, y + (height * si), w = 100) if type == 2 self.contents.draw_text(x + sx + 24, y + (height * si), width, WLH, sprintf(" %1d", text)) draw_icon(icon_data[index], x + sx, y + (height * si)) index += 1 end end end