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

-	script	Tierra_TI	FAKE_NPC,{
	end;

OnInit:
	setwall "region_8",46,85,8,6,0,"ti_wall_a";
	setwall "region_8",46,74,8,6,0,"ti_wall_a2";
	setwall "region_8",14,46,8,0,0,"ti_wall_b";
	setwall "region_8",25,46,8,0,0,"ti_wall_b2";
	setwall "region_8",85,46,8,0,0,"ti_wall_c";
	setwall "region_8",74,46,8,0,0,"ti_wall_c2";
	end;

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

OnGuillaumeDie:
OnCroixDie:
OnTraitorDie:
	if ($@Arena_Status == 1 && getvariableofnpc(.BG_Arena$,"BG_Queue_Handler") == "Tierra_TI") {
		// Killed Position
		getmapxy .@m$, .@x, .@y, 0;
		set .@Bid, getcharid(4);
		// Current Skulls
		set .@id8965,countitem(8965);
		set .@id8966,countitem(8966);
		set .@id8967,countitem(8967);
		if (.@id8965 > 0)
			delitem 8965,.@id8965;
		if (.@id8966 > 0)
			delitem 8966,.@id8966;
		if (.@id8967 > 0)
			delitem 8967,.@id8967;
		// Drop Skulls
		if (.@id8965 > 0)
			hBG_flooritem2xy "region_8",.@x,.@y,8965,.@id8965;
		if (.@id8966 > 0)
			hBG_flooritem2xy "region_8",.@x,.@y,8966,.@id8966;
		if (.@id8967 > 0)	
			hBG_flooritem2xy "region_8",.@x,.@y,8967,.@id8967;
		// Drop a New Skull
		if (@killer_bg_id != .@Bid) {
			if (.@Bid == $@BG_Team1)
				hBG_flooritem2xy "region_8",.@x,.@y,8965,1;
			else if (.@Bid == $@BG_Team2)
				hBG_flooritem2xy "region_8",.@x,.@y,8966,1;
			else if (.@Bid == $@BG_Team3)
				hBG_flooritem2xy "region_8",.@x,.@y,8967,1;
		}
	}
	end;

OnBuildTeams:
	set $@BG_Team1,hBG_team_create("region_8",10,49,0,"Tierra_TI::OnGuillaumeQuit","Tierra_TI::OnGuillaumeDie");
	set $@BG_Team2,hBG_team_create("region_8",89,49,1,"Tierra_TI::OnCroixQuit","Tierra_TI::OnCroixDie");
	set $@BG_Team3,hBG_team_create("region_8",49,89,2,"Tierra_TI::OnTraitorQuit","Tierra_TI::OnTraitorDie");
	end;

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

	initnpctimer;
	set .guillaume_score, 0;
	set .croix_score, 0;
	set .Traitor_Score, 0;
	donpcevent "::OnEmblemTI";
	sleep 2000;
	bg_warp $@BG_Team1,"region_8",29,49;
	bg_warp $@BG_Team2,"region_8",70,50;
	bg_warp $@BG_Team3,"region_8",49,70;
	sleep 2000;
	donpcevent "#gti_respawn::OnBGStart";
	donpcevent "#cti_respawn::OnBGStart";
	donpcevent "#tti_respawn::OnBGStart";
	sleep 1000;
	hBG_team_reveal $@BG_Team1;
	hBG_team_updatescore $@BG_Team1,.guillaume_score;
	sleep 1000;
	hBG_team_reveal $@BG_Team2;
	hBG_team_updatescore $@BG_Team2,.croix_score;
	sleep 1000;
	hBG_team_reveal $@BG_Team3;
	hBG_team_updatescore $@BG_Team3,.Traitor_Score;
	end;

OnValidateScore:
	if ($@Arena_Status != 1 || getvariableofnpc(.BG_Arena$,"BG_Queue_Handler") != "Tierra_TI")
		end;
	if (.guillaume_score >= 80 || .croix_score >= 80 || .Traitor_Score >= 80)
		donpcevent "Tierra_TI::OnMatchEnd";
	end;

OnTimer600000:
	set getvariableofnpc(.allowjoin,"BG_Queue_Handler"),0;
	mapannounce "region_8","The Battle will end in 5 minutes!!",1,0x696969;
	end;

OnTimer840000:
	mapannounce "region_8","The Battle will end in 1 minute!!",1,0x696969;
	end;

OnTimer900000:
OnMatchEnd:
	stopnpctimer;
	cleanmap "region_8"; // Removes all ground items
	donpcevent "#gti_respawn::OnBGStop";
	donpcevent "#cti_respawn::OnBGStop";
	donpcevent "#tti_respawn::OnBGStop";
	set $@Arena_Status, 2;
	// =======================================================
	// Team Rewards
	// =======================================================
	if (.guillaume_score > .croix_score && .guillaume_score > .Traitor_Score) {
		hBG_reward $@BG_Team1,7773,30,0,0,"BG_TI",1,2,0;
		hBG_reward $@BG_Team2,7773,15,0,0,"BG_TI",1,2,2;
		hBG_reward $@BG_Team3,7773,15,0,0,"BG_TI",1,2,2;
		mapannounce "region_8","The Guillaume army has won the Battle of Tierra Inferno!",1,0x0000FF;
	} else if (.croix_score > .guillaume_score && .croix_score > .Traitor_Score) {
		hBG_reward $@BG_Team1,7773,15,0,0,"BG_TI",1,2,2;
		hBG_reward $@BG_Team2,7773,30,0,0,"BG_TI",1,2,0;
		hBG_reward $@BG_Team3,7773,15,0,0,"BG_TI",1,2,2;
		mapannounce "region_8","The Croix army has won the Battle of Tierra Inferno!",1,0xFF0000;
	} else if (.Traitor_Score > .guillaume_score && .Traitor_Score > .croix_score) {
		hBG_reward $@BG_Team1,7773,15,0,0,"BG_TI",1,2,2;
		hBG_reward $@BG_Team2,7773,15,0,0,"BG_TI",1,2,2;
		hBG_reward $@BG_Team3,7773,30,0,0,"BG_TI",1,2,0;
		mapannounce "region_8","The Traitor army has won the Battle of Tierra Inferno!",1,0x00FF00;
	} else {
		hBG_reward $@BG_Team1,7773,15,0,0,"BG_TI",1,2,1;
		hBG_reward $@BG_Team2,7773,15,0,0,"BG_TI",1,2,1;
		hBG_reward $@BG_Team3,7773,15,0,0,"BG_TI",1,2,1;
		mapannounce "region_8","The battle is over. There are no Winners!",1,0x696969;
	}
	// =======================================================
	set .guillaume_score, 0;
	set .croix_score, 0;
	set .Traitor_Score, 0;
	sleep 5000;
	donpcevent "BG_Queue_Handler::OnEndArena";
	end;
}

