All pastes #170045 Raw Edit

Military Hardware

public text v1 · immutable
·published 2006-09-14 10:18 UTC
rendered paste body
/*
   ============================================

   Military Hardware.  A team based progressive
           assault script for SA:MP 0.1

           By Alex "Y_Less" Cole (2006)

    Code parts based on "Da Nang Thang" by Cam
                and "CNG" by Kyeman

   ============================================

================================================================================

                                IMPORTANT!
                               ------------

                                READ FIRST!
                               ------------

This script supports a settings file system.  To use, create a file
in samp/scriptfiles called "milhdset.txt".  There are 3 settings you can set
in there, round time, capture time and military start point (from 0 - 3)

Example settings file:

captime = 10
rndtime = 1200
strtpnt = 0

captime and rndtime are in seconds.

================================================================================

Story:

A group of militant fighters have stolen a piece of military
technology and hidden it high up on a mountain.  Unfortunately
they have AA defences in place so parachuting on is impossible,
so the only way to get there is fighting up from the base.

A SWAT team have been sent in via the beach to retake the kit.

SWAT objectives:

1) Capture the resupply and tech center in a sawmill.
2) Gain a foothold at the base of the mountain.
3) Capture the log cabin being used as a staging post.
3) Get to the top of the mountain to retake the kit.

Millitant objectives:

1) Stop the SWAT capturing the technology and other checkpoints.

*/

#include <a_samp>
#include <core>
#include <float>
#include <file>

static gTeam[MAX_PLAYERS];
new gPlayerClass[MAX_PLAYERS];

#define TEAM_SWAT 1
#define TEAM_MILL 2
#define TEAM_SWAT_COLOR 0x33AA33AA
#define TEAM_MILL_COLOR 0x3333AAAA
#define OBJECTIVE_COLOR 0xAA3333FF
#define CHECK_CAP_LOOPS 10 // Time to capture in SECONDS
//#define GAME_LENGTH 1200 // Seconds (900 = 15 mins)

new gPrefs[3] = {1200, 10, 0}; // Round time, Capture seconds, Start point// gRoundTime
//new gPrefs[1] = 10; // gCapLoops
//new gPrefs[2] = 0; // gAssaultPos
new gPlayerCheck = -1;
new gTimer, gGameTimer; //, gGameStart;
new gMinsGone = 0;
new gTimerLoops = 0;
new gObjectiveReached = 0;
//new File:hFile;// = fopen("coords.txt", io_readwrite);


// Define all the spawn and check points

new Float:gTargets[4][3] =
{
	{-2046.0, -2391.0, 30.0},
	{-2394.0, -2205.0, 33.0},
	{-2816.0, -1521.0, 140.0},
	{-2318.0, -1627.0, 483.0}
};

