/**
 * Hercules Script
 *
 * Feature: Hercules Battlegrounds
 * Version: 1.0
 * Author: eAmod & Smokexyz
 *
 * Description: Hercules Battlegrounds plugin.
 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */

-	script	Rush	FAKE_NPC,{
	end;

OnInit:
	setwall "rush_cas01",198,228,10,6,0,"Rush_wall_a";
	setcell "rush_cas01",198,224,207,233,cell_basilica,1;
	setwall "rush_cas02",142,48,10,6,0,"Rush_wall_b";
	setcell "rush_cas02",142,44,151,53,cell_basilica,1;
	setwall "rush_cas03",62,8,10,0,0,"Rush_wall_c";
	setcell "rush_cas03",56,6,69,17,cell_basilica,1;
	setwall "rush_cas04",266,290,10,6,0,"Rush_wall_d";
	setcell "rush_cas04",266,286,275,295,cell_basilica,1;
	set .index,0;
	end;

OnGuillaumeQuit:
OnCroixQuit:
	setquest 8506; // Deserter
	if ($@Arena_Status != 0 && getvariableofnpc(.BG_Arena$,"BG_Queue_Handler") == "Rush")
		donpcevent "BG_Queue_Handler::OnQueueJoinEvent";
	end;

OnBuildTeams:
	if (set(.index,.index + 1) > 3)
		set .index, 0;
	//announce ".index"+.index,0;

	switch( .index) {
	case 0: set .rush_castle$,"rush_cas01"; set .guil_x,202; set .guil_y,230; set .croix_x,202; set .croix_y,226; break;
	case 1: set .rush_castle$,"rush_cas02"; set .guil_x,146; set .guil_y, 50; set .croix_x,146; set .croix_y, 46; break;
	case 2: set .rush_castle$,"rush_cas03"; set .guil_x, 60; set .guil_y, 13; set .croix_x, 64; set .croix_y, 13; break;
	case 3: set .rush_castle$,"rush_cas04"; set .guil_x,270; set .guil_y,292; set .croix_x,270; set .croix_y,288; break;
	}

	set $@BG_Team1,hBG_team_create(.rush_castle$,.guil_x,.guil_y,0,"Rush::OnGuillaumeQuit","");
	set $@BG_Team2,hBG_team_create(.rush_castle$,.croix_x,.croix_y,1,"Rush::OnCroixQuit","");
	end;

OnReady:
	if (getvariableofnpc(.BG_Arena$,"BG_Queue_Handler") != "Rush")
		end;

	initnpctimer;
	initnpctimer "Rush_Respawn";
	set .guill_score, 0;
	set .croix_score, 0;
	set .dfndr, 0; // No Defender
	// Emperium =====================
	switch( .index) {
	case 0: // =========================================================================
		bg_monster 0,.rush_castle$,158,174,"Emperium",2107,"Rush::OnEmperium";
		break;
	case 1: // =========================================================================
		bg_monster 0,.rush_castle$,271,29,"Emperium",2107,"Rush::OnEmperium";
		break;
	case 2: // =========================================================================
		bg_monster 0,.rush_castle$,28,102,"Emperium",2107,"Rush::OnEmperium";
		break;
	case 3: // =========================================================================
		bg_monster 0,.rush_castle$,245,167,"Emperium",2107,"Rush::OnEmperium";
		break;
	}
	// ======================================
	//donpcevent "::OnEmblemRush";
	sleep 2000;
	switch( .index) {
	case 0:
		bg_warp $@BG_Team1,.rush_castle$,43,229;
		bg_warp $@BG_Team2,.rush_castle$,43,229;
		break;
	case 1:
		bg_warp $@BG_Team1,.rush_castle$,252,271;
		bg_warp $@BG_Team2,.rush_castle$,252,271;
		break;
	case 2:
		bg_warp $@BG_Team1,.rush_castle$,216,103;
		bg_warp $@BG_Team2,.rush_castle$,216,103;
		break;
	case 3:
		bg_warp $@BG_Team1,.rush_castle$,100,280;
		bg_warp $@BG_Team2,.rush_castle$,100,280;
		break;
	}
	sleep 4000;
	mapannounce .rush_castle$,"Move on warriors!! Let's capture this Castle!!",1,0xDDA0DD;
	end;

OnTimer60000:
	set getvariableofnpc(.allowjoin,"BG_Queue_Handler"),0;
	mapannounce .rush_castle$,"Battle of Rush will end in 6 minutes",1,0xDDA0DD;
	end;

OnTimer360000:
	mapannounce .rush_castle$,"Battle of Rush will end in 1 minute",1,0xDDA0DD;
	end;

OnEmperium:
	if ($@Arena_Status != 1 || getvariableofnpc(.BG_Arena$,"BG_Queue_Handler") != "Rush")
		end;

	if (.dfndr == 0) { // First Capture
		initnpctimer;
		set .dfndr,getcharid(4);
		if (.dfndr == $@BG_Team1) {
			set .guill_score,1;
			mapannounce .rush_castle$,"General Guillaume : Castle captured, now prepare to Defend it!!",1,0x0000FF;
			hBG_warp $@BG_Team2,"RespawnPoint",0,0; // To Cementery and Wait
		}
		else
		{
			set .croix_score,1;
			mapannounce .rush_castle$,"Prince Croix : Castle captured, now prepare to Defend it!!",1,0xFF0000;
			hBG_warp $@BG_Team1,"RespawnPoint",0,0; // To Cementery and Wait
		}

		hBG_updatescore .rush_castle$,.guill_score,.croix_score;

		// Emperium =====================
		switch( .index) {
		case 0: // =========================================================================
			bg_monster .dfndr,.rush_castle$,158,174,"Emperium",2107,"Rush::OnEmperium";
			break;
		case 1: // =========================================================================
			bg_monster .dfndr,.rush_castle$,271,29,"Emperium",2107,"Rush::OnEmperium";
			break;
		case 2: // =========================================================================
			bg_monster .dfndr,.rush_castle$,28,102,"Emperium",2107,"Rush::OnEmperium";
			break;
		case 3: // =========================================================================
			bg_monster .dfndr,.rush_castle$,245,167,"Emperium",2107,"Rush::OnEmperium";
			break;
		}
		// ======================================
		initnpctimer "Rush_Respawn";

		sleep 5000;
		if (.dfndr == $@BG_Team1)
			mapannounce .rush_castle$,"Prince Croix : Capture the Castle, it's our last chance to Win!!",1,0xFF0000;
		else
			mapannounce .rush_castle$,"General Guillaume : Capture the Castle, it's our last chance to Win!!",1,0x0000FF;
		end;
	}

	// Second Capture
	if (.dfndr == $@BG_Team1) {
		set .croix_score,2;
		mapannounce .rush_castle$,"Prince Croix : Castle captured, we won the Battle!!",1,0xFF0000;
	} else {
		set .guill_score,2;
		mapannounce .rush_castle$,"General Guillaume : Castle captured, we won the Battle!!",1,0x0000FF;
	}
	donpcevent "Rush::OnMatchEnd";
	end;

OnTimer420000:
	if (.dfndr == 0)
		mapannounce .rush_castle$,"Castle captured Fail. No winners",1,0xDDA0DD;
	else if (.dfndr == $@BG_Team1) {
		set .guill_score,3;
		mapannounce .rush_castle$,"General Guillaume : Castle protected, we won the Battle!!",1,0x0000FF;
	} else {
		set .croix_score,3;
		mapannounce .rush_castle$,"Prince Croix : Castle protected, we won the Battle!!",1,0xFF0000;
	}
	donpcevent "Rush::OnMatchEnd";
	end;

OnMatchEnd:
	stopnpctimer;
	stopnpctimer "Rush_Respawn";
	killmonster .rush_castle$,"Rush::OnEmperium";
	hBG_updatescore .rush_castle$,.guill_score,.croix_score;
	set $@Arena_Status, 2;
	// =======================================================
	// Team Rewards
	// =======================================================
	set .@Reward, 15 + (.guill_score * 2);
	if (.guill_score > .croix_score)
		set .@Won,0;
	else
		set .@Won,2;

	hBG_reward $@BG_Team1,7773,.@Reward,0,0,"BG_RUSH",1,7,.@Won;
	// =======================================================
	set .@Reward, 15 + (.croix_score * 2);
	if (.croix_score > .guill_score)
		set .@Won,0;
	else
		set .@Won,2;

	hBG_reward $@BG_Team2,7773,.@Reward,0,0,"BG_RUSH",1,7,.@Won;
	// =======================================================
	set .guill_score, 0;
	set .croix_score, 0;
	sleep 5000;
	donpcevent "BG_Queue_Handler::OnEndArena";
	hBG_updatescore .rush_castle$,.guill_score,.croix_score;
	end;
}

