// 職業管理人さん(by Azurite氏)の改変v1.1 // 転生回数の確認、転生スキルPボーナスの追加 // 簡単な追加仕様、転生スキルPボーナスは転生1回毎に+1P固定'@max_bonus_skillpointで最大ポイントを指定できます。 // 終了時のカットイン修正が容易になるように処理を変更。 // 転生処理の順番を変更。 // 転生時のメッセージ送りの不具合修正。 // オリジナルがアップデートされています。書き直しは面倒だったので20110217のバージョンに下記のアップデートを適応しています。 // 2/25 前回の誤字修正。それだけではなんなので、転生転職時のクエストスキル自動取得機能追加。 // 4/13 誤字修正。(Gunslingerのold_job1の値) // 転生テコン転職の不具合修正(Upper判定の削除) // 以下オリジナルのコメント //----------------------------------------------------------------------------- // 職業管理人さん // //改造・2次配布等はいくらでもどうぞどうぞ //by Azurite 20110217 // mistdrop@live.jp //----------------------------------------------------------------------------- /* なんとなく気に入ったものがなかったのでBlazeさんのAurigaサンプルを元に、(シンプルな作りなのでわかりやすかったです、感謝。) / 勉強も兼ねて転生機能を追加しました。 / 多機能とは言えないですし、設定の変更も面倒かもしれません。その点を踏まえてからご使用ください。 / / まず、ハイノービスから転生職に転職の際、転生前旧職と同職になるよう変更しています。(変数で変更可) / その際、OLD_CLASSを利用しています。OLD_CLASSが3次職の値でも動作するように作成しています。 / ですが、OLD_CLASSは3次職の値を保存するべきではないと判断したため、2次職として保存するように一部変更。 / まず挙げられる要素として、拡張をしない限り、転生前に3次職であった事での特典などがない、 / また3次職の値を必要とすると仮定しても、わざわざOLD_CLASSを利用する必要性がないため。 / 逆に、今まで流通しているAurigaデフォルトを含めた、職業関連スクリプトと整合性が取れない可能性があると判断。 / あまり無いとは思うけど、OLD_CLASSが正常にセットされていない場合は、適当にスルーするようにしました。 / 前回のものでも新規導入であれば問題ないとは思うんですが、今回は移行時の利用をちょっと考えて書き換えました。 / 他、変更点として拳聖のJobをjob_starからJob_Starに置き換え統一しています。不都合がある方は戻して使ってください。 / また、Gyangsyを転職項目として表示しないようにしました。コメントアウトしただけなので、必要だと思う方は戻してください。 / 転生機能の一つとして複数回転生に対応させてあります。その際UPPER_cntを使用し回数をカウントしています。 / 転生条件として、初期値では2〜3次職で養子を除き転生できます。 / 必要ベースレベルは初期値99、3次とその他を変数で個別判定する事が出来ます。 / 必要ジョブレベルは初期値では、2次のみジョブカンストとなっています。初期の3次転職にジョブ条件がないので甘い条件となるかもしれません。 / 通常2次と3次、転生2次と3次でそれぞれ4つを変数として個別指定する事が出来ます。 / 3次転職機能、有効無効を切り替える事が出来ます。また、養子を条件に追加するかの可否。 / 必要ベース、転生有無に応じたジョブを変数として指定できます。 / 最大の変更点、ビニットさんではなく、エリシアさんになってます! / どうしてもビニットさんがいいと思った方は、 / "kh_ellisia" -> "kafra_04","894" -> "114" / と置換してください。 / / 2/17 OLD_CLASSのセットタイミングの変更。それだけではなんなので、拡張職の転生、養子の3次転職条件変数を追加。 / ノビ、通常1次、転生1次、テコン、養子に当てはまる場合は転生できるように作っていません。(要望でもない限り完成版かな?) //----------------------------------------------------------------------------- */ //prontera.gat,161,192,5 script 職業管理人 894,{ prontera.gat,161,192,5 script エリシア 894,{ // 転生時の設定 set '@trans_max,3; // 最大転生回数 set '@trans_zeny,1285000; // 転生費用 set '@max_stbonus,32767; // ステータスボーナス最大値を越えることがないようにします。 set '@bonus_stpoint,100; // 初回転生時のステータスボーナス set '@n_bstpoint_plus,350; // 2回目から転生時、初回値に加算するボーナス(初回+(subplus * 転生回数))って感じ。 set '@max_bonus_skillpoint,3; //ボーナススキルポイントの最大値 転生毎に+1 set '@subclass_trans,0; // 転生条件に拡張職の場合も含めるなら1にする。 set '@trans_third,99; // 転生するために必要な3次職のベースレベル条件 set '@trans_base,99; // 転生するために必要な通常職のベースレベル条件 set '@normal_job,50; // 転生するために必要な通常職のジョブレベル条件 set '@nthird_job,0; // 転生するために必要な通常3次職のジョブレベル条件 set '@high_job,70; // 転生するために必要な転生職のジョブレベル条件 set '@hthird_job,0; // 転生するために必要な転生3次職のジョブレベル条件 set '@trans_weight,10; // 転生時の重量チェック、0:チェックしない、それ以外:設定した数字以上の重量で転生不可 // 転職時の設定 set '@old_check,1; // 転生前職業に固定、1:有効 0:無効 set '@change_third,1; // 3次転職機能、1:有効 0:無効 set '@change_upper,0; // 3次転職条件を転生者のみとする、1:有効 0:無効 set '@change_baby,1; // 3次転職条件に養子を含める、1:有効 0;無効 set '@change_baselv,99; // 3次転職時に必要なベースレベル set '@hchange_joblv,0; // 転生職が3次転職時に必要なジョブレベル、元条件としての判定がないため、0としています。 set '@nchange_joblv,0; // 通常職が3次転職時に必要なジョブレベル、元条件としての判定がないため、0としています。 set '@change_weight,20000; // 転職時の重量チェック、0:チェックしない、それ以外:設定した数字以上の重量で転生不可 set '@getquestskill,0; // 転生、転職時のクエスト取得。需要ないだろうけどアップロードのこじつけとして増やします。 // ごあいさつ cutin "kh_ellisia",2; mes "["+ strnpcinfo(0) + "]"; mes "いらっしゃいませ。"; mes "こちらにて、転職と転生の"; mes "申請を受けています。"; mes "どのような用件でしょう?"; next; switch(select("転職をお願いしたい","転生するために来ました","転生回数の確認","いたから話しかけただけ")) { case 1: // 転職 // 基本スキルチェック if(getskilllv(1) < 9) { mes "["+ strnpcinfo(0) + "]"; mes "基本スキルが不足しております。"; mes "基本スキルレベルを上げてからの"; mes "お越しをお待ちしております。"; goto L_CLOSE; } // 転生スキルPボーナスのチェック if ('@max_bonus_skillpoint < UPPER_cnt) set '@add_point,'@max_bonus_skillpoint;else set '@add_point, UPPER_cnt; // スキルPチェック if((SkillPoint - '@add_point)>0) { mes "["+ strnpcinfo(0) + "]"; mes "スキルポイントを残したままの、"; mes "転職は受け付けておりません。"; mes "全て消費してきてから、"; mes "お越しください。"; goto L_CLOSE; } // OLD_CLASSの値から旧1次職と2次職を個別に変数としてセットしなおしています。 set '@old_job1,0; set '@old_job2,0; switch(OLD_CLASS) { case Job_Knight: case Job_RuneKnight: set '@old_job1,Job_Swordman; set '@old_job2,Job_Knight; break; case Job_Priest: case Job_ArchBishop: set '@old_job1,Job_Acolyte; set '@old_job2,Job_Priest; break; case Job_Wizard: case Job_Warlock: set '@old_job1,Job_Magician; set '@old_job2,Job_Wizard; break; case Job_Blacksmith: case Job_Mechanic: set '@old_job1,Job_Merchant; set '@old_job2,Job_Blacksmith; break; case Job_Hunter: case Job_Ranger: set '@old_job1,Job_Archer; set '@old_job2,Job_Hunter; break; case Job_Assassin: case Job_Guillotine: set '@old_job1,Job_Thief; set '@old_job2,Job_Assassin; break; case Job_Crusader: case Job_RoyalGuard: set '@old_job1,Job_Swordman; set '@old_job2,Job_Crusader; break; case Job_Monk: case Job_Shura: set '@old_job1,Job_Acolyte; set '@old_job2,Job_Monk; break; case Job_Sage: case Job_Sorcerer: set '@old_job1,Job_Magician; set '@old_job2,Job_Sage; break; case Job_Rogue: case Job_ShadowChaser: set '@old_job1,Job_Thief; set '@old_clsss2,Job_Rogue; break; case Job_Alchemist: case Job_Genetic: set '@old_job1,Job_Merchant; set '@old_job2,Job_Alchemist; break; case Job_Bard: case Job_Minstrel: set '@old_job1,Job_Archer; set '@old_job2,Job_Bard; break; case Job_Dancer: case Job_Wanderer: set '@old_job1,Job_Archer; set '@old_job2,Job_Dancer; break; case Job_SuperNovice: set '@old_job1,Job_SuperNovice; break; case Job_Star: set '@old_job1,Job_Taekwon; set '@old_job2,Job_Star; break; case Job_Linker: set '@old_job1,Job_Taekwon; set '@old_job2,Job_Linker; break; case Job_Gunslinger: set '@old_job1,Job_Gunslinger; break; case Job_Ninja: set '@old_job1,Job_Ninja; break; case Job_DeathKnight: set '@old_job1,Job_Gyangsy; set '@old_job2,Job_DeathKnight; break; case Job_DarkCollector: set '@old_job1,Job_Gyangsy; set '@old_job2,Job_DarkCollector; break; default: // OLD_CLASSが変な数字の場合はそのまま抜けることにします。0にするのもありかも break; } // 職業IDセット <- ここで現職業から転職可能な職業を絞っています。 set '@job_id,0; switch(Job) { case Job_Novice: // (ハイ)ノービスから1次職、拡張職 if('@old_check == 1 && Upper == UPPER_HIGH && '@old_job1 != 0) { // 転生前の1次職になるためのフラグ set '@job_id,'@old_job1; } else { // 通常と養子? それと、転生前職業を固定化しない場合。 setarray '@job_id,Job_Swordman,Job_Magician,Job_Archer,Job_Acolyte,Job_Merchant,Job_Thief; if(Upper != UPPER_HIGH) { // ハイノビ以外はスパノビを追加 set '@job_id[getarraysize('@job_id)],Job_SuperNovice; } if(Upper == UPPER_NORMAL) { // ハイノビ、養子以外であれば拡張職業を追加 setarray '@job_id[getarraysize('@job_id)],Job_Taekwon,Job_Gunslinger,Job_Ninja; //,Job_Gyangsy;怖いので省きます } } break; case Job_Swordman: // (ハイ)剣士から…ry if('@old_check == 1 && Upper == UPPER_HIGH && '@old_job2 != 0) set '@job_id,'@old_job2; else setarray '@job_id,Job_Knight,Job_Crusader; break; case Job_Magician: // (ハイ)マジシャンから…ry if('@old_check == 1 && Upper == UPPER_HIGH && '@old_job2 != 0) set '@job_id,'@old_job2; else setarray '@job_id,Job_Wizard,Job_Sage; break; case Job_Archer: // (ハイ)弓から…ry if('@old_check == 1 && Upper == UPPER_HIGH && '@old_job2 != 0) set '@job_id,'@old_job2; else if(Sex) setarray '@job_id,Job_Hunter,Job_Bard; else setarray '@job_id,Job_Hunter,Job_Dancer; break; case Job_Acolyte: // (ハイ)アコから…ry if('@old_check == 1 && Upper == UPPER_HIGH && '@old_job2 != 0) set '@job_id,'@old_job2; else setarray '@job_id,Job_Priest,Job_Monk; break; case Job_Merchant: // (ハイ)商人から…ry if('@old_check == 1 && Upper == UPPER_HIGH && '@old_job2 != 0) set '@job_id,'@old_job2; else setarray '@job_id,Job_Blacksmith,Job_Alchemist; break; case Job_Thief: // (ハイ)シーフから…ry if('@old_check == 1 && Upper == UPPER_HIGH && '@old_job2 != 0) set '@job_id,'@old_job2; else setarray '@job_id,Job_Assassin,Job_Rogue; break; case Job_Taekwon: if('@old_check == 1 && '@old_job2 != 0) set '@job_id,'@old_job2; else setarray '@job_id,Job_Star,Job_Linker; // 本来はJob_Starではなく、job_Starなので要注意。 なんとなく気に入らなかったのでconstその他のもろもろを書き換えてます。 break; case Job_Gyangsy: if('@old_check == 1 && Upper == UPPER_HIGH && '@old_job2 != 0) set '@job_id,'@old_job2; else setarray '@job_id,Job_DeathKnight,Job_DarkCollector; break; case Job_Knight: set '@job_id,Job_RuneKnight; break; case Job_Priest: set '@job_id,Job_ArchBishop; break; case Job_Wizard: set '@job_id,Job_Warlock; break; case Job_Blacksmith: set '@job_id,Job_Mechanic; break; case Job_Hunter: set '@job_id,Job_Ranger; break; case Job_Assassin: set '@job_id,Job_Guillotine; break; case Job_Crusader: set '@job_id,Job_RoyalGuard; break; case Job_Monk: set '@job_id,Job_Shura; break; case Job_Sage: set '@job_id,Job_Sorcerer; break; case Job_Rogue: set '@job_id,Job_ShadowChaser; break; case Job_Alchemist: set '@job_id,Job_Genetic; break; case Job_Bard: set '@job_id,Job_Minstrel; break; case Job_Dancer: set '@job_id,Job_Wanderer; break; } // 3次職転職機能を無効にしたい場合のチェック。 if('@change_third == 0 && Job >= Job_Knight && Job <= Job_Dancer) { mes "["+ strnpcinfo(0) + "]"; mes "残念ながら今回は、"; mes "ご案内できる職業がありません。"; mes "またお越しくださいませ。"; goto L_CLOSE; } // 転職可能職業がノービス(0)と判定された場合?ははじく。 基本的には起こらないと思うから予防線の類なのかしら? if('@job_id[0] == 0) { mes "["+ strnpcinfo(0) + "]"; mes "残念ながら今回は、"; mes "ご案内できる職業がありません。"; mes "またお越しくださいませ。"; goto L_CLOSE; } // 職業名セット // job_idに対応した名前に変換するところ。 mes "["+ strnpcinfo(0) + "]"; mes "あなたにご案内できる職業は"; mes "次の通りとなります。"; mes "ご希望の職業はございますか?"; next; set '@job_name$,""; set '@max,getarraysize('@job_id); for(set '@i,0; '@i < '@max; set '@i,'@i + 1) { switch('@job_id['@i]) { case Job_Swordman: set '@job_name$['@i],"ソードマン"; break; case Job_Magician: set '@job_name$['@i],"マジシャン"; break; case Job_Archer: set '@job_name$['@i],"アーチャー"; break; case Job_Acolyte: set '@job_name$['@i],"アコライト"; break; case Job_Merchant: set '@job_name$['@i],"マーチャント"; break; case Job_Thief: set '@job_name$['@i],"シーフ"; break; case Job_Knight: if(Upper == UPPER_HIGH) set '@job_name$['@i],"ロードナイト"; else set '@job_name$['@i],"ナイト"; break; case Job_Priest: if(Upper == UPPER_HIGH) set '@job_name$['@i],"ハイプリースト"; else set '@job_name$['@i],"プリースト"; break; case Job_Wizard: if(Upper == UPPER_HIGH) set '@job_name$['@i],"ハイウィザード"; else set '@job_name$['@i],"ウィザード"; break; case Job_Blacksmith: if(Upper == UPPER_HIGH) set '@job_name$['@i],"ホワイトスミス"; else set '@job_name$['@i],"ブラックスミス"; break; case Job_Hunter: if(Upper == UPPER_HIGH) set '@job_name$['@i],"スナイパー"; else set '@job_name$['@i],"ハンター"; break; case Job_Assassin: if(Upper == UPPER_HIGH) set '@job_name$['@i],"アサシンクロス"; else set '@job_name$['@i],"アサシン"; break; case Job_Crusader: if(Upper == UPPER_HIGH) set '@job_name$['@i],"パラディン"; else set '@job_name$['@i],"クルセイダー"; break; case Job_Monk: if(Upper == UPPER_HIGH) set '@job_name$['@i],"チャンピオン"; else set '@job_name$['@i],"モンク"; break; case Job_Sage: if(Upper == UPPER_HIGH) set '@job_name$['@i],"プロフェッサー"; else set '@job_name$['@i],"セージ"; break; case Job_Rogue: if(Upper == UPPER_HIGH) set '@job_name$['@i],"チェイサー"; else set '@job_name$['@i],"ローグ"; break; case Job_Alchemist: if(Upper == UPPER_HIGH) set '@job_name$['@i],"クリエイター"; else set '@job_name$['@i],"アルケミスト"; break; case Job_Bard: if(Upper == UPPER_HIGH) set '@job_name$['@i],"クラウン"; else set '@job_name$['@i],"バード"; break; case Job_Dancer: if(Upper == UPPER_HIGH) set '@job_name$['@i],"ジプシー"; else set '@job_name$['@i],"ダンサー"; break; case Job_SuperNovice: set '@job_name$['@i],"スーパーノービス"; break; case Job_Taekwon: set '@job_name$['@i],"テコンキッド"; break; case Job_Star: set '@job_name$['@i],"拳聖"; break; case Job_Linker: set '@job_name$['@i],"ソウルリンカー"; break; case Job_Gunslinger: set '@job_name$['@i],"ガンスリンガー"; break; case Job_Ninja: set '@job_name$['@i],"忍者"; break; case Job_Gyangsy: if(Sex) set '@job_name$['@i],"ボンゴン"; else set '@job_name$['@i],"ムナック"; break; case Job_DeathKnight: set '@job_name$['@i],"デスナイト"; break; case Job_DarkCollector: set '@job_name$['@i],"ダークコレクター"; break; case Job_RuneKnight: set '@job_name$['@i],"ルーンナイト"; break; case Job_Warlock: set '@job_name$['@i],"ウォーロック"; break; case Job_Ranger: set '@job_name$['@i],"レンジャー"; break; case Job_ArchBishop: set '@job_name$['@i],"アークビショップ"; break; case Job_Mechanic: set '@job_name$['@i],"メカニック"; break; case Job_Guillotine: set '@job_name$['@i],"ギロチンクロス"; break; case Job_RoyalGuard: set '@job_name$['@i],"ロイヤルガード"; break; case Job_Sorcerer: set '@job_name$['@i],"ソーサラー"; break; case Job_Minstrel: set '@job_name$['@i],"ミンストレル"; break; case Job_Wanderer: set '@job_name$['@i],"ワンダラー"; break; case Job_Shura: set '@job_name$['@i],"修羅"; break; case Job_Genetic: set '@job_name$['@i],"ジェネティック"; break; case Job_ShadowChaser: set '@job_name$['@i],"シャドウチェイサー"; break; } } // 転職可能職業表示部分 set '@job_name$['@max],"やめる"; set @menu,select(printarray('@job_name$)); if('@job_id[@menu - 1] == 0) { // やめるを選んだ場合 mes "["+ strnpcinfo(0) + "]"; mes "またのご利用をお待ちしております。"; goto L_CLOSE; } // 選択した職業への転職確認 set '@sel_job,'@job_id[@menu - 1]; mes "["+ strnpcinfo(0) + "]"; mes "^FF0000" +'@job_name$[@menu - 1]+ "^000000へと"; mes "転職なさいますか?"; next; if(select("お願いする","取り消したい") == 2) { mes "["+ strnpcinfo(0) + "]"; mes "またのご利用をお待ちしております。"; goto L_CLOSE; } // 転職チェック(直前) // 職業ごとの転職条件をチェック、この辺のオンオフ等の変数は追加してあげたい。 switch('@sel_job) { case Job_Swordman: case Job_Magician: case Job_Archer: case Job_Acolyte: case Job_Merchant: case Job_Thief: case Job_Taekwon: case Job_Gunslinger: case Job_Ninja: case Job_Gyangsy: break; case Job_SuperNovice: if(BaseLevel < 45) { mes "["+ strnpcinfo(0) + "]"; mes "スーパーノービスへと転職するには"; mes "Baseレベルが45以上必要です。"; mes "Baseレベルを上げてからの"; mes "お越しをお待ちしております。"; goto L_CLOSE; } break; case Job_Knight: case Job_Priest: case Job_Wizard: case Job_Blacksmith: case Job_Hunter: case Job_Assassin: case Job_Crusader: case Job_Monk: case Job_Sage: case Job_Rogue: case Job_Alchemist: case Job_Bard: case Job_Dancer: case Job_Star: case Job_Linker: case Job_DeathKnight: case Job_DarkCollector: if(JobLevel < 40) { mes "["+ strnpcinfo(0) + "]"; mes "2次職に転職するには"; mes "Jobレベルが40以上必要です。"; mes "Jobレベルを上げてからの"; mes "お越しをお待ちしております。"; goto L_CLOSE; } break; case Job_RuneKnight: case Job_Warlock: case Job_Ranger: case Job_ArchBishop: case Job_Mechanic: case Job_Guillotine: case Job_RoyalGuard: case Job_Sorcerer: case Job_Minstrel: case Job_Wanderer: case Job_Shura: case Job_Genetic: case Job_ShadowChaser: // 養子の3次転職の可否 if('@change_baby == 0 && Upper == UPPPER_BABY) { mes "["+ strnpcinfo(0) + "]"; mes "申し訳ございません。"; mes "養子となられた方は、"; mes "転職条件から外れております。"; mes "お引き取りください。"; goto L_CLOSE; } // 近辺の設定の組み合わせで海外とか国内を切り替え。 if('@change_upper == 1 && Upper != UPPER_HIGH) { mes "["+ strnpcinfo(0) + "]"; mes "3次職に転職するには"; mes "転生されている必要があります。"; mes "またお越しください。"; goto L_CLOSE; } if(BaseLevel < '@change_baselv) { mes "["+ strnpcinfo(0) + "]"; mes "3次職に転職するには"; mes "Baseレベルが^0000FF"+'@change_baselv+"^000000必要です。"; mes "Baseレベルを上げてからの"; mes "お越しをお待ちしております。"; goto L_CLOSE; } // 今ふと気づいたけど、国内も海外もJobLv判定しないのね。Baseカンストのみなんだね。私的には欲しいかな。 if(Upper == UPPER_HIGH) set '@changejoblv,'@hchange_joblv; // 転生2次職ジョブレベル else set '@changejoblv,'@nchange_joblv; // 通常2次職ジョブレベル if(JobLevel < '@changejoblv) { // 設定レベルに満たない場合。 mes "["+ strnpcinfo(0) + "]"; mes "3次職に転職するには"; mes "Jobレベルが^0000FF" + '@changejoblv + "^000000必要です。"; mes "Jobレベルを上げてからの"; mes "お越しをお待ちしております。"; goto L_CLOSE; } break; } // いろんなものをまとめてチェック。ルーンナイト転職時にペコペコをセットオプションで初期化すればいいだけって話でもある。 if(checkfalcon() || checkriding() || checkdragon() || checkgear() || checkwolf()) { mes "["+ strnpcinfo(0) + "]"; mes "転職する為には、"; mes "ペコペコ・ファルコン等の"; mes "レンタル品を返却する必要があります。"; mes "その後に、申し込んでくださいね。"; goto L_CLOSE; } // 念のため重量チェック if('@change_weight != 0) { // 変数を0以外に指定した場合は、それ以降の重量チェックするようにしてます。 if(Weight >= '@change_weight) { // わかりにくいですが設定重量以上だと終了となります。 mes "["+strnpcinfo(0)+"]"; mes "規定の重量を超過しています。"; mes "転職する為には、"; mes "重量を^0000FF"+ ('@change_weight / 10) +"^000000以下の状態にし、"; // 試してないけど10未満を設定した場合おかしくなりそうな予感 mes "その後に、申し込んでくださいね。"; goto L_CLOSE; } } // 2次職の値を保存させたいため、3次職になる場合は転職直前にOLD_CLASSを保存。 if(Job >= Job_Knight && Job <= Job_Dancer) set OLD_CLASS,Job; unequip; jobchange '@sel_job; // 転職時のクエストスキル取得、オートバーサークと、エレメンタルチェンジ除外。 if('@getquestskill == 1) { switch(Job) { case Job_SuperNovice: if(getskilllv(143)==0) skill 143,1,0; // 死んだふり break; case Job_Swordman: case Job_Knight: case Job_Crusader: case Job_RuneKnight: case Job_RoyalGuard: if(getskilllv(144)==0) skill 144,1,0; // 移動時HP回復 if(getskilllv(145)==0) skill 145,1,0; // 急所攻撃 break; case Job_Magician: case Job_Wizard: case Job_Sage: case Job_Warlock: case Job_Sorcerer: if(getskilllv(157)==0) skill 157,1,0; // エナジーコート break; case Job_Archer: case Job_Hunter: case Job_Bard: case Job_Dancer: case Job_Ranger: case Job_Minstrel: case Job_Wanderer: if(getskilllv(147)==0) skill 147,1,0; // 矢作成 if(getskilllv(148)==0) skill 148,1,0; // チャージアロー break; case Job_Acolyte: case Job_Priest: case Job_Monk: case Job_ArchBishop: case Job_Shura: if(getskilllv(156)==0) skill 156,1,0; // ホーリーライト break; case Job_Merchant: case Job_Blacksmith: case Job_Alchemist: case Job_Mechanic: case Job_Genetic: if(getskilllv(153)==0) skill 153,1,0; // カートレボリューション if(getskilllv(154)==0) skill 154,1,0; // チェンジカート if(getskilllv(155)==0) skill 155,1,0; // ラウドボイス break; case Job_Thief: case Job_Assassin: case Job_Rogue: case Job_Guillotine: case Job_ShadowChaser: if(getskilllv(149)==0) skill 149,1,0; // 砂まき if(getskilllv(150)==0) skill 150,1,0; // バックステップ if(getskilllv(151)==0) skill 151,1,0; // 石拾い if(getskilllv(152)==0) skill 152,1,0; // 石投げ break; default: break; } switch(Job) { case Job_Knight: case Job_RuneKnight: if(getskilllv(1001)==0) skill 1001,1,0; // チャージアタック break; case Job_Priest: case Job_ArchBishop: if(getskilllv(1014)==0) skill 1014,1,0; // レディムプティオ break; case Job_Wizard: case Job_Warlock: if(getskilllv(1006)==0) skill 1006,1,0; // サイトブラスター break; case Job_Blacksmith: case Job_Mechanic: if(getskilllv(1012)==0) skill 1012,1,0; // フェイクゼニー if(getskilllv(1013)==0) skill 1013,1,0; // グリード break; case Job_Hunter: case Job_Ranger: if(getskilllv(1009)==0) skill 1009,1,0; // ファンタズミックアロー break; case Job_Assassin: case Job_Guillotine: if(getskilllv(1003)==0) skill 1003,1,0; // ソニックアクセラレーション if(getskilllv(1004)==0) skill 1004,1,0; // ベナムナイフ break; case Job_Crusader: case Job_RoyalGuard: if(getskilllv(1002)==0) skill 1002,1,0; // シュリンク break; case Job_Monk: case Job_Shura: if(getskilllv(1015)==0) skill 1015,1,0; // 気功転移 if(getskilllv(1016)==0) skill 1016,1,0; // 寸勁 break; case Job_Sage: case Job_Sorcerer: if(getskilllv(1007)==0) skill 1007,1,0; // クリエイトコンバーター break; case Job_Rogue: case Job_ShadowChaser: if(getskilllv(1005)==0) skill 1005,1,0; // クローズコンファイン break; case Job_Alchemist: case Job_Genetic: if(getskilllv(238)==0) skill 238,1,0; // 生命倫理 break; case Job_Bard: case Job_Minstrel: if(getskilllv(1010)==0) skill 1010,1,0; // パンボイス break; case Job_Dancer: case Job_Wanderer: if(getskilllv(1011)==0) skill 1011,1,0; // 魅惑のウィンク break; } if(getskilllv(142)==0) skill 142,1,0; // 応急手当 } mes "["+ strnpcinfo(0) + "]"; mes "転職おめでとうございます!"; mes "これからも貴方のご活躍に"; mes "期待しています。"; // 下記だと、レンジャーに大神の笛、影チェイサに筆をプレゼントしてます。 if(Job == Job_Ranger) { getitem 6124,1; mes "レンジャーの方には大神の笛を"; mes "差し上げますね。"; mes "役に立ててくださいね。"; } else if(Job == Job_ShadowChaser) { getitem 6121,1; getitem 6122,1; mes "シャドウチェイサーの方には、"; mes "ペイントセットを差し上げています。"; mes "役に立つ物だと良いのですが。"; } goto L_CLOSE; case 2: // 転生 // 転生回数判定 if(UPPER_cnt >= '@trans_max) { if('@trans_max == 0) { mes "["+ strnpcinfo(0) + "]"; mes "あなたが転生することで、"; mes "今以上の力を手に入れることはないようです。"; mes "お引取りください。"; goto L_CLOSE; } else { mes "["+ strnpcinfo(0) + "]"; mes "あなたは限界まで転生を"; mes "行いましたので、"; mes "これ以上転生することはできません。"; if(UPPER_cnt > 1) mes "^0000FF(最終転生回数 " +(UPPER_cnt)+ "回)^000000"; goto L_CLOSE; } } // 転生条件 // この辺を独自にカスタマイズすることで転生条件をカスタマイズできます。 // まずはベースレベル、極端な値を設定すれば除外設定にもなるかな? if(Job >= Job_RuneKnight && Job <= Job_ShadowChaser && BaseLevel < '@trans_third) { // 3次職の場合 mes "["+ strnpcinfo(0) + "]"; mes "申し訳ございません。"; mes "転生条件から外れております。"; mes "転生するにはベースレベルが^0000FF"+'@trans_third+"^000000に"; mes "達している方となります。"; goto L_CLOSE; } else if(BaseLevel < '@trans_base) { // それ以外 mes "["+ strnpcinfo(0) + "]"; mes "申し訳ございません。"; mes "転生条件から外れております。"; mes "転生するにはベースレベルが^0000FF"+'@trans_base+"^000000に"; mes "達している方となります。"; goto L_CLOSE; } switch(Upper) { // Upperごとにまず振り分け case UPPER_NORMAL: // 通常の場合 if(Job >= Job_Knight && Job <=Job_Dancer) { // 2次職 if(JobLevel >= '@normal_job) { // ジョブレベル判定 break; // 条件を満たしているので抜けます } } if(Job >= Job_RuneKnight && Job <= Job_ShadowChaser) { // 3次職 if(JobLevel >= '@nthird_job) { break; // 条件を満たしているので抜けます } } if('@subclass_trans == 1) { // 拡張職を転生させるかどうか if(Job == Job_SuperNovice && JobLevel >= 99) { // Sノビ break; // 条件を満たしているので抜けます } else if(Job >= Job_Star && Job <= Job_DarkCollector && JobLevel >= 50) { // Sノビ、テコン以外の拡張職 break; // 条件を満たしているので抜けます } } mes "["+ strnpcinfo(0) + "]"; mes "申し訳ございません。"; mes "転生条件として、"; if('@normal_job != 0) mes "2次職の方はジョブレベルが、^0000FF"+'@normal_job+"^000000に達している必要があります。"; if('@nthird_job != 0) mes "3次職の方はジョブレベルが、^0000FF"+'@nthird_job+"^000000に達している必要があります。"; if('@subclass_trans ==1) mes "拡張職の方はジョブレベルが、^0000FF最大^000000に達する必要があります。"; goto L_CLOSE; case UPPER_HIGH: // 転生の場合 if(Job >= Job_Knight && Job <=Job_Dancer) { // 転生2次職 if(JobLevel >= '@high_job) { break; } } if(Job >= Job_RuneKnight && Job <= Job_ShadowChaser) { // 転生3次職 if(JobLevel >= '@hthird_job) { break; } } if('@subclass_trans == 1) { // 拡張職を転生させるかどうか if(Job == Job_SuperNovice && JobLevel >= 99) { // 転生Sノビ break; // 条件を満たしているので抜けます } else if(Job >= Job_Star && Job <= Job_DarkCollector && JobLevel >= 50) { // 転生済みのSノビ、テコン以外の拡張職 break; // 条件を満たしているので抜けます } } mes "["+ strnpcinfo(0) + "]"; mes "申し訳ございません。"; mes "転生条件として、"; if('@high_job != 0) mes "2次職の方はジョブレベルが、^0000FF"+'@high_job+"^000000に達している必要があります。"; if('@hthird_job != 0) mes "3次職の方はジョブレベルが、^0000FF"+'@hthird_job+"^000000に達している必要があります。"; if('@subclass_trans ==1) mes "拡張職の方はジョブレベルが、^0000FF最大^000000に達する必要があります。"; goto L_CLOSE; case UPPER_BABY: // 養子の場合 mes "["+ strnpcinfo(0) + "]"; mes "申し訳ございません。"; mes "養子となられた方は、"; mes "転生条件から外れております。"; mes "お引き取りください。"; goto L_CLOSE; } // 転生費用チェック if(Zeny < '@trans_zeny) { mes "["+ strnpcinfo(0) + "]"; mes "転生を執り行う為に、"; mes "^0000FF" + '@trans_zeny + " Zeny^000000を頂いております。"; mes "上記金額を持参の上、"; mes "再度申請をお願い致します。"; goto L_CLOSE; } // 重量チェック 重量に段階設定を設けるべきなのかなぁ?ってことでつけました。 if('@trans_weight != 0) { // 変数を0以外に指定した場合は、それ以降の重量チェックするようにしてます。 if(Weight >= '@trans_weight) { // わかりにくいですが設定重量以上だと終了となります。 mes "["+strnpcinfo(0)+"]"; mes "規定の重量を超過しています。"; mes "転生のを執り行う為に、"; mes "重量を^0000FF"+ ('@trans_weight / 10) +"^000000以下の状態にし、"; // 試してないけど10未満を設定した場合おかしくなりそうな予感 mes "再度申請をお願い致します。"; goto L_CLOSE; } } // いろんなものをまとめてチェック(貸出品とWugとGear) if(checkcart() || checkfalcon() || checkriding() || checkdragon() || checkgear() || checkwolf()) { mes "["+ strnpcinfo(0) + "]"; mes "転生を執り行う為には、"; mes "カート・ペコペコ・ファルコン等の"; mes "レンタル品を返却する必要があります。"; mes "その後、再度申請をお願い致します。"; goto L_CLOSE; } //ホムンクルスを連れているならはじく if(gethomuninfo(5)) { mes "["+ strnpcinfo(0) + "]"; mes "転生を執り行う為には、"; mes "ホムンクルスと別れてから"; mes "その後、再度申請をお願い致します。"; goto L_CLOSE; } // お金払って転生する? mes "["+ strnpcinfo(0) + "]"; mes "転生を執り行うにあたり、"; mes "何点か確認させて頂く項目があります。"; if('@trans_zeny != 0) { mes "また、費用として、"; mes "^0000FF" + '@trans_zeny + " Zeny^000000を頂いております。"; } mes "引き続き申請を続行されますか?"; next; if(select("お願いします","やっぱいい") == 2) { mes "["+ strnpcinfo(0) + "]"; mes "転生の準備は済んでいるようですが、"; mes "今回は辞退なさるのですね。"; mes "それでは、またのお越しをお待ちしております。"; goto L_CLOSE; } // 実際の処理 mes "["+ strnpcinfo(0) + "]"; mes "それでは早速ですが、"; mes "事前審査を行わせて頂きます。"; mes "この場で少々お待ちいただけますか。"; // もうすでにチェック終わってるけどなんとなく… next; mes "……"; mes "ここはだいじょうぶっと……"; next; mes "んー……"; mes "よしっ"; next; mes "["+ strnpcinfo(0) + "]"; mes "大変お待たせ致しました。"; mes "無事事前審査を終了致しました。"; mes "それではこのまま転生の"; mes "儀式に移らせて頂きますね。"; next; mes "["+ strnpcinfo(0) + "]"; // こういうのがあるとテンション上がるのはわたしだけでしょうか? mes "一つ"; next; mes "["+ strnpcinfo(0) + "]"; mes "二つ……"; next; mes "["+ strnpcinfo(0) + "]"; mes "三つ……"; next; set Zeny,Zeny - '@trans_zeny; // お金を取ってます // 3次職の場合は2次職の値を上書きされないように省きます。ここで改めて2次職次の値を保存するのも一つの手なのかなぁ? set '@samstpoint,'@bonus_stpoint + ('@n_bstpoint_plus * UPPER_cnt); if('@samstpoint >= '@max_stbonus) // 今頃計算するなって話ですよね…。 set '@samstpoint,'@max_stbonus; if(Job < Job_RuneKnight || Job > Job_ShadowChaser) set OLD_CLASS,Job; jobchange Job_Novice,UPPER_HIGH; // 転生です set BaseLevel,1; // ベースも1になっちゃいます resetstatus; // 振ったステータスも初期化 resetskill; // スキルも // 転生ボーナスと転生回数のセット set UPPER_cnt,UPPER_cnt+1; // 転生したのでUPPER_cntに1加算 if ('@max_bonus_skillpoint > UPPER_cnt){ set SkillPoint, UPPER_cnt; }else{ set SkillPoint,'@max_bonus_skillpoint; } set StatusPoint,'@samstpoint; // 複数回転生時のボーナス対応 setoption 0x0000; // 状態異常系ステータス初期化です skill 143,1,0; // 死んだふり skill 142,1,0; // 応急手当 getitem 1202,1; // ナツフ getitem 2302,1; // コットンシャツ if('@trans_max == 1) announce strcharinfo(0)+ "さんが転生を行いました!",(0x10); // アナウンスが邪魔ならコメントアウト else announce strcharinfo(0)+ "さんが" +(UPPER_cnt)+ "回目の転生を行いました!",(0x10); mes "["+ strnpcinfo(0) + "]"; mes "これにて転生の儀式終了となります。"; mes "新たなる旅立ちを祝し、"; mes "心よりお祝い申し上げます。"; break; case 3: //転生回数の確認 mes "["+ strnpcinfo(0) + "]"; mes "現在の転生回数は" + UPPER_cnt + "回です。"; if ('@trans_max > UPPER_cnt){ mes "あと" + ('@trans_max - UPPER_cnt) + "回転生できます。"; mes "これからも頑張ってくださいね。"; } else { mes "すでに、最大転生回数に到達して"; mes "いるようですね。"; mes "これ以上の転生は出来ませんよ。"; } break; default: // キャンセル時 mes "["+ strnpcinfo(0) + "]"; mes "そんなこと言わずに、"; mes "また来てくださいね。"; break; } L_CLOSE: // 終了処理 close2; cutin "kh_ellisia",255; end; }