#============================================================================== # ■ RGSS3 習得済みスキルのアイテム化 Ver1.03 by 星潟 #------------------------------------------------------------------------------ # アクターが習得したスキルをアイテムに変換します。 # これにより、アイテムでスキルを習得するタイプのゲームにおいて # スキルを着脱して別アクターと分け合うようなシステムを構築出来ます。 # 間違って使ってしまったスキル習得アイテムの救済としても使えます。 # # 当方のスキル整理と併せて導入される場合、 # スキル整理のバージョンを1.01以上にした上でこちらを下側にして下さい。 # また、スキル整理のSSTIの項目にこのスクリプトのSTIの部分で設定した # スキルタイプIDを登録して下さい。 #============================================================================== # スキルのメモ欄に設定。 #------------------------------------------------------------------------------ # <習得アイテム化:50> # # スキルタイプ選択時に「アイテム化」を選択し # リスト内にこのスキルがある場合、決定キーを押す事で # このスキルを忘れ、アイテムID50を1つ入手します。 # なお、別にスキル習得アイテムでなくとも変化できます。 # # 習得アイテム化の設定を行っていないアイテムは # アイテム化の項目内に表示されません。 #------------------------------------------------------------------------------ # <習得アイテム化禁止アクター:1> # # ID1のアクターはこのスキルをアイテム化出来ません。 #------------------------------------------------------------------------------ # <習得アイテム化禁止アクター:1,2> # # ID1とID2のアクターはこのスキルをアイテム化出来ません。 #============================================================================== module SkillChangeItem #空のハッシュを用意。 ASC = {} #特定アクターのスキルの習得アイテム化を禁止するスイッチを指定します。 #不要な場合は設定を消して下さい。 #例.ASC[1] = 20 #この場合、スイッチID20がONの時、このアクターのスキルを #習得アイテム化できなくします。 #nilを指定した場合やアクターと紐付けされていない場合は禁止されません。 ASC[1] = nil ASC[2] = nil ASC[3] = nil ASC[4] = nil #アイテム化した際のSEを設定。 #SE名、音量、ピッチの順に指定。 SE = ["Chime2",80,100] #アイテム化の項目の名前を指定。 Name = "アイテム化" #便宜上設定するスキルタイプID。 #ありえない値を推奨。 STI = 10000 #アイテム化設定用キーワードを指定。 Word1 = "習得アイテム化" #習得アイテム化禁止アクター設定用キーワードを指定。 Word2 = "習得アイテム化禁止アクター" end class Window_SkillList < Window_Selectable attr_reader :stype_id #-------------------------------------------------------------------------- # スキルをリストに含めるかどうか #-------------------------------------------------------------------------- alias include_skill_change_item? include? def include?(item) if @stype_id == SkillChangeItem::STI && SceneManager.scene.is_a?(Scene_Skill) @actor && @actor.skill_item_changeable?(item) else include_skill_change_item?(item) end end #-------------------------------------------------------------------------- # スキルを許可状態で表示するかどうか #-------------------------------------------------------------------------- alias enable_skill_change_item? enable? def enable?(item) return enable_skill_change_item?(item) if !@actor or @stype_id != SkillChangeItem::STI or !item i = SkillChangeItem::ASC[@actor.id] !(i && $game_switches[i]) && @actor.skill_item_changeable?(item) end end class Window_SkillCommand < Window_Command #-------------------------------------------------------------------------- # コマンドリストの作成 #-------------------------------------------------------------------------- alias make_command_list_skill_change_item make_command_list def make_command_list return unless @actor make_command_list_skill_change_item add_command(SkillChangeItem::Name,:skill,true,SkillChangeItem::STI) end end class Scene_ItemBase < Scene_MenuBase #-------------------------------------------------------------------------- # アイテムの決定 #-------------------------------------------------------------------------- alias determine_item_skill_change_item determine_item def determine_item (SceneManager.scene.is_a?(Scene_Skill) && @item_window.stype_id == SkillChangeItem::STI) ? skill_change_item : determine_item_skill_change_item end end class Scene_Skill < Scene_ItemBase #-------------------------------------------------------------------------- # スキルをアイテムに変換 #-------------------------------------------------------------------------- def skill_change_item a = SkillChangeItem::SE RPG::SE.new(a[0],a[1],a[2]).play s = item user.forget_skill(s.id) $game_party.gain_item($data_items[s.skill_change_item],1) @item_window.refresh @item_window.index -= 1 if item == nil @item_window.index = 0 if @item_window.index < 0 @help_window.set_item(item) @help_window.refresh @item_window.activate end end class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # スキルをアイテムに変換できるか #-------------------------------------------------------------------------- def skill_item_changeable?(s) s && !s.skill_change_item_seal_actor.include?(self.id) && skill_learn?(s) && $data_items[s.skill_change_item] end end class RPG::Skill #-------------------------------------------------------------------------- # アイテム化した際のアイテムIDを取得 #-------------------------------------------------------------------------- def skill_change_item @skill_change_item ||= /<#{SkillChangeItem::Word1}[::](\d+)>/ =~ note ? $1.to_i : 0 end #-------------------------------------------------------------------------- # 習得アイテム化禁止アクターの取得 #-------------------------------------------------------------------------- def skill_change_item_seal_actor @skill_change_item_seal_actor ||= create_skill_change_item_seal_actor end #-------------------------------------------------------------------------- # 習得アイテム化禁止アクターのデータ作成 #-------------------------------------------------------------------------- def create_skill_change_item_seal_actor (/<#{SkillChangeItem::Word2}[::](\S+)>/ =~ note ? $1.to_s : "").split(/\s*,\s*/).inject([]) {|r,i| r.push(i.to_i)} end end