lunariafantasia/Scripts/Scene_Learn.rb
2024-01-12 03:12:38 -06:00

238 lines
No EOL
9.5 KiB
Ruby

#==============================================================================
# ■ Scene_Learn
#------------------------------------------------------------------------------
#  技習得画面の処理を行うクラスです。
#==============================================================================
class Scene_Learn < Scene_ItemBase
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
def start
super
create_help_window
create_point_window
create_category_window
create_item_window
create_result_window
create_yesno_window
end
#--------------------------------------------------------------------------
# ● ヘルプウィンドウの作成
#--------------------------------------------------------------------------
def create_help_window
super
@help_window.y = Graphics.height - @help_window.height
end
#--------------------------------------------------------------------------
# ● カテゴリウィンドウの作成
#--------------------------------------------------------------------------
def create_category_window
@category_window = Window_LearnCategory.new
@category_window.viewport = @viewport
@category_window.help_window = @help_window
@category_window.y = @point_window.height
@category_window.set_handler(:learn, method(:on_category_ok))
@category_window.set_handler(:skillup, method(:on_category_ok))
@category_window.set_handler(:cancel, method(:return_scene))
@category_window.set_handler(:pagedown, method(:next_actor))
@category_window.set_handler(:pageup, method(:prev_actor))
@category_window.point_window = @point_window
end
#--------------------------------------------------------------------------
# ● アイテムウィンドウの作成
#--------------------------------------------------------------------------
def create_item_window
wx = 0
wy = @category_window.y + @category_window.height
ww = Graphics.width
wh = Graphics.height - wy - @help_window.height
@item_window = Window_SkillUpList.new(wx, wy, ww, wh)
@item_window.actor = @actor
@item_window.viewport = @viewport
@item_window.help_window = @help_window
@item_window.point_window = @point_window
@item_window.set_handler(:ok, method(:item_select))
@item_window.set_handler(:cancel, method(:return_category))
@item_window.set_handler(:hide_change, method(:hide_skill))
@category_window.item_window = @item_window
end
#--------------------------------------------------------------------------
# ● ポイントウィンドウの作成
#--------------------------------------------------------------------------
def create_point_window
wy = 0 #@help_window.height
@point_window = Window_LearnPoint.new(wy)
@point_window.actor = @actor
@point_window.viewport = @viewport
end
#--------------------------------------------------------------------------
# ● リザルトウィンドウの作成
#--------------------------------------------------------------------------
def create_result_window
@result_window = Window_LearnResult.new
@result_window.viewport = @viewport
@category_window.result_window = @result_window
end
#--------------------------------------------------------------------------
# ● はい、いいえウィンドウの作成
#--------------------------------------------------------------------------
def create_yesno_window
@yesno_window = Window_YesNoChoice.new
@yesno_window.viewport = @viewport
@yesno_window.y = @result_window.y + @result_window.height
@yesno_window.set_handler(:yes_select, method(:on_item_ok))
@yesno_window.set_handler(:no_select, method(:on_item_cancel))
@yesno_window.set_handler(:cancel, method(:on_item_cancel))
end
#--------------------------------------------------------------------------
# ● 現在選択されているアイテムの習得値取得
#--------------------------------------------------------------------------
def skill_ap
if @category_window.current_symbol == :learn
Learn.l_flag(item)[0]
else
return 0 if !item
base = Learn.lvup_point(item)[0]
plus = Learn.lvup_point(item)[1]
return base + plus * (@actor.skill_lv(item.id) - 1)
end
end
#--------------------------------------------------------------------------
# ● アイテム[選択]
#--------------------------------------------------------------------------
def item_select
@result_window.learn_skill = item
@result_window.point = skill_ap
@result_window.show
@yesno_window.show.activate
end
#--------------------------------------------------------------------------
# ● カテゴリ[決定]
#--------------------------------------------------------------------------
def on_category_ok
@item_window.activate
@item_window.select_last
end
#--------------------------------------------------------------------------
# ● カテゴリ[キャンセル]
#--------------------------------------------------------------------------
def return_category
@item_window.unselect
@point_window.set_item_point(0)
@category_window.activate
end
#--------------------------------------------------------------------------
# ● アイテム[決定]
#--------------------------------------------------------------------------
def on_item_ok
play_se_for_learn
@result_window.hide
@yesno_window.hide
@actor.ap -= skill_ap
@point_window.point = @actor.ap
if @category_window.current_symbol == :learn
@actor.learn_skill(item.id)
else
@actor.skill_lv_up(item.id, 1)
end
@item_window.refresh
@item_window.activate
end
#--------------------------------------------------------------------------
# ● アイテム[キャンセル]
#--------------------------------------------------------------------------
def on_item_cancel
Sound.play_cancel
@result_window.hide
@yesno_window.select(0)
@yesno_window.hide.deactivate
@item_window.refresh
@item_window.activate
end
#--------------------------------------------------------------------------
# ● アクターの切り替え
#--------------------------------------------------------------------------
def on_actor_change
@point_window.actor = @actor
@point_window.set_item_point(0)
@item_window.actor = @actor
@item_window.refresh
@category_window.activate
@category_window.index = 0
end
#--------------------------------------------------------------------------
# ● スキル表示の切り替え
#--------------------------------------------------------------------------
def hide_skill
@item_window.hide_change
@item_window.index = 0
#@item_window.refresh
#@item_window.activate
end
#--------------------------------------------------------------------------
# ● 技習得時の SE 演奏
#--------------------------------------------------------------------------
def play_se_for_learn
Sound.play_use_skill
end
end
#==============================================================================
# ■ Window_MenuCommand
#------------------------------------------------------------------------------
#  メニュー画面で表示するコマンドウィンドウです。
#==============================================================================
class Window_MenuCommand < Window_Command
#--------------------------------------------------------------------------
# ● コマンドリストの作成 ※再定義 並び替え削除
#--------------------------------------------------------------------------
def make_command_list
add_main_commands
#add_formation_command
add_original_commands
add_save_command
add_game_end_command
end
#--------------------------------------------------------------------------
# ● 主要コマンドをリストに追加 ※エイリアス
#--------------------------------------------------------------------------
alias learn_add_main_commands add_main_commands
def add_main_commands
learn_add_main_commands
add_command(Vocab::learn, :learn, main_commands_enabled)
end
end
#==============================================================================
# ■ Scene_Menu
#------------------------------------------------------------------------------
#  メニュー画面の処理を行うクラスです。
#==============================================================================
class Scene_Menu < Scene_MenuBase
#--------------------------------------------------------------------------
# ● コマンドウィンドウの作成 ※エイリアス
#--------------------------------------------------------------------------
alias learn_create_command_window create_command_window
def create_command_window
learn_create_command_window
@command_window.set_handler(:learn, method(:command_personal))
end
#--------------------------------------------------------------------------
# ● 個人コマンド[決定] ※再定義
#--------------------------------------------------------------------------
def on_personal_ok
case @command_window.current_symbol
when :skill
SceneManager.call(Scene_Skill)
when :equip
SceneManager.call(Scene_Equip)
when :status
SceneManager.call(Scene_Status)
when :learn
SceneManager.call(Scene_Learn)
end
end
end