#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
#_/ ◆ 装備品改造 - KGC_AlterEquipment ◆
#_/ ◇ Last update : 2008/01/12 ◇
#_/----------------------------------------------------------------------------
#_/ 装備品を改造し、特殊効果を付加する機能を追加します。
#_/============================================================================
#_/ ≪戦闘難易度[BattleDifficulty]≫より上
#_/ ≪装備拡張[EquipExtension]≫より下
#_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
$data_states = load_data("Data/States.rxdata") if $data_states == nil
#==============================================================================
# ★ カスタマイズ項目 ★
#==============================================================================
module KGC
# ◆改造武器最大数
# 多すぎると動作やセーブファイルが重くなります。(300 以下を推奨)
AEQ_WEAPON_MAX = 100
# ◆改造防具最大数
AEQ_ARMOR_MAX = 100
# ◆改造回数を付加
# true を指定すると、名称の末尾に +1 等が付く。
AEQ_SHOW_ALTER_COUNT = true
# ◆改造回数の書式
# 【{n}…改造回数】
AEQ_ALTER_COUNT_FORMAT = "+{n}"
# ◆装備名変更に使用するアクターのID(名前入力バッファ)
AEQ_RENAME_ACTOR_ID = 13
# ◆装備名の最大文字数(MAX:16)
AEQ_RENAME_MAX_LENGTH = 16
# ◆装備名変更画面に移行するボタン
# (A,X,Y,Z を推奨。nil にすると装備名変更機能無し)
AEQ_RENAME_BUTTON = Input::A
# ◆改造可能回数
# 武器名の [ALT{n}] を省略した場合に使用。
# 負数を指定すると何度でも改造可能。
AEQ_ALTERABLE_COUNT = -1
# ◆除外装備タイプ
# 改造不可能にする装備タイプ配列(≪装備拡張≫に対応)
AEQ_EXCLUDE_EQUIP_TYPE = [4]
# ◆除外武器
# 改造不可能にする武器ID配列
AEQ_EXCLUDE_WEAPONS = []
# ◆除外防具
# 改造不可能にする防具ID配列
AEQ_EXCLUDE_ARMORS = []
# ◆武器ファクター一覧
# ≪"名称", "ヘルプ", [[タイプ, ID], ...], 費用, [使用アイテムID, 個数], ...≫
# 【タイプ】0..攻撃属性 1..ステート[+] 2..ステート[-] 3..能力値強化
# 【 ID 】改造時に使用する属性/ステートのID
# 【 費用 】改造費用。武器の価格に対する割合(%)
# 配列なので、忘れずに末尾に , を付けてください。
# (最後の項目だけは付けても付けなくても良い)
AEQ_WEAPON_FACTORS = [
# 属性
["[炎]攻撃", "武器に炎属性を付加します。", [[0, 1]], 10, [13, 1]],
["[氷]攻撃", "武器に氷属性を付加します。", [[0, 2]], 10, [14, 1]],
["[雷]攻撃", "武器に雷属性を付加します。", [[0, 3]], 10, [15, 1]],
["[水]攻撃", "武器に水属性を付加します。", [[0, 4]], 10, [15, 1]],
["[土]攻撃", "武器に土属性を付加します。", [[0, 5]], 10, [13, 1]],
["[風]攻撃", "武器に風属性を付加します。", [[0, 6]], 10, [16, 1]],
["[光]攻撃", "武器に光属性を付加します。", [[0, 7]], 10, [14, 1]],
["[闇]攻撃", "武器に闇属性を付加します。", [[0, 8]], 10, [16, 1]],
# ステート
["[即死]攻撃", "武器に即死効果を付加します。", [[1, 1]], 20, [10, 1], [13, 1]],
# 能力値強化
["[攻撃力]上昇", "武器の攻撃力を5%上げます。", [[3, 27]], 10, [13, 1]],
] # ←この ] は消さないこと
# ◆防具ファクター一覧
# ≪"名称", "ヘルプ", [[タイプ, ID], ...], 費用, [使用アイテムID, 個数], ...≫
# 【タイプ】0..防御属性 1..防御ステート 2..能力値強化
# 【 ID 】改造時に使用する属性/ステートのID
# 【 費用 】改造費用。防具の価格に対する割合(%)
AEQ_ARMOR_FACTORS = [
# 属性
["[炎]防御", "防具に炎耐性を付加します。", [[0, 1]], 10, [13, 1]],
["[氷]防御", "防具に氷耐性を付加します。", [[0, 2]], 10, [14, 1]],
["[雷]防御", "防具に雷耐性を付加します。", [[0, 3]], 10, [15, 1]],
["[水]防御", "防具に水耐性を付加します。", [[0, 4]], 10, [15, 1]],
["[土]防御", "防具に土耐性を付加します。", [[0, 5]], 10, [13, 1]],
["[風]防御", "防具に風耐性を付加します。", [[0, 6]], 10, [16, 1]],
["[光]防御", "防具に光耐性を付加します。", [[0, 7]], 10, [14, 1]],
["[闇]防御", "防具に闇耐性を付加します。", [[0, 8]], 10, [16, 1]],
# ステート
["[即死]防御", "防具に即死耐性を付加します。", [[1, 1]], 20, [10, 1], [13, 1]],
# 能力値強化
["[物理攻撃力]+20", "防具の物理攻撃力を 20 上げます。", [[2, 30]], 10, [13, 1]],
["[物理防御力]上昇", "防具の物理防御力を5%上げます。", [[2, 28]], 10, [14, 1]],
] # ←この ] は消さないこと
# ◆価格 0 の武器価格計算式
# 【 atk…攻撃力 pdef…物理防御 mdef…魔法防御 str_p…腕力+
# dex_p…器用さ+ agi_p…素早さ+ int_p…魔力+ 】
# 改造費用算出に使用。(売却することはできない)
AEQ_WEAPON_PRICE_FORMULA =
"(atk + pdef + mdef + (str_p + dex_p + agi_p + int_p).abs) * 30"
# ◆価格 0 の防具価格計算式
# 【 pdef…物理防御 mdef…魔法防御 eva…回避修正 str_p…腕力+
# dex_p…器用さ+ agi_p…素早さ+ int_p…魔力+ 】
AEQ_ARMOR_PRICE_FORMULA =
"(pdef + mdef + (eva + str_p + dex_p + agi_p + int_p).abs) * 30"
# ◆改造画面背景透過
AEQ_BACK_TRANSPARENT = true
# ◆「武器改造」名称
AEQ_COMMAND_WEAPON_ALTER = "武器改造"
# ◆「改造装備破棄」名称
AEQ_COMMAND_WEAPON_DISPOSE = "改造装備破棄"
# ◆「防具改造」名称
AEQ_COMMAND_ARMOR_ALTER = "防具改造"
# ◆「改造防具破棄」名称
AEQ_COMMAND_ARMOR_DISPOSE = "改造防具破棄"
# ◆「武器改造」ヘルプ
AEQ_HELP_WEAPON_ALTER = "所持している武器を改造します。"
# ◆「改造装備破棄」ヘルプ
AEQ_HELP_WEAPON_DISPOSE = "改造した武器を破棄します。"
# ◆「防具改造」ヘルプ
AEQ_HELP_ARMOR_ALTER = "所持している防具を改造します。"
# ◆「改造防具破棄」ヘルプ
AEQ_HELP_ARMOR_DISPOSE = "改造した防具を破棄します。"
# ◆改造武器リスト空欄の表示文字列
AEQ_TEXT_NO_WEAPON = "- No weapon -"
# ◆改造防具リスト空欄の表示文字列
AEQ_TEXT_NO_ARMOR = "- No armor -"
# ◆付加属性を表示する範囲
# ([Integer][Range]クラスの配列)
AEQ_ELEMENT_RANGE = [1..8]
# ◆付加/解除ステートを表示する範囲
# (指定方法は AEQ_ELEMENT_RANGE と同様)
AEQ_STATE_RANGE = [1...$data_states.size]
# ◆武器改造確認コマンド
AEQ_ALTER_COMMAND = ["改造する", "やめる"]
# ◆武器破棄確認コマンド
AEQ_DISPOSE_COMMAND = ["破棄する", "やめる"]
# ◆ファクター付加確認コマンド
AEQ_FACTOR_COMMAND = ["付加する", "やめる"]
# ※↑3項目は、コマンド数を変更するとバグります。
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
$imported = {} if $imported == nil
$imported["AlterEquipment"] = true
#--------------------------------------------------------------------------
# ○ 装備品改造画面呼び出し
#--------------------------------------------------------------------------
def call_equip_alter
# プレイヤーの姿勢を矯正
$game_player.straighten
# 装備品改造画面に切り替え
$scene = Scene_AlterEquipment.new
end
module AlteredEquipment
#--------------------------------------------------------------------------
# ○ 改造武器破棄
# index : 改造武器番号 (1~AEQ_WEAPON_MAX)
#--------------------------------------------------------------------------
def self.dispose_weapon(index)
# 破棄できない場合は戻る
if index < 1 || index > KGC::AEQ_WEAPON_MAX ||
$game_party.alter_weapons[index - 1] == nil
return
end
# 指定武器を破棄
id = $game_party.alter_weapons[index - 1].id
$game_party.alter_weapons[index - 1] = nil
$data_weapons[id] = RPG::Weapon2.new
$game_party.lose_weapon(id, 99)
end
#--------------------------------------------------------------------------
# ○ 改造防具破棄
# index : 改造防具番号 (1~AEQ_ARMOR_MAX)
#--------------------------------------------------------------------------
def self.dispose_armor(index)
# 破棄できない場合は戻る
if index < 1 || index > KGC::AEQ_ARMOR_MAX ||
$game_party.alter_armors[index - 1] == nil
return
end
# 指定防具を破棄
id = $game_party.alter_armors[index - 1].id
$game_party.alter_armors[index - 1] = nil
$data_armors[id] = RPG::Armor2.new
$game_party.lose_armor(id, 99)
end
#--------------------------------------------------------------------------
# ○ 指定IDの武器と、それを改造した武器をすべて破棄
# id : 武器ID
#--------------------------------------------------------------------------
def self.dispose_all_weapon(id)
weapons = $game_party.alter_weapons.find_all { |w|
w != nil && w.original_id == id
}
weapons.each { |w|
index = $game_party.alter_weapons.index(w) + 1
dispose_weapon(index)
}
$game_party.lose_weapon(id, 99)
end
#--------------------------------------------------------------------------
# ○ 指定IDの防具と、それを改造した防具をすべて破棄
# id : 防具ID
#--------------------------------------------------------------------------
def self.dispose_all_armor(id)
armors = $game_party.alter_armors.find_all { |a|
a != nil && a.original_id == id
}
armors.each { |a|
index = $game_party.alter_armors.index(a) + 1
dispose_armor(index)
}
$game_party.lose_armor(id, 99)
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ 武器・防具 共用モジュール
#==============================================================================
module KGC_AlterEquipment_WA
#--------------------------------------------------------------------------
# ○ オリジナル名取得
#--------------------------------------------------------------------------
def original_name
return @name
end
#--------------------------------------------------------------------------
# ○ 改造可能回数取得
#--------------------------------------------------------------------------
def alterable_count
return original_name =~ /\[ALT[ ]*(\d+)\]/i ? $1.to_i : KGC::AEQ_ALTERABLE_COUNT
end
end
module KGC_AlterEquipment_WA2
attr_writer :change_name
#--------------------------------------------------------------------------
# ○ 改造回数を除去した名称取得
#--------------------------------------------------------------------------
def plain_name
if KGC::AEQ_SHOW_ALTER_COUNT
rg = (KGC::AEQ_ALTER_COUNT_FORMAT.gsub(/(.*){n}/i) {
"[#{$1}]{#{$1.scan(/./).size}}\\d+"
}).gsub(/\-/) {"\-"}
return name.gsub(%r(#{rg}$)i) {""}
else
return name
end
end
#--------------------------------------------------------------------------
# ○ 残り改造可能回数取得
#--------------------------------------------------------------------------
def alterable_count
return (@name =~ /\[ALT[ ]*(\d+)\]/i ? $1.to_i : KGC::AEQ_ALTERABLE_COUNT) - @alter_count
end
#--------------------------------------------------------------------------
# ○ オリジナルID取得
#--------------------------------------------------------------------------
def original_id
return @original_id
end
#--------------------------------------------------------------------------
# ○ 改造回数取得
#--------------------------------------------------------------------------
def alter_count
@alter_count = 0 if @alter_count == nil
return @alter_count
end
#--------------------------------------------------------------------------
# ○ 改造回数加算
#--------------------------------------------------------------------------
def add_alter_count
@alter_count = 0 if @alter_count == nil
@alter_count += 1
self.show_alter_count
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::Weapon
#==============================================================================
class RPG::Weapon
include KGC_AlterEquipment_WA
#--------------------------------------------------------------------------
# ● 名称取得
#--------------------------------------------------------------------------
def name
return @name.gsub(/\[.*\]/) {""}
end
#--------------------------------------------------------------------------
# ○ 回避修正
#--------------------------------------------------------------------------
def eva
return 0
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::Armor
#==============================================================================
class RPG::Armor
include KGC_AlterEquipment_WA
#--------------------------------------------------------------------------
# ● 名称取得
#--------------------------------------------------------------------------
def name
return @name.gsub(/\[.*\]/) {""}
end
#--------------------------------------------------------------------------
# ○ 攻撃力
#--------------------------------------------------------------------------
def atk
return 0
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ RPG::Weapon2
#==============================================================================
class RPG::Weapon2 < RPG::Weapon
include KGC_AlterEquipment_WA2
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super
[url=home.php?mod=space&uid=284635]@eva[/url] = 0
@original_id = 0
@original_price = 0
@alter_count = 0
end
#--------------------------------------------------------------------------
# ● 名称取得
#--------------------------------------------------------------------------
def name
return @name.gsub(/\[.*\]/) {""}
end
#--------------------------------------------------------------------------
# ○ 回避修正
#--------------------------------------------------------------------------
def eva
[url=home.php?mod=space&uid=284635]@eva[/url] = 0 if @eva == nil
return @eva
end
#--------------------------------------------------------------------------
# ○ 改造費用算出
#--------------------------------------------------------------------------
def alter_cost(factor)
if @original_price == 0
formula = KGC::AEQ_WEAPON_PRICE_FORMULA.dup
formula.gsub!(/atk/i) {"@atk"}
formula.gsub!(/pdef/i) {"@pdef"}
formula.gsub!(/mdef/i) {"@mdef"}
formula.gsub!(/eva/i) {""}
formula.gsub!(/str_p/i) {"@str_plus"}
formula.gsub!(/dex_p/i) {"@dex_plus"}
formula.gsub!(/agi_p/i) {"@agi_plus"}
formula.gsub!(/int_p/i) {"@int_plus"}
cost = eval(formula)
else
cost = @original_price
end
cost = cost * factor[3] / 100
return Integer(cost)
end
#--------------------------------------------------------------------------
# ○ ファクター付加可否
#--------------------------------------------------------------------------
def can_add_factor?(factor)
# 価格判定
if $game_party.gold < self.alter_cost(factor)
return false
end
# アイテム所持判定
(4...factor.size).each { |i|
if $game_party.item_number(factor[i][0]) < factor[i][1]
return false
end
}
(0...factor[2].size).each { |i|
# 付加済み判定
case factor[2][i][0]
when 0 # 属性
if @element_set.include?(factor[2][i][1])
return false
end
when 1 # ステート付加
if @plus_state_set.include?(factor[2][i][1])
return false
end
when 2 # ステート解除
if @minus_state_set.include?(factor[2][i][1])
return false
end
end
}
return true
end
#--------------------------------------------------------------------------
# ○ ファクター付加
#--------------------------------------------------------------------------
def add_factor(factor)
(0...factor[2].size).each { |i|
# ファクターを付加
case factor[2][i][0]
when 0 # 属性
@element_set.push(factor[2][i][1])
@element_set.sort!
when 1 # ステート付加
@plus_state_set.push(factor[2][i][1])
@plus_state_set.sort!
when 2 # ステート解除
@minus_state_set.push(factor[2][i][1])
@minus_state_set.sort!
when 3 # 能力値
return if (state = $data_states[factor[2][i][1]]) == nil
if state.original_name =~ /\[EQAL[ ]*(?:%|%)\]/i
[url=home.php?mod=space&uid=101599]@atk[/url] += [url=home.php?mod=space&uid=101599]@atk[/url] * state.atk_rate / 100
@pdef += @pdef * state.pdef_rate / 100
@mdef += @mdef * state.mdef_rate / 100
@eva += @eva * state.eva / 100
@str_plus += @str_plus * state.str_rate / 100
@dex_plus += @dex_plus * state.dex_rate / 100
@agi_plus += @agi_plus * state.agi_rate / 100
@int_plus += @int_plus * state.int_rate / 100
else
@atk += state.atk_rate
@pdef += state.pdef_rate
@mdef += state.mdef_rate
@eva += state.eva
@str_plus += state.str_rate
@dex_plus += state.dex_rate
@agi_plus += state.agi_rate
@int_plus += state.int_rate
end
end
}
# 金消費
$game_party.lose_gold(self.alter_cost(factor))
# アイテム消費
(4...factor.size).each { |i|
$game_party.lose_item(factor[i][0], factor[i][1])
}
# 改造回数加算
self.add_alter_count
end
#--------------------------------------------------------------------------
# ○ 武器情報をコピー
#--------------------------------------------------------------------------
def copy_weapon(id)
weapon = $data_weapons[id]
@original_id = id
@change_name = nil
self.show_alter_count
@icon_name = weapon.icon_name.dup
@description = weapon.description.dup
@animation1_id = weapon.animation1_id
@animation2_id = weapon.animation2_id
@price = 0
@original_price = weapon.price
@atk = weapon.atk
@pdef = weapon.pdef
@mdef = weapon.mdef
@eva = 0
@str_plus = weapon.str_plus
@dex_plus = weapon.dex_plus
@agi_plus = weapon.agi_plus
@int_plus = weapon.int_plus
@element_set = weapon.element_set.dup
@plus_state_set = weapon.plus_state_set.dup
@minus_state_set = weapon.minus_state_set.dup
# 装備可能者を設定
(1...$data_classes.size).each { |i|
actor_class = $data_classes[i]
# 改造対象の武器を装備できるクラスの場合
if actor_class.weapon_set.include?(id)
# 装備可能武器に追加
actor_class.weapon_set.push(@id)
else
# 装備できない場合は装備可能武器から削除
actor_class.weapon_set.delete(@id)
end
}
end
#--------------------------------------------------------------------------
# ○ 改造回数表示
#--------------------------------------------------------------------------
def show_alter_count
@name = (@change_name != nil ? @change_name :
$data_weapons[@original_id].original_name).dup
if KGC::AEQ_SHOW_ALTER_COUNT
@name += KGC::AEQ_ALTER_COUNT_FORMAT.gsub(/{n}/i) {"#{@alter_count}"}
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ RPG::Armor2
#==============================================================================
class RPG::Armor2 < RPG::Armor
include KGC_AlterEquipment_WA2
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super
@atk = 0
@original_id = 0
@original_price = 0
@alter_count = 0
end
#--------------------------------------------------------------------------
# ● 名称取得
#--------------------------------------------------------------------------
def name
return @name.gsub(/\[.*\]/) {""}
end
#--------------------------------------------------------------------------
# ○ 攻撃力
#--------------------------------------------------------------------------
def atk
@atk = 0 if @atk == nil
return @atk
end
#--------------------------------------------------------------------------
# ○ 改造費用算出
#--------------------------------------------------------------------------
def alter_cost(factor)
if @original_price == 0
formula = KGC::AEQ_ARMOR_PRICE_FORMULA.dup
formula.gsub!(/atk/i) {""}
formula.gsub!(/pdef/i) {"@pdef"}
formula.gsub!(/mdef/i) {"@mdef"}
formula.gsub!(/eva/i) {"@eva"}
formula.gsub!(/str_p/i) {"@str_plus"}
formula.gsub!(/dex_p/i) {"@dex_plus"}
formula.gsub!(/agi_p/i) {"@agi_plus"}
formula.gsub!(/int_p/i) {"@int_plus"}
cost = eval(formula)
else
cost = @original_price
end
cost = cost * factor[3] / 100
return Integer(cost)
end
#--------------------------------------------------------------------------
# ○ ファクター付加可否
#--------------------------------------------------------------------------
def can_add_factor?(factor)
# 価格判定
if $game_party.gold < self.alter_cost(factor)
return false
end
# アイテム所持判定
(4...factor.size).each { |i|
if $game_party.item_number(factor[i][0]) < factor[i][1]
return false
end
}
(0...factor[2].size).each { |i|
# 付加済み判定
case factor[2][i][0]
when 0 # 防御属性
if @guard_element_set.include?(factor[2][i][1])
return false
end
when 1 # 防御ステート
if @guard_state_set.include?(factor[2][i][1])
return false
end
end
}
return true
end
#--------------------------------------------------------------------------
# ○ ファクター付加
#--------------------------------------------------------------------------
def add_factor(factor)
# 金消費
$game_party.lose_gold(self.alter_cost(factor))
# アイテム消費
(4...factor.size).each { |i|
$game_party.lose_item(factor[i][0], factor[i][1])
}
(0...factor[2].size).each { |i|
# ファクターを付加
case factor[2][i][0]
when 0 # 防御属性
@guard_element_set.push(factor[2][i][1])
@guard_element_set.sort!
when 1 # 防御ステート
@guard_state_set.push(factor[2][i][1])
@guard_state_set.sort!
when 2 # 能力値
return if (state = $data_states[factor[2][i][1]]) == nil
if state.original_name =~ /\[EQAL[ ]*(?:%|%)\]/i
@atk += @atk * state.atk_rate / 100
@pdef += @pdef * state.pdef_rate / 100
@mdef += @mdef * state.mdef_rate / 100
@eva += @eva * state.eva / 100
@str_plus += @str_plus * state.str_rate / 100
@dex_plus += @dex_plus * state.dex_rate / 100
@agi_plus += @agi_plus * state.agi_rate / 100
@int_plus += @int_plus * state.int_rate / 100
else
@atk += state.atk_rate
@pdef += state.pdef_rate
@mdef += state.mdef_rate
@eva += state.eva
@str_plus += state.str_rate
@dex_plus += state.dex_rate
@agi_plus += state.agi_rate
@int_plus += state.int_rate
end
end
}
# 改造回数加算
self.add_alter_count
end
#--------------------------------------------------------------------------
# ○ 防具情報をコピー
#--------------------------------------------------------------------------
def copy_armor(id)
armor = $data_armors[id]
@original_id = id
@change_name = nil
self.show_alter_count
@icon_name = armor.icon_name.dup
@description = armor.description.dup
@kind = armor.kind
@auto_state_id = armor.auto_state_id
@price = 0
@original_price = armor.price
@atk = 0
@pdef = armor.pdef
@mdef = armor.mdef
@eva = armor.eva
@str_plus = armor.str_plus
@dex_plus = armor.dex_plus
@agi_plus = armor.agi_plus
@int_plus = armor.int_plus
@guard_element_set = armor.guard_element_set.dup
@guard_state_set = armor.guard_state_set.dup
# 装備可能者を設定
(1...$data_classes.size).each { |i|
actor_class = $data_classes[i]
# 改造対象の武器を装備できるクラスの場合
if actor_class.armor_set.include?(id)
# 装備可能武器に追加
actor_class.armor_set.push(@id)
else
# 装備できない場合は装備可能武器から削除
actor_class.armor_set.delete(@id)
end
}
end
#--------------------------------------------------------------------------
# ○ 改造回数表示
#--------------------------------------------------------------------------
def show_alter_count
@name = (@change_name != nil ? @change_name :
$data_armors[@original_id].original_name).dup
if KGC::AEQ_SHOW_ALTER_COUNT
@name += KGC::AEQ_ALTER_COUNT_FORMAT.gsub(/{n}/i) {"#{@alter_count}"}
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ RPG::State
#==============================================================================
class RPG::State
#--------------------------------------------------------------------------
# ● 名前の取得
#--------------------------------------------------------------------------
def name
return @name.gsub(/\[.*\]/) {""}
end
#--------------------------------------------------------------------------
# ○ オリジナル名取得
#--------------------------------------------------------------------------
def original_name
return @name
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Temp
#==============================================================================
class Game_Temp
#--------------------------------------------------------------------------
# ● 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :equipment_alter_rename
attr_accessor :equipment_alter_rename_type
attr_accessor :equipment_alter_rename_id
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_KGC_AlterEquipment initialize
def initialize
initialize_KGC_AlterEquipment
@equipment_alter_rename = false
@equipment_alter_rename_type = 0
@equipment_alter_rename_id = 0
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Battler
#==============================================================================
class Game_Battler
#--------------------------------------------------------------------------
# ● 回避修正の取得
#--------------------------------------------------------------------------
alias eva_KGC_AlterEquipment eva
def eva
n = eva_KGC_AlterEquipment
if self.is_a?(Game_Actor)
# 改造した武器の回避修正を加算
equip_weapon_list.each { |weapon| n += weapon.eva }
end
return n
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Actor
#==============================================================================
class Game_Actor < Game_Battler
#--------------------------------------------------------------------------
# ● 基本攻撃力の取得
#--------------------------------------------------------------------------
alias base_atk_KGC_AlterEquipment base_atk
def base_atk
n = base_atk_KGC_AlterEquipment
# 改造した防具の攻撃力を加算
equip_armor_list.each { |armor| n += armor.atk }
return n
end
unless $imported["EquipExtension"]
#--------------------------------------------------------------------------
# ○ 装備武器リストの取得
#--------------------------------------------------------------------------
def equip_weapon_list
result = [$data_weapons[@weapon_id]]
return result.compact
end
#--------------------------------------------------------------------------
# ○ 装備防具リストの取得
#--------------------------------------------------------------------------
def equip_armor_list
result = []
(1..4).each { |i| result << $data_armors[eval("@armor#{i}_id")] }
return result.compact
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Game_Party
#==============================================================================
class Game_Party
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
alias initialize_KGC_AlterEquipment initialize
def initialize
initialize_KGC_AlterEquipment
@alter_weapons = []
@alter_armors = []
end
#--------------------------------------------------------------------------
# ○ 改造装備取得
#--------------------------------------------------------------------------
def alter_weapons
@alter_weapons = [] if @alter_weapons == nil
return @alter_weapons
end
#--------------------------------------------------------------------------
# ○ 改造装備設定
#--------------------------------------------------------------------------
def alter_weapons=(ary)
@alter_weapons = [] if @alter_weapons == nil
@alter_weapons = ary
end
#--------------------------------------------------------------------------
# ○ 改造防具取得
#--------------------------------------------------------------------------
def alter_armors
@alter_armors = [] if @alter_armors == nil
return @alter_armors
end
#--------------------------------------------------------------------------
# ○ 改造防具設定
#--------------------------------------------------------------------------
def alter_armors=(ary)
@alter_armors = [] if @alter_armors == nil
@alter_armors = ary
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ Window_AlterEquipmentCommand
#------------------------------------------------------------------------------
# 装備改造画面で、操作を選択するウィンドウです。
#==============================================================================
class Window_AlterEquipmentCommand < Window_Selectable
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(0, 64, 640, 64)
self.contents = Bitmap.new(width - 32, height - 32)
@commands = [KGC::AEQ_COMMAND_WEAPON_ALTER, KGC::AEQ_COMMAND_WEAPON_DISPOSE,
KGC::AEQ_COMMAND_ARMOR_ALTER, KGC::AEQ_COMMAND_ARMOR_DISPOSE]
@item_max = @commands.size
@column_max = @commands.size
@item_width = (width - 32) / @commands.size
self.z = 1000
self.index = 0
refresh
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh
for i in [email]0...@commands.size[/email]
rect = Rect.new(@item_width * i, 0, @item_width, 32)
self.contents.fill_rect(rect, Color.new(0, 0, 0, 0))
self.contents.font.color = system_color
self.contents.draw_text(rect, @commands[i], 1)
end
end
#--------------------------------------------------------------------------
# ● カーソルの矩形更新
#--------------------------------------------------------------------------
def update_cursor_rect
if index != -1
self.cursor_rect.set(@item_width * index, 0, @item_width, 32)
end
end
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def update_help
case self.index
when 0
@help_window.set_text(KGC::AEQ_HELP_WEAPON_ALTER)
when 1
@help_window.set_text(KGC::AEQ_HELP_WEAPON_DISPOSE)
when 2
@help_window.set_text(KGC::AEQ_HELP_ARMOR_ALTER)
when 3
@help_window.set_text(KGC::AEQ_HELP_ARMOR_DISPOSE)
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ Window_AlterEquipmentLeft
#------------------------------------------------------------------------------
# 装備改造画面で、改造する装備スロットの一覧を表示するウィンドウです。
#==============================================================================
class Window_AlterEquipmentLeft < Window_Selectable
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(0, 128, 320, 352)
self.active = false
self.index = -1
self.back_opacity = 160 if KGC::AEQ_BACK_TRANSPARENT
@column_max = 1
refresh
end
#--------------------------------------------------------------------------
# ○ 装備の取得
#--------------------------------------------------------------------------
def item
return @data[self.index]
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh(type = 0)
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
# スロット一覧を作成
case type
when 0
for i in 0...KGC::AEQ_WEAPON_MAX
weapon = $game_party.alter_weapons[i]
@data.push(weapon)
end
when 1
for i in 0...KGC::AEQ_ARMOR_MAX
armor = $game_party.alter_armors[i]
@data.push(armor)
end
end
# ビットマップを作成し、全項目を描画
@item_max = @data.size
self.contents = Bitmap.new(width - 32, row_max * 32)
for i in 0...@item_max
draw_item(i, type)
end
end
#--------------------------------------------------------------------------
# ● 項目の描画
#--------------------------------------------------------------------------
def draw_item(index, type)
item = @data[index]
x = 36
y = index * 32
self.contents.font.color = text_color(6)
self.contents.draw_text(x - 32, y, 32, 32, (index + 1).to_s, 1)
if item != nil
case type
when 0
number = $game_party.weapon_number(item.id)
when 1
number = $game_party.armor_number(item.id)
end
ac = item.alterable_count
if number > 0 && ac != 0
self.contents.font.color = normal_color
opacity = 255
else
self.contents.font.color = disabled_color
opacity = ac != 0 ? 255 : 160
end
icon = RPG::Cache.icon(item.icon_name)
self.contents.blt(x, y + 4, icon, icon.rect, opacity)
self.contents.draw_text(x + 28, y, 224, 32, item.name)
else
self.contents.font.color = disabled_color
case type
when 0
self.contents.draw_text(x, y, 256, 32, KGC::AEQ_TEXT_NO_WEAPON, 1)
when 1
self.contents.draw_text(x, y, 256, 32, KGC::AEQ_TEXT_NO_ARMOR, 1)
end
end
end
#--------------------------------------------------------------------------
# ○ 項目の再描画
#--------------------------------------------------------------------------
def redraw_item(index, type)
case type
when 0
@data[index] = $game_party.alter_weapons[index]
when 1
@data[index] = $game_party.alter_armors[index]
end
self.contents.fill_rect(0, index * 32, 288, 32, Color.new(0, 0, 0, 0))
self.draw_item(index, type)
end
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(self.item == nil ? "" : self.item.description)
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ Window_AlterEquipmentRight
#------------------------------------------------------------------------------
# 装備改造画面で、所持している装備一覧を表示するウィンドウです。
#==============================================================================
class Window_AlterEquipmentRight < Window_Selectable
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(320, 128, 320, 352)
self.active = false
self.visible = false
self.index = 0
self.back_opacity = 160 if KGC::AEQ_BACK_TRANSPARENT
@column_max = 1
refresh
end
#--------------------------------------------------------------------------
# ○ 装備の取得
#--------------------------------------------------------------------------
def item
return @data[self.index]
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh(type = 0)
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@data = []
case type
when 0
unless KGC::AEQ_EXCLUDE_EQUIP_TYPE.include?(0)
# 所持している武器を追加
(1...$alter_weapon_start).each { |i|
if $game_party.weapon_number(i) > 0 &&
$data_weapons[i].alterable_count != 0 &&
!KGC::AEQ_EXCLUDE_WEAPONS.include?(i)
@data << $data_weapons[i]
end
}
end
when 1
# 所持している防具を追加
(1...$alter_armor_start).each { |i|
if $game_party.armor_number(i) > 0 &&
$data_armors[i].alterable_count != 0 &&
!KGC::AEQ_EXCLUDE_ARMORS.include?(i) &&
!KGC::AEQ_EXCLUDE_EQUIP_TYPE.include?($data_armors[i].kind + 1)
@data << $data_armors[i]
end
}
end
# 個数が 0 の場合は nil を追加
@data.push(nil) if @data.size == 0
# ビットマップを作成し、全項目を描画
@item_max = @data.size
self.contents = Bitmap.new(width - 32, row_max * 32)
for i in 0...@item_max
draw_item(i, type)
end
end
#--------------------------------------------------------------------------
# ● 項目の描画
#--------------------------------------------------------------------------
def draw_item(index, type)
item = @data[index]
return if item == nil
x = 4
y = index * 32
icon = RPG::Cache.icon(item.icon_name)
self.contents.blt(x, y + 4, icon, icon.rect)
self.contents.font.color = normal_color
self.contents.draw_text(x + 28, y, 216, 32, item.name)
case type
when 0
number = $game_party.weapon_number(item.id)
when 1
number = $game_party.armor_number(item.id)
end
self.contents.draw_text(x + 244, y, 16, 32, ":", 1)
self.contents.draw_text(x + 260, y, 24, 32, number.to_s, 2)
end
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(self.item == nil ? "" : self.item.description)
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ Window_AlterEquipmentStatus
#------------------------------------------------------------------------------
# 装備改造画面で、選択した装備の能力を表示するウィンドウです。
#==============================================================================
class Window_AlterEquipmentStatus < Window_Base
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(320, 128, 320, 352)
self.contents = Bitmap.new(width - 32, height - 32)
self.back_opacity = 160 if KGC::AEQ_BACK_TRANSPARENT
self.z = 500
refresh(nil)
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh(item, factor = nil)
self.contents.clear
if factor == nil # アイテムステータス
return if item == nil || item.name == ""
draw_parameter(item, factor)
draw_element(item, factor)
draw_state(item, factor)
else # 素材アイテム数
return if factor == nil
draw_material(item, factor)
end
end
#--------------------------------------------------------------------------
# ○ パラメータ描画
#--------------------------------------------------------------------------
def draw_parameter(item, factor)
self.contents.font.size = 20
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 80, 32, $data_system.words.atk)
self.contents.draw_text(148, 0, 80, 32, $data_system.words.pdef)
self.contents.draw_text(4, 32, 80, 32, $data_system.words.mdef)
self.contents.draw_text(148, 32, 80, 32, "回避修正")
self.contents.draw_text(4, 64, 80, 32, $data_system.words.str)
self.contents.draw_text(148, 64, 80, 32, $data_system.words.dex)
self.contents.draw_text(4, 96, 80, 32, $data_system.words.agi)
self.contents.draw_text(148, 96, 80, 32, $data_system.words.int)
self.contents.font.color = normal_color
self.contents.draw_text(84, 0, 48, 32, item.atk.to_s, 2)
self.contents.draw_text(228, 0, 48, 32, item.pdef.to_s, 2)
self.contents.draw_text(84, 32, 48, 32, item.mdef.to_s, 2)
self.contents.draw_text(228, 32, 48, 32, item.eva.to_s, 2)
self.contents.draw_text(84, 64, 48, 32, item.str_plus.to_s, 2)
self.contents.draw_text(228, 64, 48, 32, item.dex_plus.to_s, 2)
self.contents.draw_text(84, 96, 48, 32, item.agi_plus.to_s, 2)
self.contents.draw_text(228, 96, 48, 32, item.int_plus.to_s, 2)
end
#--------------------------------------------------------------------------
# ○ 属性描画
#--------------------------------------------------------------------------
def draw_element(item, factor)
ix = 4
iy = 148
self.contents.font.size = 18
self.contents.font.color = system_color
case item
when RPG::Weapon
self.contents.draw_text(32, 128, 160, 20, "攻撃属性")
elements = item.element_set.dup
when RPG::Armor
self.contents.draw_text(32, 128, 160, 20, "防御属性")
elements = item.guard_element_set.dup
end
self.contents.font.color = normal_color
skip = true
elements.each { |element|
KGC::AEQ_ELEMENT_RANGE.each { |rng|
case rng
when Integer
skip = element != rng
when Range
skip = !rng.member?(element)
end
}
next if skip
text = "[#{$data_system.elements[element]}]"
cx = self.contents.text_size(text).width
self.contents.draw_text(ix, iy, cx + 8, 20, text)
ix += cx
if ix >= 264
ix = 4
iy += 20
if iy >= 192
break
end
end
}
end
#--------------------------------------------------------------------------
# ○ ステート性描画
#--------------------------------------------------------------------------
def draw_state(item, factor)
# 付加/防御ステート描画
ix = 4
iy = 212
self.contents.font.color = system_color
case item
when RPG::Weapon
self.contents.draw_text(32, 192, 160, 20, "付加ステート")
states = item.plus_state_set.dup
when RPG::Armor
self.contents.draw_text(32, 192, 160, 20, "防御ステート")
states = item.guard_state_set.dup
end
self.contents.font.color = normal_color
self.contents.font.size = 18
skip = true
states.each { |state|
KGC::AEQ_STATE_RANGE.each { |rng|
case rng
when Integer
skip = state != rng
when Range
skip = !rng.member?(state)
end
}
next if skip
text = "[#{$data_states[state].name}]"
cx = self.contents.text_size(text).width
self.contents.draw_text(ix, iy, cx + 8, 20, text)
ix += cx
if ix >= 264
ix = 4
iy += 24
if iy >= 256
break
end
end
}
return if item.is_a?(RPG::Armor)
# 解除ステート描画
ix = 4
iy = 276
self.contents.font.color = system_color
self.contents.draw_text(32, 256, 160, 20, "解除ステート")
self.contents.font.color = normal_color
self.contents.font.size = 18
skip = true
item.minus_state_set.each { |state|
KGC::AEQ_STATE_RANGE.each { |rng|
case rng
when Integer
skip = state != rng
when Range
skip = !rng.member?(state)
end
}
next if skip
text = "[#{$data_states[state].name}]"
cx = self.contents.text_size(text).width
self.contents.draw_text(ix, iy, cx + 8, 20, text)
ix += cx
if ix >= 264
ix = 4
iy += 24
if iy >= 320
break
end
end
}
end
#--------------------------------------------------------------------------
# ○ 素材描画
#--------------------------------------------------------------------------
def draw_material(item, factor)
self.contents.font.size = 22
self.contents.font.color = system_color
self.contents.draw_text(4, 0, 128, 32, "改造費用")
self.contents.draw_text(232, 0, 48, 32, $data_system.words.gold)
self.contents.font.color = normal_color
self.contents.draw_text(104, 0, 128, 32, item.alter_cost(factor).to_s, 2)
self.contents.font.color = system_color
self.contents.draw_text(4, 32, 128, 32, "所持金")
self.contents.draw_text(232, 32, 48, 32, $data_system.words.gold)
self.contents.font.color = normal_color
self.contents.draw_text(104, 32, 128, 32, $game_party.gold.to_s, 2)
self.contents.font.color = system_color
self.contents.draw_text(4, 64, 128, 32, "消費アイテム")
for i in 4...factor.size
self.contents.font.color = system_color
self.contents.draw_text(4, 128 + (i - 4) * 64, 80, 32, "必要数")
self.contents.draw_text(144, 128 + (i - 4) * 64, 80, 32, "所持数")
self.contents.font.color = normal_color
text = $data_items[factor[i][0]].name
icon = RPG::Cache.icon($data_items[factor[i][0]].icon_name)
self.contents.blt(4, 100 + (i - 4) * 64, icon, icon.rect)
self.contents.draw_text(32, 96 + (i - 4) * 64, 256, 32, text)
self.contents.draw_text(84, 128 + (i - 4) * 64, 48, 32, factor[i][1].to_s, 2)
self.contents.draw_text(224, 128 + (i - 4) * 64, 48, 32, $game_party.item_number(factor[i][0]).to_s, 2)
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ Window_AlterEquipmentFactor
#------------------------------------------------------------------------------
# 装備改造画面で、付加要素一覧を表示するウィンドウです。
#==============================================================================
class Window_AlterEquipmentFactor < Window_Selectable
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize
super(320, 128, 320, 352)
@column_max = 1
self.active = false
self.visible = false
self.index = 0
self.back_opacity = 160 if KGC::AEQ_BACK_TRANSPARENT
end
#--------------------------------------------------------------------------
# ○ ファクターの取得
#--------------------------------------------------------------------------
def factor
return @data[self.index]
end
#--------------------------------------------------------------------------
# ● リフレッシュ
#--------------------------------------------------------------------------
def refresh(item)
if self.contents != nil
self.contents.dispose
self.contents = nil
end
@item = item
@data = []
# 付加できるファクターを追加
case item
when RPG::Weapon
factors = KGC::AEQ_WEAPON_FACTORS
when RPG::Armor
factors = KGC::AEQ_ARMOR_FACTORS
end
for i in 0...factors.size
factor = factors[i]
next if factor == nil
@data.push(factor)
end
# 個数が 0 の場合は nil を追加
@data.push(nil) if @data.size == 0
# ビットマップを作成し、全項目を描画
@item_max = @data.size
self.contents = Bitmap.new(width - 32, row_max * 32)
for i in 0...@item_max
draw_item(i)
end
end
#--------------------------------------------------------------------------
# ● 項目の描画
#--------------------------------------------------------------------------
def draw_item(index)
factor = @data[index]
return if factor == nil
x = 4
y = index * 32
if @item.can_add_factor?(factor)
self.contents.font.color = normal_color
else
self.contents.font.color = disabled_color
end
self.contents.draw_text(x, y, 280, 32, factor[0], 0)
end
#--------------------------------------------------------------------------
# ● ヘルプテキスト更新
#--------------------------------------------------------------------------
def update_help
@help_window.set_text(self.factor == nil ? "" : self.factor[1])
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Title
#==============================================================================
class Scene_Title
#--------------------------------------------------------------------------
# ● コマンド : ニューゲーム
#--------------------------------------------------------------------------
alias command_new_game_KGC_AlterEquipment command_new_game
def command_new_game
# 元の処理を実行
command_new_game_KGC_AlterEquipment
# 改造装備を初期化
$alter_weapon_start = $data_weapons.size
for i in 0...KGC::AEQ_WEAPON_MAX
$data_weapons[$alter_weapon_start + i] = RPG::Weapon2.new
end
$alter_armor_start = $data_armors.size
for i in 0...KGC::AEQ_ARMOR_MAX
$data_armors[$alter_armor_start + i] = RPG::Armor2.new
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Load
#==============================================================================
class Scene_Load < Scene_File
#--------------------------------------------------------------------------
# ● 決定時の処理
#--------------------------------------------------------------------------
alias on_decision_KGC_AlterEquipment on_decision
def on_decision(filename)
on_decision_KGC_AlterEquipment(filename)
return unless FileTest.exist?(filename) # ファイルが存在しない場合は戻る
restore_altered_equipment
end
#--------------------------------------------------------------------------
# ○ 改造装備を復元
#--------------------------------------------------------------------------
def restore_altered_equipment
# 改造装備を取得
$alter_weapon_start = $data_weapons.size
for i in 0...KGC::AEQ_WEAPON_MAX
if $game_party.alter_weapons[i] == nil
$data_weapons[$alter_weapon_start + i] = RPG::Weapon2.new
else
$data_weapons[$alter_weapon_start + i] = $game_party.alter_weapons[i]
weapon = $game_party.alter_weapons[i]
weapon.show_alter_count
# 装備可能者を設定
for i in 1...$data_classes.size
actor_class = $data_classes[i]
# 改造対象の武器を装備できるクラスの場合
if actor_class.weapon_set.include?(weapon.original_id)
# 装備可能武器に追加
actor_class.weapon_set.push(weapon.id)
else
# 装備できない場合は装備可能武器から削除
actor_class.weapon_set.delete(weapon.id)
end
end
end
end
$alter_armor_start = $data_armors.size
for i in 0...KGC::AEQ_ARMOR_MAX
if $game_party.alter_armors[i] == nil
$data_armors[$alter_armor_start + i] = RPG::Armor2.new
else
$data_armors[$alter_armor_start + i] = $game_party.alter_armors[i]
armor = $game_party.alter_armors[i]
armor.show_alter_count
# 装備可能者を設定
for i in 1...$data_classes.size
actor_class = $data_classes[i]
# 改造対象の武器を装備できるクラスの場合
if actor_class.armor_set.include?(armor.original_id)
# 装備可能武器に追加
actor_class.armor_set.push(armor.id)
else
# 装備できない場合は装備可能武器から削除
actor_class.armor_set.delete(armor.id)
end
end
end
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# ■ Scene_Name
#==============================================================================
class Scene_Name
#--------------------------------------------------------------------------
# ● メイン処理
#--------------------------------------------------------------------------
alias main_KGC_AlterEquipment main
def main
# 元の処理を実行
main_KGC_AlterEquipment
# 装備名変更の場合
if $game_temp.equipment_alter_rename
case $game_temp.equipment_alter_rename_type
when 0
type = "weapon"
when 1
type = "armor"
end
equip = eval("$data_#{type}s[$game_temp.equipment_alter_rename_id]")
equip.change_name = @actor.name.dup
equip.show_alter_count
$game_temp.equipment_alter_rename_type = 0
$game_temp.equipment_alter_rename_id = 0
$game_temp.equipment_alter_rename = false
# 装備品改造画面に切り替え
$scene = Scene_AlterEquipment.new
end
end
end
#★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★☆★
#==============================================================================
# □ Scene_AlterEquipment
#------------------------------------------------------------------------------
# 装備改造画面の処理を行うクラスです。
#==============================================================================
class Scene_AlterEquipment
#--------------------------------------------------------------------------
# ○ メイン処理
#--------------------------------------------------------------------------
def main
@spriteset = Spriteset_Map.new if KGC::AEQ_BACK_TRANSPARENT
# ウィンドウを作成
if $imported["HelpExtension"]
@help_window = Window_HelpExtension.new
else
@help_window = Window_Help.new
end
@help_window.back_opacity = 160 if KGC::AEQ_BACK_TRANSPARENT
@command_window = Window_AlterEquipmentCommand.new
@left_window = Window_AlterEquipmentLeft.new
@right_window = Window_AlterEquipmentRight.new
@factor_window = Window_AlterEquipmentFactor.new
@status_window = Window_AlterEquipmentStatus.new
# ヘルプウィンドウを関連付け
@command_window.help_window = @help_window
@left_window.help_window = @help_window
@right_window.help_window = @help_window
@factor_window.help_window = @help_window
# カーソル位置を設定
@left_window.index = 0
@status_window.refresh(@left_window.item)
# トランジション実行
Graphics.transition
# メインループ
loop do
# ゲーム画面を更新
Graphics.update
# 入力情報を更新
Input.update
# フレーム更新
update
# 画面が切り替わったらループを中断
if $scene != self
break
end
end
# トランジション準備
Graphics.freeze
# ウィンドウを解放
@help_window.dispose
@command_window.dispose
@left_window.dispose
@right_window.dispose
@factor_window.dispose
@status_window.dispose
@left_command_window.dispose if @left_command_window != nil
@right_command_window.dispose if @right_command_window != nil
@factor_command_window.dispose if @factor_command_window != nil
@spriteset.dispose if KGC::AEQ_BACK_TRANSPARENT
end
#--------------------------------------------------------------------------
# ○ リフレッシュ
#--------------------------------------------------------------------------
def refresh
@command_window.refresh
@left_window.refresh
@right_window.refresh
@factor_window.refresh(nil)
@status_window.refresh(nil)
end
#--------------------------------------------------------------------------
# ○ フレーム更新
#--------------------------------------------------------------------------
def update
# ウィンドウを更新
@command_window.update
@left_window.update
@right_window.update
@factor_window.update
# コマンドウィンドウがアクティブの場合: update_command を呼ぶ
if @command_window.active
update_command
return
end
# レフトウィンドウがアクティブの場合: update_left を呼ぶ
if @left_window.active
@status_window.x = 320
update_left
return
end
# ライトウィンドウがアクティブの場合: update_right を呼ぶ
if @right_window.active
@status_window.x = 0
update_right
return
end
# ファクター追加ウィンドウがアクティブの場合: update_factor を呼ぶ
if @factor_window.active
@status_window.x = 0
update_factor
return
end
# レフトコマンドウィンドウがアクティブの場合: update_left_command を呼ぶ
if @left_command_window != nil && @left_command_window.active
update_left_command
return
end
# ライトコマンドウィンドウがアクティブの場合: update_right_command を呼ぶ
if @right_command_window != nil && @right_command_window.active
update_right_command
return
end
# ファクターコマンドウィンドウがアクティブの場合: update_factor_command を呼ぶ
if @factor_command_window != nil && @factor_command_window.active
update_factor_command
return
end
end
#--------------------------------------------------------------------------
# ○ フレーム更新 (コマンドウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_command
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# マップ画面に切り替え
$scene = Scene_Map.new
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# レフトウィンドウに切り替え
case @command_window.index
when 0..1
@type = 0
when 2..3
@type = 1
end
@command_window.active = false
@command_window.visible = false
@left_window.refresh(@type)
@left_window.active = true
return
end
end
#--------------------------------------------------------------------------
# ○ フレーム更新 (レフトウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_left
# 選択項目が変更された場合
if @now_sel_left != @left_window.index
# ステータスウィンドウをリフレッシュ
@status_window.refresh(@left_window.item)
@now_sel_left = @left_window.index
end
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# コマンドウィンドウに切り替え
@command_window.active = true
@command_window.visible = true
@left_window.active = false
@now_sel_left = nil
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# コマンドウィンドウの選択肢で分岐
case @command_window.index
when 0, 2 # 装備改造の場合
# 既に改造装備がある場合
if @left_window.item != nil
# これ以上改造できない場合
if @left_window.item.alterable_count == 0
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ファクター追加ウィンドウをリフレッシュ
@factor_window.refresh(@left_window.item)
# ファクター追加ウィンドウに切り替え
@left_window.active = false
@factor_window.active = true
@factor_window.visible = true
else
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ステータスウィンドウをリフレッシュ
@status_window.refresh(@right_window.item)
# ライトウィンドウに切り替え
@left_window.active = false
@right_window.refresh(@type)
@right_window.active = true
@right_window.visible = true
end
@now_sel_left = nil
when 1, 3 # 改造装備破棄の場合
# 既に改造装備がある場合
if @left_window.item != nil &&
((@type == 0 && $game_party.weapon_number(@left_window.item.id) >= 1) ||
(@type == 1 && $game_party.armor_number(@left_window.item.id) >= 1))
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# レフトコマンドウィンドウ作成
@left_command_window = Window_Command.new(256, KGC::AEQ_DISPOSE_COMMAND)
@left_command_window.back_opacity = 160
@left_command_window.x = 320 - @left_command_window.width / 2
@left_command_window.y = 240 - @left_command_window.height / 2
@left_command_window.z = 1000
@left_command_window.index = 1
# レフトコマンドウィンドウに切り替え
@left_command_window.active = true
@left_window.active = false
@now_sel_left = nil
else
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
end
end
return
end
# 装備名変更ボタンが押された場合
if KGC::AEQ_RENAME_BUTTON != nil && Input.trigger?(KGC::AEQ_RENAME_BUTTON)
item = @left_window.item
# 既に改造装備がある場合
if item != nil &&
((@type == 0 && $game_party.weapon_number(item.id) >= 1) ||
(@type == 1 && $game_party.armor_number(item.id) >= 1))
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# 名前変更画面に切り替え
$game_actors[KGC::AEQ_RENAME_ACTOR_ID].name = item.plain_name
$game_temp.name_actor_id = KGC::AEQ_RENAME_ACTOR_ID
$game_temp.name_max_char = KGC::AEQ_RENAME_MAX_LENGTH
$game_temp.equipment_alter_rename_type = @type
$game_temp.equipment_alter_rename_id = item.id
$game_temp.equipment_alter_rename = true
$scene = Scene_Name.new
else
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
end
return
end
end
#--------------------------------------------------------------------------
# ○ フレーム更新 (ライトウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_right
# 選択項目が変更された場合
if @now_sel_right != @right_window.index
# ステータスウィンドウをリフレッシュ
@status_window.refresh(@right_window.item)
@now_sel_right = @right_window.index
end
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# ステータスウィンドウをリフレッシュ
@status_window.refresh(@left_window.item)
# レフトウィンドウに切り替え
@left_window.active = true
@right_window.active = false
@right_window.visible = false
@right_window.index = 0
@now_sel_right = nil
# ヘルプウィンドウ文字列を消去
@help_window.set_text("")
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
# 空欄を選択した場合
if @right_window.item == nil
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ライトコマンドウィンドウ作成
@right_command_window = Window_Command.new(256, KGC::AEQ_ALTER_COMMAND)
@right_command_window.back_opacity = 160
@right_command_window.x = 320 - @right_command_window.width / 2
@right_command_window.y = 240 - @right_command_window.height / 2
@right_command_window.z = 1000
# ライトコマンドウィンドウに切り替え
@right_command_window.active = true
@right_window.active = false
@now_sel_right = nil
return
end
end
#--------------------------------------------------------------------------
# ○ フレーム更新 (ファクター追加ウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_factor
# 選択項目が変更された場合
if @now_sel_factor != @factor_window.index
# ステータスウィンドウをリフレッシュ
@status_window.refresh(@left_window.item, @factor_window.factor)
@now_sel_factor = @factor_window.index
end
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# ステータスウィンドウをリフレッシュ
@status_window.refresh(@left_window.item)
# レフトウィンドウに切り替え
@left_window.active = true
@factor_window.active = false
@factor_window.visible = false
@factor_window.index = 0
@now_sel_factor = nil
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
factor = @factor_window.factor
# nil チェック
impossible = factor == nil
# ファクター付加判定
impossible |= !@left_window.item.can_add_factor?(factor)
# 付加できない場合
if impossible
# ブザー SE を演奏
$game_system.se_play($data_system.buzzer_se)
return
end
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ファクターコマンドウィンドウ作成
@factor_command_window = Window_Command.new(256, KGC::AEQ_FACTOR_COMMAND)
@factor_command_window.back_opacity = 160
@factor_command_window.x = 320 - @factor_command_window.width / 2
@factor_command_window.y = 240 - @factor_command_window.height / 2
@factor_command_window.z = 1000
@factor_command_window.index = 1
# ファクターコマンドウィンドウに切り替え
@factor_command_window.active = true
@factor_window.active = false
@now_sel_factor = nil
return
end
end
#--------------------------------------------------------------------------
# ○ フレーム更新 (レフトコマンドウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_left_command
@left_command_window.update
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# レフトウィンドウに切り替え
@left_command_window.dispose
@left_command_window = nil
@left_window.active = true
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
case @left_command_window.index
when 0
# 装備 SE を演奏
$game_system.se_play($data_system.equip_se)
# 選択した改造装備を削除
id = @left_window.item.id
case @type
when 0
$game_party.alter_weapons[@left_window.index] = nil
$data_weapons[id] = RPG::Weapon2.new
$game_party.lose_weapon(id, 99)
when 1
$game_party.alter_armors[@left_window.index] = nil
$data_armors[id] = RPG::Armor2.new
$game_party.lose_armor(id, 99)
end
# 再描画
@left_window.redraw_item(@left_window.index, @type)
# レフトウィンドウに切り替え
@left_command_window.dispose
@left_command_window = nil
@left_window.active = true
when 1
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# レフトウィンドウに切り替え
@left_command_window.dispose
@left_command_window = nil
@left_window.active = true
end
return
end
end
#--------------------------------------------------------------------------
# ○ フレーム更新 (ライトコマンドウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_right_command
@right_command_window.update
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# ライトウィンドウに切り替え
@right_command_window.dispose
@right_command_window = nil
@right_window.active = true
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
case @right_command_window.index
when 0
# 装備 SE を演奏
$game_system.se_play($data_system.equip_se)
case @type
when 0
# 改造する武器を設定
id = @left_window.index + $alter_weapon_start
# 武器の内容を設定
$game_party.alter_weapons[@left_window.index] = RPG::Weapon2.new
weapon = $game_party.alter_weapons[@left_window.index]
weapon.id = id
weapon.copy_weapon(@right_window.item.id)
$data_weapons[id] = $game_party.alter_weapons[@left_window.index]
# 改造装備を 1 個取得
$game_party.gain_weapon(id, 1)
# 改造対象の武器を削除
$game_party.lose_weapon(@right_window.item.id, 1)
when 1
# 改造する防具を設定
id = @left_window.index + $alter_armor_start
# 防具の内容を設定
$game_party.alter_armors[@left_window.index] = RPG::Armor2.new
armor = $game_party.alter_armors[@left_window.index]
armor.id = id
armor.copy_armor(@right_window.item.id)
$data_armors[id] = $game_party.alter_armors[@left_window.index]
# 改造装備を 1 個取得
$game_party.gain_armor(id, 1)
# 改造対象の防具を削除
$game_party.lose_armor(@right_window.item.id, 1)
end
# ウィンドウをリフレッシュ
@left_window.redraw_item(@left_window.index, @type)
@right_window.refresh(@type)
@status_window.refresh(@left_window.item)
# レフトウィンドウに切り替え
@right_command_window.dispose
@right_command_window = nil
@left_window.active = true
@right_window.active = false
@right_window.visible = false
@right_window.index = 0
# ヘルプウィンドウ文字列を消去
@help_window.set_text("")
when 1
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ライトウィンドウに切り替え
@right_command_window.dispose
@right_command_window = nil
@right_window.active = true
end
return
end
end
#--------------------------------------------------------------------------
# ○ フレーム更新 (ファクターコマンドウィンドウがアクティブの場合)
#--------------------------------------------------------------------------
def update_factor_command
@factor_command_window.update
# B ボタンが押された場合
if Input.trigger?(Input::B)
# キャンセル SE を演奏
$game_system.se_play($data_system.cancel_se)
# ファクターウィンドウに切り替え
@factor_command_window.dispose
@factor_command_window = nil
@factor_window.active = true
return
end
# C ボタンが押された場合
if Input.trigger?(Input::C)
case @factor_command_window.index
when 0
# 装備 SE を演奏
$game_system.se_play($data_system.equip_se)
# 装備を改造
case @type
when 0
$game_party.alter_weapons[@left_window.index].add_factor(@factor_window.factor)
when 1
$game_party.alter_armors[@left_window.index].add_factor(@factor_window.factor)
end
# ウィンドウをリフレッシュ
@left_window.redraw_item(@left_window.index, @type)
@status_window.refresh(@left_window.item)
# レフトウィンドウに切り替え
@factor_command_window.dispose
@factor_command_window = nil
@left_window.active = true
@factor_window.active = false
@factor_window.visible = false
@factor_window.index = 0
# ヘルプウィンドウ文字列を消去
@help_window.set_text("")
when 1
# 決定 SE を演奏
$game_system.se_play($data_system.decision_se)
# ファクターウィンドウに切り替え
@factor_command_window.dispose
@factor_command_window = nil
@factor_window.active = true
end
return
end
end
end