// ========================================= // PTvPT!! ver1 by夢くじら // ========================================= //guild_vs1 guild_vs1.gat mapflag nomemo dummy guild_vs1.gat mapflag noteleport dummy guild_vs1.gat mapflag nosave quiz_00.gat,56,28 guild_vs1.gat mapflag pvp dummy guild_vs1.gat mapflag pvp_noparty dummy guild_vs1.gat mapflag pvp_nopenalty dummy //guild_vs2 guild_vs2.gat mapflag nomemo dummy guild_vs2.gat mapflag noteleport dummy guild_vs2.gat mapflag nosave quiz_00.gat,56,28 guild_vs2.gat mapflag pvp dummy guild_vs2.gat mapflag pvp_noparty dummy guild_vs2.gat mapflag pvp_nopenalty dummy //guild_vs3 guild_vs3.gat mapflag nomemo dummy guild_vs3.gat mapflag noteleport dummy guild_vs3.gat mapflag nosave quiz_00.gat,56,28 guild_vs3.gat mapflag pvp dummy guild_vs3.gat mapflag pvp_noparty dummy guild_vs3.gat mapflag pvp_nopenalty dummy //guild_vs4 guild_vs4.gat mapflag nomemo dummy guild_vs4.gat mapflag noteleport dummy guild_vs4.gat mapflag nosave quiz_00.gat,56,28 guild_vs4.gat mapflag pvp dummy guild_vs4.gat mapflag pvp_noparty dummy guild_vs4.gat mapflag pvp_nopenalty dummy //guild_vs5 guild_vs5.gat mapflag nomemo dummy guild_vs5.gat mapflag noteleport dummy guild_vs5.gat mapflag nosave quiz_00.gat,56,28 guild_vs5.gat mapflag pvp dummy guild_vs5.gat mapflag pvp_noparty dummy guild_vs5.gat mapflag pvp_nopenalty dummy // ----------------------------------------- // 各種フラグ初期化用のマップイベント // ----------------------------------------- quiz_00.gat,0,0,0 script ptvptInit -1,{ end; OnInit: set $@ptvpt,0; //[メインフラグ]0:未開始 1:開始カウント中 2:戦闘中 set $@map_ptvpt$[0],"guild_vs4.gat"; //[使用マップ1] set $@map_ptvpt$[1],"guild_vs1.gat"; //[使用マップ2]未使用 set $@map_ptvpt$[2],"guild_vs2.gat"; //[使用マップ3]未使用 set $@map_ptvpt$[3],"guild_vs3.gat"; //[使用マップ4]未使用 set $@map_ptvpt$[4],"guild_vs5.gat"; //[使用マップ5]未使用 set $@map_num,0; //[使用マップナンバー]0-4 set $@rule_ptvpt,0; //[ルール]0:ノーマルルール 1:MPKモード set $@entry_num,0; //[エントリーPT数] set $@start_num,4; //[スタート位置の候補数] //[開始座標設定]2元配列は使えないようなので…使用マップ*の(X,Y)=(pos*_x[i],pos*_y[i]) setarray $@start_pos0_x[0],50,92,50,7; setarray $@start_pos0_y[0],91,49,7,49; setarray $@start_pos1_x[0],50,92,50,7;//未使用 setarray $@start_pos1_y[0],91,49,7,49;//未使用 setarray $@start_pos2_x[0],50,92,50,7;//未使用 setarray $@start_pos2_y[0],91,49,7,49;//未使用 setarray $@start_pos3_x[0],50,85,50,15;//未使用 setarray $@start_pos3_y[0],85,50,15,50;//未使用 setarray $@start_pos4_x[0],49,79,49,20;//未使用 setarray $@start_pos4_y[0],74,49,24,49;//未使用 end; } // ----------------------------------------- // 転送要員 // ----------------------------------------- izlude.gat,122,121,4 script PTvPT転送要員 105,{ mes "[PTvPT転送要員]"; mes "こちらからは、PTvPT控え室"; mes "への転送を行っています。"; next; menu "PTvPT控え室に行く",L_GO,"PTvPTって?",L_FAQ,"やめる",L_QUIT; L_GO: //PTvPT控え室へ if($@ptvpt==2){ mes "[PTvPT転送要員]"; mes "現在戦闘中ですので、"; mes "新規エントリーはできません。"; mes "それでもよろしいですか?"; next; menu "それでも行く",-,"やめる",L_QUIT; } mes "[PTvPT転送要員]"; mes "現在テスト版です。"; mes "正しく動作しない可能性があります。"; close2; warp "quiz_00.gat",66,6; end; L_FAQ: //PTvPTの説明 mes "[PTvPT転送要員]"; mes "PTvPTとは、"; mes "パーティーvsパーティー"; mes "の略です。"; next; mes "[PTvPT転送要員]"; mes "最大4チームのパーティーで"; mes "戦闘を繰り広げることができます。"; next; mes "[PTvPT転送要員]"; mes "準備や方法などの詳しい事は、"; mes "PTvPT控え室の担当に"; mes "説明を受けてください。"; close; L_QUIT: //脱出 mes "[PTvPT転送要員]"; mes "わかりました。"; mes "御用のときは話しかけてください。"; close; } // ----------------------------------------- // 転送要員(帰還用) // ----------------------------------------- quiz_00.gat,58,36,4 script 転送要員 105,{ mes "[転送要員]"; mes "イズルードに戻りますか?"; next; menu "戻る",-,"戻らない",L_END; mes "[転送要員]"; mes "では、転送します。"; close2; warp "izlude.gat",128,110; end; L_END: mes "[転送要員]"; mes "わかりました"; close; } // ----------------------------------------- // 解説役 // ----------------------------------------- quiz_00.gat,79,29,4 script ユルト 728,{ mes "[ユルト]"; mes "こんにちは、PTvPT"; mes "解説役のユルトですっ!"; L_MENU: next; menu "PTvPTって?",L_0,"開始方法は?",L_1,"ルールについて教えて!",L_2,"用はない。",L_END; L_0: //PTvPTって? mes "[ユルト]"; mes "PTvPTとは、"; mes "パーティーvsパーティーの略で"; mes "エリア内の他PTを排除する"; mes "ゲームの事です。"; next; mes "[ユルト]"; mes "PTvPTには、最大4PTが同時に"; mes "参加することができ、"; mes "3PT以上のゲームだと、他のPTを"; mes "すべて潰すバトルロイヤル形式と"; mes "なります。"; next; mes "[ユルト]"; mes "PTvPTは、専用のマップで行います。"; mes "東西南北4つの開始地点から、"; mes "それぞれのPTの開始地点が"; mes "ランダムに決定されます。"; next; mes "[ユルト]"; mes "専用マップに転送された直後から"; mes "ゲーム開始となります。"; mes "頑張って他のパーティーを"; mes "虐殺してください♪"; goto L_MENU; L_1: //開始方法は? mes "[ユルト]"; mes "開始方法は重要です!"; mes "PTメンバー皆さんが確認して"; mes "おいたほうが良いですよ〜。"; next; mes "[ユルト]"; mes "まず、PTを用意してください。"; mes "初めから用意されていたものでも、"; mes "ここで作成するものでも良いです。"; mes "PTに入っていない人は、"; mes "ゲームに参加できません!"; next; mes "[ユルト]"; mes "次に、中央のガルソディに"; mes "PTリーダーが話しかけて、"; mes "エントリーを行います。"; next; mes "[ユルト]"; mes "すべての参加するPTがエントリーを"; mes "終了させ、ルールも決定していたら、"; mes "何処のPTリーダーも良いのでガルソディに"; mes "話かけ、開始を選んでください。"; next; mes "[ユルト]"; mes "5秒後に、すべてのPTのメンバーが"; mes "転送されて、ゲーム開始となります。"; goto L_MENU; L_2: //ルールについて教えて! mes "[ユルト]"; mes "■ノーマルモード"; mes "通常のモードです。"; mes "マップルールはPvP。"; mes "相手のリーダーを倒せば勝利です。"; next; mes "[ユルト]"; mes "■MPKモード"; mes "マップルールはPvPで、相手のリーダー"; mes "を倒せば勝利というルールは、"; mes "ノーマルモードと変わりません。"; next; mes "[ユルト]"; mes "ですが、ここでは一定時間で"; mes "MVPBOSSが沸きます。"; mes "出てきたMVPをうまく相手に向けることで"; mes "戦略の幅が広がります。"; mes "(未実装)"; goto L_MENU; L_END: mes "[ユルト]"; mes "わからないことがあったら"; mes "何でも聞いてくださいね。"; close; } // ----------------------------------------- // PTvPT開始役 // ----------------------------------------- quiz_00.gat,71,35,4 script ガルソディ 734,{ //まずフラグで分岐 if($@ptvpt==1){ goto L_STARTING; //転送秒読み中 }else if($@ptvpt==2){ goto L_STARTED; //戦闘中 } //■通常の動作 mes "[ガルソディ]"; mes "ここはPTvPT受付だ。"; mes "何の用だ?"; next; menu "エントリーをする",L_ENTRY,"エントリーを取り消す",L_QUIT_ENTRY,"エントリーPTを確認",L_CHK,"PTvPT開始",L_START,"やめる",L_QUIT; L_MENU: //メニュー mes "[ガルソディ]"; mes "他に何か用はあるか?"; next; menu "エントリーをする",L_ENTRY,"エントリーを取り消す",L_QUIT_ENTRY,"エントリーPTを確認",L_CHK,"PTvPT開始",L_START,"やめる",L_QUIT; L_ENTRY://★エントリーをする if($@lock_ptvpt==1){ mes "[ガルソディ]"; mes "現在、他の誰かが利用中だ。"; mes "少々待ってくれ。"; next; goto L_MENU; } set $@lock_ptvpt,1; //お粗末な排他処理:ロックをかける //エントリー状態を確認 set @temp,getcharid(1); //自分のパーティID if(getcharid(1) <= 0) goto L_ENTRY_ERR2; //パーティに入ってなければエラー if(getpartyleader(@temp)!=getcharname(getcharid(0))) goto L_ENTRY_ERR3; //PTLでなければエラー if($@entry_num==0) goto L_ENTRY2; //カウントが0ならば検索なしで追加 for(set @i,0;@i<$@entry_num;set @i,@i+1){ if($@entry_ptid[@i]==@temp) goto L_ENTRY_ERR; } goto L_ENTRY2; L_ENTRY_ERR: mes "[ガルソディ]"; mes "すでに君のパーティー"; mes "[^0000EE"+getpartyname(@temp)+"^000000]は"; mes "エントリー済みのようだ。"; next; goto L_ENTRY_EXIT; L_ENTRY_ERR2: mes "[ガルソディ]"; mes "君はパーティに入ってないじゃないか!"; mes "パーティを作るか、誰かのパーティに"; mes "入ってからエントリーしてくれ。"; next; goto L_ENTRY_EXIT; L_ENTRY_ERR3: mes "[ガルソディ]"; mes "エントリーするならパーティリーダー"; mes "が話しかけてくれないか?"; next; goto L_ENTRY_EXIT; L_ENTRY_ERR2_: mes "[ガルソディ]"; mes "君はエントリーしてないじゃないか!"; mes "パーティを作るか、誰かのパーティに"; mes "入ってからエントリーしてくれ。"; next; goto L_ENTRY_EXIT; L_ENTRY_ERR3_: mes "[ガルソディ]"; mes "開始するならパーティリーダー"; mes "が話しかけてくれないか?"; next; goto L_ENTRY_EXIT; L_ENTRY2: mes "[ガルソディ]"; mes "では君のパーティー"; mes "[^0000EE"+getpartyname(@temp)+"^000000]の"; mes "エントリーを受け付けよう。"; mes "よいかね?"; next; menu "エントリーをする",L_ENTRY3,"やっぱりやめる",L_ENTRY_EXIT; L_ENTRY3: announce "["+getpartyname(@temp)+"]パーティがPTvPTにエントリーしました",0x10; //エントリーを受け付ける set $@entry_ptid[$@entry_num],@temp; set $@entry_num,$@entry_num+1; mes "[ガルソディ]"; mes "確かにエントリーを受け付けた。"; next; L_ENTRY_EXIT: //エントリーから抜ける処理 set $@lock_ptvpt,0; goto L_MENU; L_QUIT_ENTRY://★エントリーを取り消す if($@lock_ptvpt==1){ mes "[ガルソディ]"; mes "現在、他の誰かが利用中だ。"; mes "少々待ってくれ。"; next; goto L_MENU; } set $@lock_ptvpt,1; //ロックをかける //エントリー状態を確認 set @temp,getcharid(1); if($@entry_num==0) goto L_QUIT_ENTRY_ERR; //カウントが0ならば即エラー for(set @i,0;@i<$@entry_num;set @i,@i+1){ if($@entry_ptid[@i]==@temp) goto L_QUIT_ENTRY2; } goto L_QUIT_ENTRY_ERR; L_QUIT_ENTRY_ERR: mes "[ガルソディ]"; mes "君のパーティーはエントリー"; mes "されていないようだ。"; next; goto L_QUIT_ENTRY_EXIT; L_QUIT_ENTRY2: mes "[ガルソディ]"; mes "では君のパーティー"; mes "[^0000EE"+getpartyname(@temp)+"^000000]の"; mes "エントリーを取り消そう。"; mes "よいかね?"; next; menu "エントリーを取り消す",L_QUIT_ENTRY3,"やっぱりやめる",L_QUIT_ENTRY_EXIT; L_QUIT_ENTRY3: //エントリーを取り消し set $@entry_num,$@entry_num-1; for(set @i,@i;@i<$@entry_num;set @i,@i+1){ set $@entry_ptid[@i],$@entry_ptid[@i+1]; } announce "["+getpartyname(@temp)+"]パーティがPTvPTにエントリーを取り消しました",0x10; mes "[ガルソディ]"; mes "エントリーを取り消したぞ。"; next; L_QUIT_ENTRY_EXIT: //クイットエントリーから抜ける処理 set $@lock_ptvpt,0; goto L_MENU; L_CHK: //★エントリーチェック //エントリーパーティーはいる? if($@entry_num==0){ mes "[ガルソディ]"; mes "現在エントリーしている"; mes "パーティーはないようだ。"; next; goto L_MENU; } mes "[ガルソディ]"; mes "現在エントリーしている"; mes "パーティーの情報は次のとおりだ。"; next; for(set @i,0;@i<$@entry_num;set @i,@i+1){ set @temp,$@entry_ptid[@i]; getpartymember(@temp); set @j,@i+1; mes "PT."+@j+" [^0000EE"+getpartyname(@temp)+"^000000]"; mes "[リーダー]^DD0000"+getpartyleader(@temp)+"^000000"; for(set @j,1;@j<$@partymembercount;set @j,@j+1){ mes "["+@j+"人目]"+$@partymembername$[@j]; } next; } goto L_MENU; L_RULE: //★ルール変更 mes "[ガルソディ]"; mes "まだ未実装だ。"; next; goto L_MENU; L_START://★PTvPTスタートです set @temp,getcharid(1); //自分のパーティID if(getcharid(1) <= 0) goto L_ENTRY_ERR2_; //パーティに入ってなければエラー if(getpartyleader(@temp)!=getcharname(getcharid(0))) goto L_ENTRY_ERR3_; //PTLでなければエラー //エントリー数が2未満なら終了 if($@entry_num<2){ mes "[ガルソディ]"; mes "エントリーしているパーティーが"; mes "2つ以上じゃないと開始はできないぞ。"; next; goto L_MENU; } if($@lock_ptvpt==1){ mes "[ガルソディ]"; mes "現在、他の誰かが利用中だ。"; mes "少々待ってくれ。"; next; goto L_MENU; } set $@lock_ptvpt,1; //ロックをかける mes "[PTvPT転送要員]"; mes "現在エントリーしているパーティーは^0000EE"; for(set @i,0;@i<$@entry_num;set @i,@i+1){ set @temp,$@entry_ptid[@i]; mes "[^0000EE"+getpartyname(@temp)+"^000000]"; } mes "^000000の"+$@entry_num+"つのパーティーだ。"; next; mes "[ガルソディ]"; mes "本当にPTvPTを開始してもいいんだな?"; mes "全員に了承はとったか?"; next; menu "PTvPT開始!!",L_START2,"ちょっとまって",L_START_EXIT; L_START2: set $@ptvpt,1; //フラグ変更 initnpctimer "StartTimer";//タイマー開始 set $@lock_ptvpt,0; close; L_START_EXIT: set $@lock_ptvpt,0; goto L_MENU; L_QUIT://★終了するところ mes "[ガルソディ]"; mes "用があったら声をかけてくれ。"; close; //■カウント中 L_STARTING: mes "[ガルソディ]"; mes "開始を取りやめるか?"; menu "取りやめる",-,"やめない",L_QUIT; stopnpctimer "StartTimer"; announce "ガルソディ : 転送をキャンセルした",0x01; set $@ptvpt,0; close; //■戦闘中 L_STARTED: mes "[ガルソディ]"; mes "現在、中で^0000EE"; for(set @i,0;@i<$@entry_num;set @i,@i+1){ set @temp,$@entry_ptid[@i]; mes "[^0000EE"+getpartyname(@temp)+"^000000]"; } mes "の"+$@entry_num+"パーティーが戦闘中だ。"; next; mes "[ガルソディ]"; mes "終了するまでしばらく待ってくれ。"; close; //■初期化イベント OnInit: set $@entry_num,0; set $@lock,0; } // ----------------------------------------- // PTvPT転送イベント // ----------------------------------------- quiz_00.gat,0,0,0 script StartTimer -1,{ end; OnTimer200: mapannounce "quiz_00.gat","ガルソディ : では、これより5秒後に転送を開始する。",8; mapannounce "quiz_00.gat","ガルソディ : 取り消したい場合は5秒以内に私に話しかけるように。",8; end; OnTimer1400: mapannounce "quiz_00.gat","ガルソディ : 4秒前",8; end; OnTimer2600: mapannounce "quiz_00.gat","ガルソディ : 3秒前",8; end; OnTimer3800: mapannounce "quiz_00.gat","ガルソディ : 2秒前",8; end; OnTimer5000: mapannounce "quiz_00.gat","ガルソディ : 1秒前",8; end; OnTimer6200: mapannounce "quiz_00.gat","ガルソディ : では、転送する",8; set $@ptvpt,2; //ジャンプ先の座標をコピー switch($@map_num){ case 0: copyarray $@jump_x[0],$@start_pos0_x[0],$@start_num; copyarray $@jump_y[0],$@start_pos0_y[0],$@start_num; break; default: break; } //適当なシャッフル(開始地点候補が多くなればなるほどシャッフル数を多くしないとダメ) for(set $@j,0;$@j<10;set $@j,$@j+1){ set $@temp_1,rand($@start_num); set $@temp_2,rand($@start_num); set $@temp,$@jump_x[$@temp_1]; set $@jump_x[$@temp_1],$@jump_x[$@temp_2]; set $@jump_x[$@temp_2],$@temp; set $@temp,$@jump_y[$@temp_1]; set $@jump_y[$@temp_1],$@jump_y[$@temp_2]; set $@jump_y[$@temp_2],$@temp; } //パーティーごとに転送開始 for(set $@i,0;$@i<$@entry_num;set $@i,$@i+1){ set $@temp,$@entry_ptid[$@i]; getpartymember($@temp); for(set $@j,0;$@j<$@partymembercount;set $@j,$@j+1){ //一人一人飛ばしていく if(attachrid(getcharid(3,$@partymembername$[$@j]))!=0){ //ここで控え室にいるかの判定 if(getmapname($@partymembername$[$@j])=="quiz_00.gat") warp $@map_ptvpt$[$@map_num],$@jump_x[$@i],$@jump_y[$@i]; detachrid; } } } stopnpctimer "StartTimer"; initnpctimer "GameStart"; end; } // ----------------------------------------- // ゲームの状況を管理するマップイベント // ----------------------------------------- - script GameStart -1,{ end; OnTimer1000: //変数などの初期化 set $@exist_num,$@entry_num; copyarray $@exist_ptid,$@entry_ptid,$@entry_num; //スタートのアナウンス・生存チェック開始 mapannounce $@map_ptvpt$[$@map_num],"PTvPTスタート!!",8; stopnpctimer "GameStart"; initnpctimer "GameMaster"; end; } - script GameMaster -1,{ end; OnPCLogout: OnPCDie: if(getpartyleader(getcharid(1))!=getcharname(getcharid(0))) goto L_; //PTL判定 mapannounce $@map_ptvpt$[$@map_num],"["+getpartyname(getcharid(1))+"]のパーティリーダーが戦闘から離脱!",8; set $@exist_num,$@exist_num-1; //まだゲームが続くか? if($@exist_num==1){ //ただ1PTの勝利 mapannounce $@map_ptvpt$[$@map_num],"勝負あり!!",8; goto L_EXIT; } //PTL死亡時メンバー全員転送 set $@temp,getcharid(1); getpartymember($@temp); for(set $@j,0;$@j<$@partymembercount;set $@j,$@j+1){ //一人一人飛ばしていく if(attachrid(getcharid(3,$@partymembername$[$@j]))!=0){ //ここで控え室にいるかの判定 if(getmapname($@partymembername$[$@j])==$@map_ptvpt$[$@map_num]) warp "quiz_00.gat",57,28; detachrid; } } end; L_EXIT: initnpctimer "GameQuit"; stopnpctimer; end; L_: mapannounce $@map_ptvpt$[$@map_num],"["+getpartyname(getcharid(1))+"]の"+strcharinfo(0)+"が戦闘から離脱!",8; if(getmapname(strcharinfo(0))==$@map_ptvpt$[$@map_num]) warp "quiz_00.gat",57,28; end; } - script GameQuit -1,{ end; OnTimer1000: //★全てのキャラクターを転送して終了 mapannounce $@map_ptvpt$[$@map_num],"それでは待機部屋に転送します",8; end; OnTimer6000: areawarp $@map_ptvpt$[$@map_num],0,0,999,999,"quiz_00.gat",57,28; donpcevent "ptvptInit::OnInit"; end; }