//===== eAthena Script =======================================
//= 𫰾Լ˥ɮ
//===== By: ==================================================
//= L0ne_W0lf
//===== Current Version: =====================================
//= 1.6b
//===== Compatible With: =====================================
//= eAthena SVN
//===== Description: =========================================
//= [ Aegis Conversion]
//= ----------------------------------------------------------
//= - THIS FILE IS REQUIRED FOR GUILD CASTLES TO FUNCTION.
//= ----------------------------------------------------------
//= - Enables AGIT Manager inside Guild Strongholds.
//=   Visible Name required: Agit
//=   Manages the various functions used in and out of WoE.
//=
//= - Enables Stewards inside Guild Strongholds which let's
//=   the guild master invest in Defense and Economy, and
//=   to summon guardians, a Kafra, and enter master's room.
//=
//= - Guardian Spawning Template
//=   Visible Name required: Guardian
//=   Spawn guardians when guild castle data is recieved.
//=
//= - Enables Kafra Services inside Guild Strongholds.
//=   Visible Name required: Kafra Staff
//=   Storage, Guild Storage, Teleport Service, Cart rental.
//=
//= - Treasure Room Protection and Chest spawning.
//=   Chests will NOT be saved anymore in the event of crashes.
//=   Treasures will NOT spawn on a location that already has
//=   treasure chest spawned.
//===== Additional Comments: =================================
//= 1.0 First Version. No longer uses functions. [L0ne_W0lf]
//= 1.1 Daily investement will now be reset. [L0ne_W0lf]
//=     Template will no longer try to spawn chests.
//= 1.2 Fixed Eco Invest option charging twice. [L0ne_W0lf]
//= 1.3 Fixed a loading flag emblem for Payon 1. [L0ne_W0lf]
//=     Fixed two typos regarding Guild Steward name.
//= 1.4 Fixed a typo in defense investment. [L0ne_W0lf]
//= 1.5 Fixed spawn point of the emperium in Payon 1. [L0ne_W0lf]
//=     Double-investing doubles the price now.
//= 1.6 Corrected Zeny check when summoning guardians. [L0ne_W0lf]
//=     Corrected cost for investing, thanks to Ai4rei.
//=     Second invest is now quadruple the value of the first
//=     Investing now happens at the turn of the day.
//= 1.6a Corrected conditions in the new investing blocks. [L0ne_W0lf]
//= 1.6b Moved where investments are added to eco/def. [L0ne_W0lf]
//= +(c) c餤 [¦B]
//============================================================

