All pastes #952225 Raw Edit

Mine

public text v1 · immutable
#952225 ·published 2008-03-21 23:53 UTC
rendered paste body
#include <a_samp>
#include <Dini>
#include <dutils>

#define COLOR_YELLOW 0xFFFF00AA
#pragma unused TimerDST // make it shut up saying that TimerDST is unused.
#define TooFast 90
#define TooSlow 115

new File:DSchool;


/*Format: X,Y,Z,CheckpointSize*/

new Float:CPDSchoolData[24][4] =
{
{-2047.2,-83.0,34.8,3.0}, // DT1 and 24
{-2026.6925,-70.1228,34.8783,3.0}, // DT2
{-2004.7513,189.6104,27.2453,3.0}, // DT3
{-2005.5742,445.2907,34.7222,3.0}, // DT4
{-2004.9156,657.1252,41.4480,3.0}, // DT5
{-2003.5272,958.6751,45.0033,3.0}, // DT6
{-2002.3400,1074.9663,55.2773,3.0}, // DT7
{-2160.8247,1070.2000,55.2843,3.0},// DT8
{-2166.7864,1047.6621,55.3587,3.0},// DT9
{-2106.8022,1051.5979,55.2844,3.0}, // DT10
{-2015.2802,1051.7932,55.2764,3.0}, // DT11
{-2006.7701,1022.1216,54.4400,3.0}, // DT12
{-2009.5132,932.4048,45.0042,3.0},// DT13
{-2008.8276,749.4720,44.9973,3.0}, // DT14
{-2008.6039,657.2002,41.4607,3.0}, // DT15
{-2007.3783,557.6398,34.7220,3.0}, // DT16
{-2009.1946,291.6661,33.8823,3.0}, // DT17
{-2009.2443,148.1573,27.2452,3.0}, // DT18
{-2009.5765,78.9214,27.2453,3.0}, // DT19
{-2009.7845,34.7367,32.5174,3.0}, // DT20
{-2009.8560,-55.1156,34.8721,3.0}, // DT21
{-2033.1410,-68.0971,34.8788,3.0}, // DT22
{-2042.7212,-69.9372,35.0068,3.0}, // DT23
{-2047.2,-83.0,34.8,3.0}  // DT1 and 24
};

// You can make up some checkpoints of your own!
// I've coded everything else here!
//
// This starts and ends at the SF Driving School.

new TimerCD,TimerDSTime;
new TimerDST;
new PID;
new DriverTakingTest;
new DSCP[MAX_PLAYERS];




public OnFilterScriptInit()


{
	print("\n----------------------------------");
	print(" Driving School system made by Allan!!");
	print(" Coded into a Filterscript By DragSta!!");
	print("----------------------------------\n");


DriverTakingTest=-1;

	if(!fopen("DSchool",io_read))
	{
		print("\r\n\r\nError: No driving school data found. Creating new data file.");
		DSchool=fopen("DSchool",io_readwrite);
	}
	else
	{
		print("\r\n\r\nDriving School data found. Now loading data...");
		DSchool=fopen("DSchool",io_readwrite);
	}
	fclose(DSchool);
	return 1;
}



public OnPlayerConnect(playerid)
{
    SendClientMessage(playerid, COLOR_YELLOW, "This server uses Allans Driving School Filterscript!");
	new PName[MAX_PLAYER_NAME];
	GetPlayerName(playerid,PName,sizeof(PName));
	DSchool=fopen("DSchool",io_readwrite);
	if(strcmp(dini_Get("DSchool",PName),"Y",false)==0)
	{
	    if(strlen(dini_Get("DSchool",PName))==1) // seems streams with no data also run through this part.
	    {
	    	fclose(DSchool);
		}
		else // If there is no data present,
		{
		    Dschool_No(playerid); // Make some!
		}
	}
	else if(strcmp(dini_Get("DSchool",PName),"N",false)==0)
	{
	    fclose(DSchool);
	}
	else if(strcmp(dini_Get("DSchool",PName),"D",false)==0)
	{
	    fclose(DSchool);
	}
	else
	{
		Dschool_No(playerid);
	}
	return 1;
}


