//無限回廊 http://ro-server.net84.net/ //入口スクリプト hugel.gat,42,124,5 script 美妙枝::Infinity_Entrance 831,{ //strnpcinfo(1) //NPC表示名 //strcharinfo(0) //キャラクターID //getcharid(1) //攻略PTのID //'@Select_Mes$['@i] //メニュー表示用 //'ptname$['@menu] //攻略PTの名称 //セット時の設定 //$@ptid[] //各ゲートの攻略PTのID (終了時初期化=0) 攻略中フラグ //$@End_Time[] //各ゲートの終了時間(分) (セット時初期化=60) //$@Mob_Count[] //各ゲートの初期配置MOB数 (セット時初期化=10) //$@Kill_Count[] //各ゲートの撃破MOB数 (セット時初期化=0) //$@Next_Info[] //各ゲートの次の部屋の種類 (セット時初期化=-1) //$@Now_Area[] //各ゲートの現在の階数 (セット時初期化=1) //初期設定(OnInit) //$@Gate_num //ゲート最大数 //$@Rooms //部屋の種類の最大数 //$@Warp_Posx[] //各ゲートのワープ座標X //$@Warp_Posy[] //各ゲートのワープ座標Y //$@Mob_Posx1[] //各ゲートのMOB出現座標X1 //$@Mob_Posy1[] //各ゲートのMOB出現座標Y1 //$@Mob_Posx2[] //各ゲートのMOB出現座標X2 //$@Mob_Posy2[] //各ゲートのMOB出現座標Y2 mes "["+strnpcinfo(1)+"]"; //挑戦中チェック for(set '@i,1;'@i <= $@Gate_num;set '@i,'@i+1) { if ($@ptid['@i] == getcharid(1) && getpartyname(getcharid(1)) != ""){ mes "終了まであと^ff0000" + $@End_Time['@i] + "^000000分です。"; //デバッグ用 mes "現在ゲート^ff0000" + '@i + "^000000の^ff0000" + $@Now_Area['@i] + "^000000階で^ff0000"; if($@Info_Mes$['@i] != "") mes $@Info_Mes$['@i]; else mes "枝部屋です。"; mes "^000000敵を^ff0000" + $@Mob_Count['@i] + "^000000匹中^ff0000" + $@Kill_Count['@i] + "^000000匹倒して、^ff0000"; set '@Now_Area,(($@Now_Area['@i] - 1) % 4 + 1); mes $@map$['@i]['@Now_Area] + "^000000の敵は残り^ff0000" + getmapmobs($@map$['@i]['@Now_Area]) + "^000000匹です。"; mes "$@Next_Info : " + $@Next_Info['@i]; if (select("行く","行かない")==1){ set InfinityID,'@i; callfunc "Warp_Exe",'@i,((($@Now_Area['@i] - 1) % 4) + 1); } close; } } mes "現在の状況です。"; for(set '@i,1;'@i <= $@Gate_num;set '@i,'@i+1) { if ($@End_Time['@i]){ mes "ゲート" + '@i + " ^FF0000挑戦中^000000 あと" + $@End_Time['@i] + "分"; } else{ mes "ゲート" + '@i + " ^0000FF挑戦可^000000"; setarray '@Select_Mes$['@i],"^0000ffゲート" + '@i + "^000000に行く"; } } //開始処理 setarray '@Select_Mes$[($@Gate_num +1)],"説明を…","やめる"; mes "いきますか?いきませんか?"; next; set '@menu,select(printarray('@Select_Mes$)) - 1; //Auriga //set '@menu,arrayselect('@Select_Mes$); //Athena if('@menu <= $@Gate_num){ if(getpartyleader(getcharid(1)) != strcharinfo(0)) { mes "["+strnpcinfo(1)+"]"; mes "参加申請を行えるのは"; mes "パーティーのリーダーのみです。"; } else if($@ptid['@menu] == 0) { //参加手続き開始 set $@ptid['@menu], getcharid(1); set 'ptname$['@menu], getpartyname(getcharid(1)); //必要変数をセット set $@End_Time['@menu],60; set $@Mob_Count['@menu], 10; set $@Kill_Count['@menu], 0; set $@Next_Info['@menu],-1; set $@Now_Area['@menu],1; callfunc "Set_Mobs",'@menu,1,$@Mob_Count['@menu]; mes "["+strnpcinfo(1)+"]"; mes "セット完了です。"; mes "もう一度話しかけて下さい。"; announce "パーティー「" + 'ptname$['@menu] + "」が無限回廊["+ '@menu +"ゲート]に挑戦するようです。",0x10; } else { mes "["+strnpcinfo(1)+"]"; mes "少し遅かったです…。"; mes "パーティー^0000FF「" + 'ptname$['@menu] + "」^000000が"; mes "挑戦することになりました。"; } } else if('@menu == $@Gate_num + 1){ goto L_Introduction; } else{ mes "["+strnpcinfo(1)+"]"; mes "分かりました。"; } close; end; OnInit: //初期設定 set $@Gate_num,4; //入口の数(NPCではない) setarray $@Warp_Posx[1],65,65,49,49; //出てくるX位置 setarray $@Warp_Posy[1],99,99,99,99; //出てくるY位置 setarray $@Mob_Posx1[1],80,80,83,83; //MOB配置座標 setarray $@Mob_Posy1[1],80,80,83,83; //MOB配置座標 setarray $@Mob_Posx2[1],119,119,116,116; //MOB配置座標 setarray $@Mob_Posy2[1],119,119,116,116; //MOB配置座標 set $@Csv_File$, "script/original/db/infinity_mob.csv"; //ここから自動設定 set $@Rooms, csvgetcols($@Csv_File$,0); initnpctimer; end; //----------終了------- L_Introduction: mes "["+strnpcinfo(1)+"]"; mes "新しいダンジョン^FF0000「無限回廊」^000000が"; mes "発見されました。"; mes "私はそのダンジョンの挑戦者を探しています。"; mes "内部は通称「枝モンスター」と呼ばれる敵が徘徊しています。"; mes "稀にボスモンスターとか出る場合もあるみたいです。"; next; mes "["+strnpcinfo(1)+"]"; mes "無限回廊には魔力が満ち溢れていて、"; mes "色々不思議な事が起こります。"; next; mes "["+strnpcinfo(1)+"]"; mes "^FF00001.入れるのは1PTのみ^000000"; mes "どういう理屈かわかりませんが、"; mes "パーティという繋がりがないと"; mes "ダンジョンに入れません。"; mes "でも、挑戦の途中からでも"; mes "パーティに入れば挑戦可能です。"; next; mes "["+strnpcinfo(1)+"]"; mes "^FF00002.魔力ポイントの付与^000000"; mes "魔力ポイント、通称^FF0000「MP」^000000です。"; mes "^FF0000MPはモンスターを全滅させた時に出現する"; mes "ワープポータルに乗った時に加算されます。^000000"; mes "このMPはキャラクターにくっついてるのですが、"; mes "それを利用した技術もあるそうです。"; next; mes "["+strnpcinfo(1)+"]"; mes "^FF00003.制限時間は1時間^000000"; mes "1時間が経過すると"; mes "問答無用で弾きだされます。"; mes "なので最深部があるのかは不明です。"; close; OnTimer60000: //1分おきにチェック initnpctimer; for(set '@i,1;'@i <= $@Gate_num;set '@i,'@i+1) { if (!$@End_Time['@i]) Continue; set $@End_Time['@i],$@End_Time['@i] - 1; if ($@End_Time['@i] == 10) announce "パーティー「" + 'ptname$['@i] + "」の挑戦があと10分です",0x10; //終了処理 上手く作れないorz else if($@End_Time['@i] == 0){ announce "パーティー「" + 'ptname$['@i] + "」の挑戦が終了しました",0x10; for(set '@j,1; '@j <= 4; set '@j, '@j + 1) { enablenpc "Room_Exe" + '@i + "#" + '@j; donpcevent "Room_Exe" + '@i + "#" + '@j + "::OnEnd"; } set $@ptid['@i],0; } } end; } //ワープスクリプト - script Room_Exe#dammy 45{ //strnpcinfo(1) // //strnpcinfo(2) // //strnpcinfo(3) //Room_Exe# //strnpcinfo(5) // //$@map$[][] //各部屋のgat名 set PC_SHOP_POINT,PC_SHOP_POINT + $@Now_Area - 1; callfunc "Warp_Exe",strnpcinfo(1),strnpcinfo(2); end; OnEnd: mapwarp "this","SavePoint",0,0; killmonsterall "this"; disablenpc strnpcinfo(3); end; OnInit: //初期設定(自動) if(strnpcinfo(2) == "dammy") end; set '@dammy,getmapxy($@map$[strnpcinfo(1)][strnpcinfo(5)],'@dammy,'@dammy,1); disablenpc strnpcinfo(3); end; } //カウントスクリプト //strnpcinfo(1) //'@Next_Area //'@Now_Area Reset_Exeで使用 //$@End_Time[] //各ゲートの終了時間(分) //$@Mob_Count[] //各ゲートの初期配置MOB数 //$@Kill_Count[] //各ゲートの撃破MOB数 //$@Now_Area[] //各ゲートの現在の階数 - script Mob_Count#dammy -1{ set $@Kill_Count[strnpcinfo(1)],$@Kill_Count[strnpcinfo(1)] + 1; if($@Kill_Count[strnpcinfo(1)] == $@Mob_Count[strnpcinfo(1)]) { set '@Next_Area,($@Now_Area[strnpcinfo(1)] % 4 + 1); set '@Now_Area,(($@Now_Area[strnpcinfo(1)] - 1) % 4 + 1); //全滅処理 announce ($@Now_Area[strnpcinfo(1)]) + " 階のモンスターを全滅させました!!(残り" + $@End_Time[strnpcinfo(1)] + "分)",0x11; //初期化 callfunc "Set_Mobs",strnpcinfo(1),'@Next_Area,(($@Mob_Count[strnpcinfo(1)] - 1) % 20 + 3); callfunc "Reset_Exe",strnpcinfo(1),'@Now_Area,'@Next_Area; } else if(($@Kill_Count[strnpcinfo(1)] % 20) == 0){ set '@Next_Area,($@Now_Area[strnpcinfo(1)] % 4 + 1); callfunc "Set_Mobs",strnpcinfo(1),'@Next_Area,20; } end; } //使用MAPのワープスクリプト設置 #::Room_Exe# pvp_n_1-5.gat,134,99,6 duplicate(Room_Exe#dammy) 1#2::Room_Exe1#1 45,1,1 pvp_n_2-5.gat,134,99,6 duplicate(Room_Exe#dammy) 1#3::Room_Exe1#2 45,1,1 pvp_n_3-5.gat,134,99,6 duplicate(Room_Exe#dammy) 1#4::Room_Exe1#3 45,1,1 pvp_n_4-5.gat,134,99,6 duplicate(Room_Exe#dammy) 1#1::Room_Exe1#4 45,1,1 pvp_n_5-5.gat,134,99,6 duplicate(Room_Exe#dammy) 2#2::Room_Exe2#1 45,1,1 pvp_n_6-5.gat,134,99,6 duplicate(Room_Exe#dammy) 2#3::Room_Exe2#2 45,1,1 pvp_n_7-5.gat,134,99,6 duplicate(Room_Exe#dammy) 2#4::Room_Exe2#3 45,1,1 pvp_n_8-5.gat,134,99,6 duplicate(Room_Exe#dammy) 2#1::Room_Exe2#4 45,1,1 pvp_n_1-3.gat,149,99,6 duplicate(Room_Exe#dammy) 3#2::Room_Exe3#1 45,1,1 pvp_n_2-3.gat,149,99,6 duplicate(Room_Exe#dammy) 3#3::Room_Exe3#2 45,1,1 pvp_n_3-3.gat,149,99,6 duplicate(Room_Exe#dammy) 3#4::Room_Exe3#3 45,1,1 pvp_n_4-3.gat,149,99,6 duplicate(Room_Exe#dammy) 3#1::Room_Exe3#4 45,1,1 pvp_n_5-3.gat,149,99,6 duplicate(Room_Exe#dammy) 4#2::Room_Exe4#1 45,1,1 pvp_n_6-3.gat,149,99,6 duplicate(Room_Exe#dammy) 4#3::Room_Exe4#2 45,1,1 pvp_n_7-3.gat,149,99,6 duplicate(Room_Exe#dammy) 4#4::Room_Exe4#3 45,1,1 pvp_n_8-3.gat,149,99,6 duplicate(Room_Exe#dammy) 4#1::Room_Exe4#4 45,1,1 //ゲート別カウントスクリプト設置 <回廊番号>::Mob_Count<回廊番号> hugel.gat,0,0,0 duplicate(Mob_Count#dammy) 1::Mob_Count1 -1,-1,-1 hugel.gat,0,0,0 duplicate(Mob_Count#dammy) 2::Mob_Count2 -1,-1,-1 hugel.gat,0,0,0 duplicate(Mob_Count#dammy) 3::Mob_Count3 -1,-1,-1 hugel.gat,0,0,0 duplicate(Mob_Count#dammy) 4::Mob_Count4 -1,-1,-1 //ファンクション群 //モンスター召喚 callfunc "Set_Mobs",,,; function script Set_Mobs { set '@Event_Name$,"Mob_Count" + getarg(0); if($@Next_Info[getarg(0)] < 0){ areamonster $@map$[getarg(0)][getarg(1)],$@Mob_Posx1[getarg(0)],$@Mob_Posy1[getarg(0)],$@Mob_Posx2[getarg(0)],$@Mob_Posy2[getarg(0)],"--ja--",-1,getarg(2),'@Event_Name$; } else{ set '@Call_Number, csvread($@Csv_File$, 1, $@Next_Info[getarg(0)]); //召喚数の取得 set '@MOB_Number, csvfind($@Csv_File$, $@Next_Info[getarg(0)], "E") - 1; //MOB数の取得 if ('@Call_Number == 0){ //0の場合は全MOBがそのカテゴリー内から召喚 for(set @i,0;@i < getarg(2);set @i,@i+1) { set '@randam, rand(2, '@MOB_Number); areamonster $@map$[getarg(0)][getarg(1)],$@Mob_Posx1[getarg(0)],$@Mob_Posy1[getarg(0)],$@Mob_Posx2[getarg(0)],$@Mob_Posy2[getarg(0)],"--ja--",csvread($@Csv_File$, '@randam, $@Next_Info[getarg(0)]),1,'@Event_Name$; } } else { for(set @i,0;@i < getarg(2);set @i,@i+1) { set '@randam, rand(2, '@MOB_Number); if ((@i % '@Call_Number) == 1) areamonster $@map$[getarg(0)][getarg(1)],$@Mob_Posx1[getarg(0)],$@Mob_Posy1[getarg(0)],$@Mob_Posx2[getarg(0)],$@Mob_Posy2[getarg(0)],"--ja--",csvread($@Csv_File$, '@randam, $@Next_Info[getarg(0)]),1,'@Event_Name$; else areamonster $@map$[getarg(0)][getarg(1)],$@Mob_Posx1[getarg(0)],$@Mob_Posy1[getarg(0)],$@Mob_Posx2[getarg(0)],$@Mob_Posy2[getarg(0)],"--ja--",-1,1,'@Event_Name$; } } } return; } //ワープ管理 callfunc "Warp_Exe",,; function script Warp_Exe { if($@Info_Mes$[getarg(0)] != ""){ announce $@Info_Mes$[getarg(0)],0x03; } warp $@map$[getarg(0)][getarg(1)],$@Warp_Posx[getarg(0)],$@Warp_Posy[getarg(0)]; return; } //変数管理 callfunc "Reset_Exe",,,; function script Reset_Exe { set $@Kill_Count[getarg(0)], 0; set $@Mob_Count[getarg(0)], $@Mob_Count[getarg(0)] + 2; enablenpc "Room_Exe" + getarg(0) + "#" + getarg(1); disablenpc "Room_Exe" + getarg(0) + "#" + getarg(2); set $@Now_Area[getarg(0)], $@Now_Area[getarg(0)] + 1; if ($@Next_Info[getarg(0)] >= 0) set $@Info_Mes$[getarg(0)], csvread($@Csv_File$, 0, $@Next_Info[getarg(0)]); else set $@Info_Mes$[getarg(0)],""; set $@Next_Info[getarg(0)],rand($@Rooms * 2); if ($@Next_Info[getarg(0)] >= $@Rooms) set $@Next_Info[getarg(0)],-1; return; }