// AGIT Manager Template
//============================================================
-	script	Gld_Agit_Manager::Gld_Agit_Manager	-1,{
	end;

// Load (or reload) specific information for a castle.
OnInterIfInitOnce:
	if (strnpcinfo(0) == "Gld_Agit_Manager") end;
	GetCastleData strnpcinfo(2),0,strnpcinfo(0) + "::OnRecvCastle";
	end;

// War of Emperium has started.
OnAgitStart:
	if (strnpcinfo(0) == "Gld_Agit_Manager") end;
	MapRespawnGuildID strnpcinfo(2),GetCastleData(strnpcinfo(2),1),2;
	GvgOn strnpcinfo(2);

// Spawn (fall through), or respawn the Emperium once it has been broken.
OnStartArena:
	// OnAgitStart will fall through and spawn the Emperium.
	if (strnpcinfo(2) == "aldeg_cas01") { setarray .@emproom[0],216,23; }
	else if (strnpcinfo(2) == "aldeg_cas02") { setarray .@emproom[0],213,23; }
	else if (strnpcinfo(2) == "aldeg_cas03") { setarray .@emproom[0],205,31; }
	else if (strnpcinfo(2) == "aldeg_cas04") { setarray .@emproom[0],36,217; }
	else if (strnpcinfo(2) == "aldeg_cas05") { setarray .@emproom[0],27,101; }
	else if (strnpcinfo(2) == "gefg_cas01") { setarray .@emproom[0],197,181; }
	else if (strnpcinfo(2) == "gefg_cas02") { setarray .@emproom[0],176,178; }
	else if (strnpcinfo(2) == "gefg_cas03") { setarray .@emproom[0],244,166; }
	else if (strnpcinfo(2) == "gefg_cas04") { setarray .@emproom[0],174,177; }
	else if (strnpcinfo(2) == "gefg_cas05") { setarray .@emproom[0],194,184; }
	else if (strnpcinfo(2) == "payg_cas01") { setarray .@emproom[0],139,139; }
	else if (strnpcinfo(2) == "payg_cas02") { setarray .@emproom[0],38,25; }
	else if (strnpcinfo(2) == "payg_cas03") { setarray .@emproom[0],268,264; }
	else if (strnpcinfo(2) == "payg_cas04") { setarray .@emproom[0],270,28; }
	else if (strnpcinfo(2) == "payg_cas05") { setarray .@emproom[0],30,30; }
	else if (strnpcinfo(2) == "prtg_cas01") { setarray .@emproom[0],197,197; }
	else if (strnpcinfo(2) == "prtg_cas02") { setarray .@emproom[0],157,174; }
	else if (strnpcinfo(2) == "prtg_cas03") { setarray .@emproom[0],16,220; }
	else if (strnpcinfo(2) == "prtg_cas04") { setarray .@emproom[0],291,14; }
	else if (strnpcinfo(2) == "prtg_cas05") { setarray .@emproom[0],266,266; }
	// Add custom Guild Castles here.
	else {
		end;
	}
	if (!mobcount(strnpcinfo(2),"Agit#"+strnpcinfo(2)+"::OnAgitBreak")) {
		monster strnpcinfo(2),.@emproom[0],.@emproom[1],"R",1288,1,"Agit#"+strnpcinfo(2)+"::OnAgitBreak";
	}
	end;

// The Emperium has been broken.
OnAgitBreak:
	set .@GID,getcharid(2);
	// Show and log error if an unguilded player breaks the Emperium. (Should NEVER happen)
	if (.@GID <= 0) {
		set .@notice$,"Character "+strcharinfo(0)+" ("+getcharid(0)+") broke the Emperium in Castle: "+strnpcinfo(2)+" while guildless. No data will be saved and Emperium respawned.";
 		logmes .@notice$; debugmes .@notice$;
		donpcevent "Agit#"+strnpcinfo(2)+"::OnStartArena";
		end;
	}
	// Adjust Economy Invest Level for Castle
	set .@Economy,GetCastleData(strnpcinfo(2),2) - 5;
	if (.@Economy < 0) set .@Economy, 0;
	SetCastleData strnpcinfo(2), 2, .@Economy;
	// Adjust Defense Invest Level for Castle
	set .@Defence,GetCastleData(strnpcinfo(2),3) - 5;
	if (.@Defence < 0) set .@Defence, 0;
	SetCastleData strnpcinfo(2), 3, .@Defence;

	// Set new Castle Occupant
	SetCastleData strnpcinfo(2),1, .@GID;

	// Announce that the Emperium is destroyed, and respawn all but new castle-occupants.
	mapannounce strnpcinfo(2),"RݳQ}aF",bc_map,"0x00CCFF";
	MapRespawnGuildID strnpcinfo(2),.@GID,2;

	// Refresh castle data, disable Kafra and reset Invest information.
	GetCastleData strnpcinfo(2),0,strnpcinfo(0)+"::OnRecvCastle";
	disablenpc "d ¾#"+strnpcinfo(2);
	for( set .@i, 4; .@i <= 9; set .@i, .@i+1 ) {
		SetCastleData strnpcinfo(2), .@i, 0;
	}
	// Erase Guardian Database information if the new owners do not have Guardian Research.
	if( getgdskilllv(.@GID,10002) == 0 ) {
		for( set .@i, 10; .@i <= 17; set .@i, .@i+1 ) {
			SetCastleData strnpcinfo(2), .@i, 0;
		}
	}
	// Respawn the Emperium, and display new owners.
	sleep 500; // Slow down script execution slightly.
	if( agitcheck() )
		donpcevent "Agit#"+strnpcinfo(2)+"::OnStartArena";
	sleep getbattleflag("gvg_eliminate_time");
	announce "Ka [" + getcastlename(strnpcinfo(2)) + "]Q [" + getguildName(.@GID) + "] u|F",bc_all;
	end;

// War of Emperium has ended.
OnAgitEnd:
	if (strnpcinfo(0) == "Gld_Agit_Manager") end;
	GvgOff strnpcinfo(2);
	// If the castle has no owner at the end of WoE, do not kill Emperium.
	if (GetCastleData(strnpcinfo(2),1)) {
		KillMonster strnpcinfo(2),"Agit#"+strnpcinfo(2)+"::OnAgitBreak";
	}
	end;

// Occupying Guild has been disbanded.
OnGuildBreak:
	if (strnpcinfo(0) == "Gld_Agit_Manager") end;
	// Kill guardians, disable the Kafra, and set owner to 0.
	killmonster strnpcinfo(2),"Guardian#"+strnpcinfo(2)+"::OnGuardianDied";
	disablenpc "d ¾#"+strnpcinfo(2);
	SetCastleData strnpcinfo(2),0,0;
	// Wait before refreshing guild information.
	sleep getbattleflag("gvg_eliminate_time");
	Announce "Ka [" + GetCastleName(strnpcinfo(2)) + "]Q [] u|F",0;
	GetCastleData strnpcinfo(2),0,strnpcinfo(0)+"::OnRecvCastle";
	end;

OnRecvCastle:
	RequestGuildInfo GetCastleData(strnpcinfo(2),1);

	// Spawn Monsters if the castle is empty.
	set .@GID, GetCastleData(strnpcinfo(2),1);
	if (.@GID == 0) {
		killmonsterall strnpcinfo(2);
		if (compare(strnpcinfo(2),"aldeg")) {
			// Normal Spawns
			monster strnpcinfo(2),0,0,"--ja--",1117,10;
			monster strnpcinfo(2),0,0,"--ja--",1132,4;
			monster strnpcinfo(2),0,0,"--ja--",1219,2;
			monster strnpcinfo(2),0,0,"--ja--",1205,1;
			monster strnpcinfo(2),0,0,"--ja--",1216,10;
			monster strnpcinfo(2),0,0,"--ja--",1193,18;
			monster strnpcinfo(2),0,0,"--ja--",1269,9;
			monster strnpcinfo(2),0,0,"--ja--",1276,7;
			monster strnpcinfo(2),0,0,"--ja--",1208,3;
			monster strnpcinfo(2),0,0,"--ja--",1275,1;
			monster strnpcinfo(2),0,0,"--ja--",1268,1;
			monster strnpcinfo(2),0,0,"--ja--",1272,1;
			// Set Emperium room spawn coordinates and spawn monsters.
			if (strnpcinfo(2) == "aldeg_cas01") { setarray .@emproom[0],216,23; }
			else if (strnpcinfo(2) == "aldeg_cas02") { setarray .@emproom[0],213,23; }
			else if (strnpcinfo(2) == "aldeg_cas03") { setarray .@emproom[0],205,31; }
			else if (strnpcinfo(2) == "aldeg_cas04") { setarray .@emproom[0],36,217; }
			else if (strnpcinfo(2) == "aldeg_cas05") { setarray .@emproom[0],27,101; }
			monster strnpcinfo(2),.@emproom[0],.@emproom[1],"--ja--",1272,1;
			monster strnpcinfo(2),.@emproom[0],.@emproom[1],"--ja--",1270,4;
			monster strnpcinfo(2),.@emproom[0],.@emproom[1],"--ja--",1268,1;
			monster strnpcinfo(2),.@emproom[0],.@emproom[1],"--ja--",1219,1;
			monster strnpcinfo(2),.@emproom[0],.@emproom[1],"--ja--",1276,5;
		}
		else if (compare(strnpcinfo(2),"gefg")) {
			// Normal Spawns
			monster strnpcinfo(2),0,0,"--ja--",1117,10;
			monster strnpcinfo(2),0,0,"--ja--",1263,11;
			monster strnpcinfo(2),0,0,"--ja--",1102,10;
			monster strnpcinfo(2),0,0,"--ja--",1130,10;
			monster strnpcinfo(2),0,0,"--ja--",1140,20;
			monster strnpcinfo(2),0,0,"--ja--",1163,9;
			monster strnpcinfo(2),0,0,"--ja--",1275,1;
			monster strnpcinfo(2),0,0,"--ja--",1219,1;
			monster strnpcinfo(2),0,0,"--ja--",1150,1;
			monster strnpcinfo(2),0,0,"--ja--",1159,1;
			// Set Emperium room spawn coordinates and spawn monsters.
			if (strnpcinfo(2) == "gefg_cas01") { setarray .@emproom[0],197,181; }
			else if (strnpcinfo(2) == "gefg_cas02") { setarray .@emproom[0],176,178; }
			else if (strnpcinfo(2) == "gefg_cas03") { setarray .@emproom[0],244,166; }
			else if (strnpcinfo(2) == "gefg_cas04") { setarray .@emproom[0],174,177; }
			else if (strnpcinfo(2) == "gefg_cas05") { setarray .@emproom[0],194,184; }
			monster strnpcinfo(2),.@emproom[0],.@emproom[1],"--ja--",1203,1;
			monster strnpcinfo(2),.@emproom[0],.@emproom[1],"--ja--",1087,1;
			monster strnpcinfo(2),.@emproom[0],.@emproom[1],"--ja--",1213,10;
			monster strnpcinfo(2),.@emproom[0],.@emproom[1],"--ja--",1189,10;
		}
		else if (compare(strnpcinfo(2),"payg")) {
			// Normal Spawns
			monster strnpcinfo(2),0,0,"--ja--",1277,9;
			monster strnpcinfo(2),0,0,"--ja--",1208,10;
			monster strnpcinfo(2),0,0,"--ja--",1262,5;
			monster strnpcinfo(2),0,0,"--ja--",1102,5;
			monster strnpcinfo(2),0,0,"--ja--",1150,1;
			monster strnpcinfo(2),0,0,"--ja--",1115,1;
			monster strnpcinfo(2),0,0,"--ja--",1129,11;
			monster strnpcinfo(2),0,0,"--ja--",1276,5;
			monster strnpcinfo(2),0,0,"--ja--",1282,4;
			monster strnpcinfo(2),0,0,"--ja--",1253,5;
			// Set Emperium room spawn coordinates and spawn monsters.
			if (strnpcinfo(2) == "payg_cas01") { setarray .@emproom[0],139,139; }
			else if (strnpcinfo(2) == "payg_cas02") { setarray .@emproom[0],38,25; }
			else if (strnpcinfo(2) == "payg_cas03") { setarray .@emproom[0],268,264; }
			else if (strnpcinfo(2) == "payg_cas04") { setarray .@emproom[0],270,28; }
			else if (strnpcinfo(2) == "payg_cas05") { setarray .@emproom[0],30,30; }
			monster strnpcinfo(2),.@emproom[0],.@emproom[1],"--ja--",1150,1;
			monster strnpcinfo(2),.@emproom[0],.@emproom[1],"--ja--",1115,1;
			monster strnpcinfo(2),.@emproom[0],.@emproom[1],"--ja--",1208,6;
			monster strnpcinfo(2),.@emproom[0],.@emproom[1],"--ja--",1276,5;
		}
		else if (compare(strnpcinfo(2),"prtg")) {
			// Normal Spawns
			monster strnpcinfo(2),0,0,"--ja--",1163,1;
			monster strnpcinfo(2),0,0,"--ja--",1132,10;
			monster strnpcinfo(2),0,0,"--ja--",1219,5;
			monster strnpcinfo(2),0,0,"--ja--",1268,5;
			monster strnpcinfo(2),0,0,"--ja--",1251,1;
			monster strnpcinfo(2),0,0,"--ja--",1252,1;
			monster strnpcinfo(2),0,0,"--ja--",1276,5;
			monster strnpcinfo(2),0,0,"--ja--",1259,2;
			monster strnpcinfo(2),0,0,"--ja--",1283,3;
			monster strnpcinfo(2),0,0,"--ja--",1275,1;
			monster strnpcinfo(2),0,0,"--ja--",1200,1;
			// Set Emperium room spawn coordinates and spawn monsters.
			if (strnpcinfo(2) == "prtg_cas01") { setarray .@emproom[0],197,197; }
			else if (strnpcinfo(2) == "prtg_cas02") { setarray .@emproom[0],157,174; }
			else if (strnpcinfo(2) == "prtg_cas03") { setarray .@emproom[0],16,220; }
			else if (strnpcinfo(2) == "prtg_cas04") { setarray .@emproom[0],291,14; }
			else if (strnpcinfo(2) == "prtg_cas05") { setarray .@emproom[0],266,266; }
			monster strnpcinfo(2),.@emproom[0],.@emproom[1],"--ja--",1268,1;
			monster strnpcinfo(2),.@emproom[0],.@emproom[1],"--ja--",1251,1;
			monster strnpcinfo(2),.@emproom[0],.@emproom[1],"--ja--",1252,1;
			monster strnpcinfo(2),.@emproom[0],.@emproom[1],"--ja--",1219,1;
			monster strnpcinfo(2),.@emproom[0],.@emproom[1],"--ja--",1276,5;
		}
		// Add custom Guild Castles here.
		else {
			end;
		}
		donpcevent "Agit#"+strnpcinfo(2)+"::OnStartArena";
		// Disable Kafra Staff...
		disablenpc "d ¾#"+strnpcinfo(2);
		end;
	}
	else {
		// Otherwise place the guild emblem on flags.
		if (strnpcinfo(2) == "aldeg_cas01") { donpcevent "::OnRecvCastleA01"; }
		else if (strnpcinfo(2) == "aldeg_cas02") { donpcevent "::OnRecvCastleA02"; }
		else if (strnpcinfo(2) == "aldeg_cas03") { donpcevent "::OnRecvCastleA03"; }
		else if (strnpcinfo(2) == "aldeg_cas04") { donpcevent "::OnRecvCastleA04"; }
		else if (strnpcinfo(2) == "aldeg_cas05") { donpcevent "::OnRecvCastleA05"; }
		else if (strnpcinfo(2) == "gefg_cas01") { donpcevent "::OnRecvCastleG01"; }
		else if (strnpcinfo(2) == "gefg_cas02") { donpcevent "::OnRecvCastleG02"; }
		else if (strnpcinfo(2) == "gefg_cas03") { donpcevent "::OnRecvCastleG03"; }
		else if (strnpcinfo(2) == "gefg_cas04") { donpcevent "::OnRecvCastleG04"; }
		else if (strnpcinfo(2) == "gefg_cas05") { donpcevent "::OnRecvCastleG05"; }
		else if (strnpcinfo(2) == "payg_cas01") { donpcevent "::OnRecvCastlePy01"; }
		else if (strnpcinfo(2) == "payg_cas02") { donpcevent "::OnRecvCastlePy02"; }
		else if (strnpcinfo(2) == "payg_cas03") { donpcevent "::OnRecvCastlePy03"; }
		else if (strnpcinfo(2) == "payg_cas04") { donpcevent "::OnRecvCastlePy04"; }
		else if (strnpcinfo(2) == "payg_cas05") { donpcevent "::OnRecvCastlePy05"; }
		else if (strnpcinfo(2) == "prtg_cas01") { donpcevent "::OnRecvCastlePt01"; }
		else if (strnpcinfo(2) == "prtg_cas02") { donpcevent "::OnRecvCastlePt02"; }
		else if (strnpcinfo(2) == "prtg_cas03") { donpcevent "::OnRecvCastlePt03"; }
		else if (strnpcinfo(2) == "prtg_cas04") { donpcevent "::OnRecvCastlePt04"; }
		else if (strnpcinfo(2) == "prtg_cas05") { donpcevent "::OnRecvCastlePt05"; }
		// Add custom Guild Castles here.
		else {
			end;
		}
		// And load purchased Guardian in castles.
		donpcevent "Guardian#"+strnpcinfo(2)+"::OnSpawnGuardians";
		// And display Kafra if purchased.
		if (GetCastleData(strnpcinfo(2),9) < 1) disablenpc "d ¾#"+strnpcinfo(2);
	}
	end;
}

