//===== rAthena Script =======================================
//= Devil Square
//===== By: ==================================================
//= Kirlein, Stillhard (translation), AnnieRuru (rewrite)
//===== Current Version: =====================================
//= 1.0
//===== Compatible With: =====================================
//= rAthena Project
//===== Description: =========================================
//= Devil Square, based on the event in MU Online.
//= Defeat three waves of monsters for treasure.
//===== Additional Comments: =================================
//= 1.0 First version, edited. [Euphy]
//============================================================

prontera,156,185,5	script	Devil Square Guardian#1	406,{
	set .@gm_level, 99; // GM level required to start/stop the event

	mes "[Devil Square Guardian]";
	mes "This is the entrance to ^FF0000Devil Square^000000.";
	mes "If you fail or die, the door will close and you must wait until the event starts again to re-enter.";
	next;
	switch(select("Enter.:Information.:" + ((getgmlevel() >= .@gm_level) ? "GM Menu." : "") + ":Cancel.")) {
	case 1:
		if (.start != 1) { // registration period
			mes "[Devil Square Guardian]";
			mes "Devil Square is now closed.";
			mes "It will open at these times:";
			mes "00:00 , 02:00 , 04:00 , 06:00"; // display your times here
			mes "08:00 , 10:00 , 12:00 , 14:00";
			mes "16:00 , 18:00 , 20:00 , 22:00";
			close;
		}
		if (BaseLevel < 70 || Zeny < 20000) { // requirements
			mes "[Devil Square Guardian]";
			mes "You do not meet the requirements to enter Devil Square.";
			mes " ";
			mes "Requirements:";
			mes " - Base Level 70";
			mes " - Registration fee 20,000z";
			close;
		}
		Zeny -= 20000;
		announce strcharinfo(0)+" has entered Devil Square.", bc_npc;
		percentheal 100,100;
		warp "ordeal_1-1",183,182;
		close;
	case 2:
		mes "[Devil Square Guardian]";
		mes "Inside, you will encounter 3 waves of monsters. The monsters will grow stronger with each wave.";
		next;
		mes "[Devil Square Guardian]";
		mes "If you defeat all the enemies, you will be given the opportunity to open 10 Treasure Chests with items, equipment, and rare cards inside!";
		close;
	case 3:
		mes "[Devil Square Guardian]";
		switch (.start) { // event states
			case 0: mes "Devil Square has not yet started."; break;
			case 1: mes "Devil Square is currently accepting participants."; break;
			case 2: mes "Devil Square Event is currently running on Round "+ .round +" with "+ .mob +" monsters remaining."; break;
		}
		next;
		switch(select("Start event.:Stop event.:Cancel.")) {
		case 1:
			mes "[Devil Square Guardian]";
			if (.start)
				mes "Devil Square has already started.";
			else {
				mes "Starting Devil Square...";
				donpcevent strnpcinfo(0)+"::OnStartEvent";
			}
			close;
		case 2:
			mes "[Devil Square Guardian]";
			if (!.start)
				mes "Devil Square has not yet started.";
			else {
				mes "Stopping Devil Square...";
				donpcevent strnpcinfo(0)+"::OnStopEvent";
			}
			close;
		case 3:
			break;
		}
		break;
	case 4:
		break;
	}
	mes "[Devil Square Guardian]";
	mes "Farewell.";
	close;

OnStartEvent:
OnClock0000:
OnClock0200:
OnClock0400:
OnClock0600:
OnClock0800:
OnClock1000:
OnClock1200:
OnClock1400:
OnClock1600:
OnClock1800:
OnClock2000:
OnClock2200:
	.start = 1;
	disablenpc "ord11-12"; //from npc/warps/pvp.txt
	disablenpc "Devil Square Guardian#2";
	mapannounce "ordeal_1-1","Devil Square is now closed.", bc_map;
	getmapxy .@map$, .@x, .@y, UNITTYPE_NPC;
	mapwarp "ordeal_1-1", .@map$, .@x, .@y;
	killmonsterall "ordeal_1-1";
	announce "Devil Square is OPEN. The event will begin in 5 minutes.", bc_all;
	sleep 60000;
	announce "Devil Square will begin in 4 minutes.", bc_all;
	sleep 60000;
	announce "Devil Square will begin in 3 minutes.", bc_all;
	sleep 60000;
	announce "Devil Square will begin in 2 minutes.", bc_all;
	sleep 60000;
	announce "Devil Square will begin in 1 minute.", bc_all;
	sleep 60000;
	announce "Devil Square has STARTED!", bc_all;
	if ( !getmapusers("ordeal_1-1") )
		goto OnStopEvent;
	.start = 2;
	.round = 1;
	.mob = 75;
	areamonster "ordeal_1-1",183,182,246,244,"[DS] SOLDIER SKELETON",1028,10,strnpcinfo(0)+"::OnDevilDead";
	areamonster "ordeal_1-1",183,182,246,244,"[DS] ORC ARCHER",1189,15,strnpcinfo(0)+"::OnDevilDead";
	areamonster "ordeal_1-1",183,182,246,244,"[DS] SANDMAN",1165,10,strnpcinfo(0)+"::OnDevilDead";
	areamonster "ordeal_1-1",183,182,246,244,"[DS] ARCHER SKELETON",1016,15,strnpcinfo(0)+"::OnDevilDead";
	areamonster "ordeal_1-1",183,182,246,244,"[DS] MINOROUS",1149,15,strnpcinfo(0)+"::OnDevilDead";
	areamonster "ordeal_1-1",183,182,246,244,"[DS] REQUIEM",1164,10,strnpcinfo(0)+"::OnDevilDead";
	end;

