#============================================================================== # ■ 武器強化システム # @version 0.29 10/06/05 # @author さば缶 #------------------------------------------------------------------------------ # # ■武器を個別に強化できるスクリプトです。 # 武器、防具を入手時にも、ランダムで強化されるような設定もできます。 # # ※"武器防具に固有ID" スクリプトが別途必要です。 # ※"アイテム鑑定" と併用する場合、"アイテム鑑定"よりも上に置いてください。 # そして別途併用スクリプトを入れてください。 # # ■使い方 # ・武器、防具の設定編 # # 武器、防具のメモ欄に、MAXという文字のあと半角空白をあけて、 # 数値を設定してください。 # これが、その武器、防具の最大強化値になります。 # # 例: # MAX 5 # # これが設定されない場合、DEFAULT_MAX の値が使われます。 # # # ■強化アイテムの作り方 # アイテムのメモ欄に、以下のように記述します。 # GRINDER<<装備部位にあたるID>> # # <<装備部位にあたるID>>は、デフォルトでは以下のようになっています。 # 1・・・武器(二刀流の場合の武器2は強化できません) # 2・・・盾 # 3・・・頭防具 # 4・・・身体防具 # 5・・・装飾品 # # 例: # GRINDER1 # # GRINDER3 # # # ■イベントでの装備強化の方法 # イベントのスクリプトで、以下のように記述します。 # <>.temper(<<装備部位にあたるID>>, <<強化値>>) # # <>は、 # $game_party.members[0] や、 # $game_actors[1] # などで取得してください。 # # <<装備部位にあたるID>>は、デフォルトでは以下のようになっています。 # 1・・・武器(二刀流の場合の武器2は強化できません) # 2・・・盾 # 3・・・頭防具 # 4・・・身体防具 # 5・・・装飾品 # # <<強化値>>は1 以上の整数です。 # # # ■プラス値も含めた、武器・防具の所持判定 # ・武器の所持判定 # イベントの条件分岐のスクリプトで、以下のように記述します。 # $game_party.has_weapon?(武器ID, プラス値, 装備を含めるかどうか) # # ・防具の所持判定 # イベントの条件分岐のスクリプトで、以下のように記述します。 # $game_party.has_armor?(防具ID, プラス値, 装備を含めるかどうか) # # ・例 # $game_party.has_weapon?(2, 10, false) # 武器ID2 で、+10の強化がされた武器を持っているかを判定します。 # 装備品は含めません # # $game_party.has_armor?(3, 4, true) # 防具ID3 で、+4の強化がされた防具を持っているかを判定します。 # 装備品も含めます # # # ■プラス値も含めた、武器・防具の削除 # ・武器の削除 # イベントのスクリプトで、以下のように記述します。 # $game_party.remove_weapon(武器ID, プラス値, 装備を含めるかどうか) # # ・防具の削除 # イベントのスクリプトで、以下のように記述します。 # $game_party.remove_armor(防具ID, プラス値, 装備を含めるかどうか) # # # ・例 # $game_party.remove_weapon(2, 10, false) # 武器ID2 で、+10の強化がされた武器を削除します。 # 装備品は含めません # # $game_party.remove_armor(3, 4, true) # 防具ID3 で、+4の強化がされた防具を削除します。 # 装備品も含めます # # # ■アクターの装備判定 # ・指定の部位の装備の強化値が X かどうか? # イベントの条件分岐のスクリプトで、以下のように記述します。 # $game_actors[アクターID].equip?(装備ID, プラス値) # # ・指定の部位の装備の強化値が X 以上かどうか? # イベントの条件分岐のスクリプトで、以下のように記述します。 # $game_actors[アクターID].equip_ge?(装備ID, プラス値) # # ・例 # ID1 のアクターの武器の強化値が 1 以上かどうかを判定する # $game_actors[1].equip_ge?(1, 1) # #============================================================================== module Saba module TemperedWeapon # このスイッチをONにすると、武器防具を入手時 # (敵からのドロップ、宝箱などのイベントなど) # ランダムで強化されることがなくなります。 NOT_TEMPERE_SWITCH = 149 # 武器取得時の、ランダム強化のオッズです。 # 矢印の左の数値:強化値 # 矢印の右の数値:オッズ WEAPON_ODDS = { 0=>50, 1=>20, 2=>15, 3=>10, 4=>8, 5=>6, 6=>3 } # 防具取得時の、ランダム強化のオッズです。 # 矢印の左の数値:強化値 # 矢印の右の数値:オッズ ARMOR_ODDS = { 0=>50, 1=>15, 2=>8, 3=>5, 4=>2 } # 最大強化値が設定されていない武器、防具の、デフォルトの最大強化値です。 DEFAULT_MAX = 10 end end unless $@ # 武器の強化時の計算式を設定します。 class RPG::Weapon #-------------------------------------------------------------------------- # ● 武器の攻撃力を返します。 # ・変数説明 #  saba_temper_atk デフォルトの武器攻撃力 # plus 強化の値 #-------------------------------------------------------------------------- alias saba_temper_atk atk def atk return saba_temper_atk + plus * 3 # 元攻撃力 + (強化の値 * 3) end #-------------------------------------------------------------------------- # ● 武器の命中力を返します。 # ・変数説明 #  saba_temper_hit デフォルトの武器命中力 # plus 強化の値 #-------------------------------------------------------------------------- alias saba_temper_hit hit def hit return saba_temper_hit # デフォルトでは、強化が命中に影響を及ばさないようになっています。 end #-------------------------------------------------------------------------- # ● 武器の防御力を返します。 # ・変数説明 #  saba_temper_def デフォルトの武器防御力 # plus 強化の値 #-------------------------------------------------------------------------- alias saba_temper_def def def def return saba_temper_def # デフォルトでは、強化が防御に影響を及ばさないようになっています。 end #-------------------------------------------------------------------------- # ● 武器の精神力を返します。 # ・変数説明 #  saba_temper_spi デフォルトの武器精神力 # plus 強化の値 #-------------------------------------------------------------------------- alias saba_temper_spi spi def spi # IDが 1~10の武器は精神も上昇 #return saba_temper_spi + plus if (1..10).include?(id) return saba_temper_spi # デフォルトでは、強化が精神に影響を及ばさないようになっています。 end #-------------------------------------------------------------------------- # ● 武器の敏捷力を返します。 # ・変数説明 #  saba_temper_ デフォルトの武器敏捷力 # plus 強化の値 #-------------------------------------------------------------------------- alias saba_temper_agi agi def agi return saba_temper_agi # デフォルトでは、強化が敏捷に影響を及ばさないようになっています。 end #-------------------------------------------------------------------------- # ● 武器強化の料金です。 #-------------------------------------------------------------------------- def temper_price # 基本価格の10分の1*強化値 return (price / 10.0 * (plus + 1)).to_i end end # 防具の強化時の計算式を設定します。 class RPG::Armor #-------------------------------------------------------------------------- # ● 防具の攻撃力を返します。 # ・変数説明 #  saba_temper_atk デフォルトの武器攻撃力 # plus 強化の値 #-------------------------------------------------------------------------- alias saba_temper_atk atk def atk return saba_temper_atk # デフォルトでは、強化が攻撃力に影響を及ばさないようになっています。 end #-------------------------------------------------------------------------- # ● 防具の防御力を返します。 # ・変数説明 #  saba_temper_def デフォルトの防具の防御力 # plus 強化の値 #-------------------------------------------------------------------------- alias saba_temper_def def def def return saba_temper_def + plus # 元防御力 + 強化の値 end #-------------------------------------------------------------------------- # ● 防具の回避力を返します。 # ・変数説明 #  saba_temper_eva デフォルトの防具の回避力 # plus 強化の値 #-------------------------------------------------------------------------- alias saba_temper_eva eva def eva return saba_temper_eva + plus # 元回避力 + 強化の値 end #-------------------------------------------------------------------------- # ● 防具の精神力を返します。 # ・変数説明 #  saba_temper_spi デフォルトの防具精神力 # plus 強化の値 #-------------------------------------------------------------------------- alias saba_temper_spi spi def spi return saba_temper_spi # デフォルトでは、強化が精神に影響を及ばさないようになっています。 end #-------------------------------------------------------------------------- # ● 防具の敏捷力を返します。 # ・変数説明 #  saba_temper_agi デフォルトの防具敏捷力 # plus 強化の値 #-------------------------------------------------------------------------- alias saba_temper_agi agi def agi return saba_temper_agi # デフォルトでは、強化が敏捷に影響を及ばさないようになっています。 end #-------------------------------------------------------------------------- # ● 防具強化の料金です。 #-------------------------------------------------------------------------- def temper_price # 基本価格の10分の1*強化値 return (price / 10.0 * (plus + 1)).to_i end end end # ------------カスタマイズ項目はここまで------------- module Saba module Checker def self.ex_define?(item, name) return false if item == nil item.note.split(/[\r\n]+/).each do |line| elements = line.split(/\s+/) next unless elements.size == 2 return true if elements[0] == name end return false end def self.get_ex_value(item, name) return 0 if item == nil item.note.split(/[\r\n]+/).each do |line| elements = line.split(/\s+/) next unless elements.size == 2 next unless elements[0] == name return elements[1].to_i end return 0 end end end $imported = {} if $imported == nil $imported["SabaTemperedWeapon"] = true class RPG::Item def grinder? setup_grinder return @grinder != 0 end def grinder_type setup_grinder return @grinder end def setup_grinder return if @grinder != nil note.split(/[\r\n]+/).each do |line| if line[/GRINDER([0-9]*)/].to_a[0] @grinder = $1.to_i @grinder = 1 if @grinder == 0 return end end @grinder = 0 end end class RPG::BaseItem attr_accessor :plus def plus return 0 if @plus == nil return @plus end def not_tempare? return false if $game_switches == nil switch = Saba::TemperedWeapon::NOT_TEMPERE_SWITCH return $game_switches[switch] == true end def max_plus if Saba::Checker::ex_define?(self, "MAX") return Saba::Checker::get_ex_value(self, "MAX") else return Saba::TemperedWeapon::DEFAULT_MAX end end def max_plus? @plus == max_plus end def add_plus(n) @plus += n @plus = [max_plus, @plus].min end end class RPG::Armor alias saba_plus_clone clone def clone c = saba_plus_clone c.lot_plus return c end def lot_plus @plus = decide_plus(max_plus) end def decide_plus(max) return 0 if not_tempare? roulette = [] for i in 0..max odds = Saba::TemperedWeapon::ARMOR_ODDS[i] next if odds == nil odds.times do roulette.push(i) end end return roulette.size > 0 ? roulette[rand(roulette.size)] : 0 end def name return @name if @plus == nil return @name if $imported["SabaIdentify"] && (! identified?) if @plus > 0 return @name + " +" + @plus.to_s else return @name end end end class RPG::Weapon alias saba_plus_clone clone def clone c = saba_plus_clone c.lot_plus return c end def lot_plus @plus = decide_plus(max_plus) end def decide_plus(max) return 0 if not_tempare? roulette = [] for i in 0..max odds = Saba::TemperedWeapon::WEAPON_ODDS[i] next if odds == nil odds.times do roulette.push(i) end end return roulette.size > 0 ? roulette[rand(roulette.size)] : 0 end def name return @name if @plus == nil return @name if $imported["SabaIdentify"] && (! identified?) if @plus > 0 return @name + " +" + @plus.to_s else return @name end end end # 強化用アイテム class Game_Battler #-------------------------------------------------------------------------- # ○ アイテムの適用テスト (追加定義) # user : アイテムの使用者 # item : アイテム #-------------------------------------------------------------------------- alias saba_grinder_item_test item_test def item_test(user, item) if actor? && item.grinder? type = item.grinder_type - 1 return false if type == 1 && two_swords_style equip = equips[type] return false if equip == nil return ! equip.max_plus? end return saba_grinder_item_test(user, item) end alias saba_grinder_item_effective? item_effective? def item_effective?(user, item) if actor? && item.grinder? return item_test(user, item) end return saba_grinder_item_effective?(user, item) end #-------------------------------------------------------------------------- # ○ アイテムの効果適用 (追加定義) # user : アイテムの使用者 # item : アイテム #-------------------------------------------------------------------------- alias saba_grinder_item_effect item_effect def item_effect(user, item) clear_action_results if actor? && item.grinder? unless item_effective?(user, item) @skipped = true return end type = item.grinder_type - 1 return false if type == 1 && two_swords_style equip = equips[type] return false if equip == nil equip.add_plus(1) return end saba_grinder_item_effect(user, item) end end class Game_Actor def temper(type, plus) equip = equips[type - 1] return if equip == nil equip.add_plus(plus) end #-------------------------------------------------------------------------- # ○ 装備の所持判定 # type : 装備タイプ # plus : 装備タイプのプラス値 #-------------------------------------------------------------------------- def equip?(type, plus) equip = equips[type - 1] return false if equip == nil return equip.plus == plus end #-------------------------------------------------------------------------- # ○ 装備の所持判定 # type : 装備タイプ # plus : 装備のプラス値。この値以上の装備の場合、true を返します #-------------------------------------------------------------------------- def equip_ge?(type, plus) equip = equips[type - 1] return false if equip == nil return equip.plus >= plus end end class Scene_Shop alias saba_plus_decide_number_input decide_number_input def decide_number_input case @command_window.index when 0 @item = @item.clone @item.plus = 0 end saba_plus_decide_number_input end end class Game_Party #-------------------------------------------------------------------------- # ○ 武器の所持判定 # id : 武器の ID # plus : 武器のプラス値 # include_equip : 装備品も含めるかどうか #-------------------------------------------------------------------------- def has_weapon?(id, plus, include_equip = false) if @weapons[id] @weapons[id].each {|e| return true if e.plus == plus} end if include_equip for actor in members for weapon in actor.weapons.compact if weapon.id == id && weapon.plus == plus return true end end end end return false end #-------------------------------------------------------------------------- # ○ 防具の所持判定 # id : 防具の ID # plus : 防具のプラス値 # include_equip : 装備品も含めるかどうか #-------------------------------------------------------------------------- def has_armor?(id, plus, include_equip = false) if @armors[id] @armors[id].each {|e| return true if e.plus == plus} end if include_equip for actor in members for armor in actor.armors.compact if armor.id == id && armor.plus == plus return true end end end end return false end #-------------------------------------------------------------------------- # ○ 武器の削除 # id : 武器の ID # plus : 武器のプラス値 # include_equip : 装備品も含めるかどうか #-------------------------------------------------------------------------- def remove_weapon(id, plus, include_equip = false) if @weapons[id] @weapons[id].each {|e| if e.plus == plus @weapons[id].delete(e) return end } end if include_equip for actor in members for weapon in actor.weapons.compact if weapon.id == id && weapon.plus == plus actor.discard_equip(weapon) return end end end end end #-------------------------------------------------------------------------- # ○ 防具の削除 # id : 防具の ID # plus : 防具のプラス値 # include_equip : 装備品も含めるかどうか #-------------------------------------------------------------------------- def remove_armor(id, plus, include_equip = false) if @armors[id] @armors[id].each {|e| if e.plus == plus @armors[id].delete(e) return end } end if include_equip for actor in members for armor in actor.armors.compact if armor.id == id && armor.plus == plus actor.discard_equip(armor) return end end end end end end