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

-	script	FFA_Arena	FAKE_NPC,{
	end;

OnInit:
	// Cementery Walls and No Damage
	setwall "bat_c01",54,123,5,6,0,"batc01wall_a";
	setwall "bat_c01",58,127,4,4,0,"batc01wall_b";
	setcell "bat_c01",50,124,57,131,cell_basilica,1;
	setwall "bat_c01",141,56,5,0,0,"batc01wall_c";
	setwall "bat_c01",142,60,4,6,0,"batc01wall_d";
	setcell "bat_c01",142,52,149,59,cell_basilica,1;
	setarray .Names$[0],"I","II","III","IV","V","VI","VII","VIII","IX","X";
	end;

OnBuildTeams:
	set $@FFA_Team[0],hBG_team_create("bat_c01",53,128,3, "FFA_Arena::OnQuit","FFA_Arena::OnKilled");
	set $@FFA_Team[1],hBG_team_create("bat_c01",53,128,4, "FFA_Arena::OnQuit","FFA_Arena::OnKilled");
	set $@FFA_Team[2],hBG_team_create("bat_c01",53,128,5, "FFA_Arena::OnQuit","FFA_Arena::OnKilled");
	set $@FFA_Team[3],hBG_team_create("bat_c01",53,128,6, "FFA_Arena::OnQuit","FFA_Arena::OnKilled");
	set $@FFA_Team[4],hBG_team_create("bat_c01",53,128,7, "FFA_Arena::OnQuit","FFA_Arena::OnKilled");
	set $@FFA_Team[5],hBG_team_create("bat_c01",146,55,8, "FFA_Arena::OnQuit","FFA_Arena::OnKilled");
	set $@FFA_Team[6],hBG_team_create("bat_c01",146,55,9, "FFA_Arena::OnQuit","FFA_Arena::OnKilled");
	set $@FFA_Team[7],hBG_team_create("bat_c01",146,55,10,"FFA_Arena::OnQuit","FFA_Arena::OnKilled");
	set $@FFA_Team[8],hBG_team_create("bat_c01",146,55,11,"FFA_Arena::OnQuit","FFA_Arena::OnKilled");
	set $@FFA_Team[9],hBG_team_create("bat_c01",146,55,12,"FFA_Arena::OnQuit","FFA_Arena::OnKilled");
	end;

// Area Respawn - 66,68,133,115
OnReady:
	if ($@FFA_Arena_Status != 1)
		end;

	initnpctimer;
	setarray .Score[0],0,0,0,0,0,0,0,0,0,0;
	set .TopTeam,0;
	set .Top,0;
	sleep 2000;
	for( set .@i, 0; .@i < 10; set .@i, .@i + 1) {
		hBG_warp $@FFA_Team[.@i],"RespawnPoint",0,0;
	}
	sleep 2000;
	mapannounce "bat_c01","-- Free For All - Starting in 10 seconds --",1,0x483D8B;
	donpcevent "#ffa1_respawn::OnBGStart";
	donpcevent "#ffa2_respawn::OnBGStart";
	sleep 1000;
	for( set .@i, 0; .@i < 10; set .@i, .@i + 1) {
		hBG_team_reveal $@FFA_Team[.@i];
		hBG_team_updatescore $@FFA_Team[.@i],.Score[.@i];
	}
	end;

OnQuit:
	setquest 8506; // Deserter
	end;

OnKilled:
	if ($@FFA_Arena_Status != 1 ) end;
	for( set .@i, 0; .@i < 10; set .@i, .@i + 1) {
		if (@killer_bg_id == $@FFA_Team[.@i] ) break;
	}
	if (.@i >= 10 ) end; // Not Found
	if ($@FFA_Team[.@i] == getcharid(4) ) end; // Same Team - Suicide
	set .Score[.@i],.Score[.@i] + 1;
	if (.Top < .Score[.@i]) {
		set .Top, .Score[.@i];
		if (.TopTeam != $@FFA_Team[.@i]) {
			mapannounce "bat_c01","- Player [" + .Names$[.@i] + "] is taking the lead -",1,0x483D8B;
			set .TopTeam, $@FFA_Team[.@i];
		}
	}

	hBG_team_updatescore $@FFA_Team[.@i],.Score[.@i];
	if (.Score[.@i] >= 25 ) donpcevent "FFA_Arena::OnMatchEnd";
	end;

OnTimer600000:
	mapannounce "bat_c01","The Battle will end in 5 minutes!!",1,0x483D8B;
	end;

OnTimer840000:
	mapannounce "bat_c01","The Battle will end in 1 minute!!",1,0x483D8B;
	end;

OnTimer900000:
OnMatchEnd:
	stopnpctimer;
	donpcevent "#ffa1_respawn::OnBGStop";
	donpcevent "#ffa2_respawn::OnBGStop";
	set $@FFA_Arena_Status,2;
	// =======================================================
	// Team Rewards
	// =======================================================
	for( set .@i, 0; .@i < 10; set .@i, .@i + 1) {
		set .@Reward, 1 + (.Score[.@i] / 5);
		if ($@FFA_Team[.@i] == .TopTeam)
			set .@Reward, .@Reward + 5;

		hBG_getitem $@FFA_Team[.@i],7773,.@Reward;
	}
	// =======================================================
	setarray .Score[0],0,0,0,0,0,0,0,0,0,0;
	set .TopTeam,0;
	set .Top,0;
	sleep 5000;
	for( set .@i, 0; .@i < 10; set .@i, .@i + 1) {
		bg_warp $@FFA_Team[.@i],"bat_room",155,150;
		hBG_destroy $@FFA_Team[.@i];
	}
	setarray $@FFA_Team[0],0,0,0,0,0,0,0,0,0,0;
	set $@FFA_Arena_Status, 0;
	donpcevent "BG_Queue_Handler::OnFFAQueueJoinEvent";
	end;
}

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

