#============================================================================== # ■ VX-RGSS2-16-def クエストシステム【定義】 by Claimh #------------------------------------------------------------------------------ # クエスト設定で使用するクラスです # 【設定】よりも上のセクションに配置する必要があります #------------------------------------------------------------------------------ #各設定で使用できるクラス一覧 # ● ランク Rank.new # Rankクラス : ランク情報のクラス # ● 初期状態 StXX.new # Statusクラス : 詳細設定向け(非推奨) # StEvクラス : イベントからのクエスト向け # StGuildクラス : ギルドからのクエスト向け # ● 前提条件[CondXXX.new, …] クリア条件[CondXXX.new, …] # Conditionクラス : 詳細設定向け(非推奨) # CondItemクラス : アイテム # CondWeaponクラス : 武器 # CondArmorクラス : 防具 # CondMoneyクラス : お金 # CondSwクラス : スイッチ # CondValクラス : 変数 # CondActorクラス : アクターがいるか? # CondLevelクラス : レベル # CondEnemyクラス : エネミーを倒した数 # CondQuestTクラス : クエストを完了(成功)しているか? # CondQuestFクラス : クエストを完了(失敗)しているか? # CondSkillクラス : スキル習得済み # CondClassクラス : クラス # CondScriptクラス : スクリプトによる判定(上級者向け) # ● 報酬[RsltXXX.new, …] # Resultクラス : 詳細設定向け(非推奨) # RsltItemクラス : 成功時にアイテムがもらえる # RsltWeaponクラス : 成功時に武器がもらえる # RsltArmorクラス : 成功時に防具がもらえる # RsltMoneyクラス : 成功時にお金がもらえる # RsltSkillクラス : 成功時にスキル習得 # RsltCmnEvクラス : 成功時にコモンイベント発動 # RsltClassクラス : 成功時にクラスチェンジ # RsltLevelクラス : 成功時にレベルアップ # RsltActorクラス : 成功時にアクター加入 # RsltQuestTクラス : 成功時にクエストを表示ONに変更 # RsltQuestFクラス : 成功時にクエストを表示OFFに変更 # RsltQuestSクラス : 成功時にクエストを開始させる # RsltMoneyPクラス : 失敗時のペナルティー(お金を支払う) # RsltCmnEvPクラス : 失敗時にコモンイベント発動 # RsltLevelPクラス : 失敗時にレベルダウン # RsltQuestTPクラス: 失敗時にクエストを表示ONに変更 # RsltQuestFPクラス: 失敗時にクエストを表示OFFに変更 # ● スイッチ操作Sw.new(play_sw, clear_sw, fail_sw) # Swクラス : クエスト開始・成功・失敗時に変更するスイッチ #============================================================================== module Quest #------------------------------------------------------------------------------- #【設定用固定定義】 #------------------------------------------------------------------------------- # 音声タイプ ME=0;SE=1 # クエストリスト種別 PLAYING=0;CLEAR=1;FAIL=2;STAY=-1 # ギルド種別 REPORT=3;SHOP=4;EXIT=5 # 報酬・条件用の種別 ITEM=0;WEAPON=1;ARMOR=2;MONEY=3 ACTOR=5;LEVEL=6;ENEMY=7;SKILL=8;CLASS=9 SW=10;VAL=11;EV=12 QUEST_T=15;QUEST_F=16;QUEST_S=17 SCRIPT=20 # ● ランク Rank.new #============================================================================= # ランク用クラス Rank.new(quest, r_next, r_down) #【説明】 # クエストのランクを決めるクラスです。 #【引数】 # quest : クエストのランク(nilか1〜10) <省略時はnil> # ランクをnilとした場合、ランク表示が消えます # r_next : クエスト成功時のランク操作 <省略時はnil> # nil : 変動なし # 0 : 現在のランク + 1 # 1-10 : 指定したランクに変更 # (自分のランクが指定したランクより高い場合は無効) # r_down : クエスト失敗時のランク操作 <省略時はnil> # nil : 変動なし # 0 : 現在のランク - 1 # 1-10 : 指定したランクに変更 # (自分のランクが指定したランクより低い場合は無効) #============================================================================= class Rank attr_reader :quest attr_reader :r_next attr_reader :r_down def initialize(quest=nil, r_next=nil, r_down=nil) @quest = quest; @r_next = r_next; @r_down = r_down end end # ● 初期状態 StXX.new #============================================================================= # 初期状態用superクラス Status.new(enable, visible, v_cond, v_res) #【説明】 # クエストの初期状態を決めるクラスです。 #【引数】 # enable : ギルドで受け付けるクエスト # visible : クエストの初期表示状態 <省略時はtrue> # v_cond : 進捗状況画面の初期表示状態 <省略時はtrue> # v_res : 報酬画面の初期表示状態 <省略時はtrue> #============================================================================= class Status attr_reader :enable attr_reader :visible attr_reader :v_res attr_reader :v_cond attr_reader :chg_ev attr_reader :ids def initialize(enable, visible=true, v_cond=true, v_res=true, chg_ev=false, ids=[]) @enable=enable; @visible=visible; @v_res=v_res @v_cond=v_cond; @chg_ev = chg_ev; @ids = ids end end #----------------------------------------------------------------------------- # 初期状態用クラス(イベント用) StEv.new(v_res, v_cond) #【説明】 # イベントからのクエスト用の簡易設定として使用できます #【引数】 # v_cond : 進捗状況画面の初期表示状態 <省略時はfalse> # v_res : 報酬画面の初期表示状態 <省略時はfalse> #----------------------------------------------------------------------------- class StEv < Status def initialize(v_cond=false, v_res=false) super(false, true, v_cond, v_res) end end #----------------------------------------------------------------------------- # 初期状態用クラス(ギルド用) StGuild.new(visible, v_cond, v_res, ids) #【説明】 # ギルドのクエスト用の簡易設定として使用できます #【引数】 # visible : クエストの初期表示状態 <省略時はfalse> # v_cond : 進捗状況画面の初期表示状態 <省略時はtrue> # v_res : 報酬画面の初期表示状態 <省略時はtrue> # ids : クエストを受け付けるギルドID <省略時は制限なし> #----------------------------------------------------------------------------- class StGuild < Status def initialize(visible=false, v_cond=true, v_res=true, ids=[]) super(true, visible, v_cond, v_res) @ids = ids end end #----------------------------------------------------------------------------- # 初期状態用クラス(ギルド用) StGuildEv.new(visible, v_cond, v_res, ids) #【説明】 # ギルドのクエスト用の簡易設定として使用できます # このクラスを使用した場合、以下のようなクエストになります # クエスト開始 : ギルドで受けることで開始 # クエスト完了 : イベントで完了させる(ギルドでは報告できない) #【引数】 # visible : クエストの初期表示状態 <省略時はfalse> # v_cond : 進捗状況画面の初期表示状態 <省略時はtrue> # v_res : 報酬画面の初期表示状態 <省略時はtrue> # ids : クエストを受け付けるギルドID <省略時は制限なし> #----------------------------------------------------------------------------- class StGuildEv < Status def initialize(visible=false, v_cond=true, v_res=true, ids=[]) super(true, visible, v_cond, v_res, true) @ids = ids end end # ● 前提条件[CondXXX.new, …] クリア条件[CondXXX.new, …] #============================================================================= # 条件用superクラス Condition.new(type, id, num, lose, view, name) #【引数】 # type : 種別 # id : それぞれのID (MONEY, EVはdon't care) # num : クエスト開始orクリアに必要な個数 (SW, EV, ACTOR, QUESTはdon't care) # lose : クエスト開始orクリア時の消費の有無(ITEM, WEAPON, ARMOR, MONEYのみ) # true:減らす false:減らさない # view : 進捗表示欄への表示 # true:表示する false:表示しない # name : 進捗表示で使用する名称(SW, VAL, EVのみ) #============================================================================= class Condition def initialize(type, id=0, num=0, lose=false, view=true, name="") @type = type; @id = id; @num = num; @lose = lose; @name = name end end #----------------------------------------------------------------------------- # 条件 : ITEMクラス CondItem.new(id, num, lose, view) #【条件】 # アイテム[id]を必要個数分[num]あるか? #【引数】 # id : アイテムID # num : クエスト開始orクリアに必要な個数 # lose : クエスト開始orクリア時の消費の有無 <省略時は消費あり(true)> # view : 進捗状況欄への表示の有無 <省略時は表示あり(true)> #----------------------------------------------------------------------------- class CondItem < Condition def initialize(id, num=1, lose=true, view=true) super(ITEM, id, num, lose, view) end end #----------------------------------------------------------------------------- # 条件 : WEAPONクラス CondWeapon.new(id, num, lose, view) #【条件】 # 武器[id]を必要個数分[num]あるか? #【引数】 # id : 武器ID # num : クエスト開始orクリアに必要な個数 # lose : クエスト開始orクリア時の消費の有無 <省略時は消費あり(true)> # view : 進捗状況欄への表示の有無 <省略時は表示あり(true)> #----------------------------------------------------------------------------- class CondWeapon < Condition def initialize(id, num=1, lose=true, view=true) super(WEAPON, id, num, lose, view) end end #----------------------------------------------------------------------------- # 条件 : ARMORクラス CondArmor.new(id, num, lose, view) #【条件】 # 防具[id]を必要個数分[num]あるか? #【引数】 # id : 防具ID # num : クエスト開始orクリアに必要な個数 # lose : クエスト開始orクリア時の消費の有無 <省略時は消費あり(true)> # view : 進捗状況欄への表示の有無 <省略時は表示あり(true)> #----------------------------------------------------------------------------- class CondArmor < Condition def initialize(id, num=1, lose=true, view=true) super(ARMOR, id, num, lose, view) end end #----------------------------------------------------------------------------- # 条件 : MONEYクラス CondMoney.new(num, lose, view) #【条件】 # お金を必要分[num]あるか? #【引数】 # num : クエスト開始orクリアに必要なお金 # lose : クエスト開始orクリア時の消費の有無 <省略時は消費あり(true)> # view : 進捗状況欄への表示の有無 <省略時は表示あり(true)> # name : 進捗状況欄へ表示する名称 <省略時はお金> #----------------------------------------------------------------------------- class CondMoney < Condition def initialize(num=1, lose=true, view=true, name="お金") super(MONEY, 0, num, lose, view, name) end end #----------------------------------------------------------------------------- # 条件 : SWクラス CondSw.new(id, name, view) #【条件】 # スイッチ[id]がONならクリア #【引数】 # id : スイッチID # name : 進捗状況欄へ表示する名称 <省略時はSW> # view : 進捗状況欄への表示の有無 <省略時は表示あり(true)> #----------------------------------------------------------------------------- class CondSw < Condition def initialize(id, name="SW", view=true) super(SW, id, 0, false, view, name) end end #----------------------------------------------------------------------------- # 条件 : VALクラス CondVal.new(id, num, name, view) #【条件】 # 変数[id]がある値[num]以上ならクリア #【引数】 # id : 変数ID # num : クエストクリアに必要な変数値 <省略時は1> # name : 進捗状況欄へ表示する名称 <省略時はVAL> # view : 進捗状況欄への表示の有無 <省略時は表示あり(true)> #----------------------------------------------------------------------------- class CondVal < Condition def initialize(id, num=1, name="VAL", view=true) super(VAL, id, num, false, view, name) end end #----------------------------------------------------------------------------- # 条件 : EVクラス CondEv.new(name, view) #【条件】 # イベントからquest_clear / quest_failを実行(前提条件には使えません) #【引数】 # name : 進捗状況欄へ表示する名称 <省略時はEV> # view : 進捗状況欄への表示の有無 <省略時は表示あり(true)> #----------------------------------------------------------------------------- class CondEv < Condition def initialize(name="EV", view=true) super(EV, 0, 0, false, view, name) end end #----------------------------------------------------------------------------- # 条件 : ACTORクラス CondActor.new(id, num, lose, view) #【条件】 # アクター[id]がいるか? #【引数】 # id : アクターID # num : 0=アクターがいるか? / 1=アクターがいないか? # lose : true=成功時にアクター脱退 <省略時は脱退しない(false)> # view : 進捗状況欄への表示の有無 <省略時は表示あり(true)> # name : 進捗状況欄へ表示する名称 <省略時はアクター名> #----------------------------------------------------------------------------- class CondActor < Condition def initialize(id, num=0, lose=false, view=true, name="") super(ACTOR, id, num, lose, view, name) end end #----------------------------------------------------------------------------- # 条件 : LEVELクラス CondLevel.new(id, num, view) #【条件】 # アクター[id]のレベルが指定値[num]以上か? # ※id=0なら平均レベル #【引数】 # id : アクターID # num : クエスト開始orクリアに必要なレベル <省略時は1> # view : 進捗状況欄への表示の有無 <省略時は表示あり(true)> # name : 進捗状況欄へ表示する名称 <省略時はアクター名or平均レベル> #----------------------------------------------------------------------------- class CondLevel < Condition def initialize(id=0, num=1, view=true, name="") super(LEVEL, id, num, false, view, name) end end #----------------------------------------------------------------------------- # 条件 : ENEMYクラス CondEnemy.new(id, num, view) #【条件】 # エネミー[id]を指定数[num]以上、倒したか? # ※撃破数カウンタと併用する必要あり #【引数】 # id : エネミーID # num : クエスト開始orクリアに必要な撃破数 <省略時は1> # view : 進捗状況欄への表示の有無 <省略時は表示あり(true)> # name : 進捗状況欄へ表示する名称 <省略時はエネミー名> #----------------------------------------------------------------------------- class CondEnemy < Condition def initialize(id=0, num=1, view=true, name="") super(ENEMY, id, num, false, view, name) end end #----------------------------------------------------------------------------- # 条件 : QUESTクラス CondQuestT.new(id, view) #【条件】 # クエスト[id]が完了(成功)しているか? #【引数】 # id : クエストID # view : 進捗状況欄への表示の有無 <省略時は表示あり(true)> # name : 進捗状況欄へ表示する名称 <省略時はクエスト名> #----------------------------------------------------------------------------- class CondQuestT < Condition def initialize(id=0, view=true, name="") super(QUEST_T, id, 0, false, view, name) end end #----------------------------------------------------------------------------- # 条件 : QUESTクラス CondQuestF.new(id, view) #【条件】 # クエスト[id]が完了(失敗)しているか? #【引数】 # id : クエストID # view : 進捗状況欄への表示の有無 <省略時は表示あり(true)> # name : 進捗状況欄へ表示する名称 <省略時はクエスト名> #----------------------------------------------------------------------------- class CondQuestF < Condition def initialize(id=0, view=true, name="") super(QUEST_F, id, 0, false, view, name) end end #----------------------------------------------------------------------------- # 条件 : Skillクラス CondSkill.new(skill_id, actor_id, view) #【条件】 # アクター[actor_id]がスキル[skill_id]を習得しているか? # ※actor_id=0の場合はパーティー内にスキルを習得している者がいるか? #【引数】 # skill_id : スキルID # actor_id : アクターID # view : 進捗状況欄への表示の有無 <省略時は表示あり(true)> # name : 進捗状況欄へ表示する名称 <省略時はスキル名> #----------------------------------------------------------------------------- class CondSkill < Condition def initialize(skill_id, actor_id=0, view=true, name="") super(SKILL, skill_id, actor_id, false, view, name) end end #----------------------------------------------------------------------------- # 条件 : Classクラス CondClass.new(class_id, actor_id view) #【条件】 # クラス[id]のメンバーがいるか? #【引数】 # class_id : クラスID # actor_id : アクターID # view : 進捗状況欄への表示の有無 <省略時は表示あり(true)> # name : 進捗状況欄へ表示する名称 <省略時はスキル名> #----------------------------------------------------------------------------- class CondClass < Condition def initialize(class_id, actor_id=0, view=true, name="") super(CLASS, class_id, actor_id, false, view, name) end end #----------------------------------------------------------------------------- # 条件 : Scriptクラス CondScript.new(id, num, view) #【条件】 # スクリプトによる判断をする(上級向け) # 【設定】内にあるCondition#script_clear?に自由記述できます #【引数】 # id : ID情報(任意) # num : 数値情報(任意) # view : 進捗状況欄への表示の有無 <省略時は表示あり(true)> # name : 進捗状況欄へ表示する名称 <省略時はScript> #----------------------------------------------------------------------------- class CondScript < Condition def initialize(id=0, num=0, view=true, name="Script") super(SCRIPT, id, view, false, view, name) end end # ● 報酬[RsltXXX.new, …] #============================================================================= # 報酬用superクラス Result.new(type, id, num) #【引数】 # type : 種別(ITEM / WEAPON / ARMOR / MONEY) # id : アイテム / 武器 / 防具 のID # num : 獲得個数 <省略時は1> # view : 報酬欄に表示する <省略時はtrue> # penalty : クエスト失敗時に失う <省略時はfalse> #============================================================================= class Result def initialize(type, id, num=1, view=true, penalty=false) @type = type; @id = id; @num = num; @view = view; @penalty = penalty end end #----------------------------------------------------------------------------- # 報酬 : ITEMクラス RsltItem.new(id, num) #【引数】 # id : アイテムID # num : 獲得個数 <省略時は1> # view : 報酬欄に表示する <省略時はtrue> #----------------------------------------------------------------------------- class RsltItem < Result def initialize(id, num=1, view=true) super(ITEM, id, num, view) end end #----------------------------------------------------------------------------- # 報酬 : WEAPONクラス RsltWeapon.new(id, num) #【引数】 # id : 武器ID # num : 獲得個数 <省略時は1> # view : 報酬欄に表示する <省略時はtrue> #----------------------------------------------------------------------------- class RsltWeapon < Result def initialize(id, num=1, view=true) super(WEAPON, id, num, view) end end #----------------------------------------------------------------------------- # 報酬 : ARMORクラス RsltArmor.new(id, num) # id : 防具ID # num : 獲得個数 <省略時は1> # view : 報酬欄に表示する <省略時はtrue> #----------------------------------------------------------------------------- class RsltArmor < Result def initialize(id, num=1, view=true) super(ARMOR, id, num, view) end end #----------------------------------------------------------------------------- # 報酬 : MONEYクラス RsltMoney.new(id, num) # num : 報酬金 #----------------------------------------------------------------------------- class RsltMoney < Result def initialize(num) super(MONEY, 0, num, false) end end #----------------------------------------------------------------------------- # 報酬 : SKILLクラス RsltSkill.new(skill_id, actor_id) # skill_id : スキルID # actor_id : アクターID # view : 報酬欄に表示する <省略時はtrue> #----------------------------------------------------------------------------- class RsltSkill < Result def initialize(skill_id, actor_id, view=true) super(SKILL, skill_id, actor_id, view) ## @id = skill_id, @num = actor_id end end #----------------------------------------------------------------------------- # 報酬 : CommonEVクラス RsltCmnEv.new(cmn_ev_id) # cmn_ev_id : コモンイベントID #----------------------------------------------------------------------------- class RsltCmnEv < Result def initialize(cmn_ev_id) super(EV, cmn_ev_id) end end #----------------------------------------------------------------------------- # 報酬 : CLASSクラス RsltClass.new(class_id, actor_id) # class_id : クラスID # actor_id : アクターID # view : 報酬欄に表示する <省略時はtrue> #----------------------------------------------------------------------------- class RsltClass < Result def initialize(class_id, actor_id, view=true) super(CLASS, class_id, actor_id, view) ## @id = class_id, @num = actor_id end end #----------------------------------------------------------------------------- # 報酬 : LEVELクラス RsltLevel.new(actor_id, level) # actor_id : アクターID # level : アップさせるレベル # view : 報酬欄に表示する <省略時はtrue> #----------------------------------------------------------------------------- class RsltLevel < Result def initialize(actor_id, level, view=true) super(LEVEL, actor_id, level, view) end end #----------------------------------------------------------------------------- # 報酬 : ACTORクラス RsltActor.new(actor_id) # actor_id : アクターID # view : 報酬欄に表示する <省略時はtrue> #----------------------------------------------------------------------------- class RsltActor < Result def initialize(actor_id, view=true) super(ACTOR, actor_id, 0, view) end end #----------------------------------------------------------------------------- # 報酬 : QUESTクラス RsltQuestT.new(id) # id : 表示ONにするクエストID # view : 報酬欄に表示する <省略時はtrue> #----------------------------------------------------------------------------- class RsltQuestT < Result def initialize(id, view=true) super(QUEST_T, id, 0, view) end end #----------------------------------------------------------------------------- # 報酬 : QUESTクラス RsltQuestF.new(id) # id : 表示OFFにするクエストID # view : 報酬欄に表示する <省略時はtrue> #----------------------------------------------------------------------------- class RsltQuestF < Result def initialize(id, view=true) super(QUEST_F, id, 0, view) end end #----------------------------------------------------------------------------- # 報酬 : QUESTクラス RsltQuestS.new(id) # id : 開始させるクエストID # view : 報酬欄に表示する <省略時はfalse> #----------------------------------------------------------------------------- class RsltQuestS < Result def initialize(id, view=false) super(QUEST_S, id, 0, view) end end #----------------------------------------------------------------------------- # ペナルティー : MONEYクラス RsltMoneyP.new(id, num) # num : クエスト失敗時に失う金額 #----------------------------------------------------------------------------- class RsltMoneyP < Result def initialize(num) super(MONEY, 0, num, false, true) end end #----------------------------------------------------------------------------- # ペナルティー : CommonEVクラス RsltCmnEvP.new(cmn_ev_id) # cmn_ev_id : コモンイベントID #----------------------------------------------------------------------------- class RsltCmnEvP < Result def initialize(cmn_ev_id) super(EV, cmn_ev_id, 0, false, true) end end #----------------------------------------------------------------------------- # ペナルティー : LEVELクラス RsltLevelP.new(actor_id, level) # actor_id : アクターID # level : ダウンさせるレベル #----------------------------------------------------------------------------- class RsltLevelP < Result def initialize(actor_id, level) super(LEVEL, actor_id, level, false, true) end end #----------------------------------------------------------------------------- # ペナルティー : QUESTクラス RsltQuestTP.new(id) # id : クエストID #----------------------------------------------------------------------------- class RsltQuestTP < Result def initialize(id) super(QUEST_T, id, 0, false, true) end end #----------------------------------------------------------------------------- # ペナルティー : QUESTクラス RsltQuestFP.new(id) # id : クエストID #----------------------------------------------------------------------------- class RsltQuestFP < Result def initialize(id) super(QUEST_F, id, 0, false, true) end end # ● スイッチ操作Sw.new(play_sw, clear_sw, fail_sw) #============================================================================= # スイッチ操作用クラス Sw.new(play, clr, fail) #【引数】 # play : クエスト開始時にONにするスイッチID (0なら操作しない) <省略時は0> # clr : クエスト成功時にONにするスイッチID (0なら操作しない) <省略時は0> # fail : クエスト失敗時にONにするスイッチID (0なら操作しない) <省略時は0> #============================================================================= class Sw def initialize(play=0, clr=0, fail=0) @play = play; @clr = clr; @fail = fail end end end