new Float:gAllSpawnPoints[5][10][4] =
{
	{
	    {-2789.0, -2324.0, 5.0, -88.0},
	    {-2777.0, -2500.0, 4.0, -67.0},
	    {-2727.0, -2717.0, 2.0, -21.0},
	    {-2551.0, -2803.0, 4.0, 12.0},
	    {-2356.0, -2846.0, 1.0, 3.0},
	    {-2291.0, -2843.0, 2.0, -74.0},
	    {-2081.0, -2840.0, 3.0, 0.0},
	    {-1800.0, -2726.0, 2.0, -243.0},
	    {-1898.0, -2780.0, 5.0, -265.0},
	    {-2640.0, -2187.0, 3.0, -208.0}
	},
	{
	    {-1994.0, -2381.0, 31.0, -29.0},
	    {-2100.0, -2516.0, 31.0, 50.0},
	    {-2189.0, -2510.0, 32.0, -33.0},
	    {-2301.0, -2360.0, 36.0, 79.0},
	    {-2193.0, -2256.0, 31.0, -213.0},
	    {-2088.0, -2344.0, 31.0, -220.0},
	    {-2144.0, -2444.0, 31.0, -216.0},
	    {-2108.0, -2401.0, 32.0, -130.0},
	    {-2100.0, -2230.0, 31.0, -206.0},
	    {-2232.0, -2556.0, 32.0, 56.0}
	},
	{
	    {-2094.0, -1874.0, 111.0, -217.0},
	    {-2445.0, -2134.0, 60.0, -142.0},
	    {-2490.0, -2275.0, 30.0, -55.0},
	    {-2330.0, -2209.0, 33.0, -120.0},
	    {-2193.0, -2125.0, 51.0, -181.0},
	    {-2412.0, -2171.0, 33.0, -96.0},
	    {-2402.0, -2268.0, 16.0, -68.0},
	    {-2282.0, -2162.0, 37.0, -135.0},
	    {-2417.0, -2229.0, 34.0, -68.0},
	    {-2352.0, -2153.0, 48.0, -149.0}
	},
	{
	    {-2730.0, -1851.0, 149.0, -151.0},
	    {-2877.0, -1520.0, 138.0, -101.0},
	    {-2771.0, -1253.0, 125.0, -196.0},
	    {-2675.0, -1363.0, 251.0, -243.0},
	    {-2773.0, -1906.0, 118.0, -117.0},
	    {-2820.0, -1452.0, 136.0, -176.0},
	    {-2681.0, -1231.0, 161.0, -216.0},
	    {-2698.0, -1725.0, 254.0, -203.0},
	    {-2770.0, -1636.0, 142.0, -183.0},
	    {-2720.0, -1888.0, 136.0, -170.0}
	},
	{
	    {-2230.0, -1743.0, 481.0, 38.0},
	    {-2647.0, -1465.0, 312.0, 62.0},
	    {-2517.0, -1818.0, 380.0, 41.0},
	    {-2560.0, -1478.0, 361.0, -159.0},
	    {-2281.0, -1545.0, 433.0, -31.0},
	    {-2407.0, -1695.0, 456.0, 80.0},
	    {-2360.0, -1851.0, 418.0, -36.0},
	    {-2432.0, -1620.0, 527.0, -196.0},
	    {-2279.0, -1507.0, 407.0, 47.0},
	    {-2401.0, -1859.0, 408.0, 12.0}
	}
};

main()
{
	print("\n ============================================\n");//\n");
	print(" Military Hardware.  A team based progressive\n");
	print("         assault script for SA:MP 0.1\n");//\n");
	print("         By Alex \"Y_Less\" Cole (2006)\n");//\n");
	//print("  Code parts based on \"Da Nang Thang\" by Cam\n");
	//print("              and \"CNG\" by Kyeman\n\n");
	print(" ============================================\n");
}

