#==============================================================================
# ■ クラス詳細化 + 進化 By 貪藻矢射妥←
#
# クラス名だけ違う、あるいは似たようなクラスを作成した時、武器や防具を
# 追加、削除した時の対応が煩わしい・・・ってのをラクさせようというもの。
#
# 装備品はすべて装備品のサブクラスで装備可能なものをスクリプトで整理します。
#
# また、ステート、属性有効度も拡張してみます。
#
# ※メインクラスにはそのキャラ固有の装備しか設定しないので、初期装備が
# できなくなっちゃいます。すみません。
#
# ちなみに、スクリプトで
# class_evolve(ID, value)
# を行うとクラスの進化が可能です。
#
#
#==============================================================================
# 更新っぽいもの
# 2011:07:01
# ・属性詳細化 Plus改修にともなう変更
#
# 2024:02:01
# ・多刀流の処理変更
# ・外部フラグ追加
#
# 2025:11:01
# ・マジックナンバーの定義化対応 part2
$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},
# {Evolve 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[御子,みこ]",
{1=>"E", 2=>"E", 3=>"E", 4=>"E", 5=>"E", 6=>"E", 7=>"E", 8=>"E", 9=>"E"},
{2=>"D", 3=>"D", 4=>"D", 6=>"D", 7=>"D", 8=>"D", 14=>"G"}]],
2 => [["拳帝", nil, nil],
["魔封拳帝",
{1=>"D", 2=>"D", 3=>"D", 4=>"D", 5=>"D", 6=>"D", 7=>"D", 8=>"D", 9=>"D", 14=>"D"}, nil],
["世界を見守る者", nil, nil]],
3 => [["侍", nil, nil],
["剣聖",
{7=>"E", 8=>"E"},
{4=>"E", 6=>"E", 7=>"E", 18=>"E"}]],
4 => [["ガンマン", nil, nil],
["スナイパー",
{15=>"E"}, nil]],
5 => [["剣客", nil, nil],
["百合剣客", nil, nil]],
6 => [["\\r[槍使い,ランサー]", nil, nil],
["雀聖\\r[槍使い,ランサー]", nil, nil]],
7 => [["剣客", nil, nil],
["シスコン剣客", nil,
{14=>"D"}]],
9 => [["敏腕警部", nil, nil],
["眠れる青の直臣",
{5=>"D"}, nil],
["真理からの\\r[帰還者,リターナー]",
{1=>"D", 3=>"D", 4=>"D", 5=>"D"},
{4=>"E", 14=>"E"}]],
10 => [["トレジャーハンター", nil, nil],
["紅き暴虐の獣",
{14=>"D"}, nil],
["真理への\\r[探求者,シーカー]",
{14=>"E"}, nil]],
12 => [["\\r[明殺,みょうさつ]者", nil, nil],
["\\r[黄幡,おうばん]の\\r[明殺,みょうさつ]者",
{7=>"D", 8=>"D", 9=>"D"}, nil]],
13 => [["\\r[赤眉,チーメイ]", nil, nil],
["夢幻なる\\r[赤眉,チーメイ]", nil, nil]],
14 => [["\\r[壬生狼,みぶろ]", nil, nil],
["\\r[豹尾,ひょうび]の\\r[壬生狼,みぶろ]",
{1=>"D", 3=>"D", 4=>"D"}, 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"},
{7=>"H", 12=>"H"}]],
19 => [["\\r[絶対の破壊者,Breaker of Absolute]", nil, nil],
["夢幻なる\\r[絶対の破壊者,Breaker of Absolute]", nil, nil]],
21 => [["女侍", nil,
{4=>"H"}],
["天下御免の\\r[傾奇,かぶき]者",
{11=>"D", 12=>"D", 13=>"D"},
{4=>"H", 18=>"D"}]],
22 => [["女侍", nil, nil],
["上杉謙信の再来",
{11=>"D", 12=>"D", 13=>"D"}, nil]],
23 => [["女侍", nil, nil],
["奥州の独眼竜",
{11=>"D", 12=>"D", 13=>"D"}, nil]],
24 => [["女侍", nil, nil],
["漆黒の策士",
{11=>"D", 12=>"D", 13=>"D"}, nil]],
25 => [["女侍", nil, nil],
["尾張柳生伝承者",
{11=>"D", 12=>"D", 13=>"D"},
{15=>"H"}]],
27 => [["剣豪", nil, nil],
["\\r[素盞嗚尊,スサノオノミコト]",
{1=>"D", 2=>"D", 3=>"D"}, nil]],
28 => [["隠密", nil,
{3=>"F", 7=>"F", 14=>"F"}],
["伊賀忍軍棟梁",
{3=>"H", 7=>"H", 14=>"H"}, 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"}],
["運の女帝",
{1=>"H", 2=>"H", 3=>"H", 4=>"H", 5=>"H", 6=>"H", 7=>"H", 8=>"H", 9=>"H"},
{2=>"H", 4=>"H", 5=>"H", 6=>"H", 14=>"H", 15=>"H", 16=>"H", 18=>"H"}]],
33 => [["通りすがりの侍", nil,
{18=>"H"}],
["\\r[天蓋,てんがい]の\\r[徒,あだ]",
{1=>"D", 2=>"D", 3=>"D", 4=>"D", 5=>"D", 6=>"D", 7=>"D", 8=>"D"},
{18=>"H"}],
["氷姫",
{1=>"D", 2=>"D", 3=>"D", 4=>"D", 5=>"D", 6=>"D", 7=>"D", 8=>"D", 11=>"D", 12=>"D", 13=>"D"},
{18=>"H"}]],
34 => [["孤高の剣鬼", nil,
{14=>"H"}],
["クサカヒヅキ",
{11=>"D", 12=>"D", 13=>"D"},
{14=>"H"}]],
36 => [["女侍", nil, nil],
["江戸柳生伝承者",
{11=>"D", 12=>"D", 13=>"D"}, nil]],
37 => [["女侍", nil, nil],
["奥州の目隠し鬼",
{11=>"D", 12=>"D", 13=>"D"}, nil]],
38 => [["拳鬼", nil, nil],
["魔拳の虎",
{1=>"D", 2=>"D", 3=>"D", 4=>"D", 5=>"D", 6=>"D", 7=>"D", 8=>"D", 9=>"D", 14=>"D"}, nil]],
39 => [["訓練されたシスコン", nil,
{14=>"G"}],
["姉至上主義",
{11=>"D", 12=>"D"},
{14=>"H"}]],
50 => [["立方晶窒化炭素",
{1=>"H", 2=>"H", 3=>"H", 4=>"H", 5=>"H", 6=>"H", 7=>"H", 8=>"H", 9=>"H", 11=>"H", 12=>"H",
13=>"H", 14=>"H", 15=>"H"},
{1=>"H", 2=>"H", 3=>"H", 4=>"H", 5=>"H", 6=>"H", 7=>"H", 8=>"H", 9=>"H", 10=>"H", 11=>"H",
12=>"H", 13=>"H", 14=>"H", 15=>"H", 16=>"H", 17=>"H", 18=>"H"}]]
}
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]],
36 => [[52, 53, 60], [72, 73, 74]],
37 => [[52, 60], [71, 72, 73, 74]],
38 => [[56, 60], [71, 73]],
39 => [[52, 53, 55, 60], [71, 73]],
50 => [[51, 52, 53, 54, 55, 56, 57, 58, 59, 60], [71, 72, 73, 74]],
}
# 装備タイプフラグ
# 武器
EQUIP_FLG_WEAPON = 0
# 防具
EQUIP_FLG_ARMOR = 1
#--------------------------------------------------------------------------
# ● サブクラスによる装備品配列取得
# 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 EQUIP_FLG_WEAPON # 武器の場合
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 EQUIP_FLG_ARMOR # 防具の場合
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, EQUIP_FLG_WEAPON).include?(item.id)
return true
end
end
# 防具の場合
if item.is_a?(RPG::Armor)
# 現在のクラス+サブクラスの装備可能な防具に含まれている場合
if get_equip_set(@actor_id, EQUIP_FLG_ARMOR).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_equip_item_vdi initialize
def initialize(actor, equip_type)
initialize_vdi(actor, equip_type)
@draw_item_num = 2 # 一度に描画する数(必ずしも2である必要はない)
@draw_ok = Array.new() # 描画完了フラグ配列
@weapon_set = get_equip_set(actor.id, EQUIP_FLG_WEAPON)
@armor_set = get_equip_set(actor.id, EQUIP_FLG_ARMOR)
initialize_equip_item_vdi(actor, equip_type)
end
#--------------------------------------------------------------------------
# ● 装備可能アイテムの取得
#--------------------------------------------------------------------------
def get_equip_item
# リスト初期化
@data = []
if $OuterFlgs["Equip_Extend"]
mlt_blade = @actor.multi_blade?
change_equip_type = Multi_Blade::EQUIP_INDEX_LIST[@equip_type]
# 装備可能な武器を追加
if (@equip_type == Def_Num::EQUIP_INDEX_WEAPON ||
(mlt_blade[0] && mlt_blade[1].include?(change_equip_type)))
for i in 1...$data_weapons.size
if $game_party.weapon_number(i) > 0 && @weapon_set.include?(i)
@data.push($data_weapons[i])
#$data_weapons[i].name = transfer($data_weapons[i].name)
end
end
end
# 装備可能な防具を追加
if @equip_type != Def_Num::EQUIP_INDEX_WEAPON
for i in 1...$data_armors.size
if $game_party.armor_number(i) > 0 && @armor_set.include?(i)
case @equip_type
when Def_Num::EQUIP_INDEX_SHILD, Def_Num::EQUIP_INDEX_MET # 盾、兜
if $data_armors[i].kind == change_equip_type - 1
@data.push($data_armors[i])
#$data_armors[i].name = transfer($data_armors[i].name)
end
when Def_Num::EQUIP_INDEX_INNER # インナー
if ($data_armors[i].kind == Def_Num::EQUIP_TYPE_ARMOR - 1 &&
$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 Def_Num::EQUIP_INDEX_ARMOR # 鎧
if ($data_armors[i].kind == Def_Num::EQUIP_TYPE_ARMOR - 1 &&
!$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 Def_Num::EQUIP_INDEX_ACCE_1, Def_Num::EQUIP_INDEX_ACCE_2 # 装飾品1、2
if ($data_armors[i].kind == Def_Num::EQUIP_TYPE_ACCE - 1 &&
!$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 Def_Num::EQUIP_INDEX_ACCE_X # 特殊
if ($data_armors[i].kind == Def_Num::EQUIP_TYPE_ACCE - 1 &&
$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 Def_Num::EQUIP_INDEX_BOOTS # 靴
if ($data_armors[i].kind == Def_Num::EQUIP_TYPE_ACCE - 1 &&
!$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
end
end
end
else # もとの処理
# 装備可能な武器を追加
if @equip_type == Def_Num::EQUIP_INDEX_WEAPON
for i in 1...$data_weapons.size
if $game_party.weapon_number(i) > 0 && @weapon_set.include?(i)
@data.push($data_weapons[i])
#$data_weapons[i].name = transfer($data_weapons[i].name)
end
end
end
# 装備可能な防具を追加
if @equip_type != Def_Num::EQUIP_INDEX_WEAPON
for i in 1...$data_armors.size
if $game_party.armor_number(i) > 0 && @armor_set.include?(i)
if $data_armors[i].kind == @equip_type - 1
@data.push($data_armors[i])
#$data_armors[i].name = transfer($data_armors[i].name)
end
end
end
end
end # $OuterFlgs["Equip_Extend"]
# 空白を追加
@data.push(nil)
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@draw_counter = 0
reset_array
# アイテム取得
get_equip_item
# ビットマップを作成し、全項目を描画
@item_max = @data.size
if @item_max > 0
self.contents = Bitmap.new(width - 32, row_max * 32)
draw_item_v
end
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
|