// Guild Steward Template
//============================================================
-	script	Gld_Mngr_Template::Gld_Mngr_Template	-1,{
	// What is the Display Name of the NPC?
	set .@name$,strnpcinfo(1);

	// Store the Guild ID of castle occupant.
	set .@GID, GetCastleData(strnpcinfo(2),1);

	// Define the types of guardians on a per castle basis.
	// 1 - Soldier Guardian; 2 - Archer Guardian; 3 - Knight Guardian
	// Define the x spawn point for each uardian.
	// [0] = 1st guardian's x spawn point.
	// Define the y spawn point for each guardian.
	// [0] = 1st guardian's y spawn point.
	// Define the coordinates of the "Treasure Room."
	// Aldebaran (Luina) Castles
	if (strnpcinfo(2) == "aldeg_cas01") { 
		setarray .@guardiantype[0],1,2,2,2,2,3,3,3;
		setarray .@guardianposx[0],17,39,38,45,21,218,213,73;
		setarray .@guardianposy[0],218,208,196,228,194,24,24,70;
		setarray .@masterroom[0],113,223;
	}
	else if (strnpcinfo(2) == "aldeg_cas02") {
		setarray .@guardiantype[0],3,3,3,1,1,2,2,2;
		setarray .@guardianposx[0],27,88,117,60,51,21,36,210;
		setarray .@guardianposy[0],184,43,46,202,183,177,183,7;
		setarray .@masterroom[0],134,225;
	}
	else if (strnpcinfo(2) == "aldeg_cas03") {
		setarray .@guardiantype[0],3,3,1,1,1,2,2,2;
		setarray .@guardianposx[0],90,116,86,116,64,212,195,110;
		setarray .@guardianposy[0],112,112,120,76,103,160,151,217;
		setarray .@masterroom[0],229,267;
	}
	else if (strnpcinfo(2) == "aldeg_cas04") {
		setarray .@guardiantype[0],2,2,2,1,1,1,3,3;
		setarray .@guardianposx[0],187,192,148,145,169,198,48,55;
		setarray .@guardianposy[0],100,42,88,209,53,77,72,88;
		setarray .@masterroom[0],83,17;
	}
	else if (strnpcinfo(2) == "aldeg_cas05") {
		setarray .@guardiantype[0],2,2,1,1,3,3,3,3;
		setarray .@guardianposx[0],51,188,157,157,27,145,156,41;
		setarray .@guardianposy[0],202,79,192,74,221,78,73,112;
		setarray .@masterroom[0],64,8;
	}
	// Geffen (Britoniah) Castles
	else if (strnpcinfo(2) == "gefg_cas01") {
		setarray .@guardiantype[0],1,1,1,2,2,3,3,3;
		setarray .@guardianposx[0],67,184,62,36,50,50,189,200;
		setarray .@guardianposy[0],179,20,41,186,186,67,41,167;
		setarray .@masterroom[0],152,117;
	}
	else if (strnpcinfo(2) == "gefg_cas02") {
		setarray .@guardiantype[0],1,1,1,2,2,3,3,3;
		setarray .@guardianposx[0],64,56,166,35,20,19,166,159;
		setarray .@guardianposy[0],168,41,25,148,150,41,42,188;
		setarray .@masterroom[0],145,115;
	}
	else if (strnpcinfo(2) == "gefg_cas03") {
		setarray .@guardiantype[0],2,2,1,1,1,3,3,3;
		setarray .@guardianposx[0],48,113,48,157,243,157,234,238;
		setarray .@guardianposy[0],176,214,207,62,41,45,25,160;
		setarray .@masterroom[0],275,289;
	}
	else if (strnpcinfo(2) == "gefg_cas04") {
		setarray .@guardiantype[0],2,2,1,1,1,3,3,3;
		setarray .@guardianposx[0],53,31,49,29,147,57,160,148;
		setarray .@guardianposy[0],191,178,220,46,65,46,50,189;
		setarray .@masterroom[0],116,123;
	}
	else if (strnpcinfo(2) == "gefg_cas05") {
		setarray .@guardiantype[0],2,2,1,1,1,3,3,3;
		setarray .@guardianposx[0],45,71,72,66,177,66,177,193;
		setarray .@guardianposy[0],149,163,142,47,50,17,35,166;
		setarray .@masterroom[0],149,106;
	}
	// Payon (Baulder) Castles
	else if (strnpcinfo(2) == "payg_cas01") {
		setarray .@guardiantype[0],2,2,2,2,2,2,2,3;
		setarray .@guardianposx[0],229,225,222,99,65,36,51,138;
		setarray .@guardianposy[0],92,80,111,45,31,127,144,133;
		setarray .@masterroom[0],295,8;
	}
	else if (strnpcinfo(2) == "payg_cas02") {
		setarray .@guardiantype[0],2,2,2,2,2,2,2,3;
		setarray .@guardianposx[0],237,228,210,57,42,287,264,27;
		setarray .@guardianposy[0],54,72,41,241,241,257,272,20;
		setarray .@masterroom[0],141,149;
	}
	else if (strnpcinfo(2) == "payg_cas03") {
		setarray .@guardiantype[0],2,2,2,2,2,2,2,3;
		setarray .@guardianposx[0],245,269,36,41,39,19,37,268;
		setarray .@guardianposy[0],37,51,39,39,65,276,277,244;
		setarray .@masterroom[0],163,167;
	}
	else if (strnpcinfo(2) == "payg_cas04") {
		setarray .@guardiantype[0],2,2,2,2,2,2,2,3;
		setarray .@guardianposx[0],251,232,231,32,32,35,36,270;
		setarray .@guardianposy[0],212,212,175,287,232,45,17,41;
		setarray .@masterroom[0],151,47;
	}
	else if (strnpcinfo(2) == "payg_cas05") {
		setarray .@guardiantype[0],2,2,2,2,2,2,2,3;
		setarray .@guardianposx[0],19,33,266,266,263,263,250,36;
		setarray .@guardianposy[0],279,260,234,279,37,21,22,36;
		setarray .@masterroom[0],153,137;
	}
	// Prontera (Valkyrie Realms) Castles
	else if (strnpcinfo(2) == "prtg_cas01") {
		setarray .@guardiantype[0],1,1,1,2,2,3,3,3;
		setarray .@guardianposx[0],182,182,153,59,50,184,196,107;
		setarray .@guardianposy[0],62,116,86,28,36,183,189,179;
		setarray .@masterroom[0],15,209;
	}
	else if (strnpcinfo(2) == "prtg_cas02") {
		setarray .@guardiantype[0],3,3,3,1,1,2,2,2;
		setarray .@guardianposx[0],161,153,178,71,49,64,7,75;
		setarray .@guardianposy[0],161,161,44,75,28,186,196,175;
		setarray .@masterroom[0],207,229;
	}
	else if (strnpcinfo(2) == "prtg_cas03") {
		setarray .@guardiantype[0],3,3,3,1,1,2,2,2;
		setarray .@guardianposx[0],191,137,45,50,41,191,179,191;
		setarray .@guardianposy[0],190,190,99,87,87,42,43,72;
		setarray .@masterroom[0],190,130;
	}
	else if (strnpcinfo(2) == "prtg_cas04") {
		setarray .@guardiantype[0],3,3,3,1,1,1,2,2;
		setarray .@guardianposx[0],276,274,246,38,29,33,78,36;
		setarray .@guardianposy[0],14,35,246,240,240,258,48,61;
		setarray .@masterroom[0],275,160;
	}
	else if (strnpcinfo(2) == "prtg_cas05") {
		setarray .@guardiantype[0],3,3,3,1,1,1,2,2;
		setarray .@guardianposx[0],266,287,245,236,251,278,32,44;
		setarray .@guardianposy[0],262,280,250,63,63,253,253,248;
		setarray .@masterroom[0],281,176;
	}
	// Add custom Guild Castles here.
	else {
		end;
	}
	
	mes "[ ޲zH " + .@name$ + " ]";
	if (.@GID == 0) {
		mes "ڦbݧڪDH... i_Ḭ! lHARBa!";
		close;
	}
	if (getcharid(2) != .@GID || strcharinfo(0) != getguildmaster(.@GID)){
		mes "ާA̫¯٧";
		mes "Aڥu@NlHڪDH ^FF0000" + getguildmaster(.@GID) + "^000000 !";
		mes "@HA̦b̧r!";
		mes "֧oǵLzå̻a!";
		close;
	}
	mes "w{ A";
	mes "ڪDH^ff0000" + getguildmaster(.@GID) + "^000000/pj.";
	mes "..";
	mes "оާhJ";
	mes "AڱNۦaA";
	next;
	switch(select("dݯKap:ӷ~oi:꨾m:]m@H: / Ѷ ܮw¾:iJDHж")) {
	case 1:
		mes "[ ޲zH " + .@name$ + " ]";
		mes "{bVAiKap";
		mes " ";
		mes "@ ^0000ff{bӷ~oi׬O " + GetCastleData(strnpcinfo(2),2) + "";
		if (GetCastleData(strnpcinfo(2),4)) {
			mes "@ - bLh@ѤAF " + GetCastleData(strnpcinfo(2),4) + " ";
		}
		mes "@ {bm׬O " + GetCastleData(strnpcinfo(2),3) + "^000000";
		if (GetCastleData(strnpcinfo(2),5)) {
			mes "@ ^0000ff- bLh@ѤAF " + GetCastleData(strnpcinfo(2),5) + " ^000000";
		}
		mes " ";
		mes "i";
		close;
	case 2:
		set .@Economy,GetCastleData(strnpcinfo(2),2);
		if (.@Economy < 6) { set .@eco_invest,5000; }
		else if ((.@Economy >= 6) && (.@Economy <= 10)) { set .@eco_invest,10000; }
		else if ((.@Economy >= 11) && (.@Economy <= 15)) { set .@eco_invest,20000; }
		else if ((.@Economy >= 16) && (.@Economy <= 20)) { set .@eco_invest,35000; }
		else if ((.@Economy >= 21) && (.@Economy <= 25)) { set .@eco_invest,55000; }
		else if ((.@Economy >= 26) && (.@Economy <= 30)) { set .@eco_invest,80000; }
		else if ((.@Economy >= 31) && (.@Economy <= 35)) { set .@eco_invest,110000; }
		else if ((.@Economy >= 36) && (.@Economy <= 40)) { set .@eco_invest,145000; }
		else if ((.@Economy >= 41) && (.@Economy <= 45)) { set .@eco_invest,185000; }
		else if ((.@Economy >= 46) && (.@Economy <= 50)) { set .@eco_invest,230000; }
		else if ((.@Economy >= 51) && (.@Economy <= 55)) { set .@eco_invest,280000; }
		else if ((.@Economy >= 56) && (.@Economy <= 60)) { set .@eco_invest,335000; }
		else if ((.@Economy >= 61) && (.@Economy <= 65)) { set .@eco_invest,395000; }
		else if ((.@Economy >= 66) && (.@Economy <= 70)) { set .@eco_invest,460000; }
		else if ((.@Economy >= 71) && (.@Economy <= 75)) { set .@eco_invest,530000; }
		else if ((.@Economy >= 76) && (.@Economy <= 80)) { set .@eco_invest,605000; }
		else if ((.@Economy >= 81) && (.@Economy <= 85)) { set .@eco_invest,685000; }
		else if ((.@Economy >= 86) && (.@Economy <= 90)) { set .@eco_invest,770000; }
		else if ((.@Economy >= 91) && (.@Economy <= 95)) { set .@eco_invest,860000; }
		else if ((.@Economy >= 96) && (.@Economy <= 100)) { set .@eco_invest,955000; }
		//Quadruple the cost of investing if you've already invested once.
		if (GetCastleData(strnpcinfo(2),4)) {
			set .@eco_invest,.@eco_invest*4;
		}
		mes "[ ޲zH " + .@name$ + " ]";
		mes "ӷ~oiת Abu|̥Ͳ~ƶq|W[AFH۷QܡAण";
		mes " ";
		mes "ӭ覡A@ѥu@ AphI@I A@ѥiH⦸";
		mes " ";
		if (.@Economy == 100) {
			mes "^ff0000ثeӷ~oiץHgO100FAAwgݭnA[JF^000000";
			close;
		}
		if (GetCastleData(strnpcinfo(2),4) == 2) {
			mes "^ff0000iOAwgbѤF⦸AAF^000000.oi׻֤WɡAݵ۴IQlo";
			close;
		}
		if (GetCastleData(strnpcinfo(2),4) == 0) {
			mes "{bݭnBO ^ff0000" + .@eco_invest + "^000000  AаݧAn?";
		}
		else {
			mes "{bAwg@F... ٭nA? ٻݭnl[^ff0000" + .@eco_invest + "^000000 ";
		}
		next;
		switch(select("ӷ~oiק:")) {
		case 1:
			if (Zeny < .@eco_invest) {
				mes "[ ޲zH " + .@name$ + " ]";
				mes "DH AASiHӷ~oi";
				close;
			}
			set zeny,zeny-.@eco_invest;
			SetCastleData strnpcinfo(2),4,GetCastleData(strnpcinfo(2),4)+1;
			mes "[ ޲zH " + .@name$ + "]";
			mes "QaF! ݵۧڭ̩n{ AѪܵoi׷|W";
			close;
		case 2:
			mes "[ ޲zH " + .@name$ + " ]";
			mes "ڱN̷ӧAhJh AOڪDH... ݭnӵ۫ Aڭ̷|oܦn";
			close;
		}
	case 3:
		set .@Defence,GetCastleData(strnpcinfo(2),3);
		if (.@Defence < 6) { set .@def_invest,10000; }
		else if ((.@Defence >= 6) && (.@Defence <= 10)) { set .@def_invest,20000; }
		else if ((.@Defence >= 11) && (.@Defence <= 15)) { set .@def_invest,40000; }
		else if ((.@Defence >= 16) && (.@Defence <= 20)) { set .@def_invest,70000; }
		else if ((.@Defence >= 21) && (.@Defence <= 25)) { set .@def_invest,110000; }
		else if ((.@Defence >= 26) && (.@Defence <= 30)) { set .@def_invest,160000; }
		else if ((.@Defence >= 31) && (.@Defence <= 35)) { set .@def_invest,220000; }
		else if ((.@Defence >= 36) && (.@Defence <= 40)) { set .@def_invest,290000; }
		else if ((.@Defence >= 41) && (.@Defence <= 45)) { set .@def_invest,370000; }
		else if ((.@Defence >= 46) && (.@Defence <= 50)) { set .@def_invest,460000; }
		else if ((.@Defence >= 51) && (.@Defence <= 55)) { set .@def_invest,560000; }
		else if ((.@Defence >= 56) && (.@Defence <= 60)) { set .@def_invest,670000; }
		else if ((.@Defence >= 61) && (.@Defence <= 65)) { set .@def_invest,790000; }
		else if ((.@Defence >= 66) && (.@Defence <= 70)) { set .@def_invest,920000; }
		else if ((.@Defence >= 71) && (.@Defence <= 75)) { set .@def_invest,1060000; }
		else if ((.@Defence >= 76) && (.@Defence <= 80)) { set .@def_invest,1210000; }
		else if ((.@Defence >= 81) && (.@Defence <= 85)) { set .@def_invest,1370000; }
		else if ((.@Defence >= 86) && (.@Defence <= 90)) { set .@def_invest,1540000; }
		else if ((.@Defence >= 91) && (.@Defence <= 95)) { set .@def_invest,1720000; }
		else if ((.@Defence >= 96) && (.@Defence <= 100)) { set .@def_invest,1910000; }
		//Quadruple the cost of investing if you've already invested once.
		if (GetCastleData(strnpcinfo(2),5)) {
			set .@def_invest,.@def_invest*4;
		}
		mes "[ ޲zH " + .@name$ + " ]";
		mes "m{ת A@HMRݪ@[׷|W[ AҼ{쩹᪺Ԫ Ao";
		mes " ";
		mes "ӭ覡A@ѥu@ AphI@I A@ѥiH⦸";
		mes " ";
		if (.@Defense == 100) {
			mes "^ff0000ثemץHgO100FAAwgݭnA[JF^000000";
			close;
		}
		if (GetCastleData(strnpcinfo(2),5) == 2) {
			mes "^ff0000iOAwgbѤF⦸AAF^000000.m׻֤WɡAݵ۴IQlo";
			close;
		}
		if (GetCastleData(strnpcinfo(2),5) == 0) {
			mes "{bݭnBO ^ff0000" + .@def_invest + "^000000  AаݧAn?";
		}
		else {
			mes "{bAwgL@F... ٭nA? ٻݭnl[^ff0000" + .@def_invest + "^000000 ";
		}
		next;
		switch(select("慨m :")) {
		case 1:
			if (Zeny < .@def_invest) {
				mes "[ ޲zH " + .@name$ + " ]";
				mes "DH AASiH꨾m";
				close;
			}
			set zeny,zeny-.@def_invest;
			SetCastleData strnpcinfo(2),5,GetCastleData(strnpcinfo(2),5)+1;
			mes "[ ޲zH " + .@name$ + "]";
			mes "QaF! ݵۧڭ̩n{ AѪܨm׷|W";
			close;
		case 2:
			mes "[ ޲zH " + .@name$ + " ]";
			mes "ڱN̷ӧAhJh AOڪDH... ݭnӵ۫ Aڭ̷|oܦn";
			close;

		}
	case 4:
		mes "[ ޲zH " + .@name$ + " ]";
		mes "аݧAn]m@H? @HYNAڭ̯Kaۦu@";
		mes " пܭn]m@H";
		next;
		for( set .@i, 0; .@i <= 7 ; set .@i, .@i+1 ) {
			if (.@guardiantype[.@i] == 1) { set .@type$,"hL @H"; }
			else if (.@guardiantype[.@i] == 2) { set .@type$,"}b @H"; }
			else { set .@type$,"Mh @H"; }
			if (guardianinfo(strnpcinfo(2),.@i,0)) {
				setarray .@gname$[.@i], .@type$ + " - ]mnF (" + guardianinfo(strnpcinfo(2),.@i,2) + "/" + guardianinfo(strnpcinfo(2),.@i,1) + ")";
			}
			else {
				setarray .@gname$[.@i], .@type$ + " - S]m";
			}
		}
		set .@menu$,.@gname$[0]+":"+.@gname$[1]+":"+.@gname$[2]+":"+.@gname$[3]+":"+.@gname$[4]+":"+.@gname$[5]+":"+.@gname$[6]+":"+.@gname$[7];
		set .@GDnum,select(.@menu$)+9;
		mes "[ ޲zH " + .@name$ + " ]";
		mes "Twn]mwܪ@H? ]mɻݭn 10000 .";
		next;
		switch(select("n]m:")) {
		case 1:
			mes "[ ޲zH " + .@name$ + " ]";
			if (getgdskilllv(.@GID,10002) == 0) {
				mes "DH A]m@HwgQF ApQn]m@H AǷ|u|ޯत ^FF0000s@H^000000 ޯa";
				close;
			}
			if (GetCastleData(strnpcinfo(2),.@GDnum) == 1) {
				mes "DH... @HwgODH]m@HF AA]mF";
				close;
			}

			if (Zeny < 10000) {
				mes "DH AASiH]m@H";
				close;
			}
			set zeny,zeny-10000;
			SetCastleData strnpcinfo(2),.@GDnum,1; // mark as 'installed'
			set .@UseGID,.@GDnum - 10;
			if (.@guardiantype[.@UseGID] == 1) { set .@type,1287; }
			else if (.@guardiantype[.@UseGID] == 2) { set .@type,1285; }
			else { set .@type,1286; }
			guardian strnpcinfo(2),.@guardianposx[.@UseGID],.@guardianposy[.@UseGID],strmobinfo(2,.@type),.@type,"Guardian#"+strnpcinfo(2)+"::OnGuardianDied",.@UseGID;
			mes "]m@HF A{b}lwgFAO@ڭ̯KajڭxF";
			close;
		case 2:
			mes "[ ޲zH " + .@name$ + " ]";
			mes "ڤwgӧAhJF ApIWeΪܡA@wn]m@HAOn";
			close;
	}
	case 5:
		if (GetCastleData(strnpcinfo(2),9) == 1) {
			mes "[ ޲zH " + .@name$ + " ]";
			mes "аݱznѶdԪAȤH?";
			next;
			switch(select("nѶ:")) {
			case 1:
				cutin "kafra_01",2;
				mes "[ d ¾ ]";
				mes "ڰFƶ? pGڦƪܡAбz̧ڡAAڤ@|?";
				next;
				switch(select("Ѷ:")) {
				case 1:
					mes "[ d ¾ ]";
					mes "~򬰱zAȯuOڳ̤j...";
					next;
					cutin "kafra_01",255;
					break;
				case 2:
					mes "[ d ¾ ]";
					mes "ڷ|VOԾĪzAȪ!";
					close2;
					cutin "kafra_01",255;
					end;
				}
			case 2:
				mes "[ ޲zH " + .@name$ + " ]";
				mes "DHAڷQڭӭndU{bod¾A]owgܺɩүaڭ̪AȤF!";
				close;
			}
			disablenpc "d ¾#"+strnpcinfo(2);
			SetCastleData strnpcinfo(2),9,0;
			mes "[ ޲zH " + .@name$ + " ]";
			mes "....";
			mes "d¾wgѶF... LFW|۷QAΥd¾W";
			close;
		}
		else {
			mes "[ ޲zH " + .@name$ + " ]";
			mes "Md`qq AQnbKa̭ AΥd¾ ?";
			mes " ^ff0000QnΪܡAݭn 10000...^000000";
			next;
			switch(select("n:")) {
			case 1:
				mes "[ ޲zH " + .@name$ + " ]";
				if (getgdskilllv(.@GID,10001) == 0) {
					mes "DH Ap٨Sd`qqp AҥH٤නΥd¾ ApQnd`qñq AǷ|u|ޯत ^FF0000Mdԭq^000000ޯa";
					close;
				}
				if (Zeny < 10000) {
					mes "DH AASiHΥd¾";
					close;
				}
				set zeny,zeny-10000;
				enablenpc "d ¾#"+strnpcinfo(2);
				SetCastleData strnpcinfo(2),9,1;
				mes "\Md`qñqFAzΤF@d¾!";
				next;
				cutin "kafra_01",2;
				mes "[ d ¾ ]";
				mes "zn? ڬO`qӪd¾! ڱN|ܺɩүazA!";
				next;
				cutin "kafra_01",255			;
				mes "[ ޲zH " + .@name$ + " ]";
				mes "Ϊd¾N ^FF00001 Ӥ몺ɶ^000000 bA";
				mes "AɶFᥲsñq";
				close;
			case 2:
				mes "[ ޲zH " + .@name$ + " ]";
				mes "ڤwgӧAhJF AL]nFW|۷QA鶱Υd¾W";
				close;
			}
		}
	case 6:
		mes "[ ޲zH " + .@name$ + " ]";
		mes "nڭ̥Ͳ~ynAuQ~ж?";
		mes "ӦaOFڭ̪DHAMݩAa... FA~A䥦HӤJ";
		next;
		mes "[ ޲zH " + .@name$ + " ]";
		mes "DHA_cSbAɶ}ҪܡAoͤiwpɡA";
		mes "|~ΡAqЯSO`NA";
		mes "ҥHFڭ̤|oiAЮXɶӦ~";
		next;
		switch(select("niJDHж:")) {
		case 1:
			mes "[ ޲zH " + .@name$ + " ]";
			mes "ڱN|AAȨ쯵KqD̡AиڨӡA";
			mes "^ӪɭԫUKsYi";
			close2;
			warp strnpcinfo(2),.@masterroom[0],.@masterroom[1];
			end;
		case 2:
			mes "[ ޲zH " + .@name$ + " ]";
			mes "Ͳ~@ѥuͲ@ . . .";
			mes "pSYɦܡAU@NiӤF ҥHFڭ̤u|oiAɶqIɶh";
			close;
		}
	}
}


