king-exit/Scripts/_B.rb
2024-08-31 14:17:23 -05:00

2136 lines
No EOL
75 KiB
Ruby

#==============================================================================
# ■併用化ベーススクリプトB for RGSS3 Ver5.03-β5
# □作成者 kure
#==============================================================================
$kure_base_script = {} if $kure_base_script == nil
$kure_base_script[:base_B] = 503
p "併用化ベーススクリプトB"
#==============================================================================
# ■ Kernel(追加定義)
#==============================================================================
module Kernel
#--------------------------------------------------------------------------
# ☆ 配列振り分け操作(指定IDに値を加算)(追加定義)
#--------------------------------------------------------------------------
def arr_id_value_flatten(arr)
result_arr = Array.new
for i in 0..arr.size - 1
if i % 2 == 0 && arr[i] && arr[i+1]
result_arr[arr[i]] ||= 0
result_arr[arr[i]] += arr[i+1]
end
end
return result_arr
end
#--------------------------------------------------------------------------
# ☆ 配列振り分け操作(指定IDに値を出力)(追加定義)
#--------------------------------------------------------------------------
def arr_id_value_push(arr)
result_arr = Array.new
for i in 0..arr.size - 1
if i % 2 == 0 && arr[i] && arr[i+1]
result_arr[arr[i]] ||= []
result_arr[arr[i]].push(arr[i+1])
end
end
return result_arr
end
#--------------------------------------------------------------------------
# ☆ 配列振り分け操作(指定個数毎にパッケージ)(追加定義)
#--------------------------------------------------------------------------
def arr_id_value_pack(arr, num)
result_arr = Array.new
first = 0
while first < arr.size - 1 do
last = first + num - 1
result_arr.push(arr[first..last])
first = last + 1
end
return result_arr
end
#--------------------------------------------------------------------------
# ☆ 配列振り分け操作(数値にスライス)(追加定義)
#--------------------------------------------------------------------------
def arr_num_slice(arr)
result_arr = Array.new
unless arr == [] and arr.empty?
arr.flatten!
arr.each do |value|
value.scan(/\d+/).each { |num| result_arr.push(num.to_i)}
end
end
return result_arr
end
#--------------------------------------------------------------------------
# ☆ アクター追加能力呼び出し(追加定義)
#--------------------------------------------------------------------------
def call_add_feature(id, note_data)
battler_add = Array.new
cheak_note = ""
cheak_note = note_data if note_data
case id
when 0
#スティール成功率(割合出力)
read_arr = 1
while cheak_note do
cheak_note.match(/<スティール成功率\s?(\d+)%\s?>/)
read_arr *= ($1.to_f / 100) if $1
cheak_note = $'
end
battler_add = read_arr
when 1
#オートリザレクション(配列最大値出力)
read_arr = [0,0,0,0]
while cheak_note do
cheak_note.match(/<オートリザレクション\s?(\d+)%\s?,\s?(\d+)%\s?,\s?(\d+)\s?,\s?(\d+)>/)
if $1 && $2 && $3 && $4
value = [[read_arr[0],$1.to_i].max,[read_arr[1],$2.to_i].max,[read_arr[2],$3.to_i].max,[read_arr[3],$4.to_i].max]
read_arr = value
end
cheak_note = $'
end
battler_add = read_arr
when 2
#踏みとどまり(最大効果出力)
read_arr = [150,0]
while cheak_note do
cheak_note.match(/<踏みとどまり\s?(\d+)%\s?,\s?(\d+)%\s?>/)
if $1 && $2
read_arr[0] = $1.to_i if $1.to_i < read_arr[0]
read_arr[1] = $2.to_i if $2.to_i > read_arr[1]
end
cheak_note = $'
end
battler_add = read_arr
when 3
#回復反転(最大値出力)
read_arr = 0
while cheak_note do
cheak_note.match(/<回復反転\s?(\d+)%\s?>/)
read_arr = [read_arr,$1.to_i].max if $1
cheak_note = $'
end
battler_add = read_arr.to_f / 100
when 4
#オートステート(配列出力)
list = cheak_note.scan(/<オートステート\s?(\d+(?:\s?*,\s?*\d+)*)>/)
battler_add = arr_num_slice(list)
when 5
#メタルボディ(最大値出力)
read_arr = 0
while cheak_note do
cheak_note.match(/<メタルボディ\s?(\d+)\s?>/)
read_arr = [read_arr,$1.to_i].max if $1
cheak_note = $'
end
battler_add = read_arr
when 6
#連続使用(配列出力)
list = cheak_note.scan(/<連続発動\s?(\d+-\d+(?:\s?*,\s?*\d+-\d+)*)>/)
multi_use = arr_num_slice(list)
battler_add = arr_id_value_flatten(multi_use)
when 7
#即死反転(true,false出力)
battler_add = false
battler_add = true if cheak_note.include?("<即死反転>")
when 8
#仲間想い(最大値出力)
read_arr = 0
while cheak_note do
cheak_note.match(/<仲間想い\s?(\d+)%\s?>/)
read_arr = [read_arr,$1.to_i].max if $1
cheak_note = $'
end
battler_add = read_arr.to_f/100
when 9
#弱気(最大値出力)
read_arr = 0
while cheak_note do
cheak_note.match(/<弱気\s?(\d+)%\s?>/)
read_arr = [read_arr,$1.to_i].max if $1
cheak_note = $'
end
battler_add = read_arr.to_f/100
when 10
#防御壁(加算出力)
read_arr = 0
while cheak_note do
cheak_note.match(/<防御壁展開\s?(\d+)\s?>/)
read_arr += $1.to_i if $1
cheak_note = $'
end
battler_add = read_arr
when 11
#無効化障壁(最大値出力)
read_arr = 0
while cheak_note do
cheak_note.match(/<無効化障壁\s?(\d+)\s?>/)
read_arr = [read_arr,$1.to_i].max if $1
cheak_note = $'
end
battler_add = read_arr
when 12
#TP消費率(割合出力)
read_arr = 1
while cheak_note do
cheak_note.match(/<TP消費率\s?(\d+)%\s?>/)
read_arr *= ($1.to_f / 100) if $1
cheak_note = $'
end
battler_add = read_arr
when 13
#スキル変化(配列出力)
list = cheak_note.scan(/<スキル変化\s?(\d+-\d+(?:\s?*,\s?*\d+-\d+)*)>/)
change_skill = arr_num_slice(list)
battler_add = arr_id_value_push(change_skill)
when 14
#武器タイプスキル強化(配列出力)
list = cheak_note.scan(/<武器スキル倍率強化\s?(\d+-\d+-\d+(?:\s?*,\s?*\d+-\d+-\d+)*)>/)
gain_skill = arr_num_slice(list)
value = Array.new
for list in 0..gain_skill.size - 1
if list % 3 == 0
if gain_skill[list] && gain_skill[list + 1] && gain_skill[list + 2]
value[gain_skill[list]] = [] unless value[gain_skill[list]]
value[gain_skill[list]][gain_skill[list + 1]] = 0 unless value[gain_skill[list]][gain_skill[list + 1]]
value[gain_skill[list]][gain_skill[list + 1]] += gain_skill[list + 2]
end
end
end
battler_add = value
when 15
#行動変化(配列出力)
list = cheak_note.scan(/<行動変化\s?(\d+-\d+(?:\s?*,\s?*\d+-\d+)*)>/)
change_skill = arr_num_slice(list)
battler_add = arr_id_value_pack(change_skill, 2)
when 16
#最終反撃(配列出力)
list = cheak_note.scan(/<最終反撃\s?(\d+(?:\s?*,\s?*\d+)*)>/)
battler_add = arr_num_slice(list)
when 17
#反撃スキル(配列出力)
list = cheak_note.scan(/<反撃スキル\s?(\d+(?:\s?*,\s?*\d+)*)>/)
battler_add = arr_num_slice(list)
when 18
#戦闘終了後自動回復(配列最大値出力)
auto_heel = [0,0]
while cheak_note do
cheak_note.match(/<戦闘後回復\s?(\d+)\s?,\s?(\d+)\s?>/)
if $1 && $2
auto_heel= [[auto_heel[0],$1.to_i].max,[auto_heel[1],$2.to_i].max]
end
cheak_note = $'
end
battler_add = auto_heel
when 19
#HPタイプ消費率(配列出力)
tp_cost = Array.new
while cheak_note do
cheak_note.match(/<HPタイプ消費率\s?(\d+)\s?,\s?(\d+)%\s?>/)
if $1 && $2
tp_cost[$1.to_i] = 1 unless tp_cost[$1.to_i]
tp_cost[$1.to_i] *= ($2.to_f / 100)
end
cheak_note = $'
end
battler_add = tp_cost
when 20
#MPタイプ消費率(配列出力)
tp_cost = Array.new
while cheak_note do
cheak_note.match(/<MPタイプ消費率\s?(\d+)\s?,\s?(\d+)%\s?>/)
if $1 && $2
tp_cost[$1.to_i] = 1 unless tp_cost[$1.to_i]
tp_cost[$1.to_i] *= ($2.to_f / 100)
end
cheak_note = $'
end
battler_add = tp_cost
when 21
#TPタイプ消費率(配列出力)
tp_cost = Array.new
while cheak_note do
cheak_note.match(/<TPタイプ消費率\s?(\d+)\s?,\s?(\d+)%\s?>/)
if $1 && $2
tp_cost[$1.to_i] = 1 unless tp_cost[$1.to_i]
tp_cost[$1.to_i] *= ($2.to_f / 100)
end
cheak_note = $'
end
battler_add = tp_cost
when 22
#HP消費率(割合出力)
read_arr = 1
while cheak_note do
cheak_note.match(/<HP消費率\s?(\d+)%\s?>/)
read_arr *= ($1.to_f / 100) if $1
cheak_note = $'
end
battler_add = read_arr
when 23
#オーバーソウル(最大値出力)
read_arr = 0
while cheak_note do
cheak_note.match(/<オーバーソウル\s?(\d+)%\s?>/)
read_arr = [read_arr,$1.to_i].max if $1
cheak_note = $'
end
battler_add = read_arr.to_f/100
when 24
#反撃強化(割合加算出力)
read_value = 0
while cheak_note do
cheak_note.match(/<反撃強化\s?(\d+)%\s?>/)
read_value += ($1.to_f / 100) if $1
cheak_note = $'
end
battler_add = read_value
when 25
#HP減少時強化能力(最大値配列出力)
read_arr = [0,0]
while cheak_note do
cheak_note.match(/<HP減少時強化\s?(\d+)\s?,\s?(\d+)%\s?>/)
if $1 && $2
read_arr= [[read_arr[0],$1.to_i].max,[read_arr[1],$2.to_i].max]
end
cheak_note = $'
end
battler_add = read_arr
when 26
#ダメージMP変換(最小値出力)
read_arr = 0
while cheak_note do
cheak_note.match(/<ダメージMP変換\s?(\d+)%\s?>/)
if $1
read_arr = $1.to_i if read_arr == 0
read_arr = [read_arr,$1.to_i].min if read_arr != 0
end
cheak_note = $'
end
battler_add = read_arr.to_f/100
when 27
#ダメージG変換(最小値出力)
read_arr = 0
while cheak_note do
cheak_note.match(/<ダメージゴールド変換\s?(\d+)%\s?>/)
if $1
read_arr = $1.to_i if read_arr == 0
read_arr = [read_arr,$1.to_i].min if read_arr != 0
end
cheak_note = $'
end
battler_add = read_arr.to_f / 100
when 28
#必中反撃判定(加算出力)
read_arr = 0
while cheak_note do
cheak_note.match(/<必中反撃\s?(\d+)%\s?>/)
read_arr += $1.to_i if $1
cheak_note = $'
end
battler_add = read_arr.to_f/100
when 29
#魔法反撃判定(加算出力)
read_arr = 0
while cheak_note do
cheak_note.match(/<魔法反撃\s?(\d+)%\s?>/)
read_arr += $1.to_i if $1
cheak_note = $'
end
battler_add = read_arr.to_f/100
when 30
#追撃ステート(配列出力)
list = cheak_note.scan(/<追撃対象ステート\s?(\d+(?:\s?*,\s?*\d+)*)>/)
read_arr = arr_num_slice(list)
when 31
#耐久値減少率(最小値出力)
read_arr = 100
while cheak_note do
cheak_note.match(/<耐久値減少率\s?(\d+)%\s?>/)
if $1
read_arr = [read_arr,$1.to_i].min
end
cheak_note = $'
end
battler_add = read_arr.to_f/100
when 32
#ディレイステート(配列出力)
read_arr = Array.new
while cheak_note do
cheak_note.match(/<ディレイステート\s?(\d+)\s?,\s?(\d+)\s?>/)
if $1 && $2
read_arr.push([$1.to_i, $2.to_i])
end
cheak_note = $'
end
battler_add = read_arr
when 33
#トリガー発動ステート(配列出力)
read_arr = Array.new
while cheak_note do
cheak_note.match(/<トリガーステート\s?([HMT])\s?,\s?(\d+)\s?,\s?(\d+)%\s?,\s?(\d+)\s?>/)
if $1 && $2 && $3 && $4
case $1
when "H"
tri = 1
when "M"
tri = 2
when "T"
tri = 3
end
read_arr.push([tri, $2.to_i ,$3.to_i, $4.to_i])
end
cheak_note = $'
end
battler_add = read_arr
when 34
#自爆耐性(true,false出力)
battler_add = false
battler_add = true if cheak_note.include?("<自爆耐性>")
when 35
#ダメージMP吸収(最大値出力)
read_arr = 0
while cheak_note do
cheak_note.match(/<ダメージMP吸収\s?(\d+)%\s?>/)
read_arr = [read_arr,$1.to_i].max if $1
cheak_note = $'
end
battler_add = read_arr.to_f/100
when 36
#ダメージG吸収(最大値出力)
read_arr = 0
while cheak_note do
cheak_note.match(/<ダメージゴールド回収\s?(\d+)%\s?>/)
read_arr = [read_arr,$1.to_i].max if $1
cheak_note = $'
end
battler_add = read_arr.to_f/100
when 37
#戦闘開始時自動発動能力(配列出力)
read_arr = Array.new
while cheak_note do
cheak_note.match(/<戦闘開始時発動\s?(\d+)\s?,\s?(\d+)%\s?>/)
if $1 && $2
read_arr.push([$1.to_i, $2.to_i])
end
cheak_note = $'
end
battler_add = read_arr
when 38
#ターン開始時自動発動能力(配列出力)
read_arr = Array.new
while cheak_note do
cheak_note.match(/<ターン開始時発動\s?(\d+)\s?,\s?(\d+)%\s?>/)
if $1 && $2
read_arr.push([$1.to_i, $2.to_i])
end
cheak_note = $'
end
battler_add = read_arr
when 39
#ターン終了時自動発動能力(配列出力)
read_arr = Array.new
while cheak_note do
cheak_note.match(/<ターン終了時発動\s?(\d+)\s?,\s?(\d+)%\s?>/)
if $1 && $2
read_arr.push([$1.to_i, $2.to_i])
end
cheak_note = $'
end
battler_add = read_arr
when 40
#拡張反撃判定(加算出力)
read_arr = 0
while cheak_note do
cheak_note.match(/<拡張反撃\s?(\d+)%\s?>/)
read_arr += $1.to_i if $1
cheak_note = $'
end
battler_add = read_arr.to_f/100
when 41
#拡張魔法反撃判定(加算出力)
read_arr = 0
while cheak_note do
cheak_note.match(/<拡張魔法反撃\s?(\d+)%\s?>/)
read_arr += $1.to_i if $1
cheak_note = $'
end
battler_add = read_arr.to_f/100
when 42
#拡張必中反撃判定(加算出力)
read_arr = 0
while cheak_note do
cheak_note.match(/<拡張必中反撃\s?(\d+)%\s?>/)
read_arr += $1.to_i if $1
cheak_note = $'
end
battler_add = read_arr.to_f/100
when 43
#常時オートステート(配列出力)
list = cheak_note.scan(/<常時オートステート\s?(\d+(?:\s?*,\s?*\d+)*)>/)
battler_add = arr_num_slice(list)
when 44
#最大TP増減(配列出力)
read_arr = [0,100]
gain_cheak_note = cheak_note.clone
decrease_cheak_note = cheak_note.clone
#最大TP増加
while gain_cheak_note do
gain_cheak_note.match(/<最大TP増加\s?(\d+)([%])?>/)
if $2 && $1
read_arr[1] += $1.to_i
elsif $1
read_arr[0] += $1.to_i
end
gain_cheak_note = $'
end
#最大TP減少
while decrease_cheak_note do
decrease_cheak_note.match(/<最大TP減少\s?(\d+)([%])?>/)
if $2 && $1
read_arr[1] -= $1.to_i
elsif $1
read_arr[0] -= $1.to_i
end
decrease_cheak_note = $'
end
battler_add = read_arr
when 45
#オートガード(最大値出力)
read_arr = [0,0]
while cheak_note do
cheak_note.match(/<オートガード\s?(\d+)%\s?,\s?(\d+)%\s?>/)
if $1 && $2
read_arr[0] = $1.to_i if $1.to_i > read_arr[0]
read_arr[1] = $2.to_i if $2.to_i > read_arr[1]
end
cheak_note = $'
end
battler_add = read_arr
when 46
#必中無効化(最大値出力)
read_arr = 0
while cheak_note do
cheak_note.match(/<必中無効化\s?(\d+)%\s?>/)
read_arr = [read_arr,$1.to_i].max if $1
cheak_note = $'
end
battler_add = read_arr
when 47
#物理無効化(最大値出力)
read_arr = 0
while cheak_note do
cheak_note.match(/<物理無効化\s?(\d+)%\s?>/)
read_arr = [read_arr,$1.to_i].max if $1
cheak_note = $'
end
battler_add = read_arr
when 48
#魔法無効化(最大値出力)
read_arr = 0
while cheak_note do
cheak_note.match(/<魔法無効化\s?(\d+)%\s?>/)
read_arr = [read_arr,$1.to_i].max if $1
cheak_note = $'
end
battler_add = read_arr
when 49
#戦闘終了後全体自動回復(加算出力)
auto_heel = [0,0]
while cheak_note do
cheak_note.match(/<戦闘後全体回復\s?(\d+)\s?,\s?(\d+)\s?>/)
if $1 && $2
auto_heel[0] += $1.to_i
auto_heel[1] += $2.to_i
end
cheak_note = $'
end
battler_add = auto_heel
when 50
#カウンターステート(配列出力)
read_arr = Array.new
while cheak_note do
cheak_note.match(/<カウンターステート\s?(\d+)\s?,\s?(\d+)%\s?>/)
if $1 && $2
read_arr.push([$1.to_i, $2.to_i])
end
cheak_note = $'
end
battler_add = read_arr
when 51
#反撃スキル(配列出力)
list = cheak_note.scan(/<物理反撃スキル\s?(\d+(?:\s?*,\s?*\d+)*)>/)
battler_add = arr_num_slice(list)
when 52
#反撃スキル(配列出力)
list = cheak_note.scan(/<魔法反撃スキル\s?(\d+(?:\s?*,\s?*\d+)*)>/)
battler_add = arr_num_slice(list)
when 53
#反撃スキル(配列出力)
list = cheak_note.scan(/<必中反撃スキル\s?(\d+(?:\s?*,\s?*\d+)*)>/)
battler_add = arr_num_slice(list)
when 54
#属性場展開能力(配列出力)
read_arr = Array.new
while cheak_note do
cheak_note.match(/<属性場展開\s?(\d+)\s?,\s?(\d+)\s?>/)
if $1 && $2
read_arr.push([$1.to_i, $2.to_i])
end
cheak_note = $'
end
battler_add = read_arr
end
return battler_add
end
#--------------------------------------------------------------------------
# ☆ ブースター能力呼び出し(追加定義)
#--------------------------------------------------------------------------
def call_multi_booster(id, note_data)
cheak_note = ""
cheak_note = note_data if note_data
case id
when 0
list = cheak_note.scan(/<属性強化\s?(\d+-\d+(?:\s?*,\s?*\d+-\d+)*)>/)
when 1
list = cheak_note.scan(/<属性吸収\s?(\d+-\d+(?:\s?*,\s?*\d+-\d+)*)>/)
when 2
list = cheak_note.scan(/<武器強化物理\s?(\d+-\d+(?:\s?*,\s?*\d+-\d+)*)>/)
when 3
list = cheak_note.scan(/<武器強化魔法\s?(\d+-\d+(?:\s?*,\s?*\d+-\d+)*)>/)
when 4
list = cheak_note.scan(/<武器強化必中\s?(\d+-\d+(?:\s?*,\s?*\d+-\d+)*)>/)
when 5
list = cheak_note.scan(/<通常攻撃強化\s?(\d+-\d+(?:\s?*,\s?*\d+-\d+)*)>/)
when 6
list = cheak_note.scan(/<ステート割合強化タイプ\s?(\d+-\d+(?:\s?*,\s?*\d+-\d+)*)>/)
when 7
list = cheak_note.scan(/<ステート固定強化タイプ\s?(\d+-\d+(?:\s?*,\s?*\d+-\d+)*)>/)
when 8
list = cheak_note.scan(/<ステート指定割合強化\s?(\d+-\d+(?:\s?*,\s?*\d+-\d+)*)>/)
when 9
list = cheak_note.scan(/<ステート指定固定強化\s?(\d+-\d+(?:\s?*,\s?*\d+-\d+)*)>/)
when 10
list = cheak_note.scan(/<スキルタイプ強化\s?(\d+-\d+(?:\s?*,\s?*\d+-\d+)*)>/)
end
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ☆ パーティー能力呼び出し(追加定義)
#--------------------------------------------------------------------------
def call_party_add_feature(id, note_data)
party_add = Array.new
cheak_note = ""
cheak_note = note_data if note_data
case id
when 0
#獲得金額倍率設定(割合出力)
read_arr = 1
while cheak_note do
cheak_note.match(/<獲得金額倍率\s?(\d+)%\s?>/)
read_arr *= ($1.to_f / 100) if $1
cheak_note = $'
end
party_add = read_arr
when 1
#アイテムドロップ率の設定
read_arr = 1
while cheak_note do
cheak_note.match(/<獲得アイテム倍率\s?(\d+)%\s?>/)
read_arr *= ($1.to_f / 100) if $1
cheak_note = $'
end
party_add = read_arr
when 2
#エンカウント率の設定
read_arr = 1
while cheak_note do
cheak_note.match(/<エンカウント倍率\s?(\d+)%\s?>/)
read_arr *= ($1.to_f / 100) if $1
cheak_note = $'
end
party_add = read_arr
when 3
#獲得経験値倍率の設定
read_arr = 1
while cheak_note do
cheak_note.match(/<獲得経験値倍率\s?(\d+)%\s?>/)
read_arr *= ($1.to_f / 100) if $1
cheak_note = $'
end
party_add = read_arr
when 4
#獲得職業経験値倍率の設定
read_arr = 1
while cheak_note do
cheak_note.match(/<獲得職業経験値倍率\s?(\d+)%\s?>/)
read_arr *= ($1.to_f / 100) if $1
cheak_note = $'
end
party_add = read_arr
when 5
#獲得職業経験値倍率の設定
read_arr = 1
while cheak_note do
cheak_note.match(/<獲得装備経験値倍率\s?(\d+)%\s?>/)
read_arr *= ($1.to_f / 100) if $1
cheak_note = $'
end
party_add = read_arr
end
return party_add
end
#--------------------------------------------------------------------------
# ☆ 特徴の文字配列の呼び出し(追加定義)
#--------------------------------------------------------------------------
def call_add_feature_txt(item)
draw_txt = Array.new
#書きだし
#攻撃属性
draw_list = item.features_set_data(31)
draw_list.each do |id|
draw_txt.push($data_system.elements[id] + "属性 ")
end
roop = $data_system.elements.size - 1
#属性耐性
for id in 1..roop
draw_list = item.features_pi_data(11, id)
next if draw_list == 1
draw_s = 100 - (draw_list * 100).to_i
draw_txt.push($data_system.elements[id] + "耐性" + draw_s.to_s + "% ")
end
#弱体化耐性
roop = 7
for id in 0..roop
draw_list = item.features_pi_data(12, id)
next if draw_list == 1
draw_s = 100 - (draw_list * 100).to_i
draw_txt.push("" + Vocab::param(id) + "減少" + draw_s.to_s + "% ")
end
#ステート耐性
roop = $data_states.size - 1
for id in 0..roop
draw_list = item.features_pi_data(13, id)
next if draw_list == 1
draw_s = 100 - (draw_list * 100).to_i
draw_txt.push($data_states[id].name + "耐性" + draw_s.to_s + "% ")
end
#ステート無効化
draw_list = item.features_set_data(14)
draw_list.each do |id|
draw_txt.push($data_states[id].name + "無効 ")
end
#通常能力
roop = 7
for id in 0..roop
draw_list = item.features_pi_data(21, id)
next if draw_list == 1
draw_s = (draw_list * 100).to_i - 100
draw_s = "+" + draw_s.to_s if draw_s > 0
draw_txt.push(Vocab::param(id) + draw_s.to_s + "% ")
end
#特殊能力
for id in 0..9
case id
when 0
draw_str = "命中率"
when 1
draw_str = "回避率"
when 2
draw_str = "会心率"
when 3
draw_str = "会心回避"
when 4
draw_str = "魔法回避"
when 5
draw_str = "魔法反射"
when 6
draw_str = "反撃率"
when 7
draw_str = "毎ターンHP回復"
when 8
draw_str = "毎ターンMP回復"
when 9
draw_str = "毎ターンTP回復"
end
draw_list = item.features_sum_data(22, id)
next if draw_list == 0
draw_s = (draw_list * 100).to_i
draw_s = "+" + draw_s.to_s if draw_s > 0
draw_txt.push(draw_str + draw_s.to_s + "% ")
end
#特殊能力値
for id in 0..9
case id
when 0
draw_str = "狙われ率"
when 1
draw_str = "防御効果"
when 2
draw_str = "回復効果"
when 3
draw_str = "薬知識"
when 4
draw_str = "MP消費率"
when 5
draw_str = "TP上昇率"
when 6
draw_str = "被物理Dmg"
when 7
draw_str = "被魔法Dmg"
when 8
draw_str = "床Dmg"
when 9
draw_str = "経験値"
end
draw_list = item.features_pi_data(23, id)
next if draw_list == 1
draw_s = (draw_list * 100).to_i - 100
draw_s = "+" + draw_s.to_s if draw_s > 0
draw_txt.push(draw_str + draw_s.to_s + "% ")
end
#攻撃時ステート判定
roop = $data_states.size - 1
for id in 0..roop
draw_list = item.features_sum_data(32, id)
next if draw_list == 0
draw_s = (draw_list * 100).to_i
draw_txt.push($data_states[id].name + "追加" + draw_s.to_s + "% ")
end
#攻撃速度
draw_list = item.features_sum_all_data(33)
unless draw_list == 0
draw_txt.push("攻撃速度増加") if draw_list > 0
draw_txt.push("攻撃速度減少") if draw_list < 0
end
#攻撃追加
draw_list = item.features_sum_all_data(34)
unless draw_list == 0
draw_txt.push("攻撃追加" + draw_list.to_s + "" ) if draw_list > 0
draw_txt.push("攻撃減少" + draw_list.abs.to_s + "" ) if draw_list < 0
end
#スキルタイプ追加
draw_list = item.features_set_data(41)
draw_list.each do |id|
draw_txt.push($data_system.skill_types[id] + "使用可 ")
end
#スキルタイプ削除
draw_list = item.features_set_data(42)
draw_list.each do |id|
draw_txt.push($data_system.skill_types[id] + "使用不可 ")
end
#スキル追加
draw_list = item.features_set_data(43)
draw_list.each do |id|
draw_txt.push($data_skills[id].name + "使用可 ")
end
#スキル削除
draw_list = item.features_set_data(44)
draw_list.each do |id|
draw_txt.push($data_skills[id].name + "使用不可 ")
end
#装備固定
draw_list = item.features_set_data(53)
draw_list.each do |id|
draw_txt.push($data_system.terms.etypes[id] + "固定 ")
end
#装備封印
draw_list = item.features_set_data(54)
draw_list.each do |id|
draw_txt.push($data_system.terms.etypes[id] + "封印 ")
end
#追加行動
draw_list = item.features_data(61).collect{|ft| ft.value * 100}
draw_list.each do |id|
draw_txt.push("追加行動" + id.to_s + "% ")
end
#特殊フラグ
for i in 0..3
case i
when 0
value = "自動戦闘"
when 1
value = "自動防御"
when 2
value = "自動献身"
when 3
value = "TP持越"
end
draw_txt.push(value) if item.features_data(62).any?{|ft| ft.data_id == i }
end
#パーティー能力
for i in 0..5
case i
when 0
value = "敵出現率↓"
when 1
value = "敵出現率0"
when 2
value = "被先制無効"
when 3
value = "先制率上昇"
when 4
value = "獲得金額2倍"
when 5
value = "Drop率2倍"
end
draw_txt.push(value) if item.features_data(64).any?{|ft| ft.data_id == i }
end
#追加特徴項目
for i in 0..54
data = item.battler_add_ability(i)
case i
when 0
draw_txt.push("スティール率" + data.to_s + "") if data != 1
when 1
draw_txt.push("自動復活(" + data[2].to_s + ")" + data[1].to_s + "%") if data[1] != 0
when 2
draw_txt.push("踏止(" + data[0].to_s + ")" + data[1].to_s + "%") if data != [150,0]
when 3
draw_txt.push("回復反転" + ((data*100).to_i).to_s + "%") if data != 0
when 4,43
data.each do |id|
draw_txt.push($data_states[id].name + "発動")
end
when 5
draw_txt.push("メタルボディ(" + data.to_s + ")") if data != 0
when 6
for type in 1..data.size - 1
next if data[type] == nil or data[type] == 0
draw_txt.push($data_system.skill_types[type] + data[type].to_s + "回発動")
end
when 7
draw_txt.push("即死反転") if data
when 8
draw_txt.push("仲間思い" + ((data*100).to_i).to_s + "%") if data != 0
when 9
draw_txt.push("弱気" + ((data*100).to_i).to_s + "%") if data != 0
when 10
draw_txt.push("防御壁展開(" + data.to_s + ")") if data != 0
when 11
draw_txt.push("無効化障壁(" + data.to_s + ")") if data != 0
when 12
draw_txt.push("TP消費率" + ((data*100).to_i).to_s + "%") if data != 1
when 13
draw_txt.push("スキル変化") if data != []
when 14
for wtype in 1..data.size - 1
next unless data[wtype]
for stype in 0..data[wtype].size - 1
next if data[wtype][stype] == nil or data[wtype][stype] == 0
draw_txt.push($data_system.skill_types[stype] + "強化(" + $data_system.weapon_types[wtype] +")"+ data[wtype][stype].to_s + "%")
end
end
when 15
draw_txt.push("行動変化") if data != []
when 16
draw_txt.push("最終反撃") if data != []
when 17
draw_txt.push("反撃変化") if data != []
when 18
draw_txt.push("戦後回復("+ data[0].to_s + "%," + data[1].to_s+ "%)" ) if data != [0,0]
when 19,20,21
value = "HP消費" if i == 19
value = "MP消費" if i == 20
value = "TP消費" if i == 21
for type in 1..data.size - 1
next if data[type] == nil or data[type] == 1
draw_txt.push(value + ((data[type]*100).to_i).to_s + "%(" + $data_system.skill_types[type] +")")
end
when 22
draw_txt.push("HP消費率" + ((data*100).to_i).to_s + "%") if data != 1
when 23
draw_txt.push("憑依強化" + ((data*100).to_i).to_s + "%") if data != 0
when 24
draw_txt.push("反撃強化" + ((data*100).to_i).to_s + "%") if data != 0
when 25
draw_txt.push( "逆境強化(" + data[0].to_s + ")" + data[1].to_s + "%" ) if data != [0,0]
when 26
draw_txt.push("衝撃MP変換" + ((data*100).to_i).to_s + "%") if data != 0
when 27
draw_txt.push("衝撃G変換" + ((data*100).to_i).to_s + "%") if data != 0
when 28
draw_txt.push("必中反撃" + ((data*100).to_i).to_s + "%") if data != 0
when 29
draw_txt.push("魔法反撃" + ((data*100).to_i).to_s + "%") if data != 0
when 30
data.each do |id|
draw_txt.push($data_states[id].name + "追撃")
end
when 31
draw_txt.push("耐久減少率" + ((data*100).to_i).to_s + "%") if data != 1
when 32
draw_txt.push("遅延ステート") if data != []
when 33
draw_txt.push("条件ステート") if data != []
when 34
draw_txt.push("自爆耐性") if data
when 35
draw_txt.push("衝撃MP吸収" + ((data*100).to_i).to_s + "%") if data != 0
when 36
draw_txt.push("衝撃G回収" + ((data*100).to_i).to_s + "%") if data != 0
when 37
draw_txt.push("開始時発動") if data != []
when 38
draw_txt.push("ターン開始時発動") if data != []
when 39
draw_txt.push("ターン終了時発動") if data != []
when 40
draw_txt.push("拡張反撃" + ((data*100).to_i).to_s + "%") if data != 0
when 41
draw_txt.push("拡張魔法反撃" + ((data*100).to_i).to_s + "%") if data != 0
when 42
draw_txt.push("拡張必中反撃" + ((data*100).to_i).to_s + "%") if data != 0
when 43
data.each do |id|
draw_txt.push($data_states[id].name + "発動")
end
when 44
next if data == [0,100]
if data[0] != 0
gain = ""
gain = "+" if data[0] > 0
draw_txt.push("最大TP" + gain + data[0].to_s)
end
if data[1] != 0
gain = ""
gain = "+" if data[1] > 0
draw_txt.push("最大TP" + gain + data[0].to_s + "%")
end
when 45
draw_txt.push("自動防御("+ data[1].to_s + "%," + data[0].to_s+ "%)" ) if data != [0,0]
when 46
draw_txt.push("必中無効" + data.to_s + "%") if data != 0
when 47
draw_txt.push("物理無効" + data.to_s + "%") if data != 0
when 48
draw_txt.push("魔法無効" + data.to_s + "%") if data != 0
when 49
draw_txt.push("戦後全体回復("+ data[0].to_s + "%," + data[1].to_s+ "%)" ) if data != [0,0]
when 50
next if data == []
data.each do |obj|
draw_txt.push("反撃付与(" + $data_states[obj[0]].name + obj[1].to_s + "%")
end
when 51
draw_txt.push("物理反撃変化") if data != []
when 52
draw_txt.push("魔法反撃変化") if data != []
when 53
draw_txt.push("必中反撃変化") if data != []
when 54
next if data == []
data.each do |obj|
draw_txt.push("属性場展開(" + $data_system.elements[obj[0]] + ")" )
end
end
end
#追加特徴項目
for i in 0..10
data = arr_id_value_flatten(item.multi_booster(i))
next if data == []
case i
when 0,1
value = "強化" if i == 0
value = "吸収" if i == 1
for id in 1..data.size - 1
next if data[id] == nil or data[id] == 0
draw_txt.push($data_system.elements[id] + value + data[id].to_s + "%")
end
when 2,3,4,5
value = "物理強化" if i == 2
value = "魔法強化" if i == 3
value = "必中強化" if i == 4
value = "通常強化" if i == 5
for id in 0..data.size - 1
next if data[id] == nil
next if id == 0 && i < 5
weapon = $data_system.weapon_types[id]
weapon = "素手" if id == 0 && i == 5
draw_txt.push(value + "(" + weapon + ")" + data[id].to_s + "%")
end
when 6
for id in 1..data.size - 1
next if data[id] == nil or data[id] == 0
draw_txt.push("付与率(" + $data_system.skill_types[id] + ")" + (data[id].to_f / 100).to_s + "")
end
when 7
for id in 1..data.size - 1
next if data[id] == nil or data[id] == 0
draw_txt.push("付与率(" + $data_system.skill_types[id] + ")+" + data[id].to_s + "%")
end
when 8
for id in 1..data.size - 1
next if data[id] == nil or data[id] == 0
draw_txt.push($data_states[id].name + "付与率" + (data[id].to_f / 100).to_s + "")
end
when 9
for id in 1..data.size - 1
next if data[id] == nil or data[id] == 0
draw_txt.push($data_states[id].name + "付与率+" + data[id].to_s + "%")
end
when 10
for id in 1..data.size - 1
next if data[id] == nil or data[id] == 0
draw_txt.push($data_system.skill_types[id] + "強化" + data[id].to_s + "%")
end
end
end
for i in 0..5
data = item.party_add_ability(i)
next if data == 1
case i
when 0
draw_txt.push("獲得金額" + data.to_s + "")
when 1
draw_txt.push("Drop率" + data.to_s + "")
when 2
draw_txt.push("遭遇率" + data.to_s + "")
when 3
draw_txt.push("獲得EXP" + data.to_s + "")
when 4
draw_txt.push("獲得JEXP" + data.to_s + "")
when 5
draw_txt.push("獲得装備EXP" + data.to_s + "")
end
end
#装備品個別管理用描画処理
if $kure_base_script[:SortOut]
draw_txt.push("耐久値減少無効") if item.protect_durable
draw_txt = [] if KURE::SortOut::BROKEN_FEATURE == 1 && item.broken?
end
return draw_txt
end
#--------------------------------------------------------------------------
# ☆ 特徴の文字配列の呼び出し(追加定義)
#--------------------------------------------------------------------------
def call_effect_txt(item)
draw_txt = Array.new
#書きだし
item.effects.each do |effect|
case effect.code
#HP回復,MP回復,TP回復
when 11,12,13
case effect.code
when 11
txt = "HP "
when 12
txt = "MP "
when 13
txt = "TP "
end
if effect.value1 != 0
txt2 = "% 回復" if effect.value1 > 0
txt2 = "% 減少" if effect.value1 < 0
draw_txt.push(txt + (((effect.value1*100).abs).to_i).to_s + txt2)
end
if effect.value2 != 0
txt2 = " 回復" if effect.value2 > 0
txt2 = " 減少" if effect.value2 < 0
draw_txt.push(txt + ((effect.value2.abs).to_i).to_s + txt2)
end
when 21,22
case effect.code
when 21
txt = " 付与 "
when 22
txt = " 解除 "
end
draw_txt.push($data_states[effect.data_id].name + txt + ((effect.value1*100).to_i).to_s + "%")
when 31,32,33,34
case effect.code
when 31
txt = " 強化付与 "
txt2 = (effect.value1.to_i).to_s + "ターン"
when 32
txt = " 弱体付与 "
txt2 = (effect.value1.to_i).to_s + "ターン"
when 33
txt = " 強化解除"
txt2 = ""
when 34
txt = " 弱体解除"
txt2 = ""
end
draw_txt.push(Vocab::param(effect.data_id) + txt + txt2)
when 41
draw_txt.push("逃走効果")
when 42
draw_txt.push(Vocab::param(effect.data_id) + " 成長(" + (effect.value1.to_i).to_s + ")" )
when 43
draw_txt.push($data_skills[effect.data_id].name + " 習得")
when 44
draw_txt.push("特殊効果")
end
end
return draw_txt
end
end
#==============================================================================
# ●■ RPG::BaseItem(追加定義集積)
#==============================================================================
class RPG::BaseItem
#--------------------------------------------------------------------------
# ● 特徴オブジェクトの配列取得(特徴コードを限定)(追加定義)
#--------------------------------------------------------------------------
def features_data(code)
features.select {|ft| ft.code == code }
end
#--------------------------------------------------------------------------
# ● 特徴オブジェクトの配列取得(特徴コードとデータ ID を限定)(追加定義)
#--------------------------------------------------------------------------
def features_with_id_data(code, id)
features.select {|ft| ft.code == code && ft.data_id == id }
end
#--------------------------------------------------------------------------
# ● 特徴値の総乗計算(追加定義)
#--------------------------------------------------------------------------
def features_pi_data(code, id)
features_with_id_data(code, id).inject(1.0) {|r, ft| r *= ft.value }
end
#--------------------------------------------------------------------------
# ● 特徴値の総和計算(データ ID を指定)(追加定義)
#--------------------------------------------------------------------------
def features_sum_data(code, id)
features_with_id_data(code, id).inject(0.0) {|r, ft| r += ft.value }
end
#--------------------------------------------------------------------------
# ● 特徴値の総和計算(データ ID は非指定)(追加定義)
#--------------------------------------------------------------------------
def features_sum_all_data(code)
features_data(code).inject(0.0) {|r, ft| r += ft.value }
end
#--------------------------------------------------------------------------
# ● 特徴の集合和計算(追加定義)
#--------------------------------------------------------------------------
def features_set_data(code)
features_data(code).inject([]) {|r, ft| r |= [ft.data_id] }
end
#--------------------------------------------------------------------------
# ●■ 記憶数増加の定義(追加定義)
#--------------------------------------------------------------------------
def gain_max_memorize
cheak_note = @note
gain_max_memorize = 0
while cheak_note do
cheak_note.match(/<最大記憶数増加\s?(\d+)\s?>/)
gain_max_memorize += $1.to_i if $1
cheak_note = $'
end
return gain_max_memorize
end
#--------------------------------------------------------------------------
# ●■ 記憶容量増加の定義(追加定義)
#--------------------------------------------------------------------------
def gain_memorize
cheak_note = @note
gain_memorize = 0
while cheak_note do
cheak_note.match(/<最大記憶容量増加\s?(\d+)\s?>/)
gain_memorize += $1.to_i if $1
cheak_note = $'
end
return gain_memorize
end
#--------------------------------------------------------------------------
# ◆ 経験済み職業クラスIDの定義(追加定義)[共用]
#--------------------------------------------------------------------------
def exp_jobchange_class
list = @note.scan(/<経験済職業\s?(\d+-\d+(?:\s?*,\s?*\d+-\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ◆ 転職可能アクターIDの定義(追加定義)[共用]
#--------------------------------------------------------------------------
def need_jobchange_actor
list = @note.scan(/<転職許可\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ◆ リスト表示の定義(追加定義)[共用]
#--------------------------------------------------------------------------
def view_class_name
return false if @note.include?("<非公開表示>")
return true
end
#--------------------------------------------------------------------------
# ◆ 短縮職業名(追加定義)[共用]
#--------------------------------------------------------------------------
def short_class_name
@note.match(/<短縮名称\s?(.+?)\s?>/)
return @name unless $1
return $1
end
#--------------------------------------------------------------------------
# ■ 記憶容量の定義(追加定義)
#--------------------------------------------------------------------------
def memorize_capacity
@note.match(/<記憶容量\s?(\d+)\s?>/)
return 0 unless $1
return $1.to_i
end
#--------------------------------------------------------------------------
# ■ スキルの表示、非表示定義(追加定義)
#--------------------------------------------------------------------------
def view_skill_mode
return 0 if @note.include?("<常時非表示>")
return 1 if @note.include?("<戦闘中非表示>")
return 2 if @note.include?("<メニュー非表示>")
return 3
end
#--------------------------------------------------------------------------
# ■★ パッシブスキルの対応武器IDの定義(追加定義)
#--------------------------------------------------------------------------
def passive_skill_id_w
list = @note.scan(/<パッシブ能力武器\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ■★ パッシブスキルの対応防具IDの定義(追加定義)
#--------------------------------------------------------------------------
def passive_skill_id_a
list = @note.scan(/<パッシブ能力防具\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ■★ パッシブスキルの対応職業IDの定義(追加定義)
#--------------------------------------------------------------------------
def passive_skill_id_c
list = @note.scan(/<パッシブ能力職業\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ■ メモライズ数の職業補正定義(追加定義)
#--------------------------------------------------------------------------
def max_memorize_revise
list = @note.scan(/<メモライズ数補正\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ■ 追加メモライズ数を保存している変数の定義(追加定義)
#--------------------------------------------------------------------------
def add_max_memorize_var
list = @note.scan(/<追加メモライズ数保存変数\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ■ メモライズ容量の職業補正定義(追加定義)
#--------------------------------------------------------------------------
def memorize_capacity_revise
list = @note.scan(/<メモライズ容量補正\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ■ 追加メモライズ容量を保存している変数の定義(追加定義)
#--------------------------------------------------------------------------
def add_max_memorize_cap_var
list = @note.scan(/<追加メモライズ容量保存変数\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ■ 初期メモライズ定義(追加定義)
#--------------------------------------------------------------------------
def first_memorize
list = @note.scan(/<初期メモライズ\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ■ 共存不可メモライズ定義(追加定義)
#--------------------------------------------------------------------------
def not_jumble_memorize
list = @note.scan(/<共存不可メモライズ\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ◆ オートメモライズ不要の定義(追加定義)
#--------------------------------------------------------------------------
def not_auto_memorize
return @note.include?("<自動メモライズ不要>")
end
#--------------------------------------------------------------------------
# ☆ アクターの基本能力値を取得する職業IDの定義(追加定義)
#--------------------------------------------------------------------------
def base_param_index
@note.match(/<基本能力値\s?(\d+)\s?>/)
return 0 unless $1
return $1.to_i
end
#--------------------------------------------------------------------------
# ☆ 職業別TP基本値の定義(追加定義)
#--------------------------------------------------------------------------
def base_tp
@note.match(/<TP基本値\s?(\d+)\s?>/)
return 50 unless $1
return $1.to_i
end
#--------------------------------------------------------------------------
# ☆ 職業別TP上限値の定義(追加定義)
#--------------------------------------------------------------------------
def upper_limit_tp
@note.match(/<TP上限値\s?(\d+)\s?>/)
return 9999 unless $1
return $1.to_i
end
#--------------------------------------------------------------------------
# ☆ アクター別TPのLv補正値の定義(追加定義)
#--------------------------------------------------------------------------
def tp_level_revise
@note.match(/<TPLv補正\s?([1-9]\d*|0)(\.\d+)?>/)
return 0 unless $1
value = $1.to_f
value += $2.to_f if $2
return value
end
#--------------------------------------------------------------------------
# ☆ 通常攻撃に使用するスキルIDの定義(追加定義)
#--------------------------------------------------------------------------
def normal_attack_id
list = @note.scan(/<通常攻撃\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ☆ 戦闘開始時のTP値の定義(追加定義)
#--------------------------------------------------------------------------
def battle_start_tp
@note.match(/<開始時TP\s?(\d+)%>/)
return -1 unless $1
return 100 if $1.to_i > 100
return $1.to_i
end
#--------------------------------------------------------------------------
# ☆ アクター追加能力(追加定義)
#--------------------------------------------------------------------------
def battler_add_ability(id)
return call_add_feature(id, @note)
end
#--------------------------------------------------------------------------
# ☆ ブースター能力(追加定義)
#--------------------------------------------------------------------------
def multi_booster(id)
return call_multi_booster(id, @note)
end
#--------------------------------------------------------------------------
# ☆ パーティー追加能力(追加定義)
#--------------------------------------------------------------------------
def party_add_ability(id)
return call_party_add_feature(id, @note)
end
#--------------------------------------------------------------------------
# ☆ 複数属性の定義(追加定義)
#--------------------------------------------------------------------------
def attack_elements_list
list = @note.scan(/<攻撃属性\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ☆ 属性反映の定義(追加定義)
#--------------------------------------------------------------------------
def reflect_elements
return @note.include?("<攻撃属性スキル反映>")
end
#--------------------------------------------------------------------------
# ☆ アビリティポイントの定義(追加定義)
#--------------------------------------------------------------------------
def get_ability_point
list = @note.scan(/<習得AP\s?(\d+-\d+(?:\s?*,\s?*\d+-\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ☆ 必要アビリティポイントの定義(追加定義)
#--------------------------------------------------------------------------
def need_ability_point
@note.match(/<必要AP\s?(\d+)\s?>/)
return 1000 unless $1
return $1.to_i
end
#--------------------------------------------------------------------------
# ★ 追加スキルポイント数を保存している変数の定義(追加定義)
#--------------------------------------------------------------------------
def add_max_skillpoint_var
@note.match(/<追加ポイント数保存変数\s?(\d+)\s?>/)
return 0 unless $1
return $1.to_i
end
#--------------------------------------------------------------------------
# ★ スキルポイントのアクター補正定義(追加定義)
#--------------------------------------------------------------------------
def skillpoint_revise
@note.match(/<スキルポイント補正\s?(\d+)\s?>/)
return 0 unless $1
return $1.to_i
end
#--------------------------------------------------------------------------
# ★ スキルポイントのLv補正定義(追加定義)
#--------------------------------------------------------------------------
def skillpoint_level_revise
@note.match(/<スキルポイントLv補正\s?([1-9]\d*|0)(\.\d+)?>/)
return 0 unless $1
value = $1.to_f
value += $2.to_f if $2
return value
end
#--------------------------------------------------------------------------
# ★ スキルポイントのJobLv補正定義(追加定義)
#--------------------------------------------------------------------------
def skillpoint_joblevel_revise
@note.match(/<スキルポイントJobLv補正\s?([1-9]\d*|0)(\.\d+)?>/)
return 0 unless $1
value = $1.to_f
value += $2.to_f if $2
return value
end
#--------------------------------------------------------------------------
# ☆ 死亡時残留ステートの定義(追加定義)
#--------------------------------------------------------------------------
def not_delete_state
return @note.include?("<死亡時残留>")
end
#--------------------------------------------------------------------------
# ☆ 全回復残留ステートの定義(追加定義)
#--------------------------------------------------------------------------
def not_delete_state_healing
return @note.include?("<全回復時残留>")
end
#--------------------------------------------------------------------------
# ☆ ドロップ率増加の定義(追加定義)
#--------------------------------------------------------------------------
def gain_drop_rate
@note.match(/<ドロップ変化\s?(\d+)%\s?>/)
return 100 unless $1
return $1.to_i
end
#--------------------------------------------------------------------------
# ◆ 破損状態の取得
#--------------------------------------------------------------------------
def broken?
false
end
end
#==============================================================================
# ■ RPG::UsableItem(追加定義)
#==============================================================================
class RPG::UsableItem < RPG::BaseItem
#--------------------------------------------------------------------------
# ☆ 耐久値ダメージ、回復の定義(追加定義)
#--------------------------------------------------------------------------
def durable_damage
durable_damage = Array.new
cheak_note = ""
cheak_note = @note if @note
while cheak_note do
cheak_note.match(/<耐久値ダメージ\s?(\d+)\s?,\s?(\d+)\s?,\s?(\d+)%\s?>/)
if $1 && $2 && $3
durable_damage.push([$1.to_i, $2.to_i, $3.to_i])
end
cheak_note = $'
end
cheak_note = @note if @note
while cheak_note do
cheak_note.match(/<耐久値回復\s?(\d+)\s?,\s?(\d+)\s?>/)
if $1 && $2
durable_damage.push([$1.to_i, -1 * ($2.to_i), 100])
end
cheak_note = $'
end
return durable_damage
end
#--------------------------------------------------------------------------
# ☆ 連続回数の定義(再定義)
#--------------------------------------------------------------------------
def repeats
@note.match(/<連続回数\s?(\d+)\s?>/)
return @repeats unless $1
return $1.to_i
end
#--------------------------------------------------------------------------
# ☆ 使用効果の定義(再定義)
#--------------------------------------------------------------------------
def effects
effect = add_effects_before
effect += @effects.clone
effect += add_effects_after
return effect
end
#--------------------------------------------------------------------------
# ☆ 使用効果の追加定義[基本より前の処理](追加定義)
#--------------------------------------------------------------------------
def add_effects_before
add_effect = Array.new
cheak_note = ""
cheak_note = @note if @note
#ステート初期化のメモ欄設定適用
cheak_note.match(/<ステート初期化\s?(\d+)%\s?>/)
if $1
add_effect.push(RPG::UsableItem::Effect.new(49, $1.to_i))
end
return add_effect
end
#--------------------------------------------------------------------------
# ☆ 使用効果の追加定義[基本より後の処理](追加定義)
#--------------------------------------------------------------------------
def add_effects_after
add_effect = Array.new
cheak_note = ""
cheak_note = @note if @note
#盗むのメモ欄設定適用
cheak_note.match(/<スティール付与\s?(\d+)\s?>/)
if $1
add_effect.push(RPG::UsableItem::Effect.new(45, $1.to_i))
end
#スキルポイントリセットのメモ欄設定適用
if cheak_note.include?("<スキルポイントリセット>")
add_effect.push(RPG::UsableItem::Effect.new(46))
end
#装備破壊のメモ欄設定適用
cheak_note.match(/<耐久値ダメージ\s?(\d+)\s?,\s?(\d+)\s?,\s?(\d+)%\s?>/)
if $1 && $2 && $3
add_effect.push(RPG::UsableItem::Effect.new(47))
end
#耐久力回復のメモ欄設定適用
cheak_note.match(/<耐久値回復\s?(\d+)\s?,\s?(\d+)\s?>/)
if $1 && $2
add_effect.push(RPG::UsableItem::Effect.new(47))
end
#アイテム獲得のメモ欄設定適用
cheak_note.match(/<獲得アイテム\s?(\d+-\d+(?:\s?*,\s?*\d+-\d+)*)>/)
if $1
add_effect.push(RPG::UsableItem::Effect.new(48))
end
return add_effect
end
#--------------------------------------------------------------------------
# ☆ 回復反転無視スキルの定義(追加定義)
#--------------------------------------------------------------------------
def ignore_reverse_heel
return @note.include?("<回復反転無視>")
end
#--------------------------------------------------------------------------
# ☆ 連続発動スキルの定義(追加定義)
#--------------------------------------------------------------------------
def multi_skill_effect
list = @note.scan(/<連続発動スキル\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ☆ 連続アニメーションの定義(追加定義)
#--------------------------------------------------------------------------
def multi_anim_effect
list = @note.scan(/<連続アニメーション\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ☆ 仲間想い補正の定義(追加定義)
#--------------------------------------------------------------------------
def companion_revise
@note.match(/<仲間想い\s?(\d+)%\s?>/)
return 0 unless $1
return $1.to_i
end
#--------------------------------------------------------------------------
# ☆ 武器倍率の定義(追加定義)
#--------------------------------------------------------------------------
def weapon_d_rate
cheak_note = ""
cheak_note = @note if @note
list = cheak_note.scan(/<武器倍率\s?(\d+-\d+(?:\s?*,\s?*\d+-\d+)*)>/)
save_list = Array.new
weapon_rate = Array.new
return weapon_rate if list == [] and list.empty?
$1.scan(/\d+/).each { |num| save_list.push(num.to_i)}
return arr_id_value_flatten(save_list)
end
#--------------------------------------------------------------------------
# ☆ エラー回避(追加定義)
#--------------------------------------------------------------------------
def is_skill?
return false
end
#--------------------------------------------------------------------------
# ☆ 通常攻撃スキルの定義(追加定義)
#--------------------------------------------------------------------------
def normal_attack_skill?
return @note.include?("<通常攻撃判定>")
end
#--------------------------------------------------------------------------
# ☆ ステート反撃対象の定義(追加定義)
#--------------------------------------------------------------------------
def add_counter_state?
return @note.include?("<ステート反撃対象>")
end
#--------------------------------------------------------------------------
# ☆ 初期化ステートタイプの定義(追加定義)
#--------------------------------------------------------------------------
def clear_state_type
list = @note.scan(/<初期化ステートタイプ\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ☆ 初期化対象外ステートの定義(追加定義)
#--------------------------------------------------------------------------
def not_clear_state_type
list = @note.scan(/<ステート初期化対象外\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ☆ 発動後ステートの定義(追加定義)
#--------------------------------------------------------------------------
def after_add_state
list = @note.scan(/<発動後付与ステート\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
end
#==============================================================================
# ■ RPG::Skill(再定義)
#==============================================================================
class RPG::Skill < RPG::UsableItem
#--------------------------------------------------------------------------
# ☆ 獲得アイテムの定義(追加定義)
#--------------------------------------------------------------------------
def get_item_list
list = @note.scan(/<獲得アイテム\s?(\d+-\d+(?:\s?*,\s?*\d+-\d+)*)>/)
return arr_id_value_pack(list, 2)
end
#--------------------------------------------------------------------------
# ☆ 必要武器タイプの定義(追加定義)
#--------------------------------------------------------------------------
def required_add_wtype_id
list = @note.scan(/<必要武器タイプ\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ☆ 要求装備タイプの定義(追加定義)
#--------------------------------------------------------------------------
def need_etype_id
list = @note.scan(/<要求装備タイプ\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ☆ 要求武器タイプの定義(追加定義)
#--------------------------------------------------------------------------
def need_wtype_id_all
list = @note.scan(/<要求武器タイプ\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ☆ 二刀流スキルの定義(追加定義)
#--------------------------------------------------------------------------
def need_two_weapon
return @note.include?("<二刀流要求>")
end
#--------------------------------------------------------------------------
# ☆ 二刀流同一ID要求の定義(追加定義)
#--------------------------------------------------------------------------
def request_same_weapon_id
return @note.include?("<同一タイプ二刀流専用>")
end
#--------------------------------------------------------------------------
# ☆ エラー回避(追加定義)
#--------------------------------------------------------------------------
def is_skill?
return true
end
#--------------------------------------------------------------------------
# ☆ 発動条件の定義(追加定義)
#--------------------------------------------------------------------------
def passive_condition_list(id)
case id
when 0
#発動要求武器
list = @note.scan(/<発動要求武器タイプ\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
when 1
#発動要求防具
list = @note.scan(/<発動要求装備タイプ\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
return []
end
#--------------------------------------------------------------------------
# ☆ 耐久値減少の定義(追加定義)
#--------------------------------------------------------------------------
def reduce_durable
reduce_durable = Array.new
cheak_note = ""
cheak_note = @note if @note
while cheak_note do
cheak_note.match(/<耐久値消費\s?(\d+)\s?,\s?(\d+)\s?,\s?(\d+)%\s?>/)
if $1 && $2 && $3
reduce_durable.push([$1.to_i, $2.to_i, $3.to_i])
end
cheak_note = $'
end
return reduce_durable
end
#--------------------------------------------------------------------------
# ☆ 習得不可の定義(追加定義)
#--------------------------------------------------------------------------
def not_learn_list
list = @note.scan(/<習得不可\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
end
#==============================================================================
# ■ RPG::EquipItem(再定義)
#==============================================================================
class RPG::EquipItem < RPG::BaseItem
#--------------------------------------------------------------------------
# ● 装備タイプの定義(再定義)
#--------------------------------------------------------------------------
def etype_id
@note.match(/<装備タイプ\s?(\d+)\s?>/)
return @etype_id unless $1
return $1.to_i
end
#--------------------------------------------------------------------------
# ● 拡張装備タイプの定義(追加定義)
#--------------------------------------------------------------------------
def add_etype_id
list = @note.scan(/<拡張装備タイプ\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ● 装備可能アクターの定義(追加定義)
#--------------------------------------------------------------------------
def actor_equip_limit
list = @note.scan(/<装備可能アクター\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ● 装備タイプの定義(再定義)
#--------------------------------------------------------------------------
def etype_id=(etype_id)
@etype_id = etype_id
end
end
#==============================================================================
# ■ RPG::Actor(追加定義)
#==============================================================================
class RPG::Actor < RPG::BaseItem
#--------------------------------------------------------------------------
# ◇ 初期ジョブレベルの定義(追加定義)
#--------------------------------------------------------------------------
def initial_joblevel
@note.match(/<初期職業レベル\s?(\d+)\s?>/)
return 1 unless $1
return $1.to_i
end
end
#==============================================================================
# ■ RPG::Enemy(追加定義)
#==============================================================================
class RPG::Enemy < RPG::BaseItem
#--------------------------------------------------------------------------
# ◇ 装備経験値の定義(追加定義)
#--------------------------------------------------------------------------
def equip_exp
@note.match(/<装備Exp\s?(\d+)\s?>/)
return @exp unless $1
return $1.to_i
end
#--------------------------------------------------------------------------
# ☆ アビリティポイントの定義(追加定義)
#--------------------------------------------------------------------------
def ability_exp
@note.match(/<獲得AP\s?(\d+)\s?>/)
return 0 unless $1
return $1.to_i
end
#--------------------------------------------------------------------------
# § ステータスポイントの定義(追加定義)
#--------------------------------------------------------------------------
def status_exp
@note.match(/<ステータスポイント\s?(\d+)\s?>/)
return 0 unless $1
return $1.to_i
end
#--------------------------------------------------------------------------
# § スキルポイントの定義(追加定義)
#--------------------------------------------------------------------------
def skill_exp
@note.match(/<スキルポイント\s?(\d+)\s?>/)
return 0 unless $1
return $1.to_i
end
#--------------------------------------------------------------------------
# ◇ レベルの定義(追加定義)
#--------------------------------------------------------------------------
def level
@note.match(/<レベル\s?(\d+)\s?>/)
return 1 unless $1
return $1.to_i
end
#--------------------------------------------------------------------------
# ☆ ドロップアイテムの定義(再定義)
#--------------------------------------------------------------------------
def drop_items
add_drop_items unless @add_drop_items
return @drop_items + @add_drop_items if @add_drop_items
return @drop_items
end
#--------------------------------------------------------------------------
# ☆ 追加ドロップアイテムの定義(追加定義)
#--------------------------------------------------------------------------
def add_drop_items
@add_drop_items = Array.new
cheak_note = ""
cheak_note = @note if @note
while cheak_note do
cheak_note.match(/<追加ドロップ\s?([IWA])\s?,\s?(\d+)\s?,\s?(\d+)>/)
if $1 && $2 && $3
new_drop = RPG::Enemy::DropItem.new
case $1.upcase
when "I"
new_drop.kind = 1
when "W"
new_drop.kind = 2
when "A"
new_drop.kind = 3
end
new_drop.data_id = $2.to_i
new_drop.denominator = $3.to_f
@add_drop_items.push(new_drop)
end
cheak_note = $'
end
end
#--------------------------------------------------------------------------
# ☆ 盗めるアイテムの定義(追加定義)
#--------------------------------------------------------------------------
def steal_list
steal_list = Array.new
cheak_note = ""
cheak_note = @note if @note
while cheak_note do
cheak_note.match(/<スティールリスト\s?(\d+)\s?,\s?([IWA])\s?,\s?(\d+)\s?,\s?(\d+)>/)
if $1 && $2 && $3 && $4
case $2.upcase
when "I"
kind = 1
when "W"
kind = 2
when "A"
kind = 3
end
data_id = $3.to_i
denominator = $4.to_f
steal_list[$1.to_i] ||= []
steal_list[$1.to_i].push([kind, data_id, denominator])
end
cheak_note = $'
end
return steal_list
end
end
#==============================================================================
# ■ RPG::State(追加定義)
#==============================================================================
class RPG::State < RPG::BaseItem
#--------------------------------------------------------------------------
# ☆身代わり対象設定の定義(追加定義)
#--------------------------------------------------------------------------
def adv_substitute_t
return @note.include?("<身代わり対象設定>")
end
#--------------------------------------------------------------------------
# ☆重複許容の定義(追加定義)
#--------------------------------------------------------------------------
def multi_addable
result = nil
@note.match(/<重複許容\s?([AEB])\s?,\s?(\d+)\s?>/)
if $1 && $2
result = []
case $1.upcase
when "A"
result[0] = 0
when "E"
result[0] = 1
when "B"
result[0] = 2
end
result[1] = $2.to_i
end
return result
end
#--------------------------------------------------------------------------
# ☆ ステートタイプの定義(追加定義)
#--------------------------------------------------------------------------
def state_type
list = @note.scan(/<ステートタイプ\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ☆ ステート解除時付与の定義(追加定義)
#--------------------------------------------------------------------------
def next_state
list = @note.scan(/<解除時ステート\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ☆ 前提ステートの定義(追加定義)
#--------------------------------------------------------------------------
def basic_state
list = @note.scan(/<前提ステート\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ☆ 相殺ステートの定義(追加定義)
#--------------------------------------------------------------------------
def offset_state_type
list = @note.scan(/<相殺ステートタイプ\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ☆ 上書きステートの定義(追加定義)
#--------------------------------------------------------------------------
def overwrite_state_type
list = @note.scan(/<上書きステートタイプ\s?(\d+(?:\s?*,\s?*\d+)*)>/)
return arr_num_slice(list)
end
#--------------------------------------------------------------------------
# ☆上書きの定義(追加定義)(追加定義)
#--------------------------------------------------------------------------
def overwrite_mode
return 1 if @note.include?("<効果延長>")
return 2 if @note.include?("<効果上書き不可>")
return 0
end
#--------------------------------------------------------------------------
# ☆反射先の定義(追加定義)(未実装)
#--------------------------------------------------------------------------
def mirror_mode
return 1 if @note.include?("<敵単体反射>")
return 2 if @note.include?("<敵全体反射>")
return 3 if @note.include?("<味方単体反射>")
return 4 if @note.include?("<味方全体反射>")
return 0
end
end