region_8,28,42,0	script	Sacrifice Totem::BlueTotem	HIDDEN_NPC,2,2,{
	end;

OnTouch:
	if ($@Arena_Status != 1 || getvariableofnpc(.BG_Arena$,"BG_Queue_Handler") != "Tierra_TI")
		end;
	if (getcharid(4) != $@BG_Team1)
		end;

	set .@Points, 0;
	delitem 8965,countitem(8965);

	if (set(.@n,countitem(8966)) > 0) { // Croix Skulls
		delitem 8966,.@n;
		set .@Points, .@Points + .@n;
	}

	if (set(.@n,countitem(8967)) > 0) { // Traitor Skulls
		delitem 8967,.@n;
		set .@Points, .@Points + .@n;
	}
	if (.@Points > 0) {
		emotion e_no1,1;
		specialeffect 622;
		set .@Score, getvariableofnpc(.guillaume_score,"Tierra_TI") + .@Points;
		if (.@Score > 80 ) set .@Score, 80;
		set getvariableofnpc(.guillaume_score,"Tierra_TI"),.@Score;
		hBG_team_updatescore $@BG_Team1,.@Score;
		mapannounce "region_8","Guillaume Totem : " + .@Points + " slaughtered skulls by " + strcharinfo(0) + " [" + .@Score + "/80]",1,0x0000FF;
//		bg_rankpoints "skulls",.@Points;
		donpcevent "Tierra_TI::OnValidateScore";
	}
	end;
}

region_8,28,57,0	duplicate(BlueTotem)	Sacrifice Totem#1	HIDDEN_NPC,2,2

region_8,71,57,0	script	Sacrifice Totem::RedTotem	HIDDEN_NPC,2,2,{
	end;

OnTouch:
	if ($@Arena_Status != 1 || getvariableofnpc(.BG_Arena$,"BG_Queue_Handler") != "Tierra_TI")
		end;
	if (getcharid(4) != $@BG_Team2)
		end;

	set .@Points, 0;
	delitem 8966,countitem(8966);

	if (set(.@n,countitem(8965)) > 0) { // Guillaume Skulls
		delitem 8965,.@n;
		set .@Points, .@Points + .@n;
	}

	if (set(.@n,countitem(8967)) > 0) { // Traitor Skulls
		delitem 8967,.@n;
		set .@Points, .@Points + .@n;
	}
	if (.@Points > 0) {
		emotion e_no1,1;
		specialeffect 622;
		set .@Score, getvariableofnpc(.croix_score,"Tierra_TI") + .@Points;
		if (.@Score > 80 ) set .@Score, 80;
		set getvariableofnpc(.croix_score,"Tierra_TI"),.@Score;
		hBG_team_updatescore $@BG_Team2,.@Score;
		mapannounce "region_8","Croix Totem : " + .@Points + " slaughtered skulls by " + strcharinfo(0) + " [" + .@Score + "/80]",1,0xFF0000;
//		bg_rankpoints "skulls",.@Points;
		donpcevent "Tierra_TI::OnValidateScore";
	}
	end;
}

