// ==============================================================================
// BattleGround System - Tierra Domination
// ==============================================================================

// Battleground Engine
// *********************************************************************

-	script	Tierra_DOM	FAKE_NPC,{
	end;

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

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

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

	set .guillaume_score, 0;
	set .croix_score, 0;
	hBG_updatescore "bat_a04",.guillaume_score,.croix_score;
	donpcevent "Dom_N_Base::OnBase";
	donpcevent "Dom_S_Base::OnBase";
	donpcevent "Dom_C_Base::OnBase";
	sleep 2000;
	bg_warp $@BG_Team1,"bat_a04",353,344;
	bg_warp $@BG_Team2,"bat_a04",353,52;
	sleep 2000;
	donpcevent "#guiDOM_respawn::OnBGStart";
	donpcevent "#croDOM_respawn::OnBGStart";
	end;

OnNScore:
	if (set(.@North, getvariableofnpc(.Owner,"Dom_N_Base")) == 0)
		end; // No Owner

	if (.@North == 1)
		set .guillaume_score, .guillaume_score + 1;
	else
		set .croix_score, .croix_score + 1;

	donpcevent "Tierra_DOM::OnMatchEnd";
	end;

OnSScore:
	if (set(.@South, getvariableofnpc(.Owner,"Dom_S_Base")) == 0)
		end; // No Owner

	if (.@South == 1)
		set .guillaume_score, .guillaume_score + 1;
	else
		set .croix_score, .croix_score + 1;

	donpcevent "Tierra_DOM::OnMatchEnd";
	end;

OnCScore:
	if (set(.@Center, getvariableofnpc(.Owner,"Dom_C_Base")) == 0)
		end; // No Owner

	if (.@Center == 1)
		set .guillaume_score, .guillaume_score + 1;
	else
		set .croix_score, .croix_score + 1;

	donpcevent "Tierra_DOM::OnMatchEnd";
	end;

OnMatchEnd:
	if (.guillaume_score > 99)
		set .guillaume_score, 99;
	if (.croix_score > 99)
		set .croix_score, 99;

	hBG_updatescore "bat_a04",.guillaume_score,.croix_score; // Update Visual Score

	if (.guillaume_score < 99 && .croix_score < 99)
		end; // No winners

	stopnpctimer "Dom_N_Base";
	stopnpctimer "Dom_S_Base";
	stopnpctimer "Dom_C_Base";
	donpcevent "#guiDOM_respawn::OnBGStop";
	donpcevent "#croDOM_respawn::OnBGStop";
	set $@Arena_Status, 2;
	// =======================================================
	// Team Rewards
	// =======================================================
	if (.guillaume_score >= 99 && .croix_score >= 99) { // Tie
		hBG_reward $@BG_Team1,7773,15,0,0,"BG_DOM",1,0,1;
		hBG_reward $@BG_Team2,7773,15,0,0,"BG_DOM",1,0,1;
		mapannounce "bat_a04","The battle is over. This is a Tie...!",1,0x4169E1;
	} else if (.guillaume_score >= 99) { // Guillaume Won
		hBG_reward $@BG_Team1,7773,30,0,0,"BG_DOM",1,0,0;
		hBG_reward $@BG_Team2,7773,15,0,0,"BG_DOM",1,0,2;
		mapannounce "bat_a04","The Guillaume army has won the Battle of Tierra Domination!",1,0xAAAAFF;
	} else if (.croix_score >= 99) { // Croix Won
		hBG_reward $@BG_Team1,7773,15,0,0,"BG_DOM",1,0,2;
		hBG_reward $@BG_Team2,7773,30,0,0,"BG_DOM",1,0,0;
		mapannounce "bat_a04","The Croix army has won the Battle of Tierra Domination!",1,0xAAAAFF;
	}
	// =======================================================
	set .guillaume_score, 0;
	set .croix_score, 0;
	sleep 5000;
	donpcevent "BG_Queue_Handler::OnEndArena";
	hBG_updatescore "bat_a04",0,0;
	donpcevent "GDomNBW::OnDisable";
	donpcevent "GDomCBW::OnDisable";
	donpcevent "GDomSBW::OnDisable";
	donpcevent "CDomNBW::OnDisable";
	donpcevent "CDomCBW::OnDisable";
	donpcevent "CDomSBW::OnDisable";
	end;
}

// Battleground Bases
// *********************************************************************