OnDevilDead:
	.mob--;
	if ( .mob == 25 || .mob == 5 )
		announce "Devil Square : "+ .mob +" monsters remaining in round 1.", bc_map;
	else if ( .mob <= 0 ) {
		announce "Devil Square is entering round 2...", bc_map;
		goto OnDevil2;
	}
	end;

OnDevil2:
	.round = 2;
	.mob = 70;
	areamonster "ordeal_1-1",183,182,246,244,"[DS] GARGOYLE",1253,15,strnpcinfo(0)+"::OnDevilDead2";
	areamonster "ordeal_1-1",183,182,246,244,"[DS] ALARM",1193,10,strnpcinfo(0)+"::OnDevilDead2";
	areamonster "ordeal_1-1",183,182,246,244,"[DS] HIGH ORC",1213,10,strnpcinfo(0)+"::OnDevilDead2";
	areamonster "ordeal_1-1",183,182,246,244,"[DS] INJUSTICE",1257,10,strnpcinfo(0)+"::OnDevilDead2";
	areamonster "ordeal_1-1",183,182,246,244,"[DS] MIMIC",1191,15,strnpcinfo(0)+"::OnDevilDead2";
	areamonster "ordeal_1-1",183,182,246,244,"[DS] WRAITH",1192,10,strnpcinfo(0)+"::OnDevilDead2";
	end;

OnDevilDead2:
	.mob--;
	if ( .mob == 25 || .mob == 5 )
		announce "Devil Square : "+ .mob +" monsters remaining in round 2.", bc_map;
	else if ( .mob <= 0 ) {
		announce "Devil Square is entering round 3...", bc_map;
		goto OnDevil3;
	}
	end;

OnDevil3:
	.round = 3;
	.mob = 58;
	areamonster "ordeal_1-1",183,182,246,244,"[DS] ANOLIAN",1206,15,strnpcinfo(0)+"::OnDevilDead3";
	areamonster "ordeal_1-1",183,182,246,244,"[DS] WANDERER",1208,15,strnpcinfo(0)+"::OnDevilDead3";
	areamonster "ordeal_1-1",183,182,246,244,"[DS] DEVIRUCHI",1109,10,strnpcinfo(0)+"::OnDevilDead3";
	areamonster "ordeal_1-1",183,182,246,244,"[DS] JOKER",1131,15,strnpcinfo(0)+"::OnDevilDead3";
	areamonster "ordeal_1-1",183,182,246,244,"[DS] MOONLIGHT",1150,2,strnpcinfo(0)+"::OnDevilDead3";
	areamonster "ordeal_1-1",183,182,246,244,"[DS] DARK ILLUSION",1302,1,strnpcinfo(0)+"::OnDevilDead3";
	end;

OnDevilDead3:
	.mob--;
	if ( .mob == 25 || .mob == 5 )
		announce "Devil Square : "+ .mob +" monsters remaining in the final round.", bc_map;
	else if ( .mob <= 0 ) {
		announce "Devil Square : CONGRATULATIONS. These 10 Treasure Chests are yours.", bc_map;
		goto OnDevil4;
	}
	end;

OnDevil4:
	.round = 4;
	.mob = 10;
	monster "ordeal_1-1",231,250,"Treasure Chest",1324,1,strnpcinfo(0)+"::OnTreasureDead";
	monster "ordeal_1-1",234,247,"Treasure Chest",1328,1,strnpcinfo(0)+"::OnTreasureDead";
	monster "ordeal_1-1",237,244,"Treasure Chest",1332,1,strnpcinfo(0)+"::OnTreasureDead";
	monster "ordeal_1-1",240,241,"Treasure Chest",1336,1,strnpcinfo(0)+"::OnTreasureDead";
	monster "ordeal_1-1",243,238,"Treasure Chest",1340,1,strnpcinfo(0)+"::OnTreasureDead";
	monster "ordeal_1-1",246,235,"Treasure Chest",1344,1,strnpcinfo(0)+"::OnTreasureDead";
	monster "ordeal_1-1",249,232,"Treasure Chest",1348,1,strnpcinfo(0)+"::OnTreasureDead";
	monster "ordeal_1-1",252,229,"Treasure Chest",1352,1,strnpcinfo(0)+"::OnTreasureDead";
	monster "ordeal_1-1",249,241,"Treasure Chest",1356,1,strnpcinfo(0)+"::OnTreasureDead";
	monster "ordeal_1-1",240,249,"Treasure Chest",1360,1,strnpcinfo(0)+"::OnTreasureDead";
	end;

OnTreasureDead:
	.mob--;
	announce "Devil Square : "+ strcharinfo(0) +" has opened the Treasure Chest at Devil Square.", bc_all;
	if ( .mob <= 0 )
		goto OnStopEvent;
	end;

OnStopEvent:
	killmonsterall "ordeal_1-1";
	enablenpc "ord11-12"; //from npc/warps/pvp.txt
	enablenpc "Devil Square Guardian#2";
	.start = .round = .mob = 0;
	end;
}

ordeal_1-1,246,245,7	script	Devil Square Guardian#2	406,{
	mes "[Exit]";
	mes "Farewell.";
	close2;
	warp "SavePoint",0,0;
	end;
}

ordeal_1-1	mapflag	nowarp
ordeal_1-1	mapflag	nowarpto
ordeal_1-1	mapflag	noteleport
ordeal_1-1	mapflag	monster_noteleport
ordeal_1-1	mapflag	nosave	SavePoint
ordeal_1-1	mapflag	nomemo
ordeal_1-1	mapflag	nobranch
ordeal_1-1	mapflag	nopenalty
ordeal_1-1	mapflag	noicewall