// Guardian Spawner Template
//============================================================
-	script	Gld_Guard_Template::Gld_Guard_Template	-1,{
// Spawn Guardians in castles
// When adding new castles, ensure that the coordinates coincide
// with the coordinates defined in the Guild Steward template.
OnSpawnGuardians:
	// Define the types of guardians on a per castle basis.
	// 1 - Soldier Guardian; 2 - Archer Guardian; 3 - Knight Guardian
	// Define the x spawn point for each uardian.
	// [0] = 1st guardian's x spawn point.
	// Define the y spawn point for each uardian.
	// [0] = 1st guardian's y spawn point.
	// Aldebaran (Luina) Castles
	if (strnpcinfo(2) == "aldeg_cas01") { 
		setarray .@guardiantype[0],1,2,2,2,2,3,3,3;
		setarray .@guardianposx[0],17,39,38,45,21,218,213,73;
		setarray .@guardianposy[0],218,208,196,228,194,24,24,70;
	}
	else if (strnpcinfo(2) == "aldeg_cas02") {
		setarray .@guardiantype[0],3,3,3,1,1,2,2,2;
		setarray .@guardianposx[0],27,88,117,60,51,21,36,210;
		setarray .@guardianposy[0],184,43,46,202,183,177,183,7;
	}
	else if (strnpcinfo(2) == "aldeg_cas03") {
		setarray .@guardiantype[0],3,3,1,1,1,2,2,2;
		setarray .@guardianposx[0],90,116,86,116,64,212,195,110;
		setarray .@guardianposy[0],112,112,120,76,103,160,151,217;
	}
	else if (strnpcinfo(2) == "aldeg_cas04") {
		setarray .@guardiantype[0],2,2,2,1,1,1,3,3;
		setarray .@guardianposx[0],187,192,148,145,169,198,48,55;
		setarray .@guardianposy[0],100,42,88,209,53,77,72,88;
	}
	else if (strnpcinfo(2) == "aldeg_cas05") {
		setarray .@guardiantype[0],2,2,1,1,3,3,3,3;
		setarray .@guardianposx[0],51,188,157,157,27,145,156,41;
		setarray .@guardianposy[0],202,79,192,74,221,78,73,112;
	}
	// Geffen (Britoniah) Castles
	else if (strnpcinfo(2) == "gefg_cas01") {
		setarray .@guardiantype[0],1,1,1,2,2,3,3,3;
		setarray .@guardianposx[0],67,184,62,36,50,50,189,200;
		setarray .@guardianposy[0],179,20,41,186,186,67,41,167;
	}
	else if (strnpcinfo(2) == "gefg_cas02") {
		setarray .@guardiantype[0],1,1,1,2,2,3,3,3;
		setarray .@guardianposx[0],64,56,166,35,20,19,166,159;
		setarray .@guardianposy[0],168,41,25,148,150,41,42,188;
	}
	else if (strnpcinfo(2) == "gefg_cas03") {
		setarray .@guardiantype[0],2,2,1,1,1,3,3,3;
		setarray .@guardianposx[0],48,113,48,157,243,157,234,238;
		setarray .@guardianposy[0],176,214,207,62,41,45,25,160;
	}
	else if (strnpcinfo(2) == "gefg_cas04") {
		setarray .@guardiantype[0],2,2,1,1,1,3,3,3;
		setarray .@guardianposx[0],53,31,49,29,147,57,160,148;
		setarray .@guardianposy[0],191,178,220,46,65,46,50,189;
	}
	else if (strnpcinfo(2) == "gefg_cas05") {
		setarray .@guardiantype[0],2,2,1,1,1,3,3,3;
		setarray .@guardianposx[0],45,71,72,66,177,66,177,193;
		setarray .@guardianposy[0],149,163,142,47,50,17,35,166;
	}
	// Payon (Baulder) Castles
	else if (strnpcinfo(2) == "payg_cas01") {
		setarray .@guardiantype[0],2,2,2,2,2,2,2,3;
		setarray .@guardianposx[0],229,225,222,99,65,36,51,138;
		setarray .@guardianposy[0],92,80,111,45,31,127,144,133;
	}
	else if (strnpcinfo(2) == "payg_cas02") {
		setarray .@guardiantype[0],2,2,2,2,2,2,2,3;
		setarray .@guardianposx[0],237,228,210,57,42,287,264,27;
		setarray .@guardianposy[0],54,72,41,241,241,257,272,20;
	}
	else if (strnpcinfo(2) == "payg_cas03") {
		setarray .@guardiantype[0],2,2,2,2,2,2,2,3;
		setarray .@guardianposx[0],245,269,36,41,39,19,37,268;
		setarray .@guardianposy[0],37,51,39,39,65,276,277,244;
	}
	else if (strnpcinfo(2) == "payg_cas04") {
		setarray .@guardiantype[0],2,2,2,2,2,2,2,3;
		setarray .@guardianposx[0],251,232,231,32,32,35,36,270;
		setarray .@guardianposy[0],212,212,175,287,232,45,17,41;
	}
	else if (strnpcinfo(2) == "payg_cas05") {
		setarray .@guardiantype[0],2,2,2,2,2,2,2,3;
		setarray .@guardianposx[0],19,33,266,266,263,263,250,36;
		setarray .@guardianposy[0],279,260,234,279,37,21,22,36;
	}
	// Prontera (Valkyrie Realms) Castles
	else if (strnpcinfo(2) == "prtg_cas01") {
		setarray .@guardiantype[0],1,1,1,2,2,3,3,3;
		setarray .@guardianposx[0],182,182,153,59,50,184,196,107;
		setarray .@guardianposy[0],62,116,86,28,36,183,189,179;
	}
	else if (strnpcinfo(2) == "prtg_cas02") {
		setarray .@guardiantype[0],3,3,3,1,1,2,2,2;
		setarray .@guardianposx[0],161,153,178,71,49,64,7,75;
		setarray .@guardianposy[0],161,161,44,75,28,186,196,175;
	}
	else if (strnpcinfo(2) == "prtg_cas03") {
		setarray .@guardiantype[0],3,3,3,1,1,2,2,2;
		setarray .@guardianposx[0],191,137,45,50,41,191,179,191;
		setarray .@guardianposy[0],190,190,99,87,87,42,43,72;
	}
	else if (strnpcinfo(2) == "prtg_cas04") {
		setarray .@guardiantype[0],3,3,3,1,1,1,2,2;
		setarray .@guardianposx[0],276,274,246,38,29,33,78,36;
		setarray .@guardianposy[0],14,35,246,240,240,258,48,61;
	}
	else if (strnpcinfo(2) == "prtg_cas05") {
		setarray .@guardiantype[0],3,3,3,1,1,1,2,2;
		setarray .@guardianposx[0],266,287,245,236,251,278,32,44;
		setarray .@guardianposy[0],262,280,250,63,63,253,253,248;
	}
	// Add custom Guild Castles here.
	else {
		end;
	}

	// Kill all existing guardians before spawning new ones.
	// This should prevent duplicating Guardians when char Server disconnects.
	killmonster strnpcinfo(2),strnpcinfo(0)+"::OnGuardianDied";

	for( set .@i, 0; .@i <= 7 ; set .@i, .@i+1 ) {
		set .@UseGID,.@i + 10;
		if (.@guardiantype[.@i] == 1) { set .@type,1287; }
		else if (.@guardiantype[.@i] == 2) { set .@type,1285; }
		else { set .@type,1286; }
		if (GetCastleData(strnpcinfo(2),.@UseGID)) {
			guardian strnpcinfo(2),.@guardianposx[.@i],.@guardianposy[.@i],strmobinfo(2,.@type),.@type,"Guardian#"+strnpcinfo(2)+"::OnGuardianDied",.@i;
		}
	}
	end;

OnGuardianDied:
	end;
}

