#==============================================================================
# ■ 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 DHR
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 FIX_PATH
# RPGツクールXPデータ拡張子
EX_CHILD_RXDATA = ".rxdata"
end
class Game_System
include VX_TO_XP
include KGC
include ChangeSC
include DHR
include ELE_MM
#--------------------------------------------------------------------------
# ● 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 0,1,2 ; return datas.scope
when 3,4,5,6,7 ; return datas.scope+4
else ; p "ありえないエラー" ; 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スリップ"
#--------------------------------------------------------------------------
# ● 武器の引き継ぎ
#--------------------------------------------------------------------------
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(Game_BattlerBase::FEATURE_ATK_ELEMENT, id)
end
# ステート付加処理
if $data_weapons_xp[id].plus_state_set != nil
make_features(Game_BattlerBase::FEATURE_ATK_STATE, id)
end
# 武器タイプとか分かっている場合の処理
if id >= 2 && id <= 93 # 剣
$data_weapons[id].wtype_id = 1
$data_weapons[id].animation_id = 7
end
if id >= 102 && id <= 245 # 刀
$data_weapons[id].wtype_id = 2
$data_weapons[id].animation_id = 112
end
if id >= 247 && id <= 263 # 斧
$data_weapons[id].wtype_id = 4
end
if id >= 277 && id <= 303 # 槍
$data_weapons[id].wtype_id = 5
$data_weapons[id].animation_id = 13
end
if id >= 312 && id <= 328 # 鎌
$data_weapons[id].wtype_id = 6
end
if id >= 337 && id <= 368 # 拳
$data_weapons[id].wtype_id = 7
$data_weapons[id].animation_id = 115
end
if id >= 377 && id <= 413 # 棍
$data_weapons[id].wtype_id = 8
$data_weapons[id].animation_id = 19
end
if id >= 422 && id <= 462 # 自動拳銃
$data_weapons[id].wtype_id = 13
$data_weapons[id].animation_id = 91
end
if id >= 472 && id <= 507 # 回転式拳銃
$data_weapons[id].wtype_id = 12
$data_weapons[id].animation_id = 91
end
if id >= 517 && id <= 569 # 狙撃銃
$data_weapons[id].wtype_id = 14
$data_weapons[id].animation_id = 92
end
if id >= 577 && id <= 587 # 散弾銃
$data_weapons[id].wtype_id = 15
$data_weapons[id].animation_id = 92
end
if id >= 597 && id <= 610 # その他
$data_weapons[id].wtype_id = 16
end
# なんらかのスクリプトで 先制攻撃属性 をつけている場合
if $data_weapons_xp[id].element_set.include?(先制攻撃属性)
$data_weapons[id].fast_attack = true
end
# なんらかのスクリプトで 二回攻撃属性 をつけている場合
if $data_weapons_xp[id].element_set.include?(二回攻撃属性)
$data_weapons[id].dual_attack = true
end
# なんらかのスクリプトで 両手持ち属性 をつけている場合
if $data_weapons_xp[id].element_set.include?(両手持ち属性)
$data_weapons[id].two_handed = true
end
# XP : 命中精度 を使用している場合
if $data_weapons_xp[id].element_set.include?(HIT_RATES[0][0])
$data_weapons[id].hit = 100
end
if $data_weapons_xp[id].element_set.include?(HIT_RATES[1][0])
$data_weapons[id].hit = 90
end
if $data_weapons_xp[id].element_set.include?(HIT_RATES[2][0])
$data_weapons[id].hit = 80
end
if $data_weapons_xp[id].element_set.include?(HIT_RATES[3][0])
$data_weapons[id].hit = 60
end
if $data_weapons_xp[id].element_set.include?(HIT_RATES[4][0])
$data_weapons[id].hit = 50
end
if $data_weapons_xp[id].icon_name != ""
$data_weapons[id].note = get_icon_name($data_weapons_xp[id])
end
# なんらかのスクリプトで 全体攻撃属性 をつけている場合
if $data_weapons_xp[id].element_set.include?(全体攻撃属性)
if $data_weapons[id].note != ""
$data_weapons[id].note += "\r\n" + "<全体攻撃>"
else
$data_weapons[id].note = "<全体攻撃>"
end
end
# なんらかのスクリプトで 回避無視属性 をつけている場合
if $data_weapons_xp[id].element_set.include?(回避無視属性)
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].kind = $data_armors_xp[id].kind
$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
# なんらかのスクリプトで 必殺防止属性 をつけている場合
if $data_armors_xp[id].guard_element_set.include?(必殺防止属性)
$data_armors[id].prevent_critical = true
end
# XP : 特殊消費スキル を使用している場合
if $data_armors_xp[id].guard_element_set.include?(EX_RED)
$data_armors[id].half_mp_cost = true
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(11,
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(13,
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 0 ; $data_armors[id].atype_id = 1 # 盾
when 1 ; $data_armors[id].atype_id = 4 # 兜
when 2 # 鎧
if $data_armors_xp[id].guard_element_set.include?(61)
$data_armors[id].atype_id = 8
else
$data_armors[id].atype_id = 12
end
when 3 # アクセ
if $data_armors_xp[id].guard_element_set.include?(62)
$data_armors[id].atype_id = 19
else
$data_armors[id].atype_id = 16
end
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(Game_Battler::EFFECT_RECOVER_HP, id)
end
# SP回復系処理
if $data_items_xp[id].recover_sp_rate > 0 ||
$data_items_xp[id].recover_sp > 0
make_effects(Game_Battler::EFFECT_RECOVER_MP, id)
end
# ステート追加処理
if $data_items_xp[id].plus_state_set != nil
make_effects(Game_Battler::EFFECT_ADD_STATE, id)
end
# ステート解除処理
if $data_items_xp[id].minus_state_set != nil
make_effects(Game_Battler::EFFECT_REMOVE_STATE, id)
end
# パラメータ増幅系処理
if $data_items_xp[id].parameter_type > 0
make_effects(Game_Battler::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(22, 0,
(t_state.hit_rate - 100) / 100.0))
end
if t_state.maxhp_rate != 100
$data_armors[id].features.push(RPG::BaseItem::Feature.new(21, 0,
t_state.maxhp_rate / 100.0))
end
if t_state.maxsp_rate != 100
$data_armors[id].features.push(RPG::BaseItem::Feature.new(21, 1,
t_state.maxsp_rate / 100.0))
end
if t_state.agi_rate != 100
$data_armors[id].features.push(RPG::BaseItem::Feature.new(21, 6,
t_state.agi_rate / 100.0))
end
if t_state.int_rate != 100
$data_armors[id].features.push(RPG::BaseItem::Feature.new(21, 4,
t_state.int_rate / 100.0))
end
if t_state.atk_rate != 100
$data_armors[id].features.push(RPG::BaseItem::Feature.new(21, 2,
t_state.atk_rate / 100.0))
end
if t_state.pdef_rate != 100
$data_armors[id].features.push(RPG::BaseItem::Feature.new(21, 3,
t_state.pdef_rate / 100.0))
end
if t_state.mdef_rate != 100
$data_armors[id].features.push(RPG::BaseItem::Feature.new(21, 5,
t_state.mdef_rate / 100.0))
end
if t_state.eva != 0
$data_armors[id].features.push(RPG::BaseItem::Feature.new(22, 1,
t_state.eva / 100.0))
end
# 器用さを運に反映してみる
if t_state.dex_rate != 100
$data_armors[id].features.push(RPG::BaseItem::Feature.new(21, 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(22, 7,
slip_damage_HP / 100.0))
#elsif slip_damage_H_Val != 0
#$data_armors[id].features.push(RPG::BaseItem::Feature.new(23, 4, 0.9))
end
if slip_damage_SP != 0
$data_armors[id].features.push(RPG::BaseItem::Feature.new(22, 8,
slip_damage_SP / 100.0))
#elsif slip_damage_S_Val != 0
#$data_armors[id].features.push(RPG::BaseItem::Feature.new(23, 4, 0.9))
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 = 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 = GRD_ELE_PLUS
end
end
# 属性ダメージ反転が設定されている場合
for j in armor.guard_state_set
if $data_states_xp[j].name =~ /^#{element_name}マイナス/
# 属性ダメージ反転のみが設定されている場合
if r_flg == GRD_ELE_NONE
rate += DEFAULT_GUARD
# 属性ダメージ増加で反転の場合(属性ダメージ軽減)
elsif r_flg == GRD_ELE_PLUS
rate *= -1
end
r_flg = GRD_ELE_MINUS
end
end
# 属性ダメージ軽減用ステートが何も設定されていない場合
if r_flg == GRD_ELE_NONE
rate -= DEFAULT_GUARD
end
end
# メソッド終了
rate = [[rate, ELE_MM_MIN].max, ELE_MM_MAX].min
return rate / 100.0
end
#--------------------------------------------------------------------------
# ● 武器用効果作成、追加
#--------------------------------------------------------------------------
def make_features(code, id)
case code
when Game_BattlerBase::FEATURE_ATK_ELEMENT # 攻撃時属性
for index in $data_weapons_xp[id].element_set
$data_weapons[id].features.push(RPG::BaseItem::Feature.new(
Game_BattlerBase::FEATURE_ATK_ELEMENT, index + 2, 1))
end
when Game_BattlerBase::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(
Game_BattlerBase::FEATURE_ATK_STATE, index, 0.8))
end
end
when Game_BattlerBase::FEATURE_ATK_SPEED # 攻撃速度補正
$data_weapons[id].features.push(RPG::BaseItem::Feature.new(33, 0, 999))
when Game_BattlerBase::FEATURE_ATK_TIMES # 攻撃追加回数
$data_weapons[id].features.push(RPG::BaseItem::Feature.new(34, 0, 1))
when Game_BattlerBase::FEATURE_EQUIP_SEAL # 装備封印
$data_weapons[id].features.push(RPG::BaseItem::Feature.new(54, 1, 0))
else
msgbox "不明なcode"
exit
end
end
#--------------------------------------------------------------------------
# ● アイテム用途エフェクト追加
#--------------------------------------------------------------------------
def make_effects(code, id)
case code
when Game_Battler::EFFECT_RECOVER_HP # HP回復
tmp_effects = RPG::UsableItem::Effect.new
tmp_effects.code = Game_Battler::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 Game_Battler::EFFECT_RECOVER_MP # MP回復
tmp_effects = RPG::UsableItem::Effect.new
tmp_effects.code = Game_Battler::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 Game_Battler::EFFECT_ADD_STATE # ステート付加
for index in $data_items_xp[id].plus_state_set
tmp_effects = RPG::UsableItem::Effect.new
tmp_effects.code = Game_Battler::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 Game_Battler::EFFECT_REMOVE_STATE # ステート解除
for index in $data_items_xp[id].minus_state_set
tmp_effects = RPG::UsableItem::Effect.new
tmp_effects.code = Game_Battler::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 Game_Battler::EFFECT_GROW # パラメータ増幅
tmp_effects = RPG::UsableItem::Effect.new
tmp_effects.code = Game_Battler::EFFECT_GROW
case $data_items_xp[id].parameter_type
when 1,2,3 ; tmp_effects.data_id = $data_items_xp[id].parameter_type - 1 # 0:HP 1:SP 2:腕力
when 4 ; tmp_effects.data_id = 7 # 器用さ => 運へ変換
when 5 ; tmp_effects.data_id = 6 # 敏捷性
when 6 ; tmp_effects.data_id = 4 # 魔力
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
|