#include #include #include #include #define TEAM_PM_MINISTER 1 #define TEAM_TERRORIST 2 #define TEAM_BODYGUARD 3 #define COLOR_YELLOW 0xFFFF00AA #define COLOR_PINK 0xFF66FFAA #define COLOR_GREY 0xAFAFAFAA #define OBJECTIVE_COLOR 0xFFFF00AA #define COLOR_RED 0xCD5C5CAA #define COLOR_LIGHTBLUE 0x48D1CCAA #define COLOR_BLACK 0x000000AA #define COLOR_ERROR 0x800000AA #define COLOR_GREEN 0x00FF00AA static gTeam[MAX_PLAYERS]; new PMTaken=0; new logged[MAX_PLAYERS]; new adminlevel[MAX_PLAYERS]; new money[MAX_PLAYERS]; new playername[MAX_PLAYER_NAME]; //forwards---------------------------------------------------------------------- forward SetPlayerToTeamColor(playerid); forward SetupPlayerForClassSelection(playerid); forward SetPlayerTeamFromClass(playerid,classid); forward ExitTheGameMode(); //main-------------------------------------------------------------------------- main() { print("\n----------------------------------"); print(" PTPM by Jeroen\n"); print("----------------------------------\n"); } //OnGameModeInit---------------------------------------------------------------- public OnGameModeInit() { SetGameModeText("Protect the Prime Minister!"); SetWorldTime(12); ShowNameTags(1); ShowPlayerMarkers(1); AddStaticVehicle(522,1452.0675,-1026.3822,23.3920,182.9263,6,25); // NRG500PmlocBike AddStaticVehicle(522,1456.3346,-1025.3716,23.3999,180.5356,6,25); // NRG500 Pmloc bike AddStaticVehicle(522,1118.2413,-1474.4971,15.3594,0.0000,6,25); // terroristlocnrg500 AddStaticVehicle(522,1116.0920,-1474.0149,15.3677,356.7872,6,25); // terroristlocnrg500 2 AddStaticVehicle(522,1113.4436,-1475.1360,15.3676,0.7135,6,25); // terroristlocnrg500 3 AddPlayerClass(113,1460.8209,-1013.0995,26.8438,181.2402,9,1,23,500,26,500); // pm loc AddPlayerClass(48,1128.0642,-1483.2211,22.7690,359.9126,9,1,23,500,26,500); // Terrorist Loc AddPlayerClass(73,1128.0642,-1483.2211,22.7690,359.9126,9,1,23,500,26,500); // Terrorist Loc AddPlayerClass(121,1460.8209,-1013.0995,26.8438,181.2402,9,1,23,500,26,500); //bodyguard AddPlayerClass(147,1460.8209,-1013.0995,26.8438,181.2402,9,1,23,500,26,500); //bodyguard AddPlayerClass(124,1460.8209,-1013.0995,26.8438,181.2402,9,1,23,500,26,500); //bodyguard return 1; } //OnPlayerConnect--------------------------------------------------------------- public OnPlayerConnect(playerid) { logged[playerid] = 0; if(logged[playerid] == 0) { SetTimer("KickNotLoggedIn", 13000, 0); SendClientMessage(playerid, COLOR_GREEN, "You first have to /login [password], Please, Time left before kick: 13 seconds"); } if(logged[playerid] == 1) { SendClientMessage(playerid, COLOR_GREEN, "You are now logged in, have fun"); KillTimer(2); } SetPlayerColor(playerid,COLOR_GREY); GameTextForPlayer(playerid,"~r~Protect The Prime Minister!",2000,5); return 1; } //SetupPlayerForClassSelection-------------------------------------------------- public SetupPlayerForClassSelection(playerid) { SetPlayerInterior(playerid,0); SetPlayerPos(playerid,1297.3607,-993.8829,148.6437); SetPlayerCameraPos(playerid,1292.3607,-998.8829,148.6437); SetPlayerCameraLookAt(playerid,1297.3607,-993.8829,148.6437); SetPlayerFacingAngle(playerid,91.5127); } //SetPlayerTeamFromClass-------------------------------------------------------- public SetPlayerTeamFromClass(playerid,classid) { if((gTeam[playerid] = TEAM_PM_MINISTER)&&(PMTaken== 1)) GameTextForPlayer(playerid,"Prime Minister already taken",2500,1); if(classid == 0) { gTeam[playerid] = TEAM_PM_MINISTER; } else if(classid == 1 || classid == 2) { gTeam[playerid] = TEAM_TERRORIST; } else if(classid == 3 || classid == 4 || classid == 5) { gTeam[playerid] = TEAM_BODYGUARD; } } //SetPlayerToTeamColor---------------------------------------------------------- public SetPlayerToTeamColor(playerid) { if(gTeam[playerid] == TEAM_PM_MINISTER) { SetPlayerColor(playerid,0xFF66FFAA); } else if(gTeam[playerid] == TEAM_TERRORIST) { SetPlayerColor(playerid,0xFFFF00AA); } else if(gTeam[playerid] == TEAM_BODYGUARD) { SetPlayerColor(playerid,0x00FF00AA); } } //OnPlayerRequestclass---------------------------------------------------------- public OnPlayerRequestClass(playerid, classid) { SetupPlayerForClassSelection(playerid); SetPlayerTeamFromClass(playerid,classid); if(classid == 0) { GameTextForPlayer(playerid,"~y~Prime Minister",1000,5); } else if(classid == 1 || classid == 2) { GameTextForPlayer(playerid,"~r~Terrorist",1000,5); } else if(classid == 3 || classid == 4 || classid == 5) { GameTextForPlayer(playerid,"~g~Bodyguard",1000,5); } } //OnPlayerSpawn----------------------------------------------------------------- public OnPlayerSpawn(playerid) { if(logged[playerid] == 0) { SetTimer("KickNotLoggedIn", 13000, 0); SendClientMessage(playerid, COLOR_RED, "You aren't logged in yet! Login with /login Passwordhere !"); } if(logged[playerid] == 1) { KillTimer(2); SendClientMessage(playerid, COLOR_GREEN, "You are now logged in, have fun :D"); } SetPlayerTeamFromClass(playerid, GetPlayerSkin(playerid)); SetPlayerToTeamColor(playerid); SetPlayerInterior(playerid,0); if(gTeam[playerid] == TEAM_PM_MINISTER) { GameTextForPlayer(playerid,"Avoid the Terrorists!", 6000,5); } else if(gTeam[playerid] == TEAM_TERRORIST) { GameTextForPlayer(playerid,"Kill the ~y~Minister!", 6000,5); } else if(gTeam[playerid] == TEAM_BODYGUARD) { GameTextForPlayer(playerid,"Defend the Minister!", 6000,5); } if((PMTaken==0)&&(gTeam[playerid] == TEAM_PM_MINISTER)) PMTaken = 1; if((gTeam[playerid] == TEAM_PM_MINISTER)&&(PMTaken==1)) return 0; return 1; } //ExitTheGameMode--------------------------------------------------------------- public ExitTheGameMode() { GameModeExit(); } //OnPlayerDeath----------------------------------------------------------------- public OnPlayerDeath(playerid, killerid, reason) { 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); } } new string[256]; new pname[MAX_PLAYER_NAME]; GetPlayerName(playerid,pname,MAX_PLAYER_NAME); if(gTeam[playerid] == TEAM_PM_MINISTER) { if(gTeam[killerid] == TEAM_TERRORIST) { format(string,sizeof(string),"The Prime Minister was killed by a Terrorist! (%s)",pname); } else if(gTeam[killerid] == TEAM_BODYGUARD) { format(string,sizeof(string),"The Prime Minister has been teamkilled! (%s)",pname); } else if(gTeam[killerid] == INVALID_PLAYER_ID) { format(string,sizeof(string),"The Prime Minister is dead, Finaly -.- , Cya next round xD (%s)",pname); } GameTextForAll(string,5000,1); GameModeExit(); } return 1; } // This is a comment // uncomment the line below if you want to write a filterscript //#define FILTERSCRIPT #if defined FILTERSCRIPT public OnFilterScriptInit() { print("\n--------------------------------------"); print(" Blank Filterscript by your name here"); print("--------------------------------------\n"); return 1; } public OnGameModeExit() { SendClientMessage(playerid, COLOR_GREEN, "Cya m8, tnx for playing"); return 1; } public OnPlayerRequestClass(playerid, classid) { SetPlayerPos(playerid, 1958.3783, 1343.1572, 15.3746); SetPlayerCameraPos(playerid, 1958.3783, 1343.1572, 15.3746); SetPlayerCameraLookAt(playerid, 1958.3783, 1343.1572, 15.3746); return 1; } public OnPlayerRequestSpawn(playerid) { return 1; } public OnPlayerConnect(playerid) { return 1; } public OnPlayerDisconnect(playerid, reason) { return 1; } public OnPlayerSpawn(playerid) { return 1; } public OnPlayerDeath(playerid, killerid, reason) { return 1; } public OnVehicleSpawn(vehicleid) { return 1; } public OnVehicleDeath(vehicleid, killerid) { return 1; } public OnPlayerText(playerid, text[]) { return 1; } public OnPlayerPrivmsg(playerid, recieverid, text[]) { return 1; } public OnPlayerCommandText(playerid, cmdtext[]) { new pname[MAX_PLAYER_NAME], string[256]; GetPlayerName(playerid, pname, MAX_PLAYER_NAME); new cmd[256],tmp[256], tmp2[256]; new idx; new string[256]; cmd = strtok(cmdtext, idx); GetPlayerName(playerid, playername, sizeof(playername)); if(strcmp(cmd, "/register", true) == 0) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_YELLOW, "USAGE: /register (password)"); } else { if (!dini_Exists(udb_encode(playername))) { dini_Create(udb_encode(playername)); dini_IntSet(udb_encode(playername), "password", udb_hash(tmp)); dini_IntSet(udb_encode(playername), "adminlevel", 0); dini_IntSet(udb_encode(playername), "money", 0); format(string, sizeof(string), "Account %s Created! You can now login with password: %s.", playername, tmp); SendClientMessage(playerid, COLOR_YELLOW, string); } else { format(string, sizeof(string), "%s Allready registered.", playername,tmp); SendClientMessage(playerid, COLOR_RED, string); } } return 1; } if(strcmp(cmd, "/login", true) == 0) { if(logged[playerid] == 1) { SendClientMessage(playerid, COLOR_RED, "You are allready logged in!"); return 1; } tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_YELLOW, "Use: /login Passwordhere"); } else { if (dini_Exists(udb_encode(playername))) { tmp2 = dini_Get(udb_encode(playername), "password"); if (udb_hash(tmp) != strval(tmp2)) { SendClientMessage(playerid, COLOR_RED, "Wrong password :/ ffs!."); } else { logged[playerid] = 1; money[playerid] = dini_Int(udb_encode(playername), "money"); adminlevel[playerid] = dini_Int(udb_encode(playername), "adminlevel"); format(string, sizeof(string), "%s, Your now logged in!. You have adminlevel %d And have %d dollar", playername, adminlevel[playerid], money[playerid]); SendClientMessage(playerid, COLOR_GREEN, string); GivePlayerMoney(playerid, money[playerid]); } } else { format(string, sizeof(string), "The account %s, doesn't exit yet. Typ /register Passwordhere to create an account!", playername); SendClientMessage(playerid, COLOR_RED, string); } } return 1; } if(strcmp(cmd,"/kick",true) == 0) { GetPlayerName(playerid, sendername, sizeof(sendername)); PlayerInfo[playerid][pAdmin] = dini_Int(udb_encode(sendername), "level"); tmp = strtok(cmdtext, idx); GetPlayerName(playerid, sendername, sizeof(sendername)); if(!strlen(tmp)) { SendClientMessage(playerid,COLOR_BLUE, "Correct Usage: /kick [id] [reason]"); return 1; } giveplayerid = strval(tmp); giveplayerid = strval(tmp); if(logged[playerid] == 1) { if(PlayerInfo[playerid][pAdmin] >= 1) { if(IsPlayerConnected(giveplayerid)) { new length = strlen(cmdtext); while ((idx < length) && (cmdtext[idx] <= ' ')) { idx++; } new offset = idx; new result[64]; while ((idx < length) && ((idx - offset) < (sizeof(result) - 1))) { result[idx - offset] = cmdtext[idx]; idx++; } result[idx - offset] = EOS; if(!strlen(result)) { result = "No reason"; } GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); format(string, sizeof(string), "***ADMIN KICK***: %s was kicked by admin %s for: %s", giveplayer, sendername, result); SendClientMessageToAll(COLOR_BLUE, string); Kick(giveplayerid); new PlayerName[30]; GetPlayerName(playerid, PlayerName, 30); printf("[Command] %s has used /kick to kick %s for: %s", PlayerName, giveplayer, result); } else { format(string, sizeof(string), "%d is not an active player.", giveplayerid); SendClientMessage(playerid, COLOR_RED, string); } } else { SendClientMessage(playerid, COLOR_RED, "You do not have permission to use that command!"); } } else { SendClientMessage(playerid, COLOR_RED, "You Must be logged in to use this command!"); } return 1; } return 0; } strtok( const string[], &index, const seperator[] = " " ) { new index2, result[ 30 ]; index2 = strfind(string, seperator, false, index); if(index2 == -1) { if(strlen(string) > index) { strmid(result, string, index, strlen(string), 30); index = strlen(string); } return result; // This string is empty, probably, if index came to an end } if(index2 > (index + 29)) { index2 = index + 29; strmid(result, string, index, index2, 30); index = index2; return result; } strmid(result, string, index, index2, 30); index = index2 + 1; return result; } public UnJailPlayer(playerid) { SpawnPlayer(playerid); return 1; } public KickNotLoggedIn(playerid) { Kick(playerid); return 1; } #endif