public OnGameModeInit()
{
	//print("GameModeInit()");
	SetGameModeText("Military Hardware");

	// Swat classes (team 0)
	AddPlayerClass(285, -2371.5, -1918.0, 0.0, 0.0, 4, 0, 23, 50, 28, 200);
	AddPlayerClass(285, -2371.5, -1918.0, 0.0, 0.0, 4, 0, 23, 50, 29, 200);
	AddPlayerClass(285, -2371.5, -1918.0, 0.0, 0.0, 3, 0, 22, 30, 34, 20);
	AddPlayerClass(285, -2371.5, -1918.0, 0.0, 0.0, 3, 0, 22, 50, 27, 25);
	AddPlayerClass(285, -2371.5, -1918.0, 0.0, 0.0, 3, 0, 39, 5, 31, 70);

	// Militant classes (team 1)
	AddPlayerClass(157, -2371.5, -1918.0, 0.0, 0.0, 6, 0, 22, 50, 28, 200);
	AddPlayerClass(161, -2371.5, -1918.0, 0.0, 0.0, 7, 0, 22, 50, 29, 200);
	AddPlayerClass(198, -2371.5, -1918.0, 0.0, 0.0, 5, 0, 22, 30, 33, 20);
	AddPlayerClass(201, -2371.5, -1918.0, 0.0, 0.0, 2, 0, 24, 20, 25, 25);
	AddPlayerClass(202, -2371.5, -1918.0, 0.0, 0.0, 42, 0, 39, 5, 30, 70);

	// Hydra
	AddStaticVehicle(520, -2318.0, -1627.0, 483.0, 0.0, -1, -1);

	// Vehicles
	AddStaticVehicle(539, -2355.0, -2850.0, 1.0, 3.0, -1, -1);
	AddStaticVehicle(422, -1926.0, -2738.0, 14.0, -240.0, -1, -1);
	AddStaticVehicle(483, -2544.0, -2173.0, 30.0, -6.0, -1, -1);
	AddStaticVehicle(468, -2414.0, -2194.0, 33.0, -97.0, -1, -1);
	AddStaticVehicle(525, -2219.0, -2147.0, 44.0, -235.0, -1, -1);
	AddStaticVehicle(499, -2113.0, -2241.0, 30.0, -44.0, -1, -1);
	AddStaticVehicle(507, -2089.0, -2241.0, 31.0, -226.0, -1, -1);
	AddStaticVehicle(515, -1968.0, -2434.0, 30.0, -222.0, -1, -1);
	AddStaticVehicle(500, -2096.0, -2542.0, 30.0, -47.0, 0, 0); // Black Mesa (Half Life :p)
	AddStaticVehicle(466, -2125.0, -2503.0, 30.0, -126.0, -1, -1);
	AddStaticVehicle(458, -2234.0, -2571.0, 31.0, 67.0, -1, -1);
	AddStaticVehicle(522, -2208.0, -2508.0, 30.0, -40.0, -1, -1);
	AddStaticVehicle(517, -2151.7, -2441.0, 30.0, -216.0, -1, -1);
	AddStaticVehicle(481, -2550.0, -2674.0, 8.0, 48.0, -1, -1);
	AddStaticVehicle(588, -2222.0, -2767.0, 36.0, -260.0, -1, -1);
	AddStaticVehicle(573, -1735.0, -1916.0, 98.0, 89.0, -1, -1);
	AddStaticVehicle(470, -1912.0, -1671.0, 23.0, -90.0, -1, -1);
	AddStaticVehicle(486, -1852.0, -1614.0, 21.0, -209.0, -1, -1);
	AddStaticVehicle(478, -2206.0, -2254.0, 30.0, -129.0, -1, -1);
	AddStaticVehicle(510, -2381.0, -2204.0, 33.0, -24.0, -1, -1);
	AddStaticVehicle(510, -2383.0, -2211.0, 33.0, -32.0, -1, -1);
	AddStaticVehicle(495, -1996.0, -1560.0, 85.0, -188.0, -1, -1);
	AddStaticVehicle(468, -2215.0, -1918.0, 237.0, -85.0, -1, -1);
	AddStaticVehicle(471, -2686.0, -1726.0, 253.0, 26.0, -1, -1);
	AddStaticVehicle(422, -2816.0, -1536.0, 139.0, -85.0, -1, -1);
	AddStaticVehicle(426, -2784.0, -1525.0, 139.0, -177.0, -1, -1);
	AddStaticVehicle(404, -2522.0, -1125.0, 178.0, -208.0, -1, -1);
	AddStaticVehicle(471, -2330.0, -1091.0, 94.0, 217.0, -1, -1);
	AddStaticVehicle(468, -2667.0, -1548.0, 305.0, 45.0, -1, -1);
	AddStaticVehicle(510, -2528.0, -1704.0, 401.0, -161.0, -1, -1);
	AddStaticVehicle(489, -2353.0, -1468.0, 391.0, -268.0, -1, -1);
	AddStaticVehicle(587, -2345.0, -1823.0, 433.0, -89.0, -1, -1);
	AddStaticVehicle(580, -2252.0, -1712.0, 480.0, 40.0, -1, -1);
	AddStaticVehicle(413, -2334.0, -1579.0, 483.0, -128.0, -1, -1);
	AddStaticVehicle(531, -2849.0, -1548.0, 139.0, -54.0, -1, -1);
	AddStaticVehicle(414, -2615.0, -2156.0, 68.0, 69.0, -1, -1);

	/*if (fexist("coords.txt"))
	{
		fremove("coords.txt");
	}*/
	//hFile = fopen("coords.txt", io_readwrite);

	//gGameTimer = SetTimer("TimeUp", gPrefs[0], 0);
	//gGameStart = GetTickCount();
	ReadPrefs();
	new mintime;
	if (gPrefs[0] > 300)
	{
		mintime = (gPrefs[0] - ((gPrefs[0] / 300) * 300)) * 1000;
	}
	else // Assume they have a round longer than 1 min.
	{
	    mintime = (gPrefs[0] - ((gPrefs[0] / 60) * 60)) * 1000;
	}
	if (mintime == 0)
	{
	    mintime = 60000; // If they have an exact time, set it to the 1 min default.
	}
	gGameTimer = SetTimer("TimeGone", mintime, 0); // Start checking
	//TimeGone();
	return 1;
}

