#==============================================================================
# ■ XPのデータのVX Aceへの移行 by 貪藻矢射妥←
#------------------------------------------------------------------------------
# 読んで字のごとく、XPで造ったデータ(*.rxdata)をVX Ace(*.rvdata2)へ移行します。
#
# Data ディレクトリに移行したいXPのSystem.rxdata、States.rxdata、Item.rxdata、
# Weapon.rxdata、Armor.rxdataをコピーしてください。
#
# イベントで
# $game_system.set_xp_2_vxa
# を実行し、ゲーム本編で起動した後、一旦、ツクールを終了して再起動させて
# ください。
# そうすると反映されます。
#
# ※各種データの個数はXPとVX Aceとで同じ数にするか、もしくはVX Aceの方を
# 大きくしてください。
#
#==============================================================================
# 更新っぽいもの
# 2024:09:08
# ・固定文字列対応
module VX_TO_XP
# 属性を使用
SIE = 31 # 逆効果と相殺の属性
end
module KGC
# ◆吸収属性
ABSORB = 28
# ◆SP Damage用属性
SP_DAMAGE = 50
end
module ChangeSC
# SP割合消費の属性番号
SP_P_C = 32
# HP消費の属性番号
HP_C = 33
# HP割合消費の属性番号
HP_P_C = 34
# 消費軽減の属性番号
EX_RED = 27
end
module DIAMOND
# 命中率(属性と数値)
# S A B C D
HIT_RATES = [[55, 75], [56, 80], [57, 100], [58, 150], [59, 180]]
end
module ELE_MM
ELE_MM_MAX = 200
ELE_MM_MIN = -200
# weakest 物理/魔法
WEEK_P = 0
WEEK_M = -200
# 物理属性配列/魔法属性配列
P_LIST = [11..15]
M_LIST = [1..9, 16]
# 属性防御のみを設定した場合の軽減値
DEFAULT_GUARD = 15
# 属性防御判定用
GRD_ELE_PLUS = 0 # 属性ダメージ増加
GRD_ELE_MINUS = 1 # 属性ダメージ反転
GRD_ELE_NONE = -1 # デフォルト
end
module Tkl2K_2_XP
# ターンの最初に先制攻撃の属性番号
FASTEST_MOVE = 21
# ターンの一番最後に攻撃の属性番号
LASTEST_MOVE = 22
# 一度に敵全体を攻撃の属性番号
ALLIZE_ATTACK = 23
# 敵の回避率を無視の属性番号
EVA_IGNORE = 24
# 両手武器の属性番号
TWO_HANDED = 25
# 必殺(痛恨の一撃)防止の属性番号
CRITICAL_CANCEL = 26
# 敵の物理防御を無視の属性番号
PDEF_IGNORE = 53
# 敵の魔法防御を無視の属性番号
MDEF_IGNORE = 54
end
module Equip_Extend
# インナー装備用属性ID
INNER_ARM = 61
# 特殊装備用属性ID
EXTRA_ACC = 62
# 靴装備用属性ID
BOOTS_ACC = 63
end
module Def_Num
# スキルタイプ:封印で使うIDリスト
SEAL_ID_LIST = [2, 3, 4]
# 武器タイプ
#01:剣
WEP_TYPE_SWORD = 1
#02:刀
WEP_TYPE_KATANA = 2
#03:短剣
WEP_TYPE_KNIFE = 3
#04:斧
WEP_TYPE_HAWK = 4
#05:槍
WEP_TYPE_LANCE = 5
#06:鎌
WEP_TYPE_SCYTHE = 6
#07:拳
WEP_TYPE_KNUCKLE = 7
#08:棍棒
WEP_TYPE_STICK = 8
#09:弓
WEP_TYPE_BOW = 9
#10:杖
WEP_TYPE_ROD = 10
#11:本
WEP_TYPE_BOOK = 11
#12:拳銃
WEP_TYPE_GUN = 12
#13:狙撃銃
WEP_TYPE_RIFLE = 13
#14:散弾銃
WEP_TYPE_SHOTGUN = 14
#15:その他
WEP_TYPE_OTHER = 15
# 防具タイプ
#02:盾(ライト)
ARM_TYPE_SHIELD_L = 2
#03:盾(ヘビー)
ARM_TYPE_SHIELD_H = 3
#05:兜(女性用)
ARM_TYPE_MET_F = 5
#06:兜(男女兼用)
ARM_TYPE_MET_W = 6
#07:兜(男性用)
ARM_TYPE_MET_M = 7
#09:インナー(女性用)
ARM_TYPE_INNER_F = 9
#10:インナー(男性用)
ARM_TYPE_INNER_M = 10
#13:外套(女性用)
ARM_TYPE_ARMOR_F = 13
#14:外套(男女兼用)
ARM_TYPE_ARMOR_W = 14
#15:外套(男性用)
ARM_TYPE_ARMOR_M = 15
#17:アクセ(女性用)
ARM_TYPE_ACCE_F = 17
#18:アクセ(男女兼用)
ARM_TYPE_ACCE_W = 18
#19:アクセ・特殊(女性用)
ARM_TYPE_EXT_F = 19
#20:アクセ・特殊(男女兼用)
ARM_TYPE_EXT_W = 20
#21:アクセ・靴(男女兼用)
ARM_TYPE_BOOTS = 21
#武器のアニメーションID
# アニメーションID:剣
ANIM_ID_SWORD = 7
# アニメーションID:刀
ANIM_ID_KATANA = 112
# アニメーションID:短剣
ANIM_ID_KNIFE = nil
# アニメーションID:斧
ANIM_ID_HAWK = nil
# アニメーションID:槍
ANIM_ID_LANCE = 13
# アニメーションID:鎌
ANIM_ID_SCYTHE = nil
# アニメーションID:拳
ANIM_ID_KNUCKLE = 115
# アニメーションID:棍棒
ANIM_ID_STICK = 19
# アニメーションID:弓
ANIM_ID_BOW = nil
# アニメーションID:杖
ANIM_ID_ROD = nil
# アニメーションID:本
ANIM_ID_BOOK = nil
# アニメーションID:拳銃
ANIM_ID_GUN = 91
# アニメーションID:狙撃銃
ANIM_ID_RIFLE = 92
# アニメーションID:散弾銃
ANIM_ID_SHOTGUN = 92
end
module Def_Num_XP
# 防具タイプ
#0:盾
ARM_TYPE_SHIELD = 0
#1:兜
ARM_TYPE_MET = 1
#2:鎧
ARM_TYPE_ARMOR = 2
#3:アクセ
ARM_TYPE_ACCE = 3
# XPのデータでどこからどこまでが何の武器かわかっている場合
# 剣
WEP_LIST_SWORD = [2..93]
# 刀
WEP_LIST_KATANA = [102..245]
# 斧
WEP_LIST_HAWK = [247..263]
# 槍
WEP_LIST_LANCE = [277..303]
# 鎌
WEP_LIST_SCYTHE = [312..328]
# 拳
WEP_LIST_KNUCKLE = [337..368]
# 棍棒
WEP_LIST_STICK = [377..413]
# 拳銃
WEP_LIST_GUN = [422..507]
# 狙撃銃
WEP_LIST_RIFLE = [517..569]
# 散弾銃
WEP_LIST_SHOTGUN = [577..587]
# その他
WEP_LIST_OTHER = [597..610]
end
module FIX_PATH
# RPGツクールXPデータ拡張子
EX_CHILD_RXDATA = ".rxdata"
end
class Game_System
#--------------------------------------------------------------------------
# ● rvdata2からrxdataのファイル名を作成する
#--------------------------------------------------------------------------
def make_rxdata(data)
data2 = data.dup
data2[FIX_PATH::EX_CHILD_RVDATA2] = FIX_PATH::EX_CHILD_RXDATA
return data2
end
#--------------------------------------------------------------------------
# ● scope変換
#--------------------------------------------------------------------------
def get_scope_4_pxv(datas)
case datas.scope
when Def_Num_XP::SCOPE_KIND_NONE,
Def_Num_XP::SCOPE_KIND_ANY_EMENY,
Def_Num_XP::SCOPE_KIND_ALL_ENEMY
return datas.scope
when Def_Num_XP::SCOPE_KIND_ANY_FRIEND,
Def_Num_XP::SCOPE_KIND_ALL_FRIEND,
Def_Num_XP::SCOPE_KIND_ANY_FRIEND_DEAD,
Def_Num_XP::SCOPE_KIND_ALL_FRIEND_DEAD,
Def_Num_XP::SCOPE_KIND_USER
return datas.scope + 4
else
msgbox "ありえないエラー"
return nil
end
end
#--------------------------------------------------------------------------
# ● restriction変換
#--------------------------------------------------------------------------
def get_restriction_4_pxv(datas)
case datas.restriction
when Def_Num_XP::REST_PTN_NONE,
Def_Num_XP::REST_PTN_CONF_FRIEND,
Def_Num_XP::REST_PTN_NO_ACT
return datas.restriction
when Def_Num_XP::REST_PTN_NO_MAGIC
return Def_Num::REST_PTN_NONE
when Def_Num_XP::REST_PTN_CONF_ENEMY
return datas.restriction - 1
else
msgbox "ありえないエラー"
return nil
end
end
#--------------------------------------------------------------------------
# ● 防御力変換
#--------------------------------------------------------------------------
def get_def_4_pxv(datas)
return (datas.pdef + datas.mdef) / 2
end
#--------------------------------------------------------------------------
# ● アイコン名称変換
# スクリプト:アイコンの制限解除 が別途必要
#--------------------------------------------------------------------------
def get_icon_name(datas)
return "ICON#{DIA_IC::STT}" + datas.icon_name + "#{DIA_IC::FIN}"
end
#--------------------------------------------------------------------------
# ● 全部変換
#--------------------------------------------------------------------------
def set_xp_2_vxa
set_xp_items
set_xp_weapons
set_xp_armors
end
HP_SLIP_WD = "HPスリップ"
SP_SLIP_WD = "SPスリップ"
MltAtt_WD = "連続攻撃"
def wep_id_include_chk(list, id)
for data in list
if data.is_a?(Range)
return true if data === id
else
return true if data == id
end
end
return false
end
#--------------------------------------------------------------------------
# ● 武器の引き継ぎ
#--------------------------------------------------------------------------
def set_xp_weapons
$data_weapons_xp = load_data(make_rxdata(FIX_PATH::PATH_DATA_WEPN))
for id in 1...$data_weapons_xp.size
$data_weapons[id].name = $data_weapons_xp[id].name
$data_weapons[id].description = $data_weapons_xp[id].description.gsub(/\\n/, "\r\n")
$data_weapons[id].price = $data_weapons_xp[id].price
$data_weapons[id].params[2] = $data_weapons_xp[id].atk
$data_weapons[id].params[3] = $data_weapons_xp[id].pdef
$data_weapons[id].params[5] = $data_weapons_xp[id].mdef
$data_weapons[id].params[4] = $data_weapons_xp[id].int_plus
$data_weapons[id].params[6] = $data_weapons_xp[id].agi_plus
# 属性処理
if $data_weapons_xp[id].element_set != nil
make_features(Def_Num::FEATURE_ATK_ELEMENT, id)
end
# ステート付加処理
if $data_weapons_xp[id].plus_state_set != nil
make_features(Def_Num::FEATURE_ATK_STATE, id)
end
# 武器タイプとか分かっている場合の処理
if wep_id_include_chk(Def_Num_XP::WEP_LIST_SWORD, id) # 剣
$data_weapons[id].wtype_id = Def_Num::WEP_TYPE_SWORD
$data_weapons[id].animation_id = Def_Num::ANIM_ID_SWORD
end
if wep_id_include_chk(Def_Num_XP::WEP_LIST_KATANA, id) # 刀
$data_weapons[id].wtype_id = Def_Num::WEP_TYPE_KATANA
$data_weapons[id].animation_id = Def_Num::ANIM_ID_KATANA
end
if wep_id_include_chk(Def_Num_XP::WEP_LIST_HAWK, id) # 斧
$data_weapons[id].wtype_id = Def_Num::WEP_TYPE_HAWK
end
if wep_id_include_chk(Def_Num_XP::WEP_LIST_LANCE, id) # 槍
$data_weapons[id].wtype_id = Def_Num::WEP_TYPE_LANCE
$data_weapons[id].animation_id = Def_Num::ANIM_ID_LANCE
end
if wep_id_include_chk(Def_Num_XP::WEP_LIST_SCYTHE, id) # 鎌
$data_weapons[id].wtype_id = Def_Num::WEP_TYPE_SCYTHE
end
if wep_id_include_chk(Def_Num_XP::WEP_LIST_KNUCKLE, id) # 拳
$data_weapons[id].wtype_id = Def_Num::WEP_TYPE_KNUCKLE
$data_weapons[id].animation_id = Def_Num::ANIM_ID_KNUCKLE
end
if wep_id_include_chk(Def_Num_XP::WEP_LIST_STICK, id) # 棍棒
$data_weapons[id].wtype_id = Def_Num::WEP_TYPE_STICK
$data_weapons[id].animation_id = Def_Num::ANIM_ID_STICK
end
if wep_id_include_chk(Def_Num_XP::WEP_LIST_GUN, id) # 拳銃
$data_weapons[id].wtype_id = Def_Num::WEP_TYPE_GUN
$data_weapons[id].animation_id = Def_Num::ANIM_ID_GUN
end
if wep_id_include_chk(Def_Num_XP::WEP_LIST_RIFLE, id) # 狙撃銃
$data_weapons[id].wtype_id = Def_Num::WEP_TYPE_RIFLE
$data_weapons[id].animation_id = Def_Num::ANIM_ID_RIFLE
end
if wep_id_include_chk(Def_Num_XP::WEP_LIST_SHOTGUN, id) # 散弾銃
$data_weapons[id].wtype_id = Def_Num::WEP_TYPE_SHOTGUN
$data_weapons[id].animation_id = Def_Num::ANIM_ID_SHOTGUN
end
if wep_id_include_chk(Def_Num_XP::WEP_LIST_OTHER, id) # その他
$data_weapons[id].wtype_id = Def_Num::WEP_TYPE_OTHER
end
# XP : ターンの最初に先制攻撃 をつけている場合
if $data_weapons_xp[id].element_set.include?(Tkl2K_2_XP::FASTEST_MOVE)
make_features(Def_Num::FEATURE_ATK_SPEED, id, 999)
end
# XP : ターンの一番最後に攻撃 をつけている場合
if $data_weapons_xp[id].element_set.include?(Tkl2K_2_XP::LASTEST_MOVE)
make_features(Def_Num::FEATURE_ATK_SPEED, id, -999)
end
# XP : 一度に複数回攻撃可能な武器 対象の場合
max_atk = 0
mlt_flg = false
weapon = $data_weapons_xp[id]
if $data_system_xp == nil
$data_system_xp = load_data(make_rxdata(FIX_PATH::PATH_DATA_SYSM))
end
if weapon != nil
for j in weapon.element_set
ele_set = $data_system_xp.elements[j]
if ele_set != nil
if ele_set =~ /^#{MltAtt_WD}([0-9]+)$/
max_atk += $1.to_i
mlt_flg = true
end
end
end
end
if mlt_flg && max_atk > 1
# 追加攻撃回数を設定するので実際の攻撃回数-1を設定する
make_features(Def_Num::FEATURE_ATK_TIMES, id, max_atk - 1)
end
# XP : 両手武器 をつけている場合
if $data_weapons_xp[id].element_set.include?(Tkl2K_2_XP::TWO_HANDED)
make_features(Def_Num::FEATURE_EQUIP_SEAL, id)
end
# XP : 命中精度 を使用している場合
if $data_weapons_xp[id].element_set.include?(DIAMOND::HIT_RATES[0][0])
$data_weapons[id].features[1].value = 0.2
end
if $data_weapons_xp[id].element_set.include?(DIAMOND::HIT_RATES[1][0])
$data_weapons[id].features[1].value = 0.0
end
if $data_weapons_xp[id].element_set.include?(DIAMOND::HIT_RATES[2][0])
$data_weapons[id].features[1].value = -0.1
end
if $data_weapons_xp[id].element_set.include?(DIAMOND::HIT_RATES[3][0])
$data_weapons[id].features[1].value = -0.3
end
if $data_weapons_xp[id].element_set.include?(DIAMOND::HIT_RATES[4][0])
$data_weapons[id].features[1].value = -0.5
end
if $data_weapons_xp[id].icon_name != ""
$data_weapons[id].note = get_icon_name($data_weapons_xp[id])
end
# XP : 一度に敵全体を攻撃 をつけている場合
# 更に何らかのスクリプトで
# メモ欄の記載で全体攻撃のスクリプトを使用している場合
if $data_weapons_xp[id].element_set.include?(Tkl2K_2_XP::ALLIZE_ATTACK)
if $data_weapons[id].note != ""
$data_weapons[id].note += "\r\n" + "<全体攻撃>"
else
$data_weapons[id].note = "<全体攻撃>"
end
end
# XP : 敵の回避率を無視 をつけている場合
# 更に何らかのスクリプトで
# メモ欄の記載で回避無視のスクリプトを使用している場合
if $data_weapons_xp[id].element_set.include?(Tkl2K_2_XP::EVA_IGNORE)
if $data_weapons[id].note != ""
$data_weapons[id].note += "\r\n" + "<回避率無視>"
else
$data_weapons[id].note = "<回避率無視>"
end
end
# XP : 敵の物理/魔法防御を無視 をつけている場合
# 更に何らかのスクリプトで
# メモ欄の記載で防御無視のスクリプトを使用している場合
if ($data_weapons_xp[id].element_set.include?(Tkl2K_2_XP::PDEF_IGNORE) ||
$data_weapons_xp[id].element_set.include?(Tkl2K_2_XP::MDEF_IGNORE))
if $data_weapons[id].note != ""
$data_weapons[id].note += "\r\n" + "<防御無視>"
else
$data_weapons[id].note = "<防御無視>"
end
end
end
save_data($data_weapons, FIX_PATH::PATH_DATA_WEPN)
end
#--------------------------------------------------------------------------
# ● 防具の引き継ぎ
#--------------------------------------------------------------------------
def set_xp_armors
$data_armors_xp = load_data(make_rxdata(FIX_PATH::PATH_DATA_ARMR))
for id in 1...$data_armors_xp.size
$data_armors[id].name = $data_armors_xp[id].name
$data_armors[id].description = $data_armors_xp[id].description.gsub(/\\n/, "\r\n")
$data_armors[id].etype_id = $data_armors_xp[id].kind + 1
$data_armors[id].price = $data_armors_xp[id].price
$data_armors[id].params[7] = $data_armors_xp[id].eva
$data_armors[id].params[2] = $data_armors_xp[id].str_plus
$data_armors[id].params[3] = $data_armors_xp[id].pdef
$data_armors[id].params[5] = $data_armors_xp[id].mdef
$data_armors[id].params[4] = $data_armors_xp[id].int_plus
$data_armors[id].params[6] = $data_armors_xp[id].agi_plus
# XP : 必殺(痛恨の一撃)防止 をつけている場合
if $data_armors_xp[id].guard_element_set.include?(Tkl2K_2_XP::CRITICAL_CANCEL)
$data_armors[id].features.push(RPG::BaseItem::Feature.new(
Def_Num::FEATURE_XPARAM, 3, 1.0))
end
# XP : 特殊消費スキル を使用している場合
if $data_armors_xp[id].guard_element_set.include?(ChangeSC::EX_RED)
$data_armors[id].features.push(RPG::BaseItem::Feature.new(
Def_Num::FEATURE_SPARAM, 4, 0.9))
end
# 属性防御
if $data_armors_xp[id].guard_element_set != nil
for index in $data_armors_xp[id].guard_element_set
$data_armors[id].features.push(RPG::BaseItem::Feature.new(
Def_Num::FEATURE_ELEMENT_RATE,
index + 2, element_rate(index, id)))
end
end
# ステート防御
if $data_armors_xp[id].guard_state_set != nil
for index in $data_armors_xp[id].guard_state_set
if index < 19
$data_armors[id].features.push(RPG::BaseItem::Feature.new(
Def_Num::FEATURE_STATE_RATE,
index, 0.8))
end
end
end
# オートステート、スリップダメージ設定
# ダメージ吸収 貪藻矢射妥←カスタム を使用している場合
if $data_armors_xp[id].auto_state_id > 0
set_auto_state($data_armors_xp[id].auto_state_id, id)
set_slip_damage($data_armors_xp[id].auto_state_id, id)
end
if $data_armors_xp[id].icon_name != ""
$data_armors[id].note = get_icon_name($data_armors_xp[id])
end
case $data_armors_xp[id].kind
when Def_Num_XP::ARM_TYPE_SHIELD # 盾
$data_armors[id].atype_id = ARM_TYPE_SHIELD_L
when Def_Num_XP::ARM_TYPE_MET # 兜
$data_armors[id].atype_id = ARM_TYPE_MET_W
when Def_Num_XP::ARM_TYPE_ARMOR # 鎧
# インナーか外套かで分岐
if $data_armors_xp[id].guard_element_set.include?(Equip_Extend::INNER_ARM)
$data_armors[id].atype_id = ARM_TYPE_INNER_F
else
$data_armors[id].atype_id = ARM_TYPE_ARMOR_W
end
when Def_Num_XP::ARM_TYPE_ACCE # アクセ
# 純粋な装飾品か特殊装備か靴かで分岐
if $data_armors_xp[id].guard_element_set.include?(Equip_Extend::EXTRA_ACC)
$data_armors[id].atype_id = ARM_TYPE_EXT_W
elsif $data_armors_xp[id].guard_element_set.include?(Equip_Extend::BOOTS_ACC)
$data_armors[id].atype_id = ARM_TYPE_BOOTS
else
$data_armors[id].atype_id = ARM_TYPE_ACCE_W
end
end
end
save_data($data_armors, FIX_PATH::PATH_DATA_ARMR)
end
#--------------------------------------------------------------------------
# ● アイテムの引き継ぎ
#--------------------------------------------------------------------------
def set_xp_items
$data_items_xp = load_data(make_rxdata(FIX_PATH::PATH_DATA_ITEM))
for id in 1...$data_items_xp.size
$data_items[id].name = $data_items_xp[id].name
$data_items[id].price = $data_items_xp[id].price
$data_items[id].description = $data_items_xp[id].description.gsub(/\\n/, "\r\n")
$data_items[id].occasion = $data_items_xp[id].occasion
$data_items[id].consumable = $data_items_xp[id].consumable
$data_items[id].scope = get_scope_4_pxv($data_items_xp[id])
# 価格が0のものは『大切なもの』扱い
if $data_items_xp[id].price == 0
$data_items[id].itype_id = 2
end
# HP回復系処理
if $data_items_xp[id].recover_hp_rate > 0 ||
$data_items_xp[id].recover_hp > 0
make_effects(Def_Num::EFFECT_RECOVER_HP, id)
end
# SP回復系処理
if $data_items_xp[id].recover_sp_rate > 0 ||
$data_items_xp[id].recover_sp > 0
make_effects(Def_Num::EFFECT_RECOVER_MP, id)
end
# ステート追加処理
if $data_items_xp[id].plus_state_set != nil
make_effects(Def_Num::EFFECT_ADD_STATE, id)
end
# ステート解除処理
if $data_items_xp[id].minus_state_set != nil
make_effects(Def_Num::EFFECT_REMOVE_STATE, id)
end
# パラメータ増幅系処理
if $data_items_xp[id].parameter_type > 0
make_effects(Def_Num::EFFECT_GROW, id)
end
if $data_items_xp[id].icon_name != ""
$data_items[id].note = get_icon_name($data_items_xp[id])
end
end
save_data($data_items, FIX_PATH::PATH_DATA_ITEM)
end
#--------------------------------------------------------------------------
# ● オートステートの設定
#--------------------------------------------------------------------------
def set_auto_state(state_id, id)
if $data_states_xp == nil
$data_states_xp = load_data(make_rxdata(FIX_PATH::PATH_DATA_STTS))
end
t_state = $data_states_xp[state_id]
if t_state.hit_rate != 100
$data_armors[id].features.push(RPG::BaseItem::Feature.new(
Def_Num::FEATURE_XPARAM, 0,
(t_state.hit_rate - 100) / 100.0))
end
if t_state.maxhp_rate != 100
$data_armors[id].features.push(RPG::BaseItem::Feature.new(
Def_Num::FEATURE_PARAM, 0,
t_state.maxhp_rate / 100.0))
end
if t_state.maxsp_rate != 100
$data_armors[id].features.push(RPG::BaseItem::Feature.new(
Def_Num::FEATURE_PARAM, 1,
t_state.maxsp_rate / 100.0))
end
if t_state.agi_rate != 100
$data_armors[id].features.push(RPG::BaseItem::Feature.new(
Def_Num::FEATURE_PARAM, 6,
t_state.agi_rate / 100.0))
end
if t_state.int_rate != 100
$data_armors[id].features.push(RPG::BaseItem::Feature.new(
Def_Num::FEATURE_PARAM, 4,
t_state.int_rate / 100.0))
end
if t_state.atk_rate != 100
$data_armors[id].features.push(RPG::BaseItem::Feature.new(
Def_Num::FEATURE_PARAM, 2,
t_state.atk_rate / 100.0))
end
if t_state.pdef_rate != 100
$data_armors[id].features.push(RPG::BaseItem::Feature.new(
Def_Num::FEATURE_PARAM, 3,
t_state.pdef_rate / 100.0))
end
if t_state.mdef_rate != 100
$data_armors[id].features.push(RPG::BaseItem::Feature.new(
Def_Num::FEATURE_PARAM, 5,
t_state.mdef_rate / 100.0))
end
if t_state.eva != 0
$data_armors[id].features.push(RPG::BaseItem::Feature.new(
Def_Num::FEATURE_XPARAM, 1,
t_state.eva / 100.0))
end
# 器用さを運に反映してみる
if t_state.dex_rate != 100
$data_armors[id].features.push(RPG::BaseItem::Feature.new(
Def_Num::FEATURE_PARAM, 7,
t_state.dex_rate / 100.0))
end
end
#--------------------------------------------------------------------------
# ● スリップダメージの設定
#--------------------------------------------------------------------------
def set_slip_damage(state_id, id)
if $data_states_xp == nil
$data_states_xp = load_data(make_rxdata(FIX_PATH::PATH_DATA_STTS))
end
slip_damage_HP = 0
slip_damage_SP = 0
slip_damage_H_Val = 0
slip_damage_S_Val = 0
if $data_states_xp[state_id].slip_damage
# そのステートが持っているスリップダメージの
# LvプラスステートまたはLvマイナスステートを判定。
for j in $data_states_xp[state_id].plus_state_set
# プラスステートの取得
plus_state = $data_states_xp[j]
if plus_state != nil
if plus_state.name =~ /^#{HP_SLIP_WD}([0-9]+)(%|%)/
slip_damage_HP -= $1.to_i
end
if plus_state.name =~ /^#{SP_SLIP_WD}([0-9]+)(%|%)/
slip_damage_SP -= $1.to_i
end
if plus_state.name =~ /^#{HP_SLIP_WD}([0-9]+)$/
slip_damage_H_Val -= $1.to_i
end
if plus_state.name =~ /^#{SP_SLIP_WD}([0-9]+)$/
slip_damage_S_Val -= $1.to_i
end
end
end
for j in $data_states_xp[state_id].minus_state_set
# マイナスステートの取得
minus_state = $data_states_xp[j]
if minus_state != nil
if minus_state.name =~ /^#{HP_SLIP_WD}([0-9]+)(%|%)/
slip_damage_HP += $1.to_i
end
if minus_state.name =~ /^#{SP_SLIP_WD}([0-9]+)(%|%)/
slip_damage_SP += $1.to_i
end
if minus_state.name =~ /^#{HP_SLIP_WD}([0-9]+)$/
slip_damage_H_Val += $1.to_i
end
if minus_state.name =~ /^#{SP_SLIP_WD}([0-9]+)$/
slip_damage_S_Val += $1.to_i
end
end
end
if slip_damage_HP != 0
$data_armors[id].features.push(RPG::BaseItem::Feature.new(
Def_Num::FEATURE_XPARAM, 7,
slip_damage_HP / 100.0))
end
if slip_damage_SP != 0
$data_armors[id].features.push(RPG::BaseItem::Feature.new(
Def_Num::FEATURE_XPARAM, 8,
slip_damage_SP / 100.0))
end
end
end
#--------------------------------------------------------------------------
# ● 属性補正値の取得
# element_id : 属性 ID
#--------------------------------------------------------------------------
def element_rate(element_id, id)
if $data_states_xp == nil
$data_states_xp = load_data(make_rxdata(FIX_PATH::PATH_DATA_STTS))
end
if $data_system_xp == nil
$data_system_xp = load_data(make_rxdata(FIX_PATH::PATH_DATA_SYSM))
end
element_name = $data_system_xp.elements[element_id]
rate = 0
r_flg = ELE_MM::GRD_ELE_NONE
# 防具でこの属性が防御されている場合の計算
armor = $data_armors_xp[id]
if armor != nil and armor.guard_element_set.include?(element_id)
# 属性ダメージ増(減)n%が設定されている場合
for j in armor.guard_state_set
if $data_states_xp[j].name =~ /^#{element_name}([0-9]+)(%|%)/
rate += $1.to_i
r_flg = ELE_MM::GRD_ELE_PLUS
end
end
# 属性ダメージ反転が設定されている場合
for j in armor.guard_state_set
if $data_states_xp[j].name =~ /^#{element_name}マイナス/
# 属性ダメージ反転のみが設定されている場合
if r_flg == ELE_MM::GRD_ELE_NONE
rate += ELE_MM::DEFAULT_GUARD
# 属性ダメージ増加で反転の場合(属性ダメージ軽減)
elsif r_flg == ELE_MM::GRD_ELE_PLUS
rate *= -1
end
r_flg = ELE_MM::GRD_ELE_MINUS
end
end
# 属性ダメージ軽減用ステートが何も設定されていない場合
if r_flg == ELE_MM::GRD_ELE_NONE
rate -= ELE_MM::DEFAULT_GUARD
end
end
# メソッド終了
rate = [[rate, ELE_MM::ELE_MM_MIN].max, ELE_MM::ELE_MM_MAX].min
return rate / 100.0
end
#--------------------------------------------------------------------------
# ● 武器用効果作成、追加
#--------------------------------------------------------------------------
def make_features(code, id, value=nil)
case code
when Def_Num::FEATURE_ATK_ELEMENT # 攻撃時属性
for index in $data_weapons_xp[id].element_set
$data_weapons[id].features.push(RPG::BaseItem::Feature.new(
Def_Num::FEATURE_ATK_ELEMENT, index + 2, 1))
end
when Def_Num::FEATURE_ATK_STATE # 攻撃時ステート
for index in $data_weapons_xp[id].plus_state_set
if index < 19
$data_weapons[id].features.push(RPG::BaseItem::Feature.new(
Def_Num::FEATURE_ATK_STATE, index, 0.8))
end
end
when Def_Num::FEATURE_ATK_SPEED # 攻撃速度補正
$data_weapons[id].features.push(RPG::BaseItem::Feature.new(
Def_Num::FEATURE_ATK_SPEED, 0, value))
when Def_Num::FEATURE_ATK_TIMES # 攻撃追加回数
$data_weapons[id].features.push(RPG::BaseItem::Feature.new(
Def_Num::FEATURE_ATK_TIMES, 0, 1))
when Def_Num::FEATURE_EQUIP_SEAL # 装備封印
$data_weapons[id].features.push(RPG::BaseItem::Feature.new(
Def_Num::FEATURE_EQUIP_SEAL, 1, 0))
else
msgbox "不明なcode"
exit
end
end
#--------------------------------------------------------------------------
# ● アイテム用途エフェクト追加
#--------------------------------------------------------------------------
def make_effects(code, id)
case code
when Def_Num::EFFECT_RECOVER_HP # HP回復
tmp_effects = RPG::UsableItem::Effect.new
tmp_effects.code = Def_Num::EFFECT_RECOVER_HP
tmp_effects.data_id = 0
tmp_effects.value1 = $data_items_xp[id].recover_hp_rate / 100.0
tmp_effects.value2 = $data_items_xp[id].recover_hp
$data_items[id].effects.push(tmp_effects)
when Def_Num::EFFECT_RECOVER_MP # MP回復
tmp_effects = RPG::UsableItem::Effect.new
tmp_effects.code = Def_Num::EFFECT_RECOVER_MP
tmp_effects.data_id = 0
tmp_effects.value1 = $data_items_xp[id].recover_sp_rate / 100.0
tmp_effects.value2 = $data_items_xp[id].recover_sp
$data_items[id].effects.push(tmp_effects)
when Def_Num::EFFECT_ADD_STATE # ステート付加
for index in $data_items_xp[id].plus_state_set
tmp_effects = RPG::UsableItem::Effect.new
tmp_effects.code = Def_Num::EFFECT_ADD_STATE
tmp_effects.data_id = index
tmp_effects.value1 = 1
tmp_effects.value2 = 0
$data_items[id].effects.push(tmp_effects)
end
when Def_Num::EFFECT_REMOVE_STATE # ステート解除
for index in $data_items_xp[id].minus_state_set
tmp_effects = RPG::UsableItem::Effect.new
tmp_effects.code = Def_Num::EFFECT_REMOVE_STATE
tmp_effects.data_id = index
tmp_effects.value1 = 1
tmp_effects.value2 = 0
$data_items[id].effects.push(tmp_effects)
end
when Def_Num::EFFECT_GROW # パラメータ増幅
tmp_effects = RPG::UsableItem::Effect.new
tmp_effects.code = Def_Num::EFFECT_GROW
case $data_items_xp[id].parameter_type
when Def_Num_XP::PRM_UP_TYPE_MAXHP,
Def_Num_XP::PRM_UP_TYPE_MAXSP,
Def_Num_XP::PRM_UP_TYPE_STR
# XPの腕力をVXAの攻撃へ変換
tmp_effects.data_id = $data_items_xp[id].parameter_type - 1
when Def_Num_XP::PRM_UP_TYPE_DEX
# XPの器用さをVXAの運へ変換
tmp_effects.data_id = Def_Num::PRM_UP_TYPE_LUK
when Def_Num_XP::PRM_UP_TYPE_AGI
tmp_effects.data_id = Def_Num::PRM_UP_TYPE_AGI
when Def_Num_XP::PRM_UP_TYPE_INT
tmp_effects.data_id = Def_Num::PRM_UP_TYPE_MAT
end
tmp_effects.value1 = $data_items_xp[id].parameter_points
tmp_effects.value2 = 0
$data_items[id].effects.push(tmp_effects)
else
msgbox "不明なcode"
exit
end
end
end
|