// Battleground Respawn
// *********************************************************************

-	script	Rush_Respawn	FAKE_NPC,{
	end;

OnTimer24000:
	mapannounce getvariableofnpc(.rush_castle$,"Rush"),"-- Reinforcements entering the Battle of Rush --",1,0xDDA0DD;
	end;

OnTimer25000:
	set .@castle$,getvariableofnpc(.rush_castle$,"Rush");
	set .@Defender,getvariableofnpc(.dfndr,"Rush");

	switch( getvariableofnpc(.index,"Rush")) {
	case 0: // rush_cas01 ========================================================================
		areapercentheal .@castle$,198,224,207,233,100,100;
		if (.@Defender == 0)
			areawarp .@castle$,198,224,207,233,.@castle$,43,229;
		else if ($@BG_Team1 == .@Defender) {
			areawarp .@castle$,198,229,207,233,.@castle$,71,36;
			areawarp .@castle$,198,224,207,227,.@castle$,43,229;
		}
		else
		{
			areawarp .@castle$,198,229,207,233,.@castle$,43,229;
			areawarp .@castle$,198,224,207,227,.@castle$,71,36;
		}
		break;
	case 1: // rush_cas02 ========================================================================
		areapercentheal .@castle$,142,44,151,53,100,100;
		if (.@Defender == 0)
			areawarp .@castle$,142,44,151,53,.@castle$,252,271;
		else if ($@BG_Team1 == .@Defender) {
			areawarp .@castle$,142,49,151,53,.@castle$,40,235;
			areawarp .@castle$,142,44,151,47,.@castle$,252,271;
		}
		else
		{
			areawarp .@castle$,142,49,151,53,.@castle$,252,271;
			areawarp .@castle$,142,44,151,47,.@castle$,40,235;
		}
		break;
	case 2: // rush_cas03 ========================================================================
		areapercentheal .@castle$,56,6,69,17,100,100;
		if (.@Defender == 0)
			areawarp .@castle$,56,6,69,17,.@castle$,216,103;
		else if ($@BG_Team1 == .@Defender) {
			areawarp .@castle$,56,6,61,17,.@castle$,31,190;
			areawarp .@castle$,63,6,69,17,.@castle$,216,103;
		}
		else
		{
			areawarp .@castle$,56,6,61,17,.@castle$,216,103;
			areawarp .@castle$,63,6,69,17,.@castle$,31,190;
		}
		break;
	case 3: // rush_cas04 ========================================================================
		areapercentheal .@castle$,266,286,275,295,100,100;
		if (.@Defender == 0)
			areawarp .@castle$,266,286,275,295,.@castle$,100,280;
		else if ($@BG_Team1 == .@Defender) {
			areawarp .@castle$,266,291,275,295,.@castle$,116,89;
			areawarp .@castle$,266,286,275,289,.@castle$,100,280;
		}
		else
		{
			areawarp .@castle$,266,291,275,295,.@castle$,100,280;
			areawarp .@castle$,266,286,275,289,.@castle$,116,89;
		}
		break;
	}

	initnpctimer;
	end;
}