bat_a04,173,345,0	script	North Base::Dom_N_Base	OBJ_NEUTRAL,{
	end;

OnBase:
	set .Owner, 0;
	set .Balance, 0;
	set .Tick, 0;
	setnpcdisplay "Dom_N_Base","North Base",OBJ_NEUTRAL;
	initnpctimer;
	end;

OnTimer1000:
	stopnpctimer;
	if ($@Arena_Status != 1 || getvariableofnpc(.BG_Arena$,"BG_Queue_Handler") != "Tierra_DOM")
		end;

	set .@Guillaume, hBG_getareausers($@BG_Team1,"bat_a04",136,329,186,361);
	set .@Croix, hBG_getareausers($@BG_Team2,"bat_a04",136,329,186,361);
	set .Balance, .Balance + set(.@Balance, .@Guillaume - .@Croix);

	if (.Balance < -50)
		set .Balance, -50;
	else if (.Balance > 50)
		set .Balance, 50;

	switch( .Owner) {
	case 0:
		if (.Balance == 50) {
			set .Balance, 50;
			set .Owner, 1; // Guillaume
			setnpcdisplay "Dom_N_Base","Guillaume Base",1912;
			mapannounce "bat_a04","North Base captured by Guillaume Team",1,0xAAAAFF;
//			bg_rankpoints_area $@BG_Team1,"bat_a04",136,329,186,361,"DOM_bases",1;
			donpcevent "GDomNBW::OnEnable";
		}
		else if (.Balance == -50) {
			set .Balance, -50;
			set .Owner, 2; // Croix
			setnpcdisplay "Dom_N_Base","Croix Base",1913;
			mapannounce "bat_a04","North Base captured by Croix Team",1,0xFFAAAA;
//			bg_rankpoints_area $@BG_Team2,"bat_a04",136,329,186,361,"DOM_bases",1;
			donpcevent "CDomNBW::OnEnable";
		}
		break;
	case 1:
		if (.Balance <= 0) { // Guillaume lost Control
			set .Owner, 0;
			setnpcdisplay "Dom_N_Base","North Base",OBJ_NEUTRAL;
			mapannounce "bat_a04","Guillaume Team lost control of the North Base",1,0xAAAAFF;
			donpcevent "GDomNBW::OnDisable";
		}
		break;
	case 2:
		if (.Balance >= 0) { // Croix lost Control
			set .Owner, 0;
			setnpcdisplay "Dom_N_Base","North Base",OBJ_NEUTRAL;
			mapannounce "bat_a04","Croix Team lost control of the North Base",1,0xFFAAAA;
			donpcevent "CDomNBW::OnDisable";
		}
		break;
	}

	if (.@Balance > 0)
		specialeffect 236;
	else if (.@Balance < 0)
		specialeffect 225;
	else if (.Owner == 1)
		specialeffect 236;
	else if (.Owner == 2)
		specialeffect 225;
	else
		specialeffect 223;

	switch( .Owner) {
	case 0: hBG_viewpointmap "bat_a04",1,173,345,1,0xFFFFFF; break;
	case 1: hBG_viewpointmap "bat_a04",1,173,345,1,0xAAAAFF; break;
	case 2: hBG_viewpointmap "bat_a04",1,173,345,1,0xFFAAAA; break;
	}

	if (.Owner == 0)
		set .Tick, 0;
	else if (set(.Tick, .Tick + 1) == 7) {
		donpcevent "Tierra_DOM::OnNScore";
		set .Tick, 0;
	}

	initnpctimer;
	end;
}

