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

-	script	Tierra_Boss	FAKE_NPC,{
	end;

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

OnBuildTeams:
	set $@BG_Team1,hBG_team_create("bat_a03",50,374,0,"Tierra_Boss::OnGuillaumeQuit","");
	set $@BG_Team2,hBG_team_create("bat_a03",42,16,1,"Tierra_Boss::OnCroixQuit","");
	end;

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

	initnpctimer;
	set .guillaume_boss, 0;
	set .croix_boss, 0;
	set .Neutral_Base, 0;
	sleep 2000;
	bg_warp $@BG_Team1,"bat_a03",353,344;
	bg_warp $@BG_Team2,"bat_a03",353,52;
	sleep 2000;
	donpcevent "#gtb_respawn::OnBGStart";
	donpcevent "#ctb_respawn::OnBGStart";
	hBG_updatescore "bat_a03",.croix_boss,.guillaume_boss;
	sleep 3000;
	donpcevent "Balance_Flag::OnBGStart";
	donpcevent "Guillaume_Boss::OnSummon";
	donpcevent "Croix_Boss::OnSummon";
	mapannounce "bat_a03","-- Capture the Balance Flag to remove immunity of Enemy Guardians --",1,0x483D8B;
	end;

OnNeutralReset:
	set .Neutral_Base, 0;
	killmonster "bat_a03","Tierra_Boss::OnNeutralBreak";
	hBG_monster_immunity getvariableofnpc(.Boss,"Guillaume_Boss"),1;
	hBG_monster_immunity getvariableofnpc(.Boss,"Croix_Boss"),1;
	bg_monster 0,"bat_a03",273,204,"Balance Flag",1911,"Tierra_Boss::OnNeutralBreak";
	sleep 2000;
	if ($@Arena_Status != 1 || getvariableofnpc(.BG_Arena$,"BG_Queue_Handler") != "Tierra_Boss")
		end;
	mapannounce "bat_a03","-- Balance Flag returned to normality --",1,0x483D8B;
	end;

OnNeutralBreak:
	if ($@Arena_Status != 1 || getvariableofnpc(.BG_Arena$,"BG_Queue_Handler") != "Tierra_Boss")
		end;
	set .Neutral_Base, getcharid(4);
	if (getcharid(4) == $@BG_Team1) {
		mapannounce "bat_a03","-- Guillaume captured the Balance Flag. Croix guardian is now vulnerable to attacks!! --",1,0x0000FF;
		hBG_monster_immunity getvariableofnpc(.Boss,"Guillaume_Boss"),1;
		hBG_monster_immunity getvariableofnpc(.Boss,"Croix_Boss"),0;
		bg_monster .Neutral_Base,"bat_a03",273,204,"Guillaume Flag",1912,"Tierra_Boss::OnNeutralBreak";
	} else if (getcharid(4) == $@BG_Team2) {
		mapannounce "bat_a03","-- Croix captured the Balance Flag. Guillaume guardian is now vulnerable to attacks!! --",1,0xFF0000;
		hBG_monster_immunity getvariableofnpc(.Boss,"Guillaume_Boss"),0;
		hBG_monster_immunity getvariableofnpc(.Boss,"Croix_Boss"),1;
		bg_monster .Neutral_Base,"bat_a03",273,204,"Croix Flag",1913,"Tierra_Boss::OnNeutralBreak";
	} else {
		set .Neutral_Base, 0;
		hBG_monster_immunity getvariableofnpc(.Boss,"Guillaume_Boss"),1;
		hBG_monster_immunity getvariableofnpc(.Boss,"Croix_Boss"),1;
		bg_monster 0,"bat_a03",273,204,"Balance Flag",1911,"Tierra_Boss::OnNeutralBreak";
	}
	end;

OnTimer600000:
	mapannounce "bat_a03","Battle of Tierra Bossnia will end in 5 minutes",1,0x483D8B;
	end;
OnTimer840000:
	mapannounce "bat_a03","Battle of Tierra Bossnia will end in 1 minute",1,0x483D8B;
	end;

OnTimer900000:
OnMatchEnd:
	stopnpctimer;
	stopnpctimer "Guillaume_Boss";
	stopnpctimer "Croix_Boss";
	donpcevent "#gtb_respawn::OnBGStop";
	donpcevent "#ctb_respawn::OnBGStop";
	donpcevent "Balance_Flag::OnBGStop";
	killmonster "bat_a03","Guillaume_Boss::OnBoss";
	killmonster "bat_a03","Croix_Boss::OnBoss";
	set $@Arena_Status, 2;
	// =======================================================
	// Team Rewards
	// =======================================================
	if (.guillaume_boss < .croix_boss) {
		hBG_reward $@BG_Team1,7773,15 + getvariableofnpc(.croix_boss, "Tierra_Boss"),0,0,"BG_Boss",1,1,0;
		hBG_reward $@BG_Team2,7773,10 + getvariableofnpc(.guillaume_boss, "Tierra_Boss"),0,0,"BG_Boss",1,1,2;
		mapannounce "bat_a03","The Guillaume army has won the Battle of Tierra Bossnia!",1,0x0000FF;
	} else if (.guillaume_boss > .croix_boss) {
		hBG_reward $@BG_Team1,7773,10 + getvariableofnpc(.croix_boss, "Tierra_Boss"),0,0,"BG_Boss",1,1,2;
		hBG_reward $@BG_Team2,7773,15 + getvariableofnpc(.guillaume_boss, "Tierra_Boss"),0,0,"BG_Boss",1,1,0;
		mapannounce "bat_a03","The Croix army has won the Battle of Tierra Bossnia!",1,0xFF0000;
	} else {
		hBG_reward $@BG_Team1,7773,10 + getvariableofnpc(.croix_boss, "Tierra_Boss"),0,0,"BG_Boss",1,1,1;
		hBG_reward $@BG_Team2,7773,10 + getvariableofnpc(.guillaume_boss, "Tierra_Boss"),0,0,"BG_Boss",1,1,1;
		mapannounce "bat_a03","The battle is over. This is a Tie...!",1,0x483D8B;
	}
	// =======================================================
	set .Neutral_Base, 0;
	set .guillaume_boss, 0;
	set .croix_boss, 0;
	donpcevent "BG_Queue_Handler::OnEndArena";
	hBG_updatescore "bat_a03",.croix_boss,.guillaume_boss;
	end;
}