public OnGameModeExit()
{
	return 1;
}



public OnPlayerCommandText(playerid, cmdtext[])
{
new string[256];
	new cmd[256];
	new tmp[256];
	new idx;
	//=======================================
	// Debug commands for the Licence tests.
	//=======================================

/*	if (strcmp(cmdtext, "/dschool-y", true)==0)
	{
		Dschool_Yes(playerid);
		SendClientMessage(playerid, 0xFF000000, "Your new licence status is: Valid Licence.");
		return 1;
	}
	if (strcmp(cmdtext, "/dschool-n", true)==0)
	{
		Dschool_No(playerid);
		SendClientMessage(playerid, 0xFF000000, "Your new licence status is: No Licence.");
		return 1;
	}
	if (strcmp(cmdtext, "/dschool-d", true)==0)
	{
		Dschool_Dis(playerid);
		SendClientMessage(playerid, 0xFF000000, "Your new licence status is: Disqualified.");
		return 1;
	}*/

	//=======================================
	// Licence Checker.
	//=======================================

	if(strcmp(cmd,"/licence",true)==0)
	{
		new tracedID;
		new tracedIDName[MAX_PLAYER_NAME];

		tmp = strtok(cmdtext, idx);
		if(strlen(tmp)==0)
		{
			SendClientMessage(playerid, 0xFF000000, "USAGE: /licence (playerid)");
			return 1;
		}
		tracedID = strval(tmp);

//      if(Checks for whether or not the player can use this command)
//		{
			if(tracedID!=INVALID_PLAYER_ID)
			{
				if(IsPlayerConnected(tracedID))
				{
					GetPlayerName(tracedID, tracedIDName, sizeof(tracedIDName));
					DSchool=fopen("DSchool",io_readwrite);
					if(strcmp(dini_Get("DSchool",tracedIDName),"Y",true)==0)
					{
						format(string, sizeof(string), "%s (ID:%d) has a valid drivers licence.",tracedIDName,tracedID);
						printf("%s (ID:%d) has been licence checked. Status: Clean licence.",tracedIDName,tracedID);
						SendClientMessage(playerid,0xFF000000,string);
						fclose(DSchool);
						return 1;
					}
					else if(strcmp(dini_Get("DSchool",tracedIDName),"N",true)==0)
					{
						format(string, sizeof(string), "%s (ID:%d) doesn't carry a drivers licence.",tracedIDName,tracedID);
						SendClientMessage(playerid,0xFF000000,string);
						SendClientMessage(playerid,0xFF000000,"COA: Jail them, or send them to driving school.");
						printf("%s (ID:%d) has been licence checked. Status: No licence.",tracedIDName,tracedID);
						fclose(DSchool);
						return 1;
					}
					else if(strcmp(dini_Get("DSchool",tracedIDName),"D",true)==0)
					{
						format(string, sizeof(string), "%s (ID:%d) has been disqualified from driving.",tracedIDName,tracedID);
						SendClientMessage(playerid,0xFF000000,string);
						SendClientMessage(playerid,0xFF000000,"COA: Jail them, at reasonable cost.");
						printf("%s (ID:%d) has been licence checked. Status: Disqualified licence.",tracedIDName,tracedID);
						fclose(DSchool);
						return 1;
					}
					else
					{
						SendClientMessage(playerid,0xFF000000,"Error: Unable to establish licence status.");
						fclose(DSchool);
						return 1;
					}
				}
				else
				{
					SendClientMessage(playerid,0xFF000000,"That player is not in the server.");
				}
			}
			else
			{
			    SendClientMessage(playerid,0xFF000000,"You have specified an invalid Player ID.");
			}
//		}
//		else
//		{
//			SendClientMessage(playerid,0xFFFFFF00,"SERVER: Your Error Message Here");
//		}
		return 1;
	}

	//=======================================
	// Suspend a Licence.
	//=======================================

	if(strcmp(cmd,"/l-suspend",true)==0)
	{
		new tracedID;
		new tracedIDName[MAX_PLAYER_NAME];
		new PName[MAX_PLAYER_NAME];

		tmp = strtok(cmdtext, idx);
		if(strlen(tmp)==0)
		{
			SendClientMessage(playerid, 0xFF000000, "USAGE: /l-suspend (playerid)");
			return 1;
		}
		tracedID = strval(tmp);

//      if(Checks for whether or not the player can use this command)
//		{
			if(tracedID!=INVALID_PLAYER_ID)
			{
				if(IsPlayerConnected(tracedID))
				{
					GetPlayerName(tracedID, tracedIDName, sizeof(tracedIDName));
					GetPlayerName(playerid, PName, sizeof(PName));
					DSchool=fopen("DSchool",io_readwrite);
					if(strcmp(dini_Get("DSchool",tracedIDName),"Y",true)==0)
					{
						format(string, sizeof(string), "%s (ID:%d) has had their licence suspended.",tracedIDName,tracedID);
						printf("%s (ID:%d) has been licence suspended.",tracedIDName,tracedID);
						SendClientMessage(playerid,0xFF000000,string);
						format(string, sizeof(string), "%s (ID:%d) has had their licence suspended by %s (ID:%d).",tracedIDName,tracedID,PName,playerid);
						SendClientMessageToAll(0xFF800000,string);
						Dschool_Dis(tracedID);
						fclose(DSchool);
						return 1;
					}
					else if(strcmp(dini_Get("DSchool",tracedIDName),"N",true)==0)
					{
						format(string, sizeof(string), "%s (ID:%d) have a licence to suspend!",tracedIDName,tracedID);
						SendClientMessage(playerid,0xFF000000,string);
						printf("%s (ID:%d) is being licence suspended, but doesn't have a licence.",tracedIDName,tracedID);
						fclose(DSchool);
						return 1;
					}
					else if(strcmp(dini_Get("DSchool",tracedIDName),"D",true)==0)
					{
						format(string, sizeof(string), "%s (ID:%d) is already disqualified from driving.",tracedIDName,tracedID);
						SendClientMessage(playerid,0xFF000000,string);
						printf("%s (ID:%d) is being licence suspended, but the licence is already suspended.",tracedIDName,tracedID);
						fclose(DSchool);
						return 1;
					}
					else
					{
						SendClientMessage(playerid,0xFF000000,"Error: Unable to establish licence status.");
						fclose(DSchool);
						return 1;
					}
				}
				else
				{
					SendClientMessage(playerid,0xFF000000,"That player is not in the server.");
				}
			}
			else
			{
			    SendClientMessage(playerid,0xFF000000,"You have specified an invalid Player ID.");
			}
//		}
//		else
//		{
//			SendClientMessage(playerid,0xFFFFFF00,"SERVER: Your Error Message Here");
//		}
		return 1;
	}

	//=======================================
	// Renew a Licence.
	//=======================================

	if(strcmp(cmd,"/l-renew",true)==0)
	{
		new tracedID;
		new tracedIDName[MAX_PLAYER_NAME];
		new PName[MAX_PLAYER_NAME];

		tmp = strtok(cmdtext, idx);
		if(strlen(tmp)==0)
		{
			SendClientMessage(playerid, 0xFF000000, "USAGE: /l-renew (playerid)");
			return 1;
		}
		tracedID = strval(tmp);

//      if(Checks for whether or not the player can use this command)
//		{
			if(tracedID!=INVALID_PLAYER_ID)
			{
				if(IsPlayerConnected(tracedID))
				{
					GetPlayerName(tracedID, tracedIDName, sizeof(tracedIDName));
					GetPlayerName(playerid, PName, sizeof(PName));
					DSchool=fopen("DSchool",io_readwrite);
					if(strcmp(dini_Get("DSchool",tracedIDName),"D",true)==0)
					{
						format(string, sizeof(string), "%s (ID:%d) has had their licence renewed.",tracedIDName,tracedID);
						SendClientMessage(playerid,0xFF000000,string);
						printf("%s (ID:%d) is being licence suspended, but the licence is already suspended.",tracedIDName,tracedID);
						format(string, sizeof(string), "%s (ID:%d) has had their licence suspended by %s (ID:%d).",tracedIDName,tracedID,PName,playerid);
						SendClientMessageToAll(0xFF800000,string);
						Dschool_Yes(tracedID);
						fclose(DSchool);
						return 1;
					}
					else
					{
						SendClientMessage(playerid,0xFF000000,"Error: Unable to establish licence status.");
						fclose(DSchool);
						return 1;
					}
				}
				else
				{
					SendClientMessage(playerid,0xFF000000,"That player is not in the server.");
				}
			}
			else
			{
			    SendClientMessage(playerid,0xFF000000,"You have specified an invalid Player ID.");
			}
//		}
//		else
//		{
//			SendClientMessage(playerid,0xFFFFFF00,"SERVER: Your Error Message Here");
//		}
		return 1;
	}

	//=======================================
	// Go to Driving School.
	//=======================================

      if (strcmp(cmdtext, "/dschool", true)==0)
   {
      new tracedIDName[MAX_PLAYER_NAME];
      new strn[255];
        if(DriverTakingTest==-1)
        {
           if(GetPlayerMoney(playerid)>=500)
           {
              GetPlayerName(playerid,tracedIDName,sizeof(tracedIDName));
                  if(strcmp(dini_Get("DSchool",tracedIDName),"Y",true)==0)
                  {
                      SendClientMessage(playerid, 0xFF000000, "Error: You already have a valid licence!");
                      return 1;
              }
              DriverTakingTest=(playerid);
              GivePlayerMoney(playerid,-500);
               SetPlayerCheckpoint(playerid,CPDSchoolData[0][0],CPDSchoolData[0][1],CPDSchoolData[0][2],CPDSchoolData[0][3]);
               DSCP[playerid]=0;
               SetPlayerPos(playerid,-2077.3,-81.4,34.8);
               SendClientMessage(playerid, 0xFF000000, "You are now on the Driving School program. Drive safe, yet speedy.");
               return 1;
           }
           else
           {
               SendClientMessage(playerid, 0xFF000000, "Error: Insufficient funds to take the test.");
               return 1;
           }
        }
        else
        {
           GetPlayerName(DriverTakingTest,tracedIDName,sizeof(tracedIDName));
           format(strn, sizeof(strn), "%s(ID:%d) is currently taking the Driving School Test. Try again later.",tracedIDName,DriverTakingTest);
              SendClientMessage(playerid, 0xFF000000, strn);
           return 1;
        }
     }
     else
     {
         SendClientMessage(playerid,0xFFFF00AA,"Cannot teleport: You're in Jail!");
         return 1;
     }
	return 0;
}


