#==============================================================================
# ■ クラス詳細化 + 進化 By 貪藻矢射妥←
#
# クラス名だけ違う、あるいは似たようなクラスを作成した時、武器や防具を
# 追加、削除した時の対応が煩わしい・・・ってのをラクさせようというもの。
#
# 装備品はすべて装備品のサブクラスで装備可能なものをスクリプトで整理します。
#
# また、ステート、属性有効度も拡張してみます。
#
# ※メインクラスにはそのキャラ固有の装備しか設定しないので、初期装備が
# できなくなっちゃいます。すみません。
#
# ちなみに、スクリプトで
# class_evolve(ID, value)
# を行うとクラスの進化が可能です。
#
#
#==============================================================================
# 更新っぽいもの
# 2011:07:01
# ・属性詳細化 Plus改修にともなう変更
#
# 2024:02:01
# ・多刀流の処理変更
# ・外部フラグ追加
$OuterFlgs = {} if $OuterFlgs == nil
$OuterFlgs["Class_Evolve"] = true
module CLASS_EVOLVE
CLS_RANK = {
"S" => 0,
"A" => 1,
"B" => 2,
"C" => 3,
"D" => 4,
"E" => 5,
"F" => 6,
"G" => 7,
"H" => 8
}
# -S- -A- -B- -C- -D- -E- -F- -G- -H-
STATE_RANK_TABLE = [ 100, 90, 80, 60, 50, 40, 20, 10, 0]
ELEMENT_RANK_TABLE = [ 225, 200, 150, 100, 50, 0, -50, -100, -120]
CLS_E_SET = {
# ID => [["Class name", {Evolve Element Ranks}, {Ecolve State Ranks}]...]
1 => [["運の女神", nil, nil],
["\\r[歳殺月天,さいさつげってん]", {1=>"D", 2=>"D", 3=>"D", 4=>"D", 5=>"D", 6=>"D", 7=>"D", 8=>"D", 9=>"D"}, {14=>"F"}],
["位の\\r[御子,みこ]", nil, {2=>"D", 3=>"D", 4=>"D", 6=>"D", 7=>"D", 8=>"D"}]],
2 => [["拳帝", nil, nil],
["魔封拳帝", {1=>"D", 2=>"D", 3=>"D", 4=>"D", 5=>"D", 6=>"D", 7=>"D", 8=>"D", 9=>"D"}, nil],
["世界を見守る者", nil, nil]],
3 => [["侍", nil, nil],
["剣聖", {7=>"E", 8=>"E"}, {4=>"E", 6=>"E", 7=>"E", 18=>"E"}]],
4 => [["ガンマン", nil, nil],
["スナイパー", nil, nil]],
5 => [["剣客", nil, nil],
["百合剣客", nil, nil]],
6 => [["\\r[槍使い,ランサー]", nil, nil],
["雀聖\\r[槍使い,ランサー]", nil, nil]],
7 => [["剣客", nil, nil],
["シスコン剣客", nil, nil]],
9 => [["敏腕警部", nil, nil],
["真理からの\\r[帰還者,リターナー]", nil, nil],
["世界を管理する者", nil, nil]],
10 => [["トレジャーハンター", nil, nil],
["真理への\\r[探求者,シーカー]", nil, nil],
["世界を動かす者", nil, nil]],
12 => [["\\r[明殺,みょうさつ]者", nil, nil],
["\\r[黄幡,おうばん]の\\r[明殺,みょうさつ]者", nil, nil]],
13 => [["\\r[赤眉,チーメイ]", nil, nil],
["夢幻なる\\r[赤眉,チーメイ]", nil, nil]],
14 => [["\\r[壬生狼,みぶろ]", nil, nil],
["\\r[豹尾,ひょうび]の\\r[壬生狼,みぶろ]", nil, nil]],
15 => [["侍の卵", nil, nil],
["\\r[天下太陰,てんげだいおん]", {1=>"D", 4=>"D", 5=>"D", 6=>"D"}, nil]],
16 => [["侍の卵", nil, nil],
["\\r[天下太陰,てんげだいおん]", {1=>"D", 4=>"D", 5=>"D", 6=>"D"}, nil]],
18 => [["\\r[天然な殺し屋,お気楽マーダー]", {1=>"G"}, {12=>"H"}],
["夢見る\\r[殺し屋,スイーパー]", {1=>"H", 2=>"C", 4=>"C"}, nil]],
19 => [["\\r[絶対の破壊者,Breaker of Absolute]", nil, nil],
["夢幻なる\\r[絶対の破壊者,Breaker of Absolute]", nil, nil]],
21 => [["女侍", nil, {4=>"H"}],
["心眼な女侍", nil, nil]],
22 => [["女侍", nil, nil],
["義風な女侍", nil, nil]],
23 => [["女侍", nil, nil],
["豪快な女侍", nil, nil]],
24 => [["女侍", nil, nil],
["策士な女侍", nil, nil]],
25 => [["女侍", nil, nil],
["神秘な女侍", nil, nil]],
27 => [["剣豪", nil, nil],
["\\r[素盞嗚尊,スサノオノミコト]", {1=>"D", 2=>"D", 3=>"D"}, nil]],
28 => [["隠密", nil, {3=>"H", 7=>"H", 14=>"H"}],
["伊賀忍軍棟梁", nil, nil]],
30 => [["元\\r[歳殺陽天,さいさつようてん]", nil, nil],
["運の女神の姉", {1=>"C", 2=>"C", 3=>"C", 4=>"C", 5=>"C", 6=>"C", 7=>"C", 8=>"C", 9=>"C"}, {14=>"D"}],
["力の寵児", {1=>"D", 2=>"D", 3=>"D", 4=>"D", 5=>"D", 6=>"D", 7=>"D", 8=>"D", 9=>"D"}, {2=>"D", 3=>"D", 7=>"D", 8=>"D", 14=>"E"}]],
31 => [["危険な姐御", nil, {2=>"H", 14=>"H", 18=>"H"}],
["運の女帝", nil, nil]],
33 => [["通りすがりの侍", nil, {18=>"H"}],
["\\r[天蓋,てんがい]の\\r[徒,あだ]", nil, nil],
["氷姫", nil, nil]],
34 => [["剣鬼", nil, {14=>"H"}],
["孤高の剣鬼", nil, nil]],
40 => [["小説書き", nil, nil],
["絵描き", nil, nil],
["多芸は無芸", nil, nil]]
}
SUB_CLSID = {
# ID => [[Weapon Sub Class IDs...], [Armor Sub Class IDs...]]
1 => [[51, 52, 55, -66], [72, 73, 74]],
2 => [[56, 60], [71, 73]],
3 => [[53, 60], [71, 73]],
4 => [[59, 60], [71, 73]],
5 => [[51, 52, 55, -66], [72, 73, 74]],
6 => [[54, 60], [72, 73, 74]],
7 => [[51, 52, 53, 60], [71, 73]],
9 => [[51, 52, 53, 55, 60], [71, 73]],
10 => [[57, 60], [71, 73]],
12 => [[52, 53, 55, 60], [71, 73]],
13 => [[51, 52, 53, 55, 60], [72, 73, 74]],
14 => [[52, 55, 60], [72, 73, 74]],
15 => [[51, 52, 54, 60, -66], [72, 73, 74]],
16 => [[51, 52, 54, 60, -66], [72, 73, 74]],
18 => [[51, 52, 55, 60], [71, 73]],
19 => [[51, 52, 53, 54, 55, 60], [72, 73, 74]],
21 => [[52, 54, 60], [72, 73, 74]],
22 => [[52, 54, 60], [72, 73, 74]],
23 => [[52, 60], [71, 72, 73, 74]],
24 => [[52, 60, -66], [72, 73, 74]],
25 => [[52, 53, 60], [72, 73, 74]],
27 => [[51, 52, 53, 54, 60], [71, 73]],
28 => [[51, 52, 53, 54, 55, 60], [71, 73]],
30 => [[51, 52, 53, 60], [72, 73, 74]],
31 => [[51, 52, 53, 54, 55, 56, 57, 58, 59, 60], [71, 72, 73, 74]],
33 => [[51, 52, 55, 60], [72, 73, 74]],
34 => [[52, 60], [71, 72, 73, 74]],
40 => [[51, 52, 53, 54, 55, 56, 57, 58, 59, 60], [71, 72, 73, 74]],
}
#--------------------------------------------------------------------------
# ● サブクラスによる装備品配列取得
# flg : 0(Weapon)/1(Armor)
#--------------------------------------------------------------------------
def get_equip_set(actor_id, flg)
@actor_tmp = $data_actors[actor_id]
sub_set = SUB_CLSID[@actor_tmp.id][flg]
case flg
when 0 # 武器の場合
rslt_set = $data_classes[@actor_tmp.class_id].weapon_set
for index in sub_set
if index > 0
rslt_set += $data_classes[index].weapon_set
else
rslt_set -= $data_classes[-index].weapon_set
end
end
when 1 # 防具の場合
rslt_set = $data_classes[@actor_tmp.class_id].armor_set
for index in sub_set
if index > 0
rslt_set += $data_classes[index].armor_set
else
rslt_set -= $data_classes[-index].armor_set
end
end
else # 異常処理
p "フラグが異常です。"
return nil
end
return rslt_set
end
end
class Game_System
attr_accessor :class_names # クラスネーム配列
attr_accessor :inner_flg # インナーフラグ
attr_accessor :extra_flg # 特殊装飾フラグ
end
class Game_Actor < Game_Battler
include CLASS_EVOLVE
#--------------------------------------------------------------------------
# ● 初期化
#--------------------------------------------------------------------------
alias dia_initialize initialize
def initialize(actor_id)
dia_initialize(actor_id)
$game_system.class_names = Array.new($data_actors.size)
for i in 0...$data_actors.size
$game_system.class_names[i] = 0
end
end
#--------------------------------------------------------------------------
# ● クラス名の取得
#--------------------------------------------------------------------------
def class_name
return CLS_E_SET[@actor_id][$game_system.class_names[@actor_id]][0]
end
#--------------------------------------------------------------------------
# ● ステート有効度の取得
#--------------------------------------------------------------------------
def state_ranks
for index in 0...$game_system.class_names[@actor_id]
hash = CLS_E_SET[@actor_id][index][2]
if hash != nil
for i in 0...hash.size
if hash.values[i].is_a?(Numeric)
$data_classes[@class_id].state_ranks[hash.keys[i]] = hash.values[i]
else
$data_classes[@class_id].state_ranks[hash.keys[i]] =
CLS_RANK[hash.values[i]]
end
end
end
end
return $data_classes[@class_id].state_ranks
end
include ELE_MM
#--------------------------------------------------------------------------
# ● 属性補正値の取得
# element_id : 属性 ID
#--------------------------------------------------------------------------
def element_rate(element_id)
# 属性有効度に対応する数値を取得
for index in 0..$game_system.class_names[@actor_id]
hash = CLS_E_SET[@actor_id][index][1]
if hash != nil
for i in 0...hash.size
if hash.values[i].is_a?(Numeric)
$data_classes[@class_id].element_ranks[hash.keys[i]] = hash.values[i]
else
$data_classes[@class_id].element_ranks[hash.keys[i]] =
CLS_RANK[hash.values[i]]
end
end
end
end
result = ELEMENT_RANK_TABLE[$data_classes[@class_id].element_ranks[element_id]]
if result == nil
result = $data_classes[@class_id].element_ranks[element_id]
end
list = get_armors_id_list
if $OuterFlgs["Element_Plus"]
element_name = $data_system.elements[element_id]
rate = [0, 0, 0, 0, 0, 0, 0]
r_flg = [GRD_ELE_NONE, GRD_ELE_NONE, GRD_ELE_NONE, GRD_ELE_NONE,
GRD_ELE_NONE, GRD_ELE_NONE, GRD_ELE_NONE]
t_rate = 0
# 防具でこの属性が防御されている場合の計算
for h in 0...list.size
if !self.armors_weapon[h]
armor = $data_armors[list[h]]
if armor != nil and armor.guard_element_set.include?(element_id)
for j in armor.guard_state_set
if $data_states[j].name =~ /^#{element_name}([0-9]+)(%|%)/
rate[h] += $1.to_i
r_flg[h] = GRD_ELE_PLUS
end
end
for j in armor.guard_state_set
if $data_states[j].name =~ /^#{element_name}マイナス/
if r_flg[h] == GRD_ELE_NONE
rate[h] += DEFAULT_GUARD
elsif r_flg[h] == GRD_ELE_PLUS
rate[h] *= -1
end
r_flg[h] = GRD_ELE_MINUS
end
end
if r_flg[h] == GRD_ELE_NONE
rate[h] -= DEFAULT_GUARD
end
end
end
end
for one_rate in rate
t_rate += one_rate
end
if result > 0
result += result * t_rate / 100
else
result -= result * t_rate / 100
end
result = state_guard_ele(result, element_id)
# Max/Minを超えないように補正
result = [[result, ELE_MM_MIN].max, ELE_MM_MAX].min
else # 元の処理
# 防具でこの属性が防御されている場合は半減
#for i in [@armor1_id, @armor2_id, @armor3_id, @armor4_id, @armor5_id,
# @armor6_id, @armor7_id]
for i in list
armor = $data_armors[i]
if armor != nil and armor.guard_element_set.include?(element_id)
result /= 2
end
end
# ステートでこの属性が防御されている場合は半減
for i in @states
if $data_states[i].guard_element_set.include?(element_id)
result /= 2
end
end
end # $OuterFlgs["Element_Plus"]
# メソッド終了
return result
end
#--------------------------------------------------------------------------
# ● 装備可能判定
# item : アイテム
#--------------------------------------------------------------------------
def equippable?(item)
# 武器の場合
if item.is_a?(RPG::Weapon)
# 現在のクラス+サブクラスの装備可能な武器に含まれている場合
if get_equip_set(@actor_id, 0).include?(item.id)
return true
end
end
# 防具の場合
if item.is_a?(RPG::Armor)
# 現在のクラス+サブクラスの装備可能な防具に含まれている場合
if get_equip_set(@actor_id, 1).include?(item.id)
return true
end
end
return false
end
end
class Window_EquipItem < Window_Selectable
include CLASS_EVOLVE
include BM
include VDI
#--------------------------------------------------------------------------
# ● オブジェクト初期化
# actor : アクター
# equip_type : 装備部位 (0〜3)
#--------------------------------------------------------------------------
alias initialize_vdi initialize
def initialize(actor, equip_type)
initialize_vdi(actor, equip_type)
@draw_item_num = 2 # 一度に描画する数(必ずしも2である必要はない)
@draw_ok = Array.new() # 描画完了フラグ配列
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@draw_counter = 0
reset_array
mlt_blade = @actor.multi_blade?
#p @equip_type
@data = []
# 装備可能な武器を追加
#if @equip_type == 0 || (@equip_type == 1 &&
# (@actor.skill_learn?(@nitoryu) || @actor.last_skills.include?(@nitoryu)))
if @equip_type == 0 || (mlt_blade[0] && mlt_blade[1].include?(@equip_type))
weapon_set = get_equip_set(@actor.id, 0)
for i in 1...$data_weapons.size
if $game_party.weapon_number(i) > 0 && weapon_set.include?(i)
#if @equip_type == 0 ||
# !$data_weapons[i].element_set.include?(Tkl2K_2_XP::TWO_HANDED)
@data.push($data_weapons[i])
$data_weapons[i].name = transfer($data_weapons[i].name)
#end
end
end
end
# 装備可能な防具を追加
if @equip_type != 0
#p @equip_type, $game_system.inner_flg, $game_system.extra_flg
armor_set = get_equip_set(@actor.id, 1)
for i in 1...$data_armors.size
if $game_party.armor_number(i) > 0 && armor_set.include?(i)
if $OuterFlgs["Equip_Extend"]
case @equip_type
when 1, 2 # 盾、兜
if $data_armors[i].kind == @equip_type - 1
@data.push($data_armors[i])
$data_armors[i].name = transfer($data_armors[i].name)
end
when 3 # インナー
if $data_armors[i].kind == 2 &&
#$game_system.inner_flg &&
$data_armors[i].guard_element_set.include?(Equip_Extend::INNER_ARM)
@data.push($data_armors[i])
$data_armors[i].name = transfer($data_armors[i].name)
end
when 4 # 鎧
if $data_armors[i].kind == 2 &&
#!$game_system.inner_flg &&
!$data_armors[i].guard_element_set.include?(Equip_Extend::INNER_ARM)
@data.push($data_armors[i])
$data_armors[i].name = transfer($data_armors[i].name)
end
when 5, 6 # 装飾品1、装飾品2
if $data_armors[i].kind == 3 &&
#!$game_system.extra_flg &&
!$data_armors[i].guard_element_set.include?(Equip_Extend::EXTRA_ACC) &&
!$data_armors[i].guard_element_set.include?(Equip_Extend::BOOTS_ACC)
@data.push($data_armors[i])
$data_armors[i].name = transfer($data_armors[i].name)
end
when 7 # 特殊
if $data_armors[i].kind == 3 &&
#$game_system.extra_flg &&
$data_armors[i].guard_element_set.include?(Equip_Extend::EXTRA_ACC) &&
!$data_armors[i].guard_element_set.include?(Equip_Extend::BOOTS_ACC)
@data.push($data_armors[i])
$data_armors[i].name = transfer($data_armors[i].name)
end
when 8 # 靴
if $data_armors[i].kind == 3 &&
#$game_system.extra_flg &&
!$data_armors[i].guard_element_set.include?(Equip_Extend::EXTRA_ACC) &&
$data_armors[i].guard_element_set.include?(Equip_Extend::BOOTS_ACC)
@data.push($data_armors[i])
$data_armors[i].name = transfer($data_armors[i].name)
end
else
p "異常"
end
else # 元の処理
if $data_armors[i].kind == @equip_type - 1
@data.push($data_armors[i])
$data_armors[i].name = transfer($data_armors[i].name)
end
end # $OuterFlgs["Equip_Extend"]
end
end
end
# 空白を追加
@data.push(nil)
# ビットマップを作成し、全項目を描画
@item_max = @data.size
self.contents = Bitmap.new(width - 32, row_max * 32)
#for i in 0...@item_max-1
# draw_item(i)
#end
draw_item_v
end
end
class Interpreter
#--------------------------------------------------------------------------
# ● クラスの進化
#--------------------------------------------------------------------------
def class_evolve(id, value)
if value.is_a?(Numeric)
$game_system.class_names[id] = value
else
p "設定が不正です。"
end
end
end
|