276 lines
No EOL
12 KiB
Ruby
276 lines
No EOL
12 KiB
Ruby
#==============================================================================
|
||
# ■ Game_Actors
|
||
#------------------------------------------------------------------------------
|
||
# アクターの配列のラッパーです。このクラスのインスタンスは $game_actors で参
|
||
# 照されます。
|
||
#==============================================================================
|
||
|
||
class Game_Actors
|
||
#--------------------------------------------------------------------------
|
||
# ● アクターの取得 ※再定義
|
||
#--------------------------------------------------------------------------
|
||
def [](actor_id)
|
||
return nil unless $data_actors[actor_id]
|
||
#@data[actor_id] ||= SUMMON_ACTORS.include?(actor_id) ? Game_Servant.new(actor_id) : Game_Actor.new(actor_id)
|
||
@data[actor_id] ||= SummonSystem::SUMMON_ACTORS.include?(actor_id) ? Game_Servant.new(actor_id) : Game_Actor.new(actor_id)
|
||
end
|
||
end
|
||
|
||
#==============================================================================
|
||
# ■ Game_Servant
|
||
#------------------------------------------------------------------------------
|
||
# 召喚アクターを扱うクラスです。
|
||
# このクラスの基本的な扱いは Game_Actorクラスと同じになります。
|
||
#==============================================================================
|
||
|
||
class Game_Servant < Game_Actor
|
||
#--------------------------------------------------------------------------
|
||
# ○ 召喚ユニットは死亡と同時に消滅
|
||
#--------------------------------------------------------------------------
|
||
def summon_death
|
||
summon_remove if death_state? && !$game_party.summon_no_remove
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○ 召喚ユニットか
|
||
#--------------------------------------------------------------------------
|
||
def summon_type?
|
||
return true #actor.note.include?("<召喚ユニット>")
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○
|
||
#--------------------------------------------------------------------------
|
||
def bonus_text
|
||
SummonSystem::BONUS_TEXT[@actor_id]
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○
|
||
#--------------------------------------------------------------------------
|
||
def bonus_class_number
|
||
if actor.note =~ /\<ボーナスクラス:(\d+)\>/
|
||
return $1.to_i
|
||
else
|
||
return 0
|
||
end
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○
|
||
#--------------------------------------------------------------------------
|
||
def bonus_class
|
||
$game_actors[1].pp >= 100 ? [$data_classes[bonus_class_number]].compact : []
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○ アクティブ武器スキルの職業データを返す
|
||
#--------------------------------------------------------------------------
|
||
def weapon_skill
|
||
super + bonus_class
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○ 戦闘終了後の回復率
|
||
#--------------------------------------------------------------------------
|
||
def heal_rate
|
||
rate = 0
|
||
if actor.note =~ /\<戦闘終了後回復率:(\d+)\>/
|
||
rate += $1.to_i
|
||
else
|
||
rate += SummonSystem::BASE_HEAL
|
||
end
|
||
rate += (heal_lv_rate($game_actors[1].pp)).to_i
|
||
[full_equip.inject(rate) {|r, full_e| r += full_e.heal_rate_plus }, 1].max
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○ 回復値の上昇
|
||
#--------------------------------------------------------------------------
|
||
def heal_lv_rate(base)
|
||
return [(base / 10), 10].min
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○ 召喚ユニットの消滅
|
||
#--------------------------------------------------------------------------
|
||
def summon_remove
|
||
$game_party.remove_actor(@actor_id)
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○ 割合回復 ※改修時に追加
|
||
#--------------------------------------------------------------------------
|
||
def summon_heal(rate)
|
||
rate += heal_rate
|
||
@hp = 1 if dead?
|
||
@hp += mhp * rate / 100
|
||
@mp += mmp * rate / 100
|
||
@tp += max_tp * rate / 100
|
||
clear_states
|
||
clear_buffs
|
||
refresh
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○ 次に覚える予定のスキル配列
|
||
#--------------------------------------------------------------------------
|
||
def next_skills
|
||
#@next_skills ||= next_skills_set
|
||
$game_temp.next_skills[@actor_id] ||= next_skills_set
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○ 次に覚える予定のスキル配列設定 3つまで
|
||
#--------------------------------------------------------------------------
|
||
def next_skills_set
|
||
ns = []
|
||
all = self.class.learnings.select {|learn| learn.level > level }
|
||
all.each_with_index do |skill, i|
|
||
ns.push(skill)
|
||
break if i == 2
|
||
end
|
||
return ns
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ● レベルアップ
|
||
#--------------------------------------------------------------------------
|
||
def level_up
|
||
super
|
||
#@next_skills = next_skills_set
|
||
$game_temp.next_skills[@actor_id] = next_skills_set
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ● 逃げる
|
||
#--------------------------------------------------------------------------
|
||
def escape
|
||
summon_remove
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○ ガッツ無しの戦闘不能 ※召喚ユニットは死亡と同時にMP・TPが0になる
|
||
#--------------------------------------------------------------------------
|
||
def no_guts_die
|
||
@mp = @tp = 0 if !$game_party.summon_no_remove
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ● 装備スロットの配列を取得
|
||
#--------------------------------------------------------------------------
|
||
def equip_slots
|
||
return [4,4,4,0,0,2,3] if dual_wield? # 二刀流
|
||
return [4,4,4,0,1,2,3] # 通常
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○ 召喚ユニットのレベルの変更 ※改修
|
||
#--------------------------------------------------------------------------
|
||
def summon_level_set(level)
|
||
return if @level == level
|
||
level = [[level, max_level].min, 1].max
|
||
change_exp(exp_for_level(level), false)
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# 〇 スキルを覚える
|
||
#--------------------------------------------------------------------------
|
||
def learn_skill(skill_id)
|
||
if !skill_learn?($data_skills[skill_id]) && $data_skills[skill_id].stype_id == ECSystem::EC_S_ID
|
||
@equip_class.each_with_index do |obj, i|
|
||
if obj.is_nil?
|
||
equip_classchange(i, $data_skills[skill_id])
|
||
break
|
||
end
|
||
end
|
||
end
|
||
super(skill_id)
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○ スキルレベルの取得 ※スキルレベルを召喚ユニットにも反映
|
||
#--------------------------------------------------------------------------
|
||
def summon_skill_lv_set
|
||
plus = 1
|
||
plus += 1 if $game_actors[1].pp >= SummonSystem::LIBERATE_S_LV[0]
|
||
plus += 1 if $game_actors[1].pp >= SummonSystem::LIBERATE_S_LV[1]
|
||
full_equip.inject(plus) {|r, item| r += item.slv_plus }
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○ スキルレベルの取得 ※スキルレベルを召喚ユニットにも反映
|
||
#--------------------------------------------------------------------------
|
||
def skill_lv(skill_id)
|
||
return 1 if skill_id == 0 || !$data_skills[skill_id].lvup_able?
|
||
slv = summon_skill_lv_set
|
||
slv += actor.slv_plus
|
||
return [slv, Learn::S_LV_MAX].min
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ● 経験値の獲得(経験獲得率を考慮) 召喚ユニットは経験値を獲得せず
|
||
#--------------------------------------------------------------------------
|
||
def gain_exp(exp)
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○ 解放率による召喚ユニットの能力値の上昇 全ステータス
|
||
#--------------------------------------------------------------------------
|
||
def liberate_summon_point(param_id)
|
||
#($game_variables[FAKEREAL::LIBERATE] * (@sg_base[param_id] * liberate_lv_point(param_id))).to_i
|
||
($game_actors[1].pp * (actor.summon_growth[param_id] * liberate_lv_point(param_id))).to_i
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ● 通常能力値の基本値取得
|
||
#--------------------------------------------------------------------------
|
||
def param_base(param_id)
|
||
super(param_id) + liberate_summon_point(param_id)
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ● TP の最大値を取得 ※追加 ※エイリアス
|
||
#--------------------------------------------------------------------------
|
||
def max_tp
|
||
super + liberate_summon_point(8)
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ● 防具装備可能の判定
|
||
#--------------------------------------------------------------------------
|
||
#def equip_atype_ok?(atype_id)
|
||
#super || SummonSystem::RUNE_ID.include?(atype_id)
|
||
#end
|
||
#--------------------------------------------------------------------------
|
||
# ○ 召喚可能枠の追加 ※サーヴァントには必要ない為0を返す
|
||
#--------------------------------------------------------------------------
|
||
def summon_plus
|
||
return 0
|
||
end
|
||
#--------------------------------------------------------------------------
|
||
# ○ ※スキル確認用
|
||
#--------------------------------------------------------------------------
|
||
def skills_disp
|
||
@skills
|
||
end
|
||
end
|
||
|
||
module SummonSystem
|
||
BONUS_TEXT = Hash[
|
||
5 => "\e}氷・闇の術適正+20:弱点属性帳消し\n氷・闇耐性+:「\edb[s,545]」の魅了確率+\e{",#アネモネ
|
||
6 => "物理与ダメージ1.2倍\n「\ei[50]」弱体完全ガード",#フェンサー
|
||
7 => "\epr[0]1.2倍\nスキル「\edb[s,307]」の復活時HP100%",#ディフェンダー
|
||
8 => "回復の術適正+10\n\epr[1]1.2倍",#ヒーラー
|
||
9 => "炎・氷・雷の術適正+10\n\epr[1]1.2倍",#エレメ
|
||
10 => "回避率+5・魔法回避率:+10\n\e}\epr[6]1.2倍:盗みの基本成功率1.5倍\e{",#シーフ
|
||
11 => "\epr[0]・\epr[1]1.05倍\n全ダメージ10%軽減",#バチェラー
|
||
12 => "炎の術適正+20:光の術適正+5\n氷ダメージ軽減",#イフリート
|
||
13 => "炎ダメージ軽減\n\epr[2]・\epr[6]1.2倍",#フェンリル
|
||
14 => "氷・光ダメージ微軽減\n雷の術適正+20",#ヌエ
|
||
15 => "光の術適正+20:回復の術適正+5\n闇ダメージ軽減",#ユニコーン
|
||
16 => "闇の術適正+20\n光・\edb[el,7]ダメージ軽減",#バイコーン
|
||
17 => "\edb[st,2]、\edb[st,7]無効・その他状態耐性(中)\n光・闇ダメージ微軽減",#ニーズヘッグ
|
||
]
|
||
|
||
HEAL_ITEM = "<サーヴァント回復>" # サーヴァントの回復アイテムノートコメント
|
||
|
||
end
|
||
|
||
#==============================================================================
|
||
# ■ Game_Temp
|
||
#------------------------------------------------------------------------------
|
||
# セーブデータに含まれない、一時的なデータを扱うクラスです。このクラスのイン
|
||
# スタンスは $game_temp で参照されます。
|
||
#==============================================================================
|
||
|
||
class Game_Temp
|
||
#--------------------------------------------------------------------------
|
||
# ● 公開インスタンス変数
|
||
#--------------------------------------------------------------------------
|
||
attr_accessor :next_skills # アクターが次に覚えるスキルの配列
|
||
#--------------------------------------------------------------------------
|
||
# ● オブジェクト初期化
|
||
#--------------------------------------------------------------------------
|
||
alias next_skills_initialize initialize
|
||
def initialize
|
||
next_skills_initialize
|
||
@next_skills = {}
|
||
end
|
||
end |