// Warp Portals
// *********************************************************************

rush_cas01,157,135,0	warp	rush106-1	1,1,rush_cas01,184,40
rush_cas01,161,41,0	warp	rush102-1	1,1,rush_cas01,57,202
rush_cas01,184,44,0	warp	rush106	1,1,rush_cas01,157,140
rush_cas01,203,21,0	warp	rush105-1	1,1,rush_cas01,45,25
rush_cas01,210,41,0	warp	rush101-1	1,1,rush_cas01,84,215
rush_cas01,35,183,0	warp	rush104	1,1,rush_cas01,71,82
rush_cas01,45,21,0	warp	rush105	1,1,rush_cas01,203,25
rush_cas01,53,202,0	warp	rush102	1,1,rush_cas01,165,41
rush_cas01,64,164,0	warp	rush103	1,1,rush_cas01,98,25
rush_cas01,71,86,0	warp	rush104-1	1,1,rush_cas01,35,187
rush_cas01,88,215,0	warp	rush101	1,1,rush_cas01,206,41
rush_cas01,98,21,0	warp	rush103-1	1,1,rush_cas01,64,168

rush_cas02,259,212,0	warp	rush201	1,1,rush_cas02,72,240
rush_cas02,75,240,0	warp	rush201-1	1,5,rush_cas02,256,212
rush_cas02,232,189,0	warp	rush202	1,1,rush_cas02,74,261
rush_cas02,78,261,0	warp	rush202-1	1,1,rush_cas02,236,189
rush_cas02,229,208,0	warp	rush203	1,1,rush_cas02,70,282
rush_cas02,74,282,0	warp	rush203-1	1,1,rush_cas02,225,208
rush_cas02,7,261,0	warp	rush204	1,1,rush_cas02,55,30
rush_cas02,59,30,0	warp	rush204-1	1,1,rush_cas02,11,261
rush_cas02,28,31,0	warp	rush205	1,1,rush_cas02,251,42
rush_cas02,254,45,0	warp	rush205-1	1,1,rush_cas02,24,31