public ReadPrefs()
{
	new prefnm[3][8] =
	{
	    "rndtime",
	    "captime",
	    "strtpnt"
	    //"svtm"
	};
	new tmpval;
	for (new i = 0; i < 3; i++)
	{
		tmpval = GetStatsValue(prefnm[i], "milhdset.txt");
		//tmpval = strval("1");
		if (tmpval != -1)
		{
			gPrefs[i] = tmpval;
		}
		//printf("gPrefs[%d] = %d", i, gPrefs[i]);
		//new tmpstr[256];
		//format(tmpstr, 256, "%s = %d", prefnm[i], gPrefs[i]);
	}
	if (gPrefs[2] > 3)
	{
		gPrefs[2] = 0;
		//print("gPrefs[2] now = 0");
	}
}

public GetStatsValue(const paramname[], const statname[])
{
	if (fexist(statname))
	{
		new File:file = fopen(statname, io_read);
		new tmpbuf[256];
		new splitbuf[4][256];
		while (fread(file, tmpbuf, sizeof (tmpbuf)))
		{
	   		split(tmpbuf, splitbuf, ' ');
			if (!strcmp(paramname, splitbuf[0]))
			{
			    fclose(file);
			    if (splitbuf[1][0] == '=')
			    {
			        if (splitbuf[2][0])
			        {
						return strval(splitbuf[2]);
					}
					else
					{
					    return -1;
					}
				}
				else
				{
			        if (splitbuf[1][0])
			        {
						return strval(splitbuf[1]);
					}
					else
					{
					    return -1;
					}
				}
	 		}
		}
		fclose(file);
	}
	return -1;
}

public split(const strsrc[], strdest[][], delimiter)
{
	new i, li;
	new aNum;
	new len;
	while (i <= strlen(strsrc))
	{
	    if ((strsrc[i] == delimiter) || (i == strlen(strsrc)))
		{
			len = strmid(strdest[aNum], strsrc, li, i, 128);
			strdest[aNum][len] = 0;
			li = i + 1;
			aNum++;
		}
		i++;
	}
	return 1;
}

public TimeGone()
{
	//KillTimer(gGameTimer);
	if (gObjectiveReached == 0)
	{
		//new timestr2[256];
	    //format(timestr2, 256, "gPrefs[0]: %d", gPrefs[0]);
       	//SendClientMessageToAll(TEAM_SWAT_COLOR, timestr2);
		new timestr[256];
		if (gPrefs[0] > 300)
		{
		    gPrefs[0] -= 60;
		    gMinsGone++;
		    if (gMinsGone == 5)
		    {
		        format(timestr, 256, "~w~%d minutes remaining.", (gPrefs[0] / 60));
		    	GameTextForAll(timestr, 5000, 3);
		    	gMinsGone = 0;
		    }
	    	gGameTimer = SetTimer("TimeGone", 60000, 0);
		}
		else if (gPrefs[0] > 120)
		{
			gPrefs[0] -= 60;
			format(timestr, 256, "~w~%d minutes remaining.", (gPrefs[0] / 60));
			GameTextForAll(timestr, 5000, 3);
			gGameTimer = SetTimer("TimeGone", 60000, 0);
		}
		else if (gPrefs[0] == 120)
		{
		    gPrefs[0] -= 60;
		    GameTextForAll("~w~1 minute remaining.", 5000, 3);
			gGameTimer = SetTimer("TimeGone", 10000, 0);
		}
		else if (gPrefs[0] > 20)
		{
		    gPrefs[0] -= 10;
			gGameTimer = SetTimer("TimeGone", 10000, 0);
		}
		else if (gPrefs[0] == 20)
		{
		    gPrefs[0] -= 10;
		    GameTextForAll("~w~10", 1200, 3);
			gGameTimer = SetTimer("TimeGone", 1000, 0);
		}
		else if (gPrefs[0] > 1)
		{
		    gPrefs[0] -= 1;
			format(timestr, 256, "~w~%d", gPrefs[0]);
			GameTextForAll(timestr, 1200, 3);
			gGameTimer = SetTimer("TimeGone", 1000, 0);
		}
		else
		{
		    TimeUp();
		}
	}
}