// Kafra Template
//============================================================
-	script	Gld_Kafra_Template::Gld_Kafra_Template	-1,{
	// Store the Guild ID of castle occupant.
	set .@GID, GetCastleData(strnpcinfo(2),1);

	if (compare(strnpcinfo(2),"aldeg")) {
		setarray .@destination$[0],"㺸","aldebaran";
		setarray .@coordinates[0],132,103;
	}
	else if (compare(strnpcinfo(2),"gefg")) {
		setarray .@destination$[0],"N","geffen";
		setarray .@coordinates[0],120,39;
	}
	else if (compare(strnpcinfo(2),"payg")) {
		setarray .@destination$[0],"","payon";
		setarray .@coordinates[0],70,100;
	}
	else if (compare(strnpcinfo(2),"prtg")) {
		setarray .@destination$[0],"w","prontera";
		setarray .@coordinates[0],116,72;
	}
	// Add custom Guild Castles here.
	else {
		end;
	}

	cutin "kafra_01",2;
	if (getcharid(2) == .@GID) {
		mes "[d ¾]";
		mes "w{ ^ff0000" + getguildname(.@GID) + "^000000 |";
		mes "dԪA(q) AûbU쨭䬰zAȪ";
		next;
		switch(select("ϥέܮwA:ϥΪŶʪA:ϥΤA:")) {
		//switch(select("ϥέܮwA:Use Guild Storage:ϥΪŶʪA:ϥΤA:")) {
		case 1:
			if (basicskillcheck() && getskilllv(1) < 6) {
				mes "[d ¾]";
				mes "藍_ QnϥέܮwAȪܡAǪ̪򥻧ޯ൥ŭnF 6ťHW.";
			}
			else {
				callfunc("F_CheckKafCode");	//check your storage password, if set
	 	 		openstorage;
			}
			break;
		/*	// |ܮwAӥxWA
		case 2:
		 	// DxtΡAOEA}lɴN|ܮwAڵLkL >:( 
		 	// (@n)
			if(guildopenstorage(0) == 1){
				mes "[d ¾]";
				mes "I'm sorry but another guild member is using the guild storage";
				mes "right now.  Please wait until that person is finished.";
				close2;
				cutin "", 255;
				end;
			}
			cutin "", 255;
			close;			
		case 3:
		*/
		case 2:
			mes "[d ¾]";
			mes "лAQnha.";
			next;
			switch(select(.@destination$ + " -> 200 z:")) {
			case 1:
				if (Zeny < 200) {
					mes "[d ¾]";
		 			mes "Uȡ@zB. ЦAT{";
				}
				else {
					set zeny,zeny-200;
					set kf_10_pit,kf_10_pit+2;
					cutin "kafra_01",255;
					warp .@destination$[1],.@coordinates[0],.@coordinates[1];
					end;
				}
				break;
			case 2:
				break;
			}
			break;
		//case 4:
		case 3:
			if(baseClass != Job_Merchant){
				mes "[d ¾]";
				mes "ܩpAOӤHMKKBNvMΪA";
			}
			else if(checkcart() == 1){
				mes "[d ¾]";
				mes "AwgLF";
			}
			else {
				mes "[d ¾]"		;
				mes "ϥζOάO 800. znϥζ?";
				next;
				switch(select("ϥ.:.")) {
				case 1:
					if (Zeny < 800) {
						mes "[d ¾]";
						mes "Uȡ@zB. ϥζOO 800.";
					}
					else {
						close2;
						cutin "kafra_01",255;
						set kf_10_pit,kf_10_pit+8;
						set zeny,zeny-800;
						setcart;
						end;
					}
					break;
				case 2:
					break;
				}
			}		
			break;
		//case 5:
		case 4:
			mes "[d ¾]";
			mes "ڭ̥dԤqAȬOFUȭ̩ߩMKϥ. ڭ̷|ɧڭ̳̤jVOnAȻPY檺~޲z.";
			mes "±z̨ϥΧڭ̥dԤqA.";
		}
	}
	else {
		mes "[d ¾]";
		mes "ڤwñqM^ff0000" + getguildname(.@GID) + "^000000|A AШϥΧڭ̨䥦a誺d¾ ApKBqШ";
	}
	close2;
	cutin "kafra_01",255;
	end;
}