-	script	Guillaume_Boss	FAKE_NPC,{
	end;

OnSummon:
	set .@Boss, 2100 + getvariableofnpc(.guillaume_boss, "Tierra_Boss");
	mapannounce "bat_a03","-- Guillaume Guardian [" + strmobinfo(2,.@Boss) + "] entering the battle --",1,0x0000FF;
	set .Boss, bg_monster($@BG_Team1,"bat_a03",176,345,"Guillaume Guardian",.@Boss,"Guillaume_Boss::OnBoss");
	hBG_monster_immunity .Boss,1;
	initnpctimer;
	end;

OnTimer2000:
	stopnpctimer;
	if (.Boss) {
		hBG_monster_reveal .Boss,1,0x0000FF;
		initnpctimer;
	}
	end;

OnBoss:
	stopnpctimer;
	hBG_monster_reveal .Boss,2,0x0000FF; // Hide Spot
	set getvariableofnpc(.guillaume_boss, "Tierra_Boss"), getvariableofnpc(.guillaume_boss, "Tierra_Boss") + 1;
	hBG_updatescore "bat_a03",getvariableofnpc(.croix_boss,"Tierra_Boss"),getvariableofnpc(.guillaume_boss,"Tierra_Boss");
	set .Boss, 0;
	if (getvariableofnpc(.guillaume_boss, "Tierra_Boss") > 4)
		donpcevent "Tierra_Boss::OnMatchEnd";
	else
	{
		donpcevent "Tierra_Boss::OnNeutralReset";
		donpcevent "Guillaume_Boss::OnSummon";
	}
	end;
}

-	script	Croix_Boss	FAKE_NPC,{
	end;

OnSummon:
	set .@Boss, 2100 + getvariableofnpc(.croix_boss, "Tierra_Boss");
	mapannounce "bat_a03","-- Croix Guardian [" + strmobinfo(2,.@Boss) + "] entering the battle --",1,0xFF0000;
	set .Boss, bg_monster($@BG_Team2,"bat_a03",167,50,"Croix Guardian",.@Boss,"Croix_Boss::OnBoss");
	hBG_monster_immunity .Boss,1;
	initnpctimer;
	end;

OnTimer2000:
	stopnpctimer;
	if (.Boss) {
		hBG_monster_reveal .Boss,1,0xFF0000;
		initnpctimer;
	}
	end;

OnBoss:
	stopnpctimer;
	hBG_monster_reveal .Boss,2,0xFF0000; // Hide Spot
	set getvariableofnpc(.croix_boss, "Tierra_Boss"), getvariableofnpc(.croix_boss, "Tierra_Boss") + 1;
	hBG_updatescore "bat_a03",getvariableofnpc(.croix_boss,"Tierra_Boss"),getvariableofnpc(.guillaume_boss,"Tierra_Boss");
	set .Boss, 0;
	if (getvariableofnpc(.croix_boss, "Tierra_Boss") > 4)
		donpcevent "Tierra_Boss::OnMatchEnd";
	else
	{
		donpcevent "Tierra_Boss::OnNeutralReset";
		donpcevent "Croix_Boss::OnSummon";
	}
	end;
}