public TimeUp()
{
	for (new i = 0; i < MAX_PLAYERS; i++)
	{
		if (gTeam[i] == TEAM_SWAT)
		{
			GameTextForPlayer(i, "~g~You failed to retrieve the Equipment, you have lost.", 5000, 3);
		}
		else if (gTeam[i] == TEAM_MILL)
		{
			GameTextForPlayer(i, "~b~You successfully defended the plane, you have won.", 5000, 3);
		}
	}
	SetTimer("ExitTheGameMode", 5000, 0);
	ResetTimer();
	KillCheck();
}

public SetPlayerTeamFromClass(playerid, classid)
{
	// Set their team number based on the class they selected.
	//if (gTeam[playerid] == 0)
	//{
	if (classid < 5)
	{
		gTeam[playerid] = TEAM_SWAT;
	}
	else
	{
		gTeam[playerid] = TEAM_MILL;
	}
	/*}
	else
	// Keep the teams (don't know if this will work).
	{
		if ((classid == 0) && (gTeam[playerid] != TEAM_SWAT))
		{
			classid = 1;
		}
		else if ((classid == 1) && (gTeam[playerid] != TEAM_MILL))
		{
		    classid = 0;
		}
	}*/
}

public SetPlayerToTeamColor(playerid)
{
	if (gTeam[playerid] == TEAM_SWAT)
	{
		SetPlayerColor(playerid, TEAM_SWAT_COLOR);
	}
	else if (gTeam[playerid] == TEAM_MILL)
	{
	    SetPlayerColor(playerid, TEAM_MILL_COLOR);
	}
	//printf(" SetPlayerToTeamColor(%d, %d)", playerid, GetPlayerColor(playerid));
}

public OnPlayerRequestClass(playerid, classid)
{
	SetPlayerTeamFromClass(playerid, classid);
	SetupPlayerForClassSelection(playerid);
    gPlayerClass[playerid] = classid;
   	if (classid < 5)
	{
		GameTextForPlayer(playerid, "~w~Military Hardware~n~~g~Attack", 500000, 6);
	}
	else
	{
		GameTextForPlayer(playerid, "~w~Military Hardware~n~~b~Defend", 500000, 6);
	}
	return 1;
}

public SetupPlayerForClassSelection(playerid)
{
	SetPlayerInterior(playerid, 6);
	SetPlayerPos(playerid, 2336.0, -1066.0, 1049.0);
	SetPlayerFacingAngle(playerid, 43);
	SetPlayerCameraPos(playerid, 2333.0, -1063.0, 1050.0);
	SetPlayerCameraLookAt(playerid, 2336.0, -1066.0, 1049.0);
}

public ExitTheGameMode()
{
    GameModeExit();
}

public OnGameModeExit()
{
    KillCheck();
	return 1;
}

public KillCheck()
{
	for (new i = 0; i < MAX_PLAYERS; i++)
	{
	    DisablePlayerCheckpoint(i);
 	}
 	gObjectiveReached = 1;
	KillTimer(gGameTimer);
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
  	if (gObjectiveReached)
	{
		return 1;
	}
	else
	{
		if (newstate > 1)
		{
		    if (playerid == gPlayerCheck)
		    {
				ResetTimer();
			}
			return 1;
		}
		else if ((gPlayerCheck == -1) && (IsPlayerInCheckpoint(playerid)))
		{
			gPlayerCheck = playerid;
			gTimer = SetTimer("CheckCheckpoint", 1000, gPrefs[1]);
			FormatTimeText(gPrefs[1]);
		}
	}
	return 1;
}