region_8,71,42,0	duplicate(RedTotem)	Sacrifice Totem#2	HIDDEN_NPC,2,2

region_8,44,71,0	script	Sacrifice Totem::GreenTotem	HIDDEN_NPC,2,2,{
	end;

OnTouch:
	if ($@Arena_Status != 1 || getvariableofnpc(.BG_Arena$,"BG_Queue_Handler") != "Tierra_TI")
		end;
	if (getcharid(4) != $@BG_Team3)
		end;

	set .@Points, 0;
	delitem 8967,countitem(8967);

	if (set(.@n,countitem(8965)) > 0) { // Guillaume Skulls
		delitem 8965,.@n;
		set .@Points, .@Points + .@n;
	}

	if (set(.@n,countitem(8966)) > 0) { // Croix Skulls
		delitem 8966,.@n;
		set .@Points, .@Points + .@n;
	}
	if (.@Points > 0) {
		emotion e_no1,1;
		specialeffect 622;
		set .@Score, getvariableofnpc(.Traitor_Score,"Tierra_TI") + .@Points;
		if (.@Score > 80 ) set .@Score, 80;
		set getvariableofnpc(.Traitor_Score,"Tierra_TI"),.@Score;
		hBG_team_updatescore $@BG_Team3,.@Score;
		mapannounce "region_8","Traitor Totem : " + .@Points + " slaughtered skulls by " + strcharinfo(0) + " [" + .@Score + "/80]",1,0x00FF00;
//		bg_rankpoints "skulls",.@Points;
		donpcevent "Tierra_TI::OnValidateScore";
	}
	end;
}

region_8,55,71,0	duplicate(GreenTotem)	Sacrifice Totem#3	HIDDEN_NPC,2,2

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

//region_8	mapflag	bg_topscore	80
region_8	mapflag	battleground	3
region_8	mapflag	nomemo
region_8	mapflag	nosave	SavePoint
region_8	mapflag	noteleport
region_8	mapflag	nowarp
region_8	mapflag	nowarpto
region_8	mapflag	noreturn
region_8	mapflag	nobranch
region_8	mapflag	nopenalty

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

region_8,75,47,2	script	Croix Camp::TIF_Crox	GUILD_FLAG,{
	end;
OnEmblemTI:
	flagemblem $@BG_Team2;
	end;
}

region_8,75,52,2	duplicate(TIF_Crox)	Croix camp#ti_2	GUILD_FLAG

region_8,24,47,6	script	Guillaume Camp::TIF_Guillaume	GUILD_FLAG,{
	end;
OnEmblemTI:
	flagemblem $@BG_Team1;
	end;
}

region_8,24,52,6	duplicate(TIF_Guillaume)	Guillaume camp#ti_2	GUILD_FLAG

region_8,47,75,4	script	Traitor Camp::TIF_Traitor	GUILD_FLAG,{
	end;
OnEmblemTI:
	flagemblem $@BG_Team3;
	end;
}

region_8,52,75,4	duplicate(TIF_Traitor)	Traitor camp#ti_2	GUILD_FLAG

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

region_8,49,89,0	script	#tti_respawn	HIDDEN_WARP_NPC,{
	end;

OnBGStart:
	initnpctimer;
	end;

OnBGStop:
	stopnpctimer;
	end;

OnTimer19000:
	specialeffect(EF_SANCTUARY);
	end;

OnTimer20000:
	areapercentheal "region_8",46,86,53,93,100,100;
	areawarp "region_8",46,86,53,93,"region_8",46,70,53,72;
	initnpctimer;
	end;
}

region_8,10,49,0	script	#gti_respawn	HIDDEN_WARP_NPC,{
	end;

OnBGStart:
	initnpctimer;
	end;

OnBGStop:
	stopnpctimer;
	end;

OnTimer24000:
	specialeffect(EF_SANCTUARY);
	end;

OnTimer25000:
	areapercentheal "region_8",6,46,13,53,100,100;
	areawarp "region_8",6,46,13,53,"region_8",27,46,29,53;
	initnpctimer;
	end;
}

region_8,89,49,0	script	#cti_respawn	HIDDEN_WARP_NPC,{
	end;

OnBGStart:
	initnpctimer;
	end;

OnBGStop:
	stopnpctimer;
	end;

OnTimer24000:
	specialeffect(EF_SANCTUARY);
	end;

OnTimer25000:
	areapercentheal "region_8",86,46,93,53,100,100;
	areawarp "region_8",86,46,93,53,"region_8",70,46,72,53;
	initnpctimer;
	end;
}