public Dschool_Yes(playerid)
{
    new PName[MAX_PLAYER_NAME];

    GetPlayerName(playerid,PName,sizeof(PName));
    DSchool=fopen("DSchool",io_readwrite);
	dini_Set("DSchool",PName,"Y");
	fclose(DSchool);
 	return 1;
}

public Dschool_No(playerid)
{
    new PName[MAX_PLAYER_NAME];

    GetPlayerName(playerid,PName,sizeof(PName));
    DSchool=fopen("DSchool",io_readwrite);
	dini_Set("DSchool",PName,"N");
	fclose(DSchool);
	return 1;
}

public Dschool_Dis(playerid)
{
    new PName[MAX_PLAYER_NAME];

    GetPlayerName(playerid,PName,sizeof(PName));
    DSchool=fopen("DSchool",io_readwrite);
    dini_Set("DSchool",PName,"D");
    fclose(DSchool);
	return 1;
}

public QuitSchool(playerid) // Use for things which force you to quit the driving school test
{
	if(DriverTakingTest==playerid)
	{
		KillTimer(TimerDST);
		TimerDSTime=0;
		TimerCD=0;
		DriverTakingTest=-1;
		if(IsPlayerConnected(playerid))
		{
			DisablePlayerCheckpoint(playerid);
			GameTextForPlayer(playerid,"~r~you failed the driving test.",3000,3);
		}
		return 1;
	}
	return 0;
}