public OnPlayerConnect(playerid)
{
	//printf("OnPlayerConnect(%d)", playerid);
	GameTextForPlayer(playerid, "Military Hardware", 2500, 5);
	return 1;
}

public OnPlayerDisconnect(playerid)
{
	if (playerid == gPlayerCheck)
	{
		ResetTimer();
	}
	gTeam[playerid] = 0;
	return 1;
}

public OnPlayerSpawn(playerid)
{
	//printf("OnPlayerSpawn(%d)", playerid);
	SetPlayerInterior(playerid,0);
	SetPlayerToTeamColor(playerid);
	SetPlayerRandomSpawn(playerid);
	NewCheckpointText(playerid);
	GivePlayerMoney(playerid, 1000);
	SetPlayerWorldBounds(playerid, -1694.0, -3049.0, -887.0, -2949.0);
	SetVehicleParamsForPlayer(1, playerid, 0, 1);
	DisablePlayerCheckpoint(playerid);
	if (gTeam[playerid] == TEAM_SWAT)
	{
        SetPlayerCheckpoint(playerid, gTargets[gPrefs[2]][0], gTargets[gPrefs[2]][1], gTargets[gPrefs[2]][2], 5.0); // -2394.0, -2205.0, 33.0, 5.0);
	}
	//GetPlayerPos()
	return 1;
}

public ResetTimer()
{
	KillTimer(gTimer);
	gPlayerCheck = -1;
	gTimerLoops = 0;
}

public ChangeCheckpoint()
{
	if (gTimer)
	{
		ResetTimer();
	}
    if (gPrefs[2] < 3)
    {
	    gPrefs[2]++;
		SetTimer("CheckpointText", 5000, 0);
		for (new i = 0; i < MAX_PLAYERS; i++)
		{
		    DisablePlayerCheckpoint(i);
			if (gTeam[i] == TEAM_SWAT)
			{
				//DisablePlayerCheckpoint(i);
				SetPlayerCheckpoint(i, gTargets[gPrefs[2]][0], gTargets[gPrefs[2]][1], gTargets[gPrefs[2]][2], 5.0);
			}
	 	}
 	}
 	else
 	{
		for (new i = 0; i < MAX_PLAYERS; i++)
		{
		    DisablePlayerCheckpoint(i);
	 	}
	 	SetTimer("ExitTheGameMode", 5000, 0);
	 	//gObjectiveReached = 1;
	 	KillCheck();
	 	ResetTimer();
 	}
	return 0;
}

public SetPlayerRandomSpawn(playerid)
{
	//printf("SetPlayerRandomSpawn(%d)", playerid);
	new pos = gTeam[playerid] + gPrefs[2] - 1;
	new rand = random(10); // Choose a random number within the array of random spawns
 	SetPlayerPos(playerid, gAllSpawnPoints[pos][rand][0], gAllSpawnPoints[pos][rand][1], gAllSpawnPoints[pos][rand][2]); // Warp the player
	return 1;
}

