以下のようなシステムのリクエストです。
ツクールフェスのようにアイテムメニュー画面から直接使用できる。
使用した装備を消費して、同名装備の性能を強化。
例:ロングソード5個 ATK50 を所持。
メニュー画面からロングソードを選択→ロングソードを消費して
ロングソード4個 ATK60になる。
と言った感じで残り全ての同名装備が強化されるシステムです。
(個別強化ではないので装備を個々に管理する必要はありません。)
また最大強化数と一回あたりの強化値の設定についてですが
メモ欄で、最大強化数20 強化値5%
のように記入すれば1回強化するごとにデータベースの値に+5%され20回が強化の上限になるようなものをイメージしています。
コンセプトとしてはレア度が設定されているような装備品においてゲーム前半での性能抑制とレア度の低い装備にも活躍の場を与えることが目的です。
希望のようなスクリプトではなく、コンセプトに合うようなスクリプトやイベントで組む良いアドバイスがありましたら教えていただけると幸いです。
よろしくお願いします。
【解決済み】同名装備消費で強化
Re: 同名装備消費で強化
とりあえず作ってみました。防具にも使えたりしますが、設定しなければ使えないので問題ありません。
汎用性と拡張性の確保のためです、ご了承ください。
※2017/2/11 10:28 名前に強化値を反映する機能つけるの忘れてた
※2017/2/11 12:18 Twitterで装備を全部消費してしまう可能性を指摘されたので
※2017/2/11 13:05 説明文を間違えていたので。使用する分には問題ありません。
コード: 全て選択
=begin
◆概要
装備の強化をアイテム画面で行えるようにします。
◆機能
・装備をアイテム画面で使用すると装備を消費して強化できます。
・メモ欄に<最大強化値 n>でn回使用できます。
・メモ欄に<強化値 n%>で能力値がn%ずつ上昇します。
・イベントコマンドで「$game_system.enhance_weapons[id] = n」で
idの武器の強化値をnに変更できます。
・メモ欄に<個別強化値 id, n%>でidの能力値がn%ずつ上昇します。
・メモ欄に<強化パラメータ [a,b,c]>でa,b,cの能力値を強化できます。
・イベントコマンドで「$game_system.enhance_armors[id] = n」で
idの防具の強化値をnに変更できます。
◆仕様
・最大値はゲーム中に変更できません。
◆使用上の注意
・★……エイリアス ○……新規定義
◆作者:faida @faida3983
◆更新履歴
ver1.0 : 公開
ver1.1 : 名前に強化値を表示する機能付加
ver1.2 : 残り1個の時の連打防止機能付加
ver1.21: 説明文が間違っていたのを修正
=end
module FAI_EEI
# 設定項目:強化値を表示する しない場合はnil する場合は文字列
SHOW_ENHANCE_LEVEL = "+%s"
# 設定項目:強化できるパラメータ
ENHANCE_WEAPON_PARAM = [2, 3]
ENHANCE_ARMOR_PARAM = [3, 5]
# 設定項目:強化時に鳴らすSE いらなければ「ENHANCE_EQUIP_SE = nil」
ENHANCE_EQUIP_SE = RPG::SE.new("Heal2", 80, 100)
# 設定項目:残り1個の時
# true:使用できる false:装備品になければ使用できない nil:使用できない
# 確認ウィンドウを使用する際はtrueにしてください。
LAST_ONE_USE = true
# 設定項目:確認ウィンドウを表示する
# true:常に表示する false:残り1個(装備品含む)の時表示する nil:常に表示しない
DETERMINE_WINDOW = false
# 設定項目:確認ウィンドウのカーソルを「いいえ」にする
# true:常に「いいえ」 false:残り1個(装備品含む)の時「いいえ」 nil:常に「はい」
DETERMINE_WINDOW_NO = false
# 設定項目:確認ウィンドウに表示する文章
# 配列にすると残り1個(装備品含む)の時に文章が変わります。
DETERMINE_WINDOW_TXT = ["この装備を1個消費して強化します。",
"この装備は\eC[10]残り1個\eC[0]です。消費して強化しますか?"]
end
class RPG::EquipItem < RPG::BaseItem
#--------------------------------------------------------------------------
# ○ メモ欄読み込み
#--------------------------------------------------------------------------
def enhance_max
return @enhance_max if @enhance_max
@enhance_max = (note =~ /<最大強化値\s*(\d+)>/ ? $1.to_i : 0)
end
def enhance_rates
enhance_rate_note if !@enhance_rates; @enhance_rates
end
def enhance_rate_note
val = (note =~ /<強化値\s*(\d+)[%%]>/ ? $1.to_i : 0)
@enhance_rates = [val, val, val, val, val, val, val, val]
note.each_line{|line|
if line =~ /<個別強化値\s*(\d+)\,\s*(\d+)[%%]>/
@enhance_rates[$1.to_i] = $2.to_i
end
}
end
def enhance_param_ids
return @enhance_param_ids if @enhance_param_ids
arr = default_param_ids
@enhance_param_ids=(note =~ /<強化パラメータ\s*(\[.+\])>/ ? eval($1) : arr)
end
#--------------------------------------------------------------------------
# ○ 共通処理
#--------------------------------------------------------------------------
alias fai_eei_name name
def name
return fai_eei_name if !FAI_EEI::SHOW_ENHANCE_LEVEL || enhanced_level == 0
fai_eei_name + sprintf(FAI_EEI::SHOW_ENHANCE_LEVEL, enhanced_level)
end
def default_param_ids
[]
end
def enhanceable?
return false if enhance_max == 0 || enhance_max == enhanced_level
return false if enhance_rates.all?{|v|v == 0}
return false if enhance_param_ids.empty?
true
end
def enhanced_level
0
end
def equip_enhance
if !($game_system.enhance_weapons && $game_system.enhance_armors)
$game_system.init_enhance_equips
end
enhanced_level
end
end
class RPG::Weapon < RPG::EquipItem
#--------------------------------------------------------------------------
# ★ パラメータ群
#--------------------------------------------------------------------------
alias fai_eei_params params
def params
return fai_eei_params if (!$game_system.enhance_weapons[id] rescue true)
arr = []
fai_eei_params.each_with_index{|v, i|
next arr << v if !enhance_param_ids.include?(i)
p [name, i, enhance_rates[i]]
arr << v * (100 + enhance_rates[i] * enhanced_level) / 100
}
arr
end
#--------------------------------------------------------------------------
# ○ 個別処理
#--------------------------------------------------------------------------
def default_param_ids
FAI_EEI::ENHANCE_WEAPON_PARAM
end
def enhanced_level
$game_system.enhance_weapons[id] ||= 0 rescue 0
end
def equip_enhance
super; $game_system.enhance_weapons[id] += 1
end
end
class RPG::Armor < RPG::EquipItem
#--------------------------------------------------------------------------
# ★ パラメータ群
#--------------------------------------------------------------------------
alias fai_eei_params params
def params
return fai_eei_params if (!$game_system.enhance_armors[id] rescue true)
arr = []
fai_eei_params.each_with_index{|v, i|
next arr << v if !enhance_param_ids.include?(i)
arr << v * (100 + enhance_rates[i] * enhanced_level) / 100
}
arr
end
#--------------------------------------------------------------------------
# ○ 個別処理
#--------------------------------------------------------------------------
def default_param_ids
FAI_EEI::ENHANCE_ARMOR_PARAM
end
def enhanced_level
$game_system.enhance_armors[id] ||= 0 rescue 0
end
def equip_enhance
super; $game_system.enhance_armors[id] += 1
end
end
#==============================================================================
# ■ Game_System
#==============================================================================
class Game_System
#--------------------------------------------------------------------------
# ○ 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :enhance_weapons
attr_accessor :enhance_armors
#--------------------------------------------------------------------------
# ★ オブジェクト初期化
#--------------------------------------------------------------------------
alias fai_eei_initialize initialize
def initialize
fai_eei_initialize
init_enhance_equips
end
#--------------------------------------------------------------------------
# ○ 強化値初期化
#--------------------------------------------------------------------------
def init_enhance_equips
@enhance_weapons = {}
@enhance_armors = {}
end
end
#==============================================================================
# ■ Game_Party
#==============================================================================
class Game_Party < Game_Unit
#--------------------------------------------------------------------------
# ★ スキル/アイテムの使用可能判定
#--------------------------------------------------------------------------
alias fai_eei_usable? usable?
def usable?(item)
if in_battle || !item.is_a?(RPG::EquipItem)
fai_eei_usable?(item)
else
if !FAI_EEI::LAST_ONE_USE && item_number(item) == 1
return false if FAI_EEI::LAST_ONE_USE == nil
return false if !members_equip_include?(item)
end
item.enhanceable?
end
end
#--------------------------------------------------------------------------
# ○ 装備の強化
#--------------------------------------------------------------------------
def enhance_equip(item)
return if !item.is_a?(RPG::EquipItem)
lose_item(item, 1); item.equip_enhance
FAI_EEI::ENHANCE_EQUIP_SE.play if FAI_EEI::ENHANCE_EQUIP_SE
end
def last_one?(item, include_equip = true)
item_number(item) == 1 && (!include_equip || !members_equip_include?(item))
end
end
class Window_EnhanceDetermine < Window_HorzCommand
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(x, y)
super(x, y)
self.openness = 0
end
#--------------------------------------------------------------------------
# ● ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width; contents_width + standard_padding * 2; end
#--------------------------------------------------------------------------
# ● ウィンドウ高さの取得
#--------------------------------------------------------------------------
def window_height; fitting_height(2); end
#--------------------------------------------------------------------------
# ● 桁数の取得
#--------------------------------------------------------------------------
def col_max; 2; end
#--------------------------------------------------------------------------
# ● ウィンドウ内容の幅を計算
#--------------------------------------------------------------------------
def contents_width
b = Bitmap.new(540, 416)
if !disposed? && !contents.disposed?
if FAI_EEI::DETERMINE_WINDOW_TXT.is_a?(Array)
length=FAI_EEI::DETERMINE_WINDOW_TXT.map{|t|text_size_ex(t).width}.max
else
length = text_size_ex(FAI_EEI::DETERMINE_WINDOW_TXT).width
end
else
if FAI_EEI::DETERMINE_WINDOW_TXT.is_a?(Array)
length=FAI_EEI::DETERMINE_WINDOW_TXT.map{|t|b.text_size(t).width}.max
else
length = b.text_size(FAI_EEI::DETERMINE_WINDOW_TXT).width
end
end
length
#~ [super, length].max
end
#--------------------------------------------------------------------------
# ● ウィンドウ内容の高さを計算
#--------------------------------------------------------------------------
def contents_height
super + line_height
end
def item
@item
end
def item=(item)
@item = item
end
def last_one?
$game_party.last_one?(@item)
end
#--------------------------------------------------------------------------
# ● 項目を描画する矩形の取得
#--------------------------------------------------------------------------
def item_rect(index)
rect = super
rect.y += line_height
rect
end
def text_size_ex(str)
reset_font_settings
str = convert_escape_characters(str)
pos = {:x => 0, :y => 0, :new_x => 0, :height => calc_line_height(str)}
process_character_s(str.slice!(0, 1), str, pos) until str.empty?
Rect.new(0, 0, pos[:x], pos[:height])
end
#--------------------------------------------------------------------------
# ● 文字の処理
#--------------------------------------------------------------------------
def process_character_s(c, str, pos)
case c
when "\e" # 制御文字
process_escape_character_s(obtain_escape_code(str), str, pos)
else # 普通の文字
pos[:x] += text_size(c).width
end
end
#--------------------------------------------------------------------------
# ● 制御文字の処理
# code : 制御文字の本体部分(「\C[1]」なら「C」)
#--------------------------------------------------------------------------
def process_escape_character_s(code, text, pos)
case code.upcase
when 'C'
obtain_escape_param(text)
when 'I'
obtain_escape_param(text); pos[:x] += 24
when '{'
contents.font.size += 8 if contents.font.size <= 64
when '}'
contents.font.size -= 8 if contents.font.size >= 16
end
end
#--------------------------------------------------------------------------
# ● コマンドリストの作成
#--------------------------------------------------------------------------
def make_command_list
add_command("はい", :ok); add_command("いいえ", :cancel)
end
def determine_text
if FAI_EEI::DETERMINE_WINDOW_TXT.is_a?(Array)
FAI_EEI::DETERMINE_WINDOW_TXT[last_one? ? 1 : 0]
else
FAI_EEI::DETERMINE_WINDOW_TXT
end
end
def draw_all_items
self.contents = Bitmap.new(contents_width, contents_height)
x = (contents_width - text_size_ex(determine_text).width) / 2
draw_text_ex(x, 0, determine_text)
super
end
def refresh
self.width = window_width
super
end
end
#==============================================================================
# ■ Scene_Item
#==============================================================================
class Scene_Item < Scene_ItemBase
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
alias fai_eei_start start
def start
fai_eei_start
create_determine_window
end
def create_determine_window
@determine_window = Window_EnhanceDetermine.new(0, 0)
@determine_window.viewport = @viewport
@determine_window.x = (Graphics.width - @determine_window.width) / 2
@determine_window.y = (Graphics.height - @determine_window.height) / 2
@determine_window.set_handler(:ok, method(:on_determinew_ok))
@determine_window.set_handler(:cancel, method(:on_determinew_cancel))
end
#--------------------------------------------------------------------------
# ★ アイテムの決定
#--------------------------------------------------------------------------
alias fai_eei_determine_item determine_item
def determine_item
if item.is_a?(RPG::EquipItem)
@determine_window.item = item
if determine_window_show?
@determine_window.refresh
@determine_window.open
@determine_window.select(determine_window_no? ? 1 : 0)
@determine_window.activate
else
on_determinew_ok
end
else
fai_eei_determine_item
end
end
def determine_window_show?
return false if FAI_EEI::DETERMINE_WINDOW == nil
FAI_EEI::DETERMINE_WINDOW || @determine_window.last_one?
end
def determine_window_no?
return false if FAI_EEI::DETERMINE_WINDOW_NO == nil
FAI_EEI::DETERMINE_WINDOW_NO || @determine_window.last_one?
end
#--------------------------------------------------------------------------
# ○ 装備の使用
#--------------------------------------------------------------------------
def use_equip_item
play_se_for_item
$game_party.enhance_equip(item)
@actor_window.refresh
end
def on_determinew_ok
use_equip_item
@determine_window.close
activate_item_window
end
def on_determinew_cancel
@determine_window.close
activate_item_window
end
end
汎用性と拡張性の確保のためです、ご了承ください。
※2017/2/11 10:28 名前に強化値を反映する機能つけるの忘れてた
※2017/2/11 12:18 Twitterで装備を全部消費してしまう可能性を指摘されたので
※2017/2/11 13:05 説明文を間違えていたので。使用する分には問題ありません。
最後に編集したユーザー faida on 2017年2月11日(土) 13:04 [ 編集 2 回目 ]
------------------------------------------------------------------
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
Re: 同名装備消費で強化
ありがとうございます!!
希望通りの動作でイメージもバッチリでした♪
これでツクールフェスで作ったゲームのシステムを再現できます。
後からで申し訳ないのですが、もしよろしければ一つだけ追加で「消費しますか?」はい/いいえ、と言った確認を追加でお願いできますでしょうか?
こんな追加のお願いに時間を使って頂けるならお願い致します。
希望通りの動作でイメージもバッチリでした♪
これでツクールフェスで作ったゲームのシステムを再現できます。
後からで申し訳ないのですが、もしよろしければ一つだけ追加で「消費しますか?」はい/いいえ、と言った確認を追加でお願いできますでしょうか?
こんな追加のお願いに時間を使って頂けるならお願い致します。
Re: 同名装備消費で強化
ちょうどその機能をつけようと思ってあくせくしてたところでした。
修正しましたのでどうぞ。
修正しましたのでどうぞ。
------------------------------------------------------------------
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
Re: 同名装備消費で強化
本当にありがとうございます!!
要望以上の機能までつけていただいて感謝と満足度120%です!
ありがとうございました♪
要望以上の機能までつけていただいて感謝と満足度120%です!
ありがとうございました♪
Re: 【解決済み】同名装備消費で強化
素晴らしいスクリプトなので使わせていただきたいのですが
割合とは別に固定値で増加できるように改造していただきたいのですが無理でしょうか
割合とは別に固定値で増加できるように改造していただきたいのですが無理でしょうか
Re: 【解決済み】同名装備消費で強化
こんばんは。
遅くなりましたが、割合と固定値の併用ができるようになりました。
固定値は小数で指定できます。
固定値の扱いがちょっと分からなかったので、設定項目にて
固定値の扱いを変更できるようにもしています。
(一応、前バージョンも残しておきます)
遅くなりましたが、割合と固定値の併用ができるようになりました。
固定値は小数で指定できます。
固定値の扱いがちょっと分からなかったので、設定項目にて
固定値の扱いを変更できるようにもしています。
(一応、前バージョンも残しておきます)
コード: 全て選択
=begin
◆概要
装備の強化をアイテム画面で行えるようにします。
◆機能
・装備をアイテム画面で使用すると装備を消費して強化できます。
・メモ欄に<最大強化値 n>でn回使用できます。
・メモ欄に<強化値 x>で能力値がxずつ上昇します。(小数可)
・メモ欄に<強化値 n%>で能力値がn%ずつ上昇します。
・メモ欄に<個別強化値 id, x>でidの能力値がxずつ上昇します。
・メモ欄に<個別強化値 id, n%>でidの能力値がn%ずつ上昇します。
・メモ欄に<強化パラメータ [a,b,c]>でa,b,cの能力値を強化できます。
・イベントコマンドで「$game_system.enhance_weapons[id] = n」で
idの武器の強化値をnに変更できます。
・イベントコマンドで「$game_system.enhance_armors[id] = n」で
idの防具の強化値をnに変更できます。
◆仕様
・最大値はゲーム中に変更できません。
◆使用上の注意
・★……エイリアス ○……新規定義
◆作者:faida @faida3983
◆更新履歴
ver1.0 : 公開
ver1.1 : 名前に強化値を表示する機能付加
ver1.2 : 残り1個の時の連打防止機能付加
ver1.21: 説明文が間違っていたのを修正
ver2.0 : 固定値対応
=end
module FAI_EEI
# 設定項目:強化値を表示する しない場合はnil する場合は文字列
SHOW_ENHANCE_LEVEL = "+%s"
# 設定項目:強化できるパラメータ
ENHANCE_WEAPON_PARAM = [2, 3]
ENHANCE_ARMOR_PARAM = [3, 5]
# 設定項目:割合強化の前に固定値を足す
# true:(装備基本値 + 固定値) * (100 + 割合)
# false:(装備基本値 * (100 + 割合)) + 固定値
ENHANCE_PLUS_BEFORE_RATE = false
# 設定項目:強化時に鳴らすSE いらなければ「ENHANCE_EQUIP_SE = nil」
ENHANCE_EQUIP_SE = RPG::SE.new("Heal2", 80, 100)
# 設定項目:残り1個の時
# true:使用できる false:装備品になければ使用できない nil:使用できない
# 確認ウィンドウを使用する際はtrueにしてください。
LAST_ONE_USE = true
# 設定項目:確認ウィンドウを表示する
# true:常に表示する false:残り1個(装備品含む)の時表示する nil:常に表示しない
DETERMINE_WINDOW = false
# 設定項目:確認ウィンドウのカーソルを「いいえ」にする
# true:常に「いいえ」 false:残り1個(装備品含む)の時「いいえ」 nil:常に「はい」
DETERMINE_WINDOW_NO = false
# 設定項目:確認ウィンドウに表示する文章
# 配列にすると残り1個(装備品含む)の時に文章が変わります。
DETERMINE_WINDOW_TXT = ["この装備を1個消費して強化します。",
"この装備は\eC[10]残り1個\eC[0]です。消費して強化しますか?"]
end
class RPG::EquipItem < RPG::BaseItem
#--------------------------------------------------------------------------
# ○ メモ欄読み込み
#--------------------------------------------------------------------------
def enhance_max
return @enhance_max if @enhance_max
@enhance_max = (note =~ /<最大強化値\s*(\d+)>/ ? $1.to_i : 0)
end
def enhance_plus
enhance_note if !@enhance_plus; @enhance_plus
end
def enhance_rates
enhance_note if !@enhance_rates; @enhance_rates
end
def enhance_note
val = (note =~ /<強化値\s*(\d+)[%%]>/ ? $1.to_i : 0)
@enhance_rates = [val, val, val, val, val, val, val, val]
val = (note =~ /<強化値\s*(\d+(?:\.\d+)?)>/ ? $1.to_f: 0.0)
@enhance_plus = [val, val, val, val, val, val, val, val]
note.each_line{|line|
if line =~ /<個別強化値\s*(\d+)\,\s*(\d+)[%%]>/
@enhance_rates[$1.to_i] = $2.to_i
elsif line =~ /<個別強化値\s*(\d+)\,\s*(\d+(?:\.\d+)?)>/
@enhance_plus[$1.to_i] = $2.to_f
end
}
end
def enhance_param_ids
return @enhance_param_ids if @enhance_param_ids
arr = default_param_ids
@enhance_param_ids=(note =~ /<強化パラメータ\s*(\[.+\])>/ ? eval($1) : arr)
end
#--------------------------------------------------------------------------
# ○ 共通処理
#--------------------------------------------------------------------------
alias fai_eei_name name
def name
return fai_eei_name if !FAI_EEI::SHOW_ENHANCE_LEVEL || enhanced_level == 0
fai_eei_name + sprintf(FAI_EEI::SHOW_ENHANCE_LEVEL, enhanced_level)
end
def default_param_ids
[]
end
def enhanceable?
return false if enhance_max == 0 || enhance_max == enhanced_level
return false if enhance_rates.all?{|v|v==0} && enhance_plus.all?{|v|v==0}
return false if enhance_param_ids.empty?
true
end
def enhanced_level
0
end
def equip_enhance
if !($game_system.enhance_weapons && $game_system.enhance_armors)
$game_system.init_enhance_equips
end
enhanced_level
end
end
class RPG::Weapon < RPG::EquipItem
#--------------------------------------------------------------------------
# ★ パラメータ群
#--------------------------------------------------------------------------
alias fai_eei_params params
def params
return fai_eei_params if (!$game_system.enhance_weapons[id] rescue true)
arr = []
fai_eei_params.each_with_index{|v, i|
next arr << v if !enhance_param_ids.include?(i)
plus = (enhance_plus[i] * enhanced_level).to_i
if FAI_EEI::ENHANCE_PLUS_BEFORE_RATE
arr << (v + plus) * (100 + enhance_rates[i] * enhanced_level) / 100
else
arr << v * (100 + enhance_rates[i] * enhanced_level) / 100 + plus
end
}
arr
end
#--------------------------------------------------------------------------
# ○ 個別処理
#--------------------------------------------------------------------------
def default_param_ids
FAI_EEI::ENHANCE_WEAPON_PARAM
end
def enhanced_level
$game_system.enhance_weapons[id] ||= 0 rescue 0
end
def equip_enhance
super; $game_system.enhance_weapons[id] += 1
end
end
class RPG::Armor < RPG::EquipItem
#--------------------------------------------------------------------------
# ★ パラメータ群
#--------------------------------------------------------------------------
alias fai_eei_params params
def params
return fai_eei_params if (!$game_system.enhance_armors[id] rescue true)
arr = []
fai_eei_params.each_with_index{|v, i|
next arr << v if !enhance_param_ids.include?(i)
arr << v * (100 + enhance_rates[i] * enhanced_level) / 100
}
arr
end
#--------------------------------------------------------------------------
# ○ 個別処理
#--------------------------------------------------------------------------
def default_param_ids
FAI_EEI::ENHANCE_ARMOR_PARAM
end
def enhanced_level
$game_system.enhance_armors[id] ||= 0 rescue 0
end
def equip_enhance
super; $game_system.enhance_armors[id] += 1
end
end
#==============================================================================
# ■ Game_System
#==============================================================================
class Game_System
#--------------------------------------------------------------------------
# ○ 公開インスタンス変数
#--------------------------------------------------------------------------
attr_accessor :enhance_weapons
attr_accessor :enhance_armors
#--------------------------------------------------------------------------
# ★ オブジェクト初期化
#--------------------------------------------------------------------------
alias fai_eei_initialize initialize
def initialize
fai_eei_initialize
init_enhance_equips
end
#--------------------------------------------------------------------------
# ○ 強化値初期化
#--------------------------------------------------------------------------
def init_enhance_equips
@enhance_weapons = {}
@enhance_armors = {}
end
end
#==============================================================================
# ■ Game_Party
#==============================================================================
class Game_Party < Game_Unit
#--------------------------------------------------------------------------
# ★ スキル/アイテムの使用可能判定
#--------------------------------------------------------------------------
alias fai_eei_usable? usable?
def usable?(item)
if in_battle || !item.is_a?(RPG::EquipItem)
fai_eei_usable?(item)
else
if !FAI_EEI::LAST_ONE_USE && item_number(item) == 1
return false if FAI_EEI::LAST_ONE_USE == nil
return false if !members_equip_include?(item)
end
item.enhanceable?
end
end
#--------------------------------------------------------------------------
# ○ 装備の強化
#--------------------------------------------------------------------------
def enhance_equip(item)
return if !item.is_a?(RPG::EquipItem)
lose_item(item, 1); item.equip_enhance
FAI_EEI::ENHANCE_EQUIP_SE.play if FAI_EEI::ENHANCE_EQUIP_SE
end
def last_one?(item, include_equip = true)
item_number(item) == 1 && (!include_equip || !members_equip_include?(item))
end
end
class Window_EnhanceDetermine < Window_HorzCommand
#--------------------------------------------------------------------------
# ● オブジェクト初期化
#--------------------------------------------------------------------------
def initialize(x, y)
super(x, y)
self.openness = 0
end
#--------------------------------------------------------------------------
# ● ウィンドウ幅の取得
#--------------------------------------------------------------------------
def window_width; contents_width + standard_padding * 2; end
#--------------------------------------------------------------------------
# ● ウィンドウ高さの取得
#--------------------------------------------------------------------------
def window_height; fitting_height(2); end
#--------------------------------------------------------------------------
# ● 桁数の取得
#--------------------------------------------------------------------------
def col_max; 2; end
#--------------------------------------------------------------------------
# ● ウィンドウ内容の幅を計算
#--------------------------------------------------------------------------
def contents_width
b = Bitmap.new(540, 416)
if !disposed? && !contents.disposed?
if FAI_EEI::DETERMINE_WINDOW_TXT.is_a?(Array)
length=FAI_EEI::DETERMINE_WINDOW_TXT.map{|t|text_size_ex(t).width}.max
else
length = text_size_ex(FAI_EEI::DETERMINE_WINDOW_TXT).width
end
else
if FAI_EEI::DETERMINE_WINDOW_TXT.is_a?(Array)
length=FAI_EEI::DETERMINE_WINDOW_TXT.map{|t|b.text_size(t).width}.max
else
length = b.text_size(FAI_EEI::DETERMINE_WINDOW_TXT).width
end
end
length
#~ [super, length].max
end
#--------------------------------------------------------------------------
# ● ウィンドウ内容の高さを計算
#--------------------------------------------------------------------------
def contents_height
super + line_height
end
def item
@item
end
def item=(item)
@item = item
end
def last_one?
$game_party.last_one?(@item)
end
#--------------------------------------------------------------------------
# ● 項目を描画する矩形の取得
#--------------------------------------------------------------------------
def item_rect(index)
rect = super
rect.y += line_height
rect
end
def text_size_ex(str)
reset_font_settings
str = convert_escape_characters(str)
pos = {:x => 0, :y => 0, :new_x => 0, :height => calc_line_height(str)}
process_character_s(str.slice!(0, 1), str, pos) until str.empty?
Rect.new(0, 0, pos[:x], pos[:height])
end
#--------------------------------------------------------------------------
# ● 文字の処理
#--------------------------------------------------------------------------
def process_character_s(c, str, pos)
case c
when "\e" # 制御文字
process_escape_character_s(obtain_escape_code(str), str, pos)
else # 普通の文字
pos[:x] += text_size(c).width
end
end
#--------------------------------------------------------------------------
# ● 制御文字の処理
# code : 制御文字の本体部分(「\C[1]」なら「C」)
#--------------------------------------------------------------------------
def process_escape_character_s(code, text, pos)
case code.upcase
when 'C'
obtain_escape_param(text)
when 'I'
obtain_escape_param(text); pos[:x] += 24
when '{'
contents.font.size += 8 if contents.font.size <= 64
when '}'
contents.font.size -= 8 if contents.font.size >= 16
end
end
#--------------------------------------------------------------------------
# ● コマンドリストの作成
#--------------------------------------------------------------------------
def make_command_list
add_command("はい", :ok); add_command("いいえ", :cancel)
end
def determine_text
if FAI_EEI::DETERMINE_WINDOW_TXT.is_a?(Array)
FAI_EEI::DETERMINE_WINDOW_TXT[last_one? ? 1 : 0]
else
FAI_EEI::DETERMINE_WINDOW_TXT
end
end
def draw_all_items
self.contents = Bitmap.new(contents_width, contents_height)
x = (contents_width - text_size_ex(determine_text).width) / 2
draw_text_ex(x, 0, determine_text)
super
end
def refresh
self.width = window_width
super
end
end
#==============================================================================
# ■ Scene_Item
#==============================================================================
class Scene_Item < Scene_ItemBase
#--------------------------------------------------------------------------
# ● 開始処理
#--------------------------------------------------------------------------
alias fai_eei_start start
def start
fai_eei_start
create_determine_window
end
def create_determine_window
@determine_window = Window_EnhanceDetermine.new(0, 0)
@determine_window.viewport = @viewport
@determine_window.x = (Graphics.width - @determine_window.width) / 2
@determine_window.y = (Graphics.height - @determine_window.height) / 2
@determine_window.set_handler(:ok, method(:on_determinew_ok))
@determine_window.set_handler(:cancel, method(:on_determinew_cancel))
end
#--------------------------------------------------------------------------
# ★ アイテムの決定
#--------------------------------------------------------------------------
alias fai_eei_determine_item determine_item
def determine_item
if item.is_a?(RPG::EquipItem)
@determine_window.item = item
if determine_window_show?
@determine_window.refresh
@determine_window.open
@determine_window.select(determine_window_no? ? 1 : 0)
@determine_window.activate
else
on_determinew_ok
end
else
fai_eei_determine_item
end
end
def determine_window_show?
return false if FAI_EEI::DETERMINE_WINDOW == nil
FAI_EEI::DETERMINE_WINDOW || @determine_window.last_one?
end
def determine_window_no?
return false if FAI_EEI::DETERMINE_WINDOW_NO == nil
FAI_EEI::DETERMINE_WINDOW_NO || @determine_window.last_one?
end
#--------------------------------------------------------------------------
# ○ 装備の使用
#--------------------------------------------------------------------------
def use_equip_item
play_se_for_item
$game_party.enhance_equip(item)
@actor_window.refresh
end
def on_determinew_ok
use_equip_item
@determine_window.close
activate_item_window
end
def on_determinew_cancel
@determine_window.close
activate_item_window
end
end
------------------------------------------------------------------
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
自作の(改造でない)スクリプト、プラグイン素材に
関しては、リードミーもしくは作中に
「faida」と記名していただければ
利用可能です。
Re: 【解決済み】同名装備消費で強化
ありがとうございます、利用させていただきます