rush_cas03,194,71,0	warp	rush301	1,1,rush_cas03,129,194
rush_cas03,125,194,0	warp	rush301-1	1,1,rush_cas03,199,70
rush_cas03,164,86,0	warp	rush302	1,1,rush_cas03,66,189
rush_cas03,70,189,0	warp	rush302-1	1,1,rush_cas03,166,81
rush_cas03,150,67,0	warp	rush303	1,1,rush_cas03,9,187
rush_cas03,5,187,0	warp	rush303-1	1,1,rush_cas03,151,62
rush_cas03,165,232,0	warp	rush304	1,1,rush_cas03,193,49
rush_cas03,188,49,0	warp	rush304-1	1,1,rush_cas03,165,228
rush_cas03,195,42,0	warp	rush305	1,1,rush_cas03,19,227
rush_cas03,15,227,0	warp	rush305-1	1,1,rush_cas03,195,46
rush_cas03,13,175,0	warp	rush306	1,1,rush_cas03,162,194
rush_cas03,166,194,0	warp	rush306-1	1,1,rush_cas03,13,179
rush_cas03,156,231,0	warp	rush307	1,1,rush_cas03,18,88
rush_cas03,14,88,0	warp	rush307-1	1,1,rush_cas03,156,227

rush_cas04,106,217,0	warp	rush407	1,1,rush_cas04,131,15
rush_cas04,115,210,0	warp	rush408	1,1,rush_cas04,92,215
rush_cas04,135,15,0	warp	rush407-1	1,1,rush_cas04,110,217
rush_cas04,135,92,0	warp	rush402-1	1,1,rush_cas04,34,282
rush_cas04,152,92,0	warp	rush404-1	1,1,rush_cas04,59,255
rush_cas04,154,16,0	warp	rush414	1,1,rush_cas04,252,11
rush_cas04,17,206,0	warp	rush406-1	1,1,rush_cas04,29,219
rush_cas04,212,46,0	warp	rush415	1,1,rush_cas04,225,158
rush_cas04,225,154,0	warp	rush415-1	1,1,rush_cas04,212,42
rush_cas04,237,74,0	warp	rush412-1	1,1,rush_cas04,62,213
rush_cas04,256,11,0	warp	rush414-1	1,1,rush_cas04,159,16
rush_cas04,266,47,0	warp	rush409-1	1,1,rush_cas04,45,175
rush_cas04,27,215,0	warp	rush406-2	1,1,rush_cas04,17,202
rush_cas04,34,286,0	warp	rush402	1,1,rush_cas04,131,92
rush_cas04,38,243,0	warp	rush406	1,1,rush_cas04,29,219
rush_cas04,38,259,0	warp	rush403-1	1,1,rush_cas04,43,271
rush_cas04,42,175,0	warp	rush409	1,1,rush_cas04,266,43
rush_cas04,43,191,0	warp	rush410-1	1,1,rush_cas04,70,185
rush_cas04,47,271,0	warp	rush403	1,1,rush_cas04,38,255
rush_cas04,50,248,0	warp	rush405	1,1,rush_cas04,54,229
rush_cas04,58,232,0	warp	rush405-1	1,1,rush_cas04,62,213
rush_cas04,63,255,0	warp	rush404	1,1,rush_cas04,156,92
rush_cas04,65,215,0	warp	rush412	1,1,rush_cas04,233,74
rush_cas04,66,223,0	warp	rush401	1,1,rush_cas04,96,53
rush_cas04,70,182,0	warp	rush410	1,1,rush_cas04,39,191
rush_cas04,79,244,0	warp	rush413-1	1,1,rush_cas04,91,250
rush_cas04,88,248,0	warp	rush411-1	1,1,rush_cas04,76,242
rush_cas04,90,218,0	warp	rush408-1	1,1,rush_cas04,111,210
rush_cas04,92,53,0	warp	rush401-1	1,1,rush_cas04,62,223
rush_cas04,93,209,0	warp	rush411	1,1,rush_cas04,92,250
rush_cas04,95,251,0	warp	rush413	1,1,rush_cas04,91,209