// Guild Dungeon Switch Template
//============================================================
-	script	Gld_Dun_Template::Gld_Dun_Template	-1,{
	// Store the Guild ID of castle occupant.
	set .@GID, GetCastleData(strnpcinfo(2),1);

	// Pick what Dungeon I should warp too, and where in that dungeon.
	if (compare(strnpcinfo(2),"aldeg")) {
		set .@destination$,"gld_dun02";
		if (compare(strnpcinfo(2),"cas01")) setarray .@coordinates[0],32,122;
		else if (compare(strnpcinfo(2),"cas02")) setarray .@coordinates[0],79,32;
		else if (compare(strnpcinfo(2),"cas03")) setarray .@coordinates[0],165,38;
		else if (compare(strnpcinfo(2),"cas04")) setarray .@coordinates[0],160,148;
		else if (compare(strnpcinfo(2),"cas05")) setarray .@coordinates[0],103,169;
	}
	else if (compare(strnpcinfo(2),"gefg")) {
		set .@destination$,"gld_dun04";
		if (compare(strnpcinfo(2),"cas01")) setarray .@coordinates[0],39,258;
		else if (compare(strnpcinfo(2),"cas02")) setarray .@coordinates[0],125,270;
		else if (compare(strnpcinfo(2),"cas03")) setarray .@coordinates[0],268,251;
		else if (compare(strnpcinfo(2),"cas04")) setarray .@coordinates[0],268,108;
		else if (compare(strnpcinfo(2),"cas05")) setarray .@coordinates[0],230,35;
	}
	else if (compare(strnpcinfo(2),"payg")) {
		set .@destination$,"gld_dun01";
		if (compare(strnpcinfo(2),"cas01")) setarray .@coordinates[0],186,165;
		else if (compare(strnpcinfo(2),"cas02")) setarray .@coordinates[0],54,165;
		else if (compare(strnpcinfo(2),"cas03")) setarray .@coordinates[0],54,39;
		else if (compare(strnpcinfo(2),"cas04")) setarray .@coordinates[0],186,39;
		else if (compare(strnpcinfo(2),"cas05")) setarray .@coordinates[0],223,202;
	}
	else if (compare(strnpcinfo(2),"prtg")) {
		set .@destination$,"gld_dun03";
		if (compare(strnpcinfo(2),"cas01")) setarray .@coordinates[0],28,251;
		else if (compare(strnpcinfo(2),"cas02")) setarray .@coordinates[0],164,268;
		else if (compare(strnpcinfo(2),"cas03")) setarray .@coordinates[0],164,179;
		else if (compare(strnpcinfo(2),"cas04")) setarray .@coordinates[0],268,203;
		else if (compare(strnpcinfo(2),"cas05")) setarray .@coordinates[0],199,28;
	}
	// Add custom Guild Castles here.
	else {
		end;
	}

	if (.@GID == 0) {
		mes "[ TGn ]";
		mes " ' ui𪺥DHA~౵'";
		close;
	}
	else {
		mes "[ TGn ]";
		mes " ' ui𪺥DHA~౵'";
		next;
		mes " ";
		mes "pԱ AAnUԶ?";
		next;
		switch(select("ڭn:ڤn")) {
		case 1:
			if ((getcharid(2) == .@GID)) {
				warp .@destination$,.@coordinates[0],.@coordinates[1];
				end;
			}
			else {
				mes " ";
				mes " Nothing happened.";
				close;
			}
		case 2:
			close;
		}
	}
}