//bat_c01	mapflag	bg_topscore	25
bat_c01	mapflag	battleground	3
bat_c01	mapflag	nomemo
bat_c01	mapflag	nosave	SavePoint
bat_c01	mapflag	noteleport
bat_c01	mapflag	nowarp
bat_c01	mapflag	nowarpto
bat_c01	mapflag	noreturn
bat_c01	mapflag	nobranch
bat_c01	mapflag	nopenalty

// Battleground Therapist
// *********************************************************************

bat_c01,50,131,5	script	Therapist in battle#fa1	4_F_SISTER,{
	getmapxy .@map$, .@cx, .@cy, 0; // Current Char Position
	if (.@cx < 50 || .@cx > 57 || .@cy < 124 || .@cy > 131 ) end;
	mes "[Therapist in battle]";
	mes "Just close your eyes, and take a deep breathe.";
	mes "You can be free from pain.";
	specialeffect(EF_HEAL2, AREA, playerattached()); percentheal 100,100;
//	specialeffect(EF_INCAGILITY, AREA, playerattached()); sc_start SC_INC_AGI,240000,10;
//	specialeffect(EF_BLESSING, AREA, playerattached()); sc_start SC_BLESSING,240000,10;
	repairall;
	close2;
	openstorage;
	end;
}

bat_c01,149,52,3	script	Therapist in battle#fa2	4_F_SISTER,{
	getmapxy .@map$, .@cx, .@cy, 0; // Current Char Position
	if (.@cx < 142 || .@cx > 149 || .@cy < 52 || .@cy > 59 ) end;
	mes "[Therapist in battle]";
	mes "Just close your eyes, and take a deep breathe.";
	mes "You can be free from pain.";
	specialeffect(EF_HEAL2, AREA, playerattached()); percentheal 100,100;
//	specialeffect(EF_INCAGILITY, AREA, playerattached()); sc_start SC_INC_AGI,240000,10;
//	specialeffect(EF_BLESSING, AREA, playerattached()); sc_start SC_BLESSING,240000,10;
	repairall;
	close2;
	openstorage;
	end;
}

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

bat_c01,53,128,0	script	#ffa1_respawn	HIDDEN_WARP_NPC,{
	end;

OnBGStart:
	initnpctimer;
	end;

OnBGStop:
	stopnpctimer;
	end;

OnTimer9000:
	specialeffect(EF_SANCTUARY);
	end;

OnTimer10000:
	areapercentheal "bat_c01",50,124,57,131,100,100;
	areawarp "bat_c01",50,124,57,131,"bat_c01",66,68,133,115;
	initnpctimer;
	end;
}

bat_c01,146,55,0	script	#ffa2_respawn	HIDDEN_WARP_NPC,{
	end;

OnBGStart:
	initnpctimer;
	end;

OnBGStop:
	stopnpctimer;
	end;

OnTimer9000:
	specialeffect(EF_SANCTUARY);
	end;

OnTimer10000:
	areapercentheal "bat_c01",142,52,149,59,100,100;
	areawarp "bat_c01",142,52,149,59,"bat_c01",66,68,133,115;
	initnpctimer;
	end;
}