// MapFlags
// *********************************************************************

rush_cas01	mapflag	battleground	2
rush_cas01	mapflag	nomemo
rush_cas01	mapflag	nosave	SavePoint
rush_cas01	mapflag	noteleport
rush_cas01	mapflag	nowarp
rush_cas01	mapflag	nowarpto
rush_cas01	mapflag	noreturn
rush_cas01	mapflag	nobranch
rush_cas01	mapflag	nopenalty

rush_cas02	mapflag	battleground	2
rush_cas02	mapflag	nomemo
rush_cas02	mapflag	nosave	SavePoint
rush_cas02	mapflag	noteleport
rush_cas02	mapflag	nowarp
rush_cas02	mapflag	nowarpto
rush_cas02	mapflag	noreturn
rush_cas02	mapflag	nobranch
rush_cas02	mapflag	nopenalty

rush_cas03	mapflag	battleground	2
rush_cas03	mapflag	nomemo
rush_cas03	mapflag	nosave	SavePoint
rush_cas03	mapflag	noteleport
rush_cas03	mapflag	nowarp
rush_cas03	mapflag	nowarpto
rush_cas03	mapflag	noreturn
rush_cas03	mapflag	nobranch
rush_cas03	mapflag	nopenalty

rush_cas04	mapflag	battleground	2
rush_cas04	mapflag	nomemo
rush_cas04	mapflag	nosave	SavePoint
rush_cas04	mapflag	noteleport
rush_cas04	mapflag	nowarp
rush_cas04	mapflag	nowarpto
rush_cas04	mapflag	noreturn
rush_cas04	mapflag	nobranch
rush_cas04	mapflag	nopenalty