-	script	Balance_Flag	FAKE_NPC,{
	end;

OnBGStart:
	hBG_viewpointmap "bat_a03",1,273,204,1,0xFFFFFF;
	bg_monster 0,"bat_a03",273,204,"Balance Flag",1911,"Tierra_Boss::OnNeutralBreak";
	initnpctimer;
	end;

OnBGStop:
	stopnpctimer;
	hBG_viewpointmap "bat_a03",2,273,204,1,0xFFFFFF;
	killmonster "bat_a03","Tierra_Boss::OnNeutralBreak";
	end;

OnTimer2000:
	initnpctimer;
	set .@NB, getvariableofnpc(.Neutral_Base,"Tierra_Boss");
	if (.@NB == $@BG_Team1)
		hBG_viewpointmap "bat_a03",1,273,204,1,0x0000FF;
	else if (.@NB == $@BG_Team2)
		hBG_viewpointmap "bat_a03",1,273,204,1,0xFF0000;
	else
		hBG_viewpointmap "bat_a03",1,273,204,1,0xFFFFFF;
	end;
}

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

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

// Other Flags
// *********************************************************************

bat_a03,148,85,1	duplicate(Croix camp#bat)	Croix camp#tb_1	1_FLAG_EAGLE
bat_a03,155,85,1	duplicate(Croix camp#bat)	Croix camp#tb_2	1_FLAG_EAGLE
bat_a03,357,75,1	duplicate(Croix camp#bat)	Croix camp#tb_3	1_FLAG_EAGLE
bat_a03,348,74,1	duplicate(Croix camp#bat)	Croix camp#tb_4	1_FLAG_EAGLE
bat_a03,199,49,1	duplicate(Croix camp#bat)	Croix camp#tb_5	1_FLAG_EAGLE
bat_a03,168,16,1	duplicate(Croix camp#bat)	Croix camp#tb_6	1_FLAG_EAGLE
bat_a03,138,12,1	duplicate(Croix camp#bat)	Croix camp#tb_7	1_FLAG_EAGLE
bat_a03,108,35,1	duplicate(Croix camp#bat)	Croix camp#tb_8	1_FLAG_EAGLE
bat_a03,164,308,1	duplicate(Guillaume camp#bat)	Guillaume camp#tb_1	1_FLAG_LION
bat_a03,157,308,1	duplicate(Guillaume camp#bat)	Guillaume camp#tb_2	1_FLAG_LION
bat_a03,359,327,1	duplicate(Guillaume camp#bat)	Guillaume camp#tb_3	1_FLAG_LION
bat_a03,350,326,1	duplicate(Guillaume camp#bat)	Guillaume camp#tb_4	1_FLAG_LION
bat_a03,209,344,1	duplicate(Guillaume camp#bat)	Guillaume camp#tb_5	1_FLAG_LION
bat_a03,173,380,1	duplicate(Guillaume camp#bat)	Guillaume camp#tb_6	1_FLAG_LION
bat_a03,150,380,1	duplicate(Guillaume camp#bat)	Guillaume camp#tb_7	1_FLAG_LION
bat_a03,118,357,1	duplicate(Guillaume camp#bat)	Guillaume camp#tb_8	1_FLAG_LION
bat_a03,119,336,1	duplicate(Guillaume camp#bat)	Guillaume camp#tb_9	1_FLAG_LION

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

bat_a03,50,374,0	script	#gtb_respawn	HIDDEN_WARP_NPC,{
	end;

OnBGStart:
	initnpctimer;
	end;

OnBGStop:
	stopnpctimer;
	end;

OnTimer24000:
	specialeffect(EF_SANCTUARY);
	end;

OnTimer25000:
	areapercentheal "bat_a03",46,370,54,378,100,100;
	areawarp "bat_a03",46,370,54,378,"bat_a03",354,340;
	initnpctimer;
	end;
}

bat_a03,42,16,0	script	#ctb_respawn	HIDDEN_WARP_NPC,{
	end;

OnBGStart:
	initnpctimer;
	end;

OnBGStop:
	stopnpctimer;
	end;

OnTimer24000:
	specialeffect(EF_SANCTUARY);
	end;

OnTimer25000:
	areapercentheal "bat_a03",38,12,47,21,100,100;
	areawarp "bat_a03",38,12,47,21,"bat_a03",354,57;
	initnpctimer;
	end;
}