bat_a04,273,204,0	script	Center Base::Dom_C_Base	OBJ_NEUTRAL,{
	end;

OnBase:
	set .Owner, 0;
	set .Balance, 0;
	set .Tick, 0;
	setnpcdisplay "Dom_C_Base","Center Base",OBJ_NEUTRAL;
	initnpctimer;
	end;

OnTimer1000:
	stopnpctimer;
	if ($@Arena_Status != 1 || getvariableofnpc(.BG_Arena$,"BG_Queue_Handler") != "Tierra_DOM")
		end;

	set .@Guillaume, hBG_getareausers($@BG_Team1,"bat_a04",260,194,287,213);
	set .@Croix, hBG_getareausers($@BG_Team2,"bat_a04",260,194,287,213);
	set .Balance, .Balance + set(.@Balance, .@Guillaume - .@Croix);

	if (.Balance < -50)
		set .Balance, -50;
	else if (.Balance > 50)
		set .Balance, 50;

	switch( .Owner) {
	case 0:
		if (.Balance == 50) {
			set .Balance, 50;
			set .Owner, 1; // Guillaume
			setnpcdisplay "Dom_C_Base","Guillaume Base",1912;
			mapannounce "bat_a04","Center Base captured by Guillaume Team",1,0xAAAAFF;
//			bg_rankpoints_area $@BG_Team1,"bat_a04",260,194,287,213,"DOM_bases",1;
			donpcevent "GDomCBW::OnEnable";
		}
		else if (.Balance == -50) {
			set .Balance, -50;
			set .Owner, 2; // Croix
			setnpcdisplay "Dom_C_Base","Croix Base",1913;
			mapannounce "bat_a04","Center Base captured by Croix Team",1,0xFFAAAA;
//			bg_rankpoints_area $@BG_Team2,"bat_a04",260,194,287,213,"DOM_bases",1;
			donpcevent "CDomCBW::OnEnable";
		}
		break;
	case 1:
		if (.Balance <= 0) { // Guillaume lost Control
			set .Owner, 0;
			setnpcdisplay "Dom_C_Base","Center Base",OBJ_NEUTRAL;
			mapannounce "bat_a04","Guillaume Team lost control of the Center Base",1,0xAAAAFF;
			donpcevent "GDomCBW::OnDisable";
		}
		break;
	case 2:
		if (.Balance >= 0) { // Croix lost Control
			set .Owner, 0;
			setnpcdisplay "Dom_C_Base","Center Base",OBJ_NEUTRAL;
			mapannounce "bat_a04","Croix Team lost control of the Center Base",1,0xFFAAAA;
			donpcevent "CDomCBW::OnDisable";
		}
		break;
	}

	if (.@Balance > 0)
		specialeffect 236;
	else if (.@Balance < 0)
		specialeffect 225;
	else if (.Owner == 1)
		specialeffect 236;
	else if (.Owner == 2)
		specialeffect 225;
	else
		specialeffect 223;

	switch( .Owner) {
	case 0: hBG_viewpointmap "bat_a04",1,273,204,3,0xFFFFFF; break;
	case 1: hBG_viewpointmap "bat_a04",1,273,204,3,0xAAAAFF; break;
	case 2: hBG_viewpointmap "bat_a04",1,273,204,3,0xFFAAAA; break;
	}

	if (.Owner == 0)
		set .Tick, 0;
	else if (set(.Tick, .Tick + 1) == 7) {
		donpcevent "Tierra_DOM::OnCScore";
		set .Tick, 0;
	}

	initnpctimer;
	end;
}

bat_a04,164,50,0	script	South Base::Dom_S_Base	OBJ_NEUTRAL,{
	end;

OnBase:
	set .Owner, 0;
	set .Balance, 0;
	set .Tick, 0;
	setnpcdisplay "Dom_S_Base","South Base",OBJ_NEUTRAL;
	initnpctimer;
	end;

OnTimer1000:
	stopnpctimer;
	if ($@Arena_Status != 1 || getvariableofnpc(.BG_Arena$,"BG_Queue_Handler") != "Tierra_DOM")
		end;

	set .@Guillaume, hBG_getareausers($@BG_Team1,"bat_a04",129,34,175,65);
	set .@Croix, hBG_getareausers($@BG_Team2,"bat_a04",129,34,175,65);
	set .Balance, .Balance + set(.@Balance, .@Guillaume - .@Croix);

	if (.Balance < -50)
		set .Balance, -50;
	else if (.Balance > 50)
		set .Balance, 50;

	switch( .Owner) {
	case 0:
		if (.Balance == 50) {
			set .Balance, 50;
			set .Owner, 1; // Guillaume
			setnpcdisplay "Dom_S_Base","Guillaume Base",1912;
			mapannounce "bat_a04","South Base captured by Guillaume Team",1,0xAAAAFF;
//			bg_rankpoints_area $@BG_Team1,"bat_a04",129,34,175,65,"DOM_bases",1;
			donpcevent "GDomSBW::OnEnable";
		}
		else if (.Balance == -50) {
			set .Balance, -50;
			set .Owner, 2; // Croix
			setnpcdisplay "Dom_S_Base","Croix Base",1913;
			mapannounce "bat_a04","South Base captured by Croix Team",1,0xFFAAAA;
//			bg_rankpoints_area $@BG_Team2,"bat_a04",129,34,175,65,"DOM_bases",1;
			donpcevent "CDomSBW::OnEnable";
		}
		break;
	case 1:
		if (.Balance <= 0) { // Guillaume lost Control
			set .Owner, 0;
			setnpcdisplay "Dom_S_Base","North Base",OBJ_NEUTRAL;
			mapannounce "bat_a04","Guillaume Team lost control of the South Base",1,0xAAAAFF;
			donpcevent "GDomSBW::OnDisable";
		}
		break;
	case 2:
		if (.Balance >= 0) { // Croix lost Control
			set .Owner, 0;
			setnpcdisplay "Dom_S_Base","North Base",OBJ_NEUTRAL;
			mapannounce "bat_a04","Croix Team lost control of the South Base",1,0xFFAAAA;
			donpcevent "CDomSBW::OnDisable";
		}
		break;
	}

	if (.@Balance > 0)
		specialeffect 236;
	else if (.@Balance < 0)
		specialeffect 225;
	else if (.Owner == 1)
		specialeffect 236;
	else if (.Owner == 2)
		specialeffect 225;
	else
		specialeffect 223;

	switch( .Owner) {
	case 0: hBG_viewpointmap "bat_a04",1,164,50,2,0xFFFFFF; break;
	case 1: hBG_viewpointmap "bat_a04",1,164,50,2,0xAAAAFF; break;
	case 2: hBG_viewpointmap "bat_a04",1,164,50,2,0xFFAAAA; break;
	}

	if (.Owner == 0)
		set .Tick, 0;
	else if (set(.Tick, .Tick + 1) == 7) {
		donpcevent "Tierra_DOM::OnSScore";
		set .Tick, 0;
	}

	initnpctimer;
	end;
}

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

