#============================================================================== # ■ XP-RGSS-65 転職屋 [Ver.1.0.0] by Claimh #------------------------------------------------------------------------------ # ・クラスチェンジを行う転職屋を作ります #------------------------------------------------------------------------------ # ★転職屋の呼び出し方(イベント) # イベントスクリプトから call_job_change # もしくは $scene = Scene_JobChange.new #------------------------------------------------------------------------------ # ★転職屋の呼び出し方(メニュー) # $scene = Scene_JobChange.new(メニューIndex) #============================================================================== module JobChange TEXT=[];C_PRICE=[];C_ENABLE=[];C_COND=[] =begin ☆の付いている項目では、  アクターIDに 0 を指定すると、全アクター共有、 クラスIDに 0 を指定すると、全クラス共有 の設定ができます。 =end ### 転職設定 ################################################################## #--------------------------------------------------------------------------- # 初期状態では非表示にするクラス #--------------------------------------------------------------------------- # 表示状態の変更 # $game_system.jobs[クラスID] = flag # [flag] true=表示 false=非表示 #--------------------------------------------------------------------------- # N_VISIBLE = [クラスID, …] N_VISIBLE = [5] #--------------------------------------------------------------------------- # 説明テキスト #--------------------------------------------------------------------------- # TEXT[クラスID]="説明文" TEXT[0] = "どのクラスに変更しますか?" TEXT[1] = "剣術を得意とする攻撃的なクラス" #--------------------------------------------------------------------------- # お金のやりとりの有無 #--------------------------------------------------------------------------- USE_GOLD = true #--------------------------------------------------------------------------- # 転職料金 ☆ --- USE_GOLD=trueの時のみ設定必要 #--------------------------------------------------------------------------- # C_PRICE[アクターID] = {クラスID=>料金} C_PRICE[0] = {0=>1000, 1=>1500, 2=>1500} C_PRICE[1] = {1=>500, 2=>3000} C_PRICE[2] = {1=>3000, 2=>500} #--------------------------------------------------------------------------- # 転職不可設定 ☆ # - 転職不可にしたクラスはリストに表示されなくなります #--------------------------------------------------------------------------- # C_ENABLE[アクターID] = [クラスID, …] C_ENABLE[0] = [4] C_ENABLE[1] = [7, 8, 9] C_ENABLE[2] = [7, 8, 9] #--------------------------------------------------------------------------- # 転職時の条件 ☆ --- 条件を付ける場合は【ジョブシステム】が必要 # - 条件を満たさないと転職できないようにできます #--------------------------------------------------------------------------- # C_COND[アクターID] = { # クラスID => [[クラスID, 必要レベル], …] # } C_COND[0] = { 2 => [[1, 3]] } C_COND[1] = { 2 => [[1, 2], [3, 2]] } end ############################################################################### module JobChange module MesCmd M_CHANGE = 1 M_EQUIP = 2 M_PRICE = 3 M_COND = 4 M_NONE = 5 end #-------------------------------------------------------------------------- # ● 汎用データ取得 #-------------------------------------------------------------------------- def self.get(data, a_id, c_id, org=1) return data[a_id][c_id] if !data[a_id].nil? and !data[a_id][c_id].nil? return data[a_id][0] if !data[a_id].nil? and !data[a_id][0].nil? return data[0][c_id] if !data[0].nil? and !data[0][c_id].nil? return data[0][0] if !data[0].nil? and !data[0][0].nil? return org end #--------------------------------------------------------------------------- # 説明テキスト #--------------------------------------------------------------------------- def self.text(c_id) d = TEXT return d[c_id] if !d[c_id].nil? return d[0] unless d[0].nil? return "" end #--------------------------------------------------------------------------- # 転職料金 ☆ --- USE_GOLD=trueの時のみ設定必要 #--------------------------------------------------------------------------- def self.price(a_id, c_id) return get(C_PRICE, a_id, c_id, 0) end #--------------------------------------------------------------------------- # 転職可否設定 ☆ #--------------------------------------------------------------------------- def self.enable(a_id, c_id) return false unless $game_system.jobs[c_id] data = C_ENABLE return false if data[0].include?(0) return false if data[0].include?(c_id) return false if !data[a_id].nil? and data[a_id].include?(0) return !data[a_id].include?(c_id) unless data[a_id].nil? return true end #--------------------------------------------------------------------------- # 転職時の条件 ☆ --- 条件を付ける場合は【ジョブシステム】が必要 #--------------------------------------------------------------------------- def self.cond(a_id, c_id) return get(C_COND, a_id, c_id, []) end end #============================================================================== # ■ JobChange::JobData #============================================================================== module JobChange class JobData #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def initialize reset_all end #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def reset_all @list = {} end #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- def reset(c_id) return (@list[c_id] = !N_VISIBLE.include?(c_id)) end #-------------------------------------------------------------------------- # ● オブジェクト参照 #-------------------------------------------------------------------------- def [](c_id) return (@list[c_id].nil? ? reset(c_id) : @list[c_id]) end end end #============================================================================== # ■ Game_System #============================================================================== class Game_System attr_accessor :jobs # 職業データ #-------------------------------------------------------------------------- # ● オブジェクト初期化 #-------------------------------------------------------------------------- alias init_job initialize def initialize init_job @jobs = JobChange::JobData.new end end #============================================================================== # ■ Game_Temp #============================================================================== class Game_Temp attr_accessor :call_job_change alias initialize_job_change initialize def initialize initialize_job_change @call_job_change = false end end #============================================================================== # ■ Interpreter #============================================================================== class Interpreter def call_job_change # ショップ呼び出しフラグをセット $game_temp.shop_calling = true $game_temp.call_job_change = true end end #============================================================================== # ■ Scene_Map #============================================================================== class Scene_Map alias call_job_change call_shop def call_shop if $game_temp.call_job_change $game_temp.shop_calling = false $game_temp.call_job_change = false $game_player.straighten $scene = Scene_JobChange.new else call_job_change end end end #============================================================================== # ■ Game_Actor #============================================================================== class Game_Actor < Game_Battler #-------------------------------------------------------------------------- # ● 仮想クラスチェンジ時の能力値取得 #-------------------------------------------------------------------------- def v_class(class_id, prm) tmp_id = @class_id @class_id = class_id tmp_weapon_id=tmp_armor1_id=tmp_armor2_id=tmp_armor3_id=tmp_armor4_id=0 # 装備できなくなったアイテムを仮想的に外す unless equippable?($data_weapons[@weapon_id]) tmp_weapon_id = @weapon_id; @weapon_id = 0 end unless equippable?($data_armors[@armor1_id]) tmp_armor1_id = @armor1_id; @armor1_id = 0 end unless equippable?($data_armors[@armor2_id]) tmp_armor2_id = @armor2_id; @armor2_id = 0 end unless equippable?($data_armors[@armor3_id]) tmp_armor3_id = @armor3_id; @armor3_id = 0 end unless equippable?($data_armors[@armor4_id]) tmp_armor4_id = @armor4_id; @armor4_id = 0 end case prm # 仮想装備時のパラメータ when 0; ret_prm = atk when 1; ret_prm = pdef when 2; ret_prm = mdef when 3; ret_prm = str when 4; ret_prm = dex when 5; ret_prm = agi when 6; ret_prm = int when 7; ret_prm = eva when 8; ret_prm = maxhp when 9; ret_prm = maxsp end @class_id = tmp_id # 仮想装備をもとに戻す @weapon_id = tmp_weapon_id if tmp_weapon_id !=0 @armor1_id = tmp_armor1_id if tmp_armor1_id !=0 @armor2_id = tmp_armor2_id if tmp_armor2_id !=0 @armor3_id = tmp_armor3_id if tmp_armor3_id !=0 @armor4_id = tmp_armor4_id if tmp_armor4_id !=0 return ret_prm end end