#include #include #include #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); } }