bat_a04,46,377,0	script	North Base Warp::GDomNBW	1_SHADOW_NPC,{
	end;

OnEnable:
	waitingroom "Join To Warp",20;
	end;

OnDisable:
	delwaitingroom;
	end;

OnWarp:
	warpwaitingpc "bat_a04",115,346,20;
	end;
}

bat_a04,46,370,0	script	Center Base Warp::GDomCBW	1_SHADOW_NPC,{
	end;

OnEnable:
	waitingroom "Join To Warp",20;
	end;

OnDisable:
	delwaitingroom;
	end;

OnWarp:
	warpwaitingpc "bat_a04",285,226,20;
	end;
}

bat_a04,53,370,0	script	South Base Warp::GDomSBW	1_SHADOW_NPC,{
	end;

OnEnable:
	waitingroom "Join To Warp",20;
	end;

OnDisable:
	delwaitingroom;
	end;

OnWarp:
	warpwaitingpc "bat_a04",106,48,20;
	end;
}

// *********************************************************************

bat_a04,38,19,0	script	North Base Warp::CDomNBW	1_SHADOW_NPC,{
	end;

OnEnable:
	waitingroom "Join To Warp",20;
	end;

OnDisable:
	delwaitingroom;
	end;

OnWarp:
	warpwaitingpc "bat_a04",115,346,20;
	end;
}

bat_a04,38,12,0	script	Center Base Warp::CDomCBW	1_SHADOW_NPC,{
	end;

OnEnable:
	waitingroom "Join To Warp",20;
	end;

OnDisable:
	delwaitingroom;
	end;
OnWarp:
	warpwaitingpc "bat_a04",260,183,20;
	end;
}

bat_a04,45,12,0	script	South Base Warp::CDomSBW	1_SHADOW_NPC,{
	end;

OnEnable:
	waitingroom "Join To Warp",20;
	end;

OnDisable:
	delwaitingroom;
	end;

OnWarp:
	warpwaitingpc "bat_a04",106,48,20;
	end;
}

// *********************************************************************

bat_a04,50,374,0	script	#guiDOM_respawn	HIDDEN_WARP_NPC,{
	end;

OnBGStart:
	initnpctimer;
	end;

OnBGStop:
	stopnpctimer;
	end;

OnTimer24000:
	specialeffect(EF_SANCTUARY);
	end;

OnTimer25000:
	areapercentheal "bat_a04",46,370,54,378,100,100;
	donpcevent "GDomNBW::OnWarp";
	donpcevent "GDomCBW::OnWarp";
	donpcevent "GDomSBW::OnWarp";
	areawarp "bat_a04",46,370,54,378,"bat_a04",353,344;
	initnpctimer;
	end;
}

bat_a04,42,16,0	script	#croDOM_respawn	HIDDEN_WARP_NPC,{
	end;

OnBGStart:
	initnpctimer;
	end;

OnBGStop:
	stopnpctimer;
	end;

OnTimer24000:
	specialeffect(EF_SANCTUARY);
	end;

OnTimer25000:
	areapercentheal "bat_a04",38,12,47,21,100,100;
	donpcevent "GDomNBW::OnWarp";
	donpcevent "GDomCBW::OnWarp";
	donpcevent "GDomSBW::OnWarp";
	areawarp "bat_a04",38,12,47,21,"bat_a04",353,52;
	initnpctimer;
	end;
}

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

bat_a04	mapflag	battleground	2
bat_a04	mapflag	nomemo
bat_a04	mapflag	nosave	SavePoint
bat_a04	mapflag	noteleport
bat_a04	mapflag	nowarp
bat_a04	mapflag	nowarpto
bat_a04	mapflag	noreturn
bat_a04	mapflag	nobranch
bat_a04	mapflag	nopenalty
//bat_a04	mapflag	noemergencycall