self.note.each_line { |line|
case line
when KGC::SkillCPSystem::Regexp::Skill::CP_COST
# 消費 CP
@__cp_cost = $1.to_i
end
}
end
#--------------------------------------------------------------------------
# ○ 消費 CP
#--------------------------------------------------------------------------
def cp_cost
create_skill_cp_system_cache if @__cp_cost == nil
return @__cp_cost
end
end
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_writer :maxcp_plus # MaxCP 補正値
#--------------------------------------------------------------------------
# ○ MaxCP 取得
#--------------------------------------------------------------------------
def maxcp
calc_exp = KGC::SkillCPSystem::PERSONAL_CP_CALC_EXP[self.id]
if calc_exp == nil
calc_exp = KGC::SkillCPSystem::CP_CALC_EXP
end
n = Integer(eval(calc_exp))
n = [[n, cp_limit].min, KGC::SkillCPSystem::CP_MIN].max
n += maxcp_plus + maxcp_plus_equip
return [[n, revised_cp_limit].min, KGC::SkillCPSystem::REVISED_CP_MIN].max
end
#--------------------------------------------------------------------------
# ○ CP 取得
#--------------------------------------------------------------------------
def cp
return [maxcp - consumed_cp, 0].max
end
#--------------------------------------------------------------------------
# ○ CP 消費量取得
#--------------------------------------------------------------------------
def consumed_cp
n = 0
battle_skills.compact.each { |skill| n += skill.cp_cost }
return n
end
#--------------------------------------------------------------------------
# ○ CP 上限取得
#--------------------------------------------------------------------------
def cp_limit
return KGC::SkillCPSystem::CP_MAX
end
#--------------------------------------------------------------------------
# ○ 補正後の CP 上限取得
#--------------------------------------------------------------------------
def revised_cp_limit
return KGC::SkillCPSystem::REVISED_CP_MAX
end
#--------------------------------------------------------------------------
# ○ MaxCP 補正値取得
#--------------------------------------------------------------------------
def maxcp_plus
if @maxcp_plus == nil
if @own_cp != nil
@maxcp_plus = @own_cp
@own_cp = nil
else
@maxcp_plus = 0
end
end
return @maxcp_plus
end
#--------------------------------------------------------------------------
# ○ 装備品による MaxCP 補正値取得
#--------------------------------------------------------------------------
def maxcp_plus_equip
n = 0
equips.compact.each { |item| n += item.maxcp_plus }
return n
end
#--------------------------------------------------------------------------
# ● スキル取得
#--------------------------------------------------------------------------
alias skills_KGC_SkillCPSystem skills
def skills
return (skill_cp_restrict? ? restricted_skills : skills_KGC_SkillCPSystem)
end
#--------------------------------------------------------------------------
# ○ スキルを制限するか
#--------------------------------------------------------------------------
def skill_cp_restrict?
if $game_temp.in_battle
# 戦闘テストでないか、戦闘テストでも制限する場合
return true unless $BTEST && KGC::SkillCPSystem::DISABLE_IN_BATTLETEST
end
return false
end
#--------------------------------------------------------------------------
# ○ スキルを制限
#--------------------------------------------------------------------------
def restricted_skills
result = all_skills
result.each_with_index { |skill, i|
# 消費 CP > 0 のスキルを除外
if !KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL || skill.cp_cost > 0
result = nil
end
# パッシブスキルを除外
if $imported["PassiveSkill"] && KGC::SkillCPSystem::PASSIVE_NEED_TO_SET
if skill.passive &&
(!KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL || skill.cp_cost > 0)
result = nil
end
end
}
result.compact!
# 戦闘スキルを追加
result |= battle_skills
result.sort! { |a, b| a.id <=> b.id }
return result
end
#--------------------------------------------------------------------------
# ○ 全スキル取得
#--------------------------------------------------------------------------
def all_skills
# 一時的に非戦闘中にする
last_in_battle = $game_temp.in_battle
$game_temp.in_battle = false
result = skills_KGC_SkillCPSystem
if $imported["EquipLearnSkill"]
result |= (equipment_skills | full_ap_skills)
result.sort! { |a, b| a.id <=> b.id }
end
# 戦闘中フラグを戻す
$game_temp.in_battle = last_in_battle
return result
end
#--------------------------------------------------------------------------
# ○ 登録スキル最大数取得
#--------------------------------------------------------------------------
def battle_skill_max
@battle_skill_max = -1 if @battle_skill_max == nil
n = (@battle_skill_max < 0 ?
KGC::SkillCPSystem::MAX_SKILLS : @battle_skill_max)
n += equipment_battle_skill_max_plus
return [n, 0].max
end
#--------------------------------------------------------------------------
# ○ 装備品による登録スキル数補正
#--------------------------------------------------------------------------
def equipment_battle_skill_max_plus
n = 0
equips.compact.each { |item| n += item.battle_skill_max_plus }
return n
end
#--------------------------------------------------------------------------
# ○ 登録スキル最大数設定
#--------------------------------------------------------------------------
def battle_skill_max=(value)
@battle_skill_max = value
if @battle_skills == nil
@battle_skills = []
else
@battle_skills = @battle_skills[0...value]
end
restore_passive_rev if $imported["PassiveSkill"]
end
#--------------------------------------------------------------------------
# ○ 戦闘用スキル ID 取得
#--------------------------------------------------------------------------
def battle_skill_ids
@battle_skills = [] if @battle_skills == nil
return @battle_skills
end
#--------------------------------------------------------------------------
# ○ 戦闘用スキル取得
#--------------------------------------------------------------------------
def battle_skills
result = []
battle_skill_ids.each { |i|
next if i == nil # 無効なスキルは無視
result << $data_skills
}
return result
end
#--------------------------------------------------------------------------
# ○ 戦闘用スキル登録
# index : 位置
# skill : スキル (nil で解除)
#--------------------------------------------------------------------------
def set_battle_skill(index, skill)
if skill == nil
@battle_skills[index] = nil
else
return unless skill.is_a?(RPG::Skill) # スキル以外
return if cp < skill.cp_cost # CP 不足
return if KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL && skill.cp_cost == 0
@battle_skills[index] = skill.id
end
restore_passive_rev if $imported["PassiveSkill"]
end
#--------------------------------------------------------------------------
# ○ 戦闘用スキル追加登録
# skill : スキル
#--------------------------------------------------------------------------
def add_battle_skill(skill)
return unless skill.is_a?(RPG::Skill) # スキル以外
skills = battle_skill_ids
return if skills.include?(skill.id) # 登録済み
return if cp < skill.cp_cost # CP 不足
return if KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL && skill.cp_cost == 0
battle_skill_max.times { |i|
# 空きがあれば登録
if skills == nil
set_battle_skill(i, skill)
break
end
}
restore_battle_skill
end
#--------------------------------------------------------------------------
# ○ 戦闘用スキル解除
# index : 位置
#--------------------------------------------------------------------------
def remove_battle_skill(index)
@battle_skills[index] = nil
restore_passive_rev if $imported["PassiveSkill"]
end
#--------------------------------------------------------------------------
# ○ 戦闘用スキル全解除
#--------------------------------------------------------------------------
def clear_battle_skill
@battle_skills = []
restore_passive_rev if $imported["PassiveSkill"]
end
#--------------------------------------------------------------------------
# ○ 戦闘用スキルセット可否判定
# index : 位置
# skill : スキル
#--------------------------------------------------------------------------
def battle_skill_settable?(index, skill)
return false if battle_skill_max <= index # 範囲外
return true if skill == nil # nil は解除なので OK
return false if battle_skill_ids.include?(skill.id) # セット済み
return true
end
#--------------------------------------------------------------------------
# ○ 戦闘用スキルを修復
#--------------------------------------------------------------------------
def restore_battle_skill
result = battle_skill_ids.clone
usable_skills = all_skills
result.each_with_index { |n, i|
next if n == nil
# 未修得の場合は解除
if (usable_skills.find { |s| s.id == n }) == nil
result = nil
end
}
@battle_skills = result[0...battle_skill_max]
# CP 不足のスキルを下から順に外す
(battle_skill_max - 1).downto(0) { |i|
@battle_skills = nil if maxcp - consumed_cp < 0
}
end
#--------------------------------------------------------------------------
# ● 装備の変更 (オブジェクトで指定)
# equip_type : 装備部位 (0..4)
# item : 武器 or 防具 (nil なら装備解除)
# test : テストフラグ (戦闘テスト、または装備画面での一時装備)
#--------------------------------------------------------------------------
alias change_equip_KGC_SkillCPSystem change_equip
def change_equip(equip_type, item, test = false)
change_equip_KGC_SkillCPSystem(equip_type, item, test)
unless test
restore_battle_skill
restore_passive_rev if $imported["PassiveSkill"]
end
end
#--------------------------------------------------------------------------
# ● 装備の破棄
# item : 破棄する武器 or 防具
# 武器/防具の増減で「装備品も含める」のとき使用する。
#--------------------------------------------------------------------------
alias discard_equip_KGC_SkillCPSystem discard_equip
def discard_equip(item)
discard_equip_KGC_SkillCPSystem(item)
restore_battle_skill
restore_passive_rev if $imported["PassiveSkill"]
end
#--------------------------------------------------------------------------
# ● 経験値の変更
# exp : 新しい経験値
# show : レベルアップ表示フラグ
#--------------------------------------------------------------------------
alias change_exp_KGC_SkillCPSystem change_exp
def change_exp(exp, show)
# 習得したスキルを表示するため、戦闘中フラグを一時的に解除
last_in_battle = $game_temp.in_battle
$game_temp.in_battle = false
change_exp_KGC_SkillCPSystem(exp, show)
$game_temp.in_battle = last_in_battle
end
if KGC::SkillCPSystem::AUTO_SET_NEW_SKILL
#--------------------------------------------------------------------------
# ● スキルを覚える
# skill_id : スキル ID
#--------------------------------------------------------------------------
alias learn_skill_KGC_SkillCPSystem learn_skill
def learn_skill(skill_id)
learn_skill_KGC_SkillCPSystem(skill_id)
add_battle_skill($data_skills[skill_id])
end
end # <- if KGC::SkillCPSystem::AUTO_SET_NEW_SKILL
#--------------------------------------------------------------------------
# ● スキルを忘れる
# skill_id : スキル ID
#--------------------------------------------------------------------------
alias forget_skill_KGC_SkillCPSystem forget_skill
def forget_skill(skill_id)
# 忘れるスキルを戦闘用スキルから削除
battle_skill_ids.each_with_index { |s, i|
remove_battle_skill(i) if s == skill_id
}
if KGC::SkillCPSystem::SHOW_STATUS_CP
class Window_Status < Window_Base
#--------------------------------------------------------------------------
# ● 基本情報の描画
# x : 描画先 X 座標
# y : 描画先 Y 座標
#--------------------------------------------------------------------------
alias draw_basic_info_KGC_SkillCPSystem draw_basic_info
def draw_basic_info(x, y)
draw_basic_info_KGC_SkillCPSystem(x, y)
class Window_BattleSkillStatus < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# x : ウィンドウの X 座標
# y : ウィンドウの Y 座標
# actor : アクター
#--------------------------------------------------------------------------
def initialize(x, y, actor)
super(x, y, Graphics.width, WLH + 32)
@actor = actor
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
self.contents.clear
draw_actor_name(@actor, 4, 0)
draw_actor_level(@actor, 140, 0)
draw_actor_cp(@actor, 240, 0)
end
end
# 消費 CP 0 なら常に使用可能な場合
if KGC::SkillCPSystem::USABLE_COST_ZERO_SKILL && skill.cp_cost == 0
return false
end
# 戦闘時に使用可能ならOK
return true if skill.battle_ok?
# 使用不可でもセット可能な場合
if KGC::SkillCPSystem::SHOW_UNUSABLE_SKILL && skill.occasion == 3
return true
end
return false
end
#--------------------------------------------------------------------------
# ○ 項目の描画
# index : 項目番号
#--------------------------------------------------------------------------
def draw_item(index)
rect = item_rect(index)
self.contents.clear_rect(rect)
skill = @data[index]
if skill != nil
rect.width -= 4
enabled = @actor.battle_skill_settable?(@slot_index, skill)
draw_item_name(skill, rect.x, rect.y, enabled)
self.contents.draw_text(rect, skill.cp_cost, 2)
else
self.contents.draw_text(rect, KGC::SkillCPSystem::RELEASE_TEXT, 1)
end
end
#--------------------------------------------------------------------------
# ● フレーム更新
#--------------------------------------------------------------------------
def update
super
return unless self.active
if Input.repeat?(Input::RIGHT)
cursor_pagedown
elsif Input.repeat?(Input::LEFT)
cursor_pageup
end
end
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(skill == nil ? "" : skill.description)
end
end
class Scene_Menu < Scene_Base
if KGC::SkillCPSystem::USE_MENU_SET_SKILL_COMMAND
#--------------------------------------------------------------------------
# ● コマンドウィンドウの作成
#--------------------------------------------------------------------------
alias create_command_window_KGC_SkillCPSystem create_command_window
def create_command_window
create_command_window_KGC_SkillCPSystem
return if $imported["CustomMenuCommand"]
@__command_set_battle_skill_index =
@command_window.add_command(Vocab.set_battle_skill)
if @command_window.oy > 0
@command_window.oy -= Window_Base::WLH
end
@command_window.index = @menu_index
end
end
#--------------------------------------------------------------------------
# ● コマンド選択の更新
#--------------------------------------------------------------------------
alias update_command_selection_KGC_SkillCPSystem update_command_selection
def update_command_selection
call_set_battle_skill_flag = false
if Input.trigger?(Input::C)
case @command_window.index
when @__command_set_battle_skill_index # スキル設定
call_set_battle_skill_flag = true
end
end
# スキル設定画面に移行
if call_set_battle_skill_flag
if $game_party.members.size == 0
Sound.play_buzzer
return
end
Sound.play_decision
start_actor_selection
return
end
update_command_selection_KGC_SkillCPSystem
end
#--------------------------------------------------------------------------
# ● アクター選択の更新
#--------------------------------------------------------------------------
alias update_actor_selection_KGC_SkillCPSystem update_actor_selection
def update_actor_selection
if Input.trigger?(Input::C)
$game_party.last_actor_index = @status_window.index
Sound.play_decision
case @command_window.index
when @__command_set_battle_skill_index # スキル設定
$scene = Scene_SetBattleSkill.new(
@status_window.index,
@__command_set_battle_skill_index,
Scene_SetBattleSkill::HOST_MENU)
return
end
end