// ==============================================================================
// BattleGround System - Tierra Valley 2
// ==============================================================================

// Registration NPC's
// *********************************************************************

bat_room,114,227,4	script	Registration::TV2R_Guillaume	4_M_KY_KNT,{
	end;
OnInit:
	waitingroom "Battle Station 10 Players",10,"Tierra_BG2::OnGuillaumeJoin",1;
	end;
OnEnterBG:
	set $@TierraBG2_id1, waitingroom2bg("bat_a02",50,374,"Tierra_BG2::OnGuillaumeQuit","");
	end;
}

bat_room,114,204,0	script	Registration::TV2R_Croix	4_M_CRU_KNT,{
	end;
OnInit:
	waitingroom "Battle Station 10 Players",10,"Tierra_BG2::OnCroixJoin",1;
	end;
OnEnterBG:
	set $@TierraBG2_id2, waitingroom2bg("bat_a02",42,16,"Tierra_BG2::OnCroixQuit","");
	end;
}

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

-	script	Tierra_BG2	FAKE_NPC,{
	end;

OnInit:
	disablenpc "Croix Vintenar#tv2";
	disablenpc "Guillaume Vintenar#tv2";
	disablenpc "Therapist in battle#tv21";
	disablenpc "Therapist in battle#tv22";
	end;

OnGuillaumeQuit:
OnCroixQuit:
	set BG_Delay_Tick, gettimetick(2) + 1200;
	end;

OnGuillaumeJoin:
OnCroixJoin:
	if( $@TierraBG2 == 0 )
		donpcevent "Tierra_BG2::OnReadyCheck";
	end;

OnReadyCheck:
	if( $@TierraBG2 )
		end;
	set .@Guillaume, getwaitingroomstate(0,"TV2R_Guillaume");
	set .@Croix, getwaitingroomstate(0,"TV2R_Croix");

	if( .@Guillaume < 10 || .@Croix < 10 )
	{
		mapannounce "bat_room","Battleground -- Tierra Valley [80-99] G: " + .@Guillaume + "/10, C: " + .@Croix + "/10",1,0xF4A460;
		end;
	}

	set $@TierraBG2, 1;
	donpcevent "TV2R_Croix::OnEnterBG";
	donpcevent "TV2R_Guillaume::OnEnterBG";
	donpcevent "Guillaume_TV2B::OnBuild";
	donpcevent "Croix_TV2B::OnBuild";
	bg_monster $@TierraBG2_id1,"bat_a02",176,345,"Food Depot",1909,"Tierra_BG2::OnGuillaumeBreak";
	bg_monster $@TierraBG2_id2,"bat_a02",167,50,"Food Storage",1910,"Tierra_BG2::OnCroixBreak";
	bg_monster 0,"bat_a02",273,204,"Neutrality Flag",1911,"Tierra_BG2::OnNeutralBreak";

	set .Neutral_Base, 0;
	set $@TierraBG2_Victory, 0;

	set .Guardian_1, 0;
	set .Guardian_2, 0;
	set .Guardian_3, 0;

	enablenpc "Therapist in battle#tv21";
	enablenpc "Therapist in battle#tv22";
	disablenpc "Croix Vintenar#tv2";
	disablenpc "Guillaume Vintenar#tv2";
	// Respawner
	donpcevent "#gtv2_respawn::OnBGStart";
	donpcevent "#ctv2_respawn::OnBGStart";
	donpcevent "#ntv2_respawn::OnBGStart";
	// Warp Teams
	announce "Battleground -- Tierra Valley [80-99] has started!",0,0xF4A460;
	bg_warp $@TierraBG2_id1,"bat_a02",353,344;
	bg_warp $@TierraBG2_id2,"bat_a02",353,52;
	// Final Messages
	sleep 6000;
	mapannounce "bat_a02","Guillaume Vintenar Axl Rose : Let's attack to burn down Croix's food storage",1,0x0000FF;
	sleep 2000;
	mapannounce "bat_a02","Croix Vintenar Swandery : Master of Valhalla! Let us be gifted with unfailing faith and courage",1,0xFF0000;

	initnpctimer;
	end;

OnNeutralBreak:
	if( getcharid(CHAR_ID_BG) == $@TierraBG2_id1 )
	{
		mapannounce "bat_a02","Guillaume obtained a neurality banner, so they have an advantage.",1,0x0000FF;
		bg_team_setxy $@TierraBG2_id2,42,16;
		areawarp "bat_a02",52,208,61,217,"bat_a02",42,16;
	}
	else if( getcharid(CHAR_ID_BG) == $@TierraBG2_id2 )
	{
		mapannounce "bat_a02","Croix obtained a neutrality banner, so they have an advantage.",1,0xFF0000;
		bg_team_setxy $@TierraBG2_id1,50,374;
		areawarp "bat_a02",52,208,61,217,"bat_a02",50,374;
	}
	else end;

	set .Neutral_Base, getcharid(CHAR_ID_BG);
	bg_team_setxy .Neutral_Base,56,212;

	if( .Guardian_1 == 0 )
		set .Guardian_1, bg_monster(.Neutral_Base,"bat_a02",280,233,"Guardian",1949,"Tierra_BG2::OnGuardian1");
	else
		bg_monster_set_team .Guardian_1, .Neutral_Base;

	if( .Guardian_2 == 0 )
		set .Guardian_2, bg_monster(.Neutral_Base,"bat_a02",287,203,"Guardian",1950,"Tierra_BG2::OnGuardian2");
	else
		bg_monster_set_team .Guardian_2, .Neutral_Base;

	if( .Guardian_3 == 0 )
		set .Guardian_3, bg_monster(.Neutral_Base,"bat_a02",268,204,"Guardian",1949,"Tierra_BG2::OnGuardian3");
	else
		bg_monster_set_team .Guardian_3, .Neutral_Base;

	sleep 10000;
	if( $@TierraBG2 != 1 ) end;

	if( .Neutral_Base == $@TierraBG2_id1 )
		bg_monster .Neutral_Base,"bat_a02",273,204,"Guillaume Flag",1912,"Tierra_BG2::OnNeutralBreak";
	else if( .Neutral_Base == $@TierraBG2_id2 )
		bg_monster .Neutral_Base,"bat_a02",273,204,"Croix Flag",1913,"Tierra_BG2::OnNeutralBreak";
	end;

OnGuardian1: set .Guardian_1, 0; end;
OnGuardian2: set .Guardian_2, 0; end;
OnGuardian3: set .Guardian_3, 0; end;

OnGuillaumeBreak:
	set $@TierraBG2_Victory, 2;
	mapannounce "bat_a02","Croix Vintenar Swandery: We destroyed Guillaume's food storehouse. We won that! Wow!",1,0xFF0000;
	donpcevent "Tierra_BG2::OnStop";
	end;

OnCroixBreak:
	set $@TierraBG2_Victory, 1;
	mapannounce "bat_a02","Guillaume Vintenar Axl Rose: We destroyed Croix's food storehouse. We won that! Wow!",1,0x0000FF;
	donpcevent "Tierra_BG2::OnStop";
	end;

OnTimer2400000:
	mapannounce "bat_a02","Battle of Tierra Gorge will ends in 5 minutes",1,0xF4A460;
	end;
OnTimer2640000:
	mapannounce "bat_a02","Battle of Tierra Gorge will ends in 1 minute",1,0xF4A460;
	end;

OnTimer2700000:
	set $@TierraBG2_Victory, 3; // Draw Game
	mapannounce "bat_a02","Battle of Tierra Gorge is over. The time is out, this is a Tie",1,0xF4A460;
	donpcevent "Tierra_BG2::OnStop";
	end;

OnStop:
	set $@TierraBG2, 2;
	disablenpc "Therapist in battle#tv21";
	disablenpc "Therapist in battle#tv22";
	donpcevent "#gtv2_respawn::OnBGStop";
	donpcevent "#ctv2_respawn::OnBGStop";
	donpcevent "#ntv2_respawn::OnBGStop";
	enablenpc "Croix Vintenar#tv2";
	enablenpc "Guillaume Vintenar#tv2";
	killmonster "bat_a02","Tierra_BG2::OnGuillaumeBreak";
	killmonster "bat_a02","Tierra_BG2::OnCroixBreak";
	killmonster "bat_a02","Tierra_BG2::OnNeutralBreak";
	killmonster "bat_a02","Tierra_BG2::OnGuardian1";
	killmonster "bat_a02","Tierra_BG2::OnGuardian2";
	killmonster "bat_a02","Tierra_BG2::OnGuardian3";
	stopnpctimer;
	sleep 3000;
	bg_warp $@TierraBG2_id1,"bat_a02",50,374;
	bg_warp $@TierraBG2_id2,"bat_a02",42,16;
	sleep 3000;
	mapannounce "bat_a02","Battle of Tierra Gorge will close in 1 minute!",1,0xF4A460;
	initnpctimer;
	end;

OnTimer30000:
	if( $@TierraBG2 == 2 )
		mapannounce "bat_a02","Battle of Tierra Valley will close in 30 seconds!",1,0xF4A460;
	end;
OnTimer50000:
	if( $@TierraBG2 == 2 )
		mapannounce "bat_a02","Battle of Tierra Valley will close in 10 seconds!",1,0xF4A460;
	end;

OnTimer60000:
	if( $@TierraBG2 != 2 )
		end;
OnReset:
	stopnpctimer;
	set .Neutral_Base, 0;
	disablenpc "Croix Vintenar#tv2";
	disablenpc "Guillaume Vintenar#tv2";
	disablenpc "Therapist in battle#tv21";
	disablenpc "Therapist in battle#tv22";
	donpcevent "#gtv2_respawn::OnBGStop";
	donpcevent "#gtv2_respawn::OnBGStop";
	donpcevent "#ctv2_respawn::OnBGStop";

	killmonster "bat_a02","Tierra_BG2::OnGuillaumeBreak";
	killmonster "bat_a02","Tierra_BG2::OnCroixBreak";
	killmonster "bat_a02","Tierra_BG2::OnNeutralBreak";
	killmonster "bat_a02","Tierra_BG2::OnGuardian1";
	killmonster "bat_a02","Tierra_BG2::OnGuardian2";
	killmonster "bat_a02","Tierra_BG2::OnGuardian3";
	donpcevent "Guillaume_TV2B::OnDestroy";
	donpcevent "Croix_TV2B::OnDestroy";

	set $@TierraBG2_Victory, 0;
	if( $@TierraBG2_id1 ) { bg_destroy $@TierraBG2_id1; set $@TierraBG2_id1, 0; }
	if( $@TierraBG2_id2 ) { bg_destroy $@TierraBG2_id2; set $@TierraBG2_id2, 0; }
	sleep 1000;
	mapwarp "bat_a02","bat_room",155,150;
	sleep 2000;
	maprespawnguildid "bat_a02",0,3; // Just in case someone else
	sleep 2000;
	set $@TierraBG2, 0;
	donpcevent "Tierra_BG2::OnReadyCheck"; // Maybe a game is ready to start
	end;
}

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