// Treasure Room Protection Template
//============================================================
-	script	Gld_Trea_Protect::Gld_Trea_Protect	-1,{
//OnTouch2:
OnTouch:
	// Store the Guild ID of castle occupant.
	set .@GID, GetCastleData(strnpcinfo(2),1);

	if (strcharinfo(0) != getguildmaster(.@GID)) { 
		if (compare(strnpcinfo(2),"aldeg")) {
			warp "aldebaran",132,103;
		}
		else if (compare(strnpcinfo(2),"gefg")) {
			warp "geffen",120,39;
		}
		else if (compare(strnpcinfo(2),"payg")) {
			warp "payon",70,100;
		}
		else if (compare(strnpcinfo(2),"prtg")) {
			warp "prontera",116,72;
		}
		// Add custom Guild Castles here.
		else {
			end;
		}
	}
	end;
}

// Treasure Room Spawn Template
//============================================================
-	script	Gld_Trea_Spawn::Gld_Trea_Spawn	-1,{
	end;

OnClock0001:
	// Do nothing if this script is the template.
	if (strnpcinfo(1) == "Gld_Trea_Spawn") end;
	
	// If there is no owner, do nothing.
	if (!GetCastleData(strnpcinfo(2),1)) end;

	// Is there Economy in this castle?
	set .@Treasure,GetCastleData(strnpcinfo(2),2)/5+4;

	// Set information
	if (strnpcinfo(2) == "aldeg_cas01") { 
		set .@treasurebox,1324;
		setarray .@treasurex[0],115,122,115,122,116,117,118,119,120,121,121,121,121,121,121,120,119,118,117,116,116,116,116,116;
		setarray .@treasurey[0],226,226,219,219,225,225,225,225,225,225,224,223,222,221,220,220,220,220,220,220,221,222,223,224;
	}
	else if (strnpcinfo(2) == "aldeg_cas02") { 
		set .@treasurebox,1326;
		setarray .@treasurex[0],134,135,135,134,132,133,134,135,136,137,137,137,137,137,137,136,135,134,133,132,132,132,132,132;
		setarray .@treasurey[0],231,231,230,230,233,233,233,233,233,233,232,231,230,229,228,228,228,228,228,228,229,230,231,232;
	}
	else if (strnpcinfo(2) == "aldeg_cas03") { 
		set .@treasurebox,1328;
		setarray .@treasurex[0],224,225,225,224,222,223,224,225,226,227,227,227,227,227,227,226,225,224,223,222,222,222,222,222;
		setarray .@treasurey[0],269,269,268,268,271,271,271,271,271,271,270,269,268,267,266,266,266,266,266,266,267,268,269,270;
	}
	else if (strnpcinfo(2) == "aldeg_cas04") { 
		set .@treasurebox,1330;
		setarray .@treasurex[0],84,85,85,84,82,83,84,85,86,87,87,87,87,87,87,86,85,84,83,82,82,82,82,82;
		setarray .@treasurey[0],13,13,12,12,15,15,15,15,15,15,14,13,12,11,10,10,10,10,10,10,11,12,13,14;
	}
	else if (strnpcinfo(2) == "aldeg_cas05") { 
		set .@treasurebox,1332;
		setarray .@treasurex[0],61,62,62,61,59,60,61,62,63,64,64,64,64,64,64,63,62,61,60,59,59,59,59,59;
		setarray .@treasurey[0],12,12,11,11,14,14,14,14,14,14,13,12,11,10,9,9,9,9,9,9,10,11,12,13;
	}
	else if (strnpcinfo(2) == "gefg_cas01") { 
		set .@treasurebox,1334;
		setarray .@treasurex[0],153,154,154,153,151,152,153,154,155,156,156,156,156,156,156,155,154,153,152,151,151,151,151,151;
		setarray .@treasurey[0],113,113,112,112,115,115,115,115,115,115,114,113,112,111,110,110,110,110,110,110,111,112,113,114;
	}
	else if (strnpcinfo(2) == "gefg_cas02") { 
		set .@treasurebox,1336;
		setarray .@treasurex[0],139,140,140,139,137,138,139,140,141,142,142,142,142,142,142,141,140,139,138,137,137,137,137,137;
		setarray .@treasurey[0],115,115,114,114,117,117,117,117,117,117,116,115,114,113,112,112,112,112,112,112,113,114,115,116;
	}
	else if (strnpcinfo(2) == "gefg_cas03") { 
		set .@treasurebox,1338;
		setarray .@treasurex[0],269,270,270,269,267,268,269,270,271,272,272,272,272,272,272,271,270,269,268,267,267,267,267,267;
		setarray .@treasurey[0],291,291,290,290,293,293,293,293,293,293,292,291,290,289,288,288,288,288,288,288,289,290,291,292;
	}
	else if (strnpcinfo(2) == "gefg_cas04") { 
		set .@treasurebox,1340;
		setarray .@treasurex[0],115,116,116,115,113,114,115,116,117,118,118,118,118,118,118,117,116,115,114,113,113,113,113,113;
		setarray .@treasurey[0],119,119,118,118,121,121,121,121,121,121,120,119,118,117,116,116,116,116,116,116,117,118,119,120;
	}
	else if (strnpcinfo(2) == "gefg_cas05") { 
		set .@treasurebox,1342;
		setarray .@treasurex[0],143,144,144,143,141,142,143,144,145,146,146,146,146,146,146,145,144,143,142,141,141,141,141,141;
		setarray .@treasurey[0],110,110,109,109,112,112,112,112,112,112,111,110,109,108,107,107,107,107,107,107,108,109,110,111;
	}
	else if (strnpcinfo(2) == "payg_cas01") { 
		set .@treasurebox,1344;
		setarray .@treasurex[0],289,292,292,289,288,289,290,291,292,293,293,293,293,293,293,292,291,290,289,288,288,288,288,288;
		setarray .@treasurey[0],10,10,7,7,11,11,11,11,11,11,10,9,8,7,6,6,6,6,6,6,7,8,9,10;
	}
	else if (strnpcinfo(2) == "payg_cas02") { 
		set .@treasurebox,1346;
		setarray .@treasurex[0],143,146,146,143,142,143,144,145,146,147,147,147,147,147,147,146,145,144,143,142,142,142,142,142;
		setarray .@treasurey[0],146,146,143,143,147,147,147,147,147,147,146,145,144,143,142,142,142,142,142,142,143,144,145,146;
	}
	else if (strnpcinfo(2) == "payg_cas03") { 
		set .@treasurebox,1348;
		setarray .@treasurex[0],158,159,159,158,156,157,158,159,160,161,161,161,161,161,161,160,159,158,157,156,156,156,156,156;
		setarray .@treasurey[0],169,169,168,168,171,171,171,171,171,171,170,169,168,167,166,166,166,166,166,166,167,168,169,170;
	}
	else if (strnpcinfo(2) == "payg_cas04") { 
		set .@treasurebox,1350;
		setarray .@treasurex[0],146,147,147,146,144,145,146,147,148,149,149,149,149,149,149,148,147,146,145,144,144,144,144,144;
		setarray .@treasurey[0],48,48,47,47,50,50,50,50,50,50,49,48,47,46,45,45,45,45,45,45,46,47,48,49;
	}
	else if (strnpcinfo(2) == "payg_cas05") { 
		set .@treasurebox,1352;
		setarray .@treasurex[0],155,158,158,155,154,155,156,157,158,159,159,159,159,159,159,158,157,156,155,154,154,154,154,154;
		setarray .@treasurey[0],134,134,131,131,135,135,135,135,135,135,134,133,132,131,130,130,130,130,130,130,131,132,133,134;
	}
	else if (strnpcinfo(2) == "prtg_cas01") { 
		set .@treasurebox,1354;
		setarray .@treasurex[0],10,11,11,10,8,9,10,11,12,13,13,13,13,13,13,12,11,10,9,8,8,8,8,8;
		setarray .@treasurey[0],209,209,208,208,211,211,211,211,211,211,210,209,208,207,206,206,206,206,206,206,207,208,209,210;
	}
	else if (strnpcinfo(2) == "prtg_cas02") { 
		set .@treasurebox,1356;
		setarray .@treasurex[0],201,202,202,201,199,200,201,202,203,204,204,204,204,204,204,203,202,201,200,199,199,199,199,199;
		setarray .@treasurey[0],228,228,227,227,230,230,230,230,230,230,229,228,227,226,225,225,225,225,225,225,226,227,228,229;
	}
	else if (strnpcinfo(2) == "prtg_cas03") { 
		set .@treasurebox,1358;
		setarray .@treasurex[0],187,188,188,187,185,186,187,188,189,190,190,190,190,190,190,189,188,187,186,185,185,185,185,185;
		setarray .@treasurey[0],132,132,131,131,134,134,134,134,134,134,133,132,131,130,129,129,129,129,129,129,130,131,132,133;
	}
	else if (strnpcinfo(2) == "prtg_cas04") { 
		set .@treasurebox,1360;
		setarray .@treasurex[0],269,270,270,269,267,268,269,270,271,272,272,272,272,272,272,271,270,269,268,267,267,267,267,267;
		setarray .@treasurey[0],162,162,161,161,164,164,164,164,164,164,163,162,161,160,159,159,159,159,159,159,160,161,162,163;
	}
	else if (strnpcinfo(2) == "prtg_cas05") { 
		set .@treasurebox,1362;
		setarray .@treasurex[0],275,276,276,275,273,274,275,276,277,278,278,278,278,278,278,277,276,275,274,273,273,273,273,273;
		setarray .@treasurey[0],178,178,177,177,180,180,180,180,180,180,179,178,177,176,175,175,175,175,175,175,176,177,178,179;
	}
	// Add custom Guild Castles here.
	else {
		end;
	}

	// Apply investment to Eco. and Def. Only happens if there were investments made.
	// Permanent Development can only happen once per day.
	if (GetCastleData(strnpcinfo(2),4)) {
		set .@Economy,GetCastleData(strnpcinfo(2),2);
		SetCastleData strnpcinfo(2),2,.@Economy + GetCastleData(strnpcinfo(2),4) + (rand(2) && getgdskilllv(.@GID,10014));
		if (GetCastleData(strnpcinfo(2),2) > 100) SetCastleData strnpcinfo(2),2,100;
	}
	if (GetCastleData(strnpcinfo(2),5)) {
		set .@Defence,GetCastleData(strnpcinfo(2),3);
		SetCastleData strnpcinfo(2),3,.@Defence + GetCastleData(strnpcinfo(2),5);
		if (GetCastleData(strnpcinfo(2),3) > 100) SetCastleData strnpcinfo(2),3,100;
	}
	// Reset daily investment limits.
	setcastledata strnpcinfo(2),4,0;
	setcastledata strnpcinfo(2),5,0;

	// Spawn boxes in proper order.
	for (set .@i,0; .@i <= .@Treasure ; set .@i,.@i+1) {
		// set treasure box ID
		set .@boxid, .@treasurebox + (.@i+2) % 2;
		set .@box,1 << .@i;
		// Spawn or do not spawn chests if one already exists.
		if ((getd("$@"+strnpcinfo(2)+"_treasure") & .@box) == 0) {
			monster strnpcinfo(2),.@treasurex[.@i],.@treasurey[.@i],"_cl",.@boxid,1,"Treasure#"+strnpcinfo(2)+"::OnTreasureDied"+.@i;
			setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") | .@box;
		}
	}
	end;

// Individual "You killed a chest" events to ensure proper spawning at the change of day.
OnTreasureDied0:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~1;
	end;
OnTreasureDied1:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~2;
	end;
OnTreasureDied2:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~4;
	end;
OnTreasureDied3:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~8;
	end;
OnTreasureDied4:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~16;
	end;
OnTreasureDied5:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~32;
	end;
OnTreasureDied6:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~64;
	end;
OnTreasureDied7:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~128;
	end;
OnTreasureDied8:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~256;
	end;
OnTreasureDied9:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~512;
	end;
OnTreasureDied10:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~1024;
	end;
OnTreasureDied11:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~2048;
	end;
OnTreasureDied12:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~4096;
	end;
OnTreasureDied13:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~8192;
	end;
OnTreasureDied14:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~16384;
	end;
OnTreasureDied15:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~32768;
	end;
OnTreasureDied16:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~65536;
	end;
OnTreasureDied17:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~131072;
	end;
OnTreasureDied18:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~262144;
	end;
OnTreasureDied19:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~524288;
	end;
OnTreasureDied20:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~1048576;
	end;
OnTreasureDied21:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~2097152;
	end;
OnTreasureDied22:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~4194304;
	end;
OnTreasureDied23:
	setd "$@"+strnpcinfo(2)+"_treasure",getd("$@"+strnpcinfo(2)+"_treasure") & ~8388608;
	end;
}