public OnPlayerDeath(playerid, killerid, reason)
{
	if (playerid == gPlayerCheck)
	{
		ResetTimer();
	}
	new deathstr[256];
	new whodiedname[MAX_PLAYER_NAME+1];
	new whokilledname[MAX_PLAYER_NAME+1];
	new deathreasonstr[256];
	GetPlayerName(playerid, whodiedname, MAX_PLAYER_NAME);
	GetWeaponName(reason, deathreasonstr, 255);
	if (killerid == INVALID_PLAYER_ID)
	{
	    if (strlen(deathreasonstr))
		{
        	format(deathstr, 256, "%s died (%s)", whodiedname, deathreasonstr);
		}
		else
		{
		    format(deathstr, 256, "%s died", whodiedname);
		}
        SendClientMessageToAll(OBJECTIVE_COLOR, deathstr);
	}
	else
	{
	    GetPlayerName(killerid, whokilledname, MAX_PLAYER_NAME);
        if (gTeam[killerid] != gTeam[playerid])
		{
	    	// Valid kill
	    	if (strlen(deathreasonstr))
			{
	        	format(deathstr, 256, "%s was killed by %s (%s)", whodiedname, whokilledname, deathreasonstr);
			}
			else
			{
			    format(deathstr, 256, "%s was killed by %s", whodiedname, whokilledname);
			}
			SendClientMessageToAll(OBJECTIVE_COLOR, deathstr);
			SetPlayerScore(killerid, GetPlayerScore(killerid) + 1);
     	}
		else
		{
		    // Team kill
		    format(deathstr, 256, "%s killed team-mate %s (%s)", whokilledname, whodiedname, deathreasonstr);
        	SendClientMessageToAll(OBJECTIVE_COLOR, deathstr);
		}
	}
 	return 1;
}

/*public OnPlayerCommandText(playerid, cmdtext[])
{
    if (IsPlayerAdmin(playerid))
	{
		if (strcmp(cmdtext, "/inctarget", true)==0)
		{
		    print("Entered /inctarget");
			ChangeCheckpoint();
		    CheckpointText();
		    return 1;
		}
	}
		else if (strcmp(cmdtext, "/gc", true)==0)
		{
		    print("Entered /gc");
		    new Float:x, Float:y, Float:z;
		    GetPlayerPos(playerid, x, y, z);
		    new coordsstring[256];
		    //new File:hFile = fopen("coords.txt", io_readwrite);
		    //new readstr[flength(hFile)];
		    //fread(hFile, readstr, flength(hFile), false);
		    format(coordsstring, 256, "\nAddStaticVehicle(0, %.1f, %.1f, %.1f, 93.0, -1, -1);\n", x, y, z);
		    //fwrite(hFile, coordsstring);
		    for (new i = 0; i < 256; i++)
		    {
				fputchar(hFile, coordsstring[i], true);
			}
		    //fclose(hFile);
		    //fwrite(hFile, "hi");
		    return 1;
		}
		else if (strcmp(cmdtext, "/kill", true)==0)
		{
			SetPlayerHealth(playerid, 0.0);
		}
	//}
	//else
	//{
	    //printf ("Player %d entered: %s.", playerid, cmdtext);
	//}
	return 0;
}*/

public OnPlayerEnterCheckpoint(playerid)
{
  	if (gObjectiveReached)
	{
		return 1;
	}
	if ((gPlayerCheck == -1) && (!IsPlayerInAnyVehicle(playerid)))
	{
		gPlayerCheck = playerid;
       	gTimer = SetTimer("CheckCheckpoint", 1000, gPrefs[1]);
       	FormatTimeText(gPrefs[1]);
	}
	return 1;
}

public CheckCheckpoint()
{
	if (IsPlayerInCheckpoint(gPlayerCheck) && !IsPlayerInAnyVehicle(gPlayerCheck))
	{
	
	    gTimerLoops++;
	    if (gTimerLoops == gPrefs[1])
	    {
			CaptureText();
	        ChangeCheckpoint();
		}
		else
		{
		    new timeremain = gPrefs[1] - gTimerLoops;
			FormatTimeText(timeremain);
		}
	}
	else
	{
	    ResetTimer();
	}
}

public CheckpointText()
{
	for (new i = 0; i < MAX_PLAYERS; i++)
	{
		NewCheckpointText(i);
	}
}

