rendered paste body#include <a_samp>
#include <float>
#include <core>
#include <dudb>
#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