ホーム
>
RPGツクール
>
テクニック集
>
XP一覧
>
テクニック
スキル分類
SkillGrouping
目次
Outline
概要
スクリーンショット
更新履歴
スクリプト
使用法
概要
Summary
スキルを種類別に分類するスクリプトです。
スキルの数が増えても管理が楽になります。
↑目次
スクリーンショット
Screen Shot
スクリーンショットを表示
スクリーンショットを隠す
↑目次
更新履歴
History
2008/06/22
≪SP消費改造≫ 併用時、メニュー画面でスキル使用時に落ちるバグを修正。
2008/03/02
≪非表示スキル≫ に対応。
2007/08/09
戦闘中・非戦闘中のそれぞれで分類の可否を設定する機能を追加。
過去の更新を表示
過去の更新を隠す
2006/10/30
項目が一つも無い場合、カーソルが変な位置に出るバグを修正。
2006/03/27
リファクタリング。
2005/12/23
戦闘中、スキルが一つも無いカテゴリーを開くと、カーソルの位置がおかしくなるバグを修正。
2005/10/20
画面切り替え時のちらつきを軽減。
2005/07/24
≪メニュー画面改造≫の変更に適応。
2005/03/27
グローバル変数を大幅排除。
2005/03/12
戦闘時・非戦闘時で分類方法を使い分ける機能を追加。
2005/02/02
≪ヘルプウィンドウ機能拡張≫未導入の場合、戦闘中に分類ヘルプを表示しないように設定。
メニュー画面での半透明化を修正。
2004/10/30
カスタマイズしやすく改良。
↑目次
スクリプト
Script
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ #_/ ◆ スキル分類 - KGC_SkillGrouping ◆ #_/ ◇ Last update : 2008/06/22 ◇ #_/---------------------------------------------------------------------------- #_/ スキルを種類別に分類する機能を追加します。 #_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ #============================================================================== # ★ カスタマイズ項目 ★ #============================================================================== module KGC # ◆非戦闘時に分類する SG_ENABLE_NOT_BATTLE = true # ◆戦闘時に分類する SG_ENABLE_BATTLE = true # ━━━━━━━━ 非戦闘時 ━━━━━━━━ # ◆分類属性配列 # 分類に使用する属性名を並べる(0 は「全種」扱い) SG_ELEMENTS = ["回復", "攻撃", "補助", "特殊", 0] # ◆分類名称配列 # 分類後の名称を並べる(分類属性配列と同じ位置・数) SG_NAME = ["回復", "攻撃", "補助", "特殊", "全種"] # ◆説明文(分類属性配列と同じ位置・数) SG_HELP = ["回復系スキルを表示します。", "攻撃系スキルを表示します。", "補助系スキルを表示します。", "特殊スキルを表示します。", "全スキルを表示します。"] # ━━━━━━━━ 戦闘時(設定方法は↑と同じ) ━━━━━━━━ # ◆分類属性配列 SG_ELEMENTS_BATTLE = ["回復", "攻撃", "補助", "特殊", 0] # ◆分類名称配列 SG_NAME_BATTLE = ["回復", "攻撃", "補助", "特殊", "全種"] # ◆説明文 SG_HELP_BATTLE = ["回復系スキルを表示します。", "攻撃系スキルを表示します。", "補助系スキルを表示します。", "特殊スキルを表示します。", "全スキルを表示します。"] end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ $imported = {} if $imported == nil $imported["SkillGrouping"] = true if $game_special_elements == nil $game_special_elements = {} $data_system = load_data("Data/System.rxdata") end module KGC # 分類配列作成 SKILL_GROUP = [] SG_BATTLE = [] # 非戦闘用属性取得 SG_ELEMENTS.each_with_index { |element, i| # 0(全種)の場合 if element == 0 SKILL_GROUP[i] = 0 next end # ハッシュのキーを設定 key = "_grouping_skill_#{i}}" # 属性ID取得 $game_special_elements[key] = $data_system.elements.index(element) SKILL_GROUP[i] = $game_special_elements[key] } # 戦闘用属性取得 SG_ELEMENTS_BATTLE.each_with_index { |element, i| if element == 0 SG_BATTLE[i] = 0 next end key = "_grouping_skill_battle_#{i}}" $game_special_elements[key] = $data_system.elements.index(element) SG_BATTLE[i] = $game_special_elements[key] } end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Module_Graphics #============================================================================== module Graphics unless defined?(transition_interrupt_KGC) #-------------------------------------------------------------------------- # ● トランジション実行 #-------------------------------------------------------------------------- class << Graphics alias transition_interrupt_KGC transition end def self.transition(duration = 8, filename = "", vague = 40) if @_interrupt_transition @_transition_duration = duration @_transition_filename = filename.dup @_transition_vague = vague return end transition_interrupt_KGC(duration, filename, vague) end #-------------------------------------------------------------------------- # ● トランジション割り込み開始 #-------------------------------------------------------------------------- def self.start_interrupt_transition @_interrupt_transition = true end #-------------------------------------------------------------------------- # ● トランジション割り込み終了 #-------------------------------------------------------------------------- def self.end_interrupt_transition if @_interrupt_transition @_interrupt_transition = nil transition(@_transition_duration, @_transition_filename, @_transition_vague) @_transition_duration = @_transition_filename = @_transition_vague = nil end end end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Window_GroupingSkill #============================================================================== class Window_GroupingSkill < Window_Skill #-------------------------------------------------------------------------- # ● オブジェクト初期化 # actor : アクター #-------------------------------------------------------------------------- def initialize(actor) @group = $game_temp.in_battle ? KGC::SG_BATTLE : KGC::SKILL_GROUP super(actor) # 非戦闘中の場合 unless $game_temp.in_battle self.y += 64 self.height -= 64 end self.index = -1 # アクティブ化解除 self.active = false end #-------------------------------------------------------------------------- # ● スキル数を取得 #-------------------------------------------------------------------------- def skill_number return @data.size end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh(skillkind = 0) if self.contents != nil self.contents.dispose self.contents = nil end @data = [] # 「全種」ではない場合 if @group[skillkind] != 0 for i in 0...@actor.skills.size # 対応属性を持っている場合 if $data_skills[@actor.skills[i]].element_set.include?(@group[skillkind]) @data << $data_skills[@actor.skills[i]] end end else # 全スキルを追加 for i in 0...@actor.skills.size @data.push << $data_skills[@actor.skills[i]] end end # 非表示スキルを除く if $imported["HiddenSkill"] @data = @data.find_all { |skill| include?(skill) } end # 項目数が 0 でなければビットマップを作成し、全項目を描画 @item_max = @data.size if @item_max > 0 self.contents = Bitmap.new(width - 32, row_max * 32) for i in 0...@item_max draw_item(i) end else self.contents = Bitmap.new(32, 32) end end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Window_SkillGroup #------------------------------------------------------------------------------ # スキル画面で、種類を選択するウィンドウです。 #============================================================================== class Window_SkillGroup < Window_Selectable #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize super(0, 64, 640, 64) self.contents = Bitmap.new(width - 32, height - 32) # コマンド一覧を作成 @commands = [] for name in ($game_temp.in_battle ? KGC::SG_NAME_BATTLE : KGC::SG_NAME) @commands.push(name) end @item_max = @commands.size @column_max = @commands.size @item_width = (width - 32) / @commands.size self.index = 0 # 戦闘中 if $game_temp.in_battle @help_text = KGC::SG_HELP_BATTLE # ウィンドウ位置を調整 self.y = 0 unless $imported["HelpExtension"] else @help_text = KGC::SG_HELP end self.z = 2000 refresh end #-------------------------------------------------------------------------- # ● リフレッシュ #-------------------------------------------------------------------------- def refresh for i in 0...@commands.size rect = Rect.new(@item_width * i, 0, @item_width, 32) self.contents.fill_rect(rect, Color.new(0, 0, 0, 0)) self.contents.font.color = system_color self.contents.draw_text(rect, @commands[i], 1) end end #-------------------------------------------------------------------------- # ● カーソルの矩形更新 #-------------------------------------------------------------------------- def update_cursor_rect if index != -1 self.cursor_rect.set(@item_width * index, 0, @item_width, 32) end end #-------------------------------------------------------------------------- # ● ヘルプテキスト更新 #-------------------------------------------------------------------------- def update_help @help_window.set_text(@help_text[self.index]) end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Scene_Skill #============================================================================== if KGC::SG_ENABLE_NOT_BATTLE class Scene_Skill #-------------------------------------------------------------------------- # ● メイン処理 #-------------------------------------------------------------------------- alias main_KGC_SkillGrouping main def main # 分類ウィンドウ作成 @group_window = Window_SkillGroup.new if $imported["MenuAlter"] && KGC::MA_MENU_TRANSPARENT @group_window.back_opacity = 160 end @group_window.y = 64 Graphics.start_interrupt_transition main_KGC_SkillGrouping # ウィンドウを開放 @group_window.dispose end #-------------------------------------------------------------------------- # ● フレーム更新 #-------------------------------------------------------------------------- def update # ウィンドウを初期化していない場合 unless @window_initialize # スキルウィンドウを分類用に変更 @skill_window.dispose @skill_window = Window_GroupingSkill.new(@actor) # 各種ウィンドウ調整 @status_window.y = 128 @target_window.z = 2100 # ヘルプウィンドウを関連付け @skill_window.help_window = @help_window @group_window.help_window = @help_window if $imported["MenuAlter"] && KGC::MA_MENU_TRANSPARENT @help_window.back_opacity = 160 end # 初期化フラグをオン @window_initialize = true # トランジション割り込み終了 Graphics.end_interrupt_transition end # ウィンドウを更新 @help_window.update @status_window.update @skill_window.update @target_window.update @group_window.update # スキルウィンドウがアクティブの場合: update_skill を呼ぶ if @skill_window.active update_skill return end # ターゲットウィンドウがアクティブの場合: update_target を呼ぶ if @target_window.active update_target return end # 分類ウィンドウがアクティブの場合: update_group を呼ぶ if @group_window.active update_group return end end #-------------------------------------------------------------------------- # ● フレーム更新 (スキルウィンドウがアクティブの場合) #-------------------------------------------------------------------------- alias update_skill_KGC_SkillGrouping update_skill def update_skill # B ボタンが押された場合 if Input.trigger?(Input::B) # キャンセル SE を演奏 $game_system.se_play($data_system.cancel_se) # 分類ウィンドウをアクティブ化 @group_window.active = true @group_window.visible = true @skill_window.active = false @skill_window.index = -1 return end # L/R ボタンが押された場合 if Input.repeat?(Input::L) || Input.repeat?(Input::R) # 何もしない(ウィンドウのスクロール処理を優先) return end # 元の処理を実行 update_skill_KGC_SkillGrouping end #-------------------------------------------------------------------------- # ● フレーム更新 (ターゲットウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_target # B ボタンが押された場合 if Input.trigger?(Input::B) # キャンセル SE を演奏 $game_system.se_play($data_system.cancel_se) # ターゲットウィンドウを消去 @skill_window.active = true @target_window.visible = false @target_window.active = false return end # C ボタンが押された場合 if Input.trigger?(Input::C) # SP 切れなどで使用できなくなった場合 unless @actor.skill_can_use?(@skill.id) # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return end # ターゲットが全体の場合 if @target_window.index == -1 # パーティ全体にスキルの使用効果を適用 used = false for i in $game_party.actors used |= i.skill_effect(@actor, @skill) end end # ターゲットが使用者の場合 if @target_window.index <= -2 # ターゲットのアクターにスキルの使用効果を適用 target = $game_party.actors[@target_window.index + 10] used = target.skill_effect(@actor, @skill) end # ターゲットが単体の場合 if @target_window.index >= 0 # ターゲットのアクターにスキルの使用効果を適用 target = $game_party.actors[@target_window.index] used = target.skill_effect(@actor, @skill) end # スキルを使った場合 if used # スキルの使用時 SE を演奏 $game_system.se_play(@skill.menu_se) # SP 消費 if $imported["SPCostAlter"] consume_sp else @actor.sp -= @skill.sp_cost end # 各ウィンドウの内容を再作成 @status_window.refresh @skill_window.refresh(@group_window.index) @target_window.refresh # 全滅の場合 if $game_party.all_dead? # ゲームオーバー画面に切り替え $scene = Scene_Gameover.new return end # コモンイベント ID が有効の場合 if @skill.common_event_id > 0 # コモンイベント呼び出し予約 $game_temp.common_event_id = @skill.common_event_id # マップ画面に切り替え $scene = Scene_Map.new return end # スキルを使わなかった場合 else # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) end return end end #-------------------------------------------------------------------------- # ● フレーム更新 (分類ウィンドウがアクティブの場合) #-------------------------------------------------------------------------- def update_group if @now_skillkind != @group_window.index # カーソル位置によって表示するスキルの分類を分ける @skill_window.refresh(@group_window.index) @skill_window.oy = 0 @now_skillkind = @group_window.index end # B ボタンが押された場合 if Input.trigger?(Input::B) # キャンセル SE を演奏 $game_system.se_play($data_system.cancel_se) # メニュー画面に切り替え if $imported["MenuAlter"] index = KGC::MA_COMMANDS.index(1) if index != nil $scene = Scene_Menu.new(index) else $scene = Scene_Menu.new end else $scene = Scene_Menu.new(1) end return end # C ボタンが押された場合 if Input.trigger?(Input::C) # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # スキルウィンドウをアクティブ化 @skill_window.active = true @skill_window.index = 0 @group_window.active = false @group_window.visible = false if $imported["HelpExtension"] return end # R ボタンが押された場合 if Input.trigger?(Input::R) # カーソル SE を演奏 $game_system.se_play($data_system.cursor_se) # 次のアクターへ @actor_index += 1 @actor_index %= $game_party.actors.size # 別のスキル画面に切り替え $scene = Scene_Skill.new(@actor_index) return end # L ボタンが押された場合 if Input.trigger?(Input::L) # カーソル SE を演奏 $game_system.se_play($data_system.cursor_se) # 前のアクターへ @actor_index += $game_party.actors.size - 1 @actor_index %= $game_party.actors.size # 別のスキル画面に切り替え $scene = Scene_Skill.new(@actor_index) return end end end end #★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★ #============================================================================== # ■ Scene_Battle (分割定義 3) #============================================================================== if KGC::SG_ENABLE_BATTLE class Scene_Battle #-------------------------------------------------------------------------- # ● フレーム更新 (アクターコマンドフェーズ : スキル選択) #-------------------------------------------------------------------------- def update_phase3_skill_select # スキルウィンドウを可視状態にする @skill_window.visible = true # 種類選択中の場合、分類ウィンドウを表示 if @skill_group_select @help_window.visible = false unless $imported["HelpExtension"] @skill_window.active = false @skill_group_window.visible = true @skill_group_window.active = true # スキル選択中の場合は逆 else @help_window.visible = true unless $imported["HelpExtension"] @skill_window.active = true @skill_group_window.visible = false @skill_group_window.active = false end # スキルウィンドウを更新 @skill_window.update # スキル分類ウィンドウを更新 @skill_group_window.update if @now_skillkind != @skill_group_window.index # カーソル位置によって表示するスキルの分類を分ける @skill_window.refresh(@skill_group_window.index) @skill_window.oy = 0 @now_skillkind = @skill_group_window.index end # B ボタンが押された場合 if Input.trigger?(Input::B) # キャンセル SE を演奏 $game_system.se_play($data_system.cancel_se) # 種類選択中の場合 if @skill_group_select # スキルの選択を終了 end_skill_select else # 分類ウィンドウに切り替え @skill_group_select = true @skill_window.index = -1 end return end # C ボタンが押された場合 if Input.trigger?(Input::C) # 種類選択中の場合 if @skill_group_select # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # 種類選択終了 @skill_group_select = false @skill_window.index = 0 else # スキルウィンドウで現在選択されているデータを取得 @skill = @skill_window.skill # 使用できない場合 if @skill == nil || !@active_battler.skill_can_use?(@skill.id) # ブザー SE を演奏 $game_system.se_play($data_system.buzzer_se) return end # ヘルプウィンドウを隠す if @help_window2 != nil @help_window2.visible = false else @help_window.visible = false end # 決定 SE を演奏 $game_system.se_play($data_system.decision_se) # アクションを設定 @active_battler.current_action.skill_id = @skill.id # スキルウィンドウを不可視状態にする @skill_window.visible = false # 効果範囲が敵単体の場合 if @skill.scope == 1 # エネミーの選択を開始 start_enemy_select # 効果範囲が味方単体の場合 elsif @skill.scope == 3 or @skill.scope == 5 # アクターの選択を開始 start_actor_select # 効果範囲が単体ではない場合 else # スキルの選択を終了 end_skill_select # 次のアクターのコマンド入力へ phase3_next_actor end end return end end #-------------------------------------------------------------------------- # ● スキル選択開始 #-------------------------------------------------------------------------- alias start_skill_select_KGC_SkillGrouping start_skill_select def start_skill_select start_skill_select_KGC_SkillGrouping # スキルウィンドウを分類用に変更 @skill_window.dispose @skill_window = Window_GroupingSkill.new(@active_battler) # スキル分類ウィンドウを作成 @skill_group_window = Window_SkillGroup.new @skill_group_window.back_opacity = 160 @skill_group_window.y = @help_window2 != nil ? 64 : 0 # 種類選択中フラグを立てる @skill_group_select = true # スキルの分類を初期化 @now_skillkind = nil # ヘルプウィンドウを関連付け @skill_window.help_window = @help_window if @help_window2 != nil @skill_window.help_window = @help_window2 @skill_group_window.help_window = @help_window2 elsif $imported["HelpExtension"] @skill_group_window.help_window = @help_window end end #-------------------------------------------------------------------------- # ● スキル選択終了 #-------------------------------------------------------------------------- alias end_skill_select_KGC_SkillGrouping end_skill_select def end_skill_select end_skill_select_KGC_SkillGrouping # スキル分類ウィンドウを解放 @skill_group_window.dispose @skill_group_window = nil end end end
↑目次
使用法
Usage
分類用属性を作成し、各スキルにセットしてください。
↑目次
トップ
はじめに
サイトマップ
プロフィール
ソフトウェア
RPGツクール
> テクニック集
謎日記
> 開発記
連絡フォーム
よくある質問
リンク集