public Countdown()
{
   new Num=4;
   new string[2];
   TimerCD++;
   if(Num-TimerCD<=0)
   {
      TimerCD=0;
      GameTextForPlayer(PID,"~r~GO!!!",3000,3);
      SetPlayerCheckpoint(PID,CPDSchoolData[1][0],CPDSchoolData[1][1],CPDSchoolData[1][2],CPDSchoolData[1][3]);
      DSCP[PID]=1;
      TogglePlayerControllable(PID,1);
      TimerDST=SetTimer("CountUpTimeTaken",1000,1);
   }
   else
   {
	  SetTimer("Countdown",1000,0);
      valstr(string,Num-TimerCD);
      GameTextForPlayer(PID,string,800,3);
   }
   return 1;
}

public CountUpTimeTaken()
{
	TimerDSTime++;
}

public OnPlayerEnterCheckpoint(playerid)
{
	switch(DSCP[playerid])
	{
       case 0:
       {
		if(IsPlayerInAnyVehicle(playerid))
        {
        	PID=playerid;
			SetTimer("Countdown",1000,0);
			TogglePlayerControllable(playerid,0);
		}
		else
		{
		    GameTextForPlayer(playerid,"Get in a car!",2000,3);
		}
      }
      case 1:
      {
        if(IsPlayerInAnyVehicle(playerid))
        {
    	    SetPlayerCheckpoint(playerid,CPDSchoolData[2][0],CPDSchoolData[2][1],CPDSchoolData[2][2],CPDSchoolData[2][3]);
			DSCP[playerid]=2;
        }
		else
		{
		    GameTextForPlayer(playerid,"Get in a car!",2000,3);
		}
      }
      case 2..22:
      {
          if(IsPlayerInAnyVehicle(playerid))
          {
        	  SetPlayerCheckpoint(playerid,CPDSchoolData[DSCP[playerid]+1][0],CPDSchoolData[DSCP[playerid]+1][1],CPDSchoolData[DSCP[playerid]+1][2],CPDSchoolData[DSCP[playerid]+1][3]);
        	  DSCP[playerid]++;
          }
          else
		  {
		      GameTextForPlayer(playerid,"Get in a car!",2000,3);
		  }
      }
      case 23:
      {
         DisablePlayerCheckpoint(playerid);
         KillTimer(TimerDST);
         DSCP[playerid]=0;
         new String1[255];
         if(TimerDSTime<=TooFast)
         {
            format(String1,255,"~b~Your time was: %d Seconds.\r\n ~r~You were too wreckless, and failed the course.",TimerDSTime);
         }
         else if(TimerDSTime>=TooSlow)
         {
            format(String1,255,"~b~Your time was: %d Seconds.\r\n ~r~You were hazardously slow, and failed the course.",TimerDSTime);
         }
         else
         {
            format(String1,255,"~b~Your time was: %d Seconds.\r\n ~g~Congratulations! You passed the course.",TimerDSTime);
            Dschool_Yes(playerid); // Gain your licence! :D
         }
         GameTextForPlayer(playerid,String1,4000,3);
         printf("ID:%d finished the Driving School course in %d seconds.",playerid,TimerDSTime);
         TimerDSTime=0;
		 DriverTakingTest=-1;
      }
	}
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    new PName[MAX_PLAYER_NAME];

    GetPlayerName(playerid,PName,sizeof(PName));

	if((newstate==PLAYER_STATE_DRIVER)&&(strcmp(dini_Get("DSchool",PName),"N",false)==0))
	{
	    SendClientMessage(playerid,0xFF000000,"You are driving without a licence. You may be arrested.");
	    printf("%s(ID:%d) is driving without a licence.",PName,playerid);
	}
	else if((newstate==PLAYER_STATE_DRIVER)&&(strcmp(dini_Get("DSchool",PName),"D",false)==0))
	{
	    SendClientMessage(playerid,0xFF000000,"You are driving illegally. You are likely to be arrested.");
	    printf("%s(ID:%d) is driving with a suspended licence.",PName,playerid);
	}
}