public NewCheckpointText(n)
{
    if (gTeam[n] == TEAM_SWAT)
    {
        switch (gPrefs[2])
        {
	        case 0:
	        {
		    	GameTextForPlayer(n, "~g~Capture the ~r~Logging Works ~g~being used as a headquaters.", 5000, 3);
			}
	        case 1:
	        {
		    	GameTextForPlayer(n, "~g~Gain a foothold at the ~r~base of the mountain.", 5000, 3);
			}
	        case 2:
	        {
		    	GameTextForPlayer(n, "~g~Capture the ~r~log cabin ~g~being used as a staging post.", 5000, 3);
			}
	        case 3:
	        {
		    	GameTextForPlayer(n, "~g~Retake the piece of ~r~Military Hardware.", 5000, 3);
			}
		}
    }
    else if (gTeam[n] == TEAM_MILL)
    {
        switch (gPrefs[2])
        {
	        case 0:
	        {
		    	GameTextForPlayer(n, "~b~Defend the Headquaters in the Logging Works.", 5000, 3);
			}
	        case 1:
	        {
		    	GameTextForPlayer(n, "~b~Stop the SWAT gaining foothold at the base of the mountain.", 5000, 3);
			}
	        case 2:
	        {
		    	GameTextForPlayer(n, "~b~Defend the log cabin staging post.", 5000, 3);
			}
	        case 3:
	        {
		    	GameTextForPlayer(n, "~b~Defend the plane at ALL costs.", 5000, 3);
			}
		}
    }
}

public CaptureText()
{
	for (new i = 0; i < MAX_PLAYERS; i++)
	{
	    if (i == gPlayerCheck)
	    {
	        switch (gPrefs[2])
	        {
		        case 0:
		        {
			    	GameTextForPlayer(i, "~g~You captured the Logging Works HQ.", 5000, 3);
				}
		        case 1:
		        {
			    	GameTextForPlayer(i, "~g~You secured the base of the mountain.", 5000, 3);
				}
		        case 2:
		        {
			    	GameTextForPlayer(i, "~g~You captured the staging post.", 5000, 3);
				}
		        case 3:
		        {
			    	GameTextForPlayer(i, "~g~Congratulations!  You retrieved the plane.~n~You have won.", 5000, 3);
				}
			}
			SetPlayerScore(i, GetPlayerScore(i) + 10);
	    }
	    else if (gTeam[i] == TEAM_SWAT)
	    {
	        switch (gPrefs[2])
	        {
		        case 0:
		        {
			    	GameTextForPlayer(i, "~g~Logging Works captured.", 5000, 3);
				}
		        case 1:
		        {
			    	GameTextForPlayer(i, "~g~Foothold established.", 5000, 3);
				}
		        case 2:
		        {
			    	GameTextForPlayer(i, "~g~Staging post secured.", 5000, 3);
				}
		        case 3:
		        {
			    	GameTextForPlayer(i, "~g~Hydra retrieved.~n~You have won.", 5000, 3);
				}
			}
	    }
	    else if (gTeam[i] == TEAM_MILL)
	    {
	        switch (gPrefs[2])
	        {
		        case 0:
		        {
			    	GameTextForPlayer(i, "~b~Our headquaters have been captured.", 5000, 3);
				}
		        case 1:
		        {
			    	GameTextForPlayer(i, "~b~They're coming up the mountain.", 5000, 3);
				}
		        case 2:
		        {
			    	GameTextForPlayer(i, "~b~The cabin is lost.", 5000, 3);
				}
		        case 3:
		        {
			    	GameTextForPlayer(i, "~b~Hydra retrieved.~n~You have lost.", 5000, 3);
				}
			}
	    }
	}
}

public FormatTimeText(n)
{
	new numstring[3][256];
	format(numstring[1], 256, "~g~Protect the capture!~n~Time Remaining: %d", n);
	format(numstring[2], 256, "~b~Stop the capture!~n~Time Remaining: %d", n);
	format(numstring[0], 256, "~g~You are in the capture zone!~n~Time Remaining: %d", n);
	for (new i = 0; i < MAX_PLAYERS; i++)
	{
	    if (i == gPlayerCheck)
	    {
		    GameTextForPlayer(i, numstring[0], 1200, 3);
		}
		else if (gTeam[i])
		{
			GameTextForPlayer(i, numstring[gTeam[i]], 1200, 3);
		}
	}
}

public OnPlayerLeaveCheckpoint(playerid)
{
	if (playerid == gPlayerCheck)
	{
		ResetTimer();
	}
	return 1;
}