rebf-gaiden/Scripts/_.8.rb
2025-04-27 11:49:35 -05:00

1881 lines
No EOL
69 KiB
Ruby
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#==============================================================================
# ■スキルポイントシステム for RGSS3 Ver1.12-β3
# □author kure
#
# 呼び出し方法  SceneManager.call(Scene_SkillPoint)
#
#==============================================================================
module KURE
module SkillPoint
#スキルポイントに関する設定-------------------------------------------------
#基礎スキルポイントの値
BASE_SKILL_POINT = 0
#表示に関する設定-----------------------------------------------------------
#未開放スキルの表示名
VIEW_LOCK_SKILL_NAME = ""
#表示しないスキルタイプの設定
#NOT_VIEW_SKILLTYPE = [スキルタイプID]
NOT_VIEW_SKILLTYPE = []
#スキルLv表示タイプ(0=習得スキルのLv 1=現在のスキルLv 2=消費ポイントの表示)
VIEW_SKILL_Lv_MODE = 1
#ポップアップの表示(0=表示しない 1=表示する)
VIEW_POPUP = 1
#インフォメーションウィンドウの表示(0=表示しない 1=表示する)
VIEW_INFOMATION = 1
#動作に関する設定-----------------------------------------------------------
#スキルポイント回収「←キー」の有効設定
#USE_LEFT_KEY = [有効にするスキルID配列]
USE_LEFT_KEY = [1,]
#消費スキルポイントに関する設定---------------------------------------------
#基本消費ポイント(消費スキルポイントが設定されていないスキル)
#BASE_USE_POINT_MODE(0=1ポイント 1=スキルLvと同一
BASE_USE_POINT_MODE = 0
#スキルポイントの名称
Skill_Point_NAME = "JOBEXP"
end
end
#==============================================================================
# ■ Game_Actor(再定義)
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● 最大スキルポイントの定義(追加定義)
#--------------------------------------------------------------------------
def max_skillpoint(class_id)
max_skillpoint = 0
#基礎スキルポイントを加算
max_skillpoint += KURE::SkillPoint::BASE_SKILL_POINT
#レベル補正を加算
max_skillpoint += $data_actors[@actor_id].skillpoint_level_revise * @level
#職業レベル補正を加算
if KURE::BaseScript::USE_JOBLv == 1
max_skillpoint += $data_actors[@actor_id].skillpoint_joblevel_revise * @joblevel
end
#アクター補正を加算
max_skillpoint += $data_actors[@actor_id].skillpoint_revise
#変数補正を加算
if $data_actors[@actor_id].add_max_skillpoint_var != 0
max_skillpoint += $game_variables[$data_actors[@actor_id].add_max_skillpoint_var]
end
return max_skillpoint.to_i
end
#--------------------------------------------------------------------------
# ● 消費中スキルポイントの定義(追加定義)
#--------------------------------------------------------------------------
def used_skill_points(class_id)
@used_skill_point = [] if @used_skill_point.instance_of?(Array) == false
@used_skill_point[class_id] = 0 if @used_skill_point[class_id] == nil
@used_skill_point[class_id]
end
#--------------------------------------------------------------------------
# ● スキルポイントの消費(追加定義)
#--------------------------------------------------------------------------
def use_skill_point(class_id,point)
@used_skill_point[class_id] += point
@used_skill_point[class_id] = 0 if @used_skill_point[class_id] < 0
end
#--------------------------------------------------------------------------
# ● ポイント振り分けメインクラスのスキルの配列取得(追加定義)
#--------------------------------------------------------------------------
def point_skills
result = Array.new
level = self.class.learnings.collect {|learning| learning.level}
skill = self.class.learnings.collect {|learning| $data_skills[learning.skill_id]}
note = self.class.learnings.collect {|learning| learning.note}
#ツリーID保存用配列を作成
tree_id = Array.new
#ツリーID保存用配列を作成
tree_id = Array.new
for i in 0..note.size - 1
tree_id[i] = 0
#スキルのメモ欄からスキルツリーIDを取得する
note[i].match(/<([FM])ツリー\s?(\d+)>/)
if $1
case $1.upcase
when "F"
tree_id[i] = $2.to_i
when "M"
tree_id[i] = $2.to_i * -1
end
end
end
#消費スキルポイント保存用配列を作成
use_point = Array.new
for i in 0..note.size - 1
#スキルのメモ欄から消費スキルポイントを取得する
note[i].match(/<消費SP\s?(\d+)>/)
if $1 == nil
use_point[i] = 1
use_point[i] = level[i] if KURE::SkillPoint::BASE_USE_POINT_MODE == 1
else
use_point[i] = $1.to_i
end
end
#前提スキル保存用の配列を作成
skill_list = Array.new
for i in 0..note.size - 1
#メモ欄から配列を作成
list = note[i].scan(/<前提\s?(\d+(?:\s?*,\s?*\d+)*)>/)
save_list = Array.new
unless list == [] and list.empty?
$1.scan(/\d+/).each { |num| save_list.push(num.to_i)}
skill_list[i] = save_list
end
end
#固有スキルのチェック
uniq_list = Array.new
for i in 0..note.size - 1
if note[i].include?("<固有スキル>")
uniq_list[i] = 1
else
uniq_list[i] = 0
end
end
#非公開スキルのチェック
mask_list = Array.new
for i in 0..note.size - 1
if note[i].include?("<非公開表示>")
mask_list[i] = 1
else
mask_list[i] = 0
end
end
#要求レベルのチェック
request_lv = Array.new
for i in 0..note.size - 1
note[i].match(/<要求レベル\s?(\d+),\s?(\d+)>/)
request_lv[i] = []
request_lv[i][0] = 0
request_lv[i][1] = 0
request_lv[i][0] = $1.to_i if $1 != nil
request_lv[i][1] = $2.to_i if $2 != nil
end
#サブツリー保存用の配列を作成
sub_tree = Array.new
for i in 0..note.size - 1
#スキルのメモ欄からスキルツリーIDを取得する
note[i].match(/<サブ\s?(\d+)>/)
if $1 == nil
sub_tree[i] = 0
else
#ツリーが設定されている場合は数字を返す
sub_tree[i] = $1.to_i
end
end
for i in 0..skill.size - 1
if uniq_list[i] == 0
skill_ary = [level[i],skill[i],tree_id[i],use_point[i],skill_list[i],mask_list[i],request_lv[i],sub_tree[i]]
result[i] = skill_ary
end
end
result.compact!
return result
end
#--------------------------------------------------------------------------
# ● ポイント振り分けサブクラスのスキルの配列取得(追加定義)
#--------------------------------------------------------------------------
def point_skills_sub
result = Array.new
level = self.sub_class.learnings.collect {|learning| learning.level}
skill = self.sub_class.learnings.collect {|learning| $data_skills[learning.skill_id]}
note = self.sub_class.learnings.collect {|learning| learning.note}
#ツリーID保存用配列を作成
tree_id = Array.new
for i in 0..note.size - 1
tree_id[i] = 0
#スキルのメモ欄からスキルツリーIDを取得する
note[i].match(/<([FM])ツリー\s?(\d+)>/)
if $1 != nil
case $1.upcase
when "F"
tree_id[i] = $2.to_i
when "M"
tree_id[i] = $2.to_i * -1
end
end
end
#消費スキルポイント保存用配列を作成
use_point = Array.new
for i in 0..note.size - 1
#スキルのメモ欄から消費スキルポイントを取得する
note[i].match(/<消費SP\s?(\d+)>/)
if $1 == nil
use_point[i] = 5
use_point[i] = level[i] if KURE::SkillPoint::BASE_USE_POINT_MODE == 0
else
use_point[i] = $1.to_i
end
end
#前提スキル保存用の配列を作成
skill_list = Array.new
for i in 0..note.size - 1
#メモ欄から配列を作成
list = note[i].scan(/<前提\s?(\d+(?:\s?*,\s?*\d+)*)>/)
save_list = Array.new
unless list == [] and list.empty?
$1.scan(/\d+/).each { |num| save_list.push(num.to_i)}
skill_list[i] = save_list
end
end
#固有スキルのチェック
uniq_list = Array.new
for i in 0..note.size - 1
if note[i].include?("<固有スキル>")
uniq_list[i] = 1
else
uniq_list[i] = 0
end
end
#非公開スキルのチェック
mask_list = Array.new
for i in 0..note.size - 1
if note[i].include?("<非公開表示>")
mask_list[i] = 1
else
mask_list[i] = 0
end
end
#要求レベルのチェック
request_lv = Array.new
for i in 0..note.size - 1
note[i].match(/<要求レベル\s?(\d+),\s?(\d+)>/)
request_lv[i] = []
request_lv[i][0] = 0
request_lv[i][1] = 0
request_lv[i][0] = $1.to_i if $1 != nil
request_lv[i][1] = $2.to_i if $2 != nil
end
#サブツリー保存用の配列を作成
sub_tree = Array.new
for i in 0..note.size - 1
#スキルのメモ欄からスキルツリーIDを取得する
note[i].match(/<サブ\s?(\d+)>/)
if $1 == nil
sub_tree[i] = 0
else
#ツリーが設定されている場合は数字を返す
sub_tree[i] = $1.to_i
end
end
for i in 0..skill.size - 1
if uniq_list[i] == 0
skill_ary = [level[i],skill[i],tree_id[i],use_point[i],skill_list[i],mask_list[i],request_lv[i],sub_tree[i]]
result[i] = skill_ary
end
end
result.compact!
return result
end
end
#==============================================================================
# ■ Scene_SkillPoint
#==============================================================================
class Scene_SkillPoint < Scene_MenuBase
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
def start
super
@used_reset_flag = Array.new
@used_reset_flag.push(@actor.id)
create_help_window
create_pop_window
create_small_status_window
create_class_select_window
create_info_window
create_skilltype_window
create_skill_point_window
window_setting
@last_skill_type_index = -1
if KURE::BaseScript::USE_JOBLv == 1 && @actor.sub_class_id != 0
@class_select_window.activate
else
@class_select_window.deactivate
@class_select_window.hide
@skill_type_window.activate
@skill_type_window.select(0)
end
end
#--------------------------------------------------------------------------
# ● ポップアップウィンドウの作成
#--------------------------------------------------------------------------
def create_pop_window
wx = Graphics.width / 4
wy = Graphics.height / 3
width = Graphics.width / 2
height = 24 * 6
@pop_up_window = Window_k_SkillPoint_PopupWindow.new(wx,wy,width,height)
@pop_up_window.z += 100
@pop_up_window.back_opacity = 255
@pop_up_window.refresh
@pop_up_window.hide
@decide_window = Window_k_SkillPoint_DecideCommand.new(wx,wy + height - 48,width,48)
@decide_window.opacity = 0
@decide_window.z += 100
@decide_window.deactivate
@decide_window.hide
#ハンドラのセット
@decide_window.set_handler(:cancel, method(:pop_up_cancel))
@decide_window.set_handler(:ok, method(:pop_up_ok))
end
#--------------------------------------------------------------------------
# ● ステータスウィンドウの作成
#--------------------------------------------------------------------------
def create_small_status_window
wx = 0
wy = @help_window.height
@small_status_window = Window_k_SkillPoint_Small_Status.new(wx,wy,260,144)
@small_status_window.viewport = @viewport
@small_status_window.actor = @actor
@small_status_window.refresh
end
#--------------------------------------------------------------------------
# ● 職業クラス選択ウィンドウの作成
#--------------------------------------------------------------------------
def create_class_select_window
wx = 0
wy = @help_window.height + @small_status_window.height
@class_select_window = Window_k_SkillPoint_Class_Grade_Command.new(wx,wy,260)
@class_select_window.actor = @actor
#ハンドラのセット
@class_select_window.set_handler(:cancel, method(:return_scene))
@class_select_window.set_handler(:ok, method(:class_select_ok))
@class_select_window.set_handler(:pagedown, method(:next_actor))
@class_select_window.set_handler(:pageup, method(:prev_actor))
end
#--------------------------------------------------------------------------
# ● スキルポイントウィンドウの作成
#--------------------------------------------------------------------------
def create_info_window
wx = 0
wh = 48
wy = Graphics.height - wh
ww = Graphics.width
@info_window = Window_k_Infomation_Window.new(wx, wy, ww, wh)
if KURE::SkillPoint::VIEW_INFOMATION == 0
@info_window.height = 0
@info_window.hide
end
end
#--------------------------------------------------------------------------
# ● スロットウィンドウの作成
#--------------------------------------------------------------------------
def create_skilltype_window
wx = 0
wy = @help_window.height + @small_status_window.height
wy += @class_select_window.height if KURE::BaseScript::USE_JOBLv == 1 && @actor.sub_class_id != 0
width = @small_status_window.width
height = Graphics.height - wy - @info_window.height
@skill_type_window = Window_k_SkillPoint_SkillCommand.new(wx, wy, width, height)
@skill_type_window.actor = @actor
@skill_type_window.deactivate
@skill_type_window.unselect
#ハンドラのセット
@skill_type_window.set_handler(:cancel, method(:skill_type_cancel))
@skill_type_window.set_handler(:ok, method(:skill_type_ok))
@skill_type_window.set_handler(:pagedown, method(:next_actor))
@skill_type_window.set_handler(:pageup, method(:prev_actor))
end
#--------------------------------------------------------------------------
# ● スキルポイントウィンドウの作成
#--------------------------------------------------------------------------
def create_skill_point_window
wx = @small_status_window.width
wy = @help_window.height
ww = Graphics.width - wx
wh = Graphics.height - wy - @info_window.height
@skill_point_window = Window_k_SkillPoint_SkillList.new(wx, wy, ww, wh)
@skill_point_window.viewport = @viewport
@skill_point_window.actor = @actor
@skill_point_window.deactivate
@skill_point_window.unselect
#ハンドラのセット
@skill_point_window.set_handler(:ok, method(:skill_point_ok))
@skill_point_window.set_handler(:cancel, method(:skill_point_cancel))
end
#--------------------------------------------------------------------------
# ● ウィンドウのセット
#--------------------------------------------------------------------------
def window_setting
@pop_up_window.skill_point_window = @skill_point_window
@class_select_window.skill_type_window = @skill_type_window
@class_select_window.skill_point_window = @skill_point_window
@class_select_window.status_window = @small_status_window
@skill_point_window.status_window = @small_status_window
@skill_point_window.help_window = @help_window
@skill_point_window.pop_up_window = @pop_up_window
@skill_point_window.decide_window = @decide_window
@skill_point_window.info_window = @info_window
@skill_type_window.skill_point_window = @skill_point_window
end
#--------------------------------------------------------------------------
# ● ポップアップを閉じる
#--------------------------------------------------------------------------
def pop_up_close
@pop_up_window.hide
@decide_window.hide
@decide_window.unselect
@skill_point_window.activate
end
#--------------------------------------------------------------------------
# ● ポップアップウィンドウ[決定]
#--------------------------------------------------------------------------
def pop_up_ok
case @decide_window.index
when 0
@skill_point_window.pop_up_skill_learn
pop_up_close
when 1
pop_up_close
end
end
#--------------------------------------------------------------------------
# ● ポップアップウィンドウ[キャンセル]
#--------------------------------------------------------------------------
def pop_up_cancel
pop_up_close
end
#--------------------------------------------------------------------------
# ● クラスセレクトウィンドウ[決定]
#--------------------------------------------------------------------------
def class_select_ok
@class_select_window.deactivate
@skill_type_window.select(0)
@skill_type_window.activate
end
#--------------------------------------------------------------------------
# ● スキルタイプウィンドウ[決定]
#--------------------------------------------------------------------------
def skill_type_ok
@skill_point_window.stype_id = @skill_type_window.current_ext
skill_type_to_skill_point
end
#--------------------------------------------------------------------------
# ● スキルタイプウィンドウ[キャンセル]
#--------------------------------------------------------------------------
def skill_type_cancel
skill_type_to_class_select
end
#--------------------------------------------------------------------------
# ● スキルポイントウィンドウ[決定]
#--------------------------------------------------------------------------
def skill_point_ok
@skill_point_window.view_pop_up
end
#--------------------------------------------------------------------------
# ● スキルポイントウィンドウ[キャンセル]
#--------------------------------------------------------------------------
def skill_point_cancel
skill_point_to_skill_type
end
#--------------------------------------------------------------------------
# ● スキルタイプ→クラスセレクトウィンドウ切り替え
#--------------------------------------------------------------------------
def skill_type_to_class_select
if KURE::BaseScript::USE_JOBLv == 1 && @actor.sub_class_id != 0
@skill_type_window.unselect
@skill_type_window.deactivate
@class_select_window.activate
else
reset_all_flag
return_scene
end
end
#--------------------------------------------------------------------------
# ● フラグの全消去
#--------------------------------------------------------------------------
def reset_all_flag
for actor in 0..@used_reset_flag.size - 1
if @used_reset_flag[actor]
$game_actors[@used_reset_flag[actor]].reset_skill_flag = false
end
end
end
#--------------------------------------------------------------------------
# ● スキルタイプ→スキルポイントウィンドウ切り替え
#--------------------------------------------------------------------------
def skill_type_to_skill_point
@last_skill_type_index = @skill_type_window.index
@skill_type_window.unselect
@skill_type_window.deactivate
@skill_point_window.select(0)
@skill_point_window.activate
@skill_point_window.refresh
end
#--------------------------------------------------------------------------
# ● スキルポイント→スキルタイプウィンドウ切り替え
#--------------------------------------------------------------------------
def skill_point_to_skill_type
@skill_point_window.select(0)
@skill_point_window.unselect
@skill_point_window.deactivate
@skill_point_window.update_help
@skill_type_window.activate
@skill_type_window.index = @last_skill_type_index
end
#--------------------------------------------------------------------------
# ● 次のアクターに切り替え
#--------------------------------------------------------------------------
def next_actor
@actor.set_passive_skills
@actor.release_unequippable_items
@actor = $game_party.menu_actor_next
on_actor_change
end
#--------------------------------------------------------------------------
# ● 前のアクターに切り替え
#--------------------------------------------------------------------------
def prev_actor
@actor.set_passive_skills
@actor.release_unequippable_items
@actor = $game_party.menu_actor_prev
on_actor_change
end
#--------------------------------------------------------------------------
# ● アクターの切り替え
#--------------------------------------------------------------------------
def on_actor_change
@skill_point_window.actor = @actor
@skill_type_window.actor = @actor
@small_status_window.actor = @actor
@class_select_window.actor = @actor
@class_select_window.select(0)
@used_reset_flag.push(@actor.id)
if KURE::BaseScript::USE_JOBLv == 1 && @actor.sub_class_id != 0
@class_select_window.show
@class_select_window.activate
wy = @help_window.height + @small_status_window.height + @class_select_window.height
@skill_type_window.y = wy
@skill_type_window.height = Graphics.height - wy - @info_window.height
@skill_type_window.unselect
@skill_type_window.deactivate
@skill_type_window.refresh
else
@class_select_window.hide
@class_select_window.deactivate
wy = @help_window.height + @small_status_window.height
@skill_type_window.y = wy
@skill_type_window.height = Graphics.height - wy - @info_window.height
@skill_type_window.select(0)
@skill_type_window.activate
@skill_type_window.refresh
end
end
end
#==============================================================================
# ■ Window_k_SkillPoint_Small_Status
#------------------------------------------------------------------------------
#  メニュー画面でパーティメンバーのステータスを表示するウィンドウです。
#==============================================================================
class Window_k_SkillPoint_Small_Status < Window_Selectable
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_reader :pending_index # 保留位置(並び替え用)
attr_accessor :actor
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(x, y,width,height)
super(x, y, width, height)
refresh
end
#--------------------------------------------------------------------------
# ● アクターの設定
#--------------------------------------------------------------------------
def actor=(actor)
return if @actor == actor
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# ● 描画するクラス の設定
#--------------------------------------------------------------------------
def draw_class=(draw_class)
return if @draw_class == draw_class
@draw_class = draw_class
refresh
end
#--------------------------------------------------------------------------
# ● 項目の描画
#--------------------------------------------------------------------------
def draw_status
return unless @actor
draw_actor_face(@actor, 0, 12)
draw_actor_name(@actor, 100, line_height * 0)
draw_actor_class(@actor, 100, line_height * 1)
draw_actor_level(@actor, 100, line_height * 2)
draw_actor_skill_point(@actor, 100, line_height * 3)
#draw_text(100, line_height * 4, 200, line_height, "☆") if @actor.reset_skill_flag
end
#--------------------------------------------------------------------------
# ● スキルポイントの描画
#--------------------------------------------------------------------------
def draw_actor_skill_point(actor, x, y, width = 120)
view_class_id = 0
view_class_id = @actor.class_id
view_class_id = @actor.sub_class_id if @draw_class == 1
return if view_class_id == 0
@skill_point_n = @actor.used_skill_points(view_class_id)
@max_skill_point_m = @actor.max_skillpoint(view_class_id)
skill_rate = @skill_point_n.to_f / @max_skill_point_m
draw_gauge(x, y, width, skill_rate, tp_gauge_color1, tp_gauge_color2)
change_color(system_color)
draw_text(x, y, 30, line_height, KURE::SkillPoint::Skill_Point_NAME)
draw_current_and_max_values(x, y, width, @skill_point_n, @max_skill_point_m,
mp_color(actor), normal_color)
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
contents.clear
draw_status
end
end
#==============================================================================
# ■ Window_k_SkillPoint_SkillList(新規)
#==============================================================================
class Window_k_SkillPoint_SkillList < Window_Command
attr_accessor :data
attr_accessor :status_window
attr_accessor :pop_up_window
attr_accessor :decide_window
attr_accessor :info_window
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(x, y,width,height)
@select_skill = 0
@stype_id = 0
@width = width
@height = height
@draw_class = 0
super(x, y)
end
#--------------------------------------------------------------------------
# ● 描画するクラス の設定
#--------------------------------------------------------------------------
def draw_class=(draw_class)
return if @draw_class == draw_class
@draw_class = draw_class
refresh
end
#--------------------------------------------------------------------------
# ● ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width
return @width
end
#--------------------------------------------------------------------------
# ● ウィンドウ高さの取得
#--------------------------------------------------------------------------
def window_height
return @height
end
#--------------------------------------------------------------------------
# ● スキルレベル
#--------------------------------------------------------------------------
def skill_lv(skill)
return skill[0]
end
#--------------------------------------------------------------------------
# ● スキルの取得
#--------------------------------------------------------------------------
def item
@data[index] && index >= 0 ? @data[index][1] : nil
end
#--------------------------------------------------------------------------
# ● ツリーID
#--------------------------------------------------------------------------
def tree_id(skill)
return skill[2]
end
#--------------------------------------------------------------------------
# ● 消費スキルポイント
#--------------------------------------------------------------------------
def use_select_point(skill)
return skill[3]
end
#--------------------------------------------------------------------------
# ● 要求レベル
#--------------------------------------------------------------------------
def need_lv(skill)
return skill[6][0]
end
#--------------------------------------------------------------------------
# ● 要求職業レベル
#--------------------------------------------------------------------------
def need_joblv(skill)
return skill[6][1]
end
#--------------------------------------------------------------------------
# ● サブツリーID
#--------------------------------------------------------------------------
def sub_tree_id(skill)
return skill[7]
end
#--------------------------------------------------------------------------
# ● アクターの設定
#--------------------------------------------------------------------------
def actor=(actor)
return if @actor == actor
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# ● スキルタイプ ID の設定
#--------------------------------------------------------------------------
def stype_id=(stype_id)
return if @stype_id == stype_id
@stype_id = stype_id
refresh
end
#--------------------------------------------------------------------------
# ● 描画するクラス の設定
#--------------------------------------------------------------------------
def draw_class=(draw_class)
return if @draw_class == draw_class
@draw_class = draw_class
refresh
end
#--------------------------------------------------------------------------
# ● 項目の描画
#--------------------------------------------------------------------------
def draw_item(index)
skill = @data[index]
lv_draw = 1
if skill[1]
rect = item_rect(index)
rect.width -= 4
#設定により描画方法を変更
if command_enabled?(index) == true
draw_item_name(skill[1], rect.x, rect.y, command_enabled?(index))
else
if @actor.skill_learn?(skill[1])
draw_item_name(skill[1], rect.x, rect.y, command_enabled?(index))
else
#設定によって処理を分岐
if skill[5] == 0
draw_item_name(skill[1], rect.x, rect.y, command_enabled?(index))
else
if cheack_base_skill(skill) == 0
change_color(normal_color, command_enabled?(index))
draw_text(rect.x + 24, rect.y, 172, line_height, KURE::SkillPoint::VIEW_LOCK_SKILL_NAME)
lv_draw = 0
else
draw_item_name(skill[1], rect.x, rect.y, command_enabled?(index))
end
end
end
end
#描画用のLv設定
view_lv = "Lv"
if KURE::SkillPoint::VIEW_SKILL_Lv_MODE == 0
view_lv += " " if skill[0] < 10
view_lv += skill[0].to_s
view_lv = "" if skill[2] == 0
end
if KURE::SkillPoint::VIEW_SKILL_Lv_MODE == 1
before = skill[0] - 1
if before < 10
view_lv += " "
view_lv += before.to_s
end
view_lv = "Not Learned" if before == 0
view_lv = "Not Learned" if skill[2] == 0
end
if KURE::SkillPoint::VIEW_SKILL_Lv_MODE == 2
view_lv = skill[3].to_s
view_lv += " P"
end
view_lv = "" if lv_draw == 0
if is_maxlv(skill) == 0
draw_text(rect.x, rect.y, contents.width, line_height, "MASTER", 2)
else
draw_text(rect.x, rect.y, contents.width, line_height, view_lv , 2)
end
else
change_color(normal_color, command_enabled?(index))
draw_text(item_rect_for_text(index), command_name(index), alignment)
end
end
#--------------------------------------------------------------------------
# ● 項目を描画する矩形の取得(テキスト用)
#--------------------------------------------------------------------------
def item_rect_for_text(index)
rect = item_rect(index)
rect.x += 24
rect.width -= 8
rect
end
#--------------------------------------------------------------------------
# ● →キーの処理
#--------------------------------------------------------------------------
#def cursor_right(wrap = false)
# return if @data[index] == nil
# if @draw_class == 0
# return if @actor.max_skillpoint(@actor.class_id) <= @actor.used_skill_points(@actor.class_id)
# else
# return if @actor.max_skillpoint(@actor.sub_class_id) <= @actor.used_skill_points(@actor.sub_class_id)
# end
#if command_enabled?(index)
# if KURE::SkillPoint::VIEW_POPUP == 1
# view_pop_up
# else
# pop_up_skill_learn
# end
# end
# end
#--------------------------------------------------------------------------
# ● ←キーの処理
#--------------------------------------------------------------------------
def cursor_left(wrap = false)
return if @data[index] == nil
if @actor.reset_skill_flag == false
return unless KURE::SkillPoint::USE_LEFT_KEY.include?(@stype_id)
end
#ツリーが存在しない時、マスター(習得)していれば許可
if @data[index][2] == 0
if is_maxlv(@data[index]) == 0
if $game_switches[14] == true#紅茶走
skill_point_back(@data[index]) #紅茶走
else #紅茶走
end#紅茶走
end
#ツリーが存在する場合
else
#Lv1はマスターしていない場合以外処理しない
return if @data[index][0] == 1 && is_maxlv(@data[index]) == 1
#コマンドの有効をチェック
if command_enabled?(index)
if $game_switches[14] == true##紅茶走
skill_point_back(@data[index]) ##紅茶走
else ##紅茶走
end##紅茶走
#コマンドが有効ではない場合
else
if is_maxlv(@data[index]) == 0
if $game_switches[14] == true#紅茶走
skill_point_back(@data[index]) #紅茶走
else #紅茶走
end#紅茶走
end
if have_need_point(@data[index]) == 0
if $game_switches[14] == true#紅茶走
skill_point_back(@data[index]) #紅茶走
else #紅茶走
end#紅茶走
end
if cheack_base_skill(@data[index]) == 0
if $game_switches[14] == true#紅茶走
skill_point_back(@data[index]) #紅茶走
else #紅茶走
end#紅茶走
end
end
end
end
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def update_help
if item != nil
if command_enabled?(index) == true
@help_window.set_item(item)
@info_window.item = @data[index] if @info_window
else
#習得しているスキルは説明を表示
if @draw_class == 0
if @actor.skill_learn?(item)
@help_window.set_item(item)
@info_window.item = @data[index] if @info_window
else
if @data[index][5] == 0
@help_window.set_item(item)
@info_window.item = @data[index] if @info_window
else
if cheack_base_skill(@data[index]) == 0
@help_window.set_text("このスキルの詳細は分からない")
@info_window.item = nil if @info_window
else
@help_window.set_item(item)
@info_window.item = @data[index] if @info_window
end
end
end
else
if @actor.skill_learn_sub?(item)
@help_window.set_item(item)
@info_window.item = @data[index] if @info_window
else
if @data[index][5] == 0
@help_window.set_item(item)
@info_window.item = @data[index] if @info_window
else
if cheack_base_skill(@data[index]) == 0
@help_window.set_text("このスキルの詳細は分からない")
@info_window.item = nil if @info_window
else
@help_window.set_item(item)
@info_window.item = @data[index] if @info_window
end
end
end
end
end
end
end
#--------------------------------------------------------------------------
# ● ポップアップを表示する
#--------------------------------------------------------------------------
def view_pop_up
self.deactivate
@pop_up_window.refresh if @pop_up_window
@pop_up_window.show if @pop_up_window
@decide_window.show if @decide_window
@decide_window.activate if @decide_window
@decide_window.select(1) if @decide_window
end
#--------------------------------------------------------------------------
# ● スキル習得の処理
#--------------------------------------------------------------------------
def pop_up_skill_learn
Audio.se_play("Audio/SE/item-01", $game_system.m_v[3], 80) #紅茶走
skill_learn(@data[index])
@point = use_select_point(@data[index])
if @draw_class == 0
@actor.use_skill_point(@actor.class_id,@point)
else
@actor.use_skill_point(@actor.sub_class_id,@point)
end
@point = 0
refresh
@status_window.refresh if @status_window
end
#--------------------------------------------------------------------------
# ● スキルポイント回収の処理
#--------------------------------------------------------------------------
def skill_point_back(skill)
@delete_list = Array.new
@double_cheack = Array.new
skill_forget(skill)
@point = use_select_point(skill) * - 1
if @draw_class == 0
@actor.use_skill_point(@actor.class_id,@point)
else
@actor.use_skill_point(@actor.sub_class_id,@point)
end
@point = 0
delete_tree_skill_roop
refresh
@status_window.refresh if @status_window
end
#--------------------------------------------------------------------------
# ● ツリーのスキルのチェックと削除
#--------------------------------------------------------------------------
def delete_tree_skill_roop
while @delete_list.size != 0 do
delete_tree_skill(@delete_list[0])
@delete_list[0] = nil
@delete_list.compact!
end
end
#--------------------------------------------------------------------------
# ● ツリーのスキルのチェックと削除
#--------------------------------------------------------------------------
def delete_tree_skill(skill)
#前提スキルのID配列を取得
set_base_skill(skill)
cheack_list = @based_skill_list
#前提スキルが設定されていなければ処理しない
return if cheack_list == [] or nil
#前提スキルが設定されている場合、全てのスキルについてチェックする
for i in 0..cheack_list.size - 1
#判定用スキルデータを作成
cheack_lv = 0
cheack_tree_id = 0
#習得スキルリストから同一スキルを探し出す
for j in 0..@predata.size - 1
#同一スキルが存在する場合スキルLvとツリーIDを抜きだす
if @predata[j][1].id == cheack_list[i]
cheack_lv = @predata[j][0]
cheack_tree_id = @predata[j][2]
#該当スキルを削除
skill_simple_delete(@predata[j],cheack_tree_id,cheack_lv)
@delete_list.push(@predata[j])
end
end
#習得スキルリストから高Lvのスキルを探し出す
for k in 0..@predata.size - 1
#同一ツリーが存在する場合スキルLvをチェックする
if @predata[k][2] == cheack_tree_id
#削除したスキルよりも高Lvであれば削除リストに追加する
if @predata[k][0] > cheack_lv
skill_simple_delete(@predata[k],cheack_tree_id,cheack_lv)
@delete_list.push(@predata[k])
end
end
end
end
end
#--------------------------------------------------------------------------
# ● 前提とされているスキルのID配列を取得
#--------------------------------------------------------------------------
def set_base_skill(skill)
#スキルのIDを取得
cheack_skill_id = skill[1].id
#判定用配列
@based_skill_list = Array.new
#習得スキルリストの前提スキルID配列を探す
for i in 0..@predata.size - 1
#前提スキル配列が存在すれば全てのIDについてチェック
if @predata[i][4] != nil
for j in 0..@predata[i][4].size - 1
#同じスキルIDが存在すればチェック
if @predata[i][4][j] == cheack_skill_id
@based_skill_list[i] = @predata[i][1].id
end
end
end
end
@based_skill_list.compact!
end
#--------------------------------------------------------------------------
# ● スキルの削除処理(スキル指定削除)
#--------------------------------------------------------------------------
def skill_simple_delete(skill,tree_id,cheack_lv)
#<Mツリー>であれば習得していれば処理する
if tree_id < 0
if @draw_class == 0
if @actor.skill_learn?(skill[1])
do_skill_simple_delete(skill)
end
else
if @actor.skill_learn_sub?(skill[1])
do_skill_simple_delete(skill)
end
end
else
#<Fツリー>であれば習得していれば処理する
#該当スキルのLvを取得
skill_lv = skill[0]
#該当スキルを習得していれば処理
if @draw_class == 0
if @actor.skill_learn?(skill[1])
do_skill_simple_delete(skill)
#習得スキルリストの中から同一ツリーのスキルを探す
for i in 0..@predata.size - 1
if @predata[i][2] == tree_id
#前提スキルとの間のスキルに関して削除処理を走らせる
if @predata[i][0] < skill_lv
if @predata[i][0] >=cheack_lv
do_skill_simple_delete(@predata[i])
end
end
end
end
end
else
if @actor.skill_learn_sub?(skill[1])
do_skill_simple_delete(skill)
#習得スキルリストの中から同一ツリーのスキルを探す
for i in 0..@predata.size - 1
if @predata[i][2] == tree_id
#前提スキルとの間のスキルに関して削除処理を走らせる
if @predata[i][0] < skill_lv
if @predata[i][0] >=cheack_lv
do_skill_simple_delete(@predata[i])
end
end
end
end
end
end
end
end
#--------------------------------------------------------------------------
# ● スキルの削除処理(実行処理)
#--------------------------------------------------------------------------
def do_skill_simple_delete(skill)
#スキルを削除
if @draw_class == 0
@actor.forget_skill(skill[1].id)
else
@actor.forget_skill_sub(skill[1].id)
end
#スキルポイント処理
unless @double_cheack.include?(skill[1].id)
@point = use_select_point(skill) * - 1
if @draw_class == 0
@actor.use_skill_point(@actor.class_id,@point)
else
@actor.use_skill_point(@actor.sub_class_id,@point)
end
@point = 0
@double_cheack.push(skill[1].id)
end
refresh
@status_window.refresh if @status_window
end
#--------------------------------------------------------------------------
# ● 最大Lvのチェック
#--------------------------------------------------------------------------
def is_maxlv(skill)
#ツリーIDを取得
flag = 0
skill_tree_id = tree_id(skill)
#ツリーが無ければ、習得をチェック
if skill_tree_id == 0
if @draw_class == 0
if @actor.skill_learn?(skill[1])
return 0
end
else
if @actor.skill_learn_sub?(skill[1])
return 0
end
end
end
#ツリーがある場合
for i in 0..@predata.size - 1
if skill_tree_id == tree_id(@predata[i])
if sub_tree_id(skill) == 0 or sub_tree_id(skill) == sub_tree_id(@predata[i])
if skill[0] < @predata[i][0]
flag = 1
end
end
end
end
#習得チェック
if @draw_class == 0
if @actor.skill_learn?(skill[1])
else
flag = 1
end
else
if @actor.skill_learn_sub?(skill[1])
else
flag = 1
end
end
return flag
end
#--------------------------------------------------------------------------
# ● 前提スキルを取得しているか(0=取得していない 1=取得している)
#--------------------------------------------------------------------------
def cheack_base_skill(skill)
return 1 if skill[4] == nil
#判定用フラグ
flag = 0
flag2 = 1
#判定するする全てのスキルについて処理する
for i in 0..skill[4].size - 1
if flag2 == 1
#判定用の為のスキルデータを作成
cheack_skill = $data_skills[skill[4][i]]
cheack_tree_id = 0
cheack_skill_lv = 0
#習得スキルリストの中から同一スキルを探す
for i in 0..@predata.size - 1
#同一スキルが存在すればツリーIDとスキルLvを取得する
if @predata[i][1] == cheack_skill
cheack_tree_id = @predata[i][2]
cheack_skill_lv = @predata[i][0]
end
end
#スキルリストの中から同一ツリーIDのスキルを探す
if cheack_tree_id != 0
for i in 0..@predata.size - 1
#ツリーIDが同じであればスキルLvを調べる
if @predata[i][2] == cheack_tree_id
#より上位のスキルを覚えていればチェックする
if @predata[i][0] > cheack_skill_lv
if @draw_class == 0
if @actor.skill_learn?(@predata[i][1])
flag = 1
end
else
if @actor.skill_learn_sub?(@predata[i][1])
flag = 1
end
end
end
end
end
end
#判定用スキルを覚えていればチェックする
if @draw_class == 0
if @actor.skill_learn?(cheack_skill)
flag = 1
end
else
if @actor.skill_learn_sub?(cheack_skill)
flag = 1
end
end
if flag != 1
flag2 = 0
else
flag = 0
end
end
end
return flag2
end
#--------------------------------------------------------------------------
# ● 異なるサブツリーを取得しているか(0=取得していない 1=取得している)
#--------------------------------------------------------------------------
def learn_anoter_sub_skill?(skill)
flag = 0
skill_tree_id = tree_id(skill)
skill_sub_tree_id = sub_tree_id(skill)
skill_lv = skill[0]
#全習得データから
for i in 0..@predata.size - 1
#同じツリーのスキルであればサブツリーのIDをチェック
if skill_tree_id == tree_id(@predata[i])
#サブツリーIDが設定されていない項目は判定しない
if skill_sub_tree_id == 0
elsif sub_tree_id(@predata[i]) == 0
#サブツリーが設定されていればIDが異なる時習得しているか判定
elsif sub_tree_id(@predata[i]) != skill_sub_tree_id
if @draw_class == 0
if @actor.skill_learn?(@predata[i][1])
flag = 1
end
else
if @actor.skill_learn_sub?(@predata[i][1])
flag = 1
end
end
end
end
end
return flag
end
#--------------------------------------------------------------------------
# ● スキルをリストに含めるかどうか
#--------------------------------------------------------------------------
def include?(item)
#スキルタイプが違うとリストに含めない
return false if item[1].stype_id != @stype_id
#排他スキルを取得していればリストに含めない
return false if learn_anoter_sub_skill?(item) == 1
#ツリーIDが設定されていないスキルはリストに含める
skill_tree_id = tree_id(item)
return true if skill_tree_id == 0
#覚えているスキルは最大Lvを除いて表示しない
if @draw_class == 0
if @actor.skill_learn?(item[1])
return true if is_maxlv(item) == 0
return false
end
else
if @actor.skill_learn_sub?(item[1])
return true if is_maxlv(item) == 0
return false
end
end
#ツリーIDが設定されている場合
flag = 0
flag2 = 0
for i in 0..@predata.size - 1
#ツリーIDが同一のスキルがあればLvを調べる
if tree_id(@predata[i]) == skill_tree_id
#Lvが高いスキルを習得しているかチェック
if item[0] < @predata[i][0]
#スキルを覚えている場合、フラグ2をON
if @draw_class == 0
if @actor.skill_learn?(@predata[i][1])
flag2 = 1
end
else
if @actor.skill_learn_sub?(@predata[i][1])
flag2 = 1
end
end
end
#Lvが1低いスキルがあれば習得しているかチェック
if item[0] - 1 == @predata[i][0]
#スキルを覚えている場合、フラグ1をON
if @draw_class == 0
if @actor.skill_learn?(@predata[i][1])
flag = 1
end
else
if @actor.skill_learn_sub?(@predata[i][1])
flag = 1
end
end
end
end
end
#実際の判定
#該当スキルよりLvが高い物を覚えていれば表示しない
if flag2 == 1
return false
end
#Lvが1つ下のスキルを習得していない場合Lv1であるかチェック
if flag == 0
if item[0] == 1
return true
else
return false
end
else
return true
end
return true
end
#--------------------------------------------------------------------------
# ● 取得に必要なポイントがあるか(0=無い 1=ある)
#--------------------------------------------------------------------------
def have_need_point(skill)
@point = use_select_point(skill)
if @draw_class == 0
return 0 if @actor.used_skill_points(@actor.class_id) + @point > @actor.max_skillpoint(@actor.class_id)
return 1
else
return 0 if @actor.used_skill_points(@actor.sub_class_id) + @point > @actor.max_skillpoint(@actor.sub_class_id)
return 1
end
end
#--------------------------------------------------------------------------
# ● スキルの有効状態を取得
#--------------------------------------------------------------------------
def skill_enabled?(skill)
#Lvが足りない時
return false if @actor.level < need_lv(skill)
#職業レベルが足りない時
if KURE::BaseScript::USE_JOBLv == 1
return false if @actor.joblevel < need_joblv(skill)
end
#前提スキルを覚えていない時
return false if cheack_base_skill(skill) == 0
#スキルポイントが足りない時
return false if have_need_point(skill) == 0
#スキルを覚えている場合、表示は選択できない
if @draw_class == 0
return false if @actor.skill_learn?(skill[1])
return true
else
return false if @actor.skill_learn_sub?(skill[1])
return true
end
return true
end
#--------------------------------------------------------------------------
# ● 同一ツリーでLvが下のスキルの取得
#--------------------------------------------------------------------------
def under_Lv_skill(skill,lv)
#ツリーIDを取得する
skill_tree_id = tree_id(skill)
#Lvを取得する
skill_lv = skill[0]
#スキルリストをチェックし、Lvが一つ下のスキルを探す
for i in 0..@predata.size - 1
if tree_id(@predata[i]) == skill_tree_id
if @predata[i][0] == skill_lv - lv
if @predata[i][7] == 0 or @predata[i][7] == skill[7]
old_skill = @predata[i][1]
end
end
end
end
return old_skill if old_skill != nil
end
#--------------------------------------------------------------------------
# ● スキルの習得処理
#--------------------------------------------------------------------------
def skill_learn(skill)
#ツリーIDを取得する
skill_tree_id = tree_id(skill)
#Lvが1つ下のスキルのIDを取得
old_skill = under_Lv_skill(skill,1)
#スキルを習得し、古いスキルを忘れる
if @draw_class == 0
@actor.learn_skill(skill[1].id)
else
@actor.learn_skill_sub(skill[1].id)
end
#スキルツリーが0の場合、削除処理は存在しない
if skill_tree_id > 0
if @draw_class == 0
@actor.forget_skill(old_skill.id) if old_skill != nil
else
@actor.forget_skill_sub(old_skill.id) if old_skill != nil
end
end
end
#--------------------------------------------------------------------------
# ● スキルの削除処理(Lvチェック削除)
#--------------------------------------------------------------------------
def skill_forget(skill)
#ツリーIDを取得する
skill_tree_id = tree_id(skill)
#Lvを取得する
skill_lv = skill[0]
#スキルリストをチェックし、Lvが下のスキルを探す
for i in 0..@predata.size - 1
if tree_id(@predata[i]) == skill_tree_id
#Lvが最大かチェックする
if is_maxlv(skill) == 0
#MASTER状態であればこのスキルを忘れ、1個下を覚える
if @predata[i][0] == skill_lv - 1
#サブツリー0か同一
if @predata[i][7] == 0 or @predata[i][7] == skill[7]
new_skill = @predata[i][1]
end
end
forget_skill = skill[1]
#スキルポイントの設定とツリー削除のハッシュを生成
@point = use_select_point(skill) * - 1
@delete_list.push(skill)
@double_cheack.push(skill[1].id)
else
#MASTER状態ではない時、1個下は忘れるスキル
if @predata[i][0] == skill_lv - 1
#サブツリー0か同一
if @predata[i][7] == 0 or @predata[i][7] == skill[7]
forget_skill = @predata[i][1]
#スキルポイントの設定とツリー削除のハッシュを生成
@point = use_select_point(@predata[i]) * - 1
@delete_list.push(@predata[i])
@double_cheack.push(@predata[i][1].id)
end
end
#2個下が存在すれば覚えるスキル
if @predata[i][0] == skill_lv - 2
#サブツリー0か同一
if @predata[i][7] == 0 or @predata[i][7] == skill[7]
new_skill = @predata[i][1]
end
end
end
end
end
#スキルを習得し、今のスキルを忘れる
#スキルツリーが0の場合、習得処理は存在しない
if skill_tree_id != 0
if @draw_class == 0
@actor.learn_skill(new_skill.id) if new_skill != nil
else
@actor.learn_skill_sub(new_skill.id) if new_skill != nil
end
end
if @draw_class == 0
@actor.forget_skill(forget_skill.id) if forget_skill != nil
else
@actor.forget_skill_sub(forget_skill.id) if forget_skill != nil
end
end
#--------------------------------------------------------------------------
# ● コマンドリストの作成
#--------------------------------------------------------------------------
def make_command_list
#データ配列を作成
@data = Array.new
#職業習得スキルリストを作成
if @draw_class == 0
@predata = @actor ? @actor.point_skills : []
else
if @actor.sub_class_id != 0
@predata = @actor ? @actor.point_skills_sub : []
else
@predata = []
end
end
#ツリーID基準で並べ直す
@predata.sort!{ |a, b| a[2] <=> b[2] }
#表示するためのデータ配列を作成
for i in 0..@predata.size - 1
if include?(@predata[i])
@data[i] = @predata[i]
end
end
@data.compact!
if @data.size != 0
for i in 0..@data.size - 1
skill = @data[i]
#スキルの有効状態を取得
if skill_enabled?(skill)
add_command(skill[1].name , :ok ,true)
else
add_command(skill[1].name , :ok ,false)
end
end
end
end
end
#==============================================================================
# ■ Window_k_SkillPoint_SkillCommand(新規)
#==============================================================================
class Window_k_SkillPoint_SkillCommand < Window_Command
attr_accessor :actor
attr_accessor :skill_point_window
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(x, y, width, height)
@width = width
@height = height
super(x, y)
end
#--------------------------------------------------------------------------
# ● ウィンドウ高さの取得
#--------------------------------------------------------------------------
def window_height
return @height
end
#--------------------------------------------------------------------------
# ● ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width
return @width
end
#--------------------------------------------------------------------------
# ● カーソル位置の設定
#--------------------------------------------------------------------------
def index=(index)
@index = index
update_cursor
call_update_help
return if @index < 0
@skill_point_window.stype_id = current_ext if @skill_point_window
end
#--------------------------------------------------------------------------
# ● アクターの設定
#--------------------------------------------------------------------------
def actor=(actor)
return if @actor == actor
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# ● 描画するクラス の設定
#--------------------------------------------------------------------------
def draw_class=(draw_class)
return if @draw_class == draw_class
@draw_class = draw_class
refresh
end
#--------------------------------------------------------------------------
# ● 全項目の描画
#--------------------------------------------------------------------------
def draw_all_items
item_max.times {|i| draw_item(i) }
end
#--------------------------------------------------------------------------
# ● 選択項目の拡張データを取得
#--------------------------------------------------------------------------
def current_ext
current_data ? current_data[:ext] : nil
end
#--------------------------------------------------------------------------
# ● コマンドリストの作成
#--------------------------------------------------------------------------
def make_command_list
return unless @actor
@actor.added_skill_types.sort.each do |stype_id|
name = $data_system.skill_types[stype_id]
if KURE::SkillPoint::NOT_VIEW_SKILLTYPE.include?(stype_id)
else
add_command(name, :skill, true, stype_id)
end
end
end
end
#==============================================================================
# ■ Window_k_SkillPoint_PopupWindow(新規)
#==============================================================================
class Window_k_SkillPoint_PopupWindow < Window_Base
attr_accessor :skill_point_window
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
contents.clear
skill = @skill_point_window.data[@skill_point_window.index] if @skill_point_window
draw_gauge(5, 0, contents.width, 1, mp_gauge_color2,crisis_color)
draw_text(5, 0, contents.width, line_height, "Confirm?")
if @skill_point_window
draw_item_name(skill[1], 5, line_height)
#描画用のLv設定
if skill[2] != 0
lv_after = "Lv"
lv_after += " " if skill[0] < 10
lv_after += skill[0].to_s
draw_text(0, line_height * 1, contents.width, line_height, lv_after, 2)
end
draw_text(5, line_height * 2, contents.width, line_height, "JOBEXP")
draw_text(0, line_height * 2, contents.width, line_height, skill[3], 2)
end
end
end
#==============================================================================
# ■ Window_k_SkillPoint_DecideCommand(新規)
#==============================================================================
class Window_k_SkillPoint_DecideCommand < Window_Command
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(x, y, width, height)
@width = width
@height = height
super(x, y)
end
#--------------------------------------------------------------------------
# ● 桁数の取得
#--------------------------------------------------------------------------
def col_max
return 2
end
#--------------------------------------------------------------------------
# ● ウィンドウ高さの取得
#--------------------------------------------------------------------------
def window_height
return @height
end
#--------------------------------------------------------------------------
# ● ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width
return @width
end
#--------------------------------------------------------------------------
# ● コマンドリストの作成
#--------------------------------------------------------------------------
def make_command_list
add_command("習得する" , :ok ,true)
add_command("やめる" , :ok ,true)
end
end
#==============================================================================
# ■ Window_k_SkillPoint_Class_Grade_Command(新規)
#==============================================================================
class Window_k_SkillPoint_Class_Grade_Command < Window_HorzCommand
attr_accessor :skill_point_window
attr_accessor :skill_type_window
attr_accessor :status_window
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(x, y, width)
@window_width = width
super(x, y)
end
#--------------------------------------------------------------------------
# ● ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width
@window_width
end
#--------------------------------------------------------------------------
# ● アクターの設定
#--------------------------------------------------------------------------
def actor=(actor)
return if @actor == actor
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# ● 桁数の取得
#--------------------------------------------------------------------------
def col_max
2
end
#--------------------------------------------------------------------------
# ● カーソル位置の設定
#--------------------------------------------------------------------------
def index=(index)
@index = index
update_cursor
call_update_help
return if @index < 0
@skill_point_window.draw_class = @index if @skill_point_window
@skill_type_window.draw_class = @index if @skill_type_window
@status_window.draw_class = @index if @status_window
end
#--------------------------------------------------------------------------
# ● コマンドリストの作成
#--------------------------------------------------------------------------
def make_command_list
add_command("メインクラス" , :ok ,true)
if @actor != nil
if KURE::BaseScript::USE_JOBLv == 1
if @actor.sub_class_id != 0
add_command("サブクラス" , :ok ,true)
else
add_command("サブクラス" , :ok ,false)
end
end
end
end
end
#==============================================================================
# ■ Window_k_Infomation_Window(新規)
#==============================================================================
class Window_k_Infomation_Window < Window_Base
attr_accessor :skill_point_window
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(x, y,width,height)
super(x, y, width, height)
refresh
end
#--------------------------------------------------------------------------
# ● アイテムの設定
#--------------------------------------------------------------------------
def item=(item)
return if @item == item
@item = item
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
contents.clear
change_color(system_color)
draw_text(0, 0, (contents.width / 5) - 5, line_height, "Cost " + KURE::SkillPoint::Skill_Point_NAME + ":")
draw_text(contents.width / 5, 0, (contents.width / 5) - 5, line_height, "SP Cost:")
# Koucha hashiri draw_text(contents.width / 5 * 2, 0, (contents.width / 5) - 5, line_height, "TP Cost:")
# Koucha hashiri draw_text(contents.width / 5 * 3, 0, contents.width / 5 * 1.7, line_height, "Attack Attribute:")
return unless @item
change_color(normal_color)
draw_text(0, 0, (contents.width / 5) - 5, line_height, @item[3].to_s, 2)
draw_text(contents.width / 5, 0, (contents.width / 5) - 5, line_height, @item[1].mp_cost.to_s, 2)
# Koucha hashiri draw_text(contents.width / 5 * 2, 0, (contents.width / 5) - 5, line_height, @item[1].tp_cost.to_s, 2)
str4 = $data_system.elements[@item[1].damage.element_id]
str4 = "None" if @item[1].damage.element_id == 0
str4 = "Weapon Dependent" if @item[1].damage.element_id == -1
# Koucha hashiri draw_text(contents.width / 5 * 3, 0, contents.width / 5 * 1.7, line_height, str4, 2)
end
end