bat_a02,148,85,1	duplicate(Croix camp#bat)	Croix camp#bat22	1_FLAG_EAGLE
bat_a02,155,85,1	duplicate(Croix camp#bat)	Croix camp#bat23	1_FLAG_EAGLE
bat_a02,357,75,1	duplicate(Croix camp#bat)	Croix camp#bat24	1_FLAG_EAGLE
bat_a02,348,74,1	duplicate(Croix camp#bat)	Croix camp#bat25	1_FLAG_EAGLE
bat_a02,199,49,1	duplicate(Croix camp#bat)	Croix camp#bat26	1_FLAG_EAGLE
bat_a02,168,16,1	duplicate(Croix camp#bat)	Croix camp#bat27	1_FLAG_EAGLE
bat_a02,138,12,1	duplicate(Croix camp#bat)	Croix camp#bat28	1_FLAG_EAGLE
bat_a02,108,35,1	duplicate(Croix camp#bat)	Croix camp#bat29	1_FLAG_EAGLE
bat_a02,164,308,1	duplicate(Guillaume camp#bat)	Guillaume camp#bat23	1_FLAG_LION
bat_a02,157,308,1	duplicate(Guillaume camp#bat)	Guillaume camp#bat24	1_FLAG_LION
bat_a02,359,327,1	duplicate(Guillaume camp#bat)	Guillaume camp#bat25	1_FLAG_LION
bat_a02,350,326,1	duplicate(Guillaume camp#bat)	Guillaume camp#bat26	1_FLAG_LION
bat_a02,209,344,1	duplicate(Guillaume camp#bat)	Guillaume camp#bat27	1_FLAG_LION
bat_a02,173,380,1	duplicate(Guillaume camp#bat)	Guillaume camp#bat28	1_FLAG_LION
bat_a02,150,380,1	duplicate(Guillaume camp#bat)	Guillaume camp#bat29	1_FLAG_LION
bat_a02,118,357,1	duplicate(Guillaume camp#bat)	Guillaume camp#bat30	1_FLAG_LION
bat_a02,119,336,1	duplicate(Guillaume camp#bat)	Guillaume camp#bat31	1_FLAG_LION

// Barricades
// *********************************************************************

-	script	Guillaume_TV2B	FAKE_NPC,{
	end;

OnBuild:
	for( set .@i, 0; .@i < 16; set .@i, .@i + 1 )
		bg_monster 0,"bat_a02",170+.@i,130,"Barricade",1906,"Guillaume_TV2B::OnWall";

	setwall "bat_a02",170,130,16,6,1,"bat_a02_g1";
	set .MyMobCount,16;
	end;

OnDestroy:
	killmonster "bat_a02","Guillaume_TV2B::OnWall";
	delwall "bat_a02_g1";
	set .MyMobCount,0;
	end;

OnWall:
	if( set(.MyMobCount,.MyMobCount - 1) < 1 )
	{
		delwall "bat_a02_g1";
		mapannounce "bat_a02","South Gate : The Gate has been Destroy!!",1,0xF4A460;
	}
	end;
}

-	script	Croix_TV2B	FAKE_NPC,{
	end;

OnBuild:
	for( set .@i, 0; .@i < 16; set .@i, .@i + 1 )
		bg_monster 0,"bat_a02",186+.@i,266,"Barricade",1906,"Croix_TV2B::OnWall";

	setwall "bat_a02",186,266,16,6,1,"bat_a02_c1";
	set .MyMobCount,16;
	end;

OnDestroy:
	killmonster "bat_a02","Croix_TV2B::OnWall";
	delwall "bat_a02_c1";
	set .MyMobCount,0;
	end;

OnWall:
	if( set(.MyMobCount,.MyMobCount - 1) < 1 )
	{
		delwall "bat_a02_c1";
		mapannounce "bat_a02","North Gate : A Gate has been Destroy!!",1,0xF4A460;
	}
	end;
}

// Battleground rewards
// *********************************************************************

bat_a02,45,19,3	script	Croix Vintenar#tv2	4_M_CRU_HEAD,{
	if( $@TierraBG2_Victory )
	{
		if( $@TierraBG2_Victory == Bat_Team )
		{ // Victory
			set .@reward, 3;
			mes "[Swandery]";
			mes "Blessed Croax!!";
			mes "Let's enjoy our glorious victory!";
			mes "" + strcharinfo(PC_NAME) + ", its a sign reflecting victory";
			close2;
		} else {
			set .@reward, 1;
			mes "[Swandery]";
			mes "Oh, " + strcharinfo(PC_NAME) + ". Don't be sad.";
			mes "Even though we didn't win, we did our best.";
			mes "This is a Royal gift from Croix, and please don't forget this battle. We can win the next.";
			close2;
		}

		setquest 2069;
		getitem 7828, .@reward;
		bg_leave;
		warp "bat_room",155,150;
		end;
	}
	end;
}

bat_a02,53,377,3	script	Guillaume Vintenar#tv2	4_M_KY_HEAD,{
	if( $@TierraBG2_Victory )
	{
		if( $@TierraBG2_Victory == Bat_Team )
		{ // Victory
			set .@reward, 3;
			mes "[Swandery]";
			mes "Blessed Guillaume!!";
			mes "Let's enjoy our glorious victory!";
			mes "" + strcharinfo(PC_NAME) + ", its a sign reflecting victory";
			close2;
		} else {
			set .@reward, 1;
			mes "[Swandery]";
			mes "You lost, but you're dedicated to this battle.";
			mes "This is a reward for your great dedication by Guillaume Marollo!";
			mes "Just take this defeat a lesson, and later you would definitely learn.";
			close2;
		}

		setquest 2069;
		getitem 7828, .@reward;
		bg_leave;
		warp "bat_room",155,150;
		end;
	}
	end;
}

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

bat_a02,60,216,3	script	Ghost#tv23	4_GHOSTRING,{
	mes "[Ghost in valley]";
	mes "Boo...Boo...";
	specialeffect(EF_HEAL, AREA, playerattached());
	close;
}

bat_a02,53,377,3	script	Therapist in battle#tv22	4_F_SISTER,{
	mes "[Therapist in battle]";
	mes "Just close your eyes, and take a deep breathe.";
	mes "You can be free from pain.";
	specialeffect(EF_HEAL, AREA, playerattached());
	close;
}

bat_a02,45,18,3	script	Therapist in battle#tv21	4_F_SISTER,{
	mes "[Therapist in battle]";
	mes "Just close your eyes, and take a deep breathe.";
	mes "You can be free from pain.";
	specialeffect(EF_HEAL, AREA, playerattached());
	close;
}

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

bat_a02,57,213,0	script	#ntv2_respawn	HIDDEN_WARP_NPC,{
	end;

OnBGStart:
	initnpctimer;
	end;

OnBGStop:
	stopnpctimer;
	end;

OnTimer19000:
	specialeffect(EF_SANCTUARY);
	end;

OnTimer20000:
	areapercentheal "bat_a02",52,208,61,217,100,100;
	areawarp "bat_a02",52,208,61,217,"bat_a02",301,208;
	initnpctimer;
	end;
}

bat_a02,50,374,0	script	#gtv2_respawn	HIDDEN_WARP_NPC,{
	end;

OnBGStart:
	initnpctimer;
	end;

OnBGStop:
	stopnpctimer;
	end;

OnTimer24000:
	specialeffect(EF_SANCTUARY);
	end;

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

bat_a02,42,16,0	script	#ctv2_respawn	HIDDEN_WARP_NPC,{
	end;

OnBGStart:
	initnpctimer;
	end;

OnBGStop:
	stopnpctimer;
	end;

OnTimer24000:
	specialeffect(